<?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>163919</bug_id>
          
          <creation_ts>2016-10-24 16:04:58 -0700</creation_ts>
          <short_desc>WebAssembly: improve compilation error messages</short_desc>
          <delta_ts>2016-12-15 15:43:01 -0800</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147142</dependson>
    
    <dependson>165733</dependson>
    
    <dependson>165812</dependson>
    
    <dependson>165893</dependson>
          <blocked>159775</blocked>
    
    <blocked>165813</blocked>
    
    <blocked>165862</blocked>
    
    <blocked>165924</blocked>
    
    <blocked>165833</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243943</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-24 16:04:58 -0700</bug_when>
    <thetext>The error message in WebAssembly.CompileError are currently pretty limited. Improve them. I&apos;m adding FIXME with this bug ID where that&apos;s the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251288</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-14 17:33:43 -0800</bug_when>
    <thetext>I implemented std::expected in WTF, and plan to use it to improve error messages soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259593</commentid>
    <comment_count>2</comment_count>
      <attachid>297052</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-13 17:23:39 -0800</bug_when>
    <thetext>Created attachment 297052
WIP

WIP patch, all is ready for comments except:
 - WasmB3IRGenerator part which I still have to do.
 - Tests which need to be updated.

I&apos;ll also wait for Saam and Keith&apos;s patches for Element + Global to land before landing this change.

I&apos;m thinking about punting good validator error messages for now. It would be pretty much the same thing as I&apos;ve already done (see fail() helper in WasmParser.h).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259594</commentid>
    <comment_count>3</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-13 17:25:51 -0800</bug_when>
    <thetext>Oh and before it gets asked, same answer as Yusuke on auto -&gt; Result syntax:
  https://bugs.webkit.org/show_bug.cgi?id=164757#c27
:-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259614</commentid>
    <comment_count>4</comment_count>
      <attachid>297052</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 19:16:32 -0800</bug_when>
    <thetext>Comment on attachment 297052
WIP

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

This approach seems reasonable to me.

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:81
&gt; +    if (UNLIKELY(!addResult))                        \
&gt; +    return addResult.getUnexpected();                \
&gt; +    } while (0)

Indentation looks off here.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:323
&gt; +    return PartialResult();

Why not &quot;return { }&quot;
for this and all the other &quot;return PartialResult()&quot;

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:384
&gt; +        WASM_PARSER_FAIL_IF(!parseUInt8(opcode), &quot;can&apos;t get &quot;, segmentNumber, &quot;th Data segment&apos;s opcode&quot;);

JSC&apos;s parser also adds a macro that would be named like so in your naming scheme
WASM_PARSER_FAIL_IF_FALSE()
and then this line of code could be
WASM_PARSER_FAIL_IF_FALS(parseUInt8 ...)

I&apos;m not sure if it&apos;s better or not, but it&apos;s worth mentioning.

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:197
&gt; +    if (UNLIKELY(condition != I32))
&gt; +        return UnexpectedType&lt;Result::ErrorType&gt;(&quot;validation failed: select condition must be i32&quot;);

Seems like you should have a macro for a condition failing here to return a string wrapped in UnexpectedType&lt;Result::ErrorType&gt;

Also these can be ASCIILiteral</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259817</commentid>
    <comment_count>5</comment_count>
      <attachid>297102</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-14 11:06:17 -0800</bug_when>
    <thetext>Created attachment 297102
WIP

This WIP addresses the other comments, and doesn&apos;t yet deal with B3 generation, improving the validation messages, nor the tests.


&gt; &gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:384
&gt; &gt; +        WASM_PARSER_FAIL_IF(!parseUInt8(opcode), &quot;can&apos;t get &quot;, segmentNumber, &quot;th Data segment&apos;s opcode&quot;);
&gt; 
&gt; JSC&apos;s parser also adds a macro that would be named like so in your naming
&gt; scheme
&gt; WASM_PARSER_FAIL_IF_FALSE()
&gt; and then this line of code could be
&gt; WASM_PARSER_FAIL_IF_FALS(parseUInt8 ...)
&gt; 
&gt; I&apos;m not sure if it&apos;s better or not, but it&apos;s worth mentioning.

I think the positive one reads more easily: &quot;fail if this happens&quot; instead of &quot;fail if this doesn&apos;t happen&quot;. I read this as &quot;fail if you can&apos;t parse uint8&quot;. It&apos;s nicer in other places too: &quot;fail if this is empty&quot; and &quot;fail if the type isn&apos;t `void`&quot;.


&gt; &gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:197
&gt; &gt; +    if (UNLIKELY(condition != I32))
&gt; &gt; +        return UnexpectedType&lt;Result::ErrorType&gt;(&quot;validation failed: select condition must be i32&quot;);
&gt; 
&gt; Seems like you should have a macro for a condition failing here to return a
&gt; string wrapped in UnexpectedType&lt;Result::ErrorType&gt;
&gt; 
&gt; Also these can be ASCIILiteral

Yeah I&apos;ll move it to the same thing as the rest of the patch, so it&apos;ll be much nicer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259984</commentid>
    <comment_count>6</comment_count>
      <attachid>297149</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-14 17:38:26 -0800</bug_when>
    <thetext>Created attachment 297149
WIP

This is almost good to go, I need to update the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260026</commentid>
    <comment_count>7</comment_count>
      <attachid>297159</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-14 19:37:02 -0800</bug_when>
    <thetext>Created attachment 297159
WIP

A few tests, more to come. I&apos;m half-online, will add others later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260056</commentid>
    <comment_count>8</comment_count>
      <attachid>297168</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-14 22:13:34 -0800</bug_when>
    <thetext>Created attachment 297168
patch for review

The patch is ready for review, but is still blocked on two patches which I&apos;ll get to tomorrow.

I&apos;ll also add a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260255</commentid>
    <comment_count>9</comment_count>
      <attachid>297168</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 14:13:14 -0800</bug_when>
    <thetext>Comment on attachment 297168
patch for review

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

r=me

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:152
&gt; +        return fail(__VA_ARGS__);                 \

Style: Indentation is wrong here.

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:268
&gt; +        WASM_PARSER_FAIL_IF(!parseVarUInt32(alignment), &quot;can&apos;t get store alignment&quot;);
&gt; +        WASM_PARSER_FAIL_IF(!parseVarUInt32(offset), &quot;can&apos;t get store offset&quot;);
&gt; +        WASM_TRY_POP_EXPRESSION_STACK_INTO(value, &quot;store value&quot;);
&gt; +        WASM_TRY_POP_EXPRESSION_STACK_INTO(pointer, &quot;store pointer&quot;);
&gt; +        WASM_TRY_ADD_TO_CONTEXT(store(static_cast&lt;StoreOpType&gt;(op), pointer, value, offset));

Style: It seems weird that one macro error requires &quot;can&apos;t &lt;blah&quot; and the other doesn&apos;t

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:402
&gt; +            WASM_PARSER_FAIL_IF(exp.kindIndex, &quot;can&apos;t export Table &quot;, exp.kindIndex, &quot; only one Table is currently supported&quot;);

Nit: I think this is easier to understand if you say only a zero index table is allowed. Saying only one doesn&apos;t say what index is expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260282</commentid>
    <comment_count>10</comment_count>
      <attachid>297228</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-15 15:05:56 -0800</bug_when>
    <thetext>Created attachment 297228
patch

Merge, address comments, ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260283</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-15 15:06:58 -0800</bug_when>
    <thetext>Attachment 297228 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:76:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:77:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:78:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:79:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:86:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:89:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260305</commentid>
    <comment_count>12</comment_count>
      <attachid>297228</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-15 15:42:56 -0800</bug_when>
    <thetext>Comment on attachment 297228
patch

Clearing flags on attachment: 297228

Committed r209880: &lt;http://trac.webkit.org/changeset/209880&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260306</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-15 15:43:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297052</attachid>
            <date>2016-12-13 17:23:39 -0800</date>
            <delta_ts>2016-12-14 11:06:17 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>0001-Improve-parse-errors.patch</filename>
            <type>text/plain</type>
            <size>100589</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAxNmM2ZDE0MDhhMDBkNDA0NWViZjYxZjc3ODVlMTE5NTI5ODhkMGMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDEwOjEzOjQ1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gSW1wcm92
ZSBwYXJzZSBlcnJvcnMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwICAgfCAgIDUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oICAgIHwgNDI3ICsrKysrKysrLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgICAgfCA0MDggKysrKysrKy0t
LS0tLS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aCAgICAgIHwgIDQ0ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5o
ICAgICAgICAgICAgfCAgNzMgKysrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwICAgICAgICAgICAgfCAgMjcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TZWN0aW9ucy5oICAgICAgICAgIHwgIDE0ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21WYWxpZGF0ZS5jcHAgICAgICAgIHwgMzA5ICsrKysrKy0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmggICAgICAgICAgfCAgIDMgKy0KIC4uLi93
YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAgICAgIHwgIDYwICsrLQog
MTAgZmlsZXMgY2hhbmdlZCwgNTYzIGluc2VydGlvbnMoKyksIDgwNyBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5k
ZXggYTZjMTFiZC4uMGM2YTkyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTc3LDggKzE3Nyw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAotICAgIHZvaWQgc2V0RXJyb3JN
ZXNzYWdlKFN0cmluZyYmKSB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9Ci0KIHByaXZh
dGU6CiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAg
ICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CkBAIC04NDgsNyArODQ2LDggQEAgc3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZt
LCBjb25zdCB1aW50OF90KiBmdW4KICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwogICAgIEIzSVJH
ZW5lcmF0b3IgY29udGV4dChpbmZvLm1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIEZ1bmN0aW9u
UGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4U3BhY2UsIGluZm8pOwotICAgIGlm
ICghcGFyc2VyLnBhcnNlKCkpCisgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZSgp
OworICAgIGlmICghcGFyc2VSZXN1bHQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAKICAgICBwcm9jZWR1cmUucmVzZXRSZWFjaGFiaWxpdHkoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggMjA3MDE4Yi4u
ZDE5MTBlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmgKQEAgLTM5LDcgKzM5LDcgQEAgZW51bSBjbGFzcyBCbG9ja1R5cGUgewogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGlj
IFBhcnNlciB7CitjbGFzcyBGdW5jdGlvblBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9pZD4gewog
cHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvblR5cGUgRXhw
cmVzc2lvblR5cGU7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpDb250cm9sVHlwZSBD
b250cm9sVHlwZTsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgRnVuY3Rpb25QYXJz
ZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNw
YWNlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlKCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwog
CiAgICAgc3RydWN0IENvbnRyb2xFbnRyeSB7CiAgICAgICAgIEV4cHJlc3Npb25MaXN0IGVuY2xv
c2VkRXhwcmVzc2lvblN0YWNrOwpAQCAtNTcsMjUgKzU3LDI4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VCb2R5KCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
cGFyc2VFeHByZXNzaW9uKE9wVHlwZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZXR1cm4oKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRy
b2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJvZHkoKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBlKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5
cGUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybigpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcG9wRXhwcmVzc2lvblN0YWNrKEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworI2Rl
ZmluZSBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJlc3VsdCwgd2hhdCkgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2V4
cHJlc3Npb25TdGFjay5pc0VtcHR5KCksICJjYW4ndCBwb3AgZW1wdHkgc3RhY2sgaW4gIiB3aGF0
KTsgXAorICAgIHJlc3VsdCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAog
ICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFyeUNh
c2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFyeUNhc2UoKTsK
IAogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBiaW5h
cnlDYXNlKCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5Q2Fz
ZSgpOwogCi0gICAgYm9vbCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkKLSAgICB7
Ci0gICAgICAgIG1fY29udGV4dC5zZXRFcnJvck1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisjZGVmaW5lIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKGFkZF9leHByZXNzaW9uKSBkbyB7IFwKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4
dC5hZGRfZXhwcmVzc2lvbjsgICAgICAgXAorICAgIGlmIChVTkxJS0VMWSghYWRkUmVzdWx0KSkg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIGFkZFJlc3VsdC5nZXRVbmV4cGVj
dGVkKCk7ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAgICAgQ29udGV4dCYg
bV9jb250ZXh0OwogICAgIEV4cHJlc3Npb25MaXN0IG1fZXhwcmVzc2lvblN0YWNrOwpAQCAtOTks
NDEgKzEwMiwzOCBAQCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3RpbwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2UoKQorYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKLSAgICBpZiAo
IW1fY29udGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUtPmFyZ3VtZW50cykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIHVpbnQzMl90IGxvY2FsQ291bnQ7Ci0gICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihsb2NhbENvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZS0+YXJn
dW1lbnRzKSwgImNhbid0IGFkZCAiLCBtX3NpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgIiBh
cmd1bWVudHMgdG8gRnVuY3Rpb24iKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihsb2NhbENvdW50KSwgImNhbid0IGdldCBsb2NhbCBjb3VudCIpOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYobG9jYWxDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJGdW5jdGlvbiBzZWN0aW9uJ3MgbG9jYWwgY291bnQgaXMgdG9vIGJpZyAiLCBs
b2NhbENvdW50KTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsb2NhbENvdW50OyAr
K2kpIHsKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMb2NhbHM7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIobnVtYmVyT2ZMb2NhbHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgICAgIFR5cGUgdHlwZU9mTG9jYWw7Ci0gICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUo
dHlwZU9mTG9jYWwpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICgh
bV9jb250ZXh0LmFkZExvY2FsKHR5cGVPZkxvY2FsLCBudW1iZXJPZkxvY2FscykpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG51bWJlck9mTG9jYWxzKSwgImNhbid0IGdldCBGdW5jdGlvbidzIG51bWJlciBvZiBs
b2NhbHMgaW4gZ3JvdXAgIiwgaSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobnVtYmVy
T2ZMb2NhbHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRnVuY3Rp
b24gc2VjdGlvbidzICIsIGksICJ0aCBsb2NhbCBncm91cCBjb3VudCBpcyB0b28gYmlnICIsIG51
bWJlck9mTG9jYWxzKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5
cGUodHlwZU9mTG9jYWwpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uIGxvY2FsJ3MgdHlwZSBpbiBncm91
cCAiLCBpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9jb250ZXh0LmFkZExvY2Fs
KHR5cGVPZkxvY2FsLCBudW1iZXJPZkxvY2FscyksICJjYW4ndCBhZGQgIiwgbnVtYmVyT2ZMb2Nh
bHMsICIgRnVuY3Rpb24gbG9jYWxzIGZyb20gZ3JvdXAgIiwgaSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIHBhcnNlQm9keSgpOworICAgIGF1dG8gcGFyc2VkQm9keSA9IHBhcnNlQm9keSgpOworICAg
IGlmICghcGFyc2VkQm9keSkKKyAgICAgICAgcmV0dXJuIHBhcnNlZEJvZHkuZ2V0VW5leHBlY3Rl
ZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4K
LWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSgpCithdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUJvZHkoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgd2hp
bGUgKHRydWUpIHsKICAgICAgICAgdWludDhfdCBvcDsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ4
KG9wKSB8fCAhaXNWYWxpZE9wVHlwZShvcCkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgIFdURjo6ZGF0YUxvZ0xuKCJhdHRlbXB0ZWQgdG8gZGVjb2RlIGludmFs
aWQgb3A6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBv
ZmZzZXQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VVSW50OChvcCksICJjYW4ndCBkZWNvZGUgb3Bjb2RlIik7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWlzVmFsaWRPcFR5cGUob3ApLCAiaW52YWxpZCBvcGNv
ZGUgIiwgb3ApOwogCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9n
TG4oInByb2Nlc3Npbmcgb3AgKCIsIG1fdW5yZWFjaGFibGVCbG9ja3MsICIpOiAiLCAgUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihvcCkpLCAiIGF0IG9mZnNldDogIiwgUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKQEAgLTE0MSw3NiArMTQx
LDcwIEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSgpCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAob3AgPT0gT3BUeXBlOjpFbmQgJiYgIW1fY29udHJvbFN0YWNrLnNp
emUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3VucmVhY2hhYmxlQmxvY2tzID8gdHJ1ZSA6IGFk
ZFJldHVybigpOwotCi0gICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzKSB7Ci0gICAgICAg
ICAgICBpZiAoIXBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4o
b3ApKSkgewotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIHVucmVhY2hhYmxlIG9wOiIsIG9wKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIXBhcnNlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKLSAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRv
IHByb2Nlc3Mgb3A6Iiwgb3ApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbV91bnJlYWNoYWJsZUJsb2NrcyA/IFBhcnRpYWxSZXN1bHQo
KSA6IGFkZFJldHVybigpOwogCisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzKQorICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24o
c3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpLCAiY2FuJ3QgcGFyc2UgdW5yZWFjaGFibGUgZXhwcmVz
c2lvbiAiLCBvcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSksICJjYW4ndCBwYXJz
ZSBleHByZXNzaW9uICIsIG9wKTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6YWRkUmV0dXJuKCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OmFkZFJldHVybigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uTGlzdCByZXR1
cm5WYWx1ZXM7CiAgICAgaWYgKG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9IFZvaWQpIHsKICAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmV0dXJuVmFsdWU7Ci0gICAgICAgIGlmICghcG9wRXhwcmVz
c2lvblN0YWNrKHJldHVyblZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyZXR1cm5WYWx1ZSwgInJldHVy
biIpOwogICAgICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKHJldHVyblZhbHVlKTsKICAgICB9CiAK
ICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICByZXR1cm4gbV9jb250ZXh0LmFkZFJl
dHVybihyZXR1cm5WYWx1ZXMpOworICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFJldHVy
bihyZXR1cm5WYWx1ZXMpKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250ZXh0PgogdGVtcGxhdGU8T3BUeXBlIG9wPgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6YmluYXJ5Q2FzZSgpCithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlD
YXNlKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIHJpZ2h0OwotICAg
IGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgRXhwcmVzc2lvblR5cGUgbGVmdDsKLSAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhs
ZWZ0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
OwotICAgIGlmICghbV9jb250ZXh0LnRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCByaWdodCwgcmVz
dWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyhyaWdodCwgImJpbmFyeSByaWdodCIpOworICAgIFdBU01fVFJZX1BPUF9F
WFBSRVNTSU9OX1NUQUNLX0lOVE8obGVmdCwgImJpbmFyeSBsZWZ0Iik7CisKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fY29udGV4dC50ZW1wbGF0ZSBhZGRPcDxvcD4obGVmdCwgcmlnaHQsIHJlc3Vs
dCk7CisgICAgaWYgKFVOTElLRUxZKCFhZGRSZXN1bHQpKQorICAgICAgICByZXR1cm4gYWRkUmVz
dWx0LmdldFVuZXhwZWN0ZWQoKTsKKwogICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1
bHQpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbnRleHQ+CiB0ZW1wbGF0ZTxPcFR5cGUgb3A+Ci1ib29sIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+Ojp1bmFyeUNhc2UoKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5h
cnlDYXNlKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwot
ICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCiAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgIGlmICghbV9jb250ZXh0LnRlbXBs
YXRlIGFkZE9wPG9wPih2YWx1ZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInVuYXJ5Iik7CisK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29udGV4dC50ZW1wbGF0ZSBhZGRPcDxvcD4odmFsdWUs
IHJlc3VsdCk7CisgICAgaWYgKFVOTElLRUxZKCFhZGRSZXN1bHQpKQorICAgICAgICByZXR1cm4g
YWRkUmVzdWx0LmdldFVuZXhwZWN0ZWQoKTsKKwogICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZUV4cHJlc3Npb24oT3BUeXBlIG9wKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHN3aXRjaCAo
b3ApIHsKICNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5
cGU6Om5hbWU6IHJldHVybiBiaW5hcnlDYXNlPE9wVHlwZTo6bmFtZT4oKTsKQEAgLTI0MSwyODYg
KzIzNSwyMTYgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9u
KE9wVHlwZSBvcCkKIAogICAgIGNhc2UgT3BUeXBlOjpTZWxlY3Q6IHsKICAgICAgICAgRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhjb25k
aXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25U
eXBlIHplcm87Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHplcm8pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIG5vblplcm87Ci0g
ICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKG5vblplcm8pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
Y29uZGl0aW9uLCAic2VsZWN0IGNvbmRpdGlvbiIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQ
UkVTU0lPTl9TVEFDS19JTlRPKHplcm8sICJzZWxlY3QgemVybyIpOworICAgICAgICBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKG5vblplcm8sICJzZWxlY3Qgbm9uLXplcm8iKTsK
IAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0
LmFkZFNlbGVjdChjb25kaXRpb24sIG5vblplcm8sIHplcm8sIHJlc3VsdCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFNlbGVj
dChjb25kaXRpb24sIG5vblplcm8sIHplcm8sIHJlc3VsdCkpOwogCiAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3As
IGluYykgY2FzZSBPcFR5cGU6Om5hbWU6CiAgICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9P
UChDUkVBVEVfQ0FTRSkgewogICAgICAgICB1aW50MzJfdCBhbGlnbm1lbnQ7Ci0gICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQogICAgICAgICB1aW50MzJfdCBvZmZzZXQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIo
b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBFeHByZXNzaW9u
VHlwZSBwb2ludGVyOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhwb2ludGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1
bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmxvYWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4o
b3ApLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCks
ICJjYW4ndCBnZXQgbG9hZCBhbGlnbm1lbnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBsb2FkIG9mZnNldCIpOworICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJsb2FkIHBv
aW50ZXIiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2Fz
dDxMb2FkT3BUeXBlPihvcCksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSk7CiAgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9S
RV9PUChDUkVBVEVfQ0FTRSkgewogICAgICAgICB1aW50MzJfdCBhbGlnbm1lbnQ7Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQogICAgICAgICB1aW50MzJfdCBvZmZzZXQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50
MzIob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBFeHByZXNz
aW9uVHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2sodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXI7Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHBvaW50ZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBtX2NvbnRleHQuc3RvcmUoc3RhdGlj
X2Nhc3Q8U3RvcmVPcFR5cGU+KG9wKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCk7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCksICJjYW4ndCBn
ZXQgc3RvcmUgYWxpZ25tZW50Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgc3RvcmUgb2Zmc2V0Iik7CisgICAgICAgIFdB
U01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzdG9yZSB2YWx1ZSIpOwor
ICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJzdG9y
ZSBwb2ludGVyIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHN0b3JlKHN0YXRp
Y19jYXN0PFN0b3JlT3BUeXBlPihvcCksIHBvaW50ZXIsIHZhbHVlLCBvZmZzZXQpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAogICAgIGNhc2UgT3BU
eXBlOjpGMzJDb25zdDoKICAgICBjYXNlIE9wVHlwZTo6STMyQ29uc3Q6IHsKICAgICAgICAgdWlu
dDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoY29uc3RhbnQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihjb25zdGFudCksICJjYW4ndCBwYXJzZSAzMi1iaXQgY29uc3RhbnQiKTsK
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJ
MzIsIGNvbnN0YW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpGNjRDb25zdDoKICAgICBjYXNlIE9wVHlwZTo6
STY0Q29uc3Q6IHsKICAgICAgICAgdWludDY0X3QgY29uc3RhbnQ7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50NjQoY29uc3RhbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQ2NChjb25zdGFudCksICJjYW4ndCBw
YXJzZSA2NC1iaXQgY29uc3RhbnQiKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5k
KG1fY29udGV4dC5hZGRDb25zdGFudChJNjQsIGNvbnN0YW50KSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpHZXRM
b2NhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEV4cHJlc3Np
b25UeXBlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuZ2V0TG9jYWwoaW5kZXgsIHJl
c3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciBnZXRf
bG9jYWwiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9jb250ZXh0LmdldExvY2Fs
KGluZGV4LCByZXN1bHQpLCAiY2FuJ3QgZ2V0X2xvY2FsIGF0IGluZGV4IiwgaW5kZXgpOwogICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OlNldExv
Y2FsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgRXhwcmVzc2lv
blR5cGUgdmFsdWU7Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHZhbHVlKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5zZXRMb2Nh
bChpbmRleCwgdmFsdWUpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHNldF9sb2NhbCIpOworICAgICAgICBX
QVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic2V0X2xvY2FsIik7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCB2YWx1ZSkpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpUZWVMb2NhbDog
ewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihp
bmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1
cm4gbV9jb250ZXh0LnNldExvY2FsKGluZGV4LCBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4n
dCBnZXQgaW5kZXggZm9yIHRlZV9sb2NhbCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImNhbid0IHRlZV9sb2NhbCBvbiBlbXB0eSBl
eHByZXNzaW9uIHN0YWNrIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExv
Y2FsKGluZGV4LCBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Q2FsbDogewogICAgICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChmdW5jdGlvbkluZGV4
ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5k
ZXgpLCAiY2FuJ3QgcGFyc2UgY2FsbCdzIGZ1bmN0aW9uIGluZGV4Iik7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXpl
LCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlvbkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rp
b24gaW5kZXggc3BhY2UgIiwgbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSk7CiAKICAgICAgICAg
Y29uc3QgU2lnbmF0dXJlKiBjYWxsZWVTaWduYXR1cmUgPSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5i
dWZmZXIuZ2V0KClbZnVuY3Rpb25JbmRleF0uc2lnbmF0dXJlOwotCi0gICAgICAgIGlmIChjYWxs
ZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
Y2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID4gbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlvbkluZGV4LCAiIGhhcyAiLCBjYWxs
ZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJl
c3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwg
IiB2YWx1ZXMiKTsKIAogICAgICAgICBzaXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpOwog
ICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7Ci0gICAgICAgIGFyZ3MucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Np
b25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lv
blN0YWNrW2ldKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZl
Q2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpKSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50
cy5zaXplKCksICIgYXJndW1lbnRzIik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFy
Z3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsKICAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKICAgICAgICAg
RXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOwotICAgICAg
ICBpZiAoIW1fY29udGV4dC5hZGRDYWxsKGZ1bmN0aW9uSW5kZXgsIGNhbGxlZVNpZ25hdHVyZSwg
YXJncywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBjYWxsZWVTaWduYXR1cmUs
IGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlF
eHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAogICAgIGNhc2UgT3BUeXBlOjpDYWxsSW5kaXJlY3Q6IHsKICAgICAgICAgdWludDMyX3Qgc2ln
bmF0dXJlSW5kZXg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2lnbmF0dXJlSW5kZXgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7
Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MShyZXNlcnZlZCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG1faW5mby5zaWduYXR1cmVzLnNpemUoKSA8PSBzaWdu
YXR1cmVJbmRleCkKLSAgICAgICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2UoIlRyaWVkIHRv
IHVzZSBhIHNpZ25hdHVyZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB2YWxpZCBzaWduYXR1cmVzIik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNpZ25hdHVyZUlu
ZGV4KSwgImNhbid0IGdldCBjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4Iik7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpLCAiY2FuJ3Qg
Z2V0IGNhbGxfaW5kaXJlY3QncyByZXNlcnZlZCBieXRlIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobV9pbmZvLnNpZ25hdHVyZXMuc2l6ZSgpIDw9IHNpZ25hdHVyZUluZGV4LCAiY2Fs
bF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCAiLCBzaWduYXR1cmVJbmRleCwgIiBleGNlZWRz
IGtub3duIHNpZ25hdHVyZXMgIiwgbV9pbmZvLnNpZ25hdHVyZXMuc2l6ZSgpKTsKIAogICAgICAg
ICBjb25zdCBTaWduYXR1cmUqIGNhbGxlZVNpZ25hdHVyZSA9ICZtX2luZm8uc2lnbmF0dXJlc1tz
aWduYXR1cmVJbmRleF07CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2ln
bmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBpbmRleC4K
LSAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm4gc2V0RXJyb3JNZXNzYWdlKCJOb3QgZW5vdWdoIHZhbHVlcyBvbiB0
aGUgc3RhY2sgZm9yIGNhbGxfaW5kaXJlY3QiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbF9pbmRpcmVj
dCBleHBlY3RzICIsIGFyZ3VtZW50Q291bnQsICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Np
b24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2
YWx1ZXMiKTsKIAogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7Ci0gICAgICAg
IGlmICghYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCi0gICAgICAgICAg
ICByZXR1cm4gc2V0RXJyb3JNZXNzYWdlKCJPdXQgb2YgbWVtb3J5Iik7Ci0KKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBhcmd1bWVudENvdW50LCAiIGNh
bGxfaW5kaXJlY3QgYXJndW1lbnRzIik7CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5k
ZXggPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBhcmd1bWVudENvdW50OwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCk7ICsraSkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRl
eDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJncy51
bmNoZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAogICAgICAgICBFeHByZXNzaW9u
VHlwZSByZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247Ci0gICAgICAgIGlmICghbV9j
b250ZXh0LmFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAg
ICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7
CiAgICAgICAgIFR5cGUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlUmVzdWx0
VHlwZShpbmxpbmVTaWduYXR1cmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUp
LCAiY2FuJ3QgZ2V0IGJsb2NrJ3MgaW5saW5lIHNpZ25hdHVyZSIpOwogICAgICAgICBtX2NvbnRy
b2xTdGFjay5hcHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgbV9jb250ZXh0LmFk
ZEJsb2NrKGlubGluZVNpZ25hdHVyZSkgfSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0g
RXhwcmVzc2lvbkxpc3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKICAgICAgICAgVHlwZSBpbmxp
bmVTaWduYXR1cmU7Ci0gICAgICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVy
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgbG9vcCdz
IGlubGluZSBzaWduYXR1cmUiKTsKICAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsgV1RG
TW92ZShtX2V4cHJlc3Npb25TdGFjayksIG1fY29udGV4dC5hZGRMb29wKGlubGluZVNpZ25hdHVy
ZSkgfSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2Fz
ZSBPcFR5cGU6OklmOiB7CiAgICAgICAgIFR5cGUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBp
ZiAoIXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYg
KCFwb3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sOwotICAgICAgICBpZiAoIW1fY29udGV4
dC5hZGRJZihjb25kaXRpb24sIGlubGluZVNpZ25hdHVyZSwgY29udHJvbCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1
bHRUeXBlKGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgaWYncyBpbmxpbmUgc2lnbmF0dXJl
Iik7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9u
LCAiaWYgY29uZGl0aW9uIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElm
KGNvbmRpdGlvbiwgaW5saW5lU2lnbmF0dXJlLCBjb250cm9sKSk7CiAgICAgICAgIG1fY29udHJv
bFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBjb250cm9sIH0pOwog
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBl
OjpFbHNlOiB7Ci0gICAgICAgIGlmICghbV9jb250cm9sU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBzZXRFcnJvck1lc3NhZ2UoIkF0dGVtcHRlZCB0byB1c2UgZWxzZSBibG9jayBhdCB0aGUg
dG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVsc2UobV9jb250cm9sU3RhY2su
bGFzdCgpLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suaXNF
bXB0eSgpLCAiY2FuJ3QgdXNlIGVsc2UgYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0
aW9uIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVsc2UobV9jb250cm9s
U3RhY2subGFzdCgpLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICBt
X2V4cHJlc3Npb25TdGFjay5zaHJpbmsoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpCcjoKICAgICBjYXNlIE9w
VHlwZTo6QnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIodGFyZ2V0KSB8fCB0YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYgKG9wID09IE9wVHlw
ZTo6QnJJZikgewotICAgICAgICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9u
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQorICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YXJnZXQpLCAiY2FuJ3QgZ2V0
IGJyIC8gYnJfaWYncyB0YXJnZXQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YXJn
ZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAiYnIgLyBicl9pZidzIHRhcmdldCAiLCB0YXJn
ZXQsICIgZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgp
KTsKKyAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6QnJJZikKKyAgICAgICAgICAgIFdBU01fVFJZ
X1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiYnIgLyBicl9pZiBjb25kaXRp
b24iKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7
CiAKICAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xT
dGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKIAotICAgICAgICByZXR1cm4g
bV9jb250ZXh0LmFkZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsK
KyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQnJhbmNoKGRhdGEsIGNvbmRpdGlv
biwgbV9leHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBjYXNlIE9wVHlwZTo6QnJUYWJsZTogewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZlRhcmdl
dHM7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobnVtYmVyT2ZUYXJnZXRzKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOwor
ICAgICAgICB1aW50MzJfdCBkZWZhdWx0VGFyZ2V0OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihudW1iZXJPZlRhcmdldHMpLCAiY2FuJ3QgZ2V0IHRoZSBudW1i
ZXIgb2YgdGFyZ2V0cyBmb3IgYnJfdGFibGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihudW1iZXJPZlRhcmdldHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
LCAiYnJfdGFibGUncyBudW1iZXIgb2YgdGFyZ2V0cyBpcyB0b28gYmlnICIsIG51bWJlck9mVGFy
Z2V0cyk7CiAKICAgICAgICAgVmVjdG9yPENvbnRyb2xUeXBlKj4gdGFyZ2V0czsKLSAgICAgICAg
aWYgKCF0YXJnZXRzLnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJPZlRhcmdldHMpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXRhcmdl
dHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mVGFyZ2V0cyksICJjYW4ndCBhbGxvY2F0ZSBt
ZW1vcnkgZm9yICIsIG51bWJlck9mVGFyZ2V0cywgIiBicl90YWJsZSB0YXJnZXRzIik7CiAgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRhcmdldHM7ICsraSkgewogICAg
ICAgICAgICAgdWludDMyX3QgdGFyZ2V0OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQz
Mih0YXJnZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
aWYgKHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YXJnZXQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCB0YXJnZXQgZm9yIGJyX3RhYmxlIik7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhcmdldCA+PSBtX2NvbnRyb2xTdGFj
ay5zaXplKCksICJicl90YWJsZSdzICIsIGksICJ0aCB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2Vl
ZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7CiAgICAgICAg
ICAgICB0YXJnZXRzLnVuY2hlY2tlZEFwcGVuZCgmbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3Rh
Y2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGEpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdWludDMyX3QgZGVmYXVsdFRhcmdldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihk
ZWZhdWx0VGFyZ2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAo
ZGVmYXVsdFRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOwotICAgICAgICBp
ZiAoIXBvcEV4cHJlc3Npb25TdGFjayhjb25kaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkU3dpdGNoKGNvbmRpdGlv
biwgdGFyZ2V0cywgbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRl
ZmF1bHRUYXJnZXRdLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGRlZmF1bHRUYXJnZXQpLCAiY2FuJ3QgZ2V0IGRlZmF1bHQgdGFyZ2V0IGZvciBicl90YWJs
ZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQgPj0gbV9jb250
cm9sU3RhY2suc2l6ZSgpLCAiYnJfdGFibGUncyBkZWZhdWx0IHRhcmdldCAiLCBkZWZhdWx0VGFy
Z2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUo
KSk7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9u
LCAiYnJfdGFibGUgY29uZGl0aW9uIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZFN3aXRjaChjb25kaXRpb24sIHRhcmdldHMsIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0
YWNrLnNpemUoKSAtIDEgLSBkZWZhdWx0VGFyZ2V0XS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9u
U3RhY2spKTsKIAogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6
OlJldHVybjogewpAQCAtNTMyLDg0ICs0NTYsODIgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkKICAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgYSBsaXR0bGUgd2VpcmQgaW4gdGhhdCBpdCB3aWxsIG1vZGlmeSB0aGUgZXhwcmVzc2lvblN0
YWNrIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBibG9jay4KICAgICAgICAgLy8gVGhhdCdzIGEgbGl0
dGxlIHRvbyBlZmZlY3RmdWwgZm9yIG1lIGJ1dCBJIGRvbid0IGhhdmUgYSBiZXR0ZXIgQVBJIHJp
Z2h0IG5vdy4KICAgICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0MzUzCi0gICAgICAgIGlmICghbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1f
ZXhwcmVzc2lvblN0YWNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsK
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBPcFR5cGU6OlVucmVhY2hhYmxlOiB7CiAgICAgICAgIG1fdW5yZWFjaGFibGVC
bG9ja3MgPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RHJvcDogewotICAgICAgICBpZiAoIW1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKSkgewotICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKCJBdHRlbXB0ZWQg
dG8gZHJvcCBhbiBleHByZXNzaW9uIGZyb20gYW4gZW1wdHkgc3RhY2suIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FuJ3QgZHJvcCBvbiBlbXB0eSBzdGFjayIpOwog
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Tm9wOiB7
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAg
IGNhc2UgT3BUeXBlOjpHcm93TWVtb3J5OgorICAgICAgICByZXR1cm4gZmFpbCgibm90IHlldCBp
bXBsZW1lbnRlZDogZ3Jvd19tZW1vcnkiKTsgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQu
CisKICAgICBjYXNlIE9wVHlwZTo6Q3VycmVudE1lbW9yeToKKyAgICAgICAgcmV0dXJuIGZhaWwo
Im5vdCB5ZXQgaW1wbGVtZW50ZWQ6IGN1cnJlbnRfbWVtb3J5Iik7IC8vIEZJWE1FOiBOb3QgeWV0
IGltcGxlbWVudGVkLgorCiAgICAgY2FzZSBPcFR5cGU6OkdldEdsb2JhbDoKLSAgICBjYXNlIE9w
VHlwZTo6U2V0R2xvYmFsOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgICAgICByZXR1cm4gZmFpbCgibm90
IHlldCBpbXBsZW1lbnRlZDogZ2V0X2dsb2JhbCIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1l
bnRlZC4KKworICAgIGNhc2UgT3BUeXBlOjpTZXRHbG9iYWw6CisgICAgICAgIHJldHVybiBmYWls
KCJub3QgeWV0IGltcGxlbWVudGVkOiBzZXRfZ2xvYmFsIik7IC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkLgogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQorYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fdW5yZWFjaGFibGVCbG9ja3MpOwogICAgIHN3aXRjaCAo
b3ApIHsKICAgICBjYXNlIE9wVHlwZTo6RWxzZTogewogICAgICAgICBpZiAobV91bnJlYWNoYWJs
ZUJsb2NrcyA+IDEpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAKICAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFz
dCgpOwogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKLSAgICAgICAgaWYgKCFtX2Nv
bnRleHQuYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YS5jb250cm9sRGF0YSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVsc2VU
b1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suc2hyaW5rKDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RW5kOiB7CiAgICAgICAgIGlmIChtX3VucmVhY2hh
YmxlQmxvY2tzID09IDEpIHsKICAgICAgICAgICAgIENvbnRyb2xFbnRyeSBkYXRhID0gbV9jb250
cm9sU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVuZFRv
VW5yZWFjaGFibGUoZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhKSk7
CiAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGRhdGEuZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2spOwogICAgICAgICB9CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MtLTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2Fz
ZSBPcFR5cGU6Okxvb3A6CiAgICAgY2FzZSBPcFR5cGU6OklmOgogICAgIGNhc2UgT3BUeXBlOjpC
bG9jazogewogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzKys7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIC8vIHR3byBpbW1lZGlhdGUg
Y2FzZXMKICAgICBjYXNlIE9wVHlwZTo6QnI6CiAgICAgY2FzZSBPcFR5cGU6OkJySWY6IHsKICAg
ICAgICAgdWludDMyX3QgdW51c2VkOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHVudXNl
ZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBwYXJzZVZhclVJ
bnQzMih1bnVzZWQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mih1bnVzZWQpLCAiY2FuJ3QgZ2V0IGJyIC8gYnJfaWYgaW4gdW5yZWFjaGFibGUgY29udGV4dCIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAi
Y2FuJ3QgZ2V0IGJyIC8gYnJfaWYgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIC8vIG9uZSBpbW1lZGlhdGUgY2FzZXMKQEAgLTYyMCwy
NSArNTQyLDE0IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFi
bGVFeHByZXNzaW9uKE9wVHlwZSBvcCkKICAgICBjYXNlIE9wVHlwZTo6U2V0TG9jYWw6CiAgICAg
Y2FzZSBPcFR5cGU6OkdldExvY2FsOiB7CiAgICAgICAgIHVpbnQzMl90IHVudXNlZDsKLSAgICAg
ICAgcmV0dXJuIHBhcnNlVmFyVUludDMyKHVudXNlZCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4ndCBnZXQgY29uc3QgLyBsb2NhbCBp
biB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cG9wRXhwcmVzc2lvblN0YWNrKEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCi17Ci0gICAgaWYg
KG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewotICAgICAgICByZXN1bHQgPSBtX2V4cHJlc3Np
b25TdGFjay50YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBz
ZXRFcnJvck1lc3NhZ2UoIkF0dGVtcHRlZCB0byB1c2UgYSBzdGFjayB2YWx1ZSB3aGVuIG5vbmUg
ZXhpc3RlZCIpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA0ZTVkMDBkLi44NzlmZjAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMzgsNTMgKzM4
LDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXN0YXRpYyBjb25z
dCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKK2F1
dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIG1fbW9kdWxlID0gc3Rk
OjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZvcm1hdGlvbj4oKTsKLQorICAgIG1fcmVzdWx0Lm1vZHVs
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TW9kdWxlSW5mb3JtYXRpb24+KCk7CiAgICAgY29uc3Qgc2l6
ZV90IG1pblNpemUgPSA4OwotICAgIGlmIChsZW5ndGgoKSA8IG1pblNpemUpIHsKLSAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSAiTW9kdWxlIGlzICIgKyBTdHJpbmc6Om51bWJlcihsZW5ndGgoKSkg
KyAiIGJ5dGVzLCBleHBlY3RlZCBhdCBsZWFzdCAiICsgU3RyaW5nOjpudW1iZXIobWluU2l6ZSkg
KyAiIGJ5dGVzIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWNvbnN1
bWVDaGFyYWN0ZXIoMCkgfHwgIWNvbnN1bWVTdHJpbmcoImFzbSIpKSB7Ci0gICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gIk1vZHVsZXMgZG9lc24ndCBzdGFydCB3aXRoICdcXDBhc20nIjsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIHVpbnQzMl90IHZlcnNpb25OdW1iZXI7Ci0g
ICAgaWYgKCFwYXJzZVVJbnQzMih2ZXJzaW9uTnVtYmVyKSkgewotICAgICAgICAvLyBGSVhNRSBp
bXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzkxOQotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB2ZXJz
aW9uIG51bWJlciI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodmVy
c2lvbk51bWJlciAhPSBleHBlY3RlZFZlcnNpb25OdW1iZXIpIHsKLSAgICAgICAgLy8gRklYTUUg
aW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjM5MTkKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAidW5leHBlY3RlZCB2ZXJzaW9u
IG51bWJlciI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KIAotICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9jZXNzaW5nIGhlYWRlci4iKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGxlbmd0aCgpIDwgbWluU2l6ZSwgImV4cGVjdGVkIGEgbW9k
dWxlIG9mIGF0IGxlYXN0ICIsIG1pblNpemUsICIgYnl0ZXMiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFjb25zdW1lQ2hhcmFjdGVyKDApIHx8ICFjb25zdW1lU3RyaW5nKCJhc20iKSwgIm1v
ZHVsZXMgZG9lc24ndCBzdGFydCB3aXRoICdcXDBhc20nIik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VVSW50MzIodmVyc2lvbk51bWJlciksICJjYW4ndCBwYXJzZSB2ZXJzaW9uIG51
bWJlciIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodmVyc2lvbk51bWJlciAhPSBleHBlY3Rl
ZFZlcnNpb25OdW1iZXIsICJ1bmV4cGVjdGVkIHZlcnNpb24gbnVtYmVyICIsIHZlcnNpb25OdW1i
ZXIsICIgZXhwZWN0ZWQgIiwgZXhwZWN0ZWRWZXJzaW9uTnVtYmVyKTsKIAogICAgIFNlY3Rpb25z
OjpTZWN0aW9uIHByZXZpb3VzU2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOwogICAgIHdoaWxl
IChtX29mZnNldCA8IGxlbmd0aCgpKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJTdGFydGluZyB0byBwYXJzZSBuZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAi
LCBtX29mZnNldCk7Ci0KICAgICAgICAgdWludDhfdCBzZWN0aW9uQnl0ZTsKLSAgICAgICAgaWYg
KCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRlKSkgewotICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92
ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM5MTkKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBzZWN0aW9u
IGJ5dGUiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAKLSAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIlNlY3Rpb24gYnl0ZTogIiwgc2Vj
dGlvbkJ5dGUpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ3KHNlY3Rp
b25CeXRlKSwgImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKIAogICAgICAgICBTZWN0aW9uczo6
U2VjdGlvbiBzZWN0aW9uID0gU2VjdGlvbnM6OlVua25vd247CiAgICAgICAgIGlmIChzZWN0aW9u
Qnl0ZSkgewpAQCAtOTIsMTM0ICs2MSw4OCBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQog
ICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0aW9uczo6U2VjdGlvbj4o
c2VjdGlvbkJ5dGUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFTZWN0aW9uczo6dmFsaWRh
dGVPcmRlcihwcmV2aW91c1NlY3Rpb24sIHNlY3Rpb24pKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiaW52YWxpZCBzZWN0
aW9uIG9yZGVyIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCiAgICAg
ICAgIHVpbnQzMl90IHNlY3Rpb25MZW5ndGg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIo
c2VjdGlvbkxlbmd0aCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVz
c2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBsZW5ndGgiOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNlY3Rp
b25MZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBp
bXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzkxOQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAic2VjdGlvbiBjb250ZW50
IHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVNlY3Rpb25zOjp2YWxp
ZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbiksICJpbnZhbGlkIHNlY3Rpb24gb3Jk
ZXIsICIsIHByZXZpb3VzU2VjdGlvbiwgIiBmb2xsb3dlZCBieSAiLCBzZWN0aW9uKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VjdGlvbkxlbmd0aCksICJj
YW4ndCBnZXQgIiwgc2VjdGlvbiwgIiBzZWN0aW9uJ3MgbGVuZ3RoIik7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoc2VjdGlvbkxlbmd0aCA+IGxlbmd0aCgpIC0gbV9vZmZzZXQsIHNlY3Rp
b24sICJzZWN0aW9uIG9mIHNpemUgIiwgc2VjdGlvbkxlbmd0aCwgIiB3b3VsZCBvdmVyZmxvdyBN
b2R1bGUncyBzaXplIik7CiAKICAgICAgICAgYXV0byBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25M
ZW5ndGg7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FIGlt
cHJvdmUgZXJyb3IgbWVzc2FnZSBpbiBtYWNybyBiZWxvdyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0jZGVmaW5lIFdBU01fU0VDVElPTl9QQVJTRShOQU1F
LCBJRCwgREVTQ1JJUFRJT04pIFwKLSAgICAgICAgY2FzZSBTZWN0aW9uczo6TkFNRTogeyBcCi0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkgXAotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFy
c2luZyAiIERFU0NSSVBUSU9OKTsgXAotICAgICAgICAgICAgaWYgKCFwYXJzZSAjIyBOQU1FKCkp
IHsgXAotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIHNl
Y3Rpb24gIiAjTkFNRSAiOiAiIERFU0NSSVBUSU9OOyBcCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgICAgIGJyZWFrOyBcCisjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgY2FzZSBTZWN0aW9uczo6TkFNRTogeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZSAjIyBOQU1FKCk7ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIXJlc3VsdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChyZXN1bHQuZXJyb3IoKSk7ICAgICAgICAg
ICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0KICAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNU
SU9OKFdBU01fU0VDVElPTl9QQVJTRSkKICN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKIAogICAg
ICAgICBjYXNlIFNlY3Rpb25zOjpVbmtub3duOiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlVua25vd24gc2VjdGlvbiwgc2tpcHBpbmcuIik7
CiAgICAgICAgICAgICAvLyBJZ25vcmUgc2VjdGlvbidzIG5hbWUgTEVCIGFuZCBieXRlczogdGhl
eSdyZSBhbHJlYWR5IGluY2x1ZGVkIGluIHNlY3Rpb25MZW5ndGguCiAgICAgICAgICAgICBtX29m
ZnNldCArPSBzZWN0aW9uTGVuZ3RoOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJG
aW5pc2hlZCBwYXJzaW5nIHNlY3Rpb24uIik7Ci0KLSAgICAgICAgaWYgKGVuZCAhPSBtX29mZnNl
dCkgewotICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNlY3Rpb24i
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZW5kICE9IG1fb2Zmc2V0LCAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVu
ZCBvZiAiLCBzZWN0aW9uLCAiIHNlY3Rpb24iKTsKIAogICAgICAgICBwcmV2aW91c1NlY3Rpb24g
PSBzZWN0aW9uOwogICAgIH0KIAotICAgIC8vIFRPRE8KLSAgICBtX2ZhaWxlZCA9IGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXVEZNb3ZlKG1fcmVzdWx0KTsKIH0KIAotYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBl
KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFy
c2VWYXJVSW50MzIoY291bnQpCi0gICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKQotICAgICAgICB8fCAhbV9tb2R1bGUtPnNpZ25hdHVyZXMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh2
ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIiAgY291bnQ6ICIsIGNvdW50KTsKKworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBl
IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQu
bW9kdWxlLT5zaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBjb3VudCwgIiBlbnRyaWVz
Iik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAg
ICBpbnQ4X3QgdHlwZTsKLSAgICAgICAgaWYgKCFwYXJzZUludDcodHlwZSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlICE9IEZ1bmMpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
TG4oIkdvdCBmdW5jdGlvbiB0eXBlLiIpOwotCiAgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291
bnQ7CiAgICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudFR5cGVzOwotICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpCi0gICAgICAgICAgICB8fCBhcmd1bWVudENvdW50
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQotICAgICAgICAgICAgfHwg
IWFyZ3VtZW50VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiICBhcmd1bWVudCBjb3VudDogIiwgYXJndW1lbnRDb3VudCk7CisKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVu
YywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihhcmd1bWVudENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwg
aSwgInRoIGFyZ3VtZW50IGNvdW50IGlzIHRvbyBiaWcgIiwgYXJndW1lbnRDb3VudCk7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3VtZW50VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBz
ZWN0aW9uJ3MgIiwgaSwgInRoICIsIGFyZ3VtZW50Q291bnQsICIgYXJndW1lbnRzIik7CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewogICAg
ICAgICAgICAgVHlwZSBhcmd1bWVudFR5cGU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlUmVzdWx0
VHlwZShhcmd1bWVudFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlUmVzdWx0VHlwZShhcmd1bWVudFR5cGUp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBhcmd1bWVudCBUeXBlIik7CiAgICAgICAgICAgICBhcmd1
bWVudFR5cGVzLnVuY2hlY2tlZEFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICB9CiAKICAg
ICAgICAgdWludDhfdCByZXR1cm5Db3VudDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHJl
dHVybkNvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXR1cm5Db3VudCksICJjYW4ndCBnZXQgIiwgaSwg
InRoIFR5cGUncyByZXR1cm4gY291bnQiKTsKICAgICAgICAgVHlwZSByZXR1cm5UeXBlOwogCi0g
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKHJldHVybkNvdW50KTsK
LQogICAgICAgICBpZiAocmV0dXJuQ291bnQpIHsKICAgICAgICAgICAgIFR5cGUgdmFsdWU7Ci0g
ICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVl
VHlwZSh2YWx1ZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyByZXR1cm4gdmFsdWUiKTsK
ICAgICAgICAgICAgIHJldHVyblR5cGUgPSBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFR5cGU6OlZvaWQ7CiAKLSAgICAg
ICAgbV9tb2R1bGUtPnNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5kKHsgcmV0dXJuVHlwZSwgV1RG
TW92ZShhcmd1bWVudFR5cGVzKSB9KTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1
cmVzLnVuY2hlY2tlZEFwcGVuZCh7IHJldHVyblR5cGUsIFdURk1vdmUoYXJndW1lbnRUeXBlcykg
fSk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBQYXJ0aWFsUmVzdWx0KCk7
CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCithdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3QgaW1wb3J0
Q291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbXBvcnRDb3VudCkKLSAgICAgICAgfHwg
aW1wb3J0Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAg
ICAgIHx8ICFtX21vZHVsZS0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQp
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLSAgICAgICAgfHwgIW1fbW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGltcG9ydENvdW50KSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4
IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgICAgIHx8ICFtX2Z1bmN0aW9uSW5kZXhTcGFjZS50cnlS
ZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpKSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVz
IHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuIFdlJ2xsIGFsbG9jYXRlIHNvbWUgbW9yZSBo
ZXJlIHdoZW4gd2Uga25vdyBob3cgbWFueSBmdW5jdGlvbnMgdG8gZXhwZWN0LgotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW1w
b3J0Q291bnQpLCAiY2FuJ3QgZ2V0IEltcG9ydCBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGltcG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSwgIkltcG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBpbXBvcnRD
b3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRz
LnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnRzIik7IC8vIEZJWE1FIHRoaXMgb3Zl
ci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy50cnlSZXNlcnZlQ2Fw
YWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwg
aW1wb3J0Q291bnQsICIgaW1wb3J0IGZ1bmN0aW9ucyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxs
b2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShpbXBv
cnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3Vu
dCwgIiBmdW5jdGlvbnMgaW4gdGhlIGluZGV4IHNwYWNlIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1h
bGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4gV2UnbGwgYWxsb2NhdGUgc29t
ZSBtb3JlIGhlcmUgd2hlbiB3ZSBrbm93IGhvdyBtYW55IGZ1bmN0aW9ucyB0byBleHBlY3QuCiAK
ICAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciA8IGltcG9y
dENvdW50OyArK2ltcG9ydE51bWJlcikgewogICAgICAgICBJbXBvcnQgaW1wOwpAQCAtMjI3LDI5
MyArMTUwLDI1NiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAgICB1
aW50MzJfdCBmaWVsZExlbjsKICAgICAgICAgU3RyaW5nIG1vZHVsZVN0cmluZzsKICAgICAgICAg
U3RyaW5nIGZpZWxkU3RyaW5nOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxl
bikKLSAgICAgICAgICAgIHx8ICFjb25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVs
ZUxlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIobW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBsZW5ndGgiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcobW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4p
LCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIG9m
IGxlbmd0aCAiLCBtb2R1bGVMZW4pOwogICAgICAgICBpbXAubW9kdWxlID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVTdHJpbmcpOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGZpZWxkTGVuKQotICAgICAgICAgICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3Ry
aW5nLCBmaWVsZExlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIs
IGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIGluIG1vZHVsZSAn
IiwgbW9kdWxlU3RyaW5nLCAiJyIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25z
dW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9y
dE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbiwg
IiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIiciKTsKICAgICAgICAgaW1wLmZpZWxkID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBmaWVsZFN0cmluZyk7Ci0gICAgICAgIGlmICgh
cGFyc2VFeHRlcm5hbEtpbmQoaW1wLmtpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGltcC5raW5k
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVs
ZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAg
ICAgIHN3aXRjaCAoaW1wLmtpbmQpIHsKICAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246
IHsKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpCi0gICAgICAg
ICAgICAgICAgfHwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX21vZHVsZS0+c2lnbmF0dXJl
cy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaW1w
LmtpbmRJbmRleCA9IG1fbW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMuc2l6ZSgpOwotICAgICAgICAg
ICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbZnVuY3Rpb25T
aWduYXR1cmVJbmRleF07Ci0gICAgICAgICAgICBtX21vZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOwotICAgICAgICAgICAgbV9mdW5jdGlvbkluZGV4U3Bh
Y2UudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdl
dCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9k
dWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBt
X3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWdu
YXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1
cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1
cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgaW1wLmtpbmRJbmRleCA9IG1fcmVzdWx0Lm1v
ZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZSogc2ln
bmF0dXJlID0gJm1fcmVzdWx0Lm1vZHVsZS0+c2lnbmF0dXJlc1tmdW5jdGlvblNpZ25hdHVyZUlu
ZGV4XTsKKyAgICAgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnVuY2hl
Y2tlZEFwcGVuZChzaWduYXR1cmUpOworICAgICAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25JbmRl
eFNwYWNlLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6VGFibGU6IHsKICAgICAgICAgICAgIC8v
IEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKICAgICAgICAg
ICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeUhl
bHBlcihpc0ltcG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEV4dGVybmFsOjpHbG9iYWw6IHsKICAgICAgICAgICAgIC8vIEZJWE1FIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKICAgICAgICAgICAg
IC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxlIGdsb2JhbCB2YXJpYWJsZXMgY2FuIGJlIGlt
cG9ydGVkLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBtX21vZHVsZS0+
aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoaW1wKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5p
bXBvcnRzLnVuY2hlY2tlZEFwcGVuZChpbXApOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBQYXJ0aWFsUmVzdWx0KCk7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZUZ1bmN0aW9uKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIo
Y291bnQpCi0gICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKQotICAgICAgICB8fCAhbV9tb2R1bGUtPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVz
LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkKLSAgICAgICAgfHwgIW1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkKLSAgICAgICAgfHwgIW1fZnVuY3Rp
b25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXpl
KCkgKyBjb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidz
IGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9v
IGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxl
LT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgRnVuY3Rpb24gc2ln
bmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0LmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICJGdW5jdGlvbiBsb2NhdGlvbnMiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2UudHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkgKyBjb3VudCksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBtb3JlIGZ1bmN0aW9u
cyBpbiB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2UiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7Ci0gICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIodHlwZU51bWJlcikKLSAgICAgICAgICAgIHx8IHR5cGVO
dW1iZXIgPj0gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBl
TnVtYmVyKSwgImNhbid0IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9yZXN1bHQubW9kdWxl
LT5zaWduYXR1cmVzLnNpemUoKSwgaSwgInRoIEZ1bmN0aW9uIHR5cGUgbnVtYmVyIGlzIGludmFs
aWQgIiwgdHlwZU51bWJlcik7CiAKLSAgICAgICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSAmbV9t
b2R1bGUtPnNpZ25hdHVyZXNbdHlwZU51bWJlcl07CisgICAgICAgIFNpZ25hdHVyZSogc2lnbmF0
dXJlID0gJm1fcmVzdWx0Lm1vZHVsZS0+c2lnbmF0dXJlc1t0eXBlTnVtYmVyXTsKICAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgogICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwogICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9tb2R1bGUt
PmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOwot
ICAgICAgICBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNrZWRBcHBlbmQoeyBzdGFy
dCwgZW5kIH0pOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNrZWRBcHBlbmQo
c2lnbmF0dXJlKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKKyAgICAgICAgbV9yZXN1bHQuZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5LnVuY2hlY2tlZEFwcGVuZCh7IHN0YXJ0LCBlbmQgfSk7Cisg
ICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNrZWRBcHBlbmQoc2lnbmF0
dXJlKTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUGFydGlhbFJlc3Vs
dCgpOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCithdXRvIE1vZHVsZVBh
cnNlcjo6cGFyc2VUYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRSBpbXBs
ZW1lbnQgdGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
NQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIFBhcnRpYWxSZXN1bHQoKTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNl
TWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1v
cnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIC8vIFdlIGRv
bid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBpbXBvcnQgb3IgZGVmaW5p
dGlvbi4KLSAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgdWludDhfdCBmbGFnczsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICB1aW50MzJfdCBpbml0aWFsOwotICAgIGlmICghcGFy
c2VWYXJVSW50MzIoaW5pdGlhbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICgh
UGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSwgIk1lbW9yeSBzZWN0
aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJjYW4ndCBwYXJzZSBNZW1vcnkg
ZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFs
KSwgImNhbid0IHBhcnNlIE1lbW9yeSBpbml0aWFsIHBhZ2UgY291bnQiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCksICJNZW1vcnkncyBpbml0
aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CiAKICAgICBQYWdl
Q291bnQgaW5pdGlhbFBhZ2VDb3VudChpbml0aWFsKTsKLQogICAgIFBhZ2VDb3VudCBtYXhpbXVt
UGFnZUNvdW50OwogICAgIGlmIChmbGFncykgewogICAgICAgICB1aW50MzJfdCBtYXhpbXVtOwot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG1heGltdW0pKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKG1heGltdW0pKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKG1heGltdW0pLCAiY2FuJ3QgcGFyc2UgTWVtb3J5J3MgbWF4aW11bSBwYWdl
IGNvdW50Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxp
ZChtYXhpbXVtKSwgIk1lbW9yeSdzIG1heGltdW0gcGFnZSBjb3VudCBvZiAiLCBtYXhpbXVtLCAi
IGlzIGludmFsaWQiKTsKICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudChtYXhp
bXVtKTsKLSAgICAgICAgaWYgKGluaXRpYWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50KQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGlu
aXRpYWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50LCAiTWVtb3J5IGhhcyBhIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4
aW11bSAiLCBtYXhpbXVtKTsKICAgICB9CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNp
emVzID0geyAwIH07Ci0gICAgbV9tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGlu
aXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIHBpbm5lZFNpemVzLCBpc0ltcG9ydCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV9yZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJ
bmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBwaW5uZWRTaXpl
cywgaXNJbXBvcnQpOworICAgIHJldHVybiBQYXJ0aWFsUmVzdWx0KCk7CiB9CiAKLWJvb2wgTW9k
dWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnko
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDhfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNl
VmFyVUludDEoY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlv
bidzIGNvdW50Iik7CiAKICAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIFBhcnRpYWxSZXN1bHQoKTsKIAotICAgIC8vIFdlIG9ubHkgYWxsb3cgb25l
IG1lbW9yeSBmb3Igbm93LgotICAgIGlmIChjb3VudCAhPSAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24g
aGFzIG1vcmUgdGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxv
d3MgemVybyBvciBvbmUiKTsKIAogICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKICAgICByZXR1
cm4gcGFyc2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VHbG9iYWwoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQxMzMKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBQYXJ0aWFsUmVzdWx0KCk7CiB9CiAKLWJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZUV4cG9ydCgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3QgZXhwb3J0Q291bnQ7Ci0gICAgaWYgKCFw
YXJzZVZhclVJbnQzMihleHBvcnRDb3VudCkKLSAgICAgICAgfHwgZXhwb3J0Q291bnQgPT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+
ZXhwb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291
bnQpLCAiY2FuJ3QgZ2V0IEV4cG9ydCBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGV4cG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSwgIkV4cG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBleHBvcnRDb3VudCk7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5leHBvcnRzLnRyeVJl
c2VydmVDYXBhY2l0eShleHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5
IGZvciAiLCBleHBvcnRDb3VudCwgIiBleHBvcnRzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGV4
cG9ydE51bWJlciA9IDA7IGV4cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJl
cikgewogICAgICAgICBFeHBvcnQgZXhwOwogICAgICAgICB1aW50MzJfdCBmaWVsZExlbjsKICAg
ICAgICAgU3RyaW5nIGZpZWxkU3RyaW5nOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZp
ZWxkTGVuKQotICAgICAgICAgICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBm
aWVsZExlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGV4cC5maWVsZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOwogCi0gICAgICAgIGlm
ICghcGFyc2VFeHRlcm5hbEtpbmQoZXhwLmtpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5n
dGgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmll
bGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBv
cnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBmaWVsZExlbik7CisgICAgICAgIGV4cC5maWVs
ZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOwogCisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGV4cC5raW5kKSwgImNhbid0
IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CiAgICAgICAgIHN3aXRjaCAoZXhwLmtpbmQpIHsKICAgICAgICAgY2FzZSBF
eHRlcm5hbDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZXhw
LmZ1bmN0aW9uSW5kZXgpCi0gICAgICAgICAgICAgICAgfHwgZXhwLmZ1bmN0aW9uSW5kZXggPj0g
bV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cC5m
dW5jdGlvbkluZGV4KSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBm
dW5jdGlvbiBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihleHAuZnVuY3Rpb25JbmRleCA+PSBtX3Jlc3VsdC5mdW5jdGlv
bkluZGV4U3BhY2Uuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQg
ZnVuY3Rpb24gbnVtYmVyICIsIGV4cC5mdW5jdGlvbkluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1
bmN0aW9uIGluZGV4IHNwYWNlICIsIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCks
ICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOiB7CiAgICAgICAgICAgICAvLyBG
SVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY3
MQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6Okdsb2JhbDogewogICAg
ICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDEzMwogICAgICAgICAgICAgLy8gSW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFs
IHZhcmlhYmxlcyBjYW4gYmUgZXhwb3J0ZWQuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIG1fbW9kdWxlLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZChleHApOworICAgICAg
ICBtX3Jlc3VsdC5tb2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKGV4cCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFBhcnRpYWxSZXN1bHQoKTsKIH0KIAotYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlU3RhcnQoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlU3Rh
cnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3Qgc3RhcnRGdW5jdGlvbkluZGV4
OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KQotICAgICAgICB8
fCBzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtX2Z1bmN0aW9u
SW5kZXhTcGFjZVtzdGFydEZ1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZTsKLSAgICBpZiAoc2lnbmF0
dXJlLT5hcmd1bWVudHMuc2l6ZSgpICE9IDAKLSAgICAgICAgfHwgc2lnbmF0dXJlLT5yZXR1cm5U
eXBlICE9IFZvaWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vZHVsZS0+c3RhcnRG
dW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbklu
ZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRleCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
c3RhcnRGdW5jdGlvbkluZGV4ID49IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCks
ICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBp
bmRleCBzcGFjZSAiLCBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKTsKKyAgICBT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZVtzdGFydEZ1
bmN0aW9uSW5kZXhdLnNpZ25hdHVyZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVy
ZS0+YXJndW1lbnRzLmlzRW1wdHkoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhhdmUgYXJndW1l
bnRzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUtPnJldHVyblR5cGUgIT0g
Vm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9yZXN1
bHQubW9kdWxlLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsK
KyAgICByZXR1cm4gUGFydGlhbFJlc3VsdCgpOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFy
c2VFbGVtZW50KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTcwOQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIFBhcnRpYWxSZXN1bHQoKTsKIH0KIAotYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlQ29kZSgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50
MzIoY291bnQpCi0gICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKQotICAgICAgICB8fCBjb3VudCAhPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eS5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQi
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291
bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9yZXN1bHQuZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBjb3VudCwgIiBl
eGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1fcmVzdWx0LmZ1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwotICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkKLSAgICAgICAgICAgIHx8IGZ1bmN0
aW9uU2l6ZSA+IGxlbmd0aCgpCi0gICAgICAgICAgICB8fCBmdW5jdGlvblNpemUgPiBsZW5ndGgo
KSAtIG1fb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLnN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIG1fZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOwot
ICAgICAgICBtX29mZnNldCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZDsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwg
ImNhbid0IGdldCAiLCBpLCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24n
cyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxl
bmd0aCgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5n
dGgoKSAtIG1fb2Zmc2V0LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAi
IGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNl
dCk7CisKKyAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLnN0YXJ0
ID0gbV9vZmZzZXQ7CisgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtp
XS5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKKyAgICAgICAgbV9vZmZzZXQgPSBtX3Jl
c3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kOwogICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBQYXJ0aWFsUmVzdWx0KCk7CiB9CiAKLWJvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZURhdGEoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7Ci0gICAgaWYgKCFwYXJzZVZh
clVJbnQzMihzZWdtZW50Q291bnQpCi0gICAgICAgIHx8IHNlZ21lbnRDb3VudCA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwgIW1fbW9kdWxlLT5kYXRh
LnRyeVJlc2VydmVDYXBhY2l0eShzZWdtZW50Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiICBzZWdtZW50czogIiwgc2Vn
bWVudENvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdt
ZW50Q291bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihzZWdtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBzZWdtZW50Q291
bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+ZGF0YS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2VnbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1v
cnkgZm9yIERhdGEgc2VjdGlvbidzICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOwogCiAg
ICAgZm9yICh1aW50MzJfdCBzZWdtZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21l
bnRDb3VudDsgKytzZWdtZW50TnVtYmVyKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZ0xuKCIgIHNlZ21lbnQgIyIsIHNlZ21lbnROdW1iZXIpOwogICAgICAgICB1
aW50MzJfdCBpbmRleDsKICAgICAgICAgdWludDhfdCBvcGNvZGU7CiAgICAgICAgIHVpbnQzMl90
IG9mZnNldDsKICAgICAgICAgdWludDhfdCBlbmRPcGNvZGU7CiAgICAgICAgIHVpbnQzMl90IGRh
dGFCeXRlTGVuZ3RoOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KQotICAgICAg
ICAgICAgfHwgaW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCAiLCBzZWdt
ZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihpbmRleCwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgbm9u
LXplcm8gaW5kZXggIiwgaW5kZXgpOwogCiAgICAgICAgIC8vIEZJWE1FIGFsbG93IGNvbXBsZXgg
aW5pdF9leHByIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU3MDAKICAgICAgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBpMzIuY29uc3QgYXMgb2Zm
c2V0LgotICAgICAgICBpZiAoIXBhcnNlVUludDgob3Bjb2RlKQotICAgICAgICAgICAgfHwgb3Bj
b2RlICE9IFdhc206OkkzMkNvbnN0Ci0gICAgICAgICAgICB8fCAhcGFyc2VWYXJVSW50MzIob2Zm
c2V0KQotICAgICAgICAgICAgfHwgIXBhcnNlVUludDgoZW5kT3Bjb2RlKQotICAgICAgICAgICAg
fHwgZW5kT3Bjb2RlICE9IFdhc206OkVuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBvZmZzZXQ6ICIs
IG9mZnNldCk7Ci0KLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihkYXRhQnl0ZUxlbmd0aCkK
LSAgICAgICAgICAgIHx8IGRhdGFCeXRlTGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBkYXRhIGJ5dGVzOiAiLCBkYXRhQnl0
ZUxlbmd0aCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgob3Bjb2Rl
KSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3Mgb3Bjb2Rl
Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYob3Bjb2RlICE9IFdhc206OkkzMkNvbnN0
LCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3Mgb3Bjb2RlIGlzbid0IGkzMi5jb25z
dCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihvZmZzZXQp
LCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpMzIuY29u
c3Qgb2Zmc2V0IHZhbHVlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUlu
dDgoZW5kT3Bjb2RlKSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdt
ZW50J3MgZW5kIG9wY29kZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVuZE9wY29k
ZSAhPSBXYXNtOjpFbmQsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBsYXN0IG9w
Y29kZSBpc24ndCBlbmQiKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihkYXRhQnl0ZUxlbmd0aCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBsZW5ndGgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihkYXRhQnl0ZUxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3Ro
IGlzIHRvbyBiaWcgIiwgZGF0YUJ5dGVMZW5ndGgpOwogCiAgICAgICAgIFNlZ21lbnQqIHNlZ21l
bnQgPSBTZWdtZW50OjptYWtlKG9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpOwotICAgICAgICBpZiAo
IXNlZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fbW9kdWxlLT5k
YXRhLnVuY2hlY2tlZEFwcGVuZChTZWdtZW50OjptYWtlUHRyKHNlZ21lbnQpKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1v
cnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6ZSAiLCBkYXRh
Qnl0ZUxlbmd0aCk7CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6bWFrZVB0cihzZWdtZW50KSk7CiAgICAgICAgIGZvciAodWludDMyX3QgZGF0
YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7CiAgICAg
ICAgICAgICB1aW50OF90IGJ5dGU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVUludDgoYnl0ZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRh
dGEgYnl0ZSBmcm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKICAgICAg
ICAgICAgIHNlZ21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiICAgIFsiLCBkYXRhQnl0ZSwgIl0g
PSAiLCBzZWdtZW50LT5ieXRlKGRhdGFCeXRlKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIFBhcnRpYWxSZXN1bHQoKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaAppbmRleCAzMDA3ZjY3Li41NmMzNWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC0zNCw3ICszNCwxMyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMg
UGFyc2VyIHsKK3N0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQgeworICAgIHN0ZDo6dW5pcXVlX3B0
cjxNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlOworICAgIEZ1bmN0aW9uSW5kZXhTcGFjZSBmdW5j
dGlvbkluZGV4U3BhY2U7CisgICAgVmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeT4gZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5OworfTsKKworY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGlj
IFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAogICAgIE1vZHVsZVBhcnNl
cihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0
aCkKQEAgLTQ3LDQ1ICs1MywxNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQo
KSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1hdGlvbigpCi0gICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9tb2R1
bGU7Ci0gICAgfQotCi0gICAgRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2Uo
KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0
dXJuIG1fZnVuY3Rpb25JbmRleFNwYWNlOwotICAgIH0KLQotICAgIFZlY3RvcjxGdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnk+JiBmdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkoKQotICAgIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5OwotICAgIH0KKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlKCk7CiAKIHByaXZhdGU6Ci0jZGVmaW5lIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUihO
QU1FLCBJRCwgREVTQ1JJUFRJT04pIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlICMjIE5B
TUUoKTsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKE5BTUUsIElELCBERVND
UklQVElPTikgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMgTkFNRSgp
OwogICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIp
CiAjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKLSAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0
KTsKIAogICAgIFZNKiBtX3ZtOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlv
bj4gbV9tb2R1bGU7Ci0gICAgRnVuY3Rpb25JbmRleFNwYWNlIG1fZnVuY3Rpb25JbmRleFNwYWNl
OwotICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5OwotICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07Ci0gICAgU3RyaW5nIG1fZXJy
b3JNZXNzYWdlOworICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKIH07CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2Vy
LmgKaW5kZXggZWVlMzliNC4uYmI1NGMxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QYXJzZXIuaApAQCAtMzIsMTMgKzMyLDMxIEBACiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKKyNpbmNsdWRl
IDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYv
TEVCRGVjb2Rlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
IAorbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXIgeworLy8gRklYTUUgV2Ugc2hvdWxkIG1vdmUgdGhp
cyB0byBtYWtlU3RyaW5nLiBJdCdzIGluIGl0cyBvd24gbmFtZXNwYWNlIHRvIGVuYWJsZSBDKysg
QXJndW1lbnQgRGVwZW5kZW50IExvb2t1cCDDoCBsYSBzdGQ6OnN3YXA6IHVzZXIgY29kZSBjYW4g
ZGVibGFyZSBpdHMgb3duICJib3hGYWlsdXJlIiBhbmQgdGhlIGZhaWwoKSBoZWxwZXIgd2lsbCBm
aW5kIGl0Lgorc3RhdGljIGNvbnN0IFN0cmluZyYgYm94RmFpbHVyZShjb25zdCBTdHJpbmcgJmZh
aWx1cmUpIHsgcmV0dXJuIGZhaWx1cmU7IH0KK3N0YXRpYyBhdXRvIGJveEZhaWx1cmUoY29uc3Qg
Y2hhciAqZmFpbHVyZSkgeyByZXR1cm4gQVNDSUlMaXRlcmFsKGZhaWx1cmUpOyB9CitzdGF0aWMg
YXV0byBib3hGYWlsdXJlKFNlY3Rpb25zOjpTZWN0aW9uIGZhaWx1cmUpIHsgcmV0dXJuIFNlY3Rp
b25zOjpuYW1lKGZhaWx1cmUpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8SW50Pjo6dmFsdWU+Ojp0
eXBlPgorc3RhdGljIGF1dG8gYm94RmFpbHVyZShJbnQgZmFpbHVyZSkgeyByZXR1cm4gU3RyaW5n
OjpudW1iZXIoZmFpbHVyZSk7IH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+
CiBjbGFzcyBQYXJzZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsK
KyAgICB0eXBlZGVmIFVuZXhwZWN0ZWRUeXBlPEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsK
KyAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJlc3VsdDsKKyAg
ICB0eXBlZGVmIEV4cGVjdGVkPFN1Y2Nlc3NUeXBlLCBFcnJvclR5cGU+IFJlc3VsdDsKKwogcHJv
dGVjdGVkOgogICAgIFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtNjMsMTgg
KzgxLDMxIEBAIHByb3RlY3RlZDoKIAogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50
IGluIG5hbWVzcGFjZSBhYm92ZS4KKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFr
ZVN0cmluZyhBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgIiksIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgQVNDSUlMaXRlcmFsKCIgLyAiKSwg
U3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCBBU0NJSUxpdGVyYWwoIjogIiksIGJveEZh
aWx1cmUoYXJncykuLi4pKTsKKyAgICB9CisjZGVmaW5lIFdBU01fUEFSU0VSX0ZBSUxfSUYoY29u
ZGl0aW9uLCAuLi4pIGRvIHsgXAorICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAg
ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogcHJpdmF0ZToKICAgICBjb25zdCB1aW50OF90
KiBtX3NvdXJjZTsKICAgICBzaXplX3QgbV9zb3VyY2VMZW5ndGg7CiB9OwogCi1BTFdBWVNfSU5M
SU5FIFBhcnNlcjo6UGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNv
dXJjZUxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElO
RSBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVy
LCBzaXplX3Qgc291cmNlTGVuZ3RoKQogICAgIDogbV9zb3VyY2Uoc291cmNlQnVmZmVyKQogICAg
ICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQogewogfQogCi1BTFdBWVNfSU5MSU5FIGJv
b2wgUGFyc2VyOjpjb25zdW1lQ2hhcmFjdGVyKGNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIFN1
Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OmNvbnN1
bWVDaGFyYWN0ZXIoY2hhciBjKQogewogICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODUsNyArMTE2LDggQEAgQUxXQVlTX0lOTElORSBib29s
IFBhcnNlcjo6Y29uc3VtZUNoYXJhY3RlcihjaGFyIGMpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBh
cnNlcjxTdWNjZXNzVHlwZT46OmNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciogc3RyKQogewogICAg
IHVuc2lnbmVkIHN0YXJ0ID0gbV9vZmZzZXQ7CiAgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgp
KQpAQCAtOTksNyArMTMxLDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVN0
cmluZyhjb25zdCBjaGFyKiBzdHIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0LCBzaXplX3Qg
c3RyaW5nTGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6Y29uc3VtZVVURjhTdHJpbmcoU3RyaW5nJiBy
ZXN1bHQsIHNpemVfdCBzdHJpbmdMZW5ndGgpCiB7CiAgICAgaWYgKHN0cmluZ0xlbmd0aCA9PSAw
KSB7CiAgICAgICAgIHJlc3VsdCA9IGVtcHR5U3RyaW5nKCk7CkBAIC0xMTQsMTcgKzE0NywyMCBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lVVRGOFN0cmluZyhTdHJpbmcmIHJl
c3VsdCwgc2l6ZV90IHN0cmluZ0xlbmd0aAogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQordGVt
cGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1
Y2Nlc3NUeXBlPjo6cGFyc2VWYXJVSW50MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICByZXR1
cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3Ro
LCBtX29mZnNldCwgcmVzdWx0KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFy
c2VWYXJVSW50NjQodWludDY0X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NU
eXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFyVUlu
dDY0KHVpbnQ2NF90JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVj
b2RlVUludDY0KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDMyKHVpbnQzMl90JiByZXN1
bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogewogICAg
IGlmIChsZW5ndGgoKSA8IDQgfHwgbV9vZmZzZXQgPiBsZW5ndGgoKSAtIDQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTEzMyw3ICsxNjksOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2Vy
OjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1B
TFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ4KHVpbnQ4X3QmIHJlc3VsdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxT
dWNjZXNzVHlwZT46OnBhcnNlVUludDgodWludDhfdCYgcmVzdWx0KQogewogICAgIGlmIChtX29m
ZnNldCA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQxLDcgKzE3OCw4
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDgodWludDhfdCYgcmVzdWx0
KQogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJz
ZUludDcoaW50OF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FM
V0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZUludDcoaW50OF90JiBy
ZXN1bHQpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNTAsNyArMTg4LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFy
c2VJbnQ3KGludDhfdCYgcmVzdWx0KQogICAgIHJldHVybiAodiAmIDB4ODApID09IDA7CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KQor
dGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2Vy
PFN1Y2Nlc3NUeXBlPjo6cGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpCiB7CiAgICAgaWYgKG1f
b2Zmc2V0ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTgsNyArMTk3
LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50Nyh1aW50OF90JiByZXN1
bHQpCiAgICAgcmV0dXJuIHJlc3VsdCA8IDB4ODA7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI6OnBhcnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUg
U3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFy
c2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpCiB7CiAgICAgdWludDMyX3QgdGVtcDsKICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKHRlbXApKQpAQCAtMTY3LDcgKzIwNyw4IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0KQogICAgIHJldHVy
biB0ZW1wIDw9IDE7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlUmVzdWx0
VHlwZShUeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZ
U19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVJlc3VsdFR5cGUoVHlwZSYg
cmVzdWx0KQogewogICAgIGludDhfdCB2YWx1ZTsKICAgICBpZiAoIXBhcnNlSW50Nyh2YWx1ZSkp
CkBAIC0xNzgsMTIgKzIxOSwxNCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVJl
c3VsdFR5cGUoVHlwZSYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhbHVlVHlwZShUeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5
cGU+OjpwYXJzZVZhbHVlVHlwZShUeXBlJiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIHBhcnNlUmVz
dWx0VHlwZShyZXN1bHQpICYmIGlzVmFsdWVUeXBlKHJlc3VsdCk7CiB9Ci0gICAgCi1BTFdBWVNf
SU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbDo6S2luZCYgcmVz
dWx0KQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9v
bCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbDo6S2luZCYg
cmVzdWx0KQogewogICAgIHVpbnQ4X3QgdmFsdWU7CiAgICAgaWYgKCFwYXJzZVVJbnQ3KHZhbHVl
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCA2ODMyOWU1Li4w
YTcyN2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC02MCwy
MyArNjAsMTggQEAgUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6
ZV90IHNvdXJjZUxlbmd0aCkKIAogdm9pZCBQbGFuOjpydW4oKQogewotICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nTG4oIlN0YXJ0aW5nIHBsYW4uIik7CiAgICAgewogICAgICAgICBN
b2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCk7
Ci0gICAgICAgIGlmICghbW9kdWxlUGFyc2VyLnBhcnNlKCkpIHsKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVk
OiAiLCBtb2R1bGVQYXJzZXIuZXJyb3JNZXNzYWdlKCkpOwotICAgICAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtb2R1bGVQYXJzZXIuZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKKyAgICAg
ICAgaWYgKCFwYXJzZVJlc3VsdCkgeworICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBwYXJz
ZVJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSByZXR1cm4gYW4g
RXhwZWN0ZWQuCiAgICAgICAgIH0KLSAgICAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1v
dmUobW9kdWxlUGFyc2VyLm1vZHVsZUluZm9ybWF0aW9uKCkpOwotICAgICAgICBtX2Z1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSA9IFdURk1vdmUobW9kdWxlUGFyc2VyLmZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeSgpKTsKLSAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSA9IG1vZHVsZVBh
cnNlci5mdW5jdGlvbkluZGV4U3BhY2UoKS5zaXplKCk7Ci0gICAgICAgIG1fZnVuY3Rpb25JbmRl
eFNwYWNlLmJ1ZmZlciA9IG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZGV4U3BhY2UoKS5yZWxlYXNl
QnVmZmVyKCk7CisgICAgICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKHBhcnNlUmVz
dWx0LT5tb2R1bGUpOworICAgICAgICBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSA9IFdURk1v
dmUocGFyc2VSZXN1bHQtPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSk7CisgICAgICAgIG1fZnVu
Y3Rpb25JbmRleFNwYWNlLnNpemUgPSBwYXJzZVJlc3VsdC0+ZnVuY3Rpb25JbmRleFNwYWNlLnNp
emUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2UuYnVmZmVyID0gcGFyc2VSZXN1bHQt
PmZ1bmN0aW9uSW5kZXhTcGFjZS5yZWxlYXNlQnVmZmVyKCk7CiAgICAgfQotICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhcnNlZCBtb2R1bGUuIik7CiAKICAgICBhdXRvIHRy
eVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogd2hhdCkgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZSkpKSB7CkBAIC0xMTcsMTQgKzExMiwxNCBAQCB2b2lkIFBsYW46OnJ1bigp
CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvSlNTdHVicy5z
aXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAgICAgICBBU1NFUlQobV9mdW5jdGlvbkluZGV4U3Bh
Y2UuYnVmZmVyLmdldCgpW2Z1bmN0aW9uSW5kZXhTcGFjZV0uc2lnbmF0dXJlID09IHNpZ25hdHVy
ZSk7CiAKLSAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSwgKm1f
bW9kdWxlSW5mb3JtYXRpb24pOwotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAg
ICAgIGF1dG8gdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQs
IGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rpb25JbmRleFNwYWNlLCAqbV9tb2R1
bGVJbmZvcm1hdGlvbik7CisgICAgICAgIGlmICghdmFsaWRhdGVSZXN1bHQpIHsKICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3
UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSksICIsICIp
OwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvcjsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0g
dmFsaWRhdGVSZXN1bHQuZXJyb3IoKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNlY3Rpb25zLmgKaW5kZXggOTk2MDUyNC4uMTgxZWI3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTQ5LDEyICs0OSwyNiBAQCBzdHJ1Y3Qg
U2VjdGlvbnMgewogI3VuZGVmIERFRklORV9XQVNNX1NFQ1RJT05fRU5VTQogICAgICAgICBVbmtu
b3duCiAgICAgfTsKKwogICAgIHN0YXRpYyBib29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2
aW91cywgU2VjdGlvbiBuZXh0KQogICAgIHsKICAgICAgICAgaWYgKHByZXZpb3VzID09IFVua25v
d24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHByZXZpb3VzIDwg
bmV4dDsKICAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZShTZWN0aW9uIHNlY3Rp
b24pCisgICAgeworICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKKyNkZWZpbmUgU1RSSU5HSUZZ
X1NFQ1RJT05fTkFNRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pIGNhc2UgTkFNRTogcmV0dXJuICNO
QU1FOworICAgICAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFNUUklOR0lGWV9TRUNUSU9O
X05BTUUpCisjdW5kZWYgU1RSSU5HSUZZX1NFQ1RJT05fTkFNRQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAiPyI7CisgICAgICAgIH0KKyAgICB9CisKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRh
dGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRl
eCAyMmY5NWJiLi4wYTQ5NWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21W
YWxpZGF0ZS5jcHAKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogICAgICAgICBCbG9ja1R5cGUg
bV9ibG9ja1R5cGU7CiAgICAgICAgIFR5cGUgbV9zaWduYXR1cmU7CiAgICAgfTsKKyAgICB0eXBl
ZGVmIEV4cGVjdGVkPHZvaWQsIFN0cmluZz4gUmVzdWx0OwogICAgIHR5cGVkZWYgVHlwZSBFeHBy
ZXNzaW9uVHlwZTsKICAgICB0eXBlZGVmIENvbnRyb2xEYXRhIENvbnRyb2xUeXBlOwogICAgIHR5
cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiBFeHByZXNzaW9uTGlzdDsKQEAgLTc4LDEw
NiArNzksMTA2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBFeHByZXNzaW9uVHlwZSBl
bXB0eUV4cHJlc3Npb24gPSBWb2lkOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlw
ZSBhZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90KSB7IHJldHVybiB0eXBlOyB9CiAKICAg
ICAvLyBMb2NhbHMKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAg
ICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAKICAgICAvLyBNZW1v
cnkKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7
Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwor
ICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOwor
ICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwog
CiAgICAgLy8gQmFzaWMgb3BlcmF0b3JzCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIHRlbXBsYXRlPE9wVHlw
ZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
RXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJv
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8vIENvbnRyb2wgZmxvdwogICAgIENv
bnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CiAg
ICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUp
OwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOwotICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xEYXRhJik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsK
KyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwot
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYg
ZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsK
KyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25T
dGFjayk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29u
dHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVu
dHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwogCiAgICAg
Ly8gQ2FsbHMKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNh
bGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIGR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1
cmUqLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKIAogICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9y
eTsgfQogCi0gICAgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NF
UlQobV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpOyBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVz
c2FnZSk7IH0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJv
ck1lc3NhZ2U7IH0KICAgICBWYWxpZGF0ZShFeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlLCBjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQogICAgICAgICA6IG1fcmV0dXJuVHlwZShyZXR1
cm5UeXBlKQogICAgICAgICAsIG1fbWVtb3J5KG1lbW9yeSkKICAgICB7CiAgICAgfQogCisgICAg
dm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmKQorICAgIHsKKyAgICAgICAgLy8gSWYgeW91IG5lZWQgdGhpcyB0aGVuIHlvdSBzaG91bGQg
Zml4IHRoZSB2YWxpZGF0b3IncyBlcnJvciBtZXNzYWdlcyBpbnN0ZWFkLi4uCisgICAgICAgIC8v
IFRoaW5rIG9mIHRoaXMgYXMgcGVuYW5jZSBmb3IgdGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2Fn
ZXMuCisgICAgfQorCiBwcml2YXRlOgotICAgIGJvb2wgdW5pZnkoVHlwZSwgVHlwZSk7Ci0gICAg
Ym9vbCB1bmlmeShjb25zdCBFeHByZXNzaW9uTGlzdCYsIGNvbnN0IENvbnRyb2xEYXRhJik7Cisg
ICAgUmVzdWx0IHVuaWZ5KFR5cGUsIFR5cGUpOworICAgIFJlc3VsdCB1bmlmeShjb25zdCBFeHBy
ZXNzaW9uTGlzdCYsIGNvbnN0IENvbnRyb2xEYXRhJik7CiAKLSAgICBib29sIGNoZWNrQnJhbmNo
VGFyZ2V0KENvbnRyb2xEYXRhJiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spOworICAgIFJlc3VsdCBjaGVja0JyYW5jaFRhcmdldChDb250cm9sRGF0YSYgdGFy
Z2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAogICAgIEV4cHJl
c3Npb25UeXBlIG1fcmV0dXJuVHlwZTsKICAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7Ci0gICAg
U3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtX21l
bW9yeTsKIH07CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlw
ZT4mIGFyZ3MpCithdXRvIFZhbGlkYXRlOjphZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+
JiBhcmdzKSAtPiBSZXN1bHQKIHsKICAgICBmb3IgKFR5cGUgYXJnIDogYXJncykgewotICAgICAg
ICBpZiAoIWFkZExvY2FsKGFyZywgMSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghYWRkTG9jYWwoYXJnLCAxKSkpCisgICAgICAgICAgICByZXR1cm4g
VW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogY2Fu
bm90IGFkZCBhcmd1bWVudCIpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNv
dW50KQorYXV0byBWYWxpZGF0ZTo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkg
LT4gUmVzdWx0CiB7Ci0gICAgaWYgKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9sb2Nh
bHMuc2l6ZSgpICsgY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFVOTElL
RUxZKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9sb2NhbHMuc2l6ZSgpICsgY291bnQp
KSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFs
aWRhdGlvbiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBsb2NhbHMiKTsKIAogICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICBtX2xvY2Fscy51bmNoZWNr
ZWRBcHBlbmQodHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiB9
CiAKLWJvb2wgVmFsaWRhdGU6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KQorYXV0byBWYWxpZGF0ZTo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChpbmRleCA8IG1fbG9jYWxz
LnNpemUoKSkgewotICAgICAgICByZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF07Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiQXR0
ZW1wdCB0byB1c2UgdW5rbm93biBsb2NhbC4iKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KFVOTElLRUxZKGluZGV4ID49IG1fbG9jYWxzLnNpemUoKSkpCisgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBhdHRlbXB0
IHRvIHVzZSB1bmtub3duIGxvY2FsIik7CisKKyAgICByZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF07
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKQorYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKIHsKICAgICBFeHBy
ZXNzaW9uVHlwZSBsb2NhbFR5cGU7Ci0gICAgaWYgKCFnZXRMb2NhbChpbmRleCwgbG9jYWxUeXBl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gbG9jYWxSZXN1bHQgPSBnZXRMb2Nh
bChpbmRleCwgbG9jYWxUeXBlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWxvY2FsUmVzdWx0KSkKKyAg
ICAgICAgcmV0dXJuIGxvY2FsUmVzdWx0OwogCi0gICAgaWYgKGxvY2FsVHlwZSA9PSB2YWx1ZSkK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKFVOTElLRUxZKGxvY2FsVHlwZSAhPSB2YWx1
ZSkpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZh
bGlkYXRpb24gZmFpbGVkOiBzZXRfbG9jYWwgdG8gdGhlIHdyb25nIHR5cGUiKTsKIAotICAgIG1f
ZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdCB0byBzZXQgbG9jYWwgd2l0aCB0eXBl
OiAiLCB0b1N0cmluZyhsb2NhbFR5cGUpLCAiIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlOiAiLCB0
b1N0cmluZyh2YWx1ZSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4geyB9OwogfQog
CiBWYWxpZGF0ZTo6Q29udHJvbFR5cGUgVmFsaWRhdGU6OmFkZEJsb2NrKFR5cGUgc2lnbmF0dXJl
KQpAQCAtMTkwLDIzMiArMTkxLDE3MiBAQCBWYWxpZGF0ZTo6Q29udHJvbFR5cGUgVmFsaWRhdGU6
OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCiAgICAgcmV0dXJuIENvbnRyb2xEYXRhKEJsb2NrVHlw
ZTo6TG9vcCwgc2lnbmF0dXJlKTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkU2VsZWN0KEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5
cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6OmFkZFNlbGVj
dChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJl
c3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAg
IGlmIChjb25kaXRpb24gIT0gSTMyKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0
cmluZygiQXR0ZW1wdGluZyB0byB1c2UgIiwgdG9TdHJpbmcoY29uZGl0aW9uKSwgIiBhcyB0aGUg
Y29uZGl0aW9uIGZvciBzZWxlY3QiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAg
ICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uICE9IEkzMikpCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBzZWxlY3QgY29u
ZGl0aW9uIG11c3QgYmUgaTMyIik7CiAKLSAgICBpZiAobm9uWmVybyAhPSB6ZXJvKSB7Ci0gICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiUmVzdWx0IHR5cGVzIG9mIHNlbGVjdCBk
b24ndCBtYXRjaC4gR290OiAiLCB0b1N0cmluZyhub25aZXJvKSwgIiBhbmQgIiwgdG9TdHJpbmco
emVybykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShu
b25aZXJvICE9IHplcm8pKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpF
cnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogc2VsZWN0IHJlc3VsdCB0eXBlcyBtdXN0IG1h
dGNoIik7CiAKICAgICByZXN1bHQgPSB6ZXJvOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjph
ZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlw
ZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY29uZGl0aW9uICE9IEkzMikgewotICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gdXNlICIsIHRv
U3RyaW5nKGNvbmRpdGlvbiksICIgYXMgdGhlIGNvbmRpdGlvbiBmb3IgYW4gaWYgYmxvY2siKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9u
ICE9IEkzMikpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlw
ZT4oInZhbGlkYXRpb24gZmFpbGVkOiBpZiBjb25kaXRpb24gbXVzdCBiZSBpMzIiKTsKICAgICBy
ZXN1bHQgPSBDb250cm9sRGF0YShCbG9ja1R5cGU6OklmLCBzaWduYXR1cmUpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEVsc2UoQ29u
dHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMpCithdXRvIFZh
bGlkYXRlOjphZGRFbHNlKENvbnRyb2xUeXBlJiBjdXJyZW50LCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgdmFsdWVzKSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIXVuaWZ5KHZhbHVlcywgY3VycmVudCkp
IHsKLSAgICAgICAgQVNTRVJUKGVycm9yTWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQorICAgIGF1dG8gdW5pZnlSZXN1bHQgPSB1bmlmeSh2YWx1ZXMsIGN1cnJlbnQp
OworICAgIGlmIChVTkxJS0VMWSghdW5pZnlSZXN1bHQpKQorICAgICAgICByZXR1cm4gdW5pZnlS
ZXN1bHQ7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGN1cnJlbnQpOwogfQogCi1i
b29sIFZhbGlkYXRlOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgY3VycmVudCkK
K2F1dG8gVmFsaWRhdGU6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBjdXJyZW50
KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY3VycmVudC50eXBlKCkgIT0gQmxvY2tUeXBlOjpJZikg
ewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRk
IGVsc2UgYmxvY2sgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gaWYiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQorICAgIGlmIChVTkxJS0VMWShjdXJyZW50LnR5cGUoKSAhPSBC
bG9ja1R5cGU6OklmKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJy
b3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGVsc2UgYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0
byBhbiBpZiIpOwogICAgIGN1cnJlbnQgPSBDb250cm9sRGF0YShCbG9ja1R5cGU6OkJsb2NrLCBj
dXJyZW50LnNpZ25hdHVyZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXR1cm5WYWx1ZXMpCithdXRvIFZhbGlkYXRlOjphZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcykgLT4gUmVzdWx0CiB7CiAgICAgaWYgKG1fcmV0dXJuVHlwZSA9PSBW
b2lkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBBU1NF
UlQocmV0dXJuVmFsdWVzLnNpemUoKSA9PSAxKTsKIAotICAgIGlmIChtX3JldHVyblR5cGUgPT0g
cmV0dXJuVmFsdWVzWzBdKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoVU5MSUtFTFko
bV9yZXR1cm5UeXBlICE9IHJldHVyblZhbHVlc1swXSkpCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiByZXR1cm4gZG9l
c24ndCBtYXRjaCBmdW5jdGlvbidzIHJldHVybiB0eXBlIik7CiAKLSAgICBtX2Vycm9yTWVzc2Fn
ZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIHJldHVybiB3aXRoIHR5cGU6ICIsIHRv
U3RyaW5nKHJldHVyblZhbHVlc1swXSksICIgYnV0IGZ1bmN0aW9uIGV4cGVjdHMgcmV0dXJuIHdp
dGggdHlwZTogIiwgdG9TdHJpbmcobV9yZXR1cm5UeXBlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENv
bnRyb2xUeXBlJiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sp
CithdXRvIFZhbGlkYXRlOjpjaGVja0JyYW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBSZXN1bHQKICAgICB7CiAg
ICAgICAgIGlmICh0YXJnZXQudHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICBpZiAodGFy
Z2V0LnNpZ25hdHVyZSgpID09IFZvaWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgaWYgKCFleHByZXNzaW9uU3RhY2suc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcg
dG8gYnJhbmNoIHRvIGJsb2NrIHdpdGggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcodGFyZ2V0
LnNpZ25hdHVyZSgpKSwgIiBidXQgdGhlIHN0YWNrIHdhcyBlbXB0eSIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWShleHByZXNzaW9u
U3RhY2suaXNFbXB0eSgpKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1
bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBicmFuY2ggdG8gYmxvY2sgb24gZW1w
dHkgZXhwcmVzc2lvbiBzdGFjayIpOwogCi0gICAgICAgIGlmICh0YXJnZXQuc2lnbmF0dXJlKCkg
PT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoVU5MSUtFTFkodGFyZ2V0LnNpZ25hdHVyZSgpICE9IGV4cHJlc3Npb25TdGFjay5s
YXN0KCkpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JU
eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGJyYW5jaCdzIHN0YWNrIHR5cGUgZG9lc24ndCBtYXRj
aCBibG9jaydzIHR5cGUiKTsKIAotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmco
IkF0dGVtcHRpbmcgdG8gYnJhbmNoIHRvIGJsb2NrIHdpdGggZXhwZWN0ZWQgdHlwZTogIiwgdG9T
dHJpbmcodGFyZ2V0LnNpZ25hdHVyZSgpKSwgIiBidXQgc3RhY2sgaGFzIHR5cGU6ICIsIHRvU3Ry
aW5nKHRhcmdldC5zaWduYXR1cmUoKSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCi1ib29sIFZhbGlkYXRlOjphZGRCcmFuY2goQ29udHJvbFR5
cGUmIHRhcmdldCwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgc3RhY2spCithdXRvIFZhbGlkYXRlOjphZGRCcmFuY2goQ29udHJvbFR5cGUmIHRhcmdldCwg
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+
IFJlc3VsdAogewogICAgIC8vIFZvaWQgbWVhbnMgdGhpcyBpcyBhbiB1bmNvbmRpdGlvbmFsIGJy
YW5jaC4KLSAgICBpZiAoY29uZGl0aW9uICE9IFZvaWQgJiYgY29uZGl0aW9uICE9IEkzMikgewot
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIGEg
Y29uZGl0aW9uYWwgYnJhbmNoIHdpdGggY29uZGl0aW9uIHR5cGU6ICIsIHRvU3RyaW5nKGNvbmRp
dGlvbiksICIgYnV0IGV4cGVjdGVkIGkzMi4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uICE9IFZvaWQgJiYgY29uZGl0aW9uICE9IEkz
MikpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZh
bGlkYXRpb24gZmFpbGVkOiBjb25kaXRpb25hbCBicmFuY2ggd2l0aCBub24taTMyIGNvbmRpdGlv
biIpOwogCiAgICAgcmV0dXJuIGNoZWNrQnJhbmNoVGFyZ2V0KHRhcmdldCwgc3RhY2spOwogfQog
Ci1ib29sIFZhbGlkYXRlOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJn
ZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCithdXRvIFZhbGlkYXRl
OjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJv
bERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFJlc3VsdAogewotICAgIGlmIChjb25kaXRp
b24gIT0gSTMyKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1w
dGluZyB0byBhZGQgYSBicl90YWJsZSB3aXRoIGNvbmRpdGlvbiB0eXBlOiAiLCB0b1N0cmluZyhj
b25kaXRpb24pLCAiIGJ1dCBleHBlY3RlZCBpMzIuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbiAhPSBJMzIpKQorICAgICAgICByZXR1
cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDog
YnJfdGFibGUgd2l0aCBub24taTMyIGNvbmRpdGlvbiIpOwogCiAgICAgZm9yIChhdXRvIHRhcmdl
dCA6IHRhcmdldHMpIHsKLSAgICAgICAgaWYgKGRlZmF1bHRUYXJnZXQuc2lnbmF0dXJlKCkgIT0g
dGFyZ2V0LT5zaWduYXR1cmUoKSkgewotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtl
U3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBhIGJyX3RhYmxlIHdpdGggZGlmZmVyZW50IGV4cGVj
dGVkIHR5cGVzLiBEZWZhdWx0IHRhcmdldCBoYXMgdHlwZTogIiwgdG9TdHJpbmcoZGVmYXVsdFRh
cmdldC5zaWduYXR1cmUoKSksICIgYnV0IGNhc2UgaGFzIHR5cGU6ICIsIHRvU3RyaW5nKHRhcmdl
dC0+c2lnbmF0dXJlKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoVU5MSUtFTFkoZGVmYXVsdFRhcmdldC5zaWduYXR1cmUoKSAhPSB0YXJnZXQt
PnNpZ25hdHVyZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6
OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBicl90YWJsZSB0YXJnZXQgdHlwZSBtaXNt
YXRjaCIpOwogICAgIH0KIAogICAgIHJldHVybiBjaGVja0JyYW5jaFRhcmdldChkZWZhdWx0VGFy
Z2V0LCBleHByZXNzaW9uU3RhY2spOwogfQogCi1ib29sIFZhbGlkYXRlOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spCithdXRvIFZhbGlkYXRlOjpl
bmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJl
c3VsdAogewogICAgIENvbnRyb2xEYXRhJiBibG9jayA9IGVudHJ5LmNvbnRyb2xEYXRhOwogICAg
IGlmIChibG9jay5zaWduYXR1cmUoKSA9PSBWb2lkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmICghc3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQmxvY2sgZmFsbHRob3VnaCBleHBlY3RlZCB0eXBl
OiAiLCB0b1N0cmluZyhibG9jay5zaWduYXR1cmUoKSksICIgYnV0IHRoZSBzdGFjayB3YXMgZW1w
dHkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoc3Rh
Y2suaXNFbXB0eSgpKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJy
b3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IHR5cGVkIGJsb2NrIGZhbGxzIHRocm91Z2ggb24g
ZW1wdHkgc3RhY2siKTsKIAotICAgIGlmIChibG9jay5zaWduYXR1cmUoKSA9PSBzdGFjay5sYXN0
KCkpIHsKLSAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGJsb2Nr
LnNpZ25hdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChVTkxJ
S0VMWShibG9jay5zaWduYXR1cmUoKSAhPSBzdGFjay5sYXN0KCkpKQorICAgICAgICByZXR1cm4g
VW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogYmxv
Y2sgZmFsbHRocm91Z2ggZG9lc24ndCBtYXRjaCBpdHMgZGVjbGFyZWQgdHlwZSIpOwogCi0gICAg
bV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJCbG9jayBmYWxsdGhyb3VnaCBoYXMgZXhwZWN0
ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0dXJlKCkpLCAiIGJ1dCBwcm9kdWNlZCB0
eXBlOiAiLCB0b1N0cmluZyhibG9jay5zaWduYXR1cmUoKSkpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoYmxvY2suc2lnbmF0dXJl
KCkpOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkKK2F1dG8gVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkgLT4gUmVzdWx0CiB7CiAgICAgaWYgKGVudHJ5LmNv
bnRyb2xEYXRhLnNpZ25hdHVyZSgpICE9IFZvaWQpCiAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrLmFwcGVuZChlbnRyeS5jb250cm9sRGF0YS5zaWduYXR1cmUoKSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkQ2Fs
bCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRl
OjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVz
dWx0CiB7Ci0gICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSAhPSBhcmdzLnNpemUo
KSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCJBcml0eSBtaXNtYXRjaCBpbiBjYWxsLCBleHBlY3RlZDogIik7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTnVtYmVyKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgYnV0IGdvdDogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KGFyZ3Muc2l6ZSgpKTsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBidWlsZGVyLnRvU3RyaW5n
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKHNpZ25h
dHVyZS0+YXJndW1lbnRzLnNpemUoKSAhPSBhcmdzLnNpemUoKSkpCisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBhcml0
eSBtaXNtYXRjaCBpbiBjYWxsIik7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJn
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXJnc1tpXSAhPSBzaWduYXR1cmUtPmFyZ3Vt
ZW50c1tpXSkgewotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJFeHBl
Y3RlZCBhcmd1bWVudCB0eXBlOiAiLCB0b1N0cmluZyhzaWduYXR1cmUtPmFyZ3VtZW50c1tpXSks
ICIgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIGFyZ3VtZW50IHR5cGU6ICIsIHRvU3RyaW5nKGFyZ3Nb
aV0pKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
VU5MSUtFTFkoYXJnc1tpXSAhPSBzaWduYXR1cmUtPmFyZ3VtZW50c1tpXSkpCisgICAgICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZh
aWxlZDogYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsIik7CiAgICAgfQogCiAgICAgcmVz
dWx0ID0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1
cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7CiAgICAgY29uc3QgYXV0byBhcmd1
bWVudENvdW50ID0gc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgIGlmIChhcmd1bWVu
dENvdW50ICE9IGFyZ3Muc2l6ZSgpIC0gMSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJBcml0eSBtaXNtYXRjaCBpbiBjYWxsX2luZGly
ZWN0LCBleHBlY3RlZDogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHNpZ25hdHVy
ZS0+YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgYnV0IGdvdDog
Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3Muc2l6ZSgpKTsKLSAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKGFyZ3VtZW50Q291bnQgIT0gYXJncy5zaXplKCkg
LSAxKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigi
dmFsaWRhdGlvbiBmYWlsZWQ6IGFyaXR5IG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QiKTsKIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKLSAgICAg
ICAgaWYgKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0pIHsKLSAgICAgICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQgYXJndW1lbnQgdHlwZTogIiwg
dG9TdHJpbmcoc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0pLCAiIGRvZXMgbm90IG1hdGNoIHBhc3Nl
ZCBhcmd1bWVudCB0eXBlOiAiLCB0b1N0cmluZyhhcmdzW2ldKSk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKGFyZ3NbaV0gIT0gc2ln
bmF0dXJlLT5hcmd1bWVudHNbaV0pKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBl
PFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGFyZ3VtZW50IHR5cGUgbWlz
bWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCIpOwogICAgIH0KIAotICAgIGlmIChhcmdzLmxhc3QoKSAh
PSBJMzIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJFeHBlY3RlZCBj
YWxsX2luZGlyZWN0IHRhcmdldCBpbmRleCB0byBoYXZlIHR5cGU6IGkzMiBidXQgZ290IHR5cGU6
ICIsIHRvU3RyaW5nKGFyZ3MubGFzdCgpKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
CisgICAgaWYgKFVOTElLRUxZKGFyZ3MubGFzdCgpICE9IEkzMikpCisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBub24t
aTMyIGNhbGxfaW5kaXJlY3QgaW5kZXgiKTsKICAgICAKICAgICByZXN1bHQgPSBzaWduYXR1cmUt
PnJldHVyblR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9v
bCBWYWxpZGF0ZTo6dW5pZnkoY29uc3QgRXhwcmVzc2lvbkxpc3QmIHZhbHVlcywgY29uc3QgQ29u
dHJvbFR5cGUmIGJsb2NrKQorYXV0byBWYWxpZGF0ZTo6dW5pZnkoY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHZhbHVlcywgY29uc3QgQ29udHJvbFR5cGUmIGJsb2NrKSAtPiBSZXN1bHQKIHsKICAgICBB
U1NFUlQodmFsdWVzLnNpemUoKSA8PSAxKTsKICAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0g
Vm9pZCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBp
ZiAoIXZhbHVlcy5zaXplKCkpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5n
KCJCbG9jayBoYXMgbm9uLXZvaWQgc2lnbmF0dXJlIGJ1dCBoYXMgbm8gc3RhY2sgZW50cmllcyBv
biBleGl0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZ
KHZhbHVlcy5pc0VtcHR5KCkpKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0
OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogbm9uLXZvaWQgYmxvY2sgZW5kcyB3aXRo
IGFuIGVtcHR5IHN0YWNrIik7CiAKLSAgICBpZiAodmFsdWVzWzBdID09IGJsb2NrLnNpZ25hdHVy
ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoVU5MSUtFTFkodmFsdWVzWzBdICE9
IGJsb2NrLnNpZ25hdHVyZSgpKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3Vs
dDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGNvbnRyb2wgZmxvdyByZXR1cm5zIHdp
dGggdW5leHBlY3RlZCB0eXBlIik7CiAKLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmco
IkV4cGVjdGVkIGNvbnRyb2wgZmxvdyB0byByZXR1cm4gdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0
cmluZyhibG9jay5zaWduYXR1cmUoKSksICIgYnV0IGdvdCB2YWx1ZSB3aXRoIHR5cGU6ICIsIHRv
U3RyaW5nKHZhbHVlc1swXSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmKQotewotICAgIC8vIElmIHlvdSBuZWVkIHRoaXMgdGhlbiB5b3Ug
c2hvdWxkIGZpeCB0aGUgdmFsaWRhdG9yJ3MgZXJyb3IgbWVzc2FnZXMgaW5zdGVhZC4uLgotICAg
IC8vIFRoaW5rIG9mIHRoaXMgYXMgcGVuYW5jZSBmb3IgdGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVz
c2FnZXMuCi19Ci0KLVN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IEltbXV0
YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbykKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlv
bihjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7CiAgICAgVmFsaWRhdGUg
Y29udGV4dChzaWduYXR1cmUtPnJldHVyblR5cGUsIGluZm8ubWVtb3J5KTsKICAgICBGdW5jdGlv
blBhcnNlcjxWYWxpZGF0ZT4gdmFsaWRhdG9yKGNvbnRleHQsIHNvdXJjZSwgbGVuZ3RoLCBzaWdu
YXR1cmUsIGZ1bmN0aW9uSW5kZXhTcGFjZSwgaW5mbyk7CisgICAgYXV0byB2YWxpZGF0ZVJlc3Vs
dCA9IHZhbGlkYXRvci5wYXJzZSgpOworICAgIGlmICghdmFsaWRhdGVSZXN1bHQpCisgICAgICAg
IHJldHVybiB2YWxpZGF0ZVJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7CiAKLSAgICBpZiAoIXZhbGlk
YXRvci5wYXJzZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgYmV0dGVyIGxvY2F0aW9uIGlu
Zm9ybWF0aW9uIGhlcmUuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDI4OAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5ldmVyIG5vdCBoYXZlIGFu
IGVycm9yIG1lc3NhZ2UgaWYgd2UgcmV0dXJuIGZhbHNlLgotICAgICAgICAvLyBzZWU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTQKLSAgICAgICAgaWYgKGNv
bnRleHQuZXJyb3JNZXNzYWdlKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gIlVua25v
d24gZXJyb3IiOwotICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvck1lc3NhZ2UoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21WYWxpZGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRl
LmgKaW5kZXggODYxZmQ3Mi4uMWYwMDQxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVZhbGlkYXRlLmgKQEAgLTI4LDEwICsyOCwxMSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotU3RyaW5nIHZhbGlkYXRlRnVu
Y3Rpb24oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgSW1t
dXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKK0V4
cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlvbihjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2Um
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21W
YWxpZGF0ZUlubGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5l
cmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkKaW5kZXggMjVhMzkyZS4uNTJiNjZiMSAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRh
dGVJbmxpbmVzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVy
YXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQpAQCAtNjAsMTUgKzYwLDEzIEBAIGRlZiB0
b0NwcChuYW1lKToKIGRlZiB1bmFyeU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1l
XQogICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYm9vbCBWYWxpZGF0ZTo6YWRkT3A8T3BUeXBl
OjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTw+IGF1dG8gVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6
IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAodmFsdWUgIT0gIiIiICsgY3BwVHlw
ZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0g
bWFrZVN0cmluZyhcIiIiIiArIG5hbWUgKyAiIiIgZXhwZWN0cyB0aGUgdmFsdWUgdG8gYmUgb2Yg
dHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIi
KSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZSkpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWSh2YWx1ZSAhPSAiIiIg
KyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsg
bmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CiAKICAgICByZXN1bHQgPSAiIiIgKyBj
cHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHsgfTsKIH0KICIiIgogCkBAIC03NiwyMCArNzQsMTYgQEAgdGVtcGxhdGU8PiBib29sIFZh
bGlkYXRlOjphZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9u
VHlwZQogZGVmIGJpbmFyeU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQogICAg
IHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYm9vbCBWYWxpZGF0ZTo6YWRkT3A8T3BUeXBlOjoiIiIg
KyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUg
cmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTw+IGF1dG8gVmFsaWRhdGU6
OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1
bHQKIHsKLSAgICBpZiAobGVmdCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkg
KyAiIiIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFt
ZSArICIiIiBleHBlY3RzIHRoZSBsZWZ0IHZhbHVlIHRvIGJlIG9mIHR5cGU6ICIsIHRvU3RyaW5n
KCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIiksICIgYnV0IGdvdCBhIHZh
bHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobGVmdCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShsZWZ0ICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFt
ZXRlciJdWzBdKSArICIiIikpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6
OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIGxlZnQgdmFs
dWUgdHlwZSBtaXNtYXRjaCIpOwogCi0gICAgaWYgKHJpZ2h0ICE9ICIiIiArIGNwcFR5cGUob3Bb
InBhcmFtZXRlciJdWzFdKSArICIiIikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VT
dHJpbmcoXCIiIiIgKyBuYW1lICsgIiIiIGV4cGVjdHMgdGhlIHJpZ2h0IHZhbHVlIHRvIGJlIG9m
IHR5cGU6ICIsIHRvU3RyaW5nKCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIi
IiksICIgYnV0IGdvdCBhIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcocmlnaHQpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkocmlnaHQgIT0gIiIi
ICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSkKKyAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiAr
IG5hbWUgKyAiIiIgcmlnaHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAgcmVzdWx0ID0g
IiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiB7IH07CiB9CiAiIiIKIApAQCAtOTcsMTMgKzkxLDExIEBAIGRlZiBsb2FkTWFj
cm8obmFtZSk6CiAgICAgb3AgPSBvcGNvZGVzW25hbWVdCiAgICAgcmV0dXJuICIiIgogICAgIGNh
c2UgTG9hZE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI6IHsKLSAgICAgICAgaWYgKHBv
aW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0gICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIiIGV4
cGVjdHMgdGhlIHBvaW50ZXIgdG8gYmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlw
ZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBl
OiAiLCB0b1N0cmluZyhwb2ludGVyKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsi
cGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlw
ZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIi
IHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAgICAgIHJlc3VsdCA9ICIiIiArIGNwcFR5
cGUob3BbInJldHVybiJdWzBdKSArICIiIjsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgfSIiIgogCiAKQEAgLTExMSwxNyArMTAzLDEzIEBAIGRlZiBzdG9y
ZU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQogICAgIHJldHVybiAiIiIKICAg
ICBjYXNlIFN0b3JlT3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAgICAgICBp
ZiAocG9pbnRlciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpIHsK
LSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUgKyAi
IiIgZXhwZWN0cyB0aGUgcG9pbnRlciB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIgKyBj
cHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3aXRo
IHR5cGU6ICIsIHRvU3RyaW5nKHBvaW50ZXIpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQorICAgICAgICBpZiAoVU5MSUtFTFkocG9pbnRlciAhPSAiIiIgKyBjcHBUeXBl
KG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUg
KyAiIiIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7CiAKLSAgICAgICAgaWYgKHZhbHVlICE9ICIi
IiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKSArICIiIikgewotICAgICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFtZSArICIiIiBleHBlY3RzIHRoZSB2
YWx1ZSB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0
ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5n
KHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKFVOTElLRUxZKHZhbHVlICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKSAr
ICIiIikpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5
cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21h
dGNoIik7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fSIiIgogCiAKQEAgLTE0MSwyMCArMTI5LDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKICIiIiArIHVuYXJ5U3BlY2lhbGl6YXRpb25zICsgYmluYXJ5U3BlY2lhbGl6YXRp
b25zICsgIiIiCiAKLWJvb2wgVmFsaWRhdGU6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3QpCithdXRvIFZh
bGlkYXRlOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIWhhc01l
bW9yeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFVOTElLRUxZKCFoYXNNZW1v
cnkoKSkpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4o
InZhbGlkYXRpb24gZmFpbGVkOiBsb2FkIGluc3RydWN0aW9uIHdpdGhvdXQgbWVtb3J5Iik7CiAK
ICAgICBzd2l0Y2ggKG9wKSB7CiAiIiIgKyBsb2FkQ2FzZXMgKyAiIiIKICAgICB9CiB9CiAKLWJv
b2wgVmFsaWRhdGU6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QpCithdXRvIFZhbGlkYXRlOjpzdG9yZShT
dG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFs
dWUsIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIWhhc01lbW9yeSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFVOTElLRUxZKCFoYXNNZW1vcnkoKSkpCisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFp
bGVkOiBzdG9yZSBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwogCiAgICAgc3dpdGNoIChv
cCkgewogIiIiICsgc3RvcmVDYXNlcyArICIiIgotLSAKMi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="319397"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297102</attachid>
            <date>2016-12-14 11:06:17 -0800</date>
            <delta_ts>2016-12-14 17:38:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>0001-Improve-parse-errors.patch</filename>
            <type>text/plain</type>
            <size>108723</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBkYjA5Mjk5MzRhZjMyZmYzOTU1ODNiNGMzYWZjYTlhZmY5YWY2MzUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDEwOjEzOjQ1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gSW1wcm92
ZSBwYXJzZSBlcnJvcnMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwICAgfCAgIDUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oICAgIHwgNDM3ICsrKysrKystLS0tLS0tLS0tCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8IDUyMiArKysrKysrKy0tLS0t
LS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCAg
ICAgIHwgIDUwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggICAg
ICAgICAgICB8ICA3MyArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cCAgICAgICAgICAgIHwgIDI3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvbnMuaCAgICAgICAgICB8ICAxNCArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VmFsaWRhdGUuY3BwICAgICAgICB8IDMwOSArKysrKy0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oICAgICAgICAgIHwgICAzICstCiAuLi4vd2FzbS9nZW5l
cmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkgICAgICB8ICA2MCArLS0KIDEwIGZpbGVz
IGNoYW5nZWQsIDYyMiBpbnNlcnRpb25zKCspLCA4NzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDc5MGUw
YjEuLjJlODZkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKQEAgLTE3Nyw4ICsxNzcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAKLSAgICB2b2lkIHNldEVycm9yTWVzc2FnZShT
dHJpbmcmJikgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQotCiBwcml2YXRlOgogICAg
IEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOwogICAgIEV4cHJl
c3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwpAQCAtODc0LDcgKzg3Miw4IEBAIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3Qg
dWludDhfdCogZnVuCiAgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKICAgICBCM0lSR2VuZXJhdG9y
IGNvbnRleHQodm0sIGluZm8ubWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgRnVuY3Rpb25QYXJz
ZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9uSW5kZXhTcGFjZSwgaW5mbyk7Ci0gICAgaWYgKCFw
YXJzZXIucGFyc2UoKSkKKyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKCk7Cisg
ICAgaWYgKCFwYXJzZVJlc3VsdCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCA4ODI4M2JhLi42OTk3
ZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaApAQCAtMzksNyArMzksNyBAQCBlbnVtIGNsYXNzIEJsb2NrVHlwZSB7CiB9OwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotY2xhc3MgRnVuY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFy
c2VyIHsKK2NsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjx2b2lkPiB7CiBwdWJs
aWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHByZXNz
aW9uVHlwZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRy
b2xUeXBlOwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBGdW5jdGlvblBhcnNlcihD
b250ZXh0JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVu
Z3RoLCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2Um
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2UoKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKICAg
ICBzdHJ1Y3QgQ29udHJvbEVudHJ5IHsKICAgICAgICAgRXhwcmVzc2lvbkxpc3QgZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2s7CkBAIC01NywyNSArNTcsMjggQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLSAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZUJvZHkoKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVu
cmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJldHVybigpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQm9keSgpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnlDb250cm9sKFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mLCB1bnNpZ25lZCBsZXZlbCk7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwb3BFeHByZXNzaW9uU3RhY2soRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisjZGVmaW5l
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmVzdWx0LCB3aGF0KSBkbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihtX2V4cHJlc3Npb25TdGFjay5pc0VtcHR5KCksICJjYW4ndCBwb3AgZW1wdHkgc3RhY2sgaW4g
IiB3aGF0KTsgXAorICAgICAgICByZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3
aGlsZSAoMCkKIAogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiB1bmFyeUNhc2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1
bmFyeUNhc2UoKTsKIAogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBiaW5hcnlDYXNlKCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYmluYXJ5Q2FzZSgpOwogCi0gICAgYm9vbCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVz
c2FnZSkKLSAgICB7Ci0gICAgICAgIG1fY29udGV4dC5zZXRFcnJvck1lc3NhZ2UoV1RGTW92ZSht
ZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisjZGVmaW5lIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKGFkZF9leHByZXNzaW9uKSBkbyB7IFwKKyAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2NvbnRleHQuYWRkX2V4cHJlc3Npb247ICAgXAorICAgICAgICBpZiAoVU5MSUtF
TFkoIWFkZFJlc3VsdCkpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBhZGRS
ZXN1bHQuZ2V0VW5leHBlY3RlZCgpOyAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAg
ICAgQ29udGV4dCYgbV9jb250ZXh0OwogICAgIEV4cHJlc3Npb25MaXN0IG1fZXhwcmVzc2lvblN0
YWNrOwpAQCAtOTksMTE4ICsxMDIsMTEyIEBAIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5j
dGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZSgpCithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3Vs
dAogewotICAgIGlmICghbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZS0+YXJndW1l
bnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgdWludDMyX3QgbG9jYWxDb3VudDsK
LSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1f
c2lnbmF0dXJlLT5hcmd1bWVudHMpLCAiY2FuJ3QgYWRkICIsIG1fc2lnbmF0dXJlLT5hcmd1bWVu
dHMuc2l6ZSgpLCAiIGFyZ3VtZW50cyB0byBGdW5jdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpLCAiY2FuJ3QgZ2V0IGxvY2FsIGNvdW50
Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihsb2NhbENvdW50ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyBsb2NhbCBjb3VudCBp
cyB0b28gYmlnICIsIGxvY2FsQ291bnQpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGxvY2FsQ291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxvY2FsczsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihudW1iZXJPZkxvY2FscykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgVHlwZSB0eXBlT2ZMb2NhbDsKLSAgICAgICAgaWYgKCFw
YXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2NhbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9j
YWxzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIobnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9u
J3MgbnVtYmVyIG9mIGxvY2FscyBpbiBncm91cCAiLCBpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihudW1iZXJPZkxvY2FscyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksICJGdW5jdGlvbiBzZWN0aW9uJ3MgIiwgaSwgInRoIGxvY2FsIGdyb3VwIGNvdW50IGlz
IHRvbyBiaWcgIiwgbnVtYmVyT2ZMb2NhbHMpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2NhbCksICJjYW4ndCBnZXQgRnVuY3Rpb24gbG9jYWwn
cyB0eXBlIGluIGdyb3VwICIsIGkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2Nv
bnRleHQuYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKSwgImNhbid0IGFkZCAi
LCBudW1iZXJPZkxvY2FscywgIiBGdW5jdGlvbiBsb2NhbHMgZnJvbSBncm91cCAiLCBpKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gcGFyc2VCb2R5KCk7CisgICAgYXV0byBwYXJzZWRCb2R5ID0gcGFy
c2VCb2R5KCk7CisgICAgaWYgKCFwYXJzZWRCb2R5KQorICAgICAgICByZXR1cm4gcGFyc2VkQm9k
eS5nZXRVbmV4cGVjdGVkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCb2R5KCkK
K2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9keSgpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB1aW50OF90IG9wOwotICAgICAgICBp
ZiAoIXBhcnNlVUludDgob3ApIHx8ICFpc1ZhbGlkT3BUeXBlKG9wKSkgewotICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgV1RGOjpkYXRhTG9nTG4oImF0dGVtcHRlZCB0
byBkZWNvZGUgaW52YWxpZCBvcDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQq
PihvcCkpLCAiIGF0IG9mZnNldDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQq
PihtX29mZnNldCkpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wKSwgImNhbid0IGRlY29kZSBv
cGNvZGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighaXNWYWxpZE9wVHlwZShvcCks
ICJpbnZhbGlkIG9wY29kZSAiLCBvcCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgIGRhdGFMb2dMbigicHJvY2Vzc2luZyBvcCAoIiwgbV91bnJlYWNoYWJsZUJsb2Nrcywg
Iik6ICIsICBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSksICIgYXQgb2Zm
c2V0OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwog
ICAgICAgICAgICAgbV9jb250ZXh0LmR1bXAobV9jb250cm9sU3RhY2ssIG1fZXhwcmVzc2lvblN0
YWNrKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChvcCA9PSBPcFR5cGU6OkVuZCAmJiAhbV9j
b250cm9sU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fdW5yZWFjaGFibGVCbG9j
a3MgPyB0cnVlIDogYWRkUmV0dXJuKCk7Ci0KLSAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9j
a3MpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oc3RhdGlj
X2Nhc3Q8T3BUeXBlPihvcCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHByb2Nlc3MgdW5yZWFjaGFibGUg
b3A6Iiwgb3ApOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmICghcGFyc2VFeHByZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4o
b3ApKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJmYWlsZWQgdG8gcHJvY2VzcyBvcDoiLCBvcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChvcCA9PSBPcFR5cGU6OkVuZCAmJiAhbV9jb250cm9sU3RhY2suc2l6
ZSgpKSB7CisgICAgICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcykKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgcmV0dXJuIGFkZFJldHVybigpOwogICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpCisgICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxP
cFR5cGU+KG9wKSksICJjYW4ndCBwYXJzZSB1bnJlYWNoYWJsZSBleHByZXNzaW9uICIsIG9wKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHBy
ZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSwgImNhbid0IHBhcnNlIGV4cHJlc3Npb24g
Iiwgb3ApOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjphZGRSZXR1cm4oKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6YWRkUmV0dXJuKCkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25MaXN0IHJldHVyblZhbHVlczsKICAg
ICBpZiAobV9zaWduYXR1cmUtPnJldHVyblR5cGUgIT0gVm9pZCkgewogICAgICAgICBFeHByZXNz
aW9uVHlwZSByZXR1cm5WYWx1ZTsKLSAgICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2socmV0
dXJuVmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RSWV9Q
T1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJldHVyblZhbHVlLCAicmV0dXJuIik7CiAgICAgICAg
IHJldHVyblZhbHVlcy5hcHBlbmQocmV0dXJuVmFsdWUpOwogICAgIH0KIAogICAgIG1fdW5yZWFj
aGFibGVCbG9ja3MgPSAxOwotICAgIHJldHVybiBtX2NvbnRleHQuYWRkUmV0dXJuKHJldHVyblZh
bHVlcyk7CisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkUmV0dXJuKHJldHVyblZhbHVl
cykpOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiB0
ZW1wbGF0ZTxPcFR5cGUgb3A+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlD
YXNlKCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmJpbmFyeUNhc2UoKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUgcmlnaHQ7Ci0gICAgaWYgKCFwb3BFeHBy
ZXNzaW9uU3RhY2socmlnaHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBFeHByZXNz
aW9uVHlwZSBsZWZ0OwotICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKGxlZnQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgaWYgKCFt
X2NvbnRleHQudGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCByZXN1bHQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KHJpZ2h0LCAiYmluYXJ5IHJpZ2h0Iik7CisgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyhsZWZ0LCAiYmluYXJ5IGxlZnQiKTsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9j
b250ZXh0LnRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICBpZiAo
VU5MSUtFTFkoIWFkZFJlc3VsdCkpCisgICAgICAgIHJldHVybiBhZGRSZXN1bHQuZ2V0VW5leHBl
Y3RlZCgpOworCiAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4
dD4KIHRlbXBsYXRlPE9wVHlwZSBvcD4KLWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVu
YXJ5Q2FzZSgpCithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmFyeUNhc2UoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgaWYgKCFwb3BF
eHByZXNzaW9uU3RhY2sodmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBFeHBy
ZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgaWYgKCFtX2NvbnRleHQudGVtcGxhdGUgYWRkT3A8b3A+
KHZhbHVlLCByZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXQVNNX1RSWV9Q
T1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAidW5hcnkiKTsKKworICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9jb250ZXh0LnRlbXBsYXRlIGFkZE9wPG9wPih2YWx1ZSwgcmVzdWx0KTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWFkZFJlc3VsdCkpCisgICAgICAgIHJldHVybiBhZGRSZXN1bHQuZ2V0
VW5leHBlY3RlZCgpOworCiAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KLWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihP
cFR5cGUgb3ApCithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24o
T3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgc3dpdGNoIChvcCkgewogI2RlZmlu
ZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0
dXJuIGJpbmFyeUNhc2U8T3BUeXBlOjpuYW1lPigpOwpAQCAtMjQxLDI5MSArMjM4LDIxOCBAQCBi
b29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQog
CiAgICAgY2FzZSBPcFR5cGU6OlNlbGVjdDogewogICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25k
aXRpb247Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKGNvbmRpdGlvbikpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgemVybzsKLSAg
ICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2soemVybykpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgbm9uWmVybzsKLSAgICAgICAgaWYgKCFw
b3BFeHByZXNzaW9uU3RhY2sobm9uWmVybykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25kaXRpb24sICJz
ZWxlY3QgY29uZGl0aW9uIik7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNL
X0lOVE8oemVybywgInNlbGVjdCB6ZXJvIik7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNT
SU9OX1NUQUNLX0lOVE8obm9uWmVybywgInNlbGVjdCBub24temVybyIpOwogCiAgICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkU2VsZWN0KGNv
bmRpdGlvbiwgbm9uWmVybywgemVybywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkU2VsZWN0KGNvbmRpdGlvbiwg
bm9uWmVybywgemVybywgcmVzdWx0KSk7CiAKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBw
ZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAogI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIE9w
VHlwZTo6bmFtZToKICAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9MT0FEX09QKENSRUFURV9DQVNF
KSB7CiAgICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihhbGlnbm1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIHVp
bnQzMl90IG9mZnNldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihvZmZzZXQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHBvaW50ZXI7
Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHBvaW50ZXIpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAg
aWYgKCFtX2NvbnRleHQubG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBlPihvcCksIHBvaW50ZXIs
IHJlc3VsdCwgb2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBs
b2FkIGFsaWdubWVudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IGxvYWQgb2Zmc2V0Iik7CisgICAgICAgIFdBU01fVFJZ
X1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgImxvYWQgcG9pbnRlciIpOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChsb2FkKHN0YXRpY19jYXN0PExvYWRPcFR5cGU+
KG9wKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKTsKICAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIAogICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9D
QVNFKSB7CiAgICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihhbGlnbm1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAg
IHVpbnQzMl90IG9mZnNldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihvZmZzZXQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVl
OwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlcjsKLSAgICAgICAg
aWYgKCFwb3BFeHByZXNzaW9uU3RhY2socG9pbnRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5zdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9w
VHlwZT4ob3ApLCBwb2ludGVyLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBzdG9yZSBhbGln
bm1lbnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIob2Zm
c2V0KSwgImNhbid0IGdldCBzdG9yZSBvZmZzZXQiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VY
UFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInN0b3JlIHZhbHVlIik7CisgICAgICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgInN0b3JlIHBvaW50ZXIiKTsK
KyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVP
cFR5cGU+KG9wKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCkpOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KICN1bmRlZiBDUkVBVEVfQ0FTRQogCiAgICAgY2FzZSBPcFR5cGU6OkYzMkNvbnN0
OgogICAgIGNhc2UgT3BUeXBlOjpJMzJDb25zdDogewogICAgICAgICB1aW50MzJfdCBjb25zdGFu
dDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb25zdGFudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGNvbnN0YW50KSwgImNhbid0IHBhcnNlIDMyLWJpdCBjb25zdGFudCIpOwogICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50KEkzMiwgY29uc3RhbnQp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAg
ICAgY2FzZSBPcFR5cGU6OkY2NENvbnN0OgogICAgIGNhc2UgT3BUeXBlOjpJNjRDb25zdDogewog
ICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQ2NChj
b25zdGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDY0KGNvbnN0YW50KSwgImNhbid0IHBhcnNlIDY0LWJpdCBj
b25zdGFudCIpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFk
ZENvbnN0YW50KEk2NCwgY29uc3RhbnQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkdldExvY2FsOiB7CiAgICAg
ICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
OwotICAgICAgICBpZiAoIW1fY29udGV4dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIGdldF9sb2NhbCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuZ2V0TG9jYWwoaW5kZXgsIHJlc3Vs
dCksICJjYW4ndCBnZXRfbG9jYWwgYXQgaW5kZXgiLCBpbmRleCk7CiAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6U2V0TG9jYWw6IHsKICAgICAg
ICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsK
LSAgICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2sodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LnNldExvY2FsKGluZGV4LCB2YWx1
ZSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwg
ImNhbid0IGdldCBpbmRleCBmb3Igc2V0X2xvY2FsIik7CisgICAgICAgIFdBU01fVFJZX1BPUF9F
WFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfbG9jYWwiKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIHZhbHVlKSk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OlRlZUxvY2FsOiB7CiAgICAgICAgIHVp
bnQzMl90IGluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2V4cHJlc3Npb25TdGFjay5zaXpl
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQu
c2V0TG9jYWwoaW5kZXgsIG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKSk7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBm
b3IgdGVlX2xvY2FsIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHByZXNzaW9u
U3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgdGVlX2xvY2FsIG9uIGVtcHR5IGV4cHJlc3Npb24gc3Rh
Y2siKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIG1f
ZXhwcmVzc2lvblN0YWNrLmxhc3QoKSkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAog
ICAgIGNhc2UgT3BUeXBlOjpDYWxsOiB7CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7
Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlv
bkluZGV4U3BhY2Uuc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCksICJjYW4ndCBw
YXJzZSBjYWxsJ3MgZnVuY3Rpb24gaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvbkluZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUsICJjYWxsIGZ1bmN0
aW9uIGluZGV4ICIsIGZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFj
ZSAiLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKTsKIAogICAgICAgICBjb25zdCBTaWduYXR1
cmUqIGNhbGxlZVNpZ25hdHVyZSA9IG1fZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlci5nZXQoKVtm
dW5jdGlvbkluZGV4XS5zaWduYXR1cmU7Ci0KLSAgICAgICAgaWYgKGNhbGxlZVNpZ25hdHVyZS0+
YXJndW1lbnRzLnNpemUoKSA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjYWxsZWVTaWduYXR1
cmUtPmFyZ3VtZW50cy5zaXplKCkgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsIGZ1
bmN0aW9uIGluZGV4ICIsIGZ1bmN0aW9uSW5kZXgsICIgaGFzICIsIGNhbGxlZVNpZ25hdHVyZS0+
YXJndW1lbnRzLnNpemUoKSwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBj
dXJyZW50bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwog
CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5z
aXplKCkgLSBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4gYXJnczsKLSAgICAgICAgYXJncy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxs
ZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgY2FsbCdzICIsIGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgIiBh
cmd1bWVudHMiKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsg
aSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYXJncy51bmNo
ZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAogICAgICAgICBFeHByZXNzaW9uVHlw
ZSByZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247Ci0gICAgICAgIGlmICghbV9jb250
ZXh0LmFkZENhbGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRDYWxsKGZ1bmN0aW9uSW5kZXgsIGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0
KSk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAg
ICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKIAotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBP
cFR5cGU6OkNhbGxJbmRpcmVjdDogewotICAgICAgICBpZiAoIW1faW5mby50YWJsZUluZm9ybWF0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiY2FsbF9pbmRpcmVjdCBp
cyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIik7CiAgICAg
ICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KHNpZ25hdHVyZUluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1
aW50OF90IHJlc2VydmVkOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChyZXNlcnZlZCAhPSAwKQot
ICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiY2FsbF9pbmRpcmVjdCAncmVzZXJ2
ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwIik7Ci0KLSAgICAgICAgaWYgKG1faW5mby5zaWduYXR1
cmVzLnNpemUoKSA8PSBzaWduYXR1cmVJbmRleCkKLSAgICAgICAgICAgIHJldHVybiBzZXRFcnJv
ck1lc3NhZ2UoIlRyaWVkIHRvIHVzZSBhIHNpZ25hdHVyZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB2
YWxpZCBzaWduYXR1cmVzIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby50
YWJsZUluZm9ybWF0aW9uLCAiY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJs
ZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCBjYWxsX2luZGlyZWN0
J3Mgc2lnbmF0dXJlIGluZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDEocmVzZXJ2ZWQpLCAiY2FuJ3QgZ2V0IGNhbGxfaW5kaXJlY3QncyByZXNlcnZlZCBi
eXRlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXJlc2VydmVkLCAiY2FsbF9pbmRp
cmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihtX2luZm8uc2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgs
ICJjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4
Y2VlZHMga25vd24gc2lnbmF0dXJlcyAiLCBtX2luZm8uc2lnbmF0dXJlcy5zaXplKCkpOwogCiAg
ICAgICAgIGNvbnN0IFNpZ25hdHVyZSogY2FsbGVlU2lnbmF0dXJlID0gJm1faW5mby5zaWduYXR1
cmVzW3NpZ25hdHVyZUluZGV4XTsKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxs
ZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgKyAxOyAvLyBBZGQgdGhlIGNhbGxlZSdzIGlu
ZGV4LgotICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUo
KSkKLSAgICAgICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2UoIk5vdCBlbm91Z2ggdmFsdWVz
IG9uIHRoZSBzdGFjayBmb3IgY2FsbF9pbmRpcmVjdCIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGFyZ3VtZW50Q291bnQgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsX2lu
ZGlyZWN0IGV4cGVjdHMgIiwgYXJndW1lbnRDb3VudCwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhw
cmVzc2lvbiBzdGFjayBjdXJyZW50bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgp
LCAiIHZhbHVlcyIpOwogCiAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKLSAg
ICAgICAgaWYgKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2UoIk91dCBvZiBtZW1vcnkiKTsKLQorICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENv
dW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGFyZ3VtZW50Q291bnQs
ICIgY2FsbF9pbmRpcmVjdCBhcmd1bWVudHMiKTsKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1l
bnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGFyZ3VtZW50Q291bnQ7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVu
dEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBh
cmdzLnVuY2hlY2tlZEFwcGVuZChtX2V4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYg
KCFtX2NvbnRleHQuYWRkQ2FsbEluZGlyZWN0KGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkQ2FsbEluZGlyZWN0KGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0KSk7CiAK
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAgICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Qmxv
Y2s6IHsKICAgICAgICAgVHlwZSBpbmxpbmVTaWduYXR1cmU7Ci0gICAgICAgIGlmICghcGFyc2VS
ZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25h
dHVyZSksICJjYW4ndCBnZXQgYmxvY2sncyBpbmxpbmUgc2lnbmF0dXJlIik7CiAgICAgICAgIG1f
Y29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBtX2NvbnRl
eHQuYWRkQmxvY2soaW5saW5lU2lnbmF0dXJlKSB9KTsKICAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2sgPSBFeHByZXNzaW9uTGlzdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6TG9vcDogewogICAgICAgICBUeXBl
IGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgaWYgKCFwYXJzZVJlc3VsdFR5cGUoaW5saW5lU2ln
bmF0dXJlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUoaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBs
b29wJ3MgaW5saW5lIHNpZ25hdHVyZSIpOwogICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQo
eyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgbV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2ln
bmF0dXJlKSB9KTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBFeHByZXNzaW9uTGlzdCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBjYXNlIE9wVHlwZTo6SWY6IHsKICAgICAgICAgVHlwZSBpbmxpbmVTaWduYXR1cmU7Ci0gICAg
ICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOwotICAgICAg
ICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhjb25kaXRpb24pKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2w7Ci0gICAgICAgIGlmICghbV9j
b250ZXh0LmFkZElmKGNvbmRpdGlvbiwgaW5saW5lU2lnbmF0dXJlLCBjb250cm9sKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVJlc3VsdFR5cGUoaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBpZidzIGlubGluZSBzaWdu
YXR1cmUiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25k
aXRpb24sICJpZiBjb25kaXRpb24iKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkSWYoY29uZGl0aW9uLCBpbmxpbmVTaWduYXR1cmUsIGNvbnRyb2wpKTsKICAgICAgICAgbV9j
b250cm9sU3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIGNvbnRyb2wg
fSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBP
cFR5cGU6OkVsc2U6IHsKLSAgICAgICAgaWYgKCFtX2NvbnRyb2xTdGFjay5zaXplKCkpIHsKLSAg
ICAgICAgICAgIHNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBlbHNlIGJsb2NrIGF0
IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkRWxzZShtX2NvbnRyb2xT
dGFjay5sYXN0KCkuY29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFj
ay5pc0VtcHR5KCksICJjYW4ndCB1c2UgZWxzZSBibG9jayBhdCB0aGUgdG9wLWxldmVsIG9mIGEg
ZnVuY3Rpb24iKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRWxzZShtX2Nv
bnRyb2xTdGFjay5sYXN0KCkuY29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluaygwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkJyOgogICAgIGNh
c2UgT3BUeXBlOjpCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHRhcmdldDsKLSAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMih0YXJnZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXpl
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBpZiAob3AgPT0g
T3BUeXBlOjpCcklmKSB7Ci0gICAgICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhjb25k
aXRpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlCisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhcmdldCksICJjYW4n
dCBnZXQgYnIgLyBicl9pZidzIHRhcmdldCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJiciAvIGJyX2lmJ3MgdGFyZ2V0ICIs
IHRhcmdldCwgIiBleGNlZWRzIGNvbnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5z
aXplKCkpOworICAgICAgICBpZiAob3AgPT0gT3BUeXBlOjpCcklmKQorICAgICAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25kaXRpb24sICJiciAvIGJyX2lmIGNv
bmRpdGlvbiIpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tz
ID0gMTsKIAogICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29u
dHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOwogCi0gICAgICAgIHJl
dHVybiBtX2NvbnRleHQuYWRkQnJhbmNoKGRhdGEsIGNvbmRpdGlvbiwgbV9leHByZXNzaW9uU3Rh
Y2spOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRCcmFuY2goZGF0YSwgY29u
ZGl0aW9uLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAogICAgIGNhc2UgT3BUeXBlOjpCclRhYmxlOiB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9m
VGFyZ2V0czsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihudW1iZXJPZlRhcmdldHMpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRp
b247CisgICAgICAgIHVpbnQzMl90IGRlZmF1bHRUYXJnZXQ7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG51bWJlck9mVGFyZ2V0cyksICJjYW4ndCBnZXQgdGhl
IG51bWJlciBvZiB0YXJnZXRzIGZvciBicl90YWJsZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKG51bWJlck9mVGFyZ2V0cyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksICJicl90YWJsZSdzIG51bWJlciBvZiB0YXJnZXRzIGlzIHRvbyBiaWcgIiwgbnVtYmVy
T2ZUYXJnZXRzKTsKIAogICAgICAgICBWZWN0b3I8Q29udHJvbFR5cGUqPiB0YXJnZXRzOwotICAg
ICAgICBpZiAoIXRhcmdldHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mVGFyZ2V0cykpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
dGFyZ2V0cy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZUYXJnZXRzKSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgbnVtYmVyT2ZUYXJnZXRzLCAiIGJyX3RhYmxlIHRhcmdldHMiKTsK
ICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mVGFyZ2V0czsgKytpKSB7
CiAgICAgICAgICAgICB1aW50MzJfdCB0YXJnZXQ7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKHRhcmdldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKHRhcmdldCksICJjYW4ndCBnZXQgIiwgaSwgInRoIHRhcmdldCBmb3IgYnJfdGFi
bGUiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJv
bFN0YWNrLnNpemUoKSwgImJyX3RhYmxlJ3MgIiwgaSwgInRoIHRhcmdldCAiLCB0YXJnZXQsICIg
ZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKICAg
ICAgICAgICAgIHRhcmdldHMudW5jaGVja2VkQXBwZW5kKCZtX2NvbnRyb2xTdGFja1ttX2NvbnRy
b2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YSk7CiAgICAgICAgIH0KIAot
ICAgICAgICB1aW50MzJfdCBkZWZhdWx0VGFyZ2V0OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGRlZmF1bHRUYXJnZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGlmIChkZWZhdWx0VGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247Ci0gICAg
ICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKGNvbmRpdGlvbikpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRTd2l0Y2goY29u
ZGl0aW9uLCB0YXJnZXRzLCBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAx
IC0gZGVmYXVsdFRhcmdldF0uY29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoZGVmYXVsdFRhcmdldCksICJjYW4ndCBnZXQgZGVmYXVsdCB0YXJnZXQgZm9yIGJy
X3RhYmxlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGVmYXVsdFRhcmdldCA+PSBt
X2NvbnRyb2xTdGFjay5zaXplKCksICJicl90YWJsZSdzIGRlZmF1bHQgdGFyZ2V0ICIsIGRlZmF1
bHRUYXJnZXQsICIgZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2su
c2l6ZSgpKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25k
aXRpb24sICJicl90YWJsZSBjb25kaXRpb24iKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkU3dpdGNoKGNvbmRpdGlvbiwgdGFyZ2V0cywgbV9jb250cm9sU3RhY2tbbV9jb250
cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRdLmNvbnRyb2xEYXRhLCBtX2V4cHJl
c3Npb25TdGFjaykpOwogCiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9w
VHlwZTo6UmV0dXJuOiB7CkBAIC01MzcsODQgKzQ2MSw4MiBAQCBib29sIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCBpbiB0aGF0IGl0IHdpbGwgbW9kaWZ5IHRoZSBleHByZXNz
aW9uU3RhY2sgZm9yIHRoZSByZXN1bHQgb2YgdGhlIGJsb2NrLgogICAgICAgICAvLyBUaGF0J3Mg
YSBsaXR0bGUgdG9vIGVmZmVjdGZ1bCBmb3IgbWUgYnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBB
UEkgcmlnaHQgbm93LgogICAgICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQzNTMKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuZW5kQmxvY2soZGF0
YSwgbV9leHByZXNzaW9uU3RhY2spKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFj
aykpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGRhdGEuZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKICAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6IHsKICAgICAgICAgbV91bnJlYWNo
YWJsZUJsb2NrcyA9IDE7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpEcm9wOiB7Ci0gICAgICAgIGlmICghbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoIkF0dGVt
cHRlZCB0byBkcm9wIGFuIGV4cHJlc3Npb24gZnJvbSBhbiBlbXB0eSBzdGFjay4iKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYW4ndCBkcm9wIG9uIGVtcHR5IHN0YWNr
Iik7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpO
b3A6IHsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBPcFR5cGU6Okdyb3dNZW1vcnk6CisgICAgICAgIHJldHVybiBmYWlsKCJub3Qg
eWV0IGltcGxlbWVudGVkOiBncm93X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1l
bnRlZC4KKwogICAgIGNhc2UgT3BUeXBlOjpDdXJyZW50TWVtb3J5OgorICAgICAgICByZXR1cm4g
ZmFpbCgibm90IHlldCBpbXBsZW1lbnRlZDogY3VycmVudF9tZW1vcnkiKTsgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQuCisKICAgICBjYXNlIE9wVHlwZTo6R2V0R2xvYmFsOgotICAgIGNh
c2UgT3BUeXBlOjpTZXRHbG9iYWw6IHsKLSAgICAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgICAgIHJldHVybiBmYWls
KCJub3QgeWV0IGltcGxlbWVudGVkOiBnZXRfZ2xvYmFsIik7IC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkLgorCisgICAgY2FzZSBPcFR5cGU6OlNldEdsb2JhbDoKKyAgICAgICAgcmV0dXJu
IGZhaWwoIm5vdCB5ZXQgaW1wbGVtZW50ZWQ6IHNldF9nbG9iYWwiKTsgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQuCiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApCithdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV91bnJlYWNoYWJsZUJsb2Nrcyk7CiAgICAgc3dp
dGNoIChvcCkgewogICAgIGNhc2UgT3BUeXBlOjpFbHNlOiB7CiAgICAgICAgIGlmIChtX3VucmVh
Y2hhYmxlQmxvY2tzID4gMSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgICAgICBDb250cm9sRW50cnkmIGRhdGEgPSBtX2NvbnRyb2xTdGFj
ay5sYXN0KCk7CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAwOwotICAgICAgICBpZiAo
IW1fY29udGV4dC5hZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhLmNvbnRyb2xEYXRhKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
RWxzZVRvVW5yZWFjaGFibGUoZGF0YS5jb250cm9sRGF0YSkpOwogICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5zaHJpbmsoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5y
ZWFjaGFibGVCbG9ja3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBt
X2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRk
RW5kVG9VbnJlYWNoYWJsZShkYXRhKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGRh
dGEpKTsKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjayk7CiAgICAgICAgIH0KICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0t
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBjYXNlIE9wVHlwZTo6TG9vcDoKICAgICBjYXNlIE9wVHlwZTo6SWY6CiAgICAgY2FzZSBPcFR5
cGU6OkJsb2NrOiB7CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MrKzsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgLy8gdHdvIGltbWVk
aWF0ZSBjYXNlcwogICAgIGNhc2UgT3BUeXBlOjpCcjoKICAgICBjYXNlIE9wVHlwZTo6QnJJZjog
ewogICAgICAgICB1aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIo
dW51c2VkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNl
VmFyVUludDMyKHVudXNlZCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHVudXNlZCksICJjYW4ndCBnZXQgYnIgLyBicl9pZiBpbiB1bnJlYWNoYWJsZSBjb250
ZXh0Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNl
ZCksICJjYW4ndCBnZXQgYnIgLyBicl9pZiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcwpAQCAt
NjI1LDI1ICs1NDcsMTQgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJl
YWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogICAgIGNhc2UgT3BUeXBlOjpTZXRMb2NhbDoK
ICAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKICAgICAgICAgdWludDMyX3QgdW51c2VkOwot
ICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51c2VkKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodW51c2VkKSwgImNhbid0IGdldCBjb25zdCAvIGxv
Y2FsIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+Ojpwb3BFeHByZXNzaW9uU3RhY2soRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKLXsKLSAg
ICBpZiAobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fZXhw
cmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBhIHN0YWNrIHZhbHVlIHdoZW4g
bm9uZSBleGlzdGVkIik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB7IH07CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDIxMmE5YTMuLmE5YjYxYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0zOSw1
MyArMzksMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2Uo
KQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiB7Ci0gICAgbV9tb2R1bGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPE1vZHVsZUluZm9ybWF0aW9uPigpOwotCisgICAgbV9yZXN1bHQu
bW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZvcm1hdGlvbj4oKTsKICAgICBjb25z
dCBzaXplX3QgbWluU2l6ZSA9IDg7Ci0gICAgaWYgKGxlbmd0aCgpIDwgbWluU2l6ZSkgewotICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9ICJNb2R1bGUgaXMgIiArIFN0cmluZzo6bnVtYmVyKGxlbmd0
aCgpKSArICIgYnl0ZXMsIGV4cGVjdGVkIGF0IGxlYXN0ICIgKyBTdHJpbmc6Om51bWJlcihtaW5T
aXplKSArICIgYnl0ZXMiOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICgh
Y29uc3VtZUNoYXJhY3RlcigwKSB8fCAhY29uc3VtZVN0cmluZygiYXNtIikpIHsKLSAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSAiTW9kdWxlcyBkb2Vzbid0IHN0YXJ0IHdpdGggJ1xcMGFzbSciOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgdWludDMyX3QgdmVyc2lvbk51bWJl
cjsKLSAgICBpZiAoIXBhcnNlVUludDMyKHZlcnNpb25OdW1iZXIpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNl
IHZlcnNpb24gbnVtYmVyIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIGlm
ICh2ZXJzaW9uTnVtYmVyICE9IGV4cGVjdGVkVmVyc2lvbk51bWJlcikgewotICAgICAgICAvLyBG
SVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzkxOQotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJ1bmV4cGVjdGVkIHZl
cnNpb24gbnVtYmVyIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotCi0gICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiUGFzc2VkIHByb2Nlc3NpbmcgaGVhZGVyLiIp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobGVuZ3RoKCkgPCBtaW5TaXplLCAiZXhwZWN0ZWQg
YSBtb2R1bGUgb2YgYXQgbGVhc3QgIiwgbWluU2l6ZSwgIiBieXRlcyIpOworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIWNvbnN1bWVDaGFyYWN0ZXIoMCkgfHwgIWNvbnN1bWVTdHJpbmcoImFzbSIp
LCAibW9kdWxlcyBkb2Vzbid0IHN0YXJ0IHdpdGggJ1xcMGFzbSciKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQzMih2ZXJzaW9uTnVtYmVyKSwgImNhbid0IHBhcnNlIHZlcnNp
b24gbnVtYmVyIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih2ZXJzaW9uTnVtYmVyICE9IGV4
cGVjdGVkVmVyc2lvbk51bWJlciwgInVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgIiwgdmVyc2lv
bk51bWJlciwgIiBleHBlY3RlZCAiLCBleHBlY3RlZFZlcnNpb25OdW1iZXIpOwogCiAgICAgU2Vj
dGlvbnM6OlNlY3Rpb24gcHJldmlvdXNTZWN0aW9uID0gU2VjdGlvbnM6OlVua25vd247CiAgICAg
d2hpbGUgKG1fb2Zmc2V0IDwgbGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nTG4oIlN0YXJ0aW5nIHRvIHBhcnNlIG5leHQgc2VjdGlvbiBhdCBvZmZz
ZXQ6ICIsIG1fb2Zmc2V0KTsKLQogICAgICAgICB1aW50OF90IHNlY3Rpb25CeXRlOwotICAgICAg
ICBpZiAoIXBhcnNlVUludDcoc2VjdGlvbkJ5dGUpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBp
bXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzkxOQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgZ2V0IHNl
Y3Rpb24gYnl0ZSI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KIAotICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiU2VjdGlvbiBieXRlOiAi
LCBzZWN0aW9uQnl0ZSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDco
c2VjdGlvbkJ5dGUpLCAiY2FuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOwogCiAgICAgICAgIFNlY3Rp
b25zOjpTZWN0aW9uIHNlY3Rpb24gPSBTZWN0aW9uczo6VW5rbm93bjsKICAgICAgICAgaWYgKHNl
Y3Rpb25CeXRlKSB7CkBAIC05MywxMzQgKzYyLDg4IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZSgpCiAgICAgICAgICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PFNlY3Rpb25zOjpTZWN0
aW9uPihzZWN0aW9uQnl0ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIVNlY3Rpb25zOjp2
YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJpbnZhbGlk
IHNlY3Rpb24gb3JkZXIiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
ICAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihzZWN0aW9uTGVuZ3RoKSkgewotICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJv
ciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkK
LSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBzZWN0aW9uIGxlbmd0
aCI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
c2VjdGlvbkxlbmd0aCA+IGxlbmd0aCgpIC0gbV9vZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJzZWN0aW9uIGNv
bnRlbnQgd291bGQgb3ZlcmZsb3cgTW9kdWxlJ3Mgc2l6ZSI7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighU2VjdGlvbnM6
OnZhbGlkYXRlT3JkZXIocHJldmlvdXNTZWN0aW9uLCBzZWN0aW9uKSwgImludmFsaWQgc2VjdGlv
biBvcmRlciwgIiwgcHJldmlvdXNTZWN0aW9uLCAiIGZvbGxvd2VkIGJ5ICIsIHNlY3Rpb24pOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3Ro
KSwgImNhbid0IGdldCAiLCBzZWN0aW9uLCAiIHNlY3Rpb24ncyBsZW5ndGgiKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihzZWN0aW9uTGVuZ3RoID4gbGVuZ3RoKCkgLSBtX29mZnNldCwg
c2VjdGlvbiwgInNlY3Rpb24gb2Ygc2l6ZSAiLCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJm
bG93IE1vZHVsZSdzIHNpemUiKTsKIAogICAgICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2Vj
dGlvbkxlbmd0aDsKIAogICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKLSAgICAgICAgLy8gRklY
TUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGluIG1hY3JvIGJlbG93IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSNkZWZpbmUgV0FTTV9TRUNUSU9OX1BBUlNF
KE5BTUUsIElELCBERVNDUklQVElPTikgXAotICAgICAgICBjYXNlIFNlY3Rpb25zOjpOQU1FOiB7
IFwKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKSBcCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJQYXJzaW5nICIgREVTQ1JJUFRJT04pOyBcCi0gICAgICAgICAgICBpZiAoIXBhcnNlICMjIE5B
TUUoKSkgeyBcCi0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFy
c2Ugc2VjdGlvbiAiICNOQU1FICI6ICIgREVTQ1JJUFRJT047IFwKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgYnJlYWs7IFwKKyNk
ZWZpbmUgV0FTTV9TRUNUSU9OX1BBUlNFKE5BTUUsIElELCBERVNDUklQVElPTikgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBjYXNlIFNlY3Rpb25zOjpOQU1FOiB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3Vs
dCA9IHBhcnNlICMjIE5BTUUoKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghcmVzdWx0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KHJlc3VsdC5lcnJvcigpKTsgICAg
ICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9XQVNN
X1NFQ1RJT04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQog
CiAgICAgICAgIGNhc2UgU2VjdGlvbnM6OlVua25vd246IHsKLSAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGlu
Zy4iKTsKICAgICAgICAgICAgIC8vIElnbm9yZSBzZWN0aW9uJ3MgbmFtZSBMRUIgYW5kIGJ5dGVz
OiB0aGV5J3JlIGFscmVhZHkgaW5jbHVkZWQgaW4gc2VjdGlvbkxlbmd0aC4KICAgICAgICAgICAg
IG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
TG4oIkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKLQotICAgICAgICBpZiAoZW5kICE9IG1f
b2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2Vj
dGlvbiI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOwogCiAgICAgICAgIHByZXZpb3VzU2Vj
dGlvbiA9IHNlY3Rpb247CiAgICAgfQogCi0gICAgLy8gVE9ETwotICAgIG1fZmFpbGVkID0gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUobV9yZXN1bHQpOwogfQog
Ci1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZVR5cGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3QgY291bnQ7Ci0gICAgaWYg
KCFwYXJzZVZhclVJbnQzMihjb3VudCkKLSAgICAgICAgfHwgY291bnQgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+c2lnbmF0dXJl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiICBjb3VudDogIiwgY291bnQpOworCisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0
IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJUeXBlIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIGNvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jl
c3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVu
dHJpZXMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAg
ICAgICAgIGludDhfdCB0eXBlOwotICAgICAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUgIT0gRnVuYykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiR290IGZ1bmN0aW9uIHR5cGUuIik7Ci0KICAgICAgICAgdWludDMyX3QgYXJndW1l
bnRDb3VudDsKICAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCkKLSAgICAgICAgICAgIHx8IGFyZ3VtZW50
Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgICAg
ICB8fCAhYXJndW1lbnRUeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZ0xuKCIgIGFyZ3VtZW50IGNvdW50OiAiLCBhcmd1bWVudENvdW50KTsKKworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBnZXQgIiwg
aSwgInRoIFR5cGUncyB0eXBlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAh
PSBGdW5jLCBpLCAidGggVHlwZSBpcyBub24tRnVuYyAiLCB0eXBlKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCksICJjYW4ndCBnZXQg
IiwgaSwgInRoIFR5cGUncyBhcmd1bWVudCBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGFyZ3VtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50KTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJndW1lbnRUeXBlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBU
eXBlIHNlY3Rpb24ncyAiLCBpLCAidGggIiwgYXJndW1lbnRDb3VudCwgIiBhcmd1bWVudHMiKTsK
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7
CiAgICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAgICAgIGlmICghcGFyc2VS
ZXN1bHRUeXBlKGFyZ3VtZW50VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGFyZ3VtZW50
VHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKICAgICAgICAgICAg
IGFyZ3VtZW50VHlwZXMudW5jaGVja2VkQXBwZW5kKGFyZ3VtZW50VHlwZSk7CiAgICAgICAgIH0K
IAogICAgICAgICB1aW50OF90IHJldHVybkNvdW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDEocmV0dXJuQ291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAi
LCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOwogICAgICAgICBUeXBlIHJldHVyblR5cGU7
CiAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4ocmV0dXJuQ291
bnQpOwotCiAgICAgICAgIGlmIChyZXR1cm5Db3VudCkgewogICAgICAgICAgICAgVHlwZSB2YWx1
ZTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUodmFsdWUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiB2YWx1
ZSIpOwogICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6Vm9pZDsKIAot
ICAgICAgICBtX21vZHVsZS0+c2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoeyByZXR1cm5UeXBl
LCBXVEZNb3ZlKGFyZ3VtZW50VHlwZXMpIH0pOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPnNp
Z25hdHVyZXMudW5jaGVja2VkQXBwZW5kKHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5
cGVzKSB9KTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBpbXBvcnRDb3VudDsK
LSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KQotICAgICAgICB8fCBpbXBvcnRD
b3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwg
IW1fbW9kdWxlLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklY
TUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAg
ICAgICB8fCAhbV9tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1w
b3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJ
WE1FcyBiZWxvdy4KLSAgICAgICAgfHwgIW1fZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVD
YXBhY2l0eShpbXBvcnRDb3VudCkpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3
ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4gV2UnbGwgYWxsb2NhdGUgc29tZSBtb3JlIGhlcmUgd2hl
biB3ZSBrbm93IGhvdyBtYW55IGZ1bmN0aW9ucyB0byBleHBlY3QuCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbXBvcnRDb3Vu
dCksICJjYW4ndCBnZXQgSW1wb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW1wb3J0Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpLCAiSW1wb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGltcG9ydENvdW50KTsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9j
YXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShp
bXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRD
b3VudCwgIiBpbXBvcnQgZnVuY3Rpb25zIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMg
d2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2UudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGZ1
bmN0aW9ucyBpbiB0aGUgaW5kZXggc3BhY2UiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRl
cyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LiBXZSdsbCBhbGxvY2F0ZSBzb21lIG1vcmUg
aGVyZSB3aGVuIHdlIGtub3cgaG93IG1hbnkgZnVuY3Rpb25zIHRvIGV4cGVjdC4KIAogICAgIGZv
ciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7
ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIEltcG9ydCBpbXA7CkBAIC0yMjgsMTcxICsxNTEs
MTU2IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCiAgICAgICAgIHVpbnQzMl90
IGZpZWxkTGVuOwogICAgICAgICBTdHJpbmcgbW9kdWxlU3RyaW5nOwogICAgICAgICBTdHJpbmcg
ZmllbGRTdHJpbmc7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobW9kdWxlTGVuKQotICAg
ICAgICAgICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwg
InRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIGxlbmd0aCIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVsZUxlbiksICJjYW4n
dCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgb2YgbGVuZ3Ro
ICIsIG1vZHVsZUxlbik7CiAgICAgICAgIGltcC5tb2R1bGUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKG1fdm0sIG1vZHVsZVN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZmll
bGRMZW4pCi0gICAgICAgICAgICB8fCAhY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZp
ZWxkTGVuKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4
U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVy
LCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1v
ZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwogICAgICAgICBpbXAuZmllbGQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKG1fdm0sIGZpZWxkU3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZUV4
dGVybmFsS2luZChpbXAua2luZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoaW1wLmtpbmQpLCAiY2Fu
J3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBt
b2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgc3dp
dGNoIChpbXAua2luZCkgewogICAgICAgICBjYXNlIEV4dGVybmFsOjpGdW5jdGlvbjogewogICAg
ICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKLSAgICAgICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaWduYXR1cmVJbmRleCkKLSAgICAgICAgICAgICAg
ICB8fCBmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1fbW9kdWxlLT5zaWduYXR1cmVzLnNpemUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpbXAua2luZElu
ZGV4ID0gbV9tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICBTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9ICZtX21vZHVsZS0+c2lnbmF0dXJlc1tmdW5jdGlvblNpZ25hdHVy
ZUluZGV4XTsKLSAgICAgICAgICAgIG1fbW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudW5jaGVja2Vk
QXBwZW5kKHNpZ25hdHVyZSk7Ci0gICAgICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS51bmNo
ZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGlt
cG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIs
IG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1fcmVzdWx0
Lm1vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCksICJpbnZhbGlkIGZ1bmN0aW9uIHNpZ25hdHVyZSBm
b3IgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0LCAiLCBmdW5jdGlvblNpZ25hdHVyZUluZGV4
LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMuc2l6
ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJp
bmcsICInIik7CisgICAgICAgICAgICBpbXAua2luZEluZGV4ID0gbV9yZXN1bHQubW9kdWxlLT5p
bXBvcnRGdW5jdGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgU2lnbmF0dXJlKiBzaWduYXR1cmUg
PSAmbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdOwor
ICAgICAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudW5jaGVja2VkQXBw
ZW5kKHNpZ25hdHVyZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uu
dW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEV4dGVybmFsOjpUYWJsZTogewogICAgICAgICAgICAgYm9vbCBpc0lt
cG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVGFibGVIZWxwZXIoaXNJbXBvcnQp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFBhcnRpYWxSZXN1
bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXRVbmV4
cGVjdGVkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4
dGVybmFsOjpNZW1vcnk6IHsKICAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOwotICAg
ICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJz
ZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3Vs
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpHbG9iYWw6
IHsKICAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQxMzMKICAgICAgICAgICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxl
IGdsb2JhbCB2YXJpYWJsZXMgY2FuIGJlIGltcG9ydGVkLgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICBtX21vZHVsZS0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoaW1wKTsK
KyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnVuY2hlY2tlZEFwcGVuZChpbXApOwog
ICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9k
dWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICgh
cGFyc2VWYXJVSW50MzIoY291bnQpCi0gICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKQotICAgICAgICB8fCAhbV9tb2R1bGUtPmludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkKLSAgICAgICAgfHwgIW1f
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkKLSAgICAg
ICAgfHwgIW1fZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShtX2Z1bmN0aW9u
SW5kZXhTcGFjZS5zaXplKCkgKyBjb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgRnVu
Y3Rpb24gc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJGdW5jdGlvbiBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9yZXN1bHQubW9kdWxlLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQs
ICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVz
dWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICJGdW5jdGlvbiBsb2Nh
dGlvbnMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5mdW5jdGlvbkluZGV4
U3BhY2UudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXpl
KCkgKyBjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwg
IiBtb3JlIGZ1bmN0aW9ucyBpbiB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2UiKTsKIAogICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IHR5
cGVOdW1iZXI7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodHlwZU51bWJlcikKLSAgICAg
ICAgICAgIHx8IHR5cGVOdW1iZXIgPj0gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0
eXBlIG51bWJlciIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0g
bV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSwgaSwgInRoIEZ1bmN0aW9uIHR5cGUg
bnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7CiAKLSAgICAgICAgU2lnbmF0dXJlKiBz
aWduYXR1cmUgPSAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbdHlwZU51bWJlcl07CisgICAgICAgIFNp
Z25hdHVyZSogc2lnbmF0dXJlID0gJm1fcmVzdWx0Lm1vZHVsZS0+c2lnbmF0dXJlc1t0eXBlTnVt
YmVyXTsKICAgICAgICAgLy8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5k
LgogICAgICAgICBzaXplX3Qgc3RhcnQgPSAwOwogICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAg
ICAgICAgbV9tb2R1bGUtPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVu
ZChzaWduYXR1cmUpOwotICAgICAgICBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS51
bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbnRl
cm5hbEZ1bmN0aW9uU2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKKyAgICAg
ICAgbV9yZXN1bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnVuY2hlY2tlZEFwcGVuZCh7IHN0
YXJ0LCBlbmQgfSk7CisgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNr
ZWRBcHBlbmQoc2lnbmF0dXJlKTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHModWlu
dDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKQorYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFT
U0VSVCghbWF4aW11bSk7CiAKICAgICB1aW50OF90IGZsYWdzOwotICAgIGlmICghcGFyc2VWYXJV
SW50MShmbGFncykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcGFyc2VWYXJV
SW50MzIoaW5pdGlhbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQxKGZsYWdzKSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1p
dHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0
aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7
CiAKICAgICBpZiAoZmxhZ3MpIHsKICAgICAgICAgdWludDMyX3QgbWF4aW11bUludDsKLSAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtSW50KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoaW5pdGlhbCA+IG1heGltdW1JbnQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIG1heGltdW0gcGFn
ZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhpbXVt
SW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5p
dGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gIiwgbWF4aW11bUludCk7
CiAgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OwogICAgIH0KIAotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVs
cGVyKGJvb2wgaXNJbXBvcnQpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihi
b29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgLy8gV2UncmUgb25seSBhbGxv
d2VkIGEgdG90YWwgb2Ygb25lIFRhYmxlIGltcG9ydCBvciBkZWZpbml0aW9uLgotICAgIGlmICht
X2hhc1RhYmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihtX2hhc1RhYmxlLCAiVGFibGUgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhh
cyBhIHRhYmxlIik7CiAKICAgICBtX2hhc1RhYmxlID0gdHJ1ZTsKIAogICAgIGludDhfdCB0eXBl
OwotICAgIGlmICghcGFyc2VJbnQ3KHR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHR5cGUgIT0gV2FzbTo6QW55ZnVuYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5
cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRh
YmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKIAogICAgIHVpbnQzMl90
IGluaXRpYWw7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBpZiAo
IXBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIUpTV2ViQXNzZW1ibHlUYWJsZTo6aXNWYWxpZFNpemUoaW5pdGlh
bCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBh
cnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VMWSgh
bGltaXRzKSkKKyAgICAgICAgcmV0dXJuIGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighSlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFs
KSwgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxp
ZCIpOwogCiAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCi0g
ICAgbV9tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWws
IG1heGltdW0sIGlzSW1wb3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPnRhYmxlSW5mb3JtYXRp
b24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1heGltdW0sIGlzSW1wb3J0KTsKIAotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBvbmx5IGFsbG93IG9uZSB0
YWJsZSBmb3Igbm93LgotICAgIGlmIChjb3VudCAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3Qg
Z2V0IFRhYmxlJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IDEs
ICJUYWJsZSBjb3VudCBvZiAiLCBjb3VudCwgIiBpcyBpbnZhbGlkLCBvbmx5IDEgaXMgYWxsb3dl
ZCBmb3Igbm93Iik7CiAKICAgICBib29sIGlzSW1wb3J0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHBh
cnNlVGFibGVIZWxwZXIoaXNJbXBvcnQpOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFy
c2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0LmdldFVuZXhwZWN0ZWQoKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KQor
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICAvLyBXZSBkb24ndCBhbGxvdyByZWRlY2xhcmluZyBtZW1vcnku
IEVpdGhlciB2aWEgaW1wb3J0IG9yIGRlZmluaXRpb24uCi0gICAgaWYgKG1fbW9kdWxlLT5tZW1v
cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fcmVz
dWx0Lm1vZHVsZS0+bWVtb3J5LCAiTWVtb3J5IHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIElt
cG9ydCBoYXMgYSBtZW1vcnkiKTsKIAogICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50Owog
ICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50OwogICAgIHsKICAgICAgICAgdWludDMyX3Qg
aW5pdGlhbDsKICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICAg
ICAgaWYgKCFwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJl
c2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFs
aW1pdHMpKQorICAgICAgICAgICAgcmV0dXJuIGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7CiAgICAg
ICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgaWYg
KCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFs
KSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIGludmFs
aWQiKTsKIAogICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFnZUNvdW50KGluaXRpYWwpOwog
CiAgICAgICAgIGlmIChtYXhpbXVtKSB7Ci0gICAgICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKCptYXhpbXVtKSwgIk1l
bW9yeSdzIG1heGltdW0gcGFnZSBjb3VudCBvZiAiLCAqbWF4aW11bSwgIiBpcyBpbnZhbGlkIik7
CiAgICAgICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gUGFnZUNvdW50KCptYXhpbXVtKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQwMCwxMjUgKzMwOCwxMTQgQEAgYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpCiAgICAgQVNTRVJUKCFtYXhpbXVtUGFn
ZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKICAgICBW
ZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07Ci0gICAgbV9tb2R1bGUtPm1lbW9y
eSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQs
IHBpbm5lZFNpemVzLCBpc0ltcG9ydCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV9yZXN1bHQu
bW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhp
bXVtUGFnZUNvdW50LCBwaW5uZWRTaXplcywgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07CiB9
CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCithdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDhfdCBjb3VudDsKLSAg
ICBpZiAoIXBhcnNlVmFyVUludDEoY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBN
ZW1vcnkgc2VjdGlvbidzIGNvdW50Iik7CiAKICAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIFdlIG9ubHkgYWxsb3cgb25l
IG1lbW9yeSBmb3Igbm93LgotICAgIGlmIChjb3VudCAhPSAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24g
aGFzIG1vcmUgdGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxv
d3MgemVybyBvciBvbmUiKTsKIAogICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKICAgICByZXR1
cm4gcGFyc2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VHbG9iYWwoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQxMzMKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZUV4cG9ydCgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgdWludDMyX3QgZXhwb3J0Q291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQz
MihleHBvcnRDb3VudCkKLSAgICAgICAgfHwgZXhwb3J0Q291bnQgPT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+ZXhwb3J0cy50cnlS
ZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpLCAiY2FuJ3Qg
Z2V0IEV4cG9ydCBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4
cG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkV4cG9y
dCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBleHBvcnRDb3VudCk7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0
eShleHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBv
cnRDb3VudCwgIiBleHBvcnRzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9
IDA7IGV4cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewogICAgICAg
ICBFeHBvcnQgZXhwOwogICAgICAgICB1aW50MzJfdCBmaWVsZExlbjsKICAgICAgICAgU3RyaW5n
IGZpZWxkU3RyaW5nOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKQotICAg
ICAgICAgICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbikpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOwogCi0gICAgICAgIGlmICghcGFyc2VFeHRl
cm5hbEtpbmQoZXhwLmtpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQg
IiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZp
ZWxkTGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBu
YW1lIG9mIGxlbmd0aCAiLCBmaWVsZExlbik7CisgICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOwogCisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGV4cC5raW5kKSwgImNhbid0IGdldCAiLCBleHBv
cnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7
CiAgICAgICAgIHN3aXRjaCAoZXhwLmtpbmQpIHsKICAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVu
Y3Rpb246IHsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZXhwLmZ1bmN0aW9uSW5k
ZXgpCi0gICAgICAgICAgICAgICAgfHwgZXhwLmZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlvbklu
ZGV4U3BhY2Uuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cC5mdW5jdGlvbkluZGV4
KSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmdW5jdGlvbiBpbmRl
eCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihleHAuZnVuY3Rpb25JbmRleCA+PSBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uu
c2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZnVuY3Rpb24gbnVt
YmVyICIsIGV4cC5mdW5jdGlvbkluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4
IHNwYWNlICIsIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCksICIsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOiB7CiAgICAgICAgICAgICAvLyBGSVhNRSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7CiAgICAgICAgICAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY3MQorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6Okdsb2JhbDogewogICAgICAgICAgICAgLy8g
RklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwogICAg
ICAgICAgICAgLy8gSW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFsIHZhcmlhYmxlcyBj
YW4gYmUgZXhwb3J0ZWQuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIG1f
bW9kdWxlLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZChleHApOworICAgICAgICBtX3Jlc3VsdC5t
b2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKGV4cCk7CiAgICAgfQogCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlU3Rh
cnQoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlU3RhcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CiAgICAgdWludDMyX3Qgc3RhcnRGdW5jdGlvbkluZGV4OwotICAgIGlmICghcGFyc2VWYXJVSW50
MzIoc3RhcnRGdW5jdGlvbkluZGV4KQotICAgICAgICB8fCBzdGFydEZ1bmN0aW9uSW5kZXggPj0g
bV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtX2Z1bmN0aW9uSW5kZXhTcGFjZVtzdGFydEZ1bmN0aW9u
SW5kZXhdLnNpZ25hdHVyZTsKLSAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpICE9
IDAKLSAgICAgICAgfHwgc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9IFZvaWQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX21vZHVsZS0+c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFy
dEZ1bmN0aW9uSW5kZXg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBp
bmRleCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1f
cmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1
bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX3Jlc3VsdC5m
dW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKTsKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1f
cmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZVtzdGFydEZ1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZTsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS0+YXJndW1lbnRzLmlzRW1wdHkoKSwg
IlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhhdmUgYXJndW1lbnRzIik7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzaWduYXR1cmUtPnJldHVyblR5cGUgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNh
bid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9yZXN1bHQubW9kdWxlLT5zdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OwogfQogCi1i
b29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZUVsZW1lbnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgaWYgKCFtX2hhc1RhYmxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9oYXNUYWJsZSwg
IkVsZW1lbnQgc2VjdGlvbiBleHBlY3RzIGEgVGFibGUgdG8gYmUgcHJlc2VudCIpOwogCiAgICAg
dWludDMyX3QgZWxlbWVudENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoZWxlbWVudENv
dW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9tb2R1bGUtPmVsZW1lbnRz
LnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyArK2kpIHsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihlbGVtZW50Q291bnQpLCAiY2Fu
J3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihlbGVtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAi
RWxlbWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+ZWxlbWVudHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGVs
ZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5zaWduZWQgZWxlbWVudE51bSA9
IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVudE51bSkgewogICAgICAgICB1
aW50MzJfdCB0YWJsZUluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBXZSBvbmx5IHN1cHBv
cnQgb25lIHRhYmxlIGZvciBub3cuCi0gICAgICAgIGlmICh0YWJsZUluZGV4ICE9IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgICAg
ICBpZiAoIXBhcnNlSW5pdEV4cHIob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQogICAgICAgICB1aW50MzJfdCBpbmRleENvdW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGluZGV4Q291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEFT
U0VSVCghIW1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uKTsKLSAgICAgICAgaWYgKHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0gPSBtX21vZHVsZS0+dGFibGVJbmZvcm1hdGlvbi5tYXhp
bXVtKCkpIHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFi
bGVJbmRleCksICJjYW4ndCBnZXQgIiwgZWxlbWVudE51bSwgInRoIEVsZW1lbnQgdGFibGUgaW5k
ZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighdGFibGVJbmRleCwgIkVsZW1lbnQg
c2VjdGlvbiBjYW4gb25seSBoYXZlIG9uZSBUYWJsZSBmb3Igbm93Iik7CisgICAgICAgIFBhcnRp
YWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VJbml0RXhwcihvZmZzZXQpOworICAgICAgICBpZiAoVU5M
SUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmdldFVuZXhwZWN0ZWQo
KTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleENv
dW50KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgZm9yIEVsZW1l
bnQgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4Q291bnQgPT0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9uJ3Mg
IiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwgaW5kZXhDb3VudCk7
CisKKyAgICAgICAgQVNTRVJUKCEhbV9yZXN1bHQubW9kdWxlLT50YWJsZUluZm9ybWF0aW9uKTsK
KyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0gPSBtX3Jlc3VsdC5t
b2R1bGUtPnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogc2hvdWxkIGluZGV4Q291bnQgYmVpbmcgemVybyBiZSBhIHZhbGlkYXRpb24gZXJyb3I/CiAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
ODI2CiAgICAgICAgICAgICBpZiAoaW5kZXhDb3VudCkgewpAQCAtNTI2LDExOCArNDIzLDk1IEBA
IGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKQogICAgICAgICAgICAgICAgIC8vIFNo
b3VsZCB0aGV5IGJlIHRob3VnaD8KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI3CiAgICAgICAgICAgICAgICAgdWludDY0X3Qg
bGFzdFdyaXR0ZW5JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleENvdW50KSArIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpIC0gMTsKLSAgICAgICAgICAgICAgICBpZiAobGFz
dFdyaXR0ZW5JbmRleCA+PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKm1heGltdW0pKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihsYXN0V3JpdHRlbkluZGV4ID49IHN0YXRpY19jYXN0PHVpbnQ2NF90PigqbWF4aW11
bSksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCB3cml0ZXMg
dG8gaW5kZXggIiwgbGFzdFdyaXR0ZW5JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBtYXhpbXVt
ICIsICptYXhpbXVtKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEVsZW1l
bnQgZWxlbWVudDsKLSAgICAgICAgaWYgKCFlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy50cnlSZXNl
cnZlQ2FwYWNpdHkoaW5kZXhDb3VudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2Vy
dmVDYXBhY2l0eShpbmRleENvdW50KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5k
ZXhDb3VudCwgIiBFbGVtZW50IGluZGljZXMiKTsKIAogICAgICAgICBlbGVtZW50Lm9mZnNldCA9
IG9mZnNldDsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZXhDb3VudDsg
KytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluZGV4Q291
bnQ7ICsraW5kZXgpIHsKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAg
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPj0gbV9m
dW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9u
SW5kZXgpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBl
bGVtZW50J3MgIiwgaW5kZXgsICJ0aCBpbmRleCIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihmdW5jdGlvbkluZGV4ID49IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXpl
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGlu
ZGV4LCAidGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBm
dW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFj
ZS5zaXplKCkpOwogCiAgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51bmNoZWNr
ZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX21vZHVsZS0+
ZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOworICAgICAgICBtX3Jl
c3VsdC5tb2R1bGUtPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3QgY291bnQ7Ci0gICAgaWYgKCFwYXJzZVZh
clVJbnQzMihjb3VudCkKLSAgICAgICAgfHwgY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8IGNvdW50ICE9IG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBDb2RlIHNlY3Rpb24ncyBj
b3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAi
LCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSBtX3Jlc3VsdC5mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50
LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9yZXN1bHQu
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CiAKICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCBmdW5jdGlvblNpemU7Ci0g
ICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKQotICAgICAgICAgICAgfHwg
ZnVuY3Rpb25TaXplID4gbGVuZ3RoKCkKLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uU2l6ZSA+IGxl
bmd0aCgpIC0gbV9vZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
bV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uc3RhcnQgPSBtX29mZnNldDsKLSAgICAgICAg
bV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNp
emU7Ci0gICAgICAgIG1fb2Zmc2V0ID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5k
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNp
emUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5j
dGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUg
IiwgbGVuZ3RoKCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+
IGxlbmd0aCgpIC0gbV9vZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNp
emUsICIgZXhjZWVkcyB0aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1f
b2Zmc2V0KTsKKworICAgICAgICBtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0u
c3RhcnQgPSBtX29mZnNldDsKKyAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2ldLmVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX29mZnNldCA9
IG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQ7CiAgICAgfQogCi0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBh
cnNlSW5pdEV4cHIodWludDMyX3QmIHZhbHVlKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5p
dEV4cHIodWludDMyX3QmIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgdWludDhfdCBv
cGNvZGU7CisgICAgdWludDhfdCBlbmRPcGNvZGU7CiAgICAgLy8gRklYTUUgYWxsb3cgY29tcGxl
eCBpbml0X2V4cHIgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTcwMAogICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgaTMyLmNvbnN0IGFzIG9mZnNl
dC4KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBn
ZXQgaW5pdF9leHByJ3Mgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihvcGNvZGUg
IT0gV2FzbTo6STMyQ29uc3QsICJpbml0X2V4cHIncyBvcGNvZGUgaXNuJ3QgaTMyLmNvbnN0Iik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodmFsdWUpLCAiY2FuJ3Qg
Z2V0IGluaXRfZXhwcidzIGkzMi5jb25zdCBvZmZzZXQgdmFsdWUiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mg
ZW5kIG9wY29kZSIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IFdhc206
OkVuZCwgImluaXRfZXhwcidzIGxhc3Qgb3Bjb2RlIGlzbid0IGVuZCIpOwogCi0gICAgdWludDhf
dCBvcGNvZGU7Ci0gICAgdWludDhfdCBlbmRPcGNvZGU7Ci0gICAgaWYgKCFwYXJzZVVJbnQ4KG9w
Y29kZSkKLSAgICAgICAgfHwgb3Bjb2RlICE9IFdhc206OkkzMkNvbnN0Ci0gICAgICAgIHx8ICFw
YXJzZVZhclVJbnQzMih2YWx1ZSkKLSAgICAgICAgfHwgIXBhcnNlVUludDgoZW5kT3Bjb2RlKQot
ICAgICAgICB8fCBlbmRPcGNvZGUgIT0gV2FzbTo6RW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJz
ZXI6OnBhcnNlRGF0YSgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIHVpbnQzMl90IHNlZ21lbnRDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFy
VUludDMyKHNlZ21lbnRDb3VudCkKLSAgICAgICAgfHwgc2VnbWVudENvdW50ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQotICAgICAgICB8fCAhbV9tb2R1bGUtPmRhdGEu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNlZ21lbnRDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCIgIHNlZ21lbnRzOiAiLCBzZWdt
ZW50Q291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNlZ21l
bnRDb3VudCksICJjYW4ndCBnZXQgRGF0YSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHNlZ21lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJEYXRhIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3Vu
dCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5kYXRhLnRyeVJl
c2VydmVDYXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgRGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7CiAKICAg
ICBmb3IgKHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVu
dENvdW50OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nTG4oIiAgc2VnbWVudCAjIiwgc2VnbWVudE51bWJlcik7CiAgICAgICAgIHVp
bnQzMl90IGluZGV4OwogICAgICAgICB1aW50MzJfdCBvZmZzZXQ7CiAgICAgICAgIHVpbnQzMl90
IGRhdGFCeXRlTGVuZ3RoOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KQotICAg
ICAgICAgICAgfHwgaW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKCFwYXJzZUluaXRFeHByKG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCIgICAgb2Zmc2V0OiAi
LCBvZmZzZXQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihp
bmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGlu
ZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXgsIHNlZ21lbnROdW1iZXIs
ICJ0aCBEYXRhIHNlZ21lbnQgaGFzIG5vbi16ZXJvIGluZGV4ICIsIGluZGV4KTsKIAotICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKQotICAgICAgICAgICAgfHwgZGF0
YUJ5dGVMZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2dMbigiICAgIGRhdGEgYnl0ZXM6ICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBwYXJzZUluaXRFeHByKG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VM
WSghcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuZ2V0VW5leHBlY3RlZCgpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihkYXRhQnl0ZUxlbmd0
aCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEg
Ynl0ZSBsZW5ndGgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihkYXRhQnl0ZUxlbmd0
aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIHNlZ21lbnROdW1iZXIs
ICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3RoIGlzIHRvbyBiaWcgIiwgZGF0YUJ5
dGVMZW5ndGgpOwogCiAgICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjptYWtlKG9m
ZnNldCwgZGF0YUJ5dGVMZW5ndGgpOwotICAgICAgICBpZiAoIXNlZ21lbnQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fbW9kdWxlLT5kYXRhLnVuY2hlY2tlZEFwcGVuZChT
ZWdtZW50OjptYWtlUHRyKHNlZ21lbnQpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
c2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1i
ZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7CisgICAgICAg
IG1fcmVzdWx0Lm1vZHVsZS0+ZGF0YS51bmNoZWNrZWRBcHBlbmQoU2VnbWVudDo6bWFrZVB0cihz
ZWdtZW50KSk7CiAgICAgICAgIGZvciAodWludDMyX3QgZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8
IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7CiAgICAgICAgICAgICB1aW50OF90IGJ5dGU7
Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVUludDgoYnl0ZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChi
eXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIHNlZ21l
bnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKICAgICAgICAgICAgIHNlZ21lbnQtPmJ5dGUo
ZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiICAgIFsiLCBkYXRhQnl0ZSwgIl0gPSAiLCBzZWdtZW50LT5ieXRlKGRh
dGFCeXRlKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCAzZDhhODYxLi4zZTE0NGNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC0z
NCw3ICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFz
cyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMgUGFyc2VyIHsKK3N0cnVjdCBNb2R1bGVQYXJzZXJSZXN1
bHQgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlOworICAg
IEZ1bmN0aW9uSW5kZXhTcGFjZSBmdW5jdGlvbkluZGV4U3BhY2U7CisgICAgVmVjdG9yPEZ1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeT4gZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OworfTsKKworY2xh
c3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1
YmxpYzoKIAogICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1
ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKQEAgLTQ3LDQ5ICs1MywyMSBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7Ci0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7
IH0KLSAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2Fn
ZTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1
bGVJbmZvcm1hdGlvbigpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkp
OwotICAgICAgICByZXR1cm4gbV9tb2R1bGU7Ci0gICAgfQotCi0gICAgRnVuY3Rpb25JbmRleFNw
YWNlJiBmdW5jdGlvbkluZGV4U3BhY2UoKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25JbmRleFNwYWNlOwotICAgIH0K
LQotICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+JiBmdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkoKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwotICAgIH0KKyAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKIHByaXZhdGU6Ci0jZGVmaW5lIFdBU01f
U0VDVElPTl9ERUNMQVJFX1BBUlNFUihOQU1FLCBJRCwgREVTQ1JJUFRJT04pIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlICMjIE5BTUUoKTsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xB
UkVfUEFSU0VSKE5BTUUsIElELCBERVNDUklQVElPTikgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2UgIyMgTkFNRSgpOwogICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNN
X1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCiAjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFS
U0VSCiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29s
IGlzSW1wb3J0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVRhYmxlSGVscGVy
KGJvb2wgaXNJbXBvcnQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzaXph
YmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4
aW11bSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50MzJf
dCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5SGVs
cGVyKGJvb2wgaXNJbXBvcnQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQzMl90Jik7CiAKICAgICBWTSogbV92bTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwotICAgIEZ1
bmN0aW9uSW5kZXhTcGFjZSBtX2Z1bmN0aW9uSW5kZXhTcGFjZTsKLSAgICBWZWN0b3I8RnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBib29s
IG1fZmFpbGVkIHsgdHJ1ZSB9OworICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKICAg
ICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwotICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFyc2VyLmgKaW5kZXggZWVlMzliNC4uOGEyMDkyZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtMzIsMTMgKzMyLDMxIEBACiAjaW5jbHVkZSAiV2Fz
bUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMu
aCIKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNp
bmNsdWRlIDx3dGYvTEVCRGVjb2Rlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAorbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXIgeworLy8gRklYTUUgV2Ugc2hv
dWxkIG1vdmUgdGhpcyB0byBtYWtlU3RyaW5nLiBJdCdzIGluIGl0cyBvd24gbmFtZXNwYWNlIHRv
IGVuYWJsZSBDKysgQXJndW1lbnQgRGVwZW5kZW50IExvb2t1cCDDoCBsYSBzdGQ6OnN3YXA6IHVz
ZXIgY29kZSBjYW4gZGVibGFyZSBpdHMgb3duICJib3hGYWlsdXJlIiBhbmQgdGhlIGZhaWwoKSBo
ZWxwZXIgd2lsbCBmaW5kIGl0Lgorc3RhdGljIGlubGluZSBjb25zdCBTdHJpbmcmIGJveEZhaWx1
cmUoY29uc3QgU3RyaW5nICZmYWlsdXJlKSB7IHJldHVybiBmYWlsdXJlOyB9CitzdGF0aWMgaW5s
aW5lIGF1dG8gYm94RmFpbHVyZShjb25zdCBjaGFyICpmYWlsdXJlKSB7IHJldHVybiBBU0NJSUxp
dGVyYWwoZmFpbHVyZSk7IH0KK3N0YXRpYyBpbmxpbmUgYXV0byBib3hGYWlsdXJlKFNlY3Rpb25z
OjpTZWN0aW9uIGZhaWx1cmUpIHsgcmV0dXJuIFNlY3Rpb25zOjpuYW1lKGZhaWx1cmUpOyB9Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgSW50LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfaW50ZWdyYWw8SW50Pjo6dmFsdWU+Ojp0eXBlPgorc3RhdGljIGlubGluZSBhdXRv
IGJveEZhaWx1cmUoSW50IGZhaWx1cmUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGZhaWx1cmUp
OyB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgogY2xhc3MgUGFyc2VyIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CisgICAgdHlwZWRlZiBVbmV4
cGVjdGVkVHlwZTxFcnJvclR5cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBl
Y3RlZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3Rl
ZDxTdWNjZXNzVHlwZSwgRXJyb3JUeXBlPiBSZXN1bHQ7CisKIHByb3RlY3RlZDoKICAgICBQYXJz
ZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKQEAgLTYzLDE4ICs4MSwzMSBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBzaXplX3QgbV9vZmZzZXQgPSAwOwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFt
ZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJv
dmUuCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoQVNDSUlMaXRl
cmFsKCJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlICIpLCBTdHJpbmc6
Om51bWJlcihtX29mZnNldCksIEFTQ0lJTGl0ZXJhbCgiIC8gIiksIFN0cmluZzo6bnVtYmVyKG1f
c291cmNlTGVuZ3RoKSwgQVNDSUlMaXRlcmFsKCI6ICIpLCBib3hGYWlsdXJlKGFyZ3MpLi4uKSk7
CisgICAgfQorI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7
IFwKKyAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKDApCisKIHByaXZhdGU6CiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAg
c2l6ZV90IG1fc291cmNlTGVuZ3RoOwogfTsKIAotQUxXQVlTX0lOTElORSBQYXJzZXI6OlBhcnNl
cihjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgUGFyc2VyPFN1Y2Nlc3NU
eXBlPjo6UGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxl
bmd0aCkKICAgICA6IG1fc291cmNlKHNvdXJjZUJ1ZmZlcikKICAgICAsIG1fc291cmNlTGVuZ3Ro
KHNvdXJjZUxlbmd0aCkKIHsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3Vt
ZUNoYXJhY3RlcihjaGFyIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZ
U19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+Ojpjb25zdW1lQ2hhcmFjdGVyKGNoYXIg
YykKIHsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTg1LDcgKzExNiw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVD
aGFyYWN0ZXIoY2hhciBjKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQUxXQVlTX0lOTElORSBi
b29sIFBhcnNlcjo6Y29uc3VtZVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+
Ojpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKIHsKICAgICB1bnNpZ25lZCBzdGFydCA9
IG1fb2Zmc2V0OwogICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgoKSkKQEAgLTk5LDcgKzEzMSw4
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciog
c3RyKQogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpj
b25zdW1lVVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdCwgc2l6ZV90IHN0cmluZ0xlbmd0aCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxT
dWNjZXNzVHlwZT46OmNvbnN1bWVVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0LCBzaXplX3Qgc3Ry
aW5nTGVuZ3RoKQogewogICAgIGlmIChzdHJpbmdMZW5ndGggPT0gMCkgewogICAgICAgICByZXN1
bHQgPSBlbXB0eVN0cmluZygpOwpAQCAtMTE0LDE3ICsxNDcsMjAgQEAgQUxXQVlTX0lOTElORSBi
b29sIFBhcnNlcjo6Y29uc3VtZVVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHQsIHNpemVfdCBzdHJp
bmdMZW5ndGgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNl
cjo6cGFyc2VWYXJVSW50MzIodWludDMyX3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1
Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNl
VmFyVUludDMyKHVpbnQzMl90JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rl
cjo6ZGVjb2RlVUludDMyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3Vs
dCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDY0KHVpbnQ2
NF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhclVJbnQ2NCh1aW50NjRfdCYgcmVz
dWx0KQogewogICAgIHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQ2NChtX3NvdXJj
ZSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOwogfQogCi1BTFdBWVNfSU5MSU5F
IGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlw
ZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBl
Pjo6cGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICBpZiAobGVuZ3RoKCkgPCA0
IHx8IG1fb2Zmc2V0ID4gbGVuZ3RoKCkgLSA0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MzMsNyArMTY5LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50MzIodWlu
dDMyX3QmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29s
IFBhcnNlcjo6cGFyc2VVSW50OCh1aW50OF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBT
dWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJz
ZVVJbnQ4KHVpbnQ4X3QmIHJlc3VsdCkKIHsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MSw3ICsxNzgsOCBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ4KHVpbnQ4X3QmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VJbnQ3KGludDhfdCYgcmVz
dWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wg
UGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VJbnQ3KGludDhfdCYgcmVzdWx0KQogewogICAgIGlm
IChtX29mZnNldCA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUwLDcg
KzE4OCw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlSW50NyhpbnQ4X3QmIHJl
c3VsdCkKICAgICByZXR1cm4gKHYgJiAweDgwKSA9PSAwOwogfQogCi1BTFdBWVNfSU5MSU5FIGJv
b2wgUGFyc2VyOjpwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBh
cnNlVUludDcodWludDhfdCYgcmVzdWx0KQogewogICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU4LDcgKzE5Nyw4IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KQogICAgIHJldHVybiBy
ZXN1bHQgPCAweDgwOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhclVJ
bnQxKHVpbnQ4X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFyVUludDEodWludDhf
dCYgcmVzdWx0KQogewogICAgIHVpbnQzMl90IHRlbXA7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQz
Mih0ZW1wKSkKQEAgLTE2Nyw3ICsyMDcsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpw
YXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCkKICAgICByZXR1cm4gdGVtcCA8PSAxOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVJlc3VsdFR5cGUoVHlwZSYgcmVzdWx0
KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFy
c2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VSZXN1bHRUeXBlKFR5cGUmIHJlc3VsdCkKIHsKICAgICBp
bnQ4X3QgdmFsdWU7CiAgICAgaWYgKCFwYXJzZUludDcodmFsdWUpKQpAQCAtMTc4LDEyICsyMTks
MTQgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VSZXN1bHRUeXBlKFR5cGUmIHJl
c3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6
cGFyc2VWYWx1ZVR5cGUoVHlwZSYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5
cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYWx1ZVR5
cGUoVHlwZSYgcmVzdWx0KQogewogICAgIHJldHVybiBwYXJzZVJlc3VsdFR5cGUocmVzdWx0KSAm
JiBpc1ZhbHVlVHlwZShyZXN1bHQpOwogfQotICAgIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNl
cjo6cGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWw6OktpbmQmIHJlc3VsdCkKKwordGVtcGxhdGU8
dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NU
eXBlPjo6cGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWw6OktpbmQmIHJlc3VsdCkKIHsKICAgICB1
aW50OF90IHZhbHVlOwogICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggNjgzMjllNS4uMGE3MjdkMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNjAsMjMgKzYwLDE4IEBAIFBsYW46
OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgp
CiAKIHZvaWQgUGxhbjo6cnVuKCkKIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
Z0xuKCJTdGFydGluZyBwbGFuLiIpOwogICAgIHsKICAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVs
ZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwotICAgICAgICBpZiAoIW1v
ZHVsZVBhcnNlci5wYXJzZSgpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZDogIiwgbW9kdWxlUGFyc2Vy
LmVycm9yTWVzc2FnZSgpKTsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbW9kdWxlUGFy
c2VyLmVycm9yTWVzc2FnZSgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHBh
cnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CisgICAgICAgIGlmICghcGFyc2VSZXN1
bHQpIHsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsgLy8gRklYTUUgcmV0dXJuIGFuIEV4cGVjdGVkLgogICAgICAg
ICB9Ci0gICAgICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5t
b2R1bGVJbmZvcm1hdGlvbigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkg
PSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkoKSk7Ci0gICAg
ICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUgPSBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmRl
eFNwYWNlKCkuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIgPSBt
b2R1bGVQYXJzZXIuZnVuY3Rpb25JbmRleFNwYWNlKCkucmVsZWFzZUJ1ZmZlcigpOworICAgICAg
ICBtX21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9kdWxlKTsKKyAg
ICAgICAgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkgPSBXVEZNb3ZlKHBhcnNlUmVzdWx0LT5m
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkpOworICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5z
aXplID0gcGFyc2VSZXN1bHQtPmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCk7CisgICAgICAgIG1f
ZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlciA9IHBhcnNlUmVzdWx0LT5mdW5jdGlvbkluZGV4U3Bh
Y2UucmVsZWFzZUJ1ZmZlcigpOwogICAgIH0KLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZ0xuKCJQYXJzZWQgbW9kdWxlLiIpOwogCiAgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkg
PSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsK
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkg
ewpAQCAtMTE3LDE0ICsxMTIsMTQgQEAgdm9pZCBQbGFuOjpydW4oKQogICAgICAgICB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21Ub0pTU3R1YnMuc2l6ZSgpICsgZnVuY3Rpb25J
bmRleDsKICAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlci5nZXQoKVtm
dW5jdGlvbkluZGV4U3BhY2VdLnNpZ25hdHVyZSA9PSBzaWduYXR1cmUpOwogCi0gICAgICAgIFN0
cmluZyBlcnJvciA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5n
dGgsIHNpZ25hdHVyZSwgbV9mdW5jdGlvbkluZGV4U3BhY2UsICptX21vZHVsZUluZm9ybWF0aW9u
KTsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgeworICAgICAgICBhdXRvIHZhbGlkYXRl
UmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwg
c2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24pOwor
ICAgICAgICBpZiAoIXZhbGlkYXRlUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkxlbmd0
aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsKICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gZXJyb3I7CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHZhbGlkYXRlUmVzdWx0LmVy
cm9yKCk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2VjdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5o
CmluZGV4IDk5NjA1MjQuLjE4MWViN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TZWN0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TZWN0aW9ucy5oCkBAIC00OSwxMiArNDksMjYgQEAgc3RydWN0IFNlY3Rpb25zIHsKICN1bmRl
ZiBERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0KICAgICAgICAgVW5rbm93bgogICAgIH07CisKICAg
ICBzdGF0aWMgYm9vbCB2YWxpZGF0ZU9yZGVyKFNlY3Rpb24gcHJldmlvdXMsIFNlY3Rpb24gbmV4
dCkKICAgICB7CiAgICAgICAgIGlmIChwcmV2aW91cyA9PSBVbmtub3duKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBwcmV2aW91cyA8IG5leHQ7CiAgICAgfQorCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoU2VjdGlvbiBzZWN0aW9uKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChzZWN0aW9uKSB7CisjZGVmaW5lIFNUUklOR0lGWV9TRUNUSU9OX05BTUUoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBjYXNlIE5BTUU6IHJldHVybiAjTkFNRTsKKyAgICAgICAgICAg
IEZPUl9FQUNIX1dBU01fU0VDVElPTihTVFJJTkdJRllfU0VDVElPTl9OQU1FKQorI3VuZGVmIFNU
UklOR0lGWV9TRUNUSU9OX05BTUUKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gIj8iOworICAgICAg
ICB9CisgICAgfQorCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKaW5kZXggMjJmOTViYi4uMGE0OTVi
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCkBAIC03
MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgQmxvY2tUeXBlIG1fYmxvY2tUeXBlOwogICAg
ICAgICBUeXBlIG1fc2lnbmF0dXJlOwogICAgIH07CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lk
LCBTdHJpbmc+IFJlc3VsdDsKICAgICB0eXBlZGVmIFR5cGUgRXhwcmVzc2lvblR5cGU7CiAgICAg
dHlwZWRlZiBDb250cm9sRGF0YSBDb250cm9sVHlwZTsKICAgICB0eXBlZGVmIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CkBAIC03OCwxMDYgKzc5LDEwNiBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0g
Vm9pZDsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBW
ZWN0b3I8VHlwZT4mKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBl
LCB1aW50MzJfdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMo
Y29uc3QgVmVjdG9yPFR5cGU+Jik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRM
b2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlw
ZSB0eXBlLCB1aW50NjRfdCkgeyByZXR1cm4gdHlwZTsgfQogCiAgICAgLy8gTG9jYWxzCi0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisgICAgUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwogCiAgICAgLy8gTWVtb3J5Ci0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOwotICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKIAogICAgIC8vIEJhc2ljIG9w
ZXJhdG9ycwogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAg
IFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUg
cmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5v
blplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAg
IFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhw
cmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CiAKICAgICAvLyBDb250cm9sIGZsb3cKICAgICBDb250cm9sRGF0YSBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOwogICAgIENvbnRyb2xEYXRhIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKLSAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOworICAg
IFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xEYXRhJik7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0
b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFi
bGUoQ29udHJvbEVudHJ5Jik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1
cm4oY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0
VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKIAogICAgIC8vIENhbGxzCi0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3Qg
U2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGly
ZWN0KGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxD
b250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25l
ZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICBi
b29sIGhhc01lbW9yeSgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KIAotICAgIHZvaWQg
c2V0RXJyb3JNZXNzYWdlKFN0cmluZyYmIG1lc3NhZ2UpIHsgQVNTRVJUKG1fZXJyb3JNZXNzYWdl
LmlzTnVsbCgpKTsgbV9lcnJvck1lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2UpOyB9Ci0gICAgU3Ry
aW5nIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CiAgICAg
VmFsaWRhdGUoRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSwgY29uc3QgTWVtb3J5SW5mb3JtYXRp
b24mIG1lbW9yeSkKICAgICAgICAgOiBtX3JldHVyblR5cGUocmV0dXJuVHlwZSkKICAgICAgICAg
LCBtX21lbW9yeShtZW1vcnkpCiAgICAgewogICAgIH0KIAorICAgIHZvaWQgZHVtcChjb25zdCBW
ZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JikKKyAgICB7CisgICAg
ICAgIC8vIElmIHlvdSBuZWVkIHRoaXMgdGhlbiB5b3Ugc2hvdWxkIGZpeCB0aGUgdmFsaWRhdG9y
J3MgZXJyb3IgbWVzc2FnZXMgaW5zdGVhZC4uLgorICAgICAgICAvLyBUaGluayBvZiB0aGlzIGFz
IHBlbmFuY2UgZm9yIHRoZSBzaW4gb2YgYmFkIGVycm9yIG1lc3NhZ2VzLgorICAgIH0KKwogcHJp
dmF0ZToKLSAgICBib29sIHVuaWZ5KFR5cGUsIFR5cGUpOwotICAgIGJvb2wgdW5pZnkoY29uc3Qg
RXhwcmVzc2lvbkxpc3QmLCBjb25zdCBDb250cm9sRGF0YSYpOworICAgIFJlc3VsdCB1bmlmeShU
eXBlLCBUeXBlKTsKKyAgICBSZXN1bHQgdW5pZnkoY29uc3QgRXhwcmVzc2lvbkxpc3QmLCBjb25z
dCBDb250cm9sRGF0YSYpOwogCi0gICAgYm9vbCBjaGVja0JyYW5jaFRhcmdldChDb250cm9sRGF0
YSYgdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBS
ZXN1bHQgY2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbERhdGEmIHRhcmdldCwgY29uc3QgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBtX3JldHVy
blR5cGU7CiAgICAgVmVjdG9yPFR5cGU+IG1fbG9jYWxzOwotICAgIFN0cmluZyBtX2Vycm9yTWVz
c2FnZTsKICAgICBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbV9tZW1vcnk7CiB9OwogCi1ib29s
IFZhbGlkYXRlOjphZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmdzKQorYXV0byBW
YWxpZGF0ZTo6YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJncykgLT4gUmVzdWx0
CiB7CiAgICAgZm9yIChUeXBlIGFyZyA6IGFyZ3MpIHsKLSAgICAgICAgaWYgKCFhZGRMb2NhbChh
cmcsIDEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoVU5MSUtFTFko
IWFkZExvY2FsKGFyZywgMSkpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJl
c3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGNhbm5vdCBhZGQgYXJndW1lbnQi
KTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBW
YWxpZGF0ZTo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkKK2F1dG8gVmFsaWRh
dGU6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFJlc3VsdAogewotICAg
IGlmICghbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChVTkxJS0VMWSghbV9sb2NhbHMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50KSkpCisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gY2Fubm90IGFs
bG9jYXRlIG1lbW9yeSBmb3IgbG9jYWxzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHR5cGUpOwot
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRl
OjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8g
VmFsaWRhdGU6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoaW5kZXggPCBtX2xvY2Fscy5zaXplKCkpIHsKLSAgICAg
ICAgcmVzdWx0ID0gbV9sb2NhbHNbaW5kZXhdOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gdXNlIHVua25v
d24gbG9jYWwuIik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChVTkxJS0VMWShpbmRleCA+
PSBtX2xvY2Fscy5zaXplKCkpKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0
OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogYXR0ZW1wdCB0byB1c2UgdW5rbm93biBs
b2NhbCIpOworCisgICAgcmVzdWx0ID0gbV9sb2NhbHNbaW5kZXhdOworICAgIHJldHVybiB7IH07
CiB9CiAKLWJvb2wgVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSkKK2F1dG8gVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUgbG9jYWxU
eXBlOwotICAgIGlmICghZ2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlwZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBhdXRvIGxvY2FsUmVzdWx0ID0gZ2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlw
ZSk7CisgICAgaWYgKFVOTElLRUxZKCFsb2NhbFJlc3VsdCkpCisgICAgICAgIHJldHVybiBsb2Nh
bFJlc3VsdDsKIAotICAgIGlmIChsb2NhbFR5cGUgPT0gdmFsdWUpCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChVTkxJS0VMWShsb2NhbFR5cGUgIT0gdmFsdWUpKQorICAgICAgICByZXR1
cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDog
c2V0X2xvY2FsIHRvIHRoZSB3cm9uZyB0eXBlIik7CiAKLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1h
a2VTdHJpbmcoIkF0dGVtcHQgdG8gc2V0IGxvY2FsIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobG9j
YWxUeXBlKSwgIiB3aXRoIGEgdmFyaWFibGUgb2YgdHlwZTogIiwgdG9TdHJpbmcodmFsdWUpKTsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogVmFsaWRhdGU6OkNvbnRy
b2xUeXBlIFZhbGlkYXRlOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKQEAgLTE5MCwyMzIgKzE5
MSwxNzIgQEAgVmFsaWRhdGU6OkNvbnRyb2xUeXBlIFZhbGlkYXRlOjphZGRMb29wKFR5cGUgc2ln
bmF0dXJlKQogICAgIHJldHVybiBDb250cm9sRGF0YShCbG9ja1R5cGU6Okxvb3AsIHNpZ25hdHVy
ZSk7CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY29uZGl0aW9uICE9
IEkzMikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcg
dG8gdXNlICIsIHRvU3RyaW5nKGNvbmRpdGlvbiksICIgYXMgdGhlIGNvbmRpdGlvbiBmb3Igc2Vs
ZWN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKGNv
bmRpdGlvbiAhPSBJMzIpKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpF
cnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogc2VsZWN0IGNvbmRpdGlvbiBtdXN0IGJlIGkz
MiIpOwogCi0gICAgaWYgKG5vblplcm8gIT0gemVybykgewotICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9IG1ha2VTdHJpbmcoIlJlc3VsdCB0eXBlcyBvZiBzZWxlY3QgZG9uJ3QgbWF0Y2guIEdvdDog
IiwgdG9TdHJpbmcobm9uWmVybyksICIgYW5kICIsIHRvU3RyaW5nKHplcm8pKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkobm9uWmVybyAhPSB6ZXJvKSkK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRh
dGlvbiBmYWlsZWQ6IHNlbGVjdCByZXN1bHQgdHlwZXMgbXVzdCBtYXRjaCIpOwogCiAgICAgcmVz
dWx0ID0gemVybzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29s
IFZhbGlkYXRlOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJl
LCBDb250cm9sVHlwZSYgcmVzdWx0KQorYXV0byBWYWxpZGF0ZTo6YWRkSWYoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4gUmVz
dWx0CiB7Ci0gICAgaWYgKGNvbmRpdGlvbiAhPSBJMzIpIHsKLSAgICAgICAgbV9lcnJvck1lc3Nh
Z2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIHVzZSAiLCB0b1N0cmluZyhjb25kaXRpb24p
LCAiIGFzIHRoZSBjb25kaXRpb24gZm9yIGFuIGlmIGJsb2NrIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbiAhPSBJMzIpKQorICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZh
aWxlZDogaWYgY29uZGl0aW9uIG11c3QgYmUgaTMyIik7CiAgICAgcmVzdWx0ID0gQ29udHJvbERh
dGEoQmxvY2tUeXBlOjpJZiwgc2lnbmF0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRFbHNlKENvbnRyb2xUeXBlJiBjdXJyZW50
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgdmFsdWVzKQorYXV0byBWYWxpZGF0ZTo6YWRkRWxzZShD
b250cm9sVHlwZSYgY3VycmVudCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHZhbHVlcykgLT4gUmVz
dWx0CiB7Ci0gICAgaWYgKCF1bmlmeSh2YWx1ZXMsIGN1cnJlbnQpKSB7Ci0gICAgICAgIEFTU0VS
VChlcnJvck1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KKyAgICBh
dXRvIHVuaWZ5UmVzdWx0ID0gdW5pZnkodmFsdWVzLCBjdXJyZW50KTsKKyAgICBpZiAoVU5MSUtF
TFkoIXVuaWZ5UmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHVuaWZ5UmVzdWx0OwogICAgIHJldHVy
biBhZGRFbHNlVG9VbnJlYWNoYWJsZShjdXJyZW50KTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRk
RWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGN1cnJlbnQpCithdXRvIFZhbGlkYXRlOjph
ZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgY3VycmVudCkgLT4gUmVzdWx0CiB7Ci0g
ICAgaWYgKGN1cnJlbnQudHlwZSgpICE9IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBlbHNlIGJsb2NrIHRvIHNv
bWV0aGluZyBvdGhlciB0aGFuIGFuIGlmIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KKyAgICBpZiAoVU5MSUtFTFkoY3VycmVudC50eXBlKCkgIT0gQmxvY2tUeXBlOjpJZikpCisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRp
b24gZmFpbGVkOiBlbHNlIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYW4gaWYiKTsKICAgICBj
dXJyZW50ID0gQ29udHJvbERhdGEoQmxvY2tUeXBlOjpCbG9jaywgY3VycmVudC5zaWduYXR1cmUo
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFs
aWRhdGU6OmFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKQorYXV0
byBWYWxpZGF0ZTo6YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMp
IC0+IFJlc3VsdAogewogICAgIGlmIChtX3JldHVyblR5cGUgPT0gVm9pZCkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgQVNTRVJUKHJldHVyblZhbHVlcy5z
aXplKCkgPT0gMSk7CiAKLSAgICBpZiAobV9yZXR1cm5UeXBlID09IHJldHVyblZhbHVlc1swXSkK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKFVOTElLRUxZKG1fcmV0dXJuVHlwZSAhPSBy
ZXR1cm5WYWx1ZXNbMF0pKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpF
cnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogcmV0dXJuIGRvZXNuJ3QgbWF0Y2ggZnVuY3Rp
b24ncyByZXR1cm4gdHlwZSIpOwogCi0gICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJB
dHRlbXB0aW5nIHRvIGFkZCByZXR1cm4gd2l0aCB0eXBlOiAiLCB0b1N0cmluZyhyZXR1cm5WYWx1
ZXNbMF0pLCAiIGJ1dCBmdW5jdGlvbiBleHBlY3RzIHJldHVybiB3aXRoIHR5cGU6ICIsIHRvU3Ry
aW5nKG1fcmV0dXJuVHlwZSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4geyB9Owog
fQogCi1ib29sIFZhbGlkYXRlOjpjaGVja0JyYW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorYXV0byBWYWxpZGF0ZTo6
Y2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbFR5cGUmIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUmVzdWx0CiAgICAgewogICAgICAgICBpZiAodGFyZ2V0
LnR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgaWYgKHRhcmdldC5zaWduYXR1cmUoKSA9
PSBWb2lkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgICAgIGlmICghZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewotICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGJyYW5jaCB0byBibG9j
ayB3aXRoIGV4cGVjdGVkIHR5cGU6ICIsIHRvU3RyaW5nKHRhcmdldC5zaWduYXR1cmUoKSksICIg
YnV0IHRoZSBzdGFjayB3YXMgZW1wdHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoVU5MSUtFTFkoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSkp
CisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2
YWxpZGF0aW9uIGZhaWxlZDogYnJhbmNoIHRvIGJsb2NrIG9uIGVtcHR5IGV4cHJlc3Npb24gc3Rh
Y2siKTsKIAotICAgICAgICBpZiAodGFyZ2V0LnNpZ25hdHVyZSgpID09IGV4cHJlc3Npb25TdGFj
ay5sYXN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHRhcmdldC5zaWduYXR1cmUoKSAhPSBleHByZXNzaW9uU3RhY2subGFzdCgpKSkKKyAgICAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24g
ZmFpbGVkOiBicmFuY2gncyBzdGFjayB0eXBlIGRvZXNuJ3QgbWF0Y2ggYmxvY2sncyB0eXBlIik7
CiAKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGJy
YW5jaCB0byBibG9jayB3aXRoIGV4cGVjdGVkIHR5cGU6ICIsIHRvU3RyaW5nKHRhcmdldC5zaWdu
YXR1cmUoKSksICIgYnV0IHN0YWNrIGhhcyB0eXBlOiAiLCB0b1N0cmluZyh0YXJnZXQuc2lnbmF0
dXJlKCkpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJnZXQsIEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKQorYXV0byBW
YWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJnZXQsIEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKSAtPiBSZXN1bHQKIHsKICAgICAv
LyBWb2lkIG1lYW5zIHRoaXMgaXMgYW4gdW5jb25kaXRpb25hbCBicmFuY2guCi0gICAgaWYgKGNv
bmRpdGlvbiAhPSBWb2lkICYmIGNvbmRpdGlvbiAhPSBJMzIpIHsKLSAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBhIGNvbmRpdGlvbmFsIGJyYW5j
aCB3aXRoIGNvbmRpdGlvbiB0eXBlOiAiLCB0b1N0cmluZyhjb25kaXRpb24pLCAiIGJ1dCBleHBl
Y3RlZCBpMzIuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElL
RUxZKGNvbmRpdGlvbiAhPSBWb2lkICYmIGNvbmRpdGlvbiAhPSBJMzIpKQorICAgICAgICByZXR1
cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDog
Y29uZGl0aW9uYWwgYnJhbmNoIHdpdGggbm9uLWkzMiBjb25kaXRpb24iKTsKIAogICAgIHJldHVy
biBjaGVja0JyYW5jaFRhcmdldCh0YXJnZXQsIHN0YWNrKTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6
YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xE
YXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMs
IENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrKSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY29uZGl0aW9uICE9IEkzMikgewotICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIGEgYnJf
dGFibGUgd2l0aCBjb25kaXRpb24gdHlwZTogIiwgdG9TdHJpbmcoY29uZGl0aW9uKSwgIiBidXQg
ZXhwZWN0ZWQgaTMyLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChV
TkxJS0VMWShjb25kaXRpb24gIT0gSTMyKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBl
PFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGJyX3RhYmxlIHdpdGggbm9u
LWkzMiBjb25kaXRpb24iKTsKIAogICAgIGZvciAoYXV0byB0YXJnZXQgOiB0YXJnZXRzKSB7Ci0g
ICAgICAgIGlmIChkZWZhdWx0VGFyZ2V0LnNpZ25hdHVyZSgpICE9IHRhcmdldC0+c2lnbmF0dXJl
KCkpIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGlu
ZyB0byBhZGQgYSBicl90YWJsZSB3aXRoIGRpZmZlcmVudCBleHBlY3RlZCB0eXBlcy4gRGVmYXVs
dCB0YXJnZXQgaGFzIHR5cGU6ICIsIHRvU3RyaW5nKGRlZmF1bHRUYXJnZXQuc2lnbmF0dXJlKCkp
LCAiIGJ1dCBjYXNlIGhhcyB0eXBlOiAiLCB0b1N0cmluZyh0YXJnZXQtPnNpZ25hdHVyZSgpKSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElL
RUxZKGRlZmF1bHRUYXJnZXQuc2lnbmF0dXJlKCkgIT0gdGFyZ2V0LT5zaWduYXR1cmUoKSkpCisg
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxp
ZGF0aW9uIGZhaWxlZDogYnJfdGFibGUgdGFyZ2V0IHR5cGUgbWlzbWF0Y2giKTsKICAgICB9CiAK
ICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCwgZXhwcmVzc2lvblN0
YWNrKTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwg
RXhwcmVzc2lvbkxpc3QmIHN0YWNrKQorYXV0byBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVu
dHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKSAtPiBSZXN1bHQKIHsKICAgICBDb250
cm9sRGF0YSYgYmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBpZiAoYmxvY2suc2lnbmF0
dXJlKCkgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBpZiAoIXN0YWNrLnNpemUoKSkgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1h
a2VTdHJpbmcoIkJsb2NrIGZhbGx0aG91Z2ggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxv
Y2suc2lnbmF0dXJlKCkpLCAiIGJ1dCB0aGUgc3RhY2sgd2FzIGVtcHR5Iik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKHN0YWNrLmlzRW1wdHkoKSkpCisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRp
b24gZmFpbGVkOiB0eXBlZCBibG9jayBmYWxscyB0aHJvdWdoIG9uIGVtcHR5IHN0YWNrIik7CiAK
LSAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0gc3RhY2subGFzdCgpKSB7Ci0gICAgICAgIGVu
dHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChibG9jay5zaWduYXR1cmUoKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYmxvY2suc2lnbmF0
dXJlKCkgIT0gc3RhY2subGFzdCgpKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJl
c3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGJsb2NrIGZhbGx0aHJvdWdoIGRv
ZXNuJ3QgbWF0Y2ggaXRzIGRlY2xhcmVkIHR5cGUiKTsKIAotICAgIG1fZXJyb3JNZXNzYWdlID0g
bWFrZVN0cmluZygiQmxvY2sgZmFsbHRocm91Z2ggaGFzIGV4cGVjdGVkIHR5cGU6ICIsIHRvU3Ry
aW5nKGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgcHJvZHVjZWQgdHlwZTogIiwgdG9TdHJpbmco
YmxvY2suc2lnbmF0dXJlKCkpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGJsb2NrLnNpZ25hdHVyZSgpKTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRy
eSYgZW50cnkpCithdXRvIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRy
eSYgZW50cnkpIC0+IFJlc3VsdAogewogICAgIGlmIChlbnRyeS5jb250cm9sRGF0YS5zaWduYXR1
cmUoKSAhPSBWb2lkKQogICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQoZW50cnkuY29udHJvbERhdGEuc2lnbmF0dXJlKCkpOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZENhbGwodW5zaWduZWQsIGNvbnN0
IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25l
ZCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChz
aWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgIT0gYXJncy5zaXplKCkpIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiQXJpdHkgbWlzbWF0
Y2ggaW4gY2FsbCwgZXhwZWN0ZWQ6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihz
aWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGJ1
dCBnb3Q6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmdzLnNpemUoKSk7Ci0g
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShzaWduYXR1cmUtPmFyZ3VtZW50cy5z
aXplKCkgIT0gYXJncy5zaXplKCkpKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVz
dWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogYXJpdHkgbWlzbWF0Y2ggaW4gY2Fs
bCIpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0pIHsKLSAgICAg
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQgYXJndW1lbnQgdHlw
ZTogIiwgdG9TdHJpbmcoc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0pLCAiIGRvZXMgbm90IG1hdGNo
IHBhc3NlZCBhcmd1bWVudCB0eXBlOiAiLCB0b1N0cmluZyhhcmdzW2ldKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKGFyZ3NbaV0g
IT0gc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0pKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGFyZ3VtZW50IHR5
cGUgbWlzbWF0Y2ggaW4gY2FsbCIpOwogICAgIH0KIAogICAgIHJlc3VsdCA9IHNpZ25hdHVyZS0+
cmV0dXJuVHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29s
IFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNv
bnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
CithdXRvIFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1
cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFJlc3VsdAogewogICAgIGNvbnN0IGF1dG8gYXJndW1lbnRDb3VudCA9IHNpZ25h
dHVyZS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSBhcmdzLnNp
emUoKSAtIDEpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICBidWls
ZGVyLmFwcGVuZCgiQXJpdHkgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZXhwZWN0ZWQ6ICIp
OwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXpl
KCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGJ1dCBnb3Q6ICIpOwotICAgICAgICBidWls
ZGVyLmFwcGVuZE51bWJlcihhcmdzLnNpemUoKSk7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0g
YnVpbGRlci50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlm
IChVTkxJS0VMWShhcmd1bWVudENvdW50ICE9IGFyZ3Muc2l6ZSgpIC0gMSkpCisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVk
OiBhcml0eSBtaXNtYXRjaCBpbiBjYWxsX2luZGlyZWN0Iik7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChhcmdzW2ldICE9
IHNpZ25hdHVyZS0+YXJndW1lbnRzW2ldKSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1ha2VTdHJpbmcoIkV4cGVjdGVkIGFyZ3VtZW50IHR5cGU6ICIsIHRvU3RyaW5nKHNpZ25hdHVy
ZS0+YXJndW1lbnRzW2ldKSwgIiBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgYXJndW1lbnQgdHlwZTog
IiwgdG9TdHJpbmcoYXJnc1tpXSkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9CisgICAgICAgIGlmIChVTkxJS0VMWShhcmdzW2ldICE9IHNpZ25hdHVyZS0+YXJndW1lbnRz
W2ldKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlw
ZT4oInZhbGlkYXRpb24gZmFpbGVkOiBhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5k
aXJlY3QiKTsKICAgICB9CiAKLSAgICBpZiAoYXJncy5sYXN0KCkgIT0gSTMyKSB7Ci0gICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQgY2FsbF9pbmRpcmVjdCB0YXJn
ZXQgaW5kZXggdG8gaGF2ZSB0eXBlOiBpMzIgYnV0IGdvdCB0eXBlOiAiLCB0b1N0cmluZyhhcmdz
Lmxhc3QoKSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VM
WShhcmdzLmxhc3QoKSAhPSBJMzIpKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVz
dWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogbm9uLWkzMiBjYWxsX2luZGlyZWN0
IGluZGV4Iik7CiAgICAgCiAgICAgcmVzdWx0ID0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OnVuaWZ5
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMsIGNvbnN0IENvbnRyb2xUeXBlJiBibG9jaykK
K2F1dG8gVmFsaWRhdGU6OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMsIGNvbnN0
IENvbnRyb2xUeXBlJiBibG9jaykgLT4gUmVzdWx0CiB7CiAgICAgQVNTRVJUKHZhbHVlcy5zaXpl
KCkgPD0gMSk7CiAgICAgaWYgKGJsb2NrLnNpZ25hdHVyZSgpID09IFZvaWQpCi0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCF2YWx1ZXMuc2l6ZSgp
KSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQmxvY2sgaGFzIG5vbi12
b2lkIHNpZ25hdHVyZSBidXQgaGFzIG5vIHN0YWNrIGVudHJpZXMgb24gZXhpdCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWSh2YWx1ZXMuaXNFbXB0eSgp
KSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFs
aWRhdGlvbiBmYWlsZWQ6IG5vbi12b2lkIGJsb2NrIGVuZHMgd2l0aCBhbiBlbXB0eSBzdGFjayIp
OwogCi0gICAgaWYgKHZhbHVlc1swXSA9PSBibG9jay5zaWduYXR1cmUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlc1swXSAhPSBibG9jay5zaWduYXR1cmUo
KSkpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZh
bGlkYXRpb24gZmFpbGVkOiBjb250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlw
ZSIpOwogCi0gICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJFeHBlY3RlZCBjb250cm9s
IGZsb3cgdG8gcmV0dXJuIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0
dXJlKCkpLCAiIGJ1dCBnb3QgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZXNbMF0p
KTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBWYWxpZGF0
ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JikKLXsKLSAgICAvLyBJZiB5b3UgbmVlZCB0aGlzIHRoZW4geW91IHNob3VsZCBmaXggdGhlIHZh
bGlkYXRvcidzIGVycm9yIG1lc3NhZ2VzIGluc3RlYWQuLi4KLSAgICAvLyBUaGluayBvZiB0aGlz
IGFzIHBlbmFuY2UgZm9yIHRoZSBzaW4gb2YgYmFkIGVycm9yIG1lc3NhZ2VzLgotfQotCi1TdHJp
bmcgdmFsaWRhdGVGdW5jdGlvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4
U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFjZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8p
CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCog
c291cmNlLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3Qg
SW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvKQogewogICAgIFZhbGlkYXRlIGNvbnRleHQoc2lnbmF0dXJl
LT5yZXR1cm5UeXBlLCBpbmZvLm1lbW9yeSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+
IHZhbGlkYXRvcihjb250ZXh0LCBzb3VyY2UsIGxlbmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbklu
ZGV4U3BhY2UsIGluZm8pOworICAgIGF1dG8gdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0b3IucGFy
c2UoKTsKKyAgICBpZiAoIXZhbGlkYXRlUmVzdWx0KQorICAgICAgICByZXR1cm4gdmFsaWRhdGVS
ZXN1bHQuZ2V0VW5leHBlY3RlZCgpOwogCi0gICAgaWYgKCF2YWxpZGF0b3IucGFyc2UoKSkgewot
ICAgICAgICAvLyBGSVhNRTogYWRkIGJldHRlciBsb2NhdGlvbiBpbmZvcm1hdGlvbiBoZXJlLiBz
ZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyODgKLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBuZXZlciBub3QgaGF2ZSBhbiBlcnJvciBtZXNzYWdlIGlm
IHdlIHJldHVybiBmYWxzZS4KLSAgICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzU0Ci0gICAgICAgIGlmIChjb250ZXh0LmVycm9yTWVzc2Fn
ZSgpLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIGVycm9yIjsKLSAgICAg
ICAgcmV0dXJuIGNvbnRleHQuZXJyb3JNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0
cmluZygpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCmluZGV4IDg2MWZkNzIu
LjFmMDA0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxp
ZGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCkBA
IC0yOCwxMCArMjgsMTEgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKLVN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5k
ZXhTcGFjZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJik7CitFeHBlY3RlZDx2b2lkLCBTdHJp
bmc+IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0
dXJlKiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiwgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJ
bmxpbmVzSGVhZGVyLnB5CmluZGV4IDI1YTM5MmUuLjUyYjY2YjEgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlu
bGluZXNIZWFkZXIucHkKQEAgLTYwLDE1ICs2MCwxMyBAQCBkZWYgdG9DcHAobmFtZSk6CiBkZWYg
dW5hcnlNYWNybyhuYW1lKToKICAgICBvcCA9IG9wY29kZXNbbmFtZV0KICAgICByZXR1cm4gIiIi
Ci10ZW1wbGF0ZTw+IGJvb2wgVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFt
ZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQor
dGVtcGxhdGU8PiBhdXRvIFZhbGlkYXRlOjphZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUp
ICsgIiIiPihFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UmVzdWx0CiB7Ci0gICAgaWYgKHZhbHVlICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJd
WzBdKSArICIiIikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIiIiIg
KyBuYW1lICsgIiIiIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIG9mIHR5cGU6ICIsIHRvU3RyaW5n
KCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIiksICIgYnV0IGdvdCBhIHZh
bHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcodmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkodmFsdWUgIT0gIiIiICsgY3BwVHlwZShvcFsicGFy
YW1ldGVyIl1bMF0pICsgIiIiKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3Vs
dDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUg
dHlwZSBtaXNtYXRjaCIpOwogCiAgICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJu
Il1bMF0pICsgIiIiOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAiIiIK
IApAQCAtNzYsMjAgKzc0LDE2IEBAIHRlbXBsYXRlPD4gYm9vbCBWYWxpZGF0ZTo6YWRkT3A8T3BU
eXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUKIGRlZiBiaW5hcnlN
YWNybyhuYW1lKToKICAgICBvcCA9IG9wY29kZXNbbmFtZV0KICAgICByZXR1cm4gIiIiCi10ZW1w
bGF0ZTw+IGJvb2wgVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAi
IiI+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KQordGVtcGxhdGU8PiBhdXRvIFZhbGlkYXRlOjphZGRPcDxPcFR5cGU6OiIi
IiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlw
ZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGxl
ZnQgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0gICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUgKyAiIiIgZXhwZWN0cyB0
aGUgbGVmdCB2YWx1ZSB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIgKyBjcHBUeXBlKG9w
WyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3aXRoIHR5cGU6ICIs
IHRvU3RyaW5nKGxlZnQpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAo
VU5MSUtFTFkobGVmdCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIp
KQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxp
ZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBsZWZ0IHZhbHVlIHR5cGUgbWlzbWF0Y2gi
KTsKIAotICAgIGlmIChyaWdodCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsxXSkg
KyAiIiIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFt
ZSArICIiIiBleHBlY3RzIHRoZSByaWdodCB2YWx1ZSB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmlu
ZygiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2
YWx1ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHJpZ2h0KSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKHJpZ2h0ICE9ICIiIiArIGNwcFR5cGUob3BbInBh
cmFtZXRlciJdWzFdKSArICIiIikpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1
bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIHJpZ2h0
IHZhbHVlIHR5cGUgbWlzbWF0Y2giKTsKIAogICAgIHJlc3VsdCA9ICIiIiArIGNwcFR5cGUob3Bb
InJldHVybiJdWzBdKSArICIiIjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9Owog
fQogIiIiCiAKQEAgLTk3LDEzICs5MSwxMSBAQCBkZWYgbG9hZE1hY3JvKG5hbWUpOgogICAgIG9w
ID0gb3Bjb2Rlc1tuYW1lXQogICAgIHJldHVybiAiIiIKICAgICBjYXNlIExvYWRPcFR5cGU6OiIi
IiArIHRvQ3BwKG5hbWUpICsgIiIiOiB7Ci0gICAgICAgIGlmIChwb2ludGVyICE9ICIiIiArIGNw
cFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIikgewotICAgICAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFtZSArICIiIiBleHBlY3RzIHRoZSBwb2ludGVy
IHRvIGJlIG9mIHR5cGU6ICIsIHRvU3RyaW5nKCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJd
WzBdKSArICIiIiksICIgYnV0IGdvdCBhIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcocG9p
bnRlcikpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlm
IChVTkxJS0VMWShwb2ludGVyICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSAr
ICIiIikpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5
cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBwb2ludGVyIHR5cGUgbWlz
bWF0Y2giKTsKIAogICAgICAgICByZXN1bHQgPSAiIiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVsw
XSkgKyAiIiI7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAg
IH0iIiIKIAogCkBAIC0xMTEsMTcgKzEwMywxMyBAQCBkZWYgc3RvcmVNYWNybyhuYW1lKToKICAg
ICBvcCA9IG9wY29kZXNbbmFtZV0KICAgICByZXR1cm4gIiIiCiAgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI6IHsKLSAgICAgICAgaWYgKHBvaW50ZXIgIT0gIiIi
ICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0gICAgICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIiIGV4cGVjdHMgdGhlIHBv
aW50ZXIgdG8gYmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1l
dGVyIl1bMF0pICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmlu
Zyhwb2ludGVyKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKFVOTElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1b
MF0pICsgIiIiKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVy
cm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIHBvaW50ZXIgdHlw
ZSBtaXNtYXRjaCIpOwogCi0gICAgICAgIGlmICh2YWx1ZSAhPSAiIiIgKyBjcHBUeXBlKG9wWyJw
YXJhbWV0ZXIiXVsxXSkgKyAiIiIpIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFr
ZVN0cmluZyhcIiIiIiArIG5hbWUgKyAiIiIgZXhwZWN0cyB0aGUgdmFsdWUgdG8gYmUgb2YgdHlw
ZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSwg
IiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZSkpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWSh2YWx1
ZSAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsxXSkgKyAiIiIpKQorICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBm
YWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwogCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0iIiIKIAogCkBAIC0xNDEs
MjAgKzEyOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiAiIiIgKyB1
bmFyeVNwZWNpYWxpemF0aW9ucyArIGJpbmFyeVNwZWNpYWxpemF0aW9ucyArICIiIgogCi1ib29s
IFZhbGlkYXRlOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90KQorYXV0byBWYWxpZGF0ZTo6bG9hZChMb2Fk
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
LCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKCFoYXNNZW1vcnkoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChVTkxJS0VMWSghaGFzTWVtb3J5KCkpKQorICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxl
ZDogbG9hZCBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwogCiAgICAgc3dpdGNoIChvcCkg
ewogIiIiICsgbG9hZENhc2VzICsgIiIiCiAgICAgfQogfQogCi1ib29sIFZhbGlkYXRlOjpzdG9y
ZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIHVpbnQzMl90KQorYXV0byBWYWxpZGF0ZTo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCkgLT4g
UmVzdWx0CiB7Ci0gICAgaWYgKCFoYXNNZW1vcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChVTkxJS0VMWSghaGFzTWVtb3J5KCkpKQorICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogc3RvcmUgaW5zdHJ1
Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsKIAogICAgIHN3aXRjaCAob3ApIHsKICIiIiArIHN0b3Jl
Q2FzZXMgKyAiIiIKLS0gCjIuMTAuMQoK
</data>
<flag name="commit-queue"
          id="319444"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297149</attachid>
            <date>2016-12-14 17:38:26 -0800</date>
            <delta_ts>2016-12-14 19:37:02 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>0001-Improve-parse-errors.patch</filename>
            <type>text/plain</type>
            <size>161508</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAzY2Q2N2QxZTdjOTllNWZkYTliZTU0N2I5OWY5YzAxMjgwZjhiMmE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDEwOjEzOjQ1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gSW1wcm92
ZSBwYXJzZSBlcnJvcnMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwICAgfCAyMTYgKysrLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaCAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Gb3JtYXQuaCAgICAgICAgICAgIHwgIDY3ICsrLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggICAgfCA0MzcgKysrKysrLS0tLS0tLS0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwICAgIHwgNjI2ICsr
KysrKysrLS0tLS0tLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oICAgICAgfCAgNTIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YXJzZXIuaCAgICAgICAgICAgIHwgIDkyICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uY3BwICAgICAgICAgICAgfCAgMzYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TZWN0aW9ucy5oICAgICAgICAgIHwgIDQ1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwICAgICAgICB8IDM0NSArKysrLS0tLS0tLS0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oICAgICAgICAgIHwgICAzICstCiAu
Li4vd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weSB8ICAgNCAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5ICAgfCAg
IDIgKy0KIC4uLi93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAgICAg
IHwgIDYwICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
ICAgICB8ICAgOCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwICAg
ICAgICAgICAgfCAgMTYgKy0KIDE2IGZpbGVzIGNoYW5nZWQsIDg1MyBpbnNlcnRpb25zKCspLCAx
MTU5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAppbmRleCA2MDA4Y2RjLi44NGYwYzM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0xMzcsNTIgKzEz
Nyw2NSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVt
cHR5RXhwcmVzc2lvbiA9IG51bGxwdHI7CiAKKyAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7
CisgICAgdHlwZWRlZiBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7
CisgICAgdHlwZWRlZiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rp
b24+LCBFcnJvclR5cGU+IFJlc3VsdDsKKyAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9y
VHlwZT4gUGFydGlhbFJlc3VsdDsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAg
ICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChB
cmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVy
ZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZyhBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5nOiAiKSwgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAg
IH0KKyNkZWZpbmUgV0FTTV9DT01QSUxFX0ZBSUxfSUYoY29uZGl0aW9uLCAuLi4pIGRvIHsgXAor
ICAgICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdo
aWxlICgwKQorCiAgICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmKTsKIAotICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4m
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFZlY3RvcjxUeXBlPiYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChU
eXBlLCB1aW50NjRfdCk7CiAKICAgICAvLyBMb2NhbHMKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBn
ZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKTsKIAogICAgIC8vIEdsb2JhbHMKLSAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAKICAgICAvLyBNZW1vcnkKLSAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7
CiAKICAgICAvLyBCYXNpYyBvcGVyYXRvcnMKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRP
cChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIHRlbXBs
YXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9u
VHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAg
Ly8gQ29udHJvbCBmbG93CiAgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJs
b2NrKFR5cGUgc2lnbmF0dXJlKTsKICAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
SWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEm
IHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0
YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2ln
bmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sRGF0YSYpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJu
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVj
dG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNo
YWJsZShDb250cm9sRW50cnkmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVz
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywg
Q29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9j
ayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYpOwogCiAgICAgLy8gQ2FsbHMKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBl
eHByZXNzaW9uU3RhY2spOwogCi0gICAgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYpIHsg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7IH0KLQogcHJpdmF0ZToKICAgICBFeHByZXNzaW9u
VHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBFeHByZXNzaW9uVHlwZSBl
bWl0TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWlu
dDMyX3Qgb2Zmc2V0KTsKQEAgLTI5MCwyNCArMzAzLDIyIEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9y
Ojp6ZXJvRm9yVHlwZShUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHplcm9WYWx1ZTsKIH0KIAotYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KQorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgaWYgKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9s
b2NhbHMuc2l6ZSgpICsgY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9D
T01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShtX2xvY2Fscy5zaXpl
KCkgKyBjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIG1fbG9jYWxzLnNpemUo
KSArIGNvdW50LCAiIGxvY2FscyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKICAgICAgICAgVmFyaWFibGUqIGxvY2FsID0gbV9wcm9jLmFkZFZhcmlhYmxl
KHRvQjNUeXBlKHR5cGUpKTsKICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2Fs
KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3By
b2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCB6ZXJvRm9yVHlwZSh0eXBlKSk7CiAgICAgfQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6
YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgdHlwZXMpCithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwotICAgIGlmICghbV9sb2NhbHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHR5cGVzLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBXQVNNX0NPTVBJTEVfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHR5
cGVzLnNpemUoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHR5cGVzLnNpemUoKSwg
IiBhcmd1bWVudHMiKTsKIAogICAgIG1fbG9jYWxzLmdyb3codHlwZXMuc2l6ZSgpKTsKICAgICB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5sb2FkQXJndW1lbnRzKHR5cGVzLCBtX3Byb2MsIG1fY3Vy
cmVudEJsb2NrLCBPcmlnaW4oKSwKQEAgLTMxNiwzNiArMzI3LDM2IEBAIGJvb2wgQjNJUkdlbmVy
YXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgdHlwZXMpCiAgICAgICAgICAg
ICBtX2xvY2Fsc1tpXSA9IGFyZ3VtZW50VmFyaWFibGU7CiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgYXJn
dW1lbnRWYXJpYWJsZSwgYXJndW1lbnQpOwogICAgICAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjpn
ZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwogICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBP
cmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAg
QVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0s
IHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIz
SVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIGdsb2Jh
bHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIG1faW5zdGFuY2VWYWx1ZSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShtX2lu
Zm8uZ2xvYmFsc1tpbmRleF0udHlwZSksIE9yaWdpbigpLCBnbG9iYWxzQXJyYXksIGluZGV4ICog
c2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYm9vbCBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlIHZhbHVlKQorYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJU
KHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlKSA9PSB2YWx1ZS0+dHlwZSgpKTsK
ICAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgbV9pbnN0YW5j
ZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKTsKICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBPcmln
aW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwgaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiBpbmxpbmUgVmFsdWUqIEIzSVJH
ZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQpAQCAtNDQ2LDEy
ICs0NTcsMTIgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRP
cFR5cGUgb3AsIE9yaWdpbiBvcmlnaW4sIEV4cHJlc3Npb24KICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMy
X3Qgb2Zmc2V0KQorYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNl
dCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50
MzIpOwogCiAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNl
dCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogaW5saW5lIHVpbnQz
Ml90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCkBAIC01MDgsMTggKzUxOSwxOCBAQCBp
bmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgT3Jp
Z2luIG9yaWdpbiwgRXhwcmVzc2lvbgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpCith
dXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7CiAKICAgICBl
bWl0U3RvcmVPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50
ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZFNl
bGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4
cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBl
IG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIE9yaWdpbigpLCBjb25kaXRpb24sIG5vblplcm8s
IHplcm8pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIEIzSVJHZW5l
cmF0b3I6OkV4cHJlc3Npb25UeXBlIEIzSVJHZW5lcmF0b3I6OmFkZENvbnN0YW50KFR5cGUgdHlw
ZSwgdWludDY0X3QgdmFsdWUpCkBAIC01NTcsNyArNTY4LDcgQEAgQjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSkKICAgICByZXR1
cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGlu
dWF0aW9uLCBib2R5KTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KQorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2ln
bmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8g
RklYTUU6IFRoaXMgbmVlZHMgdG8gZG8gc29tZSBraW5kIG9mIHN0YWNrIHBhc3NpbmcuCiAKQEAg
LTU3MiwzNSArNTgzLDM1IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmCiAKICAgICBtX2N1cnJl
bnRCbG9jayA9IHRha2VuOwogICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0
dXJlLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2Uo
Q29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spCith
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1bmlmeVZh
bHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEu
Y29udGludWF0aW9uKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7CiB9
CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEm
IGRhdGEpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xE
YXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKGRhdGEudHlwZSgpID09
IEJsb2NrVHlwZTo6SWYpOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5zcGVjaWFsOwogICAg
IGRhdGEuY29udmVydElmVG9CbG9jaygpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7
IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXR1cm5WYWx1ZXMpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNT
RVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CiAgICAgaWYgKHJldHVyblZhbHVlcy5zaXpl
KCkpCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBCMzo6UmV0dXJuLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsKICAgICBlbHNlCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0
dXJuLCBPcmlnaW4oKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
Ym9vbCBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBpZiAoZGF0YS50eXBlKCkgIT0gQmxvY2tUeXBlOjpMb29wKQog
ICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0KTsK
QEAgLTYxOCwxMCArNjI5LDEwIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRy
b2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0CiAgICAgICAgIHRh
cmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
IHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywg
Q29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRhcmdldHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJl
c3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0KTsKQEAgLTYzMiwxMCArNjQzLDEwIEBAIGJv
b2wgQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgVmVjdG9yPENvbnRyb2xEYXRhCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRz
LnNpemUoKTsgKytpKQogICAgICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNl
KGksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXRzW2ldLT50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKSkp
OwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2Vu
ZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKQorYXV0byBCM0lSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkm
IGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKIApAQCAtNjQ3
LDcgKzY1OCw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBl
bnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjCiB9CiAKIAotYm9vbCBCM0lSR2Vu
ZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpCithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERh
dGE7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlvbjsKQEAgLTY2MCwxMCAr
NjcxLDEwIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9s
RW50cnkmIGVudHJ5KQogICAgIGZvciAoVmFyaWFibGUqIHJlc3VsdCA6IGRhdGEucmVzdWx0KQog
ICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBy
ZXN1bHQpKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wg
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIEFTU0VSVChzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPT0gYXJncy5zaXplKCkpOwog
CkBAIC02ODYsMTAgKzY5NywxMCBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsCiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOwogICAgIEFTU0VS
VChzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPT0gYXJncy5zaXplKCkpOwpAQCAtNzYwLDcg
Kzc3MSw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25h
dHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEIz
SVJHZW5lcmF0b3I6OnVuaWZ5KFZhcmlhYmxlKiB2YXJpYWJsZSwgRXhwcmVzc2lvblR5cGUgc291
cmNlKQpAQCAtODg4LDE1ICs4OTksMTQgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxh
dGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgV2FzbUludGVybmFsRnUKICAgICBy
ZXR1cm4ganNFbnRyeXBvaW50OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVu
Y3Rpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNv
bnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgb3B0TGV2ZWwpCitFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1bmN0
aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCiAgICAgUHJvY2VkdXJlIHByb2Nl
ZHVyZTsKICAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVz
dWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleFNwYWNlKTsK
ICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNlLCBp
bmZvKTsKLSAgICBpZiAoIXBhcnNlci5wYXJzZSgpKQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNl
KCkpOwogCiAgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgdmFsaWRhdGUo
cHJvY2VkdXJlLCAiQWZ0ZXIgcGFyc2luZzpcbiIpOwpAQCAtOTEwLDEzICs5MjAsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZt
LCBjb25zdCB1aW50OF90KiBmdW4KICAgICByZXN1bHQtPndhc21FbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2NlZHVyZSwgb3B0TGV2
ZWwpOwogICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHBy
b2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgcmVzdWx0LT5qc1RvV2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIodm0sICpyZXN1bHQsIHNp
Z25hdHVyZSwgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLCBpbmZv
Lm1lbW9yeSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQp
OwogfQogCiAvLyBDdXN0b20gd2FzbSBvcHMuIFRoZXNlIGFyZSB0aGUgb25lcyB0b28gbWVzc3kg
dG8gZG8gaW4gd2FzbS5qc29uLgogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtOTI1LDExICs5
MzUsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKICAgICB9KTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdp
bigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKQEAgLTkzOCwzMyArOTQ4LDMzIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAgICAgfSk7
CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQg
PSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRl
bXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4
cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgdGhlIHBvcGNudCBpbnN0cnVjdGlvbiBpZiBTU0U0IGlzIGF2YWlsYWJsZSBi
dXQgd2UgZG9uJ3QgaGF2ZSBjb2RlIHRvIGRldGVjdCBTU0U0IHlldC4KICAgICAvLyBzZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzNjMKICAgICB1aW50MzJf
dCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1aW50MzJfdCB7
IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OwogICAgIFZhbHVlKiBmdW5jQWRk
cmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihwb3Bjb3VudCkpOwogICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2lu
KCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgcG9wY250IGluc3RydWN0
aW9uIGlmIFNTRTQgaXMgYXZhaWxhYmxlIGJ1dCB3ZSBkb24ndCBoYXZlIGNvZGUgdG8gZGV0ZWN0
IFNTRTQgeWV0LgogICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NTM2MwogICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGludDY0X3QpID0gW10gKGlu
dDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZh
bHVlKTsgfTsKICAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4o
cG9wY291bnQpKTsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRy
ZXNzLCBhcmcpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBs
YXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IERvdWJsZSwgT3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQpAQCAtOTgwLDExICs5OTAsMTEg
QEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZs
b2F0LCBPcmlnaW4oKSk7CiAgICAgaWYgKGlzWDg2KCkpCkBAIC0xMDAwLDExICsxMDEwLDExIEBA
IGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBPcmln
aW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CkBAIC0xMDEzLDExICsxMDIzLDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlCiAgICAg
fSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1
bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
IHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50
VmFsdWU+KG1fcHJvYywgRmxvYXQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
YXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEwMjYsMTEgKzEwMzYsMTEgQEAgYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
RWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgT3JpZ2luKCkpOwog
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAt
MTAzOSwxMSArMTA0OSwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiAgICAgfSk7CiAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRj
aHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRl
PD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9j
LCBGbG9hdCwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpOwpAQCAtMTA1MiwxMSArMTA2MiwxMSBAQCBib29sIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91Ymxl
VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOwpAQCAt
MTA3NSwxMSArMTA4NSwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0
Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0
ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKTsKICAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZs
b2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOwpAQCAtMTA5OCwxMiArMTEwOCwxMiBAQCBib29s
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJs
ZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCk7CiAgICAgVmFs
dWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9w
cm9jLCBPcmlnaW4oKSwgLTEuMCk7CkBAIC0xMTIyLDExICsxMTMyLDExIEBAIGJvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6
Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApOwogICAgIFZhbHVlKiBtaW4gPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4o
KSwgLTEuMCk7CkBAIC0xMTQ1LDExICsxMTU1LDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAg
ICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07
CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRU
cnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+
KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50NjRfdD46Om1pbigpKSk7CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOwpAQCAtMTE2OCwx
MSArMTE3OCwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNT
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2lu
dDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1i
b29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBz
dGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAq
IC0yLjApOwogICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwpAQCAtMTIxMCwxMSArMTIyMCwx
MSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2Fz
dDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKICAgICBWYWx1
ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkpOwpAQCAtMTIzMywxMSArMTI0MywxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFs
dWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKTsKICAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjAp
OwpAQCAtMTI3NSw3ICsxMjg1LDcgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICB9KTsK
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IGJhMTBhYTMuLmRmZTZhNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
Ildhc21Gb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogZXh0ZXJuICJDIiB2
b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwogCkBAIC0zNyw3ICszOCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9yeUluZm9ybWF0aW9uOwogCi1zdGQ6
OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYsIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNw
YWNlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgKaW5kZXggNGUwZWFmZC4uZTQ5YTg5MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtNjEsMzQgKzYxLDQ1IEBAIGlubGluZSBib29sIGlzVmFs
dWVUeXBlKFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCi1zdHJ1Y3QgRXh0
ZXJuYWwgewotICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgewotICAgICAgICAvLyBGSVhNRSBhdXRv
LWdlbmVyYXRlIHRoaXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjUyMzEKLSAgICAgICAgRnVuY3Rpb24gPSAwLAotICAgICAgICBUYWJsZSA9IDEsCi0gICAgICAg
IE1lbW9yeSA9IDIsCi0gICAgICAgIEdsb2JhbCA9IDMsCi0gICAgfTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJbnQ+Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZChJbnQgdmFsKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoICh2YWwpIHsKLSAgICAgICAgY2FzZSBGdW5jdGlvbjoKLSAgICAgICAgY2Fz
ZSBUYWJsZToKLSAgICAgICAgY2FzZSBNZW1vcnk6Ci0gICAgICAgIGNhc2UgR2xvYmFsOgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGljX2Fzc2VydChGdW5j
dGlvbiA9PSAwLCAiV2FzbSBuZWVkcyBGdW5jdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSAwIik7Ci0g
ICAgc3RhdGljX2Fzc2VydChUYWJsZSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0byBoYXZl
IHRoZSB2YWx1ZSAxIik7Ci0gICAgc3RhdGljX2Fzc2VydChNZW1vcnkgICA9PSAyLCAiV2FzbSBu
ZWVkcyBNZW1vcnkgdG8gaGF2ZSB0aGUgdmFsdWUgMiIpOwotICAgIHN0YXRpY19hc3NlcnQoR2xv
YmFsICAgPT0gMywgIldhc20gbmVlZHMgR2xvYmFsIHRvIGhhdmUgdGhlIHZhbHVlIDMiKTsKK2Vu
dW0gY2xhc3MgRXh0ZXJuYWxLaW5kIDogdWludDhfdCB7CisgICAgLy8gRklYTUUgYXV0by1nZW5l
cmF0ZSB0aGlzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MjMx
CisgICAgRnVuY3Rpb24gPSAwLAorICAgIFRhYmxlID0gMSwKKyAgICBNZW1vcnkgPSAyLAorICAg
IEdsb2JhbCA9IDMsCiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CitzdGF0aWMgYm9vbCBp
c1ZhbGlkRXh0ZXJuYWxLaW5kKEludCB2YWwpCit7CisgICAgc3dpdGNoICh2YWwpIHsKKyAgICBj
YXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbik6CisgICAgY2FzZSBz
dGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6VGFibGUpOgorICAgIGNhc2Ugc3RhdGljX2Nh
c3Q8SW50PihFeHRlcm5hbEtpbmQ6Ok1lbW9yeSk6CisgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+
KEV4dGVybmFsS2luZDo6R2xvYmFsKToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljX2Fzc2VydChzdGF0
aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6RnVuY3Rpb24pID09IDAsICJXYXNtIG5lZWRzIEZ1
bmN0aW9uIHRvIGhhdmUgdGhlIHZhbHVlIDAiKTsKK3N0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
aW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0byBo
YXZlIHRoZSB2YWx1ZSAxIik7CitzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJu
YWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZh
bHVlIDIiKTsKK3N0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6Okds
b2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBHbG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOwor
CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoRXh0ZXJuYWxLaW5kIGtpbmQp
Cit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9u
OiByZXR1cm4gIkZ1bmN0aW9uIjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHJldHVy
biAiVGFibGUiOworICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHJldHVybiAiTWVtb3J5
IjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6R2xvYmFsOiByZXR1cm4gIkdsb2JhbCI7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICI/IjsKK30K
Kwogc3RydWN0IFNpZ25hdHVyZSB7CiAgICAgVHlwZSByZXR1cm5UeXBlOwogICAgIFZlY3RvcjxU
eXBlPiBhcmd1bWVudHM7CkBAIC05NywxMyArMTA4LDEzIEBAIHN0cnVjdCBTaWduYXR1cmUgewog
c3RydWN0IEltcG9ydCB7CiAgICAgSWRlbnRpZmllciBtb2R1bGU7CiAgICAgSWRlbnRpZmllciBm
aWVsZDsKLSAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIEV4dGVybmFsS2luZCBraW5kOwog
ICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29y
cmVzcG9uZGluZyBraW5kLgogfTsKIAogc3RydWN0IEV4cG9ydCB7CiAgICAgSWRlbnRpZmllciBm
aWVsZDsKLSAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIEV4dGVybmFsS2luZCBraW5kOwog
ICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29y
cmVzcG9uZGluZyBraW5kLgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCAyMzFjMGExLi43NDFhNGJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtMzksNyArMzks
NyBAQCBlbnVtIGNsYXNzIEJsb2NrVHlwZSB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
ZXh0PgotY2xhc3MgRnVuY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFyc2VyIHsKK2NsYXNzIEZ1bmN0
aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjx2b2lkPiB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBl
ZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwpAQCAtNDcsNyAr
NDcsNyBAQCBwdWJsaWM6CiAKICAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29uc3QgdWlu
dDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1
cmUqLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKICAgICBzdHJ1Y3QgQ29udHJvbEVu
dHJ5IHsKICAgICAgICAgRXhwcmVzc2lvbkxpc3QgZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CkBA
IC01NywyNSArNTcsMjYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJv
ZHkoKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBl
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lv
bihPcFR5cGUpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybigpOwotICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiwgdW5zaWduZWQgbGV2ZWwpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlQm9keSgpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gdW5pZnlDb250cm9sKFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCB1bnNp
Z25lZCBsZXZlbCk7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwb3BFeHByZXNzaW9u
U3RhY2soRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisjZGVmaW5lIFdBU01fVFJZX1BPUF9FWFBS
RVNTSU9OX1NUQUNLX0lOVE8ocmVzdWx0LCB3aGF0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFj
ay5pc0VtcHR5KCksICJjYW4ndCBwb3AgZW1wdHkgc3RhY2sgaW4gIiB3aGF0KTsgXAorICAgICAg
ICByZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogICAgIHRl
bXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFyeUNhc2UoKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFyeUNhc2UoKTsKIAogICAg
IHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBiaW5hcnlDYXNl
KCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5Q2FzZSgpOwog
Ci0gICAgYm9vbCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkKLSAgICB7Ci0gICAg
ICAgIG1fY29udGV4dC5zZXRFcnJvck1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisjZGVmaW5lIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFk
ZF9leHByZXNzaW9uKSBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKG1fY29udGV4dC5hZGRfZXhw
cmVzc2lvbikKKworICAgIC8vIEZJWE1FIGFkZCBhIG1hY3JvIGFzIGFib3ZlIGZvciBXQVNNX1RS
WV9BUFBFTkRfVE9fQ09OVFJPTF9TVEFDSyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1ODYyCiAKICAgICBDb250ZXh0JiBtX2NvbnRleHQ7CiAgICAgRXhwcmVzc2lv
bkxpc3QgbV9leHByZXNzaW9uU3RhY2s7CkBAIC05OSwxMTggKzEwMCwxMDQgQEAgRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWJvb2wgRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlKCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKCFtX2NvbnRleHQuYWRkQXJndW1lbnRz
KG1fc2lnbmF0dXJlLT5hcmd1bWVudHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICB1
aW50MzJfdCBsb2NhbENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIobG9jYWxDb3VudCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29u
dGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUtPmFyZ3VtZW50cyksICJjYW4ndCBhZGQgIiwg
bV9zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICIgYXJndW1lbnRzIHRvIEZ1bmN0aW9uIik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobG9jYWxDb3VudCksICJj
YW4ndCBnZXQgbG9jYWwgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGxvY2FsQ291
bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRnVuY3Rpb24gc2Vj
dGlvbidzIGxvY2FsIGNvdW50IGlzIHRvbyBiaWcgIiwgbG9jYWxDb3VudCk7CiAKICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90
IG51bWJlck9mTG9jYWxzOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG51bWJlck9mTG9j
YWxzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBUeXBlIHR5cGVPZkxv
Y2FsOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRMb2NhbCh0eXBl
T2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihudW1iZXJPZkxvY2Fscyks
ICJjYW4ndCBnZXQgRnVuY3Rpb24ncyBudW1iZXIgb2YgbG9jYWxzIGluIGdyb3VwICIsIGkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG51bWJlck9mTG9jYWxzID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAiLCBpLCAidGgg
bG9jYWwgZ3JvdXAgY291bnQgaXMgdG9vIGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSwgImNhbid0
IGdldCBGdW5jdGlvbiBsb2NhbCdzIHR5cGUgaW4gZ3JvdXAgIiwgaSk7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZM
b2NhbHMpLCAiY2FuJ3QgYWRkICIsIG51bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9uIGxvY2FscyBm
cm9tIGdyb3VwICIsIGkpOwogICAgIH0KIAotICAgIHJldHVybiBwYXJzZUJvZHkoKTsKKyAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQm9keSgpKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZUJvZHkoKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VC
b2R5KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHVp
bnQ4X3Qgb3A7Ci0gICAgICAgIGlmICghcGFyc2VVSW50OChvcCkgfHwgIWlzVmFsaWRPcFR5cGUo
b3ApKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBXVEY6OmRh
dGFMb2dMbigiYXR0ZW1wdGVkIHRvIGRlY29kZSBpbnZhbGlkIG9wOiAiLCBSYXdQb2ludGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSksICIgYXQgb2Zmc2V0OiAiLCBSYXdQb2ludGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgo
b3ApLCAiY2FuJ3QgZGVjb2RlIG9wY29kZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFpc1ZhbGlkT3BUeXBlKG9wKSwgImludmFsaWQgb3Bjb2RlICIsIG9wKTsKIAogICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBt
X3VucmVhY2hhYmxlQmxvY2tzLCAiKTogIiwgIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obV9vZmZzZXQpKSk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZHVtcChtX2NvbnRyb2xT
dGFjaywgbV9leHByZXNzaW9uU3RhY2spOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9wID09
IE9wVHlwZTo6RW5kICYmICFtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV91bnJlYWNoYWJsZUJsb2NrcyA/IHRydWUgOiBhZGRSZXR1cm4oKTsKLQotICAgICAgICBp
ZiAobV91bnJlYWNoYWJsZUJsb2NrcykgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVhY2hh
YmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8g
cHJvY2VzcyB1bnJlYWNoYWJsZSBvcDoiLCBvcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4cHJlc3Npb24o
c3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6RW5kICYm
ICFtX2NvbnRyb2xTdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3VucmVhY2hhYmxl
QmxvY2tzKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICByZXR1cm4g
YWRkUmV0dXJuKCk7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2Nr
cykKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVW5yZWFjaGFibGVFeHBy
ZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSwgImNhbid0IHBhcnNlIHVucmVhY2hhYmxl
IGV4cHJlc3Npb24gIiwgb3ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpLCAiY2Fu
J3QgcGFyc2UgZXhwcmVzc2lvbiAiLCBvcCk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWJvb2wgRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OmFkZFJldHVybigpCithdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjphZGRSZXR1cm4oKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvbkxp
c3QgcmV0dXJuVmFsdWVzOwogICAgIGlmIChtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZSAhPSBWb2lk
KSB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJldHVyblZhbHVlOwotICAgICAgICBpZiAoIXBv
cEV4cHJlc3Npb25TdGFjayhyZXR1cm5WYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmV0dXJuVmFsdWUs
ICJyZXR1cm4iKTsKICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChyZXR1cm5WYWx1ZSk7CiAg
ICAgfQogCiAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0gICAgcmV0dXJuIG1fY29udGV4
dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKKyAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRSZXR1cm4ocmV0dXJuVmFsdWVzKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQ29udGV4dD4KIHRlbXBsYXRlPE9wVHlwZSBvcD4KLWJvb2wgRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OmJpbmFyeUNhc2UoKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
YmluYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSByaWdo
dDsKLSAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyaWdodCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQogICAgIEV4cHJlc3Npb25UeXBlIGxlZnQ7Ci0gICAgaWYgKCFwb3BFeHByZXNzaW9u
U3RhY2sobGVmdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIEV4cHJlc3Npb25UeXBl
IHJlc3VsdDsKLSAgICBpZiAoIW1fY29udGV4dC50ZW1wbGF0ZSBhZGRPcDxvcD4obGVmdCwgcmln
aHQsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdBU01fVFJZX1BPUF9F
WFBSRVNTSU9OX1NUQUNLX0lOVE8ocmlnaHQsICJiaW5hcnkgcmlnaHQiKTsKKyAgICBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGxlZnQsICJiaW5hcnkgbGVmdCIpOworICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCByaWdodCwgcmVz
dWx0KSk7CisKICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0
PgogdGVtcGxhdGU8T3BUeXBlIG9wPgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5h
cnlDYXNlKCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZSgpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICBpZiAoIXBvcEV4
cHJlc3Npb25TdGFjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdDsKLSAgICBpZiAoIW1fY29udGV4dC50ZW1wbGF0ZSBhZGRPcDxvcD4o
dmFsdWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJ1bmFyeSIpOworICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPih2YWx1ZSwgcmVzdWx0KSk7CisKICAgICBt
X2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkKK2F1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlk
LCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gYmluYXJ5Q2FzZTxPcFR5cGU6
Om5hbWU+KCk7CkBAIC0yNDEsMzEzICsyMjgsMjM2IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAKICAgICBjYXNlIE9wVHlwZTo6U2Vs
ZWN0OiB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYgKCFw
b3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQogICAgICAgICBFeHByZXNzaW9uVHlwZSB6ZXJvOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Np
b25TdGFjayh6ZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBFeHBy
ZXNzaW9uVHlwZSBub25aZXJvOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhub25a
ZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNX1RSWV9QT1Bf
RVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgInNlbGVjdCBjb25kaXRpb24iKTsKKyAg
ICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh6ZXJvLCAic2VsZWN0IHpl
cm8iKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhub25aZXJv
LCAic2VsZWN0IG5vbi16ZXJvIik7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0Owot
ICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJv
LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVChhZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvLCByZXN1bHQp
KTsKIAogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAjZGVmaW5lIENSRUFU
RV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgogICAgIEZPUl9F
QUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NBU0UpIHsKICAgICAgICAgdWludDMyX3Qg
YWxpZ25tZW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlcjsKLSAgICAgICAgaWYgKCFwb3BFeHBy
ZXNzaW9uU3RhY2socG9pbnRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4dC5sb2FkKHN0
YXRpY19jYXN0PExvYWRPcFR5cGU+KG9wKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IGxvYWQgYWxpZ25tZW50Iik7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBn
ZXQgbG9hZCBvZmZzZXQiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyhwb2ludGVyLCAibG9hZCBwb2ludGVyIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4ob3ApLCBwb2ludGVyLCByZXN1bHQs
IG9mZnNldCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgRk9S
X0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpIHsKICAgICAgICAgdWludDMy
X3QgYWxpZ25tZW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgICAgIGlmICghcG9wRXhw
cmVzc2lvblN0YWNrKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAg
ICBFeHByZXNzaW9uVHlwZSBwb2ludGVyOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFj
ayhwb2ludGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4g
bV9jb250ZXh0LnN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihvcCksIHBvaW50ZXIsIHZh
bHVlLCBvZmZzZXQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IHN0b3JlIGFsaWdubWVudCIpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IHN0b3Jl
IG9mZnNldCIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZh
bHVlLCAic3RvcmUgdmFsdWUiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9pbnRlciIpOworICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4ob3ApLCBwb2ludGVyLCB2
YWx1ZSwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogI3VuZGVmIENSRUFU
RV9DQVNFCiAKICAgICBjYXNlIE9wVHlwZTo6RjMyQ29uc3Q6CiAgICAgY2FzZSBPcFR5cGU6Okkz
MkNvbnN0OiB7CiAgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgcGFy
c2UgMzItYml0IGNvbnN0YW50Iik7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZCht
X2NvbnRleHQuYWRkQ29uc3RhbnQoSTMyLCBjb25zdGFudCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RjY0Q29u
c3Q6CiAgICAgY2FzZSBPcFR5cGU6Okk2NENvbnN0OiB7CiAgICAgICAgIHVpbnQ2NF90IGNvbnN0
YW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDY0KGNvbnN0YW50KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgcGFyc2UgNjQtYml0IGNvbnN0YW50Iik7CiAgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0LCBjb25zdGFu
dCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
ICAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0g
ICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250
ZXh0LmdldExvY2FsKGluZGV4LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNh
bid0IGdldCBpbmRleCBmb3IgZ2V0X2xvY2FsIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1fY29udGV4dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSwgImNhbid0IGdldF9sb2NhbCBh
dCBpbmRleCIsIGluZGV4KTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAog
ICAgIGNhc2UgT3BUeXBlOjpTZXRMb2NhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwotICAgICAgICBpZiAoIXBvcEV4cHJl
c3Npb25TdGFjayh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciBz
ZXRfbG9jYWwiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2
YWx1ZSwgInNldF9sb2NhbCIpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzZXRM
b2NhbChpbmRleCwgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBj
YXNlIE9wVHlwZTo6VGVlTG9jYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIW1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5zZXRMb2NhbChpbmRleCwgbV9leHBy
ZXNzaW9uU3RhY2subGFzdCgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciB0ZWVfbG9jYWwiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5pc0VtcHR5KCksICJjYW4n
dCB0ZWVfbG9jYWwgb24gZW1wdHkgZXhwcmVzc2lvbiBzdGFjayIpOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChzZXRMb2NhbChpbmRleCwgbV9leHByZXNzaW9uU3RhY2subGFzdCgp
KSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkdldEds
b2JhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEV4cHJlc3Np
b25UeXBlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuZ2V0R2xvYmFsKGluZGV4LCBy
ZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3Mg
aW5kZXgiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0R2xvYmFsKGluZGV4
LCByZXN1bHQpKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNh
c2UgT3BUeXBlOjpTZXRHbG9iYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKCFwb3BFeHByZXNzaW9u
U3RhY2sodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgc2V0X2dsb2Jh
bCdzIGluZGV4Iik7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
dmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKICAgICAgICAgcmV0dXJuIG1fY29udGV4dC5z
ZXRHbG9iYWwoaW5kZXgsIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Q2FsbDog
ewogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKGZ1bmN0aW9uSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGlmIChmdW5jdGlvbkluZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgcGFyc2UgY2FsbCdzIGZ1bmN0aW9uIGlu
ZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2Z1
bmN0aW9uSW5kZXhTcGFjZS5zaXplLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlvbklu
ZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9mdW5jdGlvbkluZGV4U3Bh
Y2Uuc2l6ZSk7CiAKICAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBjYWxsZWVTaWduYXR1cmUgPSBt
X2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIuZ2V0KClbZnVuY3Rpb25JbmRleF0uc2lnbmF0dXJl
OwotCi0gICAgICAgIGlmIChjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPiBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID4g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlv
bkluZGV4LCAiIGhhcyAiLCBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICIgYXJn
dW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAogICAgICAgICBzaXplX3QgZmlyc3RB
cmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2lnbmF0dXJl
LT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7
Ci0gICAgICAgIGFyZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUtPmFy
Z3VtZW50cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdEFyZ3VtZW50
SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMu
c2l6ZSgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxs
ZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICIgYXJndW1lbnRzIik7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lv
blN0YWNrW2ldKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1l
bnRJbmRleCk7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1w
dHlFeHByZXNzaW9uOwotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRDYWxsKGZ1bmN0aW9uSW5k
ZXgsIGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbChmdW5jdGlvbklu
ZGV4LCBjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChyZXN1
bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpDYWxsSW5kaXJlY3Q6IHsK
LSAgICAgICAgaWYgKCFtX2luZm8udGFibGVJbmZvcm1hdGlvbikKLSAgICAgICAgICAgIHJldHVy
biBzZXRFcnJvck1lc3NhZ2UoImNhbGxfaW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEgdGFi
bGUgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOwogICAgICAgICB1aW50MzJfdCBzaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzaWduYXR1cmVJbmRleCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDhfdCByZXNlcnZlZDsKLSAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBpZiAocmVzZXJ2ZWQgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBzZXRF
cnJvck1lc3NhZ2UoImNhbGxfaW5kaXJlY3QgJ3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4
MCIpOwotCi0gICAgICAgIGlmIChtX2luZm8uc2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0dXJl
SW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3JNZXNzYWdlKCJUcmllZCB0byB1c2Ug
YSBzaWduYXR1cmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdmFsaWQgc2lnbmF0dXJlcyIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8udGFibGVJbmZvcm1hdGlvbiwgImNhbGxf
aW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEgdGFibGUgaXMgZGVmaW5lZCBvciBpbXBvcnRl
ZCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzaWduYXR1
cmVJbmRleCksICJjYW4ndCBnZXQgY2FsbF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCIpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSwgImNh
bid0IGdldCBjYWxsX2luZGlyZWN0J3MgcmVzZXJ2ZWQgYnl0ZSIpOworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFyZXNlcnZlZCwgImNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZhcnVp
bnQxIG11c3QgYmUgMHgwIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLnNp
Z25hdHVyZXMuc2l6ZSgpIDw9IHNpZ25hdHVyZUluZGV4LCAiY2FsbF9pbmRpcmVjdCdzIHNpZ25h
dHVyZSBpbmRleCAiLCBzaWduYXR1cmVJbmRleCwgIiBleGNlZWRzIGtub3duIHNpZ25hdHVyZXMg
IiwgbV9pbmZvLnNpZ25hdHVyZXMuc2l6ZSgpKTsKIAogICAgICAgICBjb25zdCBTaWduYXR1cmUq
IGNhbGxlZVNpZ25hdHVyZSA9ICZtX2luZm8uc2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF07CiAg
ICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMu
c2l6ZSgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBpbmRleC4KLSAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4g
c2V0RXJyb3JNZXNzYWdlKCJOb3QgZW5vdWdoIHZhbHVlcyBvbiB0aGUgc3RhY2sgZm9yIGNhbGxf
aW5kaXJlY3QiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbF9pbmRpcmVjdCBleHBlY3RzICIsIGFyZ3Vt
ZW50Q291bnQsICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5
IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAogICAgICAg
ICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7Ci0gICAgICAgIGlmICghYXJncy50cnlSZXNl
cnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCi0gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3JN
ZXNzYWdlKCJPdXQgb2YgbWVtb3J5Iik7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
YXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBhcmd1bWVudENvdW50LCAiIGNhbGxfaW5kaXJlY3QgYXJndW1l
bnRzIik7CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCkgLSBhcmd1bWVudENvdW50OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQobV9l
eHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmly
c3RBcmd1bWVudEluZGV4KTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQgPSBDb250
ZXh0OjplbXB0eUV4cHJlc3Npb247Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZENhbGxJbmRp
cmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdChj
YWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0g
Q29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CiAgICAgICAgIFR5cGUgaW5s
aW5lU2lnbmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1
cmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGJsb2Nr
J3MgaW5saW5lIHNpZ25hdHVyZSIpOwogICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBX
VEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgbV9jb250ZXh0LmFkZEJsb2NrKGlubGluZVNpZ25h
dHVyZSkgfSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
Y2FzZSBPcFR5cGU6Okxvb3A6IHsKICAgICAgICAgVHlwZSBpbmxpbmVTaWduYXR1cmU7Ci0gICAg
ICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRU
eXBlKGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgbG9vcCdzIGlubGluZSBzaWduYXR1cmUi
KTsKICAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25T
dGFjayksIG1fY29udGV4dC5hZGRMb29wKGlubGluZVNpZ25hdHVyZSkgfSk7CiAgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OklmOiB7CiAg
ICAgICAgIFR5cGUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlUmVzdWx0VHlw
ZShpbmxpbmVTaWduYXR1cmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAg
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3Rh
Y2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBDb250
cm9sVHlwZSBjb250cm9sOwotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRJZihjb25kaXRpb24s
IGlubGluZVNpZ25hdHVyZSwgY29udHJvbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25h
dHVyZSksICJjYW4ndCBnZXQgaWYncyBpbmxpbmUgc2lnbmF0dXJlIik7CisgICAgICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiaWYgY29uZGl0aW9uIik7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElmKGNvbmRpdGlvbiwgaW5saW5l
U2lnbmF0dXJlLCBjb250cm9sKSk7CiAgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdU
Rk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBjb250cm9sIH0pOwogICAgICAgICBtX2V4cHJlc3Np
b25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpFbHNlOiB7Ci0gICAgICAg
IGlmICghbV9jb250cm9sU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvck1lc3Nh
Z2UoIkF0dGVtcHRlZCB0byB1c2UgZWxzZSBibG9jayBhdCB0aGUgdG9wLWxldmVsIG9mIGEgZnVu
Y3Rpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghbV9jb250ZXh0LmFkZEVsc2UobV9jb250cm9sU3RhY2subGFzdCgpLmNvbnRyb2xEYXRh
LCBtX2V4cHJlc3Npb25TdGFjaykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgdXNl
IGVsc2UgYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZEVsc2UobV9jb250cm9sU3RhY2subGFzdCgpLmNvbnRy
b2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5z
aHJpbmsoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAogICAgIGNhc2UgT3BUeXBlOjpCcjoKICAgICBjYXNlIE9wVHlwZTo6QnJJZjogewogICAg
ICAgICB1aW50MzJfdCB0YXJnZXQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodGFyZ2V0
KSB8fCB0YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiA9IENvbnRleHQ6OmVt
cHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6QnJJZikgewotICAgICAg
ICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMih0YXJnZXQpLCAiY2FuJ3QgZ2V0IGJyIC8gYnJfaWYncyB0YXJn
ZXQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YXJnZXQgPj0gbV9jb250cm9sU3Rh
Y2suc2l6ZSgpLCAiYnIgLyBicl9pZidzIHRhcmdldCAiLCB0YXJnZXQsICIgZXhjZWVkcyBjb250
cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgaWYgKG9w
ID09IE9wVHlwZTo6QnJJZikKKyAgICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NU
QUNLX0lOVE8oY29uZGl0aW9uLCAiYnIgLyBicl9pZiBjb25kaXRpb24iKTsKKyAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CiAKICAgICAgICAgQ29udHJv
bFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0g
dGFyZ2V0XS5jb250cm9sRGF0YTsKIAotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFkZEJyYW5j
aChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkQnJhbmNoKGRhdGEsIGNvbmRpdGlvbiwgbV9leHByZXNzaW9uU3Rh
Y2spKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6QnJU
YWJsZTogewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZlRhcmdldHM7Ci0gICAgICAgIGlmICgh
cGFyc2VWYXJVSW50MzIobnVtYmVyT2ZUYXJnZXRzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOworICAgICAgICB1aW50MzJfdCBk
ZWZhdWx0VGFyZ2V0OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihudW1iZXJPZlRhcmdldHMpLCAiY2FuJ3QgZ2V0IHRoZSBudW1iZXIgb2YgdGFyZ2V0cyBmb3Ig
YnJfdGFibGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihudW1iZXJPZlRhcmdldHMg
PT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiYnJfdGFibGUncyBudW1i
ZXIgb2YgdGFyZ2V0cyBpcyB0b28gYmlnICIsIG51bWJlck9mVGFyZ2V0cyk7CiAKICAgICAgICAg
VmVjdG9yPENvbnRyb2xUeXBlKj4gdGFyZ2V0czsKLSAgICAgICAgaWYgKCF0YXJnZXRzLnRyeVJl
c2VydmVDYXBhY2l0eShudW1iZXJPZlRhcmdldHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXRhcmdldHMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KG51bWJlck9mVGFyZ2V0cyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIG51bWJl
ck9mVGFyZ2V0cywgIiBicl90YWJsZSB0YXJnZXRzIik7CiAgICAgICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZlRhcmdldHM7ICsraSkgewogICAgICAgICAgICAgdWludDMyX3Qg
dGFyZ2V0OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0YXJnZXQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldCA+PSBtX2Nv
bnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YXJnZXQpLCAiY2Fu
J3QgZ2V0ICIsIGksICJ0aCB0YXJnZXQgZm9yIGJyX3RhYmxlIik7CisgICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJicl90YWJs
ZSdzICIsIGksICJ0aCB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFjayBz
aXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7CiAgICAgICAgICAgICB0YXJnZXRzLnVuY2hl
Y2tlZEFwcGVuZCgmbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRh
cmdldF0uY29udHJvbERhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3QgZGVmYXVs
dFRhcmdldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihkZWZhdWx0VGFyZ2V0KSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGVmYXVsdFRhcmdldCA+PSBt
X2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25T
dGFjayhjb25kaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFtX2NvbnRleHQuYWRkU3dpdGNoKGNvbmRpdGlvbiwgdGFyZ2V0cywgbV9jb250
cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRdLmNvbnRy
b2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRlZmF1bHRUYXJnZXQp
LCAiY2FuJ3QgZ2V0IGRlZmF1bHQgdGFyZ2V0IGZvciBicl90YWJsZSIpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAi
YnJfdGFibGUncyBkZWZhdWx0IHRhcmdldCAiLCBkZWZhdWx0VGFyZ2V0LCAiIGV4Y2VlZHMgY29u
dHJvbCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7CisgICAgICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiYnJfdGFibGUgY29uZGl0
aW9uIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFN3aXRjaChjb25kaXRp
b24sIHRhcmdldHMsIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBk
ZWZhdWx0VGFyZ2V0XS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKIAogICAgICAg
ICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OlJldHVybjogewpAQCAtNTU5
LDgxICs0NjksNzcgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKE9wVHlwZSBvcCkKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBsaXR0bGUgd2VpcmQg
aW4gdGhhdCBpdCB3aWxsIG1vZGlmeSB0aGUgZXhwcmVzc2lvblN0YWNrIGZvciB0aGUgcmVzdWx0
IG9mIHRoZSBibG9jay4KICAgICAgICAgLy8gVGhhdCdzIGEgbGl0dGxlIHRvbyBlZmZlY3RmdWwg
Zm9yIG1lIGJ1dCBJIGRvbid0IGhhdmUgYSBiZXR0ZXIgQVBJIHJpZ2h0IG5vdy4KICAgICAgICAg
Ly8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzUzCi0g
ICAgICAgIGlmICghbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQoZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6
OlVucmVhY2hhYmxlOiB7CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9w
VHlwZTo6RHJvcDogewotICAgICAgICBpZiAoIW1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewot
ICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKCJBdHRlbXB0ZWQgdG8gZHJvcCBhbiBleHByZXNz
aW9uIGZyb20gYW4gZW1wdHkgc3RhY2suIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpLCAiY2FuJ3QgZHJvcCBvbiBlbXB0eSBzdGFjayIpOwogICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay50YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Tm9wOiB7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpHcm93
TWVtb3J5OgorICAgICAgICByZXR1cm4gZmFpbCgibm90IHlldCBpbXBsZW1lbnRlZDogZ3Jvd19t
ZW1vcnkiKTsgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKICAgICBjYXNlIE9wVHlw
ZTo6Q3VycmVudE1lbW9yeToKLSAgICAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQu
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhaWwoIm5vdCB5ZXQgaW1w
bGVtZW50ZWQ6IGN1cnJlbnRfbWVtb3J5Iik7IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
LgorCiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVh
Y2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApCithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBBU1NFUlQobV91bnJlYWNoYWJsZUJsb2Nrcyk7CiAgICAgc3dpdGNoIChvcCkgewog
ICAgIGNhc2UgT3BUeXBlOjpFbHNlOiB7CiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tz
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgICAgICBDb250cm9sRW50cnkmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CiAg
ICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAwOwotICAgICAgICBpZiAoIW1fY29udGV4dC5h
ZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhLmNvbnRyb2xEYXRhKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRWxzZVRvVW5yZWFj
aGFibGUoZGF0YS5jb250cm9sRGF0YSkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJp
bmsoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAogICAgIGNhc2UgT3BUeXBlOjpFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9j
a3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFj
ay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkRW5kVG9VbnJlYWNo
YWJsZShkYXRhKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGRhdGEpKTsKICAgICAg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ayk7CiAgICAgICAgIH0KICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlw
ZTo6TG9vcDoKICAgICBjYXNlIE9wVHlwZTo6SWY6CiAgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7
CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MrKzsKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgLy8gdHdvIGltbWVkaWF0ZSBjYXNlcwog
ICAgIGNhc2UgT3BUeXBlOjpCcjoKICAgICBjYXNlIE9wVHlwZTo6QnJJZjogewogICAgICAgICB1
aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodW51c2VkKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlVmFyVUludDMyKHVu
dXNlZCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNl
ZCksICJjYW4ndCBnZXQgYnIgLyBicl9pZiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4ndCBn
ZXQgYnIgLyBicl9pZiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcwpAQCAtNjQ0LDI1ICs1NTAs
MTQgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJl
c3Npb24oT3BUeXBlIG9wKQogICAgIGNhc2UgT3BUeXBlOjpTZXRMb2NhbDoKICAgICBjYXNlIE9w
VHlwZTo6R2V0TG9jYWw6IHsKICAgICAgICAgdWludDMyX3QgdW51c2VkOwotICAgICAgICByZXR1
cm4gcGFyc2VWYXJVSW50MzIodW51c2VkKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIodW51c2VkKSwgImNhbid0IGdldCBjb25zdCAvIGxvY2FsIGluIHVucmVh
Y2hhYmxlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpwb3BF
eHByZXNzaW9uU3RhY2soRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKLXsKLSAgICBpZiAobV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fZXhwcmVzc2lvblN0YWNr
LnRha2VMYXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNldEVycm9y
TWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBhIHN0YWNrIHZhbHVlIHdoZW4gbm9uZSBleGlzdGVk
Iik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCmluZGV4IDAwZWY4MjkuLjBhNjRiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0zOSwxODkgKzM5LDExMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1zdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Ci0KLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCithdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKLSAgICBtX21vZHVsZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8TW9kdWxlSW5mb3JtYXRpb24+KCk7Ci0KKyAgICBtX3Jlc3VsdC5tb2R1bGUgPSBz
dGQ6Om1ha2VfdW5pcXVlPE1vZHVsZUluZm9ybWF0aW9uPigpOwogICAgIGNvbnN0IHNpemVfdCBt
aW5TaXplID0gODsKLSAgICBpZiAobGVuZ3RoKCkgPCBtaW5TaXplKSB7Ci0gICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gIk1vZHVsZSBpcyAiICsgU3RyaW5nOjpudW1iZXIobGVuZ3RoKCkpICsgIiBi
eXRlcywgZXhwZWN0ZWQgYXQgbGVhc3QgIiArIFN0cmluZzo6bnVtYmVyKG1pblNpemUpICsgIiBi
eXRlcyI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFjb25zdW1lQ2hh
cmFjdGVyKDApIHx8ICFjb25zdW1lU3RyaW5nKCJhc20iKSkgewotICAgICAgICBtX2Vycm9yTWVz
c2FnZSA9ICJNb2R1bGVzIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnXFwwYXNtJyI7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOwotICAgIGlm
ICghcGFyc2VVSW50MzIodmVyc2lvbk51bWJlcikpIHsKLSAgICAgICAgLy8gRklYTUUgaW1wcm92
ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM5MTkKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgdmVyc2lvbiBu
dW1iZXIiOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0gICAgaWYgKHZlcnNpb25O
dW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyKSB7Ci0gICAgICAgIC8vIEZJWE1FIGltcHJv
dmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTE5Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gInVuZXhwZWN0ZWQgdmVyc2lvbiBudW1i
ZXIiOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobGVuZ3RoKCkgPCBtaW5TaXplLCAiZXhwZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgIiwg
bWluU2l6ZSwgIiBieXRlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVDaGFy
YWN0ZXIoMCkgfHwgIWNvbnN1bWVTdHJpbmcoImFzbSIpLCAibW9kdWxlcyBkb2Vzbid0IHN0YXJ0
IHdpdGggJ1xcMGFzbSciKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMih2
ZXJzaW9uTnVtYmVyKSwgImNhbid0IHBhcnNlIHZlcnNpb24gbnVtYmVyIik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih2ZXJzaW9uTnVtYmVyICE9IGV4cGVjdGVkVmVyc2lvbk51bWJlciwgInVu
ZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgIiwgdmVyc2lvbk51bWJlciwgIiBleHBlY3RlZCAiLCBl
eHBlY3RlZFZlcnNpb25OdW1iZXIpOwogCi0KLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZ0xuKCJQYXNzZWQgcHJvY2Vzc2luZyBoZWFkZXIuIik7Ci0KLSAgICBTZWN0aW9uczo6U2Vj
dGlvbiBwcmV2aW91c1NlY3Rpb24gPSBTZWN0aW9uczo6VW5rbm93bjsKKyAgICBTZWN0aW9uIHBy
ZXZpb3VzU2VjdGlvbiA9IFNlY3Rpb246OlVua25vd247CiAgICAgd2hpbGUgKG1fb2Zmc2V0IDwg
bGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4o
IlN0YXJ0aW5nIHRvIHBhcnNlIG5leHQgc2VjdGlvbiBhdCBvZmZzZXQ6ICIsIG1fb2Zmc2V0KTsK
LQogICAgICAgICB1aW50OF90IHNlY3Rpb25CeXRlOwotICAgICAgICBpZiAoIXBhcnNlVUludDco
c2VjdGlvbkJ5dGUpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3Nh
Z2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSI7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2dMbigiU2VjdGlvbiBieXRlOiAiLCBzZWN0aW9uQnl0ZSk7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDcoc2VjdGlvbkJ5dGUpLCAiY2Fu
J3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOwogCi0gICAgICAgIFNlY3Rpb25zOjpTZWN0aW9uIHNlY3Rp
b24gPSBTZWN0aW9uczo6VW5rbm93bjsKKyAgICAgICAgU2VjdGlvbiBzZWN0aW9uID0gU2VjdGlv
bjo6VW5rbm93bjsKICAgICAgICAgaWYgKHNlY3Rpb25CeXRlKSB7Ci0gICAgICAgICAgICBpZiAo
c2VjdGlvbkJ5dGUgPCBTZWN0aW9uczo6VW5rbm93bikKLSAgICAgICAgICAgICAgICBzZWN0aW9u
ID0gc3RhdGljX2Nhc3Q8U2VjdGlvbnM6OlNlY3Rpb24+KHNlY3Rpb25CeXRlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghU2VjdGlvbnM6OnZhbGlkYXRlT3JkZXIocHJldmlvdXNTZWN0aW9u
LCBzZWN0aW9uKSkgewotICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gImludmFsaWQgc2VjdGlvbiBvcmRlciI7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXNWYWxpZFNlY3Rpb24oc2VjdGlvbkJ5
dGUpKQorICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0aW9uPihzZWN0
aW9uQnl0ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50MzJfdCBzZWN0aW9uTGVuZ3RoOwot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpKSB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291
bGRuJ3QgZ2V0IHNlY3Rpb24gbGVuZ3RoIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChzZWN0aW9uTGVuZ3RoID4gbGVuZ3RoKCkgLSBtX29mZnNl
dCkgewotICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gInNlY3Rpb24gY29udGVudCB3b3VsZCBvdmVyZmxvdyBNb2R1bGUncyBzaXpl
IjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCF2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbiksICJp
bnZhbGlkIHNlY3Rpb24gb3JkZXIsICIsIHByZXZpb3VzU2VjdGlvbiwgIiBmb2xsb3dlZCBieSAi
LCBzZWN0aW9uKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
c2VjdGlvbkxlbmd0aCksICJjYW4ndCBnZXQgIiwgc2VjdGlvbiwgIiBzZWN0aW9uJ3MgbGVuZ3Ro
Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VjdGlvbkxlbmd0aCA+IGxlbmd0aCgp
IC0gbV9vZmZzZXQsIHNlY3Rpb24sICJzZWN0aW9uIG9mIHNpemUgIiwgc2VjdGlvbkxlbmd0aCwg
IiB3b3VsZCBvdmVyZmxvdyBNb2R1bGUncyBzaXplIik7CiAKICAgICAgICAgYXV0byBlbmQgPSBt
X29mZnNldCArIHNlY3Rpb25MZW5ndGg7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7Ci0g
ICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBpbiBtYWNybyBiZWxvdyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0jZGVmaW5lIFdBU01f
U0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pIFwKLSAgICAgICAgY2FzZSBTZWN0
aW9uczo6TkFNRTogeyBcCi0gICAgICAgICAgICBpZiAodmVyYm9zZSkgXAotICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiUGFyc2luZyAiIERFU0NSSVBUSU9OKTsgXAotICAgICAgICAgICAgaWYg
KCFwYXJzZSAjIyBOQU1FKCkpIHsgXAotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0g
ImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gIiAjTkFNRSAiOiAiIERFU0NSSVBUSU9OOyBcCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgICAg
IGJyZWFrOyBcCisjZGVmaW5lIFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJ
T04pICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT04oV0FTTV9T
RUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCi0gICAgICAgIGNhc2Ug
U2VjdGlvbnM6OlVua25vd246IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsKKyAgICAgICAg
Y2FzZSBTZWN0aW9uOjpVbmtub3duOiB7CiAgICAgICAgICAgICAvLyBJZ25vcmUgc2VjdGlvbidz
IG5hbWUgTEVCIGFuZCBieXRlczogdGhleSdyZSBhbHJlYWR5IGluY2x1ZGVkIGluIHNlY3Rpb25M
ZW5ndGguCiAgICAgICAgICAgICBtX29mZnNldCArPSBzZWN0aW9uTGVuZ3RoOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJGaW5pc2hlZCBwYXJzaW5nIHNlY3Rpb24uIik7Ci0KLSAg
ICAgICAgaWYgKGVuZCAhPSBtX29mZnNldCkgewotICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92
ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM5MTkKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gInBhcnNpbmcgZW5kZWQgYmVmb3Jl
IHRoZSBlbmQgb2YgdGhlIHNlY3Rpb24iOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZW5kICE9IG1fb2Zmc2V0LCAicGFy
c2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBzZWN0aW9uLCAiIHNlY3Rpb24iKTsKIAog
ICAgICAgICBwcmV2aW91c1NlY3Rpb24gPSBzZWN0aW9uOwogICAgIH0KIAotICAgIC8vIFRPRE8K
LSAgICBtX2ZhaWxlZCA9IGZhbHNlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXVEZN
b3ZlKG1fcmVzdWx0KTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpCithdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQz
Ml90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpCi0gICAgICAgIHx8IGNv
dW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQotICAgICAgICB8fCAh
bV9tb2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIiAgY291
bnQ6ICIsIGNvdW50KTsKKworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
LCAiVHlwZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVzLnRyeVJlc2VydmVDYXBh
Y2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rp
b24ncyAiLCBjb3VudCwgIiBlbnRyaWVzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewogICAgICAgICBpbnQ4X3QgdHlwZTsKLSAgICAgICAgaWYgKCFwYXJz
ZUludDcodHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBl
ICE9IEZ1bmMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIkdvdCBmdW5jdGlvbiB0eXBlLiIpOwotCiAgICAg
ICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7CiAgICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVu
dFR5cGVzOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpCi0gICAg
ICAgICAgICB8fCBhcmd1bWVudENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKQotICAgICAgICAgICAgfHwgIWFyZ3VtZW50VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGFyZ3VtZW50Q291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiICBhcmd1bWVudCBjb3VudDogIiwgYXJn
dW1lbnRDb3VudCk7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5
cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVuYywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlw
ZSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50
Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgaSwgInRoIGFyZ3VtZW50IGNvdW50IGlzIHRvbyBiaWcg
IiwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3VtZW50
VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoICIsIGFyZ3VtZW50Q291
bnQsICIgYXJndW1lbnRzIik7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFy
Z3VtZW50Q291bnQ7ICsraSkgewogICAgICAgICAgICAgVHlwZSBhcmd1bWVudFR5cGU7Ci0gICAg
ICAgICAgICBpZiAoIXBhcnNlUmVzdWx0VHlwZShhcmd1bWVudFR5cGUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
UmVzdWx0VHlwZShhcmd1bWVudFR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBhcmd1bWVudCBU
eXBlIik7CiAgICAgICAgICAgICBhcmd1bWVudFR5cGVzLnVuY2hlY2tlZEFwcGVuZChhcmd1bWVu
dFR5cGUpOwogICAgICAgICB9CiAKICAgICAgICAgdWludDhfdCByZXR1cm5Db3VudDsKLSAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQxKHJldHVybkNvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXR1cm5D
b3VudCksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyByZXR1cm4gY291bnQiKTsKICAgICAg
ICAgVHlwZSByZXR1cm5UeXBlOwogCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZ0xuKHJldHVybkNvdW50KTsKLQogICAgICAgICBpZiAocmV0dXJuQ291bnQpIHsKICAg
ICAgICAgICAgIFR5cGUgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZh
bHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZSh2YWx1ZSksICJjYW4ndCBnZXQgIiwgaSwgInRo
IFR5cGUncyByZXR1cm4gdmFsdWUiKTsKICAgICAgICAgICAgIHJldHVyblR5cGUgPSBzdGF0aWNf
Y2FzdDxUeXBlPih2YWx1ZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFR5cGU6OlZvaWQ7CiAKLSAgICAgICAgbV9tb2R1bGUtPnNpZ25hdHVyZXMudW5jaGVja2Vk
QXBwZW5kKHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9KTsKKyAgICAgICAg
bV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZCh7IHJldHVyblR5cGUs
IFdURk1vdmUoYXJndW1lbnRUeXBlcykgfSk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCithdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWlu
dDMyX3QgaW1wb3J0Q291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbXBvcnRDb3VudCkK
LSAgICAgICAgfHwgaW1wb3J0Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+Z2xvYmFscy50cnlSZXNlcnZlQ2FwYWNpdHko
aW1wb3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhl
IEZJWE1FcyBiZWxvdy4KLSAgICAgICAgfHwgIW1fbW9kdWxlLT5pbXBvcnRzLnRyeVJlc2VydmVD
YXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgICAgICB8fCAhbV9tb2R1bGUtPmltcG9ydEZ1bmN0
aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1h
bGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KLSAgICAgICAgfHwgIW1fZnVu
Y3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkpIC8vIEZJWE1F
IHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4gV2UnbGwg
YWxsb2NhdGUgc29tZSBtb3JlIGhlcmUgd2hlbiB3ZSBrbm93IGhvdyBtYW55IGZ1bmN0aW9ucyB0
byBleHBlY3QuCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihpbXBvcnRDb3VudCksICJjYW4ndCBnZXQgSW1wb3J0IHNlY3Rpb24n
cyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW1wb3J0Q291bnQgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiSW1wb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGltcG9ydENvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jl
c3VsdC5tb2R1bGUtPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMi
KTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJl
bG93LgorICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0cy50
cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXIt
YWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGlt
cG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbnMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9j
YXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0
Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQs
ICIgZnVuY3Rpb25zIGluIHRoZSBpbmRleCBzcGFjZSIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxs
b2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuIFdlJ2xsIGFsbG9jYXRlIHNvbWUg
bW9yZSBoZXJlIHdoZW4gd2Uga25vdyBob3cgbWFueSBmdW5jdGlvbnMgdG8gZXhwZWN0LgogCiAg
ICAgZm9yICh1aW50MzJfdCBpbXBvcnROdW1iZXIgPSAwOyBpbXBvcnROdW1iZXIgPCBpbXBvcnRD
b3VudDsgKytpbXBvcnROdW1iZXIpIHsKICAgICAgICAgSW1wb3J0IGltcDsKQEAgLTIyOSwxNzkg
KzE1MCwxNjAgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkKICAgICAgICAgdWlu
dDMyX3QgZmllbGRMZW47CiAgICAgICAgIFN0cmluZyBtb2R1bGVTdHJpbmc7CiAgICAgICAgIFN0
cmluZyBmaWVsZFN0cmluZzsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4p
Ci0gICAgICAgICAgICB8fCAhY29uc3VtZVVURjhTdHJpbmcobW9kdWxlU3RyaW5nLCBtb2R1bGVM
ZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVt
YmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwg
ImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBs
ZW5ndGggIiwgbW9kdWxlTGVuKTsKICAgICAgICAgaW1wLm1vZHVsZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcobV92bSwgbW9kdWxlU3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQz
MihmaWVsZExlbikKLSAgICAgICAgICAgIHx8ICFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmlu
ZywgZmllbGRMZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBp
bXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCBpbiBtb2R1bGUgJyIs
IG1vZHVsZVN0cmluZywgIiciKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3Vt
ZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4sICIg
aW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CiAgICAgICAgIGltcC5maWVsZCA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOwotICAgICAgICBpZiAoIXBh
cnNlRXh0ZXJuYWxLaW5kKGltcC5raW5kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChpbXAua2luZCks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3Mga2luZCBpbiBtb2R1bGUg
JyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAg
ICBzd2l0Y2ggKGltcC5raW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWw6OkZ1bmN0aW9uOiB7
CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewogICAgICAgICAgICAgdWlu
dDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYXJV
SW50MzIoZnVuY3Rpb25TaWduYXR1cmVJbmRleCkKLSAgICAgICAgICAgICAgICB8fCBmdW5jdGlv
blNpZ25hdHVyZUluZGV4ID49IG1fbW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpbXAua2luZEluZGV4ID0gbV9tb2R1
bGUtPmltcG9ydEZ1bmN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICBTaWduYXR1cmUqIHNpZ25h
dHVyZSA9ICZtX21vZHVsZS0+c2lnbmF0dXJlc1tmdW5jdGlvblNpZ25hdHVyZUluZGV4XTsKLSAg
ICAgICAgICAgIG1fbW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHNpZ25h
dHVyZSk7Ci0gICAgICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNrZWRBcHBlbmQo
c2lnbmF0dXJlKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwg
InRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmlu
ZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+c2ln
bmF0dXJlcy5zaXplKCksICJpbnZhbGlkIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0LCAiLCBmdW5jdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBv
ZiByYW5nZSBvZiAiLCBtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1v
ZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBpbXAua2luZEluZGV4ID0gbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRGdW5jdGlv
bnMuc2l6ZSgpOworICAgICAgICAgICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSAmbV9yZXN1bHQu
bW9kdWxlLT5zaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdOworICAgICAgICAgICAg
bV9yZXN1bHQubW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVy
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2UudW5jaGVja2VkQXBw
ZW5kKHNpZ25hdHVyZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIEV4dGVybmFsOjpUYWJsZTogeworICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6
IHsKICAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKCFw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlVGFibGVIZWxwZXIoaXNJ
bXBvcnQpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQuZ2V0VW5leHBlY3RlZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7CisgICAgICAgIGNhc2Ug
RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKICAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVl
OwotICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQg
PSBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
IXJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsOjpH
bG9iYWw6IHsKKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewogICAgICAgICAg
ICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIGlmICghcGFyc2VHbG9iYWxUeXBlKGdsb2Jh
bCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSk7CisgICAgICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbC5tdXRhYmlsaXR5ID09IEdsb2JhbDo6TXV0YWJsZSwg
Ik11dGFibGUgR2xvYmFscyBhcmVuJ3Qgc3VwcG9ydGVkIik7CiAKLSAgICAgICAgICAgIGlmIChn
bG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpbXAua2luZEluZGV4ID0gbV9tb2R1bGUtPmdsb2Jh
bHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9tb2R1bGUtPmdsb2JhbHMudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUoZ2xvYmFsKSk7CisgICAgICAgICAgICBpbXAua2luZEluZGV4ID0gbV9yZXN1bHQu
bW9kdWxlLT5nbG9iYWxzLnNpemUoKTsKKyAgICAgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+Z2xv
YmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBtX21vZHVsZS0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoaW1wKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnVuY2hl
Y2tlZEFwcGVuZChpbXApOwogICAgIH0KIAotICAgIG1fbW9kdWxlLT5maXJzdEludGVybmFsR2xv
YmFsID0gbV9tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpOwotICAgIHJldHVybiB0cnVlOworICAgIG1f
cmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCA9IG1fcmVzdWx0Lm1vZHVsZS0+Z2xv
YmFscy5zaXplKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb24oKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3QgY291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQz
Mihjb3VudCkKLSAgICAgICAgfHwgY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KQotICAgICAgICB8fCAhbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnkudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KQotICAgICAgICB8fCAhbV9mdW5j
dGlvbkluZGV4U3BhY2UudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fZnVuY3Rpb25JbmRleFNwYWNlLnNp
emUoKSArIGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBGdW5jdGlvbiBzZWN0aW9u
J3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyBjb3VudCBpcyB0
b28gYmlnICIsIGNvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1
bGUtPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBz
aWduYXR1cmVzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQuZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS50cnlSZXNl
cnZlQ2FwYWNpdHkobV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSArIGNvdW50KSwg
ImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiIG1vcmUgZnVuY3Rp
b25zIGluIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSIpOwogCiAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKQotICAgICAgICAgICAgfHwgdHlw
ZU51bWJlciA+PSBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHR5
cGVOdW1iZXIpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBGdW5jdGlvbidzIHR5cGUgbnVtYmVyIik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+PSBtX3Jlc3VsdC5tb2R1
bGUtPnNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52
YWxpZCAiLCB0eXBlTnVtYmVyKTsKIAotICAgICAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9ICZt
X21vZHVsZS0+c2lnbmF0dXJlc1t0eXBlTnVtYmVyXTsKKyAgICAgICAgU2lnbmF0dXJlKiBzaWdu
YXR1cmUgPSAmbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVzW3R5cGVOdW1iZXJdOwogICAgICAg
ICAvLyBUaGUgQ29kZSBzZWN0aW9uIGZpeGVzIHVwIHN0YXJ0IGFuZCBlbmQuCiAgICAgICAgIHNp
emVfdCBzdGFydCA9IDA7CiAgICAgICAgIHNpemVfdCBlbmQgPSAwOwotICAgICAgICBtX21vZHVs
ZS0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7
Ci0gICAgICAgIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnVuY2hlY2tlZEFwcGVuZCh7IHN0
YXJ0LCBlbmQgfSk7Ci0gICAgICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlLnVuY2hlY2tlZEFwcGVu
ZChzaWduYXR1cmUpOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmludGVybmFsRnVuY3Rpb25T
aWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOworICAgICAgICBtX3Jlc3VsdC5m
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsK
KyAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnVuY2hlY2tlZEFwcGVuZChzaWdu
YXR1cmUpOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
LWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlh
bCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0pCithdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+JiBtYXhpbXVtKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKCFtYXhpbXVt
KTsKIAogICAgIHVpbnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbml0aWFs
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDEoZmxhZ3MpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBmbGFncyIpOwor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluaXRpYWwpLCAiY2FuJ3Qg
cGFyc2UgcmVzaXphYmxlIGxpbWl0cyBpbml0aWFsIHBhZ2UgY291bnQiKTsKIAogICAgIGlmIChm
bGFncykgewogICAgICAgICB1aW50MzJfdCBtYXhpbXVtSW50OwotICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKG1heGltdW1JbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGlmIChpbml0aWFsID4gbWF4aW11bUludCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtSW50
KSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgbWF4aW11bSBwYWdlIGNvdW50Iik7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdGlhbCA+IG1heGltdW1JbnQsICJyZXNpemFi
bGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIHdoaWNo
IGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAiLCBtYXhpbXVtSW50KTsKICAgICAgICAgbWF4
aW11bSA9IG1heGltdW1JbnQ7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0lt
cG9ydCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICAvLyBXZSdyZSBvbmx5IGFsbG93ZWQgYSB0b3RhbCBv
ZiBvbmUgVGFibGUgaW1wb3J0IG9yIGRlZmluaXRpb24uCi0gICAgaWYgKG1faGFzVGFibGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faGFzVGFibGUs
ICJUYWJsZSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgdGFibGUiKTsK
IAogICAgIG1faGFzVGFibGUgPSB0cnVlOwogCiAgICAgaW50OF90IHR5cGU7Ci0gICAgaWYgKCFw
YXJzZUludDcodHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodHlwZSAhPSBX
YXNtOjpBbnlmdW5jKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgcGFyc2UgVGFibGUgdHlwZSIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYodHlwZSAhPSBXYXNtOjpBbnlmdW5jLCAiVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290ICIsIHR5cGUpOwogCiAgICAgdWludDMyX3QgaW5pdGlhbDsKICAg
ICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOwotICAgIGlmICghcGFyc2VSZXNpemFi
bGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghSlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVM
aW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7CisgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQorICAg
ICAgICByZXR1cm4gbGltaXRzLmdldFVuZXhwZWN0ZWQoKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwpLCAiVGFibGUncyBp
bml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CiAKICAgICBB
U1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CiAKLSAgICBtX21vZHVsZS0+
dGFibGVJbmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJ
bXBvcnQpOworICAgIG1fcmVzdWx0Lm1vZHVsZS0+dGFibGVJbmZvcm1hdGlvbiA9IFRhYmxlSW5m
b3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOwogCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKQor
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAg
dWludDMyX3QgY291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIG9ubHkgYWxsb3cgb25lIHRhYmxlIGZvciBub3cu
Ci0gICAgaWYgKGNvdW50ICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgVGFibGUncyBj
b3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gMSwgIlRhYmxlIGNvdW50
IG9mICIsIGNvdW50LCAiIGlzIGludmFsaWQsIG9ubHkgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
IAogICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VUYWJsZUhlbHBl
cihpc0ltcG9ydCk7CisgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQuZ2V0VW5leHBlY3RlZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpCithdXRvIE1vZHVsZVBh
cnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAog
ewotICAgIC8vIFdlIGRvbid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBp
bXBvcnQgb3IgZGVmaW5pdGlvbi4KLSAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9yZXN1bHQubW9kdWxlLT5t
ZW1vcnksICJNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1l
bW9yeSIpOwogCiAgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CiAgICAgUGFnZUNvdW50
IG1heGltdW1QYWdlQ291bnQ7CiAgICAgewogICAgICAgICB1aW50MzJfdCBpbml0aWFsOwogICAg
ICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOwotICAgICAgICBpZiAoIXBhcnNl
UmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRz
KGluaXRpYWwsIG1heGltdW0pOworICAgICAgICBpZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAg
ICAgICAgICByZXR1cm4gbGltaXRzLmdldFVuZXhwZWN0ZWQoKTsKICAgICAgICAgQVNTRVJUKCFt
YXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwotICAgICAgICBpZiAoIVBhZ2VDb3VudDo6
aXNWYWxpZChpbml0aWFsKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3Mg
aW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwogCiAgICAg
ICAgIGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7CiAKICAgICAgICAgaWYg
KG1heGltdW0pIHsKLSAgICAgICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKCptYXhpbXVt
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5J3MgbWF4aW11
bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKICAgICAgICAgICAg
IG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOwogICAgICAgICB9CiAgICAg
fQpAQCAtNDA5LDQzICszMTEsMzYgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVs
cGVyKGJvb2wgaXNJbXBvcnQpCiAgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGlt
dW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+
IHBpbm5lZFNpemVzID0geyAwIH07Ci0gICAgbV9tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9y
bWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIHBpbm5lZFNpemVzLCBp
c0ltcG9ydCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV9yZXN1bHQubW9kdWxlLT5tZW1vcnkg
PSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBw
aW5uZWRTaXplcywgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZU1lbW9yeSgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDhfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFy
VUludDEoY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7CiAKICAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIFdlIG9ubHkgYWxsb3cgb25lIG1lbW9yeSBmb3Igbm93
LgotICAgIGlmIChjb3VudCAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUgdGhhbiBv
bmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBvciBvbmUi
KTsKIAogICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKICAgICByZXR1cm4gcGFyc2VNZW1vcnlI
ZWxwZXIoaXNJbXBvcnQpOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKQor
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IHVpbnQzMl90IGdsb2JhbENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX21vZHVsZS0+Z2xvYmFscy50
cnlSZXNlcnZlQ2FwYWNpdHkoZ2xvYmFsQ291bnQgKyBtX21vZHVsZS0+Zmlyc3RJbnRlcm5hbEds
b2JhbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihnbG9iYWxDb3VudCksICJjYW4ndCBnZXQgR2xvYmFsIHNlY3Rpb24ncyBj
b3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFs
cy50cnlSZXNlcnZlQ2FwYWNpdHkoZ2xvYmFsQ291bnQgKyBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0
SW50ZXJuYWxHbG9iYWwpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBnbG9iYWxDb3Vu
dCArIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgIiBnbG9iYWxzIik7CiAK
ICAgICBmb3IgKHVpbnQzMl90IGdsb2JhbEluZGV4ID0gMDsgZ2xvYmFsSW5kZXggPCBnbG9iYWxD
b3VudDsgKytnbG9iYWxJbmRleCkgewogICAgICAgICBHbG9iYWwgZ2xvYmFsOwotICAgICAgICBp
ZiAoIXBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLSAgICAgICAgaWYgKCFwYXJzZUluaXRFeHBy
KGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVt
YmVyKSk7CiAKICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2JhbDo6RnJv
bUV4cHJlc3Npb247CiAgICAgICAgIFR5cGUgdHlwZUZvckluaXRPcGNvZGU7CkBAIC00NjMsMTI0
ICszNTgsMTAzIEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpCiAgICAgICAgICAg
ICB0eXBlRm9ySW5pdE9wY29kZSA9IEY2NDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEdldEdsb2JhbDoKLSAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlciA+PSBtX21vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IG1fbW9kdWxl
LT5nbG9iYWxzW2dsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyXS50eXBlOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJl
ciA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsIGdsb2JhbEluZGV4LCAi
dGggR2xvYmFsIHVzZXMgZ2V0X2dsb2JhbCAiLCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51
bWJlciwgIiB3aGljaCBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9yZXN1
bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsKTsKKyAgICAgICAgICAgIHR5cGVGb3JJbml0
T3Bjb2RlID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2dsb2JhbC5pbml0aWFsQml0c09ySW1w
b3J0TnVtYmVyXS50eXBlOwogICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9
IEdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICh0eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBl
Rm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9m
IHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBl
ICIsIGdsb2JhbC50eXBlKTsKIAotICAgICAgICBtX21vZHVsZS0+Z2xvYmFscy51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgIH0KIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9y
dCgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CiAgICAgdWludDMyX3QgZXhwb3J0Q291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihleHBv
cnRDb3VudCkKLSAgICAgICAgfHwgZXhwb3J0Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+ZXhwb3J0cy50cnlSZXNlcnZl
Q2FwYWNpdHkoZXhwb3J0Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpLCAiY2FuJ3QgZ2V0IEV4
cG9ydCBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cG9ydENv
dW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkV4cG9ydCBzZWN0
aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBleHBvcnRDb3VudCk7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBv
cnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRDb3Vu
dCwgIiBleHBvcnRzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewogICAgICAgICBFeHBv
cnQgZXhwOwogICAgICAgICB1aW50MzJfdCBmaWVsZExlbjsKICAgICAgICAgU3RyaW5nIGZpZWxk
U3RyaW5nOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKQotICAgICAgICAg
ICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbikpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcobV92bSwgZmllbGRTdHJpbmcpOwogCi0gICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtp
bmQoZXhwLmtpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICgh
cGFyc2VWYXJVSW50MzIoZXhwLmtpbmRJbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwg
ImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1lIGxlbmd0
aCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVs
ZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9y
dCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVuKTsKKyAgICAgICAgZXhwLmZpZWxk
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBmaWVsZFN0cmluZyk7CiAKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoZXhwLmtpbmQpLCAiY2FuJ3Qg
Z2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQsIG5hbWVkICciLCBmaWVsZFN0
cmluZywgIiciKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
ZXhwLmtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBzd2l0Y2gg
KGV4cC5raW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWw6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBpZiAoZXhwLmtpbmRJbmRleCA+PSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
RnVuY3Rpb246IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwLmtpbmRJbmRl
eCA+PSBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0
aCBFeHBvcnQgaGFzIGludmFsaWQgZnVuY3Rpb24gbnVtYmVyICIsIGV4cC5raW5kSW5kZXgsICIg
aXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9yZXN1bHQuZnVuY3Rpb25J
bmRleFNwYWNlLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6VGFibGU6IHsK
KyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CiAgICAgICAgICAgICAvLyBGSVhN
RSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7CisgICAgICAgIGNhc2Ug
RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NjcxCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICBpZiAoZXhwLmtpbmRJ
bmRleCA+PSBtX21vZHVsZS0+Z2xvYmFscy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9tb2R1bGUtPmdsb2JhbHNbZXhwLmtpbmRJbmRl
eF0ubXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKKyAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwLmtpbmRJbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUt
Pmdsb2JhbHMuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZ2xv
YmFsIG51bWJlciAiLCBleHAua2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291
bnQgIiwgbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5t
b2R1bGUtPmdsb2JhbHNbZXhwLmtpbmRJbmRleF0ubXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0
YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIs
IGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIG1fbW9kdWxlLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZChleHApOwor
ICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKGV4cCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlU3RhcnQoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlU3RhcnQoKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3Qgc3RhcnRGdW5jdGlvbkluZGV4OwotICAg
IGlmICghcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KQotICAgICAgICB8fCBzdGFy
dEZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtX2Z1bmN0aW9uSW5kZXhT
cGFjZVtzdGFydEZ1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZTsKLSAgICBpZiAoc2lnbmF0dXJlLT5h
cmd1bWVudHMuc2l6ZSgpICE9IDAKLSAgICAgICAgfHwgc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9
IFZvaWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vZHVsZS0+c3RhcnRGdW5jdGlv
bkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwg
ImNhbid0IGdldCBTdGFydCBpbmRleCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRG
dW5jdGlvbkluZGV4ID49IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCksICJTdGFy
dCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBz
cGFjZSAiLCBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKTsKKyAgICBTaWduYXR1
cmUqIHNpZ25hdHVyZSA9IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZVtzdGFydEZ1bmN0aW9u
SW5kZXhdLnNpZ25hdHVyZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS0+YXJn
dW1lbnRzLmlzRW1wdHkoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhhdmUgYXJndW1lbnRzIik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUtPnJldHVyblR5cGUgIT0gVm9pZCwg
IlN0YXJ0IGZ1bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9yZXN1bHQubW9k
dWxlLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkKK2F1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgaWYg
KCFtX2hhc1RhYmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9oYXNUYWJsZSwgIkVsZW1lbnQgc2VjdGlvbiBleHBlY3RzIGEgVGFibGUgdG8gYmUg
cHJlc2VudCIpOwogCiAgICAgdWludDMyX3QgZWxlbWVudENvdW50OwotICAgIGlmICghcGFyc2VW
YXJVSW50MzIoZWxlbWVudENvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
bV9tb2R1bGUtPmVsZW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVu
dENvdW50OyArK2kpIHsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihl
bGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBl
bGVtZW50Q291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+
ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5z
aWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVu
dE51bSkgewogICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OwotICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKHRhYmxlSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAvLyBXZSBvbmx5IHN1cHBvcnQgb25lIHRhYmxlIGZvciBub3cuCi0gICAgICAgIGlmICh0YWJs
ZUluZGV4ICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDY0
X3Qgb2Zmc2V0OwogICAgICAgICB1aW50OF90IGluaXRPcGNvZGU7Ci0gICAgICAgIGlmICghcGFy
c2VJbml0RXhwcihpbml0T3Bjb2RlLCBvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGlmIChpbml0T3Bjb2RlICE9IE9wVHlwZTo6STMyQ29uc3QpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3QgaW5kZXhDb3VudDsKLSAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleENvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBBU1NFUlQoISFtX21vZHVsZS0+dGFibGVJbmZvcm1hdGlvbik7Ci0g
ICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtID0gbV9tb2R1bGUtPnRh
YmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBFbGVtZW50IHRhYmxlIGluZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXRh
YmxlSW5kZXgsICJFbGVtZW50IHNlY3Rpb24gY2FuIG9ubHkgaGF2ZSBvbmUgVGFibGUgZm9yIG5v
dyIpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5p
dE9wY29kZSwgb2Zmc2V0KSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29k
ZSAhPSBPcFR5cGU6OkkzMkNvbnN0LCAiRWxlbWVudCBzZWN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBu
b24taTMyIGluaXRfZXhwciBvcGNvZGUgZm9yIG5vdywgZ290ICIsIGluaXRPcGNvZGUpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleENvdW50KSwgImNh
bid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgZm9yIEVsZW1lbnQgc2VjdGlv
biIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4Q291bnQgPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVu
dE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwgaW5kZXhDb3VudCk7CisKKyAgICAg
ICAgQVNTRVJUKCEhbV9yZXN1bHQubW9kdWxlLT50YWJsZUluZm9ybWF0aW9uKTsKKyAgICAgICAg
aWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0gPSBtX3Jlc3VsdC5tb2R1bGUtPnRh
YmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxk
IGluZGV4Q291bnQgYmVpbmcgemVybyBiZSBhIHZhbGlkYXRpb24gZXJyb3I/CiAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI2CiAgICAg
ICAgICAgICBpZiAoaW5kZXhDb3VudCkgewpAQCAtNTg4LDE4MyArNDYyLDE0NyBAQCBib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkKICAgICAgICAgICAgICAgICAvLyBTaG91bGQgdGhl
eSBiZSB0aG91Z2g/CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTgyNwogICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxhc3RXcml0
dGVuSW5kZXggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXhDb3VudCkgKyBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ob2Zmc2V0KSAtIDE7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RXcml0dGVu
SW5kZXggPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KCptYXhpbXVtKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
bGFzdFdyaXR0ZW5JbmRleCA+PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKm1heGltdW0pLCAiRWxl
bWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQgd3JpdGVzIHRvIGluZGV4
ICIsIGxhc3RXcml0dGVuSW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbWF4aW11bSAiLCAqbWF4
aW11bSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBFbGVtZW50IGVsZW1l
bnQ7Ci0gICAgICAgIGlmICghZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGluZGV4Q291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW5kZXhDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGluZGV4Q291bnQs
ICIgRWxlbWVudCBpbmRpY2VzIik7CiAKICAgICAgICAgZWxlbWVudC5vZmZzZXQgPSBvZmZzZXQ7
CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4Q291bnQ7ICsraSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENvdW50OyArK2lu
ZGV4KSB7CiAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4ID49IG1fZnVuY3Rpb25J
bmRleFNwYWNlLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSwg
ImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdz
ICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
ZnVuY3Rpb25JbmRleCA+PSBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpLCAiRWxl
bWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQncyAiLCBpbmRleCwgInRo
IGluZGV4IGlzICIsIGZ1bmN0aW9uSW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgZnVuY3Rpb24g
aW5kZXggc3BhY2Ugc2l6ZSBvZiAiLCBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgp
KTsKIAogICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tb2R1bGUtPmVsZW1lbnRz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICAgICAgbV9yZXN1bHQubW9k
dWxlLT5lbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJz
ZXI6OnBhcnNlQ29kZSgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIo
Y291bnQpCi0gICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKQotICAgICAgICB8fCBjb3VudCAhPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5z
aXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9yZXN1bHQuZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBjb3VudCwgIiBleGNl
ZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1fcmVzdWx0LmZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwotICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkKLSAgICAgICAgICAgIHx8IGZ1bmN0aW9u
U2l6ZSA+IGxlbmd0aCgpCi0gICAgICAgICAgICB8fCBmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAt
IG1fb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5W2ldLnN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOwotICAg
ICAgICBtX29mZnNldCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZDsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNh
bid0IGdldCAiLCBpLCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBz
aXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0
aCgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgo
KSAtIG1fb2Zmc2V0LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4
Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7
CisKKyAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLnN0YXJ0ID0g
bV9vZmZzZXQ7CisgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5l
bmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKKyAgICAgICAgbV9vZmZzZXQgPSBtX3Jlc3Vs
dC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kOwogICAgIH0KIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRF
eHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlcikKK2F1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJp
dHNPckltcG9ydE51bWJlcikgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGlmICghcGFyc2VVSW50
OChvcGNvZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidzIG9wY29kZSIpOwog
CiAgICAgc3dpdGNoIChvcGNvZGUpIHsKICAgICBjYXNlIEkzMkNvbnN0OiB7CiAgICAgICAgIGlu
dDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJJbnQzMihjb25zdGFudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0
X2V4cHIncyBpMzIuY29uc3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2FzZSBJNjRDb25zdDogewogICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBpZiAo
IXBhcnNlVmFySW50NjQoY29uc3RhbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0
IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7CiAgICAgICAg
IGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIEYzMkNvbnN0OiB7CiAgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAgICAg
ICBpZiAoIXBhcnNlVUludDMyKGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIoY29uc3RhbnQpLCAiY2Fu
J3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmMzIuY29uc3QiKTsKICAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgRjY0Q29uc3Q6IHsKICAgICAgICAgdWludDY0X3QgY29uc3RhbnQ7Ci0gICAg
ICAgIGlmICghcGFyc2VVSW50NjQoY29uc3RhbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOwogICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBHZXRHbG9iYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGlmIChpbmRleCA+PSBtX21vZHVsZS0+aW1wb3J0cy5zaXplKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbnN0IEltcG9ydCYgaW1wb3J0ID0gbV9t
b2R1bGUtPmltcG9ydHNbaW5kZXhdOwotICAgICAgICBpZiAobV9tb2R1bGUtPmltcG9ydHNbaW5k
ZXhdLmtpbmQgIT0gRXh0ZXJuYWw6Okdsb2JhbAotICAgICAgICAgICAgfHwgaW1wb3J0LmtpbmRJ
bmRleCA+PSBtX21vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5k
ZXgpLCAiY2FuJ3QgZ2V0IGdldF9nbG9iYWwncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0cy5zaXplKCksICJnZXRf
Z2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGltcG9ydHMg
IiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnNpemUoKSk7CisgICAgICAgIGNvbnN0IEltcG9y
dCYgaW1wb3J0ID0gbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHNbaW5kZXhdLmtpbmQgIT0g
RXh0ZXJuYWxLaW5kOjpHbG9iYWwsICJnZXRfZ2xvYmFsJ3MgaW1wb3J0IGtpbmQgaXMgIiwgbV9y
ZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kLCAiIHNob3VsZCBiZSBnbG9iYWwiKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnQua2luZEluZGV4ID49IG1fcmVzdWx0
Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5k
ZXggIiwgaW1wb3J0LmtpbmRJbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9i
YWwgIiwgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsKTsKIAotICAgICAgICBB
U1NFUlQobV9tb2R1bGUtPmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBH
bG9iYWw6OkltbXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5tb2R1bGUtPmdsb2Jh
bHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7CiAK
ICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihmYWxzZSwgInVua25vd24gaW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUp
OwogICAgIH0KIAogICAgIHVpbnQ4X3QgZW5kT3Bjb2RlOwotICAgIGlmICghcGFyc2VVSW50OChl
bmRPcGNvZGUpIHx8IGVuZE9wY29kZSAhPSBPcFR5cGU6OkVuZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNh
bid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVu
ZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZShHbG9iYWwm
IGdsb2JhbCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9i
YWwpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAgaWYg
KCFwYXJzZVZhbHVlVHlwZShnbG9iYWwudHlwZSkgfHwgIXBhcnNlVmFyVUludDEobXV0YWJpbGl0
eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhbHVlVHlwZShnbG9iYWwudHlwZSksICJjYW4ndCBnZXQgR2xvYmFsJ3MgdmFsdWUgdHlwZSIp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEobXV0YWJpbGl0eSksICJj
YW4ndCBnZXQgR2xvYmFsIHR5cGUncyBtdXRhYmlsaXR5Iik7CiAgICAgZ2xvYmFsLm11dGFiaWxp
dHkgPSBzdGF0aWNfY2FzdDxHbG9iYWw6Ok11dGFiaWxpdHk+KG11dGFiaWxpdHkpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZURhdGEoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihz
ZWdtZW50Q291bnQpCi0gICAgICAgIHx8IHNlZ21lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwgIW1fbW9kdWxlLT5kYXRhLnRyeVJlc2Vy
dmVDYXBhY2l0eShzZWdtZW50Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiICBzZWdtZW50czogIiwgc2VnbWVudENvdW50
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291bnQp
LCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihzZWdtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
LCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBzZWdtZW50Q291bnQpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+ZGF0YS50cnlSZXNlcnZlQ2Fw
YWNpdHkoc2VnbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERh
dGEgc2VjdGlvbidzICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOwogCiAgICAgZm9yICh1
aW50MzJfdCBzZWdtZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsg
KytzZWdtZW50TnVtYmVyKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZ0xuKCIgIHNlZ21lbnQgIyIsIHNlZ21lbnROdW1iZXIpOwogICAgICAgICB1aW50MzJfdCBp
bmRleDsKICAgICAgICAgdWludDY0X3Qgb2Zmc2V0OwogICAgICAgICB1aW50OF90IGluaXRPcGNv
ZGU7CiAgICAgICAgIHVpbnQzMl90IGRhdGFCeXRlTGVuZ3RoOwotICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGluZGV4KQotICAgICAgICAgICAgfHwgaW5kZXgpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNl
dCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGluaXRPcGNvZGUg
IT0gT3BUeXBlOjpJMzJDb25zdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiICAgIG9mZnNldDogIiwgb2Zm
c2V0KTsKIAotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKQotICAg
ICAgICAgICAgfHwgZGF0YUJ5dGVMZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiICAgIGRhdGEgYnl0ZXM6ICIsIGRhdGFCeXRlTGVu
Z3RoKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgp
LCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpbmRleCIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4LCBzZWdtZW50TnVtYmVyLCAidGgg
RGF0YSBzZWdtZW50IGhhcyBub24temVybyBpbmRleCAiLCBpbmRleCk7CisgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBvZmZzZXQpKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0T3Bjb2RlICE9IE9wVHlwZTo6STMyQ29u
c3QsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgaGFzIG9wY29kZSAiLCBpbml0T3Bj
b2RlLCAiIGV4cGVjdGVkIGkzMi5jb25zdCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihkYXRhQnl0ZUxlbmd0aCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51
bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBsZW5ndGgiKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihkYXRhQnl0ZUxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5
dGUgbGVuZ3RoIGlzIHRvbyBiaWcgIiwgZGF0YUJ5dGVMZW5ndGgpOwogCiAgICAgICAgIFNlZ21l
bnQqIHNlZ21lbnQgPSBTZWdtZW50OjptYWtlKG9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpOwotICAg
ICAgICBpZiAoIXNlZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1f
bW9kdWxlLT5kYXRhLnVuY2hlY2tlZEFwcGVuZChTZWdtZW50OjptYWtlUHRyKHNlZ21lbnQpKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+ZGF0YS51bmNo
ZWNrZWRBcHBlbmQoU2VnbWVudDo6bWFrZVB0cihzZWdtZW50KSk7CiAgICAgICAgIGZvciAodWlu
dDMyX3QgZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRl
KSB7CiAgICAgICAgICAgICB1aW50OF90IGJ5dGU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVUlu
dDgoYnl0ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0
ZSwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQi
KTsKICAgICAgICAgICAgIHNlZ21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiICAgIFsiLCBkYXRh
Qnl0ZSwgIl0gPSAiLCBzZWdtZW50LT5ieXRlKGRhdGFCeXRlKSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAppbmRleCBiNzE4NzQzLi42YTI0MzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC0zNCw3ICszNCwxMyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMgUGFy
c2VyIHsKK3N0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
b2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlOworICAgIEZ1bmN0aW9uSW5kZXhTcGFjZSBmdW5jdGlv
bkluZGV4U3BhY2U7CisgICAgVmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeT4gZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5OworfTsKKworY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBh
cnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAogICAgIE1vZHVsZVBhcnNlcihW
TSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
QEAgLTQ3LDUxICs1MywyMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7
Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1hdGlvbigpCi0gICAgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9tb2R1bGU7
Ci0gICAgfQotCi0gICAgRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UoKQot
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJu
IG1fZnVuY3Rpb25JbmRleFNwYWNlOwotICAgIH0KLQotICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk+JiBmdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkoKQotICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5OwotICAgIH0KKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
KCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CiAKLSNk
ZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKE5BTUUsIElELCBERVNDUklQVElPTikg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMgTkFNRSgpOworI2RlZmluZSBXQVNNX1NF
Q1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7CiAgICAgRk9SX0VBQ0hfV0FTTV9T
RUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUikKICN1bmRlZiBXQVNNX1NFQ1RJT05f
REVDTEFSRV9QQVJTRVIKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5
SGVscGVyKGJvb2wgaXNJbXBvcnQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
VGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
cGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+JiBtYXhpbXVtKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRF
eHByKHVpbnQ4X3QmLCB1aW50NjRfdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlR2xvYmFsVHlwZShHbG9iYWwmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBv
cnQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzaXphYmxl
TGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11
bSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1
aW50OF90JiwgdWludDY0X3QmKTsKIAogICAgIFZNKiBtX3ZtOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7Ci0gICAgRnVuY3Rpb25JbmRleFNwYWNlIG1f
ZnVuY3Rpb25JbmRleFNwYWNlOwotICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwotICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07
CisgICAgTW9kdWxlUGFyc2VyUmVzdWx0IG1fcmVzdWx0OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7
IGZhbHNlIH07Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAppbmRl
eCAwOGZhYmJmLi5kNmFlOGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNl
ci5oCkBAIC0zMiwxMyArMzIsMjkgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVk
ZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgorI2luY2x1ZGUgPHR5cGVf
dHJhaXRzPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9MRUJEZWNv
ZGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCituYW1l
c3BhY2UgRmFpbHVyZUhlbHBlciB7CisvLyBGSVhNRSBXZSBzaG91bGQgbW92ZSB0aGlzIHRvIG1h
a2VTdHJpbmcuIEl0J3MgaW4gaXRzIG93biBuYW1lc3BhY2UgdG8gZW5hYmxlIEMrKyBBcmd1bWVu
dCBEZXBlbmRlbnQgTG9va3VwIMOgIGxhIHN0ZDo6c3dhcDogdXNlciBjb2RlIGNhbiBkZWJsYXJl
IGl0cyBvd24gImJveEZhaWx1cmUiIGFuZCB0aGUgZmFpbCgpIGhlbHBlciB3aWxsIGZpbmQgaXQu
CitzdGF0aWMgaW5saW5lIGF1dG8gbWFrZVN0cmluZyhjb25zdCBjaGFyICpmYWlsdXJlKSB7IHJl
dHVybiBBU0NJSUxpdGVyYWwoZmFpbHVyZSk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnQsIHR5
cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxJbnQ+Ojp2
YWx1ZT46OnR5cGU+CitzdGF0aWMgaW5saW5lIGF1dG8gbWFrZVN0cmluZyhJbnQgZmFpbHVyZSkg
eyByZXR1cm4gU3RyaW5nOjpudW1iZXIoZmFpbHVyZSk7IH0KK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgU3VjY2Vzc1R5cGU+CiBjbGFzcyBQYXJzZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgU3Ry
aW5nIEVycm9yVHlwZTsKKyAgICB0eXBlZGVmIFVuZXhwZWN0ZWRUeXBlPEVycm9yVHlwZT4gVW5l
eHBlY3RlZFJlc3VsdDsKKyAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFy
dGlhbFJlc3VsdDsKKyAgICB0eXBlZGVmIEV4cGVjdGVkPFN1Y2Nlc3NUeXBlLCBFcnJvclR5cGU+
IFJlc3VsdDsKKwogcHJvdGVjdGVkOgogICAgIFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90
KTsKIApAQCAtNjAsMjUgKzc2LDQ0IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlUmVzdWx0VHlwZShUeXBlJik7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gcGFyc2VWYWx1ZVR5cGUoVHlwZSYpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVybmFsOjpLaW5kJik7CisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWxLaW5kJik7CiAKICAgICBjb25zdCB1
aW50OF90KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIHNpemVfdCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUxlbmd0aDsgfQogCiAgICAgc2l6ZV90IG1f
b2Zmc2V0ID0gMDsKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVS
X0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4g
YXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVy
OyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNwYWNlIGFib3ZlLgorICAgICAgICByZXR1cm4g
VW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiKSwgU3RyaW5nOjpudW1iZXIobV9vZmZzZXQpLCBB
U0NJSUxpdGVyYWwoIiAvICIpLCBTdHJpbmc6Om51bWJlcihtX3NvdXJjZUxlbmd0aCksIEFTQ0lJ
TGl0ZXJhbCgiOiAiKSwgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKyNkZWZpbmUgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgaWYgKFVOTElLRUxZ
KGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gZmFpbChf
X1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5l
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoaGVscGVyKSBkbyB7ICAgXAorICAgICAgICBhdXRv
IGhlbHBlclJlc3VsdCA9IGhlbHBlcjsgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFVOTElL
RUxZKCFoZWxwZXJSZXN1bHQpKSAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gaGVs
cGVyUmVzdWx0LmdldFVuZXhwZWN0ZWQoKTsgXAorICAgIH0gd2hpbGUgKDApCisKIHByaXZhdGU6
CiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgc2l6ZV90IG1fc291cmNlTGVuZ3Ro
OwogfTsKIAotQUxXQVlTX0lOTElORSBQYXJzZXI6OlBhcnNlcihjb25zdCB1aW50OF90KiBzb3Vy
Y2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNz
VHlwZT4KK0FMV0FZU19JTkxJTkUgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6UGFyc2VyKGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICA6IG1fc291cmNl
KHNvdXJjZUJ1ZmZlcikKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKIHsKIH0K
IAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZUNoYXJhY3RlcihjaGFyIGMpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8
U3VjY2Vzc1R5cGU+Ojpjb25zdW1lQ2hhcmFjdGVyKGNoYXIgYykKIHsKICAgICBpZiAobV9vZmZz
ZXQgPj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg5LDcgKzEyNCw4IEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIoY2hhciBjKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVN0
cmluZyhjb25zdCBjaGFyKiBzdHIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FM
V0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+Ojpjb25zdW1lU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cikKIHsKICAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0OwogICAgIGlmICht
X29mZnNldCA+PSBsZW5ndGgoKSkKQEAgLTEwMyw3ICsxMzksOCBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVVURjhTdHJpbmcoU3Ry
aW5nJiByZXN1bHQsIHNpemVfdCBzdHJpbmdMZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNj
ZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+Ojpjb25zdW1l
VVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdCwgc2l6ZV90IHN0cmluZ0xlbmd0aCkKIHsKICAgICBp
ZiAoc3RyaW5nTGVuZ3RoID09IDApIHsKICAgICAgICAgcmVzdWx0ID0gZW1wdHlTdHJpbmcoKTsK
QEAgLTExOCwyNyArMTU1LDMyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVV
VEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0LCBzaXplX3Qgc3RyaW5nTGVuZ3RoCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDMyKHVp
bnQzMl90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhclVJbnQzMih1aW50MzJfdCYg
cmVzdWx0KQogewogICAgIHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3Nv
dXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOwogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhclVJbnQ2NCh1aW50NjRfdCYgcmVzdWx0KQordGVtcGxh
dGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nl
c3NUeXBlPjo6cGFyc2VWYXJVSW50NjQodWludDY0X3QmIHJlc3VsdCkKIHsKICAgICByZXR1cm4g
V1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50NjQobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBt
X29mZnNldCwgcmVzdWx0KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VW
YXJJbnQzMihpbnQzMl90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4K
K0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhckludDMyKGlu
dDMyX3QmIHJlc3VsdCkKIHsKICAgICByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVJbnQz
MihtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOwogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhckludDY0KGludDY0X3QmIHJlc3VsdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxT
dWNjZXNzVHlwZT46OnBhcnNlVmFySW50NjQoaW50NjRfdCYgcmVzdWx0KQogewogICAgIHJldHVy
biBXVEY6OkxFQkRlY29kZXI6OmRlY29kZUludDY0KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwg
bV9vZmZzZXQsIHJlc3VsdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNl
VUludDMyKHVpbnQzMl90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4K
K0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVVJbnQzMih1aW50
MzJfdCYgcmVzdWx0KQogewogICAgIGlmIChsZW5ndGgoKSA8IDQgfHwgbV9vZmZzZXQgPiBsZW5n
dGgoKSAtIDQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0Nyw3ICsxODksOCBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogICAg
IHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ2
NCh1aW50NjRfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdB
WVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VVSW50NjQodWludDY0X3Qm
IHJlc3VsdCkKIHsKICAgICBpZiAobGVuZ3RoKCkgPCA4IHx8IG1fb2Zmc2V0ID4gbGVuZ3RoKCkg
LSA4KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTYsNyArMTk5LDggQEAgQUxXQVlTX0lO
TElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50NjQodWludDY0X3QmIHJlc3VsdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50OCh1aW50
OF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVVJbnQ4KHVpbnQ4X3QmIHJlc3VsdCkK
IHsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE2NCw3ICsyMDgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ4
KHVpbnQ4X3QmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBi
b29sIFBhcnNlcjo6cGFyc2VJbnQ3KGludDhfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUg
U3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFy
c2VJbnQ3KGludDhfdCYgcmVzdWx0KQogewogICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTczLDcgKzIxOCw4IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI6OnBhcnNlSW50NyhpbnQ4X3QmIHJlc3VsdCkKICAgICByZXR1cm4gKHYgJiAw
eDgwKSA9PSAwOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ3KHVp
bnQ4X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lO
TElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVUludDcodWludDhfdCYgcmVzdWx0
KQogewogICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTgxLDcgKzIyNyw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUlu
dDcodWludDhfdCYgcmVzdWx0KQogICAgIHJldHVybiByZXN1bHQgPCAweDgwOwogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxT
dWNjZXNzVHlwZT46OnBhcnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0KQogewogICAgIHVpbnQz
Ml90IHRlbXA7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0ZW1wKSkKQEAgLTE5MCw3ICsyMzcs
OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJl
c3VsdCkKICAgICByZXR1cm4gdGVtcCA8PSAxOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFy
c2VyOjpwYXJzZVJlc3VsdFR5cGUoVHlwZSYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3Vj
Y2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VS
ZXN1bHRUeXBlKFR5cGUmIHJlc3VsdCkKIHsKICAgICBpbnQ4X3QgdmFsdWU7CiAgICAgaWYgKCFw
YXJzZUludDcodmFsdWUpKQpAQCAtMjAxLDE5ICsyNDksMjEgQEAgQUxXQVlTX0lOTElORSBib29s
IFBhcnNlcjo6cGFyc2VSZXN1bHRUeXBlKFR5cGUmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUoVHlwZSYgcmVz
dWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wg
UGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYWx1ZVR5cGUoVHlwZSYgcmVzdWx0KQogewogICAg
IHJldHVybiBwYXJzZVJlc3VsdFR5cGUocmVzdWx0KSAmJiBpc1ZhbHVlVHlwZShyZXN1bHQpOwog
fQotICAgIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VFeHRlcm5hbEtpbmQoRXh0
ZXJuYWw6OktpbmQmIHJlc3VsdCkKKwordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitB
TFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VFeHRlcm5hbEtpbmQo
RXh0ZXJuYWxLaW5kJiByZXN1bHQpCiB7CiAgICAgdWludDhfdCB2YWx1ZTsKICAgICBpZiAoIXBh
cnNlVUludDcodmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFFeHRlcm5h
bDo6aXNWYWxpZCh2YWx1ZSkpCisgICAgaWYgKCFpc1ZhbGlkRXh0ZXJuYWxLaW5kKHZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEV4dGVybmFs
OjpLaW5kPih2YWx1ZSk7CisgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8RXh0ZXJuYWxLaW5kPih2
YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcAppbmRleCA2ODMyOWU1Li4xYzBlMDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uY3BwCkBAIC02MCwyMyArNjAsMTggQEAgUGxhbjo6UGxhbihWTSogdm0s
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKIAogdm9pZCBQbGFu
OjpydW4oKQogewotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIlN0YXJ0aW5n
IHBsYW4uIik7CiAgICAgewogICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0s
IG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCk7Ci0gICAgICAgIGlmICghbW9kdWxlUGFyc2VyLnBh
cnNlKCkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkOiAiLCBtb2R1bGVQYXJzZXIuZXJyb3JNZXNzYWdl
KCkpOwotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtb2R1bGVQYXJzZXIuZXJyb3JNZXNz
YWdlKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBt
b2R1bGVQYXJzZXIucGFyc2UoKTsKKyAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgeworICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSBwYXJzZVJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAg
cmV0dXJuOyAvLyBGSVhNRSByZXR1cm4gYW4gRXhwZWN0ZWQuCiAgICAgICAgIH0KLSAgICAgICAg
bV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUobW9kdWxlUGFyc2VyLm1vZHVsZUluZm9ybWF0
aW9uKCkpOwotICAgICAgICBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSA9IFdURk1vdmUobW9k
dWxlUGFyc2VyLmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSgpKTsKLSAgICAgICAgbV9mdW5jdGlv
bkluZGV4U3BhY2Uuc2l6ZSA9IG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZGV4U3BhY2UoKS5zaXpl
KCk7Ci0gICAgICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlciA9IG1vZHVsZVBhcnNlci5m
dW5jdGlvbkluZGV4U3BhY2UoKS5yZWxlYXNlQnVmZmVyKCk7CisgICAgICAgIG1fbW9kdWxlSW5m
b3JtYXRpb24gPSBXVEZNb3ZlKHBhcnNlUmVzdWx0LT5tb2R1bGUpOworICAgICAgICBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeSA9IFdURk1vdmUocGFyc2VSZXN1bHQtPmZ1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeSk7CisgICAgICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUgPSBwYXJzZVJl
c3VsdC0+ZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkluZGV4
U3BhY2UuYnVmZmVyID0gcGFyc2VSZXN1bHQtPmZ1bmN0aW9uSW5kZXhTcGFjZS5yZWxlYXNlQnVm
ZmVyKCk7CiAgICAgfQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhcnNl
ZCBtb2R1bGUuIik7CiAKICAgICBhdXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0
byYgdmVjdG9yLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogd2hhdCkgewogICAgICAgICBpZiAo
VU5MSUtFTFkoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7CkBAIC05Nyw3ICs5
Miw3IEBAIHZvaWQgUGxhbjo6cnVuKCkKIAogICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXgg
PSAwOyBpbXBvcnRJbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydHMuc2l6ZSgpOyAr
K2ltcG9ydEluZGV4KSB7CiAgICAgICAgIEltcG9ydCogaW1wb3J0ID0gJm1fbW9kdWxlSW5mb3Jt
YXRpb24tPmltcG9ydHNbaW1wb3J0SW5kZXhdOwotICAgICAgICBpZiAoaW1wb3J0LT5raW5kICE9
IEV4dGVybmFsOjpGdW5jdGlvbikKKyAgICAgICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRlcm5h
bEtpbmQ6OkZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHVuc2lnbmVk
IGltcG9ydEZ1bmN0aW9uSW5kZXggPSBtX3dhc21Ub0pTU3R1YnMuc2l6ZSgpOwogICAgICAgICBp
ZiAodmVyYm9zZSkKQEAgLTExNywxOSArMTEyLDI0IEBAIHZvaWQgUGxhbjo6cnVuKCkKICAgICAg
ICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtVG9KU1N0dWJzLnNpemUoKSAr
IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZm
ZXIuZ2V0KClbZnVuY3Rpb25JbmRleFNwYWNlXS5zaWduYXR1cmUgPT0gc2lnbmF0dXJlKTsKIAot
ICAgICAgICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rpb25JbmRleFNwYWNlLCAqbV9tb2R1bGVJ
bmZvcm1hdGlvbik7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgYXV0
byB2YWxpZGF0ZVJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgsIHNpZ25hdHVyZSwgbV9mdW5jdGlvbkluZGV4U3BhY2UsICptX21vZHVsZUluZm9y
bWF0aW9uKTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVJlc3VsdCkgewogICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVu
Y3Rpb25MZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uU3RhcnRbaV0pKSwgIiwgIik7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IGVycm9yOworICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSB2YWxpZGF0
ZVJlc3VsdC5lcnJvcigpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cy51bmNoZWNrZWRBcHBlbmQoVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCkpOwotICAg
ICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21w
aWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscy5hdChmdW5jdGlvbkluZGV4KSwgbV9mdW5jdGlvbkluZGV4U3Bh
Y2UsICptX21vZHVsZUluZm9ybWF0aW9uKSk7CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy5hdChmdW5jdGlvbkluZGV4
KSwgbV9mdW5jdGlvbkluZGV4U3BhY2UsICptX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CisgICAgICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAg
cmV0dXJuOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgIH0KKyAgICAg
ICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpOwogICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIu
Z2V0KClbZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNb
ZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNl
Y3Rpb25zLmgKaW5kZXggOTk2MDUyNC4uNWVlN2JjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTQyLDIxICs0Miw0NCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogICAgIG1hY3JvKENvZGUsICAgIDEwLCAiRnVuY3Rpb24gYm9kaWVz
IChjb2RlKSIpIFwKICAgICBtYWNybyhEYXRhLCAgICAxMSwgIkRhdGEgc2VnbWVudHMiKQogCi1z
dHJ1Y3QgU2VjdGlvbnMgewotICAgIGVudW0gU2VjdGlvbiA6IHVpbnQ4X3QgeworZW51bSBjbGFz
cyBTZWN0aW9uIDogdWludDhfdCB7CiAjZGVmaW5lIERFRklORV9XQVNNX1NFQ1RJT05fRU5VTShO
QU1FLCBJRCwgREVTQ1JJUFRJT04pIE5BTUUgPSBJRCwKLSAgICAgICAgRk9SX0VBQ0hfV0FTTV9T
RUNUSU9OKERFRklORV9XQVNNX1NFQ1RJT05fRU5VTSkKKyAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJ
T04oREVGSU5FX1dBU01fU0VDVElPTl9FTlVNKQogI3VuZGVmIERFRklORV9XQVNNX1NFQ1RJT05f
RU5VTQotICAgICAgICBVbmtub3duCi0gICAgfTsKLSAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZU9y
ZGVyKFNlY3Rpb24gcHJldmlvdXMsIFNlY3Rpb24gbmV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChw
cmV2aW91cyA9PSBVbmtub3duKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJl
dHVybiBwcmV2aW91cyA8IG5leHQ7Ci0gICAgfQorICAgIFVua25vd24KIH07CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIEludD4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkU2VjdGlvbihJbnQgc2Vj
dGlvbikKK3sKKyAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKKyNkZWZpbmUgVkFMSURBVEVfU0VDVElP
TihOQU1FLCBJRCwgREVTQ1JJUFRJT04pIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihTZWN0aW9uOjpO
QU1FKTogcmV0dXJuIHRydWU7CisgICAgICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihWQUxJREFU
RV9TRUNUSU9OKQorI3VuZGVmIFZBTElEQVRFX1NFQ1RJT04KKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdmFsaWRhdGVP
cmRlcihTZWN0aW9uIHByZXZpb3VzLCBTZWN0aW9uIG5leHQpCit7CisgICAgaWYgKHByZXZpb3Vz
ID09IFNlY3Rpb246OlVua25vd24pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50OF90PihwcmV2aW91cykgPCBzdGF0aWNfY2FzdDx1aW50OF90PihuZXh0
KTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKFNlY3Rpb24gc2Vj
dGlvbikKK3sKKyAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKKyNkZWZpbmUgU1RSSU5HSUZZX1NFQ1RJ
T05fTkFNRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pIGNhc2UgU2VjdGlvbjo6TkFNRTogcmV0dXJu
ICNOQU1FOworICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT04oU1RSSU5HSUZZX1NFQ1RJT05f
TkFNRSkKKyN1bmRlZiBTVFJJTkdJRllfU0VDVElPTl9OQU1FCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICI/IjsKKyAg
ICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNw
cAppbmRleCAzYmI1MjE5Li41MWQ3OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21WYWxpZGF0ZS5jcHAKQEAgLTcxLDYgKzcxLDkgQEAgcHVibGljOgogICAgICAgICBCbG9j
a1R5cGUgbV9ibG9ja1R5cGU7CiAgICAgICAgIFR5cGUgbV9zaWduYXR1cmU7CiAgICAgfTsKKyAg
ICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CisgICAgdHlwZWRlZiBVbmV4cGVjdGVkVHlwZTxF
cnJvclR5cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBF
cnJvclR5cGU+IFJlc3VsdDsKICAgICB0eXBlZGVmIFR5cGUgRXhwcmVzc2lvblR5cGU7CiAgICAg
dHlwZWRlZiBDb250cm9sRGF0YSBDb250cm9sVHlwZTsKICAgICB0eXBlZGVmIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CkBAIC03OCwxNDIgKzgxLDEyNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0g
Vm9pZDsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBW
ZWN0b3I8VHlwZT4mKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBl
LCB1aW50MzJfdCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJf
SU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBh
cmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7
IC8vIFNlZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCB2YWxpZGF0ZTogIiksIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisjZGVm
aW5lIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uLCAuLi4pIGRvIHsgXAorICAgICAg
ICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
cmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGls
ZSAoMCkKKworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFZlY3RvcjxUeXBlPiYpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUgdHlw
ZSwgdWludDY0X3QpIHsgcmV0dXJuIHR5cGU7IH0KIAogICAgIC8vIExvY2FscwotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKTsKIAogICAgIC8vIEdsb2JhbHMKLSAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUgdmFsdWUpOwogCiAgICAgLy8gTWVtb3J5Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKIAogICAgIC8vIEJhc2ljIG9wZXJhdG9ycwog
ICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNl
bGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4
cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5
cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CiAKICAgICAvLyBDb250cm9sIGZsb3cKICAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOwogICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250
cm9sRGF0YSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENv
bnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOworICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNp
Z25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRh
Jik7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhwcmVz
c2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJv
bERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sp
OwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJv
bEVudHJ5Jik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVj
dG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHBy
ZXNzaW9uU3RhY2spOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJl
YWNoYWJsZShDb250cm9sRW50cnkmKTsKIAogICAgIC8vIENhbGxzCi0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJl
KiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0
IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOwotCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50
cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sp
OworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICBib29sIGhhc01l
bW9yeSgpIGNvbnN0IHsgcmV0dXJuICEhbV9tb2R1bGUubWVtb3J5OyB9CiAKLSAgICB2b2lkIHNl
dEVycm9yTWVzc2FnZShTdHJpbmcmJiBtZXNzYWdlKSB7IEFTU0VSVChtX2Vycm9yTWVzc2FnZS5p
c051bGwoKSk7IG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShtZXNzYWdlKTsgfQotICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yTWVzc2FnZTsgfQogICAgIFZh
bGlkYXRlKEV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBtb2R1bGUpCiAgICAgICAgIDogbV9yZXR1cm5UeXBlKHJldHVyblR5cGUpCiAgICAgICAgICwg
bV9tb2R1bGUobW9kdWxlKQogICAgIHsKICAgICB9CiAKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworCiBwcml2YXRlOgot
ICAgIGJvb2wgdW5pZnkoVHlwZSwgVHlwZSk7Ci0gICAgYm9vbCB1bmlmeShjb25zdCBFeHByZXNz
aW9uTGlzdCYsIGNvbnN0IENvbnRyb2xEYXRhJik7CisgICAgUmVzdWx0IHVuaWZ5KFR5cGUsIFR5
cGUpOworICAgIFJlc3VsdCB1bmlmeShjb25zdCBFeHByZXNzaW9uTGlzdCYsIGNvbnN0IENvbnRy
b2xEYXRhJik7CiAKLSAgICBib29sIGNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xEYXRhJiB0YXJn
ZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJlc3VsdCBj
aGVja0JyYW5jaFRhcmdldChDb250cm9sRGF0YSYgdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIG1fcmV0dXJuVHlwZTsK
ICAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwog
ICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX21vZHVsZTsKIH07CiAKLWJvb2wgVmFsaWRh
dGU6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCithdXRvIFZhbGlkYXRl
OjphZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmdzKSAtPiBSZXN1bHQKIHsKLSAg
ICBmb3IgKFR5cGUgYXJnIDogYXJncykgewotICAgICAgICBpZiAoIWFkZExvY2FsKGFyZywgMSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IGZvciAoVHlwZSBhcmcgOiBhcmdzKQorICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KGFkZExvY2FsKGFyZywgMSkpOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6
OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpCithdXRvIFZhbGlkYXRlOjphZGRM
b2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIW1f
bG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShtX2xvY2Fscy5zaXplKCkgKyBjb3VudCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fbG9jYWxzLnNpemUoKSArIGNv
dW50OworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBh
Y2l0eShzaXplKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgc2l6ZSwgIiBsb2NhbHMi
KTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICBt
X2xvY2Fscy51bmNoZWNrZWRBcHBlbmQodHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGluZGV4
IDwgbV9sb2NhbHMuc2l6ZSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIG1fZXJyb3JNZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJBdHRlbXB0IHRvIHVzZSB1bmtub3duIGxvY2FsLiIpOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbG9jYWxzLnNpemUoKSwg
ImF0dGVtcHQgdG8gdXNlIHVua25vd24gbG9jYWwgIiwgaW5kZXgsICIgbGFzdCBvbmUgaXMgIiwg
bV9sb2NhbHMuc2l6ZSgpKTsKKyAgICByZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF07CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKQorYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlw
ZSBsb2NhbFR5cGU7Ci0gICAgaWYgKCFnZXRMb2NhbChpbmRleCwgbG9jYWxUeXBlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGxvY2FsVHlwZSA9PSB2YWx1ZSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHQg
dG8gc2V0IGxvY2FsIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobG9jYWxUeXBlKSwgIiB3aXRoIGEg
dmFyaWFibGUgb2YgdHlwZTogIiwgdG9TdHJpbmcodmFsdWUpKTsKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhnZXRMb2NhbChpbmRleCwgbG9jYWxUeXBl
KSk7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihsb2NhbFR5cGUgIT0gdmFsdWUsICJzZXRf
bG9jYWwgdG8gdHlwZSAiLCB2YWx1ZSwgIiBleHBlY3RlZCAiLCBsb2NhbFR5cGUpOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGlu
ZGV4IDwgbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9tb2R1
bGUuZ2xvYmFsc1tpbmRleF0udHlwZTsKLSAgICAgICAgQVNTRVJUKGlzVmFsdWVUeXBlKHJlc3Vs
dCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gdXNlIHVua25vd24gZ2xvYmFsLiIpOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbW9kdWxlLmds
b2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwg
bGltaXQgaXMgIiwgbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpOworICAgIHJlc3VsdCA9IG1fbW9k
dWxlLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgQVNTRVJUKGlzVmFsdWVUeXBlKHJlc3VsdCkp
OworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OnNldEdsb2JhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpCithdXRvIFZhbGlkYXRlOjpzZXRHbG9iYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKIHsKLSAgICBp
ZiAoaW5kZXggPj0gbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpIHsKLSAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gdXNlIHVua25vd24gZ2xvYmFsLiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fbW9kdWxlLmdsb2JhbHNb
aW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpIHsKLSAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gc3RvcmUgdG8gaW1tdXRhYmxlIGds
b2JhbC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKGluZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpLCAic2V0X2dsb2JhbCAi
LCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9tb2R1bGUuZ2xvYmFs
cy5zaXplKCkpOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9tb2R1bGUuZ2xvYmFsc1tp
bmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSwgInNldF9nbG9iYWwgIiwgaW5k
ZXgsICIgaXMgaW1tdXRhYmxlIik7CiAKICAgICBFeHByZXNzaW9uVHlwZSBnbG9iYWxUeXBlID0g
bV9tb2R1bGUuZ2xvYmFsc1tpbmRleF0udHlwZTsKICAgICBBU1NFUlQoaXNWYWx1ZVR5cGUoZ2xv
YmFsVHlwZSkpOwotICAgIGlmIChnbG9iYWxUeXBlID09IHZhbHVlKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdCB0byBzZXQg
Z2xvYmFsIHdpdGggdHlwZTogIiwgdG9TdHJpbmcoZ2xvYmFsVHlwZSksICIgd2l0aCBhIHZhcmlh
YmxlIG9mIHR5cGU6ICIsIHRvU3RyaW5nKHZhbHVlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZ2xvYmFsVHlwZSAhPSB2YWx1ZSwgInNldF9nbG9iYWwg
IiwgaW5kZXgsICIgd2l0aCB0eXBlIiwgZ2xvYmFsVHlwZSwgIiB3aXRoIGEgdmFyaWFibGUgb2Yg
dHlwZSAiLCB2YWx1ZSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogVmFsaWRhdGU6OkNvbnRyb2xU
eXBlIFZhbGlkYXRlOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKQEAgLTIyNiwyMDkgKzIxNCwx
MjkgQEAgVmFsaWRhdGU6OkNvbnRyb2xUeXBlIFZhbGlkYXRlOjphZGRMb29wKFR5cGUgc2lnbmF0
dXJlKQogICAgIHJldHVybiBDb250cm9sRGF0YShCbG9ja1R5cGU6Okxvb3AsIHNpZ25hdHVyZSk7
CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY29uZGl0aW9uICE9IEkz
MikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8g
dXNlICIsIHRvU3RyaW5nKGNvbmRpdGlvbiksICIgYXMgdGhlIGNvbmRpdGlvbiBmb3Igc2VsZWN0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobm9uWmVybyAhPSB6
ZXJvKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiUmVzdWx0IHR5cGVz
IG9mIHNlbGVjdCBkb24ndCBtYXRjaC4gR290OiAiLCB0b1N0cmluZyhub25aZXJvKSwgIiBhbmQg
IiwgdG9TdHJpbmcoemVybykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCisgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gSTMyLCAic2VsZWN0IGNvbmRpdGlv
biBtdXN0IGJlIGkzMiwgZ290ICIsIGNvbmRpdGlvbik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihub25aZXJvICE9IHplcm8sICJzZWxlY3QgcmVzdWx0IHR5cGVzIG11c3QgbWF0Y2gsIGdv
dCAiLCBub25aZXJvLCAiIGFuZCAiLCB6ZXJvKTsKICAgICByZXN1bHQgPSB6ZXJvOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZElmKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1
bHQpCithdXRvIFZhbGlkYXRlOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUg
c2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY29u
ZGl0aW9uICE9IEkzMikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0
dGVtcHRpbmcgdG8gdXNlICIsIHRvU3RyaW5nKGNvbmRpdGlvbiksICIgYXMgdGhlIGNvbmRpdGlv
biBmb3IgYW4gaWYgYmxvY2siKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJMzIsICJpZiBjb25kaXRpb24gbXVz
dCBiZSBpMzIsIGdvdCAiLCBjb25kaXRpb24pOwogICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKEJs
b2NrVHlwZTo6SWYsIHNpZ25hdHVyZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkRWxzZShDb250cm9sVHlwZSYgY3VycmVudCwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHZhbHVlcykKK2F1dG8gVmFsaWRhdGU6OmFkZEVsc2UoQ29udHJv
bFR5cGUmIGN1cnJlbnQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMpIC0+IFJlc3VsdAog
ewotICAgIGlmICghdW5pZnkodmFsdWVzLCBjdXJyZW50KSkgewotICAgICAgICBBU1NFUlQoZXJy
b3JNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCisgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeSh2YWx1ZXMsIGN1cnJlbnQpKTsKICAgICByZXR1cm4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoY3VycmVudCk7CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBjdXJyZW50KQorYXV0byBWYWxpZGF0ZTo6YWRk
RWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGN1cnJlbnQpIC0+IFJlc3VsdAogewotICAg
IGlmIChjdXJyZW50LnR5cGUoKSAhPSBCbG9ja1R5cGU6OklmKSB7Ci0gICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0byBhZGQgZWxzZSBibG9jayB0byBzb21l
dGhpbmcgb3RoZXIgdGhhbiBhbiBpZiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjdXJyZW50LnR5cGUoKSAhPSBCbG9ja1R5cGU6
OklmLCAiZWxzZSBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGFuIGlmIik7CiAgICAgY3VycmVu
dCA9IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6QmxvY2ssIGN1cnJlbnQuc2lnbmF0dXJlKCkpOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFk
ZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKQorYXV0byBWYWxpZGF0
ZTo6YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFJlc3Vs
dAogewogICAgIGlmIChtX3JldHVyblR5cGUgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPT0g
MSk7Ci0KLSAgICBpZiAobV9yZXR1cm5UeXBlID09IHJldHVyblZhbHVlc1swXSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRp
bmcgdG8gYWRkIHJldHVybiB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHJldHVyblZhbHVlc1swXSks
ICIgYnV0IGZ1bmN0aW9uIGV4cGVjdHMgcmV0dXJuIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobV9y
ZXR1cm5UeXBlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYobV9yZXR1cm5UeXBlICE9IHJldHVyblZhbHVlc1swXSwgInJldHVybiB0eXBlICIsIHJldHVy
blZhbHVlc1swXSwgIiBkb2Vzbid0IG1hdGNoIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgIiwgbV9y
ZXR1cm5UeXBlKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjpjaGVja0Jy
YW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKQorYXV0byBWYWxpZGF0ZTo6Y2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbFR5
cGUmIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUmVz
dWx0CiAgICAgewogICAgICAgICBpZiAodGFyZ2V0LnR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3Ap
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICAgICAgaWYgKHRhcmdldC5zaWduYXR1cmUoKSA9PSBWb2lkKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgaWYgKCFleHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYnJhbmNoIHRv
IGJsb2NrIHdpdGggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcodGFyZ2V0LnNpZ25hdHVyZSgp
KSwgIiBidXQgdGhlIHN0YWNrIHdhcyBlbXB0eSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIGlmICh0YXJn
ZXQuc2lnbmF0dXJlKCkgPT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGV4cHJlc3Npb25TdGFj
ay5pc0VtcHR5KCksICJicmFuY2ggdG8gYmxvY2sgb24gZW1wdHkgZXhwcmVzc2lvbiBzdGFjayIp
OworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhcmdldC5zaWduYXR1cmUoKSAhPSBl
eHByZXNzaW9uU3RhY2subGFzdCgpLCAiYnJhbmNoJ3Mgc3RhY2sgdHlwZSBkb2Vzbid0IG1hdGNo
IGJsb2NrJ3MgdHlwZSIpOwogCi0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygi
QXR0ZW1wdGluZyB0byBicmFuY2ggdG8gYmxvY2sgd2l0aCBleHBlY3RlZCB0eXBlOiAiLCB0b1N0
cmluZyh0YXJnZXQuc2lnbmF0dXJlKCkpLCAiIGJ1dCBzdGFjayBoYXMgdHlwZTogIiwgdG9TdHJp
bmcodGFyZ2V0LnNpZ25hdHVyZSgpKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlw
ZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiBzdGFjaykKK2F1dG8gVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBzdGFjaykgLT4g
UmVzdWx0CiB7CiAgICAgLy8gVm9pZCBtZWFucyB0aGlzIGlzIGFuIHVuY29uZGl0aW9uYWwgYnJh
bmNoLgotICAgIGlmIChjb25kaXRpb24gIT0gVm9pZCAmJiBjb25kaXRpb24gIT0gSTMyKSB7Ci0g
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0byBhZGQgYSBj
b25kaXRpb25hbCBicmFuY2ggd2l0aCBjb25kaXRpb24gdHlwZTogIiwgdG9TdHJpbmcoY29uZGl0
aW9uKSwgIiBidXQgZXhwZWN0ZWQgaTMyLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gVm9pZCAmJiBjb25k
aXRpb24gIT0gSTMyLCAiY29uZGl0aW9uYWwgYnJhbmNoIHdpdGggbm9uLWkzMiBjb25kaXRpb24g
IiwgY29uZGl0aW9uKTsKICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQodGFyZ2V0LCBzdGFj
ayk7CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVm
YXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK2F1dG8g
VmFsaWRhdGU6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3Rv
cjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUmVzdWx0CiB7Ci0gICAgaWYg
KGNvbmRpdGlvbiAhPSBJMzIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5n
KCJBdHRlbXB0aW5nIHRvIGFkZCBhIGJyX3RhYmxlIHdpdGggY29uZGl0aW9uIHR5cGU6ICIsIHRv
U3RyaW5nKGNvbmRpdGlvbiksICIgYnV0IGV4cGVjdGVkIGkzMi4iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJ
MzIsICJicl90YWJsZSB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNvbmRpdGlvbik7CiAKLSAg
ICBmb3IgKGF1dG8gdGFyZ2V0IDogdGFyZ2V0cykgewotICAgICAgICBpZiAoZGVmYXVsdFRhcmdl
dC5zaWduYXR1cmUoKSAhPSB0YXJnZXQtPnNpZ25hdHVyZSgpKSB7Ci0gICAgICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIGEgYnJfdGFibGUgd2l0
aCBkaWZmZXJlbnQgZXhwZWN0ZWQgdHlwZXMuIERlZmF1bHQgdGFyZ2V0IGhhcyB0eXBlOiAiLCB0
b1N0cmluZyhkZWZhdWx0VGFyZ2V0LnNpZ25hdHVyZSgpKSwgIiBidXQgY2FzZSBoYXMgdHlwZTog
IiwgdG9TdHJpbmcodGFyZ2V0LT5zaWduYXR1cmUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoYXV0byB0YXJnZXQgOiB0YXJnZXRzKQor
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQuc2lnbmF0dXJlKCkg
IT0gdGFyZ2V0LT5zaWduYXR1cmUoKSwgImJyX3RhYmxlIHRhcmdldCB0eXBlIG1pc21hdGNoIik7
CiAKICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCwgZXhwcmVzc2lv
blN0YWNrKTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRy
eSwgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKQorYXV0byBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJv
bEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKSAtPiBSZXN1bHQKIHsKICAgICBD
b250cm9sRGF0YSYgYmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBpZiAoYmxvY2suc2ln
bmF0dXJlKCkgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIXN0YWNr
LnNpemUoKSkgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkJsb2NrIGZh
bGx0aG91Z2ggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0dXJlKCkpLCAi
IGJ1dCB0aGUgc3RhY2sgd2FzIGVtcHR5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0gc3Rh
Y2subGFzdCgpKSB7Ci0gICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChibG9jay5zaWduYXR1cmUoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKHN0YWNrLmlzRW1wdHkoKSwgInR5cGVkIGJsb2NrIGZhbGxz
IHRocm91Z2ggb24gZW1wdHkgc3RhY2siKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGJs
b2NrLnNpZ25hdHVyZSgpICE9IHN0YWNrLmxhc3QoKSwgImJsb2NrIGZhbGx0aHJvdWdoIGRvZXNu
J3QgbWF0Y2ggaXRzIGRlY2xhcmVkIHR5cGUiKTsKIAotICAgIG1fZXJyb3JNZXNzYWdlID0gbWFr
ZVN0cmluZygiQmxvY2sgZmFsbHRocm91Z2ggaGFzIGV4cGVjdGVkIHR5cGU6ICIsIHRvU3RyaW5n
KGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgcHJvZHVjZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxv
Y2suc2lnbmF0dXJlKCkpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2suYXBwZW5kKGJsb2NrLnNpZ25hdHVyZSgpKTsKKyAgICByZXR1cm4geyB9
OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYg
ZW50cnkpCithdXRvIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYg
ZW50cnkpIC0+IFJlc3VsdAogewogICAgIGlmIChlbnRyeS5jb250cm9sRGF0YS5zaWduYXR1cmUo
KSAhPSBWb2lkKQogICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQo
ZW50cnkuY29udHJvbERhdGEuc2lnbmF0dXJlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZENhbGwodW5zaWduZWQsIGNvbnN0IFNp
Z25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwg
Y29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChzaWdu
YXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgIT0gYXJncy5zaXplKCkpIHsKLSAgICAgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiQXJpdHkgbWlzbWF0Y2gg
aW4gY2FsbCwgZXhwZWN0ZWQ6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihzaWdu
YXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGJ1dCBn
b3Q6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmdzLnNpemUoKSk7Ci0gICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoc2lnbmF0dXJlLT5hcmd1
bWVudHMuc2l6ZSgpICE9IGFyZ3Muc2l6ZSgpLCAiYXJpdHkgbWlzbWF0Y2ggaW4gY2FsbCwgZ290
ICIsIGFyZ3Muc2l6ZSgpLCAiIGFyZ3VtZW50cywgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLT5hcmd1
bWVudHMuc2l6ZSgpKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChhcmdzW2ldICE9IHNpZ25hdHVyZS0+YXJndW1lbnRzW2ld
KSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkV4cGVjdGVkIGFy
Z3VtZW50IHR5cGU6ICIsIHRvU3RyaW5nKHNpZ25hdHVyZS0+YXJndW1lbnRzW2ldKSwgIiBkb2Vz
IG5vdCBtYXRjaCBwYXNzZWQgYXJndW1lbnQgdHlwZTogIiwgdG9TdHJpbmcoYXJnc1tpXSkpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0sICJhcmd1bWVudCB0
eXBlIG1pc21hdGNoIGluIGNhbGwsIGdvdCAiLCBhcmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWdu
YXR1cmUtPmFyZ3VtZW50c1tpXSk7CiAKICAgICByZXN1bHQgPSBzaWduYXR1cmUtPnJldHVyblR5
cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0
ZTo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBW
YWxpZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25z
dCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKIHsKICAgICBjb25zdCBhdXRvIGFyZ3VtZW50Q291bnQgPSBzaWduYXR1cmUtPmFy
Z3VtZW50cy5zaXplKCk7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gYXJncy5zaXplKCkgLSAx
KSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoIkFyaXR5IG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGV4cGVjdGVkOiAiKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpKTsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiBidXQgZ290OiAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmROdW1iZXIoYXJncy5zaXplKCkpOwotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGJ1aWxkZXIu
dG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgIT0gYXJncy5zaXplKCkgLSAxLCAiYXJpdHkgbWlz
bWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZ3Muc2l6ZSgpIC0gMSwgIiBhcmd1bWVu
dHMsIGV4cGVjdGVkICIsIGFyZ3VtZW50Q291bnQpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewotICAgICAgICBpZiAoYXJnc1tpXSAhPSBzaWdu
YXR1cmUtPmFyZ3VtZW50c1tpXSkgewotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtl
U3RyaW5nKCJFeHBlY3RlZCBhcmd1bWVudCB0eXBlOiAiLCB0b1N0cmluZyhzaWduYXR1cmUtPmFy
Z3VtZW50c1tpXSksICIgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIGFyZ3VtZW50IHR5cGU6ICIsIHRv
U3RyaW5nKGFyZ3NbaV0pKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQor
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1
bWVudHNbaV0sICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAi
LCBhcmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUtPmFyZ3VtZW50c1tpXSk7CisKKyAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3MubGFzdCgpICE9IEkzMiwgIm5vbi1pMzIgY2Fs
bF9pbmRpcmVjdCBpbmRleCAiLCBhcmdzLmxhc3QoKSk7CiAKLSAgICBpZiAoYXJncy5sYXN0KCkg
IT0gSTMyKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQg
Y2FsbF9pbmRpcmVjdCB0YXJnZXQgaW5kZXggdG8gaGF2ZSB0eXBlOiBpMzIgYnV0IGdvdCB0eXBl
OiAiLCB0b1N0cmluZyhhcmdzLmxhc3QoKSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIAogICAgIHJlc3VsdCA9IHNpZ25hdHVyZS0+cmV0dXJuVHlwZTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjp1bmlmeShjb25zdCBF
eHByZXNzaW9uTGlzdCYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlwZSYgYmxvY2spCithdXRvIFZh
bGlkYXRlOjp1bmlmeShjb25zdCBFeHByZXNzaW9uTGlzdCYgdmFsdWVzLCBjb25zdCBDb250cm9s
VHlwZSYgYmxvY2spIC0+IFJlc3VsdAogewogICAgIEFTU0VSVCh2YWx1ZXMuc2l6ZSgpIDw9IDEp
OwogICAgIGlmIChibG9jay5zaWduYXR1cmUoKSA9PSBWb2lkKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmICghdmFsdWVzLnNpemUoKSkgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1ha2VTdHJpbmcoIkJsb2NrIGhhcyBub24tdm9pZCBzaWduYXR1cmUgYnV0IGhhcyBubyBzdGFj
ayBlbnRyaWVzIG9uIGV4aXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGlmICh2YWx1ZXNbMF0gPT0gYmxvY2suc2lnbmF0dXJlKCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWVz
LmlzRW1wdHkoKSwgIm5vbi12b2lkIGJsb2NrIGVuZHMgd2l0aCBhbiBlbXB0eSBzdGFjayIpOwor
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWVzWzBdICE9IGJsb2NrLnNpZ25hdHVyZSgp
LCAiY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUiKTsKIAotICAgIG1f
ZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQgY29udHJvbCBmbG93IHRvIHJldHVy
biB2YWx1ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQg
Z290IHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcodmFsdWVzWzBdKSk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpCkBAIC00MzcsMjEg
KzM0NSwxMiBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+
JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKQogICAgIC8vIFRoaW5rIG9mIHRoaXMgYXMgcGVuYW5j
ZSBmb3IgdGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2FnZXMuCiB9CiAKLVN0cmluZyB2YWxpZGF0
ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVu
Y3Rpb25JbmRleFNwYWNlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlKQorRXhwZWN0
ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
c2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IEltbXV0YWJs
ZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgbW9kdWxlKQogewogICAgIFZhbGlkYXRlIGNvbnRleHQoc2lnbmF0dXJlLT5yZXR1
cm5UeXBlLCBtb2R1bGUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3Io
Y29udGV4dCwgc291cmNlLCBsZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNlLCBt
b2R1bGUpOwotCi0gICAgaWYgKCF2YWxpZGF0b3IucGFyc2UoKSkgewotICAgICAgICAvLyBGSVhN
RTogYWRkIGJldHRlciBsb2NhdGlvbiBpbmZvcm1hdGlvbiBoZXJlLiBzZWU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyODgKLSAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBuZXZlciBub3QgaGF2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIHdlIHJldHVybiBmYWxz
ZS4KLSAgICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MzU0Ci0gICAgICAgIGlmIChjb250ZXh0LmVycm9yTWVzc2FnZSgpLmlzTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIGVycm9yIjsKLSAgICAgICAgcmV0dXJuIGNvbnRl
eHQuZXJyb3JNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFModmFsaWRhdG9yLnBhcnNlKCkpOworICAgIHJldHVybiB7
IH07CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21WYWxpZGF0ZS5oCmluZGV4IDg2MWZkNzIuLjFmMDA0MTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCkBAIC0yOCwxMCArMjgsMTEgQEAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVk
ZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAK
LVN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSosIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24o
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgSW1tdXRhYmxl
RnVuY3Rpb25JbmRleFNwYWNlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRl
ci5weQppbmRleCA4MDRjYjIxLi41OTZkODU5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5s
aW5lc0hlYWRlci5weQpAQCAtMTg5LDEwICsxODksMTAgQEAgZGVmIGdlbmVyYXRlU2ltcGxlQ29k
ZShvcCk6CiAgICAgYXJncyA9IFsiRXhwcmVzc2lvblR5cGUgYXJnIiArIHN0cihwYXJhbSkgZm9y
IHBhcmFtIGluIHJhbmdlKGxlbihvcGNvZGVbInBhcmFtZXRlciJdKSldCiAgICAgYXJncy5hcHBl
bmQoIkV4cHJlc3Npb25UeXBlJiByZXN1bHQiKQogICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4g
Ym9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5h
bWUiXSkgKyAiPigiICsgIiwgIi5qb2luKGFyZ3MpICsgIiIiKQordGVtcGxhdGU8PiBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6IiIiICsgd2FzbS50b0NwcChvcFsibmFtZSJdKSAr
ICI+KCIgKyAiLCAiLmpvaW4oYXJncykgKyAiIiIpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICIiIiAr
IGdlbmVyYXRlQjNDb2RlKG9wY29kZSwgYjNvcCkgKyAiIiI7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KICIiIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKaW5kZXggMDBkMjgzOC4uMTVjMWYzYyAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVy
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRl
ci5weQpAQCAtMTUxLDcgKzE1MSw3IEBAIGlubGluZSBCMzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5
cGUpCiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAogI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwg
YjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOwotaW5saW5lIGNvbnN0IGNoYXIq
IHRvU3RyaW5nKFR5cGUgdHlwZSkKK2lubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKFR5cGUg
dHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBGT1JfRUFDSF9XQVNNX1RZUEUoQ1JF
QVRFX0NBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0
ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkKaW5kZXggMjVhMzkyZS4uNTJi
NjZiMSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNt
VmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQpAQCAtNjAsMTUgKzYwLDEzIEBA
IGRlZiB0b0NwcChuYW1lKToKIGRlZiB1bmFyeU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rl
c1tuYW1lXQogICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYm9vbCBWYWxpZGF0ZTo6YWRkT3A8
T3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTw+IGF1dG8gVmFsaWRhdGU6OmFkZE9wPE9w
VHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAodmFsdWUgIT0gIiIiICsg
Y3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUgKyAiIiIgZXhwZWN0cyB0aGUgdmFsdWUgdG8g
YmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0p
ICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZSkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWSh2YWx1ZSAh
PSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICByZXR1
cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDog
IiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CiAKICAgICByZXN1bHQgPSAi
IiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KICIiIgogCkBAIC03NiwyMCArNzQsMTYgQEAgdGVtcGxhdGU8PiBi
b29sIFZhbGlkYXRlOjphZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHBy
ZXNzaW9uVHlwZQogZGVmIGJpbmFyeU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1l
XQogICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYm9vbCBWYWxpZGF0ZTo6YWRkT3A8T3BUeXBl
OjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTw+IGF1dG8gVmFs
aWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25U
eXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKIHsKLSAgICBpZiAobGVmdCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIi
XVswXSkgKyAiIiIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIi
ICsgbmFtZSArICIiIiBleHBlY3RzIHRoZSBsZWZ0IHZhbHVlIHRvIGJlIG9mIHR5cGU6ICIsIHRv
U3RyaW5nKCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIiksICIgYnV0IGdv
dCBhIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobGVmdCkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShsZWZ0ICE9ICIiIiArIGNwcFR5cGUob3Bb
InBhcmFtZXRlciJdWzBdKSArICIiIikpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxS
ZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIGxl
ZnQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwogCi0gICAgaWYgKHJpZ2h0ICE9ICIiIiArIGNwcFR5
cGUob3BbInBhcmFtZXRlciJdWzFdKSArICIiIikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1ha2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIiIGV4cGVjdHMgdGhlIHJpZ2h0IHZhbHVlIHRv
IGJlIG9mIHR5cGU6ICIsIHRvU3RyaW5nKCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBd
KSArICIiIiksICIgYnV0IGdvdCBhIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcocmlnaHQp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkocmlnaHQg
IT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSkKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6
ICIiIiArIG5hbWUgKyAiIiIgcmlnaHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAgcmVz
dWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiB7IH07CiB9CiAiIiIKIApAQCAtOTcsMTMgKzkxLDExIEBAIGRlZiBs
b2FkTWFjcm8obmFtZSk6CiAgICAgb3AgPSBvcGNvZGVzW25hbWVdCiAgICAgcmV0dXJuICIiIgog
ICAgIGNhc2UgTG9hZE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI6IHsKLSAgICAgICAg
aWYgKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7
Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIiIiIgKyBuYW1lICsg
IiIiIGV4cGVjdHMgdGhlIHBvaW50ZXIgdG8gYmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsg
Y3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0
aCB0eXBlOiAiLCB0b1N0cmluZyhwb2ludGVyKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlw
ZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1l
ICsgIiIiIHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAgICAgIHJlc3VsdCA9ICIiIiAr
IGNwcFR5cGUob3BbInJldHVybiJdWzBdKSArICIiIjsKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfSIiIgogCiAKQEAgLTExMSwxNyArMTAzLDEzIEBAIGRl
ZiBzdG9yZU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQogICAgIHJldHVybiAi
IiIKICAgICBjYXNlIFN0b3JlT3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAg
ICAgICBpZiAocG9pbnRlciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAi
IiIpIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5h
bWUgKyAiIiIgZXhwZWN0cyB0aGUgcG9pbnRlciB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygi
IiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1
ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHBvaW50ZXIpKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoVU5MSUtFTFkocG9pbnRlciAhPSAiIiIgKyBj
cHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiAr
IG5hbWUgKyAiIiIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7CiAKLSAgICAgICAgaWYgKHZhbHVl
ICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKSArICIiIikgewotICAgICAgICAg
ICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFtZSArICIiIiBleHBlY3Rz
IHRoZSB2YWx1ZSB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIgKyBjcHBUeXBlKG9wWyJw
YXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3aXRoIHR5cGU6ICIsIHRv
U3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKFVOTElLRUxZKHZhbHVlICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJd
WzFdKSArICIiIikpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpF
cnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBl
IG1pc21hdGNoIik7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfSIiIgogCiAKQEAgLTE0MSwyMCArMTI5LDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKICIiIiArIHVuYXJ5U3BlY2lhbGl6YXRpb25zICsgYmluYXJ5U3BlY2lh
bGl6YXRpb25zICsgIiIiCiAKLWJvb2wgVmFsaWRhdGU6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3QpCith
dXRvIFZhbGlkYXRlOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAo
IWhhc01lbW9yeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFVOTElLRUxZKCFo
YXNNZW1vcnkoKSkpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9y
VHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBsb2FkIGluc3RydWN0aW9uIHdpdGhvdXQgbWVtb3J5
Iik7CiAKICAgICBzd2l0Y2ggKG9wKSB7CiAiIiIgKyBsb2FkQ2FzZXMgKyAiIiIKICAgICB9CiB9
CiAKLWJvb2wgVmFsaWRhdGU6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QpCithdXRvIFZhbGlkYXRlOjpz
dG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUgdmFsdWUsIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIWhhc01lbW9yeSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFVOTElLRUxZKCFoYXNNZW1vcnkoKSkpCisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRp
b24gZmFpbGVkOiBzdG9yZSBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwogCiAgICAgc3dp
dGNoIChvcCkgewogIiIiICsgc3RvcmVDYXNlcyArICIiIgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggNTFkZDk4Zi4uOGFhZjRhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgICAgIHN3
aXRjaCAoaW1wb3J0LmtpbmQpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6RnVuY3Rp
b246IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAg
ICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0OgogICAgICAgICAgICAgLy8g
aS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1w
b3J0cy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6
RXh0ZXJuYWw6OlRhYmxlOiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJs
ZTogewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhp
cyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KICAgICAgICAg
ICAgIC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6CiAgICAgICAgICAgICBo
YXNUYWJsZUltcG9ydCA9IHRydWU7CkBAIC0xNjAsNyArMTYwLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNT
dGF0ZSogZXgKICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6
TWVtb3J5OiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKICAg
ICAgICAgICAgIC8vIDYuIElmIGkgaXMgYSBtZW1vcnkgaW1wb3J0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRl
ZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCht
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShF
eGVjU3RhdGUqIGV4CiAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBtZW1vcnkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbDo6R2xvYmFsOiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6
IHsKICAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgogICAgICAgICAg
ICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBUeXBlRXJy
b3IuCiAgICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQu
a2luZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcAppbmRleCBmMGMzYzM2Li40OTdmNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBA
IC03MiwxOSArNzIsMTkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IFdhc20KICAgICBBU1NFUlQoaW5o
ZXJpdHMoaW5mbygpKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBleHAgOiBtb2R1bGVJbmZvcm1h
dGlvbi5leHBvcnRzKSB7CiAgICAgICAgIHN3aXRjaCAoZXhwLmtpbmQpIHsKLSAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbDo6RnVuY3Rpb246IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBvcnRFbnRy
eTo6Y3JlYXRlTG9jYWwoZXhwLmZpZWxkLCBleHAuZmllbGQpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OlRhYmxlOiB7CisgICAg
ICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogewogICAgICAgICAgICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc4MgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVt
b3J5OiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1NjcxCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsOjpHbG9iYWw6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okds
b2JhbDogewogICAgICAgICAgICAgLy8gSW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFs
IHZhcmlhYmxlcyBjYW4gYmUgZXhwb3J0ZWQuCiAgICAgICAgICAgICBhZGRFeHBvcnRFbnRyeShF
eHBvcnRFbnRyeTo6Y3JlYXRlTG9jYWwoZXhwLmZpZWxkLCBleHAuZmllbGQpKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBleHAgOiBtb2R1bGVJbmZvcm1hdGlvbi5leHBvcnRzKSB7CiAg
ICAgICAgIEpTVmFsdWUgZXhwb3J0ZWRWYWx1ZTsKICAgICAgICAgc3dpdGNoIChleHAua2luZCkg
ewotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpGdW5jdGlvbjogeworICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKICAgICAgICAgICAgIC8vIDEuIElmIGUg
aXMgYSBjbG9zdXJlIGM6CiAgICAgICAgICAgICAvLyAgIGkuIElmIHRoZXJlIGlzIGFuIEV4cG9y
dGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgZnVuYyBpbiBmdW5jcyB3aG9zZSBmdW5jLltbQ2xv
c3VyZV1dIGVxdWFscyBjLCB0aGVuIHJldHVybiBmdW5jLgogICAgICAgICAgICAgLy8gICBpaS4g
KE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3IgYW55IGNsb3N1cmUsIHNv
IGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBp
biB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVtIHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBh
bHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QsIHRoZW4gdGhlIG9yaWdp
bmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5kLiBGb3IgaW1wb3J0cyB0aGF0IGFyZSBy
ZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBlciB3aWxsIGJlIGNyZWF0ZWQuKQpAQCAt
MTQ1LDE2ICsxNDUsMTYgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
U3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgICAgICAg
ICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZTogewor
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKICAgICAgICAgICAgIC8v
IEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3ODIKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6
Ok1lbW9yeTogeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTY3MQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsOjpHbG9iYWw6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtp
bmQ6Okdsb2JhbDogewogICAgICAgICAgICAgLy8gQXNzZXJ0OiB0aGUgZ2xvYmFsIGlzIGltbXV0
YWJsZSBieSBNVlAgdmFsaWRhdGlvbiBjb25zdHJhaW50LgogICAgICAgICAgICAgY29uc3QgV2Fz
bTo6R2xvYmFsJiBnbG9iYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2V4cC5raW5kSW5k
ZXhdOwogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2Jh
bDo6SW1tdXRhYmxlKTsKLS0gCjIuMTAuMQoK
</data>
<flag name="commit-queue"
          id="319482"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297159</attachid>
            <date>2016-12-14 19:37:02 -0800</date>
            <delta_ts>2016-12-14 22:13:34 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>0001-Improve-parse-errors.patch</filename>
            <type>text/plain</type>
            <size>169718</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAxNzU3MzM1Mzg4YjM5YTA3ODgwMmM4OTg0NGEyNjkwMDc2OGYwNDZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDEwOjEzOjQ1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gSW1wcm92
ZSBwYXJzZSBlcnJvcnMKCi0tLQogSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzICAgICAg
ICAgICAgICAgICAgICAgfCAgMjUgKy0KIEpTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9y
LmpzICAgICAgICAgICAgICAgIHwgIDYzICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAyMTYgKysrLS0tLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCAgICAgICAgICAgIHwgIDY3ICsrLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggICAgfCA0MzcgKysrKysrLS0t
LS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwICAg
IHwgNjI2ICsrKysrKysrLS0tLS0tLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5oICAgICAgfCAgNTIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QYXJzZXIuaCAgICAgICAgICAgIHwgIDkyICsrLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwICAgICAgICAgICAgfCAgMzYgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oICAgICAgICAgIHwgIDQ1ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwICAgICAgICB8IDM0NSArKysrLS0tLS0t
LS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oICAgICAgICAgIHwg
ICAzICstCiAuLi4vd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5w
eSB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVy
LnB5ICAgfCAgIDIgKy0KIC4uLi93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRl
ci5weSAgICAgIHwgIDYwICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IuY3BwICAgICB8ICAgOCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwICAgICAgICAgICAgfCAgMTYgKy0KIDE4IGZpbGVzIGNoYW5nZWQsIDg2NSBpbnNlcnRp
b25zKCspLCAxMjM1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1h
cGkvZWxlbWVudC5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcwppbmRleCA0Yzgx
YzNlLi4xNjBmZmQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMK
KysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCkBAIC0xLDIxICsxLDYgQEAKIGlt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CiAKLWZ1bmN0aW9uIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBz
dHIpIHsKLSAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Ci0gICAg
bGV0IHRocmV3ID0gZmFsc2U7Ci0gICAgdHJ5IHsKLSAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOwotICAgIH0gY2F0Y2goZSkgewotICAgICAgICB0aHJldyA9IHRydWU7Ci0gICAg
ICAgIGFzc2VydC50cnV0aHkoZS50b1N0cmluZygpLmluZGV4T2Yoc3RyKSAhPT0gLTEpOwotICAg
ICAgICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Ip
OwotICAgIH0KLSAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKLX0KLQotY29uc3QgYmFkRWxlbWVu
dFNlY3Rpb25TdHJpbmcgPSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBFbGVtZW50IjsKLQogewog
ICAgIC8vIEJhZCBlbGVtZW50IHNlY3Rpb24gYi9jIG5vIFRhYmxlIHNlY3Rpb24vaW1wb3J0Lgog
ICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCkBAIC0zMyw3ICsxOCw3IEBAIGNvbnN0
IGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gRWxlbWVu
dCI7CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0QmFk
QmluYXJ5KGJ1aWxkZXIsIGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nKTsKKyAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyMiAvIDQxOiBFbGVtZW50IHNlY3Rpb24gZXhwZWN0cyBhIFRhYmxl
IHRvIGJlIHByZXNlbnQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTU2LDcgKzQxLDcgQEAgY29u
c3QgYmFkRWxlbWVudFNlY3Rpb25TdHJpbmcgPSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBFbGVt
ZW50IjsKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnRC
YWRCaW5hcnkoYnVpbGRlciwgYmFkRWxlbWVudFNlY3Rpb25TdHJpbmcpOworICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDMwIC8gNDc6IEVsZW1lbnQgc2VjdGlvbiBjYW4gb25seSBoYXZl
IG9uZSBUYWJsZSBmb3Igbm93IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC03OSw3ICs2NCw3IEBA
IGNvbnN0IGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24g
RWxlbWVudCI7CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNz
ZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNSAvIDQ5OiBFbGVtZW50IHNlY3Rpb24ncyAwdGggZWxl
bWVudCB3cml0ZXMgdG8gaW5kZXggMjAgd2hpY2ggZXhjZWVkcyB0aGUgbWF4aW11bSAyMCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiKTsKIH0KIAogewpAQCAtMTAyLDcgKzg3LDcgQEAgY29uc3QgYmFkRWxlbWVudFNlY3Rp
b25TdHJpbmcgPSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBFbGVtZW50IjsKICAgICAgICAgICAg
IC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwg
YmFkRWxlbWVudFNlY3Rpb25TdHJpbmcpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDM1IC8gNDg6IEVsZW1lbnQgc2VjdGlvbidzIDB0aCBlbGVtZW50IHdyaXRlcyB0byBpbmRleCAy
MCB3aGljaCBleGNlZWRzIHRoZSBtYXhpbXVtIDIwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC0x
MjUsNyArMTEwLDcgQEAgY29uc3QgYmFkRWxlbWVudFNlY3Rpb25TdHJpbmcgPSAiY291bGRuJ3Qg
cGFyc2Ugc2VjdGlvbiBFbGVtZW50IjsKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5k
KCk7CiAKLSAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkRWxlbWVudFNlY3Rpb25TdHJp
bmcpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM4IC8gNTA6IEVsZW1lbnQgc2Vj
dGlvbidzIDB0aCBlbGVtZW50J3MgMnRoIGluZGV4IGlzIDEgd2hpY2ggZXhjZWVkcyB0aGUgZnVu
Y3Rpb24gaW5kZXggc3BhY2Ugc2l6ZSBvZiAxIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvZ2xvYmFsLWVycm9yLmpzCmluZGV4IDZmYTM1ZWMuLjNjODkyODIgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvZ2xvYmFsLWVycm9yLmpzCkBAIC0yMywxNCArMjMsNyBAQCBpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5
KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGxldCBwYXNzZWQgPSBmYWxzZTsKLSAgICB0cnkg
ewotICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQo
KSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBpZiAoZS5tZXNzYWdlID09PSAiY291bGRu
J3QgcGFyc2Ugc2VjdGlvbiBHbG9iYWw6IEdsb2JhbCBkZWNsYXJhdGlvbnMgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIikKLSAgICAgICAgICAgIHBhc3Nl
ZCA9IHRydWU7Ci0gICAgfQotICAgIGFzc2VydC50cnV0aHkocGFzc2VkKTsKKyAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNiAvIDU5OiBnZXRfZ2xvYmFsJ3MgaW5kZXggMCBleGNlZWRzIHRoZSBudW1iZXIgb2YgaW1w
b3J0cyAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIp
OwogfQogCiAKQEAgLTU5LDE0ICs1Miw3IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4u
dHJpbSgpOwogCi0gICAgbGV0IHBhc3NlZCA9IGZhbHNlOwotICAgIHRyeSB7Ci0gICAgICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKTsKLSAgICB9IGNh
dGNoIChlKSB7Ci0gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09ICJjb3VsZG4ndCBwYXJzZSBzZWN0
aW9uIEltcG9ydDogSW1wb3J0IGRlY2xhcmF0aW9ucyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKQotICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgYXNzZXJ0LnRydXRoeShwYXNzZWQpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gNzY6IE11
dGFibGUgR2xvYmFscyBhcmVuJ3Qgc3VwcG9ydGVkIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CkBAIC05MSwxNCArNzcsNyBAQCBpbXBv
cnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBjb25zdCBiaW4gPSBidWlsZGVy
LldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGxldCBwYXNzZWQgPSBmYWxz
ZTsKLSAgICB0cnkgewotICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbi5nZXQoKSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBpZiAoZS5tZXNzYWdl
ID09PSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBFeHBvcnQ6IEV4cG9ydHMgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIikKLSAgICAgICAgICAgIHBhc3Nl
ZCA9IHRydWU7Ci0gICAgfQotICAgIGFzc2VydC50cnV0aHkocGFzc2VkKTsKKyAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSA1MSAvIDU5OiAxdGggRXhwb3J0IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJ2dsb2JhbCcgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIHsK
QEAgLTEyNCwxNCArMTAzLDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7
CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7
CiAKLSAgICBsZXQgcGFzc2VkID0gZmFsc2U7Ci0gICAgdHJ5IHsKLSAgICAgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpOwotICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgaWYgKGUubWVzc2FnZSA9PT0gIkF0dGVtcHQgdG8gc3RvcmUgdG8gaW1tdXRh
YmxlIGdsb2JhbC4gKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgp
KScpIikKLSAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7Ci0gICAgfQotICAgIGFzc2VydC50cnV0
aHkocGFzc2VkKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgdmFsaWRhdGU6IHNldF9nbG9iYWwgMCBpcyBpbW11dGFibGUgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIApAQCAtMTU4
LDE0ICsxMzAsNyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBj
b25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAg
IGxldCBwYXNzZWQgPSBmYWxzZTsKLSAgICB0cnkgewotICAgICAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAg
ICAgICBpZiAoZS5tZXNzYWdlID09PSAiQXR0ZW1wdCB0byB1c2UgdW5rbm93biBnbG9iYWwuIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpCi0gICAgICAg
ICAgICBwYXNzZWQgPSB0cnVlOwotICAgIH0KLSAgICBhc3NlcnQudHJ1dGh5KHBhc3NlZCk7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZh
bGlkYXRlOiBzZXRfZ2xvYmFsIDEgb2YgdW5rbm93biBnbG9iYWwsIGxpbWl0IGlzIDEgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIApAQCAt
MTkxLDE0ICsxNTYsNyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAg
ICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAot
ICAgIGxldCBwYXNzZWQgPSBmYWxzZTsKLSAgICB0cnkgewotICAgICAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSk7Ci0gICAgfSBjYXRjaCAoZSkgewot
ICAgICAgICBpZiAoZS5tZXNzYWdlID09PSAiQXR0ZW1wdCB0byBzZXQgZ2xvYmFsIHdpdGggdHlw
ZTogRjMyIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlOiBJMzIgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIikKLSAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7
Ci0gICAgfQotICAgIGFzc2VydC50cnV0aHkocGFzc2VkKTsKKyAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6IHNldF9nbG9iYWwg
MCB3aXRoIHR5cGUgRjMyIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlIEkzMiAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogZm9yICggbGV0IGlt
cCBvZiBbdW5kZWZpbmVkLCBudWxsLCB7fSwgKCkgPT4ge30sICJudW1iZXIiLCBuZXcgTnVtYmVy
KDQpXSkgewpAQCAtMjI2LDEzICsxODQsNiBAQCBmb3IgKCBsZXQgaW1wIG9mIFt1bmRlZmluZWQs
IG51bGwsIHt9LCAoKSA9PiB7fSwgIm51bWJlciIsIG5ldyBOdW1iZXIoNCldKSB7CiAgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBs
ZXQgcGFzc2VkID0gZmFsc2U7CiAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4uZ2V0KCkpOwotICAgIHRyeSB7Ci0gICAgICAgIG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIHsgaW1wOiB7IGdsb2JhbDogaW1wIH0gfSk7Ci0gICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICBpZiAoZS5tZXNzYWdlID09PSAiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBu
dW1iZXIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1w
OiB7IGdsb2JhbDogaW1wIH0gfSknKSIpCi0gICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwotICAg
IH0KLSAgICBhc3NlcnQudHJ1dGh5KHBhc3NlZCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBnbG9iYWw6IGltcCB9IH0p
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51
bWJlciAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6
IHsgZ2xvYmFsOiBpbXAgfSB9KScpIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggNjAwOGNkYy4uODRmMGMzNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAt
MTM3LDUyICsxMzcsNjUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNz
aW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCisgICAgdHlwZWRlZiBTdHJpbmcg
RXJyb3JUeXBlOworICAgIHR5cGVkZWYgVW5leHBlY3RlZFR5cGU8RXJyb3JUeXBlPiBVbmV4cGVj
dGVkUmVzdWx0OworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRl
cm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2
b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4u
LkFyZ3M+CisgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNw
YWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoQVNDSUlMaXRlcmFsKCJX
ZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIiksIG1ha2VTdHJpbmcoYXJncyku
Li4pKTsKKyAgICB9CisjZGVmaW5lIFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4u
KSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICBc
CisgICAgfSB3aGlsZSAoMCkKKwogICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNl
Jik7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVj
dG9yPFR5cGU+Jik7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwg
dWludDMyX3QpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3Vt
ZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRk
Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwogCiAgICAgLy8gTG9jYWxzCi0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAKICAgICAvLyBHbG9iYWxzCi0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2Jh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwogCiAgICAgLy8gTWVtb3J5
Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOwot
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNl
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5
cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCBvZmZzZXQpOwogCiAgICAgLy8gQmFzaWMgb3BlcmF0b3JzCiAgICAgdGVtcGxhdGU8T3BUeXBl
PgotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
ICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3Ao
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBl
IHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9u
VHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKIAogICAgIC8vIENvbnRyb2wgZmxvdwogICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CiAgICAgQ29udHJvbERhdGEgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwotICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENv
bnRyb2xEYXRhJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2Uo
Q29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Np
b25MaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRv
VW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVs
dFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVu
ZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9s
RGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
IHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFj
ayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNo
YWJsZShDb250cm9sRW50cnkmKTsKIAogICAgIC8vIENhbGxzCi0gICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlKiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVy
ZSosIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3Qg
Y2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIHZvaWQgZHVt
cChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAotICAgIHZvaWQgc2V0RXJyb3JNZXNzYWdlKFN0
cmluZyYmKSB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9Ci0KIHByaXZhdGU6CiAgICAg
RXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAgRXhwcmVz
c2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CkBAIC0yOTAsMjQgKzMwMywyMiBAQCBWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6emVyb0ZvclR5cGUoVHlwZSB0eXBlKQogICAgIHJldHVybiB6ZXJvVmFsdWU7
CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBj
b3VudCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBj
b3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGlmICghbV9sb2NhbHMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9s
b2NhbHMuc2l6ZSgpICsgY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBtX2xv
Y2Fscy5zaXplKCkgKyBjb3VudCwgIiBsb2NhbHMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFZhcmlhYmxlKiBsb2NhbCA9IG1fcHJvYy5h
ZGRWYXJpYWJsZSh0b0IzVHlwZSh0eXBlKSk7CiAgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFw
cGVuZChsb2NhbCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgemVyb0ZvclR5cGUodHlwZSkpOwog
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJH
ZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKQorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiB0eXBlcykgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKLSAgICBpZiAo
IW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0eXBlcy5zaXplKCkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVD
YXBhY2l0eSh0eXBlcy5zaXplKCkpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0eXBl
cy5zaXplKCksICIgYXJndW1lbnRzIik7CiAKICAgICBtX2xvY2Fscy5ncm93KHR5cGVzLnNpemUo
KSk7CiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyh0eXBlcywgbV9w
cm9jLCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCksCkBAIC0zMTYsMzYgKzMyNywzNiBAQCBib29s
IEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKQog
ICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBhcmd1bWVudFZhcmlhYmxlOwogICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3Jp
Z2luKCksIGFyZ3VtZW50VmFyaWFibGUsIGFyZ3VtZW50KTsKICAgICAgICAgfSk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjpnZXRM
b2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKICAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywg
QjM6OkdldCwgT3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpCithdXRvIEIzSVJHZW5lcmF0b3I6OnNldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwogICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6U2V0LCBPcmlnaW4oKSwgbV9sb2Nh
bHNbaW5kZXhdLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYm9vbCBCM0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFZh
bHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpOwogICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9C
M1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGUpLCBPcmlnaW4oKSwgZ2xvYmFsc0FycmF5
LCBpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIEFTU0VSVCh0b0IzVHlwZShtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSkgPT0gdmFsdWUt
PnR5cGUoKSk7CiAgICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCks
IG1faW5zdGFuY2VWYWx1ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMo
KSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgT3JpZ2luKCksIHZhbHVlLCBnbG9iYWxzQXJyYXksIGluZGV4ICogc2l6ZW9mKFJlZ2lz
dGVyKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogaW5saW5lIFZh
bHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikK
QEAgLTQ0NiwxMiArNDU3LDEyIEBAIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExv
YWRPcChMb2FkT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjpsb2FkKExv
YWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQsIHVpbnQzMl90IG9mZnNldCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50
MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQocG9pbnRlci0+dHlw
ZSgpID09IEludDMyKTsKIAogICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIE9yaWdpbigpLCBl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChv
cCkpLCBvZmZzZXQpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIGlu
bGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQpAQCAtNTA4LDE4ICs1
MTksMTggQEAgaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5
cGUgb3AsIE9yaWdpbiBvcmlnaW4sIEV4cHJlc3Npb24KICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qg
b2Zmc2V0KQorYXV0byBCM0lSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIp
OwogCiAgICAgZW1pdFN0b3JlT3Aob3AsIE9yaWdpbigpLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9p
bnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSwgdmFsdWUsIG9mZnNldCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJh
dG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBu
b25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHBy
ZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBPcmlnaW4oKSwgY29uZGl0aW9u
LCBub25aZXJvLCB6ZXJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQog
CiBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFu
dChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQpAQCAtNTU3LDcgKzU2OCw3IEBAIEIzSVJHZW5l
cmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUp
CiAgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxv
b3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkSWYo
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJl
c3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGRvIHNvbWUga2luZCBvZiBzdGFjayBwYXNz
aW5nLgogCkBAIC01NzIsMzUgKzU4MywzNSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJgogCiAg
ICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKICAgICByZXN1bHQgPSBDb250cm9sRGF0YShtX3By
b2MsIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9y
OjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgY3VycmVu
dFN0YWNrKQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CiAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIE9yaWdp
bigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxl
KGRhdGEpOwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xEYXRhJiBkYXRhKQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChkYXRh
LnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3Bl
Y2lhbDsKICAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1
cm4oY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOwogICAgIGlmIChyZXR1cm5W
YWx1ZXMuc2l6ZSgpKQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCksIHJldHVyblZhbHVlc1swXSk7CiAgICAg
ZWxzZQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgQjM6OlJldHVybiwgT3JpZ2luKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7
IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRh
LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5W
YWx1ZXMpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwg
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFs
dWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgaWYgKGRhdGEudHlwZSgpICE9IEJsb2NrVHlw
ZTo6TG9vcCkKICAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRh
LnJlc3VsdCk7CkBAIC02MTgsMTAgKzYyOSwxMCBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZEJy
YW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdAog
ICAgICAgICB0YXJnZXQtPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICB9CiAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0
b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250
cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
IHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQogICAgICAgICB1bmlmeVZhbHVlc1dpdGhC
bG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnJlc3VsdCk7CkBAIC02MzIsMTAgKzY0
MywxMCBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2Uo
U3dpdGNoQ2FzZShpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JC
cmFuY2goKSkpKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJv
b2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK2F1dG8gQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29u
dHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7
CiAKQEAgLTY0Nyw3ICs2NTgsNyBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRy
b2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhYwogfQogCiAKLWJv
b2wgQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5
KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYg
ZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5
LmNvbnRyb2xEYXRhOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247CkBA
IC02NjAsMTAgKzY3MSwxMCBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFi
bGUoQ29udHJvbEVudHJ5JiBlbnRyeSkKICAgICBmb3IgKFZhcmlhYmxlKiByZXN1bHQgOiBkYXRh
LnJlc3VsdCkKICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBP
cmlnaW4oKSwgcmVzdWx0KSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9Owog
fQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBBU1NFUlQoc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID09IGFyZ3Mu
c2l6ZSgpKTsKIApAQCAtNjg2LDEwICs2OTcsMTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLAog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsK
ICAgICBBU1NFUlQoc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID09IGFyZ3Muc2l6ZSgpKTsK
QEAgLTc2MCw3ICs3NzEsNyBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChj
b25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0pOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJpYWJsZSogdmFyaWFibGUsIEV4cHJlc3Np
b25UeXBlIHNvdXJjZSkKQEAgLTg4OCwxNSArODk5LDE0IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8Q29tcGlsYXRpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0sIFdhc21JbnRlcm5h
bEZ1CiAgICAgcmV0dXJuIGpzRW50cnlwb2ludDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdhc21J
bnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBm
dW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2ln
bmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIG9wdExldmVsKQor
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBJbW11
dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFjZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIG9wdExldmVsKQogewogICAgIGF1dG8gcmVzdWx0
ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4oKTsKIAogICAgIFByb2Nl
ZHVyZSBwcm9jZWR1cmU7CiAgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KHZtLCBpbmZvLCBwcm9j
ZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5k
ZXhTcGFjZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRl
eHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgaW5mbyk7Ci0gICAgaWYgKCFwYXJzZXIucGFyc2UoKSkKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlci5wYXJzZSgpKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAg
IHZhbGlkYXRlKHByb2NlZHVyZSwgIkFmdGVyIHBhcnNpbmc6XG4iKTsKQEAgLTkxMCwxMyArOTIw
LDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21w
aWxlKFZNJiB2bSwgY29uc3QgdWludDhfdCogZnVuCiAgICAgcmVzdWx0LT53YXNtRW50cnlwb2lu
dC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jZWR1
cmUsIG9wdExldmVsKTsKICAgICByZXN1bHQtPndhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIHJlc3VsdC0+anNU
b1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKHZtLCAq
cmVzdWx0LCBzaWduYXR1cmUsIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNv
ZGUoKSwgaW5mby5tZW1vcnkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0KTsKIH0KIAogLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMg
dG9vIG1lc3N5IHRvIGRvIGluIHdhc20uanNvbi4KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0
ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpKTsK
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAg
LTkyNSwxMSArOTM1LDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJD
dHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAgICAgfSk7CiAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRj
aHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRl
PD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIElu
dDY0LCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNv
bWVSZWdpc3Rlcik7CkBAIC05MzgsMzMgKzk0OCwzMyBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAg
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBwb3BjbnQgaW5zdHJ1Y3Rpb24gaWYgU1NFNCBpcyBh
dmFpbGFibGUgYnV0IHdlIGRvbid0IGhhdmUgY29kZSB0byBkZXRlY3QgU1NFNCB5ZXQuCiAgICAg
Ly8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzYzCiAg
ICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1ZSkgLT4g
dWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVlKTsgfTsKICAgICBWYWx1
ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ocG9wY291bnQpKTsKICAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50
MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHBvcGNu
dCBpbnN0cnVjdGlvbiBpZiBTU0U0IGlzIGF2YWlsYWJsZSBidXQgd2UgZG9uJ3QgaGF2ZSBjb2Rl
IHRvIGRldGVjdCBTU0U0IHlldC4KICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjUzNjMKICAgICB1aW50NjRfdCAoKnBvcGNvdW50KShpbnQ2NF90
KSA9IFtdIChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9w
Y291bnRsbCh2YWx1ZSk7IH07CiAgICAgVmFsdWUqIGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHBvcGNvdW50KSk7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgp
LCBmdW5jQWRkcmVzcywgYXJnKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBEb3VibGUsIE9yaWdpbigpKTsKICAgICBpZiAoaXNYODYoKSkKQEAgLTk4MCwx
MSArOTkwLDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJv
b2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBGbG9hdCwgT3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQpAQCAtMTAwMCwxMSAr
MTAxMCwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJ
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvbgogICAgIH0pOwogICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29s
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERv
dWJsZSwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpOwpAQCAtMTAxMywxMSArMTAyMywxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMDI2LDExICsxMDM2
LDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIE9y
aWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKQEAgLTEwMzksMTEgKzEwNDksMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQog
CiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgRmxvYXQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEwNTIsMTEgKzEwNjIsMTEgQEAgYm9vbCBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJgogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOwogICAgIFZhbHVlKiBtaW4gPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKTsKQEAgLTEwNzUsMTEgKzEwODUsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAg
ICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5j
U0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFs
dWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3By
b2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSk7CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKQEAgLTEwOTgsMTIgKzExMDgs
MTIgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNf
Y2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjAp
OwogICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91Ymxl
VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwpAQCAtMTEyMiwxMSArMTEzMiwxMSBAQCBi
b29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKTsKICAgICBWYWx1
ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIC0xLjApOwpAQCAtMTE0NSwxMSArMTE1NSwxMSBAQCBib29sIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERv
dWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOwogICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0
YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsK
QEAgLTExNjgsMTEgKzExNzgsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICB9KTsK
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIG1h
eCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+
OjptaW4oKSkgKiAtMi4wKTsKICAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtMS4wKTsKQEAgLTEyMTAs
MTEgKzEyMjAsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
VUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICB9KTsKICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9p
bnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8Pgot
Ym9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIG1heCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAt
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSk7
CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZh
bHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKQEAgLTEyMzMsMTEgKzEyNDMsMTEgQEAgYm9vbCBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHkKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0
czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgVmFsdWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCk7CiAgICAgVmFsdWUqIG1pbiA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdp
bigpLCAtMS4wKTsKQEAgLTEyNzUsNyArMTI4NSw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAg
ICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBiYTEwYWEzLi5kZmU2YTQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4
dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKIApAQCAtMzcsNyArMzgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJbmZvcm1hdGlv
bjsKIAotc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBp
bGUoVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3Bh
Y2UmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVy
ZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEltbXV0YWJsZUZ1bmN0
aW9uSW5kZXhTcGFjZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgb3B0TGV2
ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDRlMGVhZmQuLmU0OWE4OTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTYxLDM0ICs2MSw0NSBAQCBpbmxpbmUg
Ym9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAot
c3RydWN0IEV4dGVybmFsIHsKLSAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKLSAgICAgICAgLy8g
RklYTUUgYXV0by1nZW5lcmF0ZSB0aGlzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1MjMxCi0gICAgICAgIEZ1bmN0aW9uID0gMCwKLSAgICAgICAgVGFibGUgPSAx
LAotICAgICAgICBNZW1vcnkgPSAyLAotICAgICAgICBHbG9iYWwgPSAzLAotICAgIH07Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSW50PgotICAgIHN0YXRpYyBib29sIGlzVmFsaWQoSW50IHZhbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAodmFsKSB7Ci0gICAgICAgIGNhc2UgRnVuY3Rpb246Ci0g
ICAgICAgIGNhc2UgVGFibGU6Ci0gICAgICAgIGNhc2UgTWVtb3J5OgotICAgICAgICBjYXNlIEds
b2JhbDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0YXRpY19h
c3NlcnQoRnVuY3Rpb24gPT0gMCwgIldhc20gbmVlZHMgRnVuY3Rpb24gdG8gaGF2ZSB0aGUgdmFs
dWUgMCIpOwotICAgIHN0YXRpY19hc3NlcnQoVGFibGUgICAgPT0gMSwgIldhc20gbmVlZHMgVGFi
bGUgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOwotICAgIHN0YXRpY19hc3NlcnQoTWVtb3J5ICAgPT0g
MiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KEdsb2JhbCAgID09IDMsICJXYXNtIG5lZWRzIEdsb2JhbCB0byBoYXZlIHRoZSB2YWx1
ZSAzIik7CitlbnVtIGNsYXNzIEV4dGVybmFsS2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEZJWE1F
IGF1dG8tZ2VuZXJhdGUgdGhpcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTIzMQorICAgIEZ1bmN0aW9uID0gMCwKKyAgICBUYWJsZSA9IDEsCisgICAgTWVtb3J5
ID0gMiwKKyAgICBHbG9iYWwgPSAzLAogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgSW50Pgorc3Rh
dGljIGJvb2wgaXNWYWxpZEV4dGVybmFsS2luZChJbnQgdmFsKQoreworICAgIHN3aXRjaCAodmFs
KSB7CisgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6RnVuY3Rpb24pOgor
ICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKToKKyAgICBjYXNl
IHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpOgorICAgIGNhc2Ugc3RhdGlj
X2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCk6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpY19h
c3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKSA9PSAwLCAiV2Fz
bSBuZWVkcyBGdW5jdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSAwIik7CitzdGF0aWNfYXNzZXJ0KHN0
YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSkgICAgPT0gMSwgIldhc20gbmVlZHMg
VGFibGUgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOworc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxp
bnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KSAgID09IDIsICJXYXNtIG5lZWRzIE1lbW9yeSB0byBo
YXZlIHRoZSB2YWx1ZSAyIik7CitzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJu
YWxLaW5kOjpHbG9iYWwpICAgPT0gMywgIldhc20gbmVlZHMgR2xvYmFsIHRvIGhhdmUgdGhlIHZh
bHVlIDMiKTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFs
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgRXh0ZXJuYWxLaW5k
OjpGdW5jdGlvbjogcmV0dXJuICJGdW5jdGlvbiI7CisgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRh
YmxlOiByZXR1cm4gIlRhYmxlIjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiByZXR1
cm4gIk1lbW9yeSI7CisgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogcmV0dXJuICJHbG9i
YWwiOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAiPyI7Cit9CisKIHN0cnVjdCBTaWduYXR1cmUgewogICAgIFR5cGUgcmV0dXJuVHlwZTsKICAg
ICBWZWN0b3I8VHlwZT4gYXJndW1lbnRzOwpAQCAtOTcsMTMgKzEwOCwxMyBAQCBzdHJ1Y3QgU2ln
bmF0dXJlIHsKIHN0cnVjdCBJbXBvcnQgewogICAgIElkZW50aWZpZXIgbW9kdWxlOwogICAgIElk
ZW50aWZpZXIgZmllbGQ7Ci0gICAgRXh0ZXJuYWw6OktpbmQga2luZDsKKyAgICBFeHRlcm5hbEtp
bmQga2luZDsKICAgICB1bnNpZ25lZCBraW5kSW5kZXg7IC8vIEluZGV4IGluIHRoZSB2ZWN0b3Ig
b2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4KIH07CiAKIHN0cnVjdCBFeHBvcnQgewogICAgIElk
ZW50aWZpZXIgZmllbGQ7Ci0gICAgRXh0ZXJuYWw6OktpbmQga2luZDsKKyAgICBFeHRlcm5hbEtp
bmQga2luZDsKICAgICB1bnNpZ25lZCBraW5kSW5kZXg7IC8vIEluZGV4IGluIHRoZSB2ZWN0b3Ig
b2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggMjMxYzBhMS4uOTA1MzQ2OSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAg
LTM5LDcgKzM5LDcgQEAgZW51bSBjbGFzcyBCbG9ja1R5cGUgewogfTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGV4dD4KLWNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlciB7Citj
bGFzcyBGdW5jdGlvblBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9pZD4gewogcHVibGljOgogICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvblR5cGUgRXhwcmVzc2lvblR5cGU7
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpDb250cm9sVHlwZSBDb250cm9sVHlwZTsK
QEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYs
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29u
c3QgU2lnbmF0dXJlKiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
KCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwogCiAgICAgc3RydWN0
IENvbnRyb2xFbnRyeSB7CiAgICAgICAgIEV4cHJlc3Npb25MaXN0IGVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrOwpAQCAtNTcsMjUgKzU3LDI2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VCb2R5KCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNz
aW9uKE9wVHlwZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJs
ZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1
cm4oKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZUJvZHkoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybigpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiwgdW5zaWduZWQgbGV2ZWwpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcG9w
RXhwcmVzc2lvblN0YWNrKEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworI2RlZmluZSBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJlc3VsdCwgd2hhdCkgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHBy
ZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgcG9wIGVtcHR5IHN0YWNrIGluICIgd2hhdCk7
IFwKKyAgICAgICAgcmVzdWx0ID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5h
cnlDYXNlKCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5hcnlDYXNl
KCk7CiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
YmluYXJ5Q2FzZSgpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGJpbmFy
eUNhc2UoKTsKIAotICAgIGJvb2wgc2V0RXJyb3JNZXNzYWdlKFN0cmluZyYmIG1lc3NhZ2UpCi0g
ICAgewotICAgICAgICBtX2NvbnRleHQuc2V0RXJyb3JNZXNzYWdlKFdURk1vdmUobWVzc2FnZSkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorI2RlZmluZSBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRfZXhwcmVzc2lvbikgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhtX2NvbnRl
eHQuYWRkX2V4cHJlc3Npb24pCisKKyAgICAvLyBGSVhNRSBhZGQgYSBtYWNybyBhcyBhYm92ZSBm
b3IgV0FTTV9UUllfQVBQRU5EX1RPX0NPTlRST0xfU1RBQ0sgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTg2MgogCiAgICAgQ29udGV4dCYgbV9jb250ZXh0OwogICAg
IEV4cHJlc3Npb25MaXN0IG1fZXhwcmVzc2lvblN0YWNrOwpAQCAtOTksMTE4ICsxMDAsMTA0IEBA
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+
Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpCithdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIGlmICghbV9jb250ZXh0LmFk
ZEFyZ3VtZW50cyhtX3NpZ25hdHVyZS0+YXJndW1lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCiAgICAgdWludDMyX3QgbG9jYWxDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGxv
Y2FsQ291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJlLT5hcmd1bWVudHMpLCAiY2Fu
J3QgYWRkICIsIG1fc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCAiIGFyZ3VtZW50cyB0byBG
dW5jdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGxvY2Fs
Q291bnQpLCAiY2FuJ3QgZ2V0IGxvY2FsIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihsb2NhbENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkZ1
bmN0aW9uIHNlY3Rpb24ncyBsb2NhbCBjb3VudCBpcyB0b28gYmlnICIsIGxvY2FsQ291bnQpOwog
CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxvY2FsQ291bnQ7ICsraSkgewogICAgICAg
ICB1aW50MzJfdCBudW1iZXJPZkxvY2FsczsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihu
dW1iZXJPZkxvY2FscykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgVHlw
ZSB0eXBlT2ZMb2NhbDsKLSAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2NhbCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRk
TG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobnVtYmVy
T2ZMb2NhbHMpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uJ3MgbnVtYmVyIG9mIGxvY2FscyBpbiBncm91
cCAiLCBpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihudW1iZXJPZkxvY2FscyA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJGdW5jdGlvbiBzZWN0aW9uJ3Mg
IiwgaSwgInRoIGxvY2FsIGdyb3VwIGNvdW50IGlzIHRvbyBiaWcgIiwgbnVtYmVyT2ZMb2NhbHMp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2Nh
bCksICJjYW4ndCBnZXQgRnVuY3Rpb24gbG9jYWwncyB0eXBlIGluIGdyb3VwICIsIGkpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuYWRkTG9jYWwodHlwZU9mTG9jYWws
IG51bWJlck9mTG9jYWxzKSwgImNhbid0IGFkZCAiLCBudW1iZXJPZkxvY2FscywgIiBGdW5jdGlv
biBsb2NhbHMgZnJvbSBncm91cCAiLCBpKTsKICAgICB9CiAKLSAgICByZXR1cm4gcGFyc2VCb2R5
KCk7CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUJvZHkoKSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCb2R5KCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlQm9keSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICB1aW50OF90IG9wOwotICAgICAgICBpZiAoIXBhcnNlVUludDgob3ApIHx8ICFpc1Zh
bGlkT3BUeXBlKG9wKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgV1RGOjpkYXRhTG9nTG4oImF0dGVtcHRlZCB0byBkZWNvZGUgaW52YWxpZCBvcDogIiwgUmF3
UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihvcCkpLCAiIGF0IG9mZnNldDogIiwgUmF3
UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVVJbnQ4KG9wKSwgImNhbid0IGRlY29kZSBvcGNvZGUiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighaXNWYWxpZE9wVHlwZShvcCksICJpbnZhbGlkIG9wY29kZSAiLCBvcCk7CiAK
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigicHJvY2Vzc2lu
ZyBvcCAoIiwgbV91bnJlYWNoYWJsZUJsb2NrcywgIik6ICIsICBSYXdQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG9wKSksICIgYXQgb2Zmc2V0OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwogICAgICAgICAgICAgbV9jb250ZXh0LmR1bXAo
bV9jb250cm9sU3RhY2ssIG1fZXhwcmVzc2lvblN0YWNrKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChvcCA9PSBPcFR5cGU6OkVuZCAmJiAhbV9jb250cm9sU3RhY2suc2l6ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fdW5yZWFjaGFibGVCbG9ja3MgPyB0cnVlIDogYWRkUmV0dXJuKCk7Ci0K
LSAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpIHsKLSAgICAgICAgICAgIGlmICghcGFy
c2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
ZmFpbGVkIHRvIHByb2Nlc3MgdW5yZWFjaGFibGUgb3A6Iiwgb3ApOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghcGFyc2VF
eHByZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSkgewotICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcHJvY2VzcyBvcDoi
LCBvcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvcCA9PSBPcFR5
cGU6OkVuZCAmJiAhbV9jb250cm9sU3RhY2suc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAobV91
bnJlYWNoYWJsZUJsb2NrcykKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAg
ICAgcmV0dXJuIGFkZFJldHVybigpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fdW5yZWFj
aGFibGVCbG9ja3MpCisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
VW5yZWFjaGFibGVFeHByZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VFeHByZXNz
aW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWJvb2wg
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmFkZFJldHVybigpCithdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjphZGRSZXR1cm4oKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lv
bkxpc3QgcmV0dXJuVmFsdWVzOwogICAgIGlmIChtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZSAhPSBW
b2lkKSB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJldHVyblZhbHVlOwotICAgICAgICBpZiAo
IXBvcEV4cHJlc3Npb25TdGFjayhyZXR1cm5WYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmV0dXJuVmFs
dWUsICJyZXR1cm4iKTsKICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChyZXR1cm5WYWx1ZSk7
CiAgICAgfQogCiAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKKyAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRSZXR1cm4ocmV0dXJuVmFsdWVzKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQ29udGV4dD4KIHRlbXBsYXRlPE9wVHlwZSBvcD4KLWJvb2wgRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OmJpbmFyeUNhc2UoKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6YmluYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSBy
aWdodDsKLSAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyaWdodCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQogICAgIEV4cHJlc3Npb25UeXBlIGxlZnQ7Ci0gICAgaWYgKCFwb3BFeHByZXNz
aW9uU3RhY2sobGVmdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIEV4cHJlc3Npb25U
eXBlIHJlc3VsdDsKLSAgICBpZiAoIW1fY29udGV4dC50ZW1wbGF0ZSBhZGRPcDxvcD4obGVmdCwg
cmlnaHQsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmlnaHQsICJiaW5hcnkgcmlnaHQiKTsKKyAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGxlZnQsICJiaW5hcnkgbGVmdCIpOworICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCByaWdodCwg
cmVzdWx0KSk7CisKICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
ZXh0PgogdGVtcGxhdGU8T3BUeXBlIG9wPgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
dW5hcnlDYXNlKCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZSgpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICBpZiAoIXBv
cEV4cHJlc3Npb25TdGFjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICBpZiAoIW1fY29udGV4dC50ZW1wbGF0ZSBhZGRPcDxv
cD4odmFsdWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdBU01fVFJZ
X1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJ1bmFyeSIpOworICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPih2YWx1ZSwgcmVzdWx0KSk7CisKICAg
ICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkKK2F1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUs
IGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gYmluYXJ5Q2FzZTxPcFR5
cGU6Om5hbWU+KCk7CkBAIC0yNDEsMzEzICsyMjgsMjM2IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAKICAgICBjYXNlIE9wVHlwZTo6
U2VsZWN0OiB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYg
KCFwb3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQogICAgICAgICBFeHByZXNzaW9uVHlwZSB6ZXJvOwotICAgICAgICBpZiAoIXBvcEV4cHJl
c3Npb25TdGFjayh6ZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBF
eHByZXNzaW9uVHlwZSBub25aZXJvOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhu
b25aZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNX1RSWV9Q
T1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgInNlbGVjdCBjb25kaXRpb24iKTsK
KyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh6ZXJvLCAic2VsZWN0
IHplcm8iKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhub25a
ZXJvLCAic2VsZWN0IG5vbi16ZXJvIik7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
OwotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6
ZXJvLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvLCByZXN1
bHQpKTsKIAogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAjZGVmaW5lIENS
RUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgogICAgIEZP
Ul9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NBU0UpIHsKICAgICAgICAgdWludDMy
X3QgYWxpZ25tZW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlcjsKLSAgICAgICAgaWYgKCFwb3BF
eHByZXNzaW9uU3RhY2socG9pbnRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4dC5sb2Fk
KHN0YXRpY19jYXN0PExvYWRPcFR5cGU+KG9wKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IGxvYWQgYWxpZ25tZW50Iik7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4n
dCBnZXQgbG9hZCBvZmZzZXQiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyhwb2ludGVyLCAibG9hZCBwb2ludGVyIik7CisgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4ob3ApLCBwb2ludGVyLCByZXN1
bHQsIG9mZnNldCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
Rk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpIHsKICAgICAgICAgdWlu
dDMyX3QgYWxpZ25tZW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3Qgb2Zmc2V0Owot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgICAgIGlmICghcG9w
RXhwcmVzc2lvblN0YWNrKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAg
ICAgICBFeHByZXNzaW9uVHlwZSBwb2ludGVyOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25T
dGFjayhwb2ludGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1
cm4gbV9jb250ZXh0LnN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihvcCksIHBvaW50ZXIs
IHZhbHVlLCBvZmZzZXQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IHN0b3JlIGFsaWdubWVudCIpOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IHN0
b3JlIG9mZnNldCIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KHZhbHVlLCAic3RvcmUgdmFsdWUiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05f
U1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9pbnRlciIpOworICAgICAgICBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4ob3ApLCBwb2ludGVy
LCB2YWx1ZSwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogI3VuZGVmIENS
RUFURV9DQVNFCiAKICAgICBjYXNlIE9wVHlwZTo6RjMyQ29uc3Q6CiAgICAgY2FzZSBPcFR5cGU6
OkkzMkNvbnN0OiB7CiAgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY29uc3RhbnQpLCAiY2FuJ3Qg
cGFyc2UgMzItYml0IGNvbnN0YW50Iik7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTMyLCBjb25zdGFudCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RjY0
Q29uc3Q6CiAgICAgY2FzZSBPcFR5cGU6Okk2NENvbnN0OiB7CiAgICAgICAgIHVpbnQ2NF90IGNv
bnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDY0KGNvbnN0YW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgcGFyc2UgNjQtYml0IGNvbnN0YW50Iik7CiAgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0LCBjb25z
dGFudCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKICAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7
Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9j
b250ZXh0LmdldExvY2FsKGluZGV4LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwg
ImNhbid0IGdldCBpbmRleCBmb3IgZ2V0X2xvY2FsIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIW1fY29udGV4dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSwgImNhbid0IGdldF9sb2Nh
bCBhdCBpbmRleCIsIGluZGV4KTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJl
c3VsdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAogICAgIGNhc2UgT3BUeXBlOjpTZXRMb2NhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsK
LSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwotICAgICAgICBpZiAoIXBvcEV4
cHJlc3Npb25TdGFjayh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZv
ciBzZXRfbG9jYWwiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5U
Tyh2YWx1ZSwgInNldF9sb2NhbCIpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChz
ZXRMb2NhbChpbmRleCwgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBjYXNlIE9wVHlwZTo6VGVlTG9jYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIW1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5zZXRMb2NhbChpbmRleCwgbV9l
eHByZXNzaW9uU3RhY2subGFzdCgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciB0ZWVfbG9jYWwiKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5pc0VtcHR5KCksICJj
YW4ndCB0ZWVfbG9jYWwgb24gZW1wdHkgZXhwcmVzc2lvbiBzdGFjayIpOworICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChzZXRMb2NhbChpbmRleCwgbV9leHByZXNzaW9uU3RhY2subGFz
dCgpKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6Okdl
dEdsb2JhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuZ2V0R2xvYmFsKGluZGV4
LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFs
J3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0R2xvYmFsKGlu
ZGV4LCByZXN1bHQpKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAg
IGNhc2UgT3BUeXBlOjpTZXRHbG9iYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKCFwb3BFeHByZXNz
aW9uU3RhY2sodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgc2V0X2ds
b2JhbCdzIGluZGV4Iik7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lO
VE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKICAgICAgICAgcmV0dXJuIG1fY29udGV4
dC5zZXRHbG9iYWwoaW5kZXgsIHZhbHVlKTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Q2Fs
bDogewogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGlmIChmdW5jdGlvbkluZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgcGFyc2UgY2FsbCdzIGZ1bmN0aW9u
IGluZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBt
X2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlv
bkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9mdW5jdGlvbkluZGV4
U3BhY2Uuc2l6ZSk7CiAKICAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBjYWxsZWVTaWduYXR1cmUg
PSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIuZ2V0KClbZnVuY3Rpb25JbmRleF0uc2lnbmF0
dXJlOwotCi0gICAgICAgIGlmIChjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPiBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgp
ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5j
dGlvbkluZGV4LCAiIGhhcyAiLCBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICIg
YXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAogICAgICAgICBzaXplX3QgZmly
c3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2lnbmF0
dXJlLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFy
Z3M7Ci0gICAgICAgIGFyZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUt
PmFyZ3VtZW50cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdEFyZ3Vt
ZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVu
dHMuc2l6ZSgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBj
YWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICIgYXJndW1lbnRzIik7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVz
c2lvblN0YWNrW2ldKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJn
dW1lbnRJbmRleCk7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6
ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRDYWxsKGZ1bmN0aW9u
SW5kZXgsIGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbChmdW5jdGlv
bkluZGV4LCBjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpDYWxsSW5kaXJlY3Q6
IHsKLSAgICAgICAgaWYgKCFtX2luZm8udGFibGVJbmZvcm1hdGlvbikKLSAgICAgICAgICAgIHJl
dHVybiBzZXRFcnJvck1lc3NhZ2UoImNhbGxfaW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEg
dGFibGUgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOwogICAgICAgICB1aW50MzJfdCBzaWduYXR1
cmVJbmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzaWduYXR1cmVJbmRleCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDhfdCByZXNlcnZlZDsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAocmVzZXJ2ZWQgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBz
ZXRFcnJvck1lc3NhZ2UoImNhbGxfaW5kaXJlY3QgJ3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJl
IDB4MCIpOwotCi0gICAgICAgIGlmIChtX2luZm8uc2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0
dXJlSW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3JNZXNzYWdlKCJUcmllZCB0byB1
c2UgYSBzaWduYXR1cmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdmFsaWQgc2lnbmF0dXJlcyIpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8udGFibGVJbmZvcm1hdGlvbiwgImNh
bGxfaW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEgdGFibGUgaXMgZGVmaW5lZCBvciBpbXBv
cnRlZCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzaWdu
YXR1cmVJbmRleCksICJjYW4ndCBnZXQgY2FsbF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSwg
ImNhbid0IGdldCBjYWxsX2luZGlyZWN0J3MgcmVzZXJ2ZWQgYnl0ZSIpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHJlc2VydmVkLCAiY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFy
dWludDEgbXVzdCBiZSAweDAiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8u
c2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mgc2ln
bmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0dXJl
cyAiLCBtX2luZm8uc2lnbmF0dXJlcy5zaXplKCkpOwogCiAgICAgICAgIGNvbnN0IFNpZ25hdHVy
ZSogY2FsbGVlU2lnbmF0dXJlID0gJm1faW5mby5zaWduYXR1cmVzW3NpZ25hdHVyZUluZGV4XTsK
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50
cy5zaXplKCkgKyAxOyAvLyBBZGQgdGhlIGNhbGxlZSdzIGluZGV4LgotICAgICAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVy
biBzZXRFcnJvck1lc3NhZ2UoIk5vdCBlbm91Z2ggdmFsdWVzIG9uIHRoZSBzdGFjayBmb3IgY2Fs
bF9pbmRpcmVjdCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQg
PiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsX2luZGlyZWN0IGV4cGVjdHMgIiwgYXJn
dW1lbnRDb3VudCwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50
bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCiAgICAg
ICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKLSAgICAgICAgaWYgKCFhcmdzLnRyeVJl
c2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBzZXRFcnJv
ck1lc3NhZ2UoIk91dCBvZiBtZW1vcnkiKTsKLQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRl
IGVub3VnaCBtZW1vcnkgZm9yICIsIGFyZ3VtZW50Q291bnQsICIgY2FsbF9pbmRpcmVjdCBhcmd1
bWVudHMiKTsKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKSAtIGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZCht
X2V4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhm
aXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENv
bnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbElu
ZGlyZWN0KGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbEluZGlyZWN0
KGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0KSk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5hcHBlbmQocmVzdWx0KTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6QmxvY2s6IHsKICAgICAgICAgVHlwZSBp
bmxpbmVTaWduYXR1cmU7Ci0gICAgICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25h
dHVyZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgYmxv
Y2sncyBpbmxpbmUgc2lnbmF0dXJlIik7CiAgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7
IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBtX2NvbnRleHQuYWRkQmxvY2soaW5saW5lU2ln
bmF0dXJlKSB9KTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBFeHByZXNzaW9uTGlzdCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBjYXNlIE9wVHlwZTo6TG9vcDogewogICAgICAgICBUeXBlIGlubGluZVNpZ25hdHVyZTsKLSAg
ICAgICAgaWYgKCFwYXJzZVJlc3VsdFR5cGUoaW5saW5lU2lnbmF0dXJlKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3Vs
dFR5cGUoaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBsb29wJ3MgaW5saW5lIHNpZ25hdHVy
ZSIpOwogICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lv
blN0YWNrKSwgbV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSB9KTsKICAgICAgICAg
bV9leHByZXNzaW9uU3RhY2sgPSBFeHByZXNzaW9uTGlzdCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6SWY6IHsK
ICAgICAgICAgVHlwZSBpbmxpbmVTaWduYXR1cmU7Ci0gICAgICAgIGlmICghcGFyc2VSZXN1bHRU
eXBlKGlubGluZVNpZ25hdHVyZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAg
ICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25T
dGFjayhjb25kaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIENv
bnRyb2xUeXBlIGNvbnRyb2w7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZElmKGNvbmRpdGlv
biwgaW5saW5lU2lnbmF0dXJlLCBjb250cm9sKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUoaW5saW5lU2ln
bmF0dXJlKSwgImNhbid0IGdldCBpZidzIGlubGluZSBzaWduYXR1cmUiKTsKKyAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25kaXRpb24sICJpZiBjb25kaXRpb24i
KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkSWYoY29uZGl0aW9uLCBpbmxp
bmVTaWduYXR1cmUsIGNvbnRyb2wpKTsKICAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsg
V1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIGNvbnRyb2wgfSk7CiAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRyb2xTdGFjay5zaXplKCkpIHsKLSAgICAgICAgICAgIHNldEVycm9yTWVz
c2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBlbHNlIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBm
dW5jdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFtX2NvbnRleHQuYWRkRWxzZShtX2NvbnRyb2xTdGFjay5sYXN0KCkuY29udHJvbERh
dGEsIG1fZXhwcmVzc2lvblN0YWNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5pc0VtcHR5KCksICJjYW4ndCB1
c2UgZWxzZSBibG9jayBhdCB0aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsKKyAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRWxzZShtX2NvbnRyb2xTdGFjay5sYXN0KCkuY29u
dHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LnNocmluaygwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkJyOgogICAgIGNhc2UgT3BUeXBlOjpCcklmOiB7CiAg
ICAgICAgIHVpbnQzMl90IHRhcmdldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0YXJn
ZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uID0gQ29udGV4dDo6
ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBpZiAob3AgPT0gT3BUeXBlOjpCcklmKSB7Ci0gICAg
ICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhjb25kaXRpb24pKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKHRhcmdldCksICJjYW4ndCBnZXQgYnIgLyBicl9pZidzIHRh
cmdldCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhcmdldCA+PSBtX2NvbnRyb2xT
dGFjay5zaXplKCksICJiciAvIGJyX2lmJ3MgdGFyZ2V0ICIsIHRhcmdldCwgIiBleGNlZWRzIGNv
bnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOworICAgICAgICBpZiAo
b3AgPT0gT3BUeXBlOjpCcklmKQorICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05f
U1RBQ0tfSU5UTyhjb25kaXRpb24sICJiciAvIGJyX2lmIGNvbmRpdGlvbiIpOworICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKIAogICAgICAgICBDb250
cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEg
LSB0YXJnZXRdLmNvbnRyb2xEYXRhOwogCi0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkQnJh
bmNoKGRhdGEsIGNvbmRpdGlvbiwgbV9leHByZXNzaW9uU3RhY2spOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRCcmFuY2goZGF0YSwgY29uZGl0aW9uLCBtX2V4cHJlc3Npb25T
dGFjaykpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpC
clRhYmxlOiB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mVGFyZ2V0czsKLSAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMihudW1iZXJPZlRhcmdldHMpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247CisgICAgICAgIHVpbnQzMl90
IGRlZmF1bHRUYXJnZXQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG51bWJlck9mVGFyZ2V0cyksICJjYW4ndCBnZXQgdGhlIG51bWJlciBvZiB0YXJnZXRzIGZv
ciBicl90YWJsZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG51bWJlck9mVGFyZ2V0
cyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJicl90YWJsZSdzIG51
bWJlciBvZiB0YXJnZXRzIGlzIHRvbyBiaWcgIiwgbnVtYmVyT2ZUYXJnZXRzKTsKIAogICAgICAg
ICBWZWN0b3I8Q29udHJvbFR5cGUqPiB0YXJnZXRzOwotICAgICAgICBpZiAoIXRhcmdldHMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mVGFyZ2V0cykpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighdGFyZ2V0cy50cnlSZXNlcnZlQ2Fw
YWNpdHkobnVtYmVyT2ZUYXJnZXRzKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgbnVt
YmVyT2ZUYXJnZXRzLCAiIGJyX3RhYmxlIHRhcmdldHMiKTsKICAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IG51bWJlck9mVGFyZ2V0czsgKytpKSB7CiAgICAgICAgICAgICB1aW50MzJf
dCB0YXJnZXQ7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHRhcmdldCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID49IG1f
Y29udHJvbFN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhcmdldCksICJj
YW4ndCBnZXQgIiwgaSwgInRoIHRhcmdldCBmb3IgYnJfdGFibGUiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyX3Rh
YmxlJ3MgIiwgaSwgInRoIHRhcmdldCAiLCB0YXJnZXQsICIgZXhjZWVkcyBjb250cm9sIHN0YWNr
IHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKICAgICAgICAgICAgIHRhcmdldHMudW5j
aGVja2VkQXBwZW5kKCZtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0g
dGFyZ2V0XS5jb250cm9sRGF0YSk7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50MzJfdCBkZWZh
dWx0VGFyZ2V0OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGRlZmF1bHRUYXJnZXQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChkZWZhdWx0VGFyZ2V0ID49
IG1fY29udHJvbFN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lv
blN0YWNrKGNvbmRpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRTd2l0Y2goY29uZGl0aW9uLCB0YXJnZXRzLCBtX2Nv
bnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gZGVmYXVsdFRhcmdldF0uY29u
dHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGVmYXVsdFRhcmdl
dCksICJjYW4ndCBnZXQgZGVmYXVsdCB0YXJnZXQgZm9yIGJyX3RhYmxlIik7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZGVmYXVsdFRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCks
ICJicl90YWJsZSdzIGRlZmF1bHQgdGFyZ2V0ICIsIGRlZmF1bHRUYXJnZXQsICIgZXhjZWVkcyBj
b250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhjb25kaXRpb24sICJicl90YWJsZSBjb25k
aXRpb24iKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkU3dpdGNoKGNvbmRp
dGlvbiwgdGFyZ2V0cywgbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAt
IGRlZmF1bHRUYXJnZXRdLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogCiAgICAg
ICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6UmV0dXJuOiB7CkBAIC01
NTksODEgKzQ2OSw3NyBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJl
c3Npb24oT3BUeXBlIG9wKQogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGxpdHRsZSB3ZWly
ZCBpbiB0aGF0IGl0IHdpbGwgbW9kaWZ5IHRoZSBleHByZXNzaW9uU3RhY2sgZm9yIHRoZSByZXN1
bHQgb2YgdGhlIGJsb2NrLgogICAgICAgICAvLyBUaGF0J3MgYSBsaXR0bGUgdG9vIGVmZmVjdGZ1
bCBmb3IgbWUgYnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBBUEkgcmlnaHQgbm93LgogICAgICAg
ICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTMK
LSAgICAgICAgaWYgKCFtX2NvbnRleHQuZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2sp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5zd2FwKGRhdGEuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlw
ZTo6VW5yZWFjaGFibGU6IHsKICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2Ug
T3BUeXBlOjpEcm9wOiB7Ci0gICAgICAgIGlmICghbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoIkF0dGVtcHRlZCB0byBkcm9wIGFuIGV4cHJl
c3Npb24gZnJvbSBhbiBlbXB0eSBzdGFjay4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCksICJjYW4ndCBkcm9wIG9uIGVtcHR5IHN0YWNrIik7CiAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpOb3A6IHsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6Okdy
b3dNZW1vcnk6CisgICAgICAgIHJldHVybiBmYWlsKCJub3QgeWV0IGltcGxlbWVudGVkOiBncm93
X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KKwogICAgIGNhc2UgT3BU
eXBlOjpDdXJyZW50TWVtb3J5OgotICAgICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRl
ZC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZmFpbCgibm90IHlldCBp
bXBsZW1lbnRlZDogY3VycmVudF9tZW1vcnkiKTsgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50
ZWQuCisKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQ29udGV4dD4KLWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5y
ZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSBvcCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIEFTU0VSVChtX3VucmVhY2hhYmxlQmxvY2tzKTsKICAgICBzd2l0Y2ggKG9wKSB7
CiAgICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9j
a3MgPiAxKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgICAgIENvbnRyb2xFbnRyeSYgZGF0YSA9IG1fY29udHJvbFN0YWNrLmxhc3QoKTsK
ICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7Ci0gICAgICAgIGlmICghbV9jb250ZXh0
LmFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlVG9VbnJl
YWNoYWJsZShkYXRhLmNvbnRyb2xEYXRhKSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNo
cmluaygwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCiAgICAgY2FzZSBPcFR5cGU6OkVuZDogewogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJs
b2NrcyA9PSAxKSB7CiAgICAgICAgICAgICBDb250cm9sRW50cnkgZGF0YSA9IG1fY29udHJvbFN0
YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRFbmRUb1VucmVh
Y2hhYmxlKGRhdGEpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVuZFRvVW5yZWFjaGFibGUoZGF0YSkpOwogICAg
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrKTsKICAgICAgICAgfQogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzLS07Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BU
eXBlOjpMb29wOgogICAgIGNhc2UgT3BUeXBlOjpJZjoKICAgICBjYXNlIE9wVHlwZTo6QmxvY2s6
IHsKICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcysrOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICAvLyB0d28gaW1tZWRpYXRlIGNhc2Vz
CiAgICAgY2FzZSBPcFR5cGU6OkJyOgogICAgIGNhc2UgT3BUeXBlOjpCcklmOiB7CiAgICAgICAg
IHVpbnQzMl90IHVudXNlZDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIo
dW51c2VkKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodW51
c2VkKSwgImNhbid0IGdldCBiciAvIGJyX2lmIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodW51c2VkKSwgImNhbid0
IGdldCBiciAvIGJyX2lmIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICAvLyBvbmUgaW1tZWRpYXRlIGNhc2VzCkBAIC02NDQsMjUgKzU1
MCwxNCBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhw
cmVzc2lvbihPcFR5cGUgb3ApCiAgICAgY2FzZSBPcFR5cGU6OlNldExvY2FsOgogICAgIGNhc2Ug
T3BUeXBlOjpHZXRMb2NhbDogewogICAgICAgICB1aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIHJl
dHVybiBwYXJzZVZhclVJbnQzMih1bnVzZWQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMih1bnVzZWQpLCAiY2FuJ3QgZ2V0IGNvbnN0IC8gbG9jYWwgaW4gdW5y
ZWFjaGFibGUgY29udGV4dCIpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBv
cEV4cHJlc3Npb25TdGFjayhFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIGlmIChtX2V4
cHJlc3Npb25TdGFjay5zaXplKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9leHByZXNzaW9uU3Rh
Y2sudGFrZUxhc3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc2V0RXJy
b3JNZXNzYWdlKCJBdHRlbXB0ZWQgdG8gdXNlIGEgc3RhY2sgdmFsdWUgd2hlbiBub25lIGV4aXN0
ZWQiKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggMDBlZjgyOS4uMDkyNGZjOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTM5LDE4OSArMzksMTEw
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKLQotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKK2F1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIG1fbW9kdWxlID0gc3RkOjpt
YWtlX3VuaXF1ZTxNb2R1bGVJbmZvcm1hdGlvbj4oKTsKLQorICAgIG1fcmVzdWx0Lm1vZHVsZSA9
IHN0ZDo6bWFrZV91bmlxdWU8TW9kdWxlSW5mb3JtYXRpb24+KCk7CiAgICAgY29uc3Qgc2l6ZV90
IG1pblNpemUgPSA4OwotICAgIGlmIChsZW5ndGgoKSA8IG1pblNpemUpIHsKLSAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSAiTW9kdWxlIGlzICIgKyBTdHJpbmc6Om51bWJlcihsZW5ndGgoKSkgKyAi
IGJ5dGVzLCBleHBlY3RlZCBhdCBsZWFzdCAiICsgU3RyaW5nOjpudW1iZXIobWluU2l6ZSkgKyAi
IGJ5dGVzIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWNvbnN1bWVD
aGFyYWN0ZXIoMCkgfHwgIWNvbnN1bWVTdHJpbmcoImFzbSIpKSB7Ci0gICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gIk1vZHVsZXMgZG9lc24ndCBzdGFydCB3aXRoICdcXDBhc20nIjsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIHVpbnQzMl90IHZlcnNpb25OdW1iZXI7Ci0gICAg
aWYgKCFwYXJzZVVJbnQzMih2ZXJzaW9uTnVtYmVyKSkgewotICAgICAgICAvLyBGSVhNRSBpbXBy
b3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzkxOQotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB2ZXJzaW9u
IG51bWJlciI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICBpZiAodmVyc2lv
bk51bWJlciAhPSBleHBlY3RlZFZlcnNpb25OdW1iZXIpIHsKLSAgICAgICAgLy8gRklYTUUgaW1w
cm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjM5MTkKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAidW5leHBlY3RlZCB2ZXJzaW9uIG51
bWJlciI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihsZW5ndGgoKSA8IG1pblNpemUsICJleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCAi
LCBtaW5TaXplLCAiIGJ5dGVzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZUNo
YXJhY3RlcigwKSB8fCAhY29uc3VtZVN0cmluZygiYXNtIiksICJtb2R1bGVzIGRvZXNuJ3Qgc3Rh
cnQgd2l0aCAnXFwwYXNtJyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDMy
KHZlcnNpb25OdW1iZXIpLCAiY2FuJ3QgcGFyc2UgdmVyc2lvbiBudW1iZXIiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAi
dW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIs
IGV4cGVjdGVkVmVyc2lvbk51bWJlcik7CiAKLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nTG4oIlBhc3NlZCBwcm9jZXNzaW5nIGhlYWRlci4iKTsKLQotICAgIFNlY3Rpb25zOjpT
ZWN0aW9uIHByZXZpb3VzU2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOworICAgIFNlY3Rpb24g
cHJldmlvdXNTZWN0aW9uID0gU2VjdGlvbjo6VW5rbm93bjsKICAgICB3aGlsZSAobV9vZmZzZXQg
PCBsZW5ndGgoKSkgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dM
bigiU3RhcnRpbmcgdG8gcGFyc2UgbmV4dCBzZWN0aW9uIGF0IG9mZnNldDogIiwgbV9vZmZzZXQp
OwotCiAgICAgICAgIHVpbnQ4X3Qgc2VjdGlvbkJ5dGU7Ci0gICAgICAgIGlmICghcGFyc2VVSW50
NyhzZWN0aW9uQnl0ZSkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVz
c2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBieXRlIjsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWN0aW9uIGJ5dGU6ICIsIHNlY3Rpb25CeXRlKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NyhzZWN0aW9uQnl0ZSksICJj
YW4ndCBnZXQgc2VjdGlvbiBieXRlIik7CiAKLSAgICAgICAgU2VjdGlvbnM6OlNlY3Rpb24gc2Vj
dGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOworICAgICAgICBTZWN0aW9uIHNlY3Rpb24gPSBTZWN0
aW9uOjpVbmtub3duOwogICAgICAgICBpZiAoc2VjdGlvbkJ5dGUpIHsKLSAgICAgICAgICAgIGlm
IChzZWN0aW9uQnl0ZSA8IFNlY3Rpb25zOjpVbmtub3duKQotICAgICAgICAgICAgICAgIHNlY3Rp
b24gPSBzdGF0aWNfY2FzdDxTZWN0aW9uczo6U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFTZWN0aW9uczo6dmFsaWRhdGVPcmRlcihwcmV2aW91c1NlY3Rp
b24sIHNlY3Rpb24pKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3Nh
Z2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiaW52YWxpZCBzZWN0aW9uIG9yZGVyIjsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkU2VjdGlvbihzZWN0aW9u
Qnl0ZSkpCisgICAgICAgICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PFNlY3Rpb24+KHNl
Y3Rpb25CeXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIHVpbnQzMl90IHNlY3Rpb25MZW5ndGg7
Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbkxlbmd0aCkpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJj
b3VsZG4ndCBnZXQgc2VjdGlvbiBsZW5ndGgiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNlY3Rpb25MZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zm
c2V0KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSAic2VjdGlvbiBjb250ZW50IHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNp
emUiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXZhbGlkYXRlT3JkZXIocHJldmlvdXNTZWN0aW9uLCBzZWN0aW9uKSwg
ImludmFsaWQgc2VjdGlvbiBvcmRlciwgIiwgcHJldmlvdXNTZWN0aW9uLCAiIGZvbGxvd2VkIGJ5
ICIsIHNlY3Rpb24pOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihzZWN0aW9uTGVuZ3RoKSwgImNhbid0IGdldCAiLCBzZWN0aW9uLCAiIHNlY3Rpb24ncyBsZW5n
dGgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzZWN0aW9uTGVuZ3RoID4gbGVuZ3Ro
KCkgLSBtX29mZnNldCwgc2VjdGlvbiwgInNlY3Rpb24gb2Ygc2l6ZSAiLCBzZWN0aW9uTGVuZ3Ro
LCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAogICAgICAgICBhdXRvIGVuZCA9
IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKIAogICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsK
LSAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGluIG1hY3JvIGJlbG93IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSNkZWZpbmUgV0FT
TV9TRUNUSU9OX1BBUlNFKE5BTUUsIElELCBERVNDUklQVElPTikgXAotICAgICAgICBjYXNlIFNl
Y3Rpb25zOjpOQU1FOiB7IFwKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKSBcCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nICIgREVTQ1JJUFRJT04pOyBcCi0gICAgICAgICAgICBp
ZiAoIXBhcnNlICMjIE5BTUUoKSkgeyBcCi0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2Ug
PSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiAiICNOQU1FICI6ICIgREVTQ1JJUFRJT047IFwKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICAg
ICAgYnJlYWs7IFwKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX1BBUlNFKE5BTUUsIElELCBERVNDUklQ
VElPTikgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIFNlY3Rpb246Ok5BTUU6IHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlICMjIE5BTUUoKSk7ICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICB9CiAgICAgICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNN
X1NFQ1RJT05fUEFSU0UpCiAjdW5kZWYgV0FTTV9TRUNUSU9OX1BBUlNFCiAKLSAgICAgICAgY2Fz
ZSBTZWN0aW9uczo6VW5rbm93bjogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJVbmtub3duIHNlY3Rpb24sIHNraXBwaW5nLiIpOworICAgICAg
ICBjYXNlIFNlY3Rpb246OlVua25vd246IHsKICAgICAgICAgICAgIC8vIElnbm9yZSBzZWN0aW9u
J3MgbmFtZSBMRUIgYW5kIGJ5dGVzOiB0aGV5J3JlIGFscmVhZHkgaW5jbHVkZWQgaW4gc2VjdGlv
bkxlbmd0aC4KICAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKLQot
ICAgICAgICBpZiAoZW5kICE9IG1fb2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXBy
b3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzkxOQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAicGFyc2luZyBlbmRlZCBiZWZv
cmUgdGhlIGVuZCBvZiB0aGUgc2VjdGlvbiI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJw
YXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOwog
CiAgICAgICAgIHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgfQogCi0gICAgLy8gVE9E
TwotICAgIG1fZmFpbGVkID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdU
Rk1vdmUobV9yZXN1bHQpOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkKK2F1
dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWlu
dDMyX3QgY291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkKLSAgICAgICAgfHwg
Y291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8
ICFtX21vZHVsZS0+c2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiICBj
b3VudDogIiwgY291bnQpOworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJUeXBlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50KTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2Vj
dGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIGludDhfdCB0eXBlOwotICAgICAgICBpZiAoIXBh
cnNlSW50Nyh0eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5
cGUgIT0gRnVuYykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiR290IGZ1bmN0aW9uIHR5cGUuIik7Ci0KICAg
ICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKICAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3Vt
ZW50VHlwZXM7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCkKLSAg
ICAgICAgICAgIHx8IGFyZ3VtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpCi0gICAgICAgICAgICB8fCAhYXJndW1lbnRUeXBlcy50cnlSZXNlcnZlQ2FwYWNp
dHkoYXJndW1lbnRDb3VudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCIgIGFyZ3VtZW50IGNvdW50OiAiLCBh
cmd1bWVudENvdW50KTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUludDco
dHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyB0eXBlIik7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYodHlwZSAhPSBGdW5jLCBpLCAidGggVHlwZSBpcyBub24tRnVuYyAiLCB0
eXBlKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYXJndW1l
bnRDb3VudCksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyBhcmd1bWVudCBjb3VudCIpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJp
ZyAiLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJndW1l
bnRUeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBpLCAidGggIiwgYXJndW1lbnRD
b3VudCwgIiBhcmd1bWVudHMiKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAg
ICAgICAgICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGFyZ3VtZW50VHlwZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VSZXN1bHRUeXBlKGFyZ3VtZW50VHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50
IFR5cGUiKTsKICAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMudW5jaGVja2VkQXBwZW5kKGFyZ3Vt
ZW50VHlwZSk7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50OF90IHJldHVybkNvdW50OwotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJldHVy
bkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOwogICAg
ICAgICBUeXBlIHJldHVyblR5cGU7CiAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nTG4ocmV0dXJuQ291bnQpOwotCiAgICAgICAgIGlmIChyZXR1cm5Db3VudCkgewog
ICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUo
dmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAi
dGggVHlwZSdzIHJldHVybiB2YWx1ZSIpOwogICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRp
Y19jYXN0PFR5cGU+KHZhbHVlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm5U
eXBlID0gVHlwZTo6Vm9pZDsKIAotICAgICAgICBtX21vZHVsZS0+c2lnbmF0dXJlcy51bmNoZWNr
ZWRBcHBlbmQoeyByZXR1cm5UeXBlLCBXVEZNb3ZlKGFyZ3VtZW50VHlwZXMpIH0pOworICAgICAg
ICBtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5kKHsgcmV0dXJuVHlw
ZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9KTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkKK2F1
dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1
aW50MzJfdCBpbXBvcnRDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KQotICAgICAgICB8fCBpbXBvcnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCkKLSAgICAgICAgfHwgIW1fbW9kdWxlLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0
eShpbXBvcnRDb3VudCkgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0
aGUgRklYTUVzIGJlbG93LgotICAgICAgICB8fCAhbV9tb2R1bGUtPmltcG9ydHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGltcG9ydENvdW50KSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgICAgIHx8ICFtX21vZHVsZS0+aW1wb3J0RnVu
Y3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklYTUUgdGhpcyBvdmVy
LWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgICAgICB8fCAhbV9m
dW5jdGlvbkluZGV4U3BhY2UudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSkgLy8gRklY
TUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LiBXZSds
bCBhbGxvY2F0ZSBzb21lIG1vcmUgaGVyZSB3aGVuIHdlIGtub3cgaG93IG1hbnkgZnVuY3Rpb25z
IHRvIGV4cGVjdC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlv
bidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
cmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgZ2xvYmFs
cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMg
YmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRz
LnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnRzIik7IC8vIEZJWE1FIHRoaXMgb3Zl
ci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy50cnlSZXNlcnZlQ2Fw
YWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwg
aW1wb3J0Q291bnQsICIgaW1wb3J0IGZ1bmN0aW9ucyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxs
b2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShpbXBv
cnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3Vu
dCwgIiBmdW5jdGlvbnMgaW4gdGhlIGluZGV4IHNwYWNlIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1h
bGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4gV2UnbGwgYWxsb2NhdGUgc29t
ZSBtb3JlIGhlcmUgd2hlbiB3ZSBrbm93IGhvdyBtYW55IGZ1bmN0aW9ucyB0byBleHBlY3QuCiAK
ICAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciA8IGltcG9y
dENvdW50OyArK2ltcG9ydE51bWJlcikgewogICAgICAgICBJbXBvcnQgaW1wOwpAQCAtMjI5LDE3
OSArMTUwLDE2MCBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAgICB1
aW50MzJfdCBmaWVsZExlbjsKICAgICAgICAgU3RyaW5nIG1vZHVsZVN0cmluZzsKICAgICAgICAg
U3RyaW5nIGZpZWxkU3RyaW5nOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxl
bikKLSAgICAgICAgICAgIHx8ICFjb25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVs
ZUxlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIobW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBsZW5ndGgiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcobW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4p
LCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIG9m
IGxlbmd0aCAiLCBtb2R1bGVMZW4pOwogICAgICAgICBpbXAubW9kdWxlID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVTdHJpbmcpOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGZpZWxkTGVuKQotICAgICAgICAgICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3Ry
aW5nLCBmaWVsZExlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIs
IGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIGluIG1vZHVsZSAn
IiwgbW9kdWxlU3RyaW5nLCAiJyIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25z
dW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9y
dE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbiwg
IiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIiciKTsKICAgICAgICAgaW1wLmZpZWxkID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBmaWVsZFN0cmluZyk7Ci0gICAgICAgIGlmICgh
cGFyc2VFeHRlcm5hbEtpbmQoaW1wLmtpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGltcC5raW5k
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVs
ZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAg
ICAgIHN3aXRjaCAoaW1wLmtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246
IHsKKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAgICB1
aW50MzJfdCBmdW5jdGlvblNpZ25hdHVyZUluZGV4OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KQotICAgICAgICAgICAgICAgIHx8IGZ1bmN0
aW9uU2lnbmF0dXJlSW5kZXggPj0gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGltcC5raW5kSW5kZXggPSBtX21v
ZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnNpemUoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZSogc2ln
bmF0dXJlID0gJm1fbW9kdWxlLT5zaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdOwot
ICAgICAgICAgICAgbV9tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQoc2ln
bmF0dXJlKTsKLSAgICAgICAgICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlLnVuY2hlY2tlZEFwcGVu
ZChzaWduYXR1cmUpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoZnVuY3Rpb25TaWduYXR1cmVJbmRleCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVy
LCAidGggSW1wb3J0J3MgZnVuY3Rpb24gc2lnbmF0dXJlIGluIG1vZHVsZSAnIiwgbW9kdWxlU3Ry
aW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5z
aWduYXR1cmVzLnNpemUoKSwgImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBv
cnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0
IG9mIHJhbmdlIG9mICIsIG1fcmVzdWx0Lm1vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCksICIgaW4g
bW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsK
KyAgICAgICAgICAgIGltcC5raW5kSW5kZXggPSBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0
aW9ucy5zaXplKCk7CisgICAgICAgICAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9ICZtX3Jlc3Vs
dC5tb2R1bGUtPnNpZ25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF07CisgICAgICAgICAg
ICBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0
dXJlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNrZWRB
cHBlbmQoc2lnbmF0dXJlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWw6OlRhYmxlOiB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJs
ZTogewogICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAo
IXBhcnNlVGFibGVIZWxwZXIoaXNJbXBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihp
c0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKKyAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewogICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3Vs
dCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmdldFVuZXhwZWN0ZWQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWw6
Okdsb2JhbDogeworICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6R2xvYmFsOiB7CiAgICAgICAg
ICAgICBHbG9iYWwgZ2xvYmFsOwotICAgICAgICAgICAgaWYgKCFwYXJzZUdsb2JhbFR5cGUoZ2xv
YmFsKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZ2xvYmFsLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpNdXRhYmxl
LCAiTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0ZWQiKTsKIAotICAgICAgICAgICAgaWYg
KGdsb2JhbC5tdXRhYmlsaXR5ID09IEdsb2JhbDo6TXV0YWJsZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGltcC5raW5kSW5kZXggPSBtX21vZHVsZS0+Z2xv
YmFscy5zaXplKCk7Ci0gICAgICAgICAgICBtX21vZHVsZS0+Z2xvYmFscy51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShnbG9iYWwpKTsKKyAgICAgICAgICAgIGltcC5raW5kSW5kZXggPSBtX3Jlc3Vs
dC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpOworICAgICAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIG1fbW9kdWxlLT5pbXBvcnRzLnVu
Y2hlY2tlZEFwcGVuZChpbXApOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMudW5j
aGVja2VkQXBwZW5kKGltcCk7CiAgICAgfQogCi0gICAgbV9tb2R1bGUtPmZpcnN0SW50ZXJuYWxH
bG9iYWwgPSBtX21vZHVsZS0+Z2xvYmFscy5zaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
bV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9yZXN1bHQubW9kdWxlLT5n
bG9iYWxzLnNpemUoKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbigpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGNvdW50KQotICAgICAgICB8fCBjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkKLSAgICAgICAgfHwgIW1fbW9kdWxlLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpCi0gICAgICAgIHx8ICFtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpCi0gICAgICAgIHx8ICFtX2Z1
bmN0aW9uSW5kZXhTcGFjZS50cnlSZXNlcnZlQ2FwYWNpdHkobV9mdW5jdGlvbkluZGV4U3BhY2Uu
c2l6ZSgpICsgY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uIHNlY3Rp
b24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50IGlz
IHRvbyBiaWcgIiwgY291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1v
ZHVsZS0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiIEZ1bmN0aW9u
IHNpZ25hdHVyZXMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJl
c2VydmVDYXBhY2l0eShtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpICsgY291bnQp
LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgbW9yZSBmdW5j
dGlvbnMgaW4gdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIik7CiAKICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHR5cGVOdW1iZXIpCi0gICAgICAgICAgICB8fCB0
eXBlTnVtYmVyID49IG1fbW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1fcmVzdWx0Lm1v
ZHVsZS0+c2lnbmF0dXJlcy5zaXplKCksIGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBp
bnZhbGlkICIsIHR5cGVOdW1iZXIpOwogCi0gICAgICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0g
Jm1fbW9kdWxlLT5zaWduYXR1cmVzW3R5cGVOdW1iZXJdOworICAgICAgICBTaWduYXR1cmUqIHNp
Z25hdHVyZSA9ICZtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXNbdHlwZU51bWJlcl07CiAgICAg
ICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5kIGVuZC4KICAgICAgICAg
c2l6ZV90IHN0YXJ0ID0gMDsKICAgICAgICAgc2l6ZV90IGVuZCA9IDA7Ci0gICAgICAgIG1fbW9k
dWxlLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
KTsKLSAgICAgICAgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudW5jaGVja2VkQXBwZW5kKHsg
c3RhcnQsIGVuZCB9KTsKLSAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2UudW5jaGVja2VkQXBw
ZW5kKHNpZ25hdHVyZSk7CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+aW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7CisgICAgICAgIG1fcmVzdWx0
LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNrZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0p
OworICAgICAgICBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2UudW5jaGVja2VkQXBwZW5kKHNp
Z25hdHVyZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0
aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSkKK2F1dG8gTW9kdWxlUGFyc2Vy
OjpwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4mIG1heGltdW0pIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoIW1heGlt
dW0pOwogCiAgICAgdWludDhfdCBmbGFnczsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3Mp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluaXRp
YWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MShmbGFncyksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4n
dCBwYXJzZSByZXNpemFibGUgbGltaXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwogCiAgICAgaWYg
KGZsYWdzKSB7CiAgICAgICAgIHVpbnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIobWF4aW11bUludCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgaWYgKGluaXRpYWwgPiBtYXhpbXVtSW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1heGltdW1J
bnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVtIHBhZ2UgY291bnQiKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4aW11bUludCwgInJlc2l6
YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgd2hp
Y2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1JbnQpOwogICAgICAgICBt
YXhpbXVtID0gbWF4aW11bUludDsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlz
SW1wb3J0KQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIC8vIFdlJ3JlIG9ubHkgYWxsb3dlZCBhIHRvdGFs
IG9mIG9uZSBUYWJsZSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4KLSAgICBpZiAobV9oYXNUYWJsZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9oYXNUYWJs
ZSwgIlRhYmxlIHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMgYSB0YWJsZSIp
OwogCiAgICAgbV9oYXNUYWJsZSA9IHRydWU7CiAKICAgICBpbnQ4X3QgdHlwZTsKLSAgICBpZiAo
IXBhcnNlSW50Nyh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh0eXBlICE9
IFdhc206OkFueWZ1bmMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBwYXJzZSBUYWJsZSB0eXBlIik7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlICE9IFdhc206OkFueWZ1bmMsICJUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgIiwgdHlwZSk7CiAKICAgICB1aW50MzJfdCBpbml0aWFsOwog
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0gICAgaWYgKCFwYXJzZVJlc2l6
YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgUGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJs
ZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKTsKKyAgICBpZiAoVU5MSUtFTFkoIWxpbWl0cykpCisg
ICAgICAgIHJldHVybiBsaW1pdHMuZ2V0VW5leHBlY3RlZCgpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIUpTV2ViQXNzZW1ibHlUYWJsZTo6aXNWYWxpZFNpemUoaW5pdGlhbCksICJUYWJsZSdz
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIGludmFsaWQiKTsKIAogICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKIAotICAgIG1fbW9kdWxl
LT50YWJsZUluZm9ybWF0aW9uID0gVGFibGVJbmZvcm1hdGlvbihpbml0aWFsLCBtYXhpbXVtLCBp
c0ltcG9ydCk7CisgICAgbV9yZXN1bHQubW9kdWxlLT50YWJsZUluZm9ybWF0aW9uID0gVGFibGVJ
bmZvcm1hdGlvbihpbml0aWFsLCBtYXhpbXVtLCBpc0ltcG9ydCk7CiAKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgp
CithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugb25seSBhbGxvdyBvbmUgdGFibGUgZm9yIG5v
dy4KLSAgICBpZiAoY291bnQgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdz
IGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiVGFibGUgY291
bnQgb2YgIiwgY291bnQsICIgaXMgaW52YWxpZCwgb25seSAxIGlzIGFsbG93ZWQgZm9yIG5vdyIp
OwogCiAgICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOwotICAgIHJldHVybiBwYXJzZVRhYmxlSGVs
cGVyKGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlVGFibGVIZWxw
ZXIoaXNJbXBvcnQpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkKK2F1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIgdmlh
IGltcG9ydCBvciBkZWZpbml0aW9uLgotICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUt
Pm1lbW9yeSwgIk1lbW9yeSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEg
bWVtb3J5Iik7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAgICBQYWdlQ291
bnQgbWF4aW11bVBhZ2VDb3VudDsKICAgICB7CiAgICAgICAgIHVpbnQzMl90IGluaXRpYWw7CiAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0gICAgICAgIGlmICghcGFy
c2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1p
dHMoaW5pdGlhbCwgbWF4aW11bSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKKyAg
ICAgICAgICAgIHJldHVybiBsaW1pdHMuZ2V0VW5leHBlY3RlZCgpOwogICAgICAgICBBU1NFUlQo
IW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7Ci0gICAgICAgIGlmICghUGFnZUNvdW50
Ojppc1ZhbGlkKGluaXRpYWwpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCksICJNZW1vcnkn
cyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CiAKICAg
ICAgICAgaW5pdGlhbFBhZ2VDb3VudCA9IFBhZ2VDb3VudChpbml0aWFsKTsKIAogICAgICAgICBp
ZiAobWF4aW11bSkgewotICAgICAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGlt
dW0pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhp
bXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGltdW0sICIgaXMgaW52YWxpZCIpOwogICAgICAgICAg
ICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudCgqbWF4aW11bSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC00MDksNDMgKzMxMSwzNiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlI
ZWxwZXIoYm9vbCBpc0ltcG9ydCkKICAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwgbWF4
aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsKIAogICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKLSAgICBtX21vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5m
b3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgcGlubmVkU2l6ZXMs
IGlzSW1wb3J0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9y
eSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQs
IHBpbm5lZFNpemVzLCBpc0ltcG9ydCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50OF90IGNvdW50OwotICAgIGlmICghcGFyc2VW
YXJVSW50MShjb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQxKGNvdW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9u
J3MgY291bnQiKTsKIAogICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gV2Ugb25seSBhbGxvdyBvbmUgbWVtb3J5IGZvciBu
b3cuCi0gICAgaWYgKGNvdW50ICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFu
IG9uZSBtZW1vcnksIFdlYkFzc2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9u
ZSIpOwogCiAgICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOwogICAgIHJldHVybiBwYXJzZU1lbW9y
eUhlbHBlcihpc0ltcG9ydCk7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgp
CithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihnbG9iYWxD
b3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fbW9kdWxlLT5nbG9iYWxz
LnRyeVJlc2VydmVDYXBhY2l0eShnbG9iYWxDb3VudCArIG1fbW9kdWxlLT5maXJzdEludGVybmFs
R2xvYmFsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGdsb2JhbENvdW50KSwgImNhbid0IGdldCBHbG9iYWwgc2VjdGlvbidz
IGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5nbG9i
YWxzLnRyeVJlc2VydmVDYXBhY2l0eShnbG9iYWxDb3VudCArIG1fcmVzdWx0Lm1vZHVsZS0+Zmly
c3RJbnRlcm5hbEdsb2JhbCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGdsb2JhbENv
dW50ICsgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsLCAiIGdsb2JhbHMiKTsK
IAogICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2Jh
bENvdW50OyArK2dsb2JhbEluZGV4KSB7CiAgICAgICAgIEdsb2JhbCBnbG9iYWw7Ci0gICAgICAg
IGlmICghcGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICBpZiAoIXBhcnNlSW5pdEV4
cHIoaW5pdE9wY29kZSwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnRO
dW1iZXIpKTsKIAogICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpG
cm9tRXhwcmVzc2lvbjsKICAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKQEAgLTQ2Mywx
MjQgKzM1OCwxMDMgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkKICAgICAgICAg
ICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gRjY0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsOgotICAgICAgICAgICAgaWYgKGdsb2JhbC5pbml0aWFsQml0c09ySW1w
b3J0TnVtYmVyID49IG1fbW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gbV9tb2R1
bGUtPmdsb2JhbHNbZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXJdLnR5cGU7CisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVt
YmVyID49IG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgZ2xvYmFsSW5kZXgs
ICJ0aCBHbG9iYWwgdXNlcyBnZXRfZ2xvYmFsICIsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0
TnVtYmVyLCAiIHdoaWNoIGV4Y2VlZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2JhbCAiLCBtX3Jl
c3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpOworICAgICAgICAgICAgdHlwZUZvcklu
aXRPcGNvZGUgPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbZ2xvYmFsLmluaXRpYWxCaXRzT3JJ
bXBvcnROdW1iZXJdLnR5cGU7CiAgICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKHR5cGVGb3JJbml0T3Bjb2RlICE9IGdsb2JhbC50eXBlKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5
cGVGb3JJbml0T3Bjb2RlICE9IGdsb2JhbC50eXBlLCAiR2xvYmFsIGluaXRfZXhwciBvcGNvZGUg
b2YgdHlwZSAiLCB0eXBlRm9ySW5pdE9wY29kZSwgIiBkb2Vzbid0IG1hdGNoIGdsb2JhbCdzIHR5
cGUgIiwgZ2xvYmFsLnR5cGUpOwogCi0gICAgICAgIG1fbW9kdWxlLT5nbG9iYWxzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmdsb2Jh
bHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhw
b3J0KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICB1aW50MzJfdCBleHBvcnRDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGV4
cG9ydENvdW50KQotICAgICAgICB8fCBleHBvcnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwgIW1fbW9kdWxlLT5leHBvcnRzLnRyeVJlc2Vy
dmVDYXBhY2l0eShleHBvcnRDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCksICJjYW4ndCBnZXQg
RXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0
Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRXhwb3J0IHNl
Y3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGV4cG9ydENvdW50KTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmV4cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4
cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGV4cG9ydENv
dW50LCAiIGV4cG9ydHMiKTsKIAogICAgIGZvciAodWludDMyX3QgZXhwb3J0TnVtYmVyID0gMDsg
ZXhwb3J0TnVtYmVyIDwgZXhwb3J0Q291bnQ7ICsrZXhwb3J0TnVtYmVyKSB7CiAgICAgICAgIEV4
cG9ydCBleHA7CiAgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOwogICAgICAgICBTdHJpbmcgZmll
bGRTdHJpbmc7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pCi0gICAgICAg
ICAgICB8fCAhY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZXhwLmZpZWxkID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhtX3ZtLCBmaWVsZFN0cmluZyk7CiAKLSAgICAgICAgaWYgKCFwYXJzZUV4dGVybmFs
S2luZChleHAua2luZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4p
LCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgbGVu
Z3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZp
ZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhw
b3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRMZW4pOworICAgICAgICBleHAuZmll
bGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0sIGZpZWxkU3RyaW5nKTsKIAorICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChleHAua2luZCksICJjYW4n
dCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihleHAua2luZEluZGV4KSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQn
cyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIHN3aXRj
aCAoZXhwLmtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246IHsKLSAgICAg
ICAgICAgIGlmIChleHAua2luZEluZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5k
OjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHAua2luZElu
ZGV4ID49IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCksIGV4cG9ydE51bWJlciwg
InRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwgZXhwLmtpbmRJbmRleCwg
IiBpdCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX3Jlc3VsdC5mdW5jdGlv
bkluZGV4U3BhY2Uuc2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsOjpUYWJsZTog
eworICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKICAgICAgICAgICAgIC8vIEZJ
WE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3ODIKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKKyAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewogICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU2NzEKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEV4dGVybmFsOjpHbG9iYWw6IHsKLSAgICAgICAgICAgIGlmIChleHAua2lu
ZEluZGV4ID49IG1fbW9kdWxlLT5nbG9iYWxzLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChtX21vZHVsZS0+Z2xvYmFsc1tleHAua2luZElu
ZGV4XS5tdXRhYmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHAua2luZEluZGV4ID49IG1fcmVzdWx0Lm1vZHVs
ZS0+Z2xvYmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBn
bG9iYWwgbnVtYmVyICIsIGV4cC5raW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZ2xvYmFscyBj
b3VudCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fcmVzdWx0
Lm1vZHVsZS0+Z2xvYmFsc1tleHAua2luZEluZGV4XS5tdXRhYmlsaXR5ICE9IEdsb2JhbDo6SW1t
dXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAn
IiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgbV9tb2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKGV4cCk7
CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoZXhwKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VTdGFydCgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCgp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBzdGFydEZ1bmN0aW9uSW5kZXg7Ci0g
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0aW9uSW5kZXgpCi0gICAgICAgIHx8IHN0
YXJ0RnVuY3Rpb25JbmRleCA+PSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1fZnVuY3Rpb25JbmRl
eFNwYWNlW3N0YXJ0RnVuY3Rpb25JbmRleF0uc2lnbmF0dXJlOwotICAgIGlmIChzaWduYXR1cmUt
PmFyZ3VtZW50cy5zaXplKCkgIT0gMAotICAgICAgICB8fCBzaWduYXR1cmUtPnJldHVyblR5cGUg
IT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9kdWxlLT5zdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0aW9uSW5kZXgp
LCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzdGFy
dEZ1bmN0aW9uSW5kZXggPj0gbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSwgIlN0
YXJ0IGluZGV4ICIsIHN0YXJ0RnVuY3Rpb25JbmRleCwgIiBleGNlZWRzIGZ1bmN0aW9uIGluZGV4
IHNwYWNlICIsIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkpOworICAgIFNpZ25h
dHVyZSogc2lnbmF0dXJlID0gbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlW3N0YXJ0RnVuY3Rp
b25JbmRleF0uc2lnbmF0dXJlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLT5h
cmd1bWVudHMuaXNFbXB0eSgpLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMi
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSAhPSBWb2lk
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAgICBtX3Jlc3VsdC5t
b2R1bGUtPnN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlID0gc3RhcnRGdW5jdGlvbkluZGV4OworICAg
IHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKQorYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBp
ZiAoIW1faGFzVGFibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFtX2hhc1RhYmxlLCAiRWxlbWVudCBzZWN0aW9uIGV4cGVjdHMgYSBUYWJsZSB0byBi
ZSBwcmVzZW50Iik7CiAKICAgICB1aW50MzJfdCBlbGVtZW50Q291bnQ7Ci0gICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihlbGVtZW50Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFtX21vZHVsZS0+ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVt
ZW50Q291bnQ7ICsraSkgeworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGVsZW1lbnRDb3VudCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgY291bnQiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVsZW1lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIs
IGVsZW1lbnRDb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxl
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7CisgICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7CiAgICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIodGFibGVJbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBvbmUgdGFibGUgZm9yIG5vdy4KLSAgICAgICAgaWYgKHRh
YmxlSW5kZXggIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1aW50
NjRfdCBvZmZzZXQ7CiAgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLSAgICAgICAgaWYgKCFw
YXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKGluaXRPcGNvZGUgIT0gT3BUeXBlOjpJMzJDb25zdCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1aW50MzJfdCBpbmRleENvdW50OwotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIEFTU0VSVCghIW1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uKTsK
LSAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0gPSBtX21vZHVsZS0+
dGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBnZXQgIiwgZWxlbWVudE51bSwg
InRoIEVsZW1lbnQgdGFibGUgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
YWJsZUluZGV4LCAiRWxlbWVudCBzZWN0aW9uIGNhbiBvbmx5IGhhdmUgb25lIFRhYmxlIGZvciBu
b3ciKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGlu
aXRPcGNvZGUsIG9mZnNldCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRPcGNv
ZGUgIT0gT3BUeXBlOjpJMzJDb25zdCwgIkVsZW1lbnQgc2VjdGlvbiBkb2Vzbid0IHN1cHBvcnQg
bm9uLWkzMiBpbml0X2V4cHIgb3Bjb2RlIGZvciBub3csIGdvdCAiLCBpbml0T3Bjb2RlKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJj
YW4ndCBnZXQgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rp
b24iKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1l
bnROdW0sICJ0aCBpbmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAg
ICAgIEFTU0VSVCghIW1fcmVzdWx0Lm1vZHVsZS0+dGFibGVJbmZvcm1hdGlvbik7CisgICAgICAg
IGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtID0gbV9yZXN1bHQubW9kdWxlLT50
YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCBpbmRleENvdW50IGJlaW5nIHplcm8gYmUgYSB2YWxpZGF0aW9uIGVycm9yPwogICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTgyNgogICAg
ICAgICAgICAgaWYgKGluZGV4Q291bnQpIHsKQEAgLTU4OCwxODMgKzQ2MiwxNDcgQEAgYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIHRo
ZXkgYmUgdGhvdWdoPwogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU4MjcKICAgICAgICAgICAgICAgICB1aW50NjRfdCBsYXN0V3Jp
dHRlbkluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4Q291bnQpICsgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG9mZnNldCkgLSAxOwotICAgICAgICAgICAgICAgIGlmIChsYXN0V3JpdHRl
bkluZGV4ID49IHN0YXRpY19jYXN0PHVpbnQ2NF90PigqbWF4aW11bSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGxhc3RXcml0dGVuSW5kZXggPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KCptYXhpbXVtKSwgIkVs
ZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50IHdyaXRlcyB0byBpbmRl
eCAiLCBsYXN0V3JpdHRlbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIG1heGltdW0gIiwgKm1h
eGltdW0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgRWxlbWVudCBlbGVt
ZW50OwotICAgICAgICBpZiAoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBh
Y2l0eShpbmRleENvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50
LCAiIEVsZW1lbnQgaW5kaWNlcyIpOwogCiAgICAgICAgIGVsZW1lbnQub2Zmc2V0ID0gb2Zmc2V0
OwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleENvdW50OyArK2kpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaW5kZXhDb3VudDsgKytp
bmRleCkgewogICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA+PSBtX2Z1bmN0aW9u
SW5kZXhTcGFjZS5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCks
ICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQn
cyAiLCBpbmRleCwgInRoIGluZGV4Iik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGZ1bmN0aW9uSW5kZXggPj0gbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSwgIkVs
ZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0
aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9u
IGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnNpemUo
KSk7CiAKICAgICAgICAgICAgIGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnVuY2hlY2tlZEFwcGVu
ZChmdW5jdGlvbkluZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIG1fbW9kdWxlLT5lbGVtZW50
cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAgIG1fcmVzdWx0Lm1v
ZHVsZS0+ZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOwogICAgIH0K
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZUNvZGUoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNvdW50KQotICAgICAgICB8fCBjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCkKLSAgICAgICAgfHwgY291bnQgIT0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IENvZGUgc2VjdGlvbidzIGNvdW50Iik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IG1fcmVzdWx0LmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgY291bnQsICIgZXhj
ZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX3Jlc3VsdC5mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpCi0gICAgICAgICAgICB8fCBmdW5jdGlv
blNpemUgPiBsZW5ndGgoKQotICAgICAgICAgICAgfHwgZnVuY3Rpb25TaXplID4gbGVuZ3RoKCkg
LSBtX29mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0OwotICAgICAgICBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKLSAg
ICAgICAgbV9vZmZzZXQgPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQ7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIENvZGUgZnVuY3Rpb24ncyBzaXplIik7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbGVuZ3RoKCksICJDb2RlIGZ1bmN0aW9uJ3Mg
c2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0aGUgbW9kdWxlJ3Mgc2l6ZSAiLCBsZW5n
dGgoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbGVuZ3Ro
KCkgLSBtX29mZnNldCwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBl
eGNlZWRzIHRoZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIsIGxlbmd0aCgpIC0gbV9vZmZzZXQp
OworCisgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9
IG1fb2Zmc2V0OworICAgICAgICBtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0u
ZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNpemU7CisgICAgICAgIG1fb2Zmc2V0ID0gbV9yZXN1
bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZDsKICAgICB9CiAKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0
RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1iZXIpCithdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBi
aXRzT3JJbXBvcnROdW1iZXIpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBpZiAoIXBhcnNlVUlu
dDgob3Bjb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVUludDgob3Bjb2RlKSwgImNhbid0IGdldCBpbml0X2V4cHIncyBvcGNvZGUiKTsK
IAogICAgIHN3aXRjaCAob3Bjb2RlKSB7CiAgICAgY2FzZSBJMzJDb25zdDogewogICAgICAgICBp
bnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhckludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5p
dF9leHByJ3MgaTMyLmNvbnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pihjb25zdGFudCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgSTY0Q29uc3Q6IHsKICAgICAgICAgaW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgaWYg
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25zdGFudCksICJjYW4n
dCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGk2NC5jb25zdCIpOwogICAgICAg
ICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBGMzJDb25zdDogewogICAgICAgICB1aW50MzJfdCBjb25zdGFudDsKLSAgICAg
ICAgaWYgKCFwYXJzZVVJbnQzMihjb25zdGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNh
bid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CiAgICAg
ICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEY2NENvbnN0OiB7CiAgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50OwotICAg
ICAgICBpZiAoIXBhcnNlVUludDY0KGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAi
Y2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmNjQuY29uc3QiKTsKICAg
ICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgR2V0R2xvYmFsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBpZiAoaW5kZXggPj0gbV9tb2R1bGUtPmltcG9ydHMuc2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb25zdCBJbXBvcnQmIGltcG9ydCA9IG1f
bW9kdWxlLT5pbXBvcnRzW2luZGV4XTsKLSAgICAgICAgaWYgKG1fbW9kdWxlLT5pbXBvcnRzW2lu
ZGV4XS5raW5kICE9IEV4dGVybmFsOjpHbG9iYWwKLSAgICAgICAgICAgIHx8IGltcG9ydC5raW5k
SW5kZXggPj0gbV9tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGlu
ZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihpbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMuc2l6ZSgpLCAiZ2V0
X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBpbXBvcnRz
ICIsIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0cy5zaXplKCkpOworICAgICAgICBjb25zdCBJbXBv
cnQmIGltcG9ydCA9IG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0c1tpbmRleF07CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYobV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kICE9
IEV4dGVybmFsS2luZDo6R2xvYmFsLCAiZ2V0X2dsb2JhbCdzIGltcG9ydCBraW5kIGlzICIsIG1f
cmVzdWx0Lm1vZHVsZS0+aW1wb3J0c1tpbmRleF0ua2luZCwgIiBzaG91bGQgYmUgZ2xvYmFsIik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW1wb3J0LmtpbmRJbmRleCA+PSBtX3Jlc3Vs
dC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGlu
ZGV4ICIsIGltcG9ydC5raW5kSW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xv
YmFsICIsIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CiAKLSAgICAgICAg
QVNTRVJUKG1fbW9kdWxlLT5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0g
R2xvYmFsOjpJbW11dGFibGUpOworICAgICAgICBBU1NFUlQobV9yZXN1bHQubW9kdWxlLT5nbG9i
YWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOwog
CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwogICAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZmFsc2UsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2Rl
KTsKICAgICB9CiAKICAgICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBpZiAoIXBhcnNlVUludDgo
ZW5kT3Bjb2RlKSB8fCBlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGVuZE9wY29kZSksICJj
YW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNob3VsZCBlbmQgd2l0aCBl
bmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFs
JiBnbG9iYWwpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxUeXBlKEdsb2JhbCYgZ2xv
YmFsKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDhfdCBtdXRhYmlsaXR5OwotICAgIGlm
ICghcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpIHx8ICFwYXJzZVZhclVJbnQxKG11dGFiaWxp
dHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUi
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFiaWxpdHkpLCAi
Y2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOwogICAgIGdsb2JhbC5tdXRhYmls
aXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFy
c2VEYXRhKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgdWludDMyX3Qgc2VnbWVudENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIo
c2VnbWVudENvdW50KQotICAgICAgICB8fCBzZWdtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+ZGF0YS50cnlSZXNl
cnZlQ2FwYWNpdHkoc2VnbWVudENvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIiAgc2VnbWVudHM6ICIsIHNlZ21lbnRDb3Vu
dCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50
KSwgImNhbid0IGdldCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoc2VnbWVudENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwgIkRhdGEgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgc2VnbWVudENvdW50KTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmRhdGEudHJ5UmVzZXJ2ZUNh
cGFjaXR5KHNlZ21lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBE
YXRhIHNlY3Rpb24ncyAiLCBzZWdtZW50Q291bnQsICIgc2VnbWVudHMiKTsKIAogICAgIGZvciAo
dWludDMyX3Qgc2VnbWVudE51bWJlciA9IDA7IHNlZ21lbnROdW1iZXIgPCBzZWdtZW50Q291bnQ7
ICsrc2VnbWVudE51bWJlcikgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiICBzZWdtZW50ICMiLCBzZWdtZW50TnVtYmVyKTsKICAgICAgICAgdWludDMyX3Qg
aW5kZXg7CiAgICAgICAgIHVpbnQ2NF90IG9mZnNldDsKICAgICAgICAgdWludDhfdCBpbml0T3Bj
b2RlOwogICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLSAgICAgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihpbmRleCkKLSAgICAgICAgICAgIHx8IGluZGV4KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghcGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBvZmZz
ZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChpbml0T3Bjb2Rl
ICE9IE9wVHlwZTo6STMyQ29uc3QpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBvZmZzZXQ6ICIsIG9m
ZnNldCk7CiAKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihkYXRhQnl0ZUxlbmd0aCkKLSAg
ICAgICAgICAgIHx8IGRhdGFCeXRlTGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBkYXRhIGJ5dGVzOiAiLCBkYXRhQnl0ZUxl
bmd0aCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4
KSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5kZXgi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgbm9uLXplcm8gaW5kZXggIiwgaW5kZXgpOworICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgb2Zmc2V0KSk7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29kZSAhPSBPcFR5cGU6OkkzMkNv
bnN0LCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50IGhhcyBvcGNvZGUgIiwgaW5pdE9w
Y29kZSwgIiBleHBlY3RlZCBpMzIuY29uc3QiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnRO
dW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3RoIik7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBi
eXRlIGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoKTsKIAogICAgICAgICBTZWdt
ZW50KiBzZWdtZW50ID0gU2VnbWVudDo6bWFrZShvZmZzZXQsIGRhdGFCeXRlTGVuZ3RoKTsKLSAg
ICAgICAgaWYgKCFzZWdtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBt
X21vZHVsZS0+ZGF0YS51bmNoZWNrZWRBcHBlbmQoU2VnbWVudDo6bWFrZVB0cihzZWdtZW50KSk7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlZ21lbnQsICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50IG9mIHNp
emUgIiwgZGF0YUJ5dGVMZW5ndGgpOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmRhdGEudW5j
aGVja2VkQXBwZW5kKFNlZ21lbnQ6Om1ha2VQdHIoc2VnbWVudCkpOwogICAgICAgICBmb3IgKHVp
bnQzMl90IGRhdGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0
ZSkgewogICAgICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgaWYgKCFwYXJzZVVJ
bnQ4KGJ5dGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJjYW4ndCBnZXQgIiwgZGF0YUJ5
dGUsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50
Iik7CiAgICAgICAgICAgICBzZWdtZW50LT5ieXRlKGRhdGFCeXRlKSA9IGJ5dGU7Ci0gICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBbIiwgZGF0
YUJ5dGUsICJdID0gIiwgc2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkpOwogICAgICAgICB9CiAgICAg
fQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmgKaW5kZXggYjcxODc0My4uNmEyNDM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtMzQsNyArMzQsMTMgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBh
cnNlciB7CitzdHJ1Y3QgTW9kdWxlUGFyc2VyUmVzdWx0IHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZTsKKyAgICBGdW5jdGlvbkluZGV4U3BhY2UgZnVuY3Rp
b25JbmRleFNwYWNlOworICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeTsKK307CisKK2NsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQ
YXJzZXI8TW9kdWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKICAgICBNb2R1bGVQYXJzZXIo
Vk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgp
CkBAIC00Nyw1MSArNTMsMjMgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZh
aWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFpbGVkKCkp
OwotICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24oKQotICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxl
OwotICAgIH0KLQotICAgIEZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKCkK
LSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVy
biBtX2Z1bmN0aW9uSW5kZXhTcGFjZTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5PiYgZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5KCkKLSAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeTsKLSAgICB9CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZSgpOwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFyc2VHbG9iYWxUeXBlKEdsb2JhbCYpOwogCi0j
ZGVmaW5lIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUihOQU1FLCBJRCwgREVTQ1JJUFRJT04p
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlICMjIE5BTUUoKTsKKyNkZWZpbmUgV0FTTV9T
RUNUSU9OX0RFQ0xBUkVfUEFSU0VSKE5BTUUsIElELCBERVNDUklQVElPTikgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMgTkFNRSgpOwogICAgIEZPUl9FQUNIX1dBU01f
U0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCiAjdW5kZWYgV0FTTV9TRUNUSU9O
X0RFQ0xBUkVfUEFSU0VSCiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9y
eUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiYgbWF4aW11bSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0
RXhwcih1aW50OF90JiwgdWludDY0X3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVJlc2l6YWJs
ZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGlt
dW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIo
dWludDhfdCYsIHVpbnQ2NF90Jik7CiAKICAgICBWTSogbV92bTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwotICAgIEZ1bmN0aW9uSW5kZXhTcGFjZSBt
X2Z1bmN0aW9uSW5kZXhTcGFjZTsKLSAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9
OworICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKICAgICBib29sIG1faGFzVGFibGUg
eyBmYWxzZSB9OwotICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5k
ZXggMDhmYWJiZi4uZDZhZThjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaApAQCAtMzIsMTMgKzMyLDI5IEBACiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1
ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKKyNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTEVCRGVj
b2Rlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAorbmFt
ZXNwYWNlIEZhaWx1cmVIZWxwZXIgeworLy8gRklYTUUgV2Ugc2hvdWxkIG1vdmUgdGhpcyB0byBt
YWtlU3RyaW5nLiBJdCdzIGluIGl0cyBvd24gbmFtZXNwYWNlIHRvIGVuYWJsZSBDKysgQXJndW1l
bnQgRGVwZW5kZW50IExvb2t1cCDDoCBsYSBzdGQ6OnN3YXA6IHVzZXIgY29kZSBjYW4gZGVibGFy
ZSBpdHMgb3duICJib3hGYWlsdXJlIiBhbmQgdGhlIGZhaWwoKSBoZWxwZXIgd2lsbCBmaW5kIGl0
Lgorc3RhdGljIGlubGluZSBhdXRvIG1ha2VTdHJpbmcoY29uc3QgY2hhciAqZmFpbHVyZSkgeyBy
ZXR1cm4gQVNDSUlMaXRlcmFsKGZhaWx1cmUpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50LCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8SW50Pjo6
dmFsdWU+Ojp0eXBlPgorc3RhdGljIGlubGluZSBhdXRvIG1ha2VTdHJpbmcoSW50IGZhaWx1cmUp
IHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGZhaWx1cmUpOyB9Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFN1Y2Nlc3NUeXBlPgogY2xhc3MgUGFyc2VyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFN0
cmluZyBFcnJvclR5cGU7CisgICAgdHlwZWRlZiBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+IFVu
ZXhwZWN0ZWRSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+IFBh
cnRpYWxSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxTdWNjZXNzVHlwZSwgRXJyb3JUeXBl
PiBSZXN1bHQ7CisKIHByb3RlY3RlZDoKICAgICBQYXJzZXIoY29uc3QgdWludDhfdCosIHNpemVf
dCk7CiAKQEAgLTYwLDI1ICs3Niw0NCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVJlc3VsdFR5cGUoVHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbDo6S2luZCYpOworICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVybmFsS2luZCYpOwogCiAgICAgY29uc3Qg
dWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KIAogICAgIHNpemVfdCBt
X29mZnNldCA9IDA7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZF
Ul9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4u
IGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBl
cjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVzcGFjZSBhYm92ZS4KKyAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZyhBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgIiksIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwg
QVNDSUlMaXRlcmFsKCIgLyAiKSwgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCBBU0NJ
SUxpdGVyYWwoIjogIiksIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisjZGVmaW5lIFdB
U01fUEFSU0VSX0ZBSUxfSUYoY29uZGl0aW9uLCAuLi4pIGRvIHsgXAorICAgIGlmIChVTkxJS0VM
WShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZhaWwo
X19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmlu
ZSBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGhlbHBlcikgZG8geyAgIFwKKyAgICAgICAgYXV0
byBoZWxwZXJSZXN1bHQgPSBoZWxwZXI7ICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChVTkxJ
S0VMWSghaGVscGVyUmVzdWx0KSkgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGhl
bHBlclJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7IFwKKyAgICB9IHdoaWxlICgwKQorCiBwcml2YXRl
OgogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIHNpemVfdCBtX3NvdXJjZUxlbmd0
aDsKIH07CiAKLUFMV0FZU19JTkxJTkUgUGFyc2VyOjpQYXJzZXIoY29uc3QgdWludDhfdCogc291
cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vz
c1R5cGU+CitBTFdBWVNfSU5MSU5FIFBhcnNlcjxTdWNjZXNzVHlwZT46OlBhcnNlcihjb25zdCB1
aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiAgICAgOiBtX3NvdXJj
ZShzb3VyY2VCdWZmZXIpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChzb3VyY2VMZW5ndGgpCiB7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIoY2hhciBjKQor
dGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2Vy
PFN1Y2Nlc3NUeXBlPjo6Y29uc3VtZUNoYXJhY3RlcihjaGFyIGMpCiB7CiAgICAgaWYgKG1fb2Zm
c2V0ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04OSw3ICsxMjQsOCBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lQ2hhcmFjdGVyKGNoYXIgYykKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVT
dHJpbmcoY29uc3QgY2hhciogc3RyKQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitB
TFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6Y29uc3VtZVN0cmluZyhjb25z
dCBjaGFyKiBzdHIpCiB7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBtX29mZnNldDsKICAgICBpZiAo
bV9vZmZzZXQgPj0gbGVuZ3RoKCkpCkBAIC0xMDMsNyArMTM5LDggQEAgQUxXQVlTX0lOTElORSBi
b29sIFBhcnNlcjo6Y29uc3VtZVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVVVEY4U3RyaW5nKFN0
cmluZyYgcmVzdWx0LCBzaXplX3Qgc3RyaW5nTGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgU3Vj
Y2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6Y29uc3Vt
ZVVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHQsIHNpemVfdCBzdHJpbmdMZW5ndGgpCiB7CiAgICAg
aWYgKHN0cmluZ0xlbmd0aCA9PSAwKSB7CiAgICAgICAgIHJlc3VsdCA9IGVtcHR5U3RyaW5nKCk7
CkBAIC0xMTgsMjcgKzE1NSwzMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1l
VVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdCwgc2l6ZV90IHN0cmluZ0xlbmd0aAogICAgIHJldHVy
biB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhclVJbnQzMih1
aW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNf
SU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYXJVSW50MzIodWludDMyX3Qm
IHJlc3VsdCkKIHsKICAgICByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9z
b3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsKIH0KIAotQUxXQVlTX0lO
TElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJVSW50NjQodWludDY0X3QmIHJlc3VsdCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNj
ZXNzVHlwZT46OnBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQpCiB7CiAgICAgcmV0dXJu
IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwg
bV9vZmZzZXQsIHJlc3VsdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNl
VmFySW50MzIoaW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+
CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYXJJbnQzMihp
bnQzMl90JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50
MzIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsKIH0KIAotQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJJbnQ2NChpbnQ2NF90JiByZXN1bHQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8
U3VjY2Vzc1R5cGU+OjpwYXJzZVZhckludDY0KGludDY0X3QmIHJlc3VsdCkKIHsKICAgICByZXR1
cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVJbnQ2NChtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgs
IG1fb2Zmc2V0LCByZXN1bHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJz
ZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+
CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VVSW50MzIodWlu
dDMyX3QmIHJlc3VsdCkKIHsKICAgICBpZiAobGVuZ3RoKCkgPCA0IHx8IG1fb2Zmc2V0ID4gbGVu
Z3RoKCkgLSA0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDcsNyArMTg5LDggQEAgQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50
NjQodWludDY0X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVUludDY0KHVpbnQ2NF90
JiByZXN1bHQpCiB7CiAgICAgaWYgKGxlbmd0aCgpIDwgOCB8fCBtX29mZnNldCA+IGxlbmd0aCgp
IC0gOCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU2LDcgKzE5OSw4IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDY0KHVpbnQ2NF90JiByZXN1bHQpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDgodWlu
dDhfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VVSW50OCh1aW50OF90JiByZXN1bHQp
CiB7CiAgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNjQsNyArMjA4LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50
OCh1aW50OF90JiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI6OnBhcnNlSW50NyhpbnQ4X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBh
cnNlSW50NyhpbnQ4X3QmIHJlc3VsdCkKIHsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3Myw3ICsyMTgsOCBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgUGFyc2VyOjpwYXJzZUludDcoaW50OF90JiByZXN1bHQpCiAgICAgcmV0dXJuICh2ICYg
MHg4MCkgPT0gMDsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50Nyh1
aW50OF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJlc3Vs
dCkKIHsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTE4MSw3ICsyMjcsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJ
bnQ3KHVpbnQ4X3QmIHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0IDwgMHg4MDsKIH0KIAotQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8
U3VjY2Vzc1R5cGU+OjpwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCkKIHsKICAgICB1aW50
MzJfdCB0ZW1wOwogICAgIGlmICghcGFyc2VWYXJVSW50MzIodGVtcCkpCkBAIC0xOTAsNyArMjM3
LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJVSW50MSh1aW50OF90JiBy
ZXN1bHQpCiAgICAgcmV0dXJuIHRlbXAgPD0gMTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBh
cnNlcjo6cGFyc2VSZXN1bHRUeXBlKFR5cGUmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1
Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNl
UmVzdWx0VHlwZShUeXBlJiByZXN1bHQpCiB7CiAgICAgaW50OF90IHZhbHVlOwogICAgIGlmICgh
cGFyc2VJbnQ3KHZhbHVlKSkKQEAgLTIwMSwxOSArMjQ5LDIxIEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBQYXJzZXI6OnBhcnNlUmVzdWx0VHlwZShUeXBlJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJl
c3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29s
IFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCkKIHsKICAg
ICByZXR1cm4gcGFyc2VSZXN1bHRUeXBlKHJlc3VsdCkgJiYgaXNWYWx1ZVR5cGUocmVzdWx0KTsK
IH0KLSAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlRXh0ZXJuYWxLaW5kKEV4
dGVybmFsOjpLaW5kJiByZXN1bHQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgor
QUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlRXh0ZXJuYWxLaW5k
KEV4dGVybmFsS2luZCYgcmVzdWx0KQogewogICAgIHVpbnQ4X3QgdmFsdWU7CiAgICAgaWYgKCFw
YXJzZVVJbnQ3KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghRXh0ZXJu
YWw6OmlzVmFsaWQodmFsdWUpKQorICAgIGlmICghaXNWYWxpZEV4dGVybmFsS2luZCh2YWx1ZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFeHRlcm5h
bDo6S2luZD4odmFsdWUpOworICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEV4dGVybmFsS2luZD4o
dmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAKaW5kZXggNjgzMjllNS4uMWMwZTAxOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNjAsMjMgKzYwLDE4IEBAIFBsYW46OlBsYW4oVk0qIHZt
LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiAKIHZvaWQgUGxh
bjo6cnVuKCkKIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGlu
ZyBwbGFuLiIpOwogICAgIHsKICAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3Zt
LCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwotICAgICAgICBpZiAoIW1vZHVsZVBhcnNlci5w
YXJzZSgpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZDogIiwgbW9kdWxlUGFyc2VyLmVycm9yTWVzc2Fn
ZSgpKTsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbW9kdWxlUGFyc2VyLmVycm9yTWVz
c2FnZSgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0g
bW9kdWxlUGFyc2VyLnBhcnNlKCk7CisgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKKyAgICAg
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybjsgLy8gRklYTUUgcmV0dXJuIGFuIEV4cGVjdGVkLgogICAgICAgICB9Ci0gICAgICAg
IG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tb2R1bGVJbmZvcm1h
dGlvbigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkgPSBXVEZNb3ZlKG1v
ZHVsZVBhcnNlci5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkoKSk7Ci0gICAgICAgIG1fZnVuY3Rp
b25JbmRleFNwYWNlLnNpemUgPSBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmRleFNwYWNlKCkuc2l6
ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIgPSBtb2R1bGVQYXJzZXIu
ZnVuY3Rpb25JbmRleFNwYWNlKCkucmVsZWFzZUJ1ZmZlcigpOworICAgICAgICBtX21vZHVsZUlu
Zm9ybWF0aW9uID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9kdWxlKTsKKyAgICAgICAgbV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnkgPSBXVEZNb3ZlKHBhcnNlUmVzdWx0LT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnkpOworICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplID0gcGFyc2VS
ZXN1bHQtPmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25JbmRl
eFNwYWNlLmJ1ZmZlciA9IHBhcnNlUmVzdWx0LT5mdW5jdGlvbkluZGV4U3BhY2UucmVsZWFzZUJ1
ZmZlcigpOwogICAgIH0KLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJQYXJz
ZWQgbW9kdWxlLiIpOwogCiAgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1
dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsKICAgICAgICAgaWYg
KFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkgewpAQCAtOTcsNyAr
OTIsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4
ID0gMDsgaW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsg
KytpbXBvcnRJbmRleCkgewogICAgICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKLSAgICAgICAgaWYgKGltcG9ydC0+a2luZCAh
PSBFeHRlcm5hbDo6RnVuY3Rpb24pCisgICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJu
YWxLaW5kOjpGdW5jdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25l
ZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0gbV93YXNtVG9KU1N0dWJzLnNpemUoKTsKICAgICAgICAg
aWYgKHZlcmJvc2UpCkBAIC0xMTcsMTkgKzExMiwyNCBAQCB2b2lkIFBsYW46OnJ1bigpCiAgICAg
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvSlNTdHVicy5zaXplKCkg
KyBmdW5jdGlvbkluZGV4OwogICAgICAgICBBU1NFUlQobV9mdW5jdGlvbkluZGV4U3BhY2UuYnVm
ZmVyLmdldCgpW2Z1bmN0aW9uSW5kZXhTcGFjZV0uc2lnbmF0dXJlID09IHNpZ25hdHVyZSk7CiAK
LSAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBm
dW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSwgKm1fbW9kdWxl
SW5mb3JtYXRpb24pOwotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgIGF1
dG8gdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0
aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rpb25JbmRleFNwYWNlLCAqbV9tb2R1bGVJbmZv
cm1hdGlvbik7CisgICAgICAgIGlmICghdmFsaWRhdGVSZXN1bHQpIHsKICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1
bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRl
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSksICIsICIpOwogICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBlcnJvcjsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gdmFsaWRh
dGVSZXN1bHQuZXJyb3IoKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMudW5jaGVja2VkQXBwZW5kKFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpKTsKLSAg
ICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29t
cGlsZSgqbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMuYXQoZnVuY3Rpb25JbmRleCksIG1fZnVuY3Rpb25JbmRleFNw
YWNlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbikpOworICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGls
ZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMuYXQoZnVuY3Rpb25JbmRl
eCksIG1fZnVuY3Rpb25JbmRleFNwYWNlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbik7CisgICAgICAg
IGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgeworICAgICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybjsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICB9CisgICAg
ICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCpwYXJz
ZUFuZENvbXBpbGVSZXN1bHQpKTsKICAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2UuYnVmZmVy
LmdldCgpW2Z1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25z
W2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2VjdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
ZWN0aW9ucy5oCmluZGV4IDk5NjA1MjQuLjVlZTdiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TZWN0aW9ucy5oCkBAIC00MiwyMSArNDIsNDQgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKICAgICBtYWNybyhDb2RlLCAgICAxMCwgIkZ1bmN0aW9uIGJvZGll
cyAoY29kZSkiKSBcCiAgICAgbWFjcm8oRGF0YSwgICAgMTEsICJEYXRhIHNlZ21lbnRzIikKIAot
c3RydWN0IFNlY3Rpb25zIHsKLSAgICBlbnVtIFNlY3Rpb24gOiB1aW50OF90IHsKK2VudW0gY2xh
c3MgU2VjdGlvbiA6IHVpbnQ4X3QgewogI2RlZmluZSBERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0o
TkFNRSwgSUQsIERFU0NSSVBUSU9OKSBOQU1FID0gSUQsCi0gICAgICAgIEZPUl9FQUNIX1dBU01f
U0VDVElPTihERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0pCisgICAgRk9SX0VBQ0hfV0FTTV9TRUNU
SU9OKERFRklORV9XQVNNX1NFQ1RJT05fRU5VTSkKICN1bmRlZiBERUZJTkVfV0FTTV9TRUNUSU9O
X0VOVU0KLSAgICAgICAgVW5rbm93bgotICAgIH07Ci0gICAgc3RhdGljIGJvb2wgdmFsaWRhdGVP
cmRlcihTZWN0aW9uIHByZXZpb3VzLCBTZWN0aW9uIG5leHQpCi0gICAgewotICAgICAgICBpZiAo
cHJldmlvdXMgPT0gVW5rbm93bikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBy
ZXR1cm4gcHJldmlvdXMgPCBuZXh0OwotICAgIH0KKyAgICBVbmtub3duCiB9OwogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnQ+CitzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNlY3Rpb24oSW50IHNl
Y3Rpb24pCit7CisgICAgc3dpdGNoIChzZWN0aW9uKSB7CisjZGVmaW5lIFZBTElEQVRFX1NFQ1RJ
T04oTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBjYXNlIHN0YXRpY19jYXN0PEludD4oU2VjdGlvbjo6
TkFNRSk6IHJldHVybiB0cnVlOworICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT04oVkFMSURB
VEVfU0VDVElPTikKKyN1bmRlZiBWQUxJREFURV9TRUNUSU9OCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIHZhbGlkYXRl
T3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQoreworICAgIGlmIChwcmV2aW91
cyA9PSBTZWN0aW9uOjpVbmtub3duKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdD4ocHJldmlvdXMpIDwgc3RhdGljX2Nhc3Q8dWludDhfdD4obmV4
dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhTZWN0aW9uIHNl
Y3Rpb24pCit7CisgICAgc3dpdGNoIChzZWN0aW9uKSB7CisjZGVmaW5lIFNUUklOR0lGWV9TRUNU
SU9OX05BTUUoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBjYXNlIFNlY3Rpb246Ok5BTUU6IHJldHVy
biAjTkFNRTsKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFNUUklOR0lGWV9TRUNUSU9O
X05BTUUpCisjdW5kZWYgU1RSSU5HSUZZX1NFQ1RJT05fTkFNRQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiPyI7Cisg
ICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5j
cHAKaW5kZXggM2JiNTIxOS4uMTY5MWI5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwCkBAIC03MSw2ICs3MSw5IEBAIHB1YmxpYzoKICAgICAgICAgQmxv
Y2tUeXBlIG1fYmxvY2tUeXBlOwogICAgICAgICBUeXBlIG1fc2lnbmF0dXJlOwogICAgIH07Cisg
ICAgdHlwZWRlZiBTdHJpbmcgRXJyb3JUeXBlOworICAgIHR5cGVkZWYgVW5leHBlY3RlZFR5cGU8
RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwg
RXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlwZWRlZiBUeXBlIEV4cHJlc3Npb25UeXBlOwogICAg
IHR5cGVkZWYgQ29udHJvbERhdGEgQ29udHJvbFR5cGU7CiAgICAgdHlwZWRlZiBWZWN0b3I8RXhw
cmVzc2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwpAQCAtNzgsMTQyICs4MSwxMjcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0IEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9
IFZvaWQ7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3Qg
VmVjdG9yPFR5cGU+Jik7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVS
X0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4g
YXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVy
OyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5oLgorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgdmFsaWRhdGU6ICIpLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAgfQorI2Rl
ZmluZSBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKDApCisKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25z
dCBWZWN0b3I8VHlwZT4mKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2Fs
KFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlIHR5
cGUsIHVpbnQ2NF90KSB7IHJldHVybiB0eXBlOyB9CiAKICAgICAvLyBMb2NhbHMKLSAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAKICAgICAvLyBHbG9iYWxzCi0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKTsKIAogICAgIC8vIE1lbW9yeQotICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKICAgICAvLyBCYXNpYyBvcGVyYXRvcnMK
ICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3Ao
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRT
ZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBF
eHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25U
eXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OwogCiAgICAgLy8gQ29udHJvbCBmbG93CiAgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsKICAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29u
dHJvbERhdGEmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShD
b250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7Ci0gICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKKyAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBz
aWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0
YSYpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IEV4cHJl
c3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRy
b2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNr
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0
IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZl
Y3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CiAKICAgICAvLyBDYWxscwotICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKLQotICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVu
dHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNr
KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAgYm9vbCBoYXNN
ZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1fbW9kdWxlLm1lbW9yeTsgfQogCi0gICAgdm9pZCBz
ZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1lc3NhZ2Uu
aXNOdWxsKCkpOyBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KLSAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KICAgICBW
YWxpZGF0ZShFeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgbW9kdWxlKQogICAgICAgICA6IG1fcmV0dXJuVHlwZShyZXR1cm5UeXBlKQogICAgICAgICAs
IG1fbW9kdWxlKG1vZHVsZSkKICAgICB7CiAgICAgfQogCisgICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKwogcHJpdmF0ZToK
LSAgICBib29sIHVuaWZ5KFR5cGUsIFR5cGUpOwotICAgIGJvb2wgdW5pZnkoY29uc3QgRXhwcmVz
c2lvbkxpc3QmLCBjb25zdCBDb250cm9sRGF0YSYpOworICAgIFJlc3VsdCB1bmlmeShUeXBlLCBU
eXBlKTsKKyAgICBSZXN1bHQgdW5pZnkoY29uc3QgRXhwcmVzc2lvbkxpc3QmLCBjb25zdCBDb250
cm9sRGF0YSYpOwogCi0gICAgYm9vbCBjaGVja0JyYW5jaFRhcmdldChDb250cm9sRGF0YSYgdGFy
Z2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBSZXN1bHQg
Y2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbERhdGEmIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjayk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBtX3JldHVyblR5cGU7
CiAgICAgVmVjdG9yPFR5cGU+IG1fbG9jYWxzOwotICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsK
ICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9tb2R1bGU7CiB9OwogCi1ib29sIFZhbGlk
YXRlOjphZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmdzKQorYXV0byBWYWxpZGF0
ZTo6YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJncykgLT4gUmVzdWx0CiB7Ci0g
ICAgZm9yIChUeXBlIGFyZyA6IGFyZ3MpIHsKLSAgICAgICAgaWYgKCFhZGRMb2NhbChhcmcsIDEp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBmb3IgKFR5cGUgYXJnIDogYXJncykKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhhZGRMb2NhbChhcmcsIDEpKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRl
OjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KQorYXV0byBWYWxpZGF0ZTo6YWRk
TG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKCFt
X2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9sb2NhbHMuc2l6ZSgpICsgY291bnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc2l6ZV90IHNpemUgPSBtX2xvY2Fscy5zaXplKCkgKyBj
b3VudDsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2Fw
YWNpdHkoc2l6ZSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpemUsICIgbG9jYWxz
Iik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAg
bV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHR5cGUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBWYWxpZGF0ZTo6Z2V0TG9jYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChpbmRl
eCA8IG1fbG9jYWxzLnNpemUoKSkgewotICAgICAgICByZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF07
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiQXR0ZW1wdCB0byB1c2UgdW5rbm93biBsb2NhbC4iKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2xvY2Fscy5zaXplKCks
ICJhdHRlbXB0IHRvIHVzZSB1bmtub3duIGxvY2FsICIsIGluZGV4LCAiIGxhc3Qgb25lIGlzICIs
IG1fbG9jYWxzLnNpemUoKSk7CisgICAgcmVzdWx0ID0gbV9sb2NhbHNbaW5kZXhdOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSkKK2F1dG8gVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5
cGUgbG9jYWxUeXBlOwotICAgIGlmICghZ2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlwZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChsb2NhbFR5cGUgPT0gdmFsdWUpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0
IHRvIHNldCBsb2NhbCB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKGxvY2FsVHlwZSksICIgd2l0aCBh
IHZhcmlhYmxlIG9mIHR5cGU6ICIsIHRvU3RyaW5nKHZhbHVlKSk7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoZ2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlw
ZSkpOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobG9jYWxUeXBlICE9IHZhbHVlLCAic2V0
X2xvY2FsIHRvIHR5cGUgIiwgdmFsdWUsICIgZXhwZWN0ZWQgIiwgbG9jYWxUeXBlKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjpnZXRHbG9iYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChp
bmRleCA8IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fbW9k
dWxlLmdsb2JhbHNbaW5kZXhdLnR5cGU7Ci0gICAgICAgIEFTU0VSVChpc1ZhbHVlVHlwZShyZXN1
bHQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIG1fZXJyb3JNZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJBdHRlbXB0IHRvIHVzZSB1bmtub3duIGdsb2JhbC4iKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX21vZHVsZS5n
bG9iYWxzLnNpemUoKSwgImdldF9nbG9iYWwgIiwgaW5kZXgsICIgb2YgdW5rbm93biBnbG9iYWws
IGxpbWl0IGlzICIsIG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpKTsKKyAgICByZXN1bHQgPSBtX21v
ZHVsZS5nbG9iYWxzW2luZGV4XS50eXBlOworICAgIEFTU0VSVChpc1ZhbHVlVHlwZShyZXN1bHQp
KTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjpzZXRHbG9iYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKQorYXV0byBWYWxpZGF0ZTo6c2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUmVzdWx0CiB7Ci0gICAg
aWYgKGluZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJBdHRlbXB0IHRvIHVzZSB1bmtub3duIGdsb2JhbC4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX21vZHVsZS5nbG9iYWxz
W2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKSB7Ci0gICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJBdHRlbXB0IHRvIHN0b3JlIHRvIGltbXV0YWJsZSBn
bG9iYWwuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRihpbmRleCA+PSBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSwgInNldF9nbG9iYWwg
IiwgaW5kZXgsICIgb2YgdW5rbm93biBnbG9iYWwsIGxpbWl0IGlzICIsIG1fbW9kdWxlLmdsb2Jh
bHMuc2l6ZSgpKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fbW9kdWxlLmdsb2JhbHNb
aW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUsICJzZXRfZ2xvYmFsICIsIGlu
ZGV4LCAiIGlzIGltbXV0YWJsZSIpOwogCiAgICAgRXhwcmVzc2lvblR5cGUgZ2xvYmFsVHlwZSA9
IG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLnR5cGU7CiAgICAgQVNTRVJUKGlzVmFsdWVUeXBlKGds
b2JhbFR5cGUpKTsKLSAgICBpZiAoZ2xvYmFsVHlwZSA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHQgdG8gc2V0
IGdsb2JhbCB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKGdsb2JhbFR5cGUpLCAiIHdpdGggYSB2YXJp
YWJsZSBvZiB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGdsb2JhbFR5cGUgIT0gdmFsdWUsICJzZXRfZ2xvYmFs
ICIsIGluZGV4LCAiIHdpdGggdHlwZSAiLCBnbG9iYWxUeXBlLCAiIHdpdGggYSB2YXJpYWJsZSBv
ZiB0eXBlICIsIHZhbHVlKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBWYWxpZGF0ZTo6Q29udHJv
bFR5cGUgVmFsaWRhdGU6OmFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKQpAQCAtMjI2LDIwOSArMjE0
LDEyOSBAQCBWYWxpZGF0ZTo6Q29udHJvbFR5cGUgVmFsaWRhdGU6OmFkZExvb3AoVHlwZSBzaWdu
YXR1cmUpCiAgICAgcmV0dXJuIENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6TG9vcCwgc2lnbmF0dXJl
KTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChjb25kaXRpb24gIT0g
STMyKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0
byB1c2UgIiwgdG9TdHJpbmcoY29uZGl0aW9uKSwgIiBhcyB0aGUgY29uZGl0aW9uIGZvciBzZWxl
Y3QiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChub25aZXJvICE9
IHplcm8pIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJSZXN1bHQgdHlw
ZXMgb2Ygc2VsZWN0IGRvbid0IG1hdGNoLiBHb3Q6ICIsIHRvU3RyaW5nKG5vblplcm8pLCAiIGFu
ZCAiLCB0b1N0cmluZyh6ZXJvKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KKyAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJMzIsICJzZWxlY3QgY29uZGl0
aW9uIG11c3QgYmUgaTMyLCBnb3QgIiwgY29uZGl0aW9uKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKG5vblplcm8gIT0gemVybywgInNlbGVjdCByZXN1bHQgdHlwZXMgbXVzdCBtYXRjaCwg
Z290ICIsIG5vblplcm8sICIgYW5kICIsIHplcm8pOwogICAgIHJlc3VsdCA9IHplcm87Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkSWYo
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJl
c3VsdCkKK2F1dG8gVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlw
ZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChj
b25kaXRpb24gIT0gSTMyKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygi
QXR0ZW1wdGluZyB0byB1c2UgIiwgdG9TdHJpbmcoY29uZGl0aW9uKSwgIiBhcyB0aGUgY29uZGl0
aW9uIGZvciBhbiBpZiBibG9jayIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9IEkzMiwgImlmIGNvbmRpdGlvbiBt
dXN0IGJlIGkzMiwgZ290ICIsIGNvbmRpdGlvbik7CiAgICAgcmVzdWx0ID0gQ29udHJvbERhdGEo
QmxvY2tUeXBlOjpJZiwgc2lnbmF0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRFbHNlKENvbnRyb2xUeXBlJiBjdXJyZW50LCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgdmFsdWVzKQorYXV0byBWYWxpZGF0ZTo6YWRkRWxzZShDb250
cm9sVHlwZSYgY3VycmVudCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHZhbHVlcykgLT4gUmVzdWx0
CiB7Ci0gICAgaWYgKCF1bmlmeSh2YWx1ZXMsIGN1cnJlbnQpKSB7Ci0gICAgICAgIEFTU0VSVChl
cnJvck1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KKyAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KHZhbHVlcywgY3VycmVudCkpOwogICAgIHJldHVy
biBhZGRFbHNlVG9VbnJlYWNoYWJsZShjdXJyZW50KTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRk
RWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGN1cnJlbnQpCithdXRvIFZhbGlkYXRlOjph
ZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgY3VycmVudCkgLT4gUmVzdWx0CiB7Ci0g
ICAgaWYgKGN1cnJlbnQudHlwZSgpICE9IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBlbHNlIGJsb2NrIHRvIHNv
bWV0aGluZyBvdGhlciB0aGFuIGFuIGlmIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGN1cnJlbnQudHlwZSgpICE9IEJsb2NrVHlw
ZTo6SWYsICJlbHNlIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYW4gaWYiKTsKICAgICBjdXJy
ZW50ID0gQ29udHJvbERhdGEoQmxvY2tUeXBlOjpCbG9jaywgY3VycmVudC5zaWduYXR1cmUoKSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6
YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpCithdXRvIFZhbGlk
YXRlOjphZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUmVz
dWx0CiB7CiAgICAgaWYgKG1fcmV0dXJuVHlwZSA9PSBWb2lkKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUoKSA9
PSAxKTsKLQotICAgIGlmIChtX3JldHVyblR5cGUgPT0gcmV0dXJuVmFsdWVzWzBdKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1w
dGluZyB0byBhZGQgcmV0dXJuIHdpdGggdHlwZTogIiwgdG9TdHJpbmcocmV0dXJuVmFsdWVzWzBd
KSwgIiBidXQgZnVuY3Rpb24gZXhwZWN0cyByZXR1cm4gd2l0aCB0eXBlOiAiLCB0b1N0cmluZyht
X3JldHVyblR5cGUpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihtX3JldHVyblR5cGUgIT0gcmV0dXJuVmFsdWVzWzBdLCAicmV0dXJuIHR5cGUgIiwgcmV0
dXJuVmFsdWVzWzBdLCAiIGRvZXNuJ3QgbWF0Y2ggZnVuY3Rpb24ncyByZXR1cm4gdHlwZSAiLCBt
X3JldHVyblR5cGUpOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmNoZWNr
QnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBlJiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBl
eHByZXNzaW9uU3RhY2spCithdXRvIFZhbGlkYXRlOjpjaGVja0JyYW5jaFRhcmdldChDb250cm9s
VHlwZSYgdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBS
ZXN1bHQKICAgICB7CiAgICAgICAgIGlmICh0YXJnZXQudHlwZSgpID09IEJsb2NrVHlwZTo6TG9v
cCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgICAgICBpZiAodGFyZ2V0LnNpZ25hdHVyZSgpID09IFZvaWQpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoIWV4cHJlc3Npb25TdGFjay5zaXplKCkpIHsKLSAgICAg
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0byBicmFuY2gg
dG8gYmxvY2sgd2l0aCBleHBlY3RlZCB0eXBlOiAiLCB0b1N0cmluZyh0YXJnZXQuc2lnbmF0dXJl
KCkpLCAiIGJ1dCB0aGUgc3RhY2sgd2FzIGVtcHR5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgaWYgKHRh
cmdldC5zaWduYXR1cmUoKSA9PSBleHByZXNzaW9uU3RhY2subGFzdCgpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZXhwcmVzc2lvblN0
YWNrLmlzRW1wdHkoKSwgImJyYW5jaCB0byBibG9jayBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNr
Iik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFyZ2V0LnNpZ25hdHVyZSgpICE9
IGV4cHJlc3Npb25TdGFjay5sYXN0KCksICJicmFuY2gncyBzdGFjayB0eXBlIGRvZXNuJ3QgbWF0
Y2ggYmxvY2sncyB0eXBlIik7CiAKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5n
KCJBdHRlbXB0aW5nIHRvIGJyYW5jaCB0byBibG9jayB3aXRoIGV4cGVjdGVkIHR5cGU6ICIsIHRv
U3RyaW5nKHRhcmdldC5zaWduYXR1cmUoKSksICIgYnV0IHN0YWNrIGhhcyB0eXBlOiAiLCB0b1N0
cmluZyh0YXJnZXQuc2lnbmF0dXJlKCkpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xU
eXBlJiB0YXJnZXQsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHN0YWNrKQorYXV0byBWYWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJnZXQs
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKSAt
PiBSZXN1bHQKIHsKICAgICAvLyBWb2lkIG1lYW5zIHRoaXMgaXMgYW4gdW5jb25kaXRpb25hbCBi
cmFuY2guCi0gICAgaWYgKGNvbmRpdGlvbiAhPSBWb2lkICYmIGNvbmRpdGlvbiAhPSBJMzIpIHsK
LSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBh
IGNvbmRpdGlvbmFsIGJyYW5jaCB3aXRoIGNvbmRpdGlvbiB0eXBlOiAiLCB0b1N0cmluZyhjb25k
aXRpb24pLCAiIGJ1dCBleHBlY3RlZCBpMzIuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBWb2lkICYmIGNv
bmRpdGlvbiAhPSBJMzIsICJjb25kaXRpb25hbCBicmFuY2ggd2l0aCBub24taTMyIGNvbmRpdGlv
biAiLCBjb25kaXRpb24pOwogICAgIHJldHVybiBjaGVja0JyYW5jaFRhcmdldCh0YXJnZXQsIHN0
YWNrKTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBk
ZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorYXV0
byBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVj
dG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBSZXN1bHQKIHsKLSAgICBp
ZiAoY29uZGl0aW9uICE9IEkzMikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJp
bmcoIkF0dGVtcHRpbmcgdG8gYWRkIGEgYnJfdGFibGUgd2l0aCBjb25kaXRpb24gdHlwZTogIiwg
dG9TdHJpbmcoY29uZGl0aW9uKSwgIiBidXQgZXhwZWN0ZWQgaTMyLiIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9
IEkzMiwgImJyX3RhYmxlIHdpdGggbm9uLWkzMiBjb25kaXRpb24gIiwgY29uZGl0aW9uKTsKIAot
ICAgIGZvciAoYXV0byB0YXJnZXQgOiB0YXJnZXRzKSB7Ci0gICAgICAgIGlmIChkZWZhdWx0VGFy
Z2V0LnNpZ25hdHVyZSgpICE9IHRhcmdldC0+c2lnbmF0dXJlKCkpIHsKLSAgICAgICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0byBhZGQgYSBicl90YWJsZSB3
aXRoIGRpZmZlcmVudCBleHBlY3RlZCB0eXBlcy4gRGVmYXVsdCB0YXJnZXQgaGFzIHR5cGU6ICIs
IHRvU3RyaW5nKGRlZmF1bHRUYXJnZXQuc2lnbmF0dXJlKCkpLCAiIGJ1dCBjYXNlIGhhcyB0eXBl
OiAiLCB0b1N0cmluZyh0YXJnZXQtPnNpZ25hdHVyZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChhdXRvIHRhcmdldCA6IHRhcmdldHMp
CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZGVmYXVsdFRhcmdldC5zaWduYXR1cmUo
KSAhPSB0YXJnZXQtPnNpZ25hdHVyZSgpLCAiYnJfdGFibGUgdGFyZ2V0IHR5cGUgbWlzbWF0Y2gi
KTsKIAogICAgIHJldHVybiBjaGVja0JyYW5jaFRhcmdldChkZWZhdWx0VGFyZ2V0LCBleHByZXNz
aW9uU3RhY2spOwogfQogCi1ib29sIFZhbGlkYXRlOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVu
dHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spCithdXRvIFZhbGlkYXRlOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJlc3VsdAogewogICAg
IENvbnRyb2xEYXRhJiBibG9jayA9IGVudHJ5LmNvbnRyb2xEYXRhOwogICAgIGlmIChibG9jay5z
aWduYXR1cmUoKSA9PSBWb2lkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghc3Rh
Y2suc2l6ZSgpKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQmxvY2sg
ZmFsbHRob3VnaCBleHBlY3RlZCB0eXBlOiAiLCB0b1N0cmluZyhibG9jay5zaWduYXR1cmUoKSks
ICIgYnV0IHRoZSBzdGFjayB3YXMgZW1wdHkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChibG9jay5zaWduYXR1cmUoKSA9PSBz
dGFjay5sYXN0KCkpIHsKLSAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBw
ZW5kKGJsb2NrLnNpZ25hdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoc3RhY2suaXNFbXB0eSgpLCAidHlwZWQgYmxvY2sgZmFs
bHMgdGhyb3VnaCBvbiBlbXB0eSBzdGFjayIpOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
YmxvY2suc2lnbmF0dXJlKCkgIT0gc3RhY2subGFzdCgpLCAiYmxvY2sgZmFsbHRocm91Z2ggZG9l
c24ndCBtYXRjaCBpdHMgZGVjbGFyZWQgdHlwZSIpOwogCi0gICAgbV9lcnJvck1lc3NhZ2UgPSBt
YWtlU3RyaW5nKCJCbG9jayBmYWxsdGhyb3VnaCBoYXMgZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJp
bmcoYmxvY2suc2lnbmF0dXJlKCkpLCAiIGJ1dCBwcm9kdWNlZCB0eXBlOiAiLCB0b1N0cmluZyhi
bG9jay5zaWduYXR1cmUoKSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoYmxvY2suc2lnbmF0dXJlKCkpOworICAgIHJldHVybiB7
IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
JiBlbnRyeSkKK2F1dG8gVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
JiBlbnRyeSkgLT4gUmVzdWx0CiB7CiAgICAgaWYgKGVudHJ5LmNvbnRyb2xEYXRhLnNpZ25hdHVy
ZSgpICE9IFZvaWQpCiAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChlbnRyeS5jb250cm9sRGF0YS5zaWduYXR1cmUoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29uc3Qg
U2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVk
LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKHNp
Z25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSAhPSBhcmdzLnNpemUoKSkgewotICAgICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJBcml0eSBtaXNtYXRj
aCBpbiBjYWxsLCBleHBlY3RlZDogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHNp
Z25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgYnV0
IGdvdDogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3Muc2l6ZSgpKTsKLSAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihzaWduYXR1cmUtPmFy
Z3VtZW50cy5zaXplKCkgIT0gYXJncy5zaXplKCksICJhcml0eSBtaXNtYXRjaCBpbiBjYWxsLCBn
b3QgIiwgYXJncy5zaXplKCksICIgYXJndW1lbnRzLCBleHBlY3RlZCAiLCBzaWduYXR1cmUtPmFy
Z3VtZW50cy5zaXplKCkpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1bWVudHNb
aV0pIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQg
YXJndW1lbnQgdHlwZTogIiwgdG9TdHJpbmcoc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0pLCAiIGRv
ZXMgbm90IG1hdGNoIHBhc3NlZCBhcmd1bWVudCB0eXBlOiAiLCB0b1N0cmluZyhhcmdzW2ldKSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoYXJnc1tpXSAhPSBzaWduYXR1cmUtPmFyZ3VtZW50c1tpXSwgImFyZ3VtZW50
IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIsIGFyZ3NbaV0sICIsIGV4cGVjdGVkICIsIHNp
Z25hdHVyZS0+YXJndW1lbnRzW2ldKTsKIAogICAgIHJlc3VsdCA9IHNpZ25hdHVyZS0+cmV0dXJu
VHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlk
YXRlOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRv
IFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNv
bnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFJlc3VsdAogewogICAgIGNvbnN0IGF1dG8gYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS0+
YXJndW1lbnRzLnNpemUoKTsKLSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSBhcmdzLnNpemUoKSAt
IDEpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiQXJpdHkgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZXhwZWN0ZWQ6ICIpOwotICAg
ICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOwot
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGJ1dCBnb3Q6ICIpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZE51bWJlcihhcmdzLnNpemUoKSk7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gYnVpbGRl
ci50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYoYXJndW1lbnRDb3VudCAhPSBhcmdzLnNpemUoKSAtIDEsICJhcml0eSBt
aXNtYXRjaCBpbiBjYWxsX2luZGlyZWN0LCBnb3QgIiwgYXJncy5zaXplKCkgLSAxLCAiIGFyZ3Vt
ZW50cywgZXhwZWN0ZWQgIiwgYXJndW1lbnRDb3VudCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChhcmdzW2ldICE9IHNp
Z25hdHVyZS0+YXJndW1lbnRzW2ldKSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1h
a2VTdHJpbmcoIkV4cGVjdGVkIGFyZ3VtZW50IHR5cGU6ICIsIHRvU3RyaW5nKHNpZ25hdHVyZS0+
YXJndW1lbnRzW2ldKSwgIiBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgYXJndW1lbnQgdHlwZTogIiwg
dG9TdHJpbmcoYXJnc1tpXSkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kp
CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnc1tpXSAhPSBzaWduYXR1cmUtPmFy
Z3VtZW50c1tpXSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290
ICIsIGFyZ3NbaV0sICIsIGV4cGVjdGVkICIsIHNpZ25hdHVyZS0+YXJndW1lbnRzW2ldKTsKKwor
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJncy5sYXN0KCkgIT0gSTMyLCAibm9uLWkzMiBj
YWxsX2luZGlyZWN0IGluZGV4ICIsIGFyZ3MubGFzdCgpKTsKIAotICAgIGlmIChhcmdzLmxhc3Qo
KSAhPSBJMzIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJFeHBlY3Rl
ZCBjYWxsX2luZGlyZWN0IHRhcmdldCBpbmRleCB0byBoYXZlIHR5cGU6IGkzMiBidXQgZ290IHR5
cGU6ICIsIHRvU3RyaW5nKGFyZ3MubGFzdCgpKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCiAgICAgcmVzdWx0ID0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OnVuaWZ5KGNvbnN0
IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMsIGNvbnN0IENvbnRyb2xUeXBlJiBibG9jaykKK2F1dG8g
VmFsaWRhdGU6OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMsIGNvbnN0IENvbnRy
b2xUeXBlJiBibG9jaykgLT4gUmVzdWx0CiB7CiAgICAgQVNTRVJUKHZhbHVlcy5zaXplKCkgPD0g
MSk7CiAgICAgaWYgKGJsb2NrLnNpZ25hdHVyZSgpID09IFZvaWQpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKCF2YWx1ZXMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gbWFrZVN0cmluZygiQmxvY2sgaGFzIG5vbi12b2lkIHNpZ25hdHVyZSBidXQgaGFzIG5vIHN0
YWNrIGVudHJpZXMgb24gZXhpdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKHZhbHVlc1swXSA9PSBibG9jay5zaWduYXR1cmUo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih2YWx1
ZXMuaXNFbXB0eSgpLCAibm9uLXZvaWQgYmxvY2sgZW5kcyB3aXRoIGFuIGVtcHR5IHN0YWNrIik7
CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih2YWx1ZXNbMF0gIT0gYmxvY2suc2lnbmF0dXJl
KCksICJjb250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZSIpOwogCi0gICAg
bV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJFeHBlY3RlZCBjb250cm9sIGZsb3cgdG8gcmV0
dXJuIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0dXJlKCkpLCAiIGJ1
dCBnb3QgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZXNbMF0pKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25z
dCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JikKQEAgLTQzNywy
MSArMzQ1LDEyIEBAIHZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRy
eT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpCiAgICAgLy8gVGhpbmsgb2YgdGhpcyBhcyBwZW5h
bmNlIGZvciB0aGUgc2luIG9mIGJhZCBlcnJvciBtZXNzYWdlcy4KIH0KIAotU3RyaW5nIHZhbGlk
YXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBm
dW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGUpCitFeHBl
Y3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNl
LCBzaXplX3QgbGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgSW1tdXRh
YmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBtb2R1bGUpCiB7CiAgICAgVmFsaWRhdGUgY29udGV4dChzaWduYXR1cmUtPnJl
dHVyblR5cGUsIG1vZHVsZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRv
cihjb250ZXh0LCBzb3VyY2UsIGxlbmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4U3BhY2Us
IG1vZHVsZSk7Ci0KLSAgICBpZiAoIXZhbGlkYXRvci5wYXJzZSgpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBhZGQgYmV0dGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIGhlcmUuIHNlZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDI4OAotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5ldmVyIG5vdCBoYXZlIGFuIGVycm9yIG1lc3NhZ2UgaWYgd2UgcmV0dXJuIGZh
bHNlLgotICAgICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQzNTQKLSAgICAgICAgaWYgKGNvbnRleHQuZXJyb3JNZXNzYWdlKCkuaXNOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gIlVua25vd24gZXJyb3IiOwotICAgICAgICByZXR1cm4gY29u
dGV4dC5lcnJvck1lc3NhZ2UoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh2YWxpZGF0b3IucGFyc2UoKSk7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKaW5kZXggODYxZmQ3Mi4uMWYwMDQxNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKQEAgLTI4LDEwICsyOCwxMSBAQAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
IAotU3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3Qg
U2lnbmF0dXJlKiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mKTsKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlv
bihjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBJbW11dGFi
bGVGdW5jdGlvbkluZGV4U3BhY2UmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVh
ZGVyLnB5CmluZGV4IDgwNGNiMjEuLjU5NmQ4NTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJ
bmxpbmVzSGVhZGVyLnB5CkBAIC0xODksMTAgKzE4OSwxMCBAQCBkZWYgZ2VuZXJhdGVTaW1wbGVD
b2RlKG9wKToKICAgICBhcmdzID0gWyJFeHByZXNzaW9uVHlwZSBhcmciICsgc3RyKHBhcmFtKSBm
b3IgcGFyYW0gaW4gcmFuZ2UobGVuKG9wY29kZVsicGFyYW1ldGVyIl0pKV0KICAgICBhcmdzLmFw
cGVuZCgiRXhwcmVzc2lvblR5cGUmIHJlc3VsdCIpCiAgICAgcmV0dXJuICIiIgotdGVtcGxhdGU8
PiBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6IiIiICsgd2FzbS50b0NwcChvcFsi
bmFtZSJdKSArICI+KCIgKyAiLCAiLmpvaW4oYXJncykgKyAiIiIpCit0ZW1wbGF0ZTw+IGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjoiIiIgKyB3YXNtLnRvQ3BwKG9wWyJuYW1lIl0p
ICsgIj4oIiArICIsICIuam9pbihhcmdzKSArICIiIikgLT4gUGFydGlhbFJlc3VsdAogewogIiIi
ICsgZ2VuZXJhdGVCM0NvZGUob3Bjb2RlLCBiM29wKSArICIiIjsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogIiIiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQppbmRleCAwMGQyODM4Li4xNWMxZjNjIDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFk
ZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVh
ZGVyLnB5CkBAIC0xNTEsNyArMTUxLDcgQEAgaW5saW5lIEIzOjpUeXBlIHRvQjNUeXBlKFR5cGUg
dHlwZSkKICN1bmRlZiBDUkVBVEVfQ0FTRQogCiAjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlk
LCBiM3R5cGUsIGluYykgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7Ci1pbmxpbmUgY29uc3QgY2hh
ciogdG9TdHJpbmcoVHlwZSB0eXBlKQoraW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoVHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIEZPUl9FQUNIX1dBU01fVFlQRShD
UkVBVEVfQ0FTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVy
YXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQppbmRleCAyNWEzOTJlLi41
MmI2NmIxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5CkBAIC02MCwxNSArNjAsMTMg
QEAgZGVmIHRvQ3BwKG5hbWUpOgogZGVmIHVuYXJ5TWFjcm8obmFtZSk6CiAgICAgb3AgPSBvcGNv
ZGVzW25hbWVdCiAgICAgcmV0dXJuICIiIgotdGVtcGxhdGU8PiBib29sIFZhbGlkYXRlOjphZGRP
cDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3RlbXBsYXRlPD4gYXV0byBWYWxpZGF0ZTo6YWRkT3A8
T3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmICh2YWx1ZSAhPSAiIiIg
KyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpIHsKLSAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFtZSArICIiIiBleHBlY3RzIHRoZSB2YWx1ZSB0
byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsw
XSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHZhbHVl
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKHZhbHVl
ICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIikpCisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVk
OiAiIiIgKyBuYW1lICsgIiIiIHZhbHVlIHR5cGUgbWlzbWF0Y2giKTsKIAogICAgIHJlc3VsdCA9
ICIiIiArIGNwcFR5cGUob3BbInJldHVybiJdWzBdKSArICIiIjsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogIiIiCiAKQEAgLTc2LDIwICs3NCwxNiBAQCB0ZW1wbGF0ZTw+
IGJvb2wgVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4
cHJlc3Npb25UeXBlCiBkZWYgYmluYXJ5TWFjcm8obmFtZSk6CiAgICAgb3AgPSBvcGNvZGVzW25h
bWVdCiAgICAgcmV0dXJuICIiIgotdGVtcGxhdGU8PiBib29sIFZhbGlkYXRlOjphZGRPcDxPcFR5
cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3RlbXBsYXRlPD4gYXV0byBW
YWxpZGF0ZTo6YWRkT3A8T3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFJlc3VsdAogewotICAgIGlmIChsZWZ0ICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRl
ciJdWzBdKSArICIiIikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIi
IiIgKyBuYW1lICsgIiIiIGV4cGVjdHMgdGhlIGxlZnQgdmFsdWUgdG8gYmUgb2YgdHlwZTogIiwg
dG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSwgIiBidXQg
Z290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyhsZWZ0KSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKGxlZnQgIT0gIiIiICsgY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBl
PFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIg
bGVmdCB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CiAKLSAgICBpZiAocmlnaHQgIT0gIiIiICsgY3Bw
VHlwZShvcFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUgKyAiIiIgZXhwZWN0cyB0aGUgcmlnaHQgdmFsdWUg
dG8gYmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1b
MF0pICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyhyaWdo
dCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShyaWdo
dCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsxXSkgKyAiIiIpKQorICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxl
ZDogIiIiICsgbmFtZSArICIiIiByaWdodCB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CiAKICAgICBy
ZXN1bHQgPSAiIiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KICIiIgogCkBAIC05NywxMyArOTEsMTEgQEAgZGVm
IGxvYWRNYWNybyhuYW1lKToKICAgICBvcCA9IG9wY29kZXNbbmFtZV0KICAgICByZXR1cm4gIiIi
CiAgICAgY2FzZSBMb2FkT3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAgICAg
ICBpZiAocG9pbnRlciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIp
IHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUg
KyAiIiIgZXhwZWN0cyB0aGUgcG9pbnRlciB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIg
KyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3
aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHBvaW50ZXIpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoVU5MSUtFTFkocG9pbnRlciAhPSAiIiIgKyBjcHBU
eXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5h
bWUgKyAiIiIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7CiAKICAgICAgICAgcmVzdWx0ID0gIiIi
ICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9IiIiCiAKIApAQCAtMTExLDE3ICsxMDMsMTMgQEAg
ZGVmIHN0b3JlTWFjcm8obmFtZSk6CiAgICAgb3AgPSBvcGNvZGVzW25hbWVdCiAgICAgcmV0dXJu
ICIiIgogICAgIGNhc2UgU3RvcmVPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiOiB7Ci0g
ICAgICAgIGlmIChwb2ludGVyICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSAr
ICIiIikgewotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsg
bmFtZSArICIiIiBleHBlY3RzIHRoZSBwb2ludGVyIHRvIGJlIG9mIHR5cGU6ICIsIHRvU3RyaW5n
KCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIiksICIgYnV0IGdvdCBhIHZh
bHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcocG9pbnRlcikpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWShwb2ludGVyICE9ICIiIiAr
IGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIikpCisgICAgICAgICAgICByZXR1cm4g
VW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIi
ICsgbmFtZSArICIiIiBwb2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKIAotICAgICAgICBpZiAodmFs
dWUgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSB7Ci0gICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIiIGV4cGVj
dHMgdGhlIHZhbHVlIHRvIGJlIG9mIHR5cGU6ICIsIHRvU3RyaW5nKCIiIiArIGNwcFR5cGUob3Bb
InBhcmFtZXRlciJdWzBdKSArICIiIiksICIgYnV0IGdvdCBhIHZhbHVlIHdpdGggdHlwZTogIiwg
dG9TdHJpbmcodmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoVU5MSUtFTFkodmFsdWUgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVy
Il1bMV0pICsgIiIiKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6
OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIHZhbHVlIHR5
cGUgbWlzbWF0Y2giKTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9IiIiCiAKIApAQCAtMTQxLDIwICsxMjksMjAgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAogIiIiICsgdW5hcnlTcGVjaWFsaXphdGlvbnMgKyBiaW5hcnlTcGVj
aWFsaXphdGlvbnMgKyAiIiIKIAotYm9vbCBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCkK
K2F1dG8gVmFsaWRhdGU6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3QpIC0+IFJlc3VsdAogewotICAgIGlm
ICghaGFzTWVtb3J5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoVU5MSUtFTFko
IWhhc01lbW9yeSgpKSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJy
b3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGxvYWQgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1v
cnkiKTsKIAogICAgIHN3aXRjaCAob3ApIHsKICIiIiArIGxvYWRDYXNlcyArICIiIgogICAgIH0K
IH0KIAotYm9vbCBWYWxpZGF0ZTo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCkKK2F1dG8gVmFsaWRhdGU6
OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgdWludDMyX3QpIC0+IFJlc3VsdAogewotICAgIGlmICghaGFzTWVtb3J5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoVU5MSUtFTFkoIWhhc01lbW9yeSgpKSkK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRh
dGlvbiBmYWlsZWQ6IHN0b3JlIGluc3RydWN0aW9uIHdpdGhvdXQgbWVtb3J5Iik7CiAKICAgICBz
d2l0Y2ggKG9wKSB7CiAiIiIgKyBzdG9yZUNhc2VzICsgIiIiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcAppbmRleCA1MWRkOThmLi44YWFmNGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleAog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICAgICAg
c3dpdGNoIChpbXBvcnQua2luZCkgewotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpGdW5j
dGlvbjogeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKICAg
ICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6CiAgICAgICAgICAgICAv
LyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQpAQCAtMTI5LDcgKzEyOSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0
YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBp
bXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbDo6VGFibGU6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRh
YmxlOiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzVGFibGVJbXBvcnQpOyAvLyBU
aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgogICAgICAg
ICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFibGUgaW1wb3J0KToKICAgICAgICAgICAg
IGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKQEAgLTE2MCw3ICsxNjAsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhl
Y1N0YXRlKiBleAogICAgICAgICAgICAgaW5zdGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
OjpNZW1vcnk6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewog
ICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghaGFzTWVtb3J5SW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFu
dGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSk7CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9y
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4
dGVybmFsOjpHbG9iYWw6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDogewogICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6CiAgICAgICAg
ICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBpbW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVF
cnJvci4KICAgICAgICAgICAgIEFTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9y
dC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCmluZGV4IGYwYzNjMzYuLjQ5N2Y0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
QEAgLTcyLDE5ICs3MiwxOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgY29uc3QgV2FzbQogICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUluZm9y
bWF0aW9uLmV4cG9ydHMpIHsKICAgICAgICAgc3dpdGNoIChleHAua2luZCkgewotICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsOjpGdW5jdGlvbjogeworICAgICAgICBjYXNlIFdhc206OkV4dGVy
bmFsS2luZDo6RnVuY3Rpb246IHsKICAgICAgICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVu
dHJ5OjpjcmVhdGVMb2NhbChleHAuZmllbGQsIGV4cC5maWVsZCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6VGFibGU6IHsKKyAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CiAgICAgICAgICAgICAvLyBG
SVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpN
ZW1vcnk6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewogICAg
ICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU2NzEKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2Fz
bTo6RXh0ZXJuYWw6Okdsb2JhbDogeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
R2xvYmFsOiB7CiAgICAgICAgICAgICAvLyBJbiB0aGUgTVZQLCBvbmx5IGltbXV0YWJsZSBnbG9i
YWwgdmFyaWFibGVzIGNhbiBiZSBleHBvcnRlZC4KICAgICAgICAgICAgIGFkZEV4cG9ydEVudHJ5
KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChleHAuZmllbGQsIGV4cC5maWVsZCkpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLmV4cG9ydHMpIHsK
ICAgICAgICAgSlNWYWx1ZSBleHBvcnRlZFZhbHVlOwogICAgICAgICBzd2l0Y2ggKGV4cC5raW5k
KSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OkZ1bmN0aW9uOiB7CisgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewogICAgICAgICAgICAgLy8gMS4gSWYg
ZSBpcyBhIGNsb3N1cmUgYzoKICAgICAgICAgICAgIC8vICAgaS4gSWYgdGhlcmUgaXMgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCBmdW5jIGluIGZ1bmNzIHdob3NlIGZ1bmMuW1tD
bG9zdXJlXV0gZXF1YWxzIGMsIHRoZW4gcmV0dXJuIGZ1bmMuCiAgICAgICAgICAgICAvLyAgIGlp
LiAoTm90ZTogQXQgbW9zdCBvbmUgd3JhcHBlciBpcyBjcmVhdGVkIGZvciBhbnkgY2xvc3VyZSwg
c28gZnVuYyBpcyB1bmlxdWUsIGV2ZW4gaWYgdGhlcmUgYXJlIG11bHRpcGxlIG9jY3VycmFuY2Vz
IGluIHRoZSBsaXN0LiBNb3Jlb3ZlciwgaWYgdGhlIGl0ZW0gd2FzIGFuIGltcG9ydCB0aGF0IGlz
IGFscmVhZHkgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCwgdGhlbiB0aGUgb3Jp
Z2luYWwgZnVuY3Rpb24gb2JqZWN0IHdpbGwgYmUgZm91bmQuIEZvciBpbXBvcnRzIHRoYXQgYXJl
IHJlZ3VsYXIgSlMgZnVuY3Rpb25zLCBhIG5ldyB3cmFwcGVyIHdpbGwgYmUgY3JlYXRlZC4pCkBA
IC0xNDUsMTYgKzE0NSwxNiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAgICAgICAgICAg
ICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OlRhYmxlOiB7
CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogewogICAgICAgICAgICAg
Ly8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc4Mgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bDo6TWVtb3J5OiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1NjcxCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWw6Okdsb2JhbDogeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6R2xvYmFsOiB7CiAgICAgICAgICAgICAvLyBBc3NlcnQ6IHRoZSBnbG9iYWwgaXMgaW1t
dXRhYmxlIGJ5IE1WUCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQuCiAgICAgICAgICAgICBjb25zdCBX
YXNtOjpHbG9iYWwmIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZXhwLmtpbmRJ
bmRleF07CiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xv
YmFsOjpJbW11dGFibGUpOwotLSAKMi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="319494"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297168</attachid>
            <date>2016-12-14 22:13:34 -0800</date>
            <delta_ts>2016-12-15 15:05:56 -0800</delta_ts>
            <desc>patch for review</desc>
            <filename>0001-Improve-parse-errors.patch</filename>
            <type>text/plain</type>
            <size>186414</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBmYThjNTEyMTY4YTJmZDc0Zjc4ZjU0ZWUxNGVhNjNiYjA5ZGM1ZTZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDEwOjEzOjQ1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gSW1wcm92
ZSBwYXJzZSBlcnJvcnMKCi0tLQogSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzICAgICAg
ICAgICAgICAgICAgICAgfCAgMjUgKy0KIEpTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9y
LmpzICAgICAgICAgICAgICAgIHwgIDYzICstCiBKU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpz
ICAgICAgICAgICAgICAgICAgICAgICB8IDEwMSArKy0tCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfU3RhcnQuanMgICAgICAgICAgICAgICAgICB8ICAgMiArLQogSlNUZXN0cy93YXNtL2pzLWFw
aS90ZXN0X2Jhc2ljX2FwaS5qcyAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgMjIxICsrKy0tLS0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggICAgIHwgICAzICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggICAgICAgICAgICB8ICA2NyAr
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oICAgIHwg
NDQ5ICsrKysrKy0tLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5jcHAgICAgfCA2MzYgKysrKysrKystLS0tLS0tLS0tLS0tCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggICAgICB8ICA1MiArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oICAgICAgICAgICAgfCAgOTIgKystCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNiArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggICAgICAgICAgfCAgNDUg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgICAgICAgIHwg
MzQ3ICsrKystLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
aCAgICAgICAgICB8ICAgMyArLQogLi4uL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklu
bGluZXNIZWFkZXIucHkgfCAgIDQgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRl
V2FzbU9wc0hlYWRlci5weSAgIHwgICAyICstCiAuLi4vd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0
ZUlubGluZXNIZWFkZXIucHkgICAgICB8ICA2MCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmNwcCAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcCAgICAgICAgICAgIHwgICA4ICstCiAyMSBmaWxlcyBjaGFuZ2Vk
LCA5MjggaW5zZXJ0aW9ucygrKSwgMTI5OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQu
anMKaW5kZXggNGM4MWMzZS4uMTYwZmZkMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFw
aS9lbGVtZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcwpAQCAtMSwy
MSArMSw2IEBACiBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIGltcG9ydCAq
IGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogCi1mdW5jdGlvbiBhc3NlcnRCYWRCaW5h
cnkoYnVpbGRlciwgc3RyKSB7Ci0gICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpOwotICAgIGxldCB0aHJldyA9IGZhbHNlOwotICAgIHRyeSB7Ci0gICAgICAgIG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgdGhyZXcg
PSB0cnVlOwotICAgICAgICBhc3NlcnQudHJ1dGh5KGUudG9TdHJpbmcoKS5pbmRleE9mKHN0cikg
IT09IC0xKTsKLSAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yKTsKLSAgICB9Ci0gICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7Ci19Ci0KLWNv
bnN0IGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gRWxl
bWVudCI7Ci0KIHsKICAgICAvLyBCYWQgZWxlbWVudCBzZWN0aW9uIGIvYyBubyBUYWJsZSBzZWN0
aW9uL2ltcG9ydC4KICAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQpAQCAtMzMsNyAr
MTgsNyBAQCBjb25zdCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBz
ZWN0aW9uIEVsZW1lbnQiOwogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKIAot
ICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyk7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjIgLyA0MTogRWxlbWVudCBzZWN0aW9uIGV4
cGVjdHMgYSBUYWJsZSB0byBiZSBwcmVzZW50IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC01Niw3
ICs0MSw3IEBAIGNvbnN0IGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nID0gImNvdWxkbid0IHBhcnNl
IHNlY3Rpb24gRWxlbWVudCI7CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwog
Ci0gICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nKTsK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMCAvIDQ3OiBFbGVtZW50IHNlY3Rpb24g
Y2FuIG9ubHkgaGF2ZSBvbmUgVGFibGUgZm9yIG5vdyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0KIAogewpAQCAt
NzksNyArNjQsNyBAQCBjb25zdCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyA9ICJjb3VsZG4ndCBw
YXJzZSBzZWN0aW9uIEVsZW1lbnQiOwogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQo
KTsKIAotICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRFbGVtZW50U2VjdGlvblN0cmlu
Zyk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzUgLyA0OTogRWxlbWVudCBzZWN0
aW9uJ3MgMHRoIGVsZW1lbnQgd3JpdGVzIHRvIGluZGV4IDIwIHdoaWNoIGV4Y2VlZHMgdGhlIG1h
eGltdW0gMjAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTEwMiw3ICs4Nyw3IEBAIGNvbnN0IGJh
ZEVsZW1lbnRTZWN0aW9uU3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gRWxlbWVudCI7
CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0QmFkQmlu
YXJ5KGJ1aWxkZXIsIGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nKTsKKyAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAzNSAvIDQ4OiBFbGVtZW50IHNlY3Rpb24ncyAwdGggZWxlbWVudCB3cml0
ZXMgdG8gaW5kZXggMjAgd2hpY2ggZXhjZWVkcyB0aGUgbWF4aW11bSAyMCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsK
IH0KIAogewpAQCAtMTI1LDcgKzExMCw3IEBAIGNvbnN0IGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5n
ID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gRWxlbWVudCI7CiAgICAgICAgICAgICAuRW5kKCkK
ICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEVsZW1l
bnRTZWN0aW9uU3RyaW5nKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzOCAvIDUw
OiBFbGVtZW50IHNlY3Rpb24ncyAwdGggZWxlbWVudCdzIDJ0aCBpbmRleCBpcyAxIHdoaWNoIGV4
Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgMSAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0K
IAogewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMgYi9K
U1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwppbmRleCA2ZmEzNWVjLi4yYTdkOGMw
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcworKysgYi9K
U1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwpAQCAtMjMsMTQgKzIzLDcgQEAgaW1w
b3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBsZXQgcGFzc2VkID0gZmFs
c2U7Ci0gICAgdHJ5IHsKLSAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4uZ2V0KCkpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUubWVzc2Fn
ZSA9PT0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gR2xvYmFsOiBHbG9iYWwgZGVjbGFyYXRpb25z
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpCi0gICAg
ICAgICAgICBwYXNzZWQgPSB0cnVlOwotICAgIH0KLSAgICBhc3NlcnQudHJ1dGh5KHBhc3NlZCk7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQo
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMjYgLyA1OTogZ2V0X2dsb2JhbCdzIGluZGV4IDAgZXhjZWVkcyB0aGUg
bnVtYmVyIG9mIGltcG9ydHMgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4uZ2V0KCkpJykiKTsKIH0KIAogCkBAIC01OSwxNCArNTIsNyBAQCBpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5
KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGxldCBwYXNzZWQgPSBmYWxzZTsKLSAgICB0cnkg
ewotICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQo
KSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBpZiAoZS5tZXNzYWdlID09PSAiY291bGRu
J3QgcGFyc2Ugc2VjdGlvbiBJbXBvcnQ6IEltcG9ydCBkZWNsYXJhdGlvbnMgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIikKLSAgICAgICAgICAgIHBhc3Nl
ZCA9IHRydWU7Ci0gICAgfQotICAgIGFzc2VydC50cnV0aHkocGFzc2VkKTsKKyAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzMiAvIDc2OiBNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogewpAQCAtOTEsMTQg
Kzc3LDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAgICAgY29uc3Qg
YmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBsZXQg
cGFzc2VkID0gZmFsc2U7Ci0gICAgdHJ5IHsKLSAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAg
aWYgKGUubWVzc2FnZSA9PT0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gRXhwb3J0OiBFeHBvcnRz
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpCi0gICAg
ICAgICAgICBwYXNzZWQgPSB0cnVlOwotICAgIH0KLSAgICBhc3NlcnQudHJ1dGh5KHBhc3NlZCk7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQo
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgNTEgLyA1OTogMXRoIEV4cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVk
ICdnbG9iYWwnIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSkn
KSIpOwogfQogCiB7CkBAIC0xMjQsMTQgKzEwMyw3IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4u
L0J1aWxkZXIuanMnOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAg
ICBiaW4udHJpbSgpOwogCi0gICAgbGV0IHBhc3NlZCA9IGZhbHNlOwotICAgIHRyeSB7Ci0gICAg
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKTsKLSAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09ICJBdHRlbXB0IHRvIHN0
b3JlIHRvIGltbXV0YWJsZSBnbG9iYWwuIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbi5nZXQoKSknKSIpCi0gICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwotICAgIH0KLSAg
ICBhc3NlcnQudHJ1dGh5KHBhc3NlZCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiBzZXRfZ2xvYmFsIDAgaXMgaW1tdXRh
YmxlIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwog
fQogCiAKQEAgLTE1OCwxNCArMTMwLDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRl
ci5qcyc7CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50
cmltKCk7CiAKLSAgICBsZXQgcGFzc2VkID0gZmFsc2U7Ci0gICAgdHJ5IHsKLSAgICAgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpOwotICAgIH0gY2F0
Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUubWVzc2FnZSA9PT0gIkF0dGVtcHQgdG8gdXNlIHVua25v
d24gZ2xvYmFsLiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkp
JykiKQotICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgYXNzZXJ0LnRydXRo
eShwYXNzZWQpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCB2YWxpZGF0ZTogc2V0X2dsb2JhbCAxIG9mIHVua25vd24gZ2xvYmFsLCBsaW1p
dCBpcyAxIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIp
OwogfQogCiAKQEAgLTE5MSwxNCArMTU2LDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVp
bGRlci5qcyc7CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJp
bi50cmltKCk7CiAKLSAgICBsZXQgcGFzc2VkID0gZmFsc2U7Ci0gICAgdHJ5IHsKLSAgICAgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpOwotICAgIH0g
Y2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUubWVzc2FnZSA9PT0gIkF0dGVtcHQgdG8gc2V0IGds
b2JhbCB3aXRoIHR5cGU6IEYzMiB3aXRoIGEgdmFyaWFibGUgb2YgdHlwZTogSTMyIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpCi0gICAgICAgICAgICBw
YXNzZWQgPSB0cnVlOwotICAgIH0KLSAgICBhc3NlcnQudHJ1dGh5KHBhc3NlZCk7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRl
OiBzZXRfZ2xvYmFsIDAgd2l0aCB0eXBlIEYzMiB3aXRoIGEgdmFyaWFibGUgb2YgdHlwZSBJMzIg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAK
IGZvciAoIGxldCBpbXAgb2YgW3VuZGVmaW5lZCwgbnVsbCwge30sICgpID0+IHt9LCAibnVtYmVy
IiwgbmV3IE51bWJlcig0KV0pIHsKQEAgLTIyNiwxMyArMTg0LDYgQEAgZm9yICggbGV0IGltcCBv
ZiBbdW5kZWZpbmVkLCBudWxsLCB7fSwgKCkgPT4ge30sICJudW1iZXIiLCBuZXcgTnVtYmVyKDQp
XSkgewogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJp
bSgpOwogCi0gICAgbGV0IHBhc3NlZCA9IGZhbHNlOwogICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKTsKLSAgICB0cnkgewotICAgICAgICBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBnbG9iYWw6IGltcCB9IH0pOwotICAg
IH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUubWVzc2FnZSA9PT0gImltcG9ydGVkIGdsb2Jh
bCBtdXN0IGJlIGEgbnVtYmVyIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IGltcDogeyBnbG9iYWw6IGltcCB9IH0pJykiKQotICAgICAgICAgICAgcGFzc2Vk
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgYXNzZXJ0LnRydXRoeShwYXNzZWQpOworICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZ2xv
YmFsOiBpbXAgfSB9KSwgVHlwZUVycm9yLCAiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1i
ZXIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7
IGdsb2JhbDogaW1wIH0gfSknKSIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFw
aS90YWJsZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggMzc1ODdkMC4u
Y2E0NzY2YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9K
U1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCkBAIC0xLDE1ICsxLDYgQEAKIGltcG9ydCBCdWls
ZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fz
c2VydC5qcyc7CiAKLWNvbnN0IGJhZFRhYmxlU3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rp
b24gVGFibGU6IEluZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpIjsKLWNvbnN0IGJhZEltcG9ydFN0
cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIEltcG9ydDogSW1wb3J0IGRlY2xhcmF0aW9u
cyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJykiOwotY29uc3QgYmFk
RXhwb3J0U3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gRXhwb3J0OiBFeHBvcnRzIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiknKSI7Ci0KLWZ1bmN0aW9uIGFz
c2VydEJhZEJpbmFyeShidWlsZGVyLCBzdHIpIHsKLSAgICBjb25zdCBiaW4gPSBidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgc3RyKTsKLX0KLQogewog
ICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCiAgICAgICAgIC5UeXBlKCkuRW5kKCkK
QEAgLTIyLDcgKzEzLDcgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIHN0cikg
ewogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAg
YXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZFRhYmxlU3RyaW5nKTsKKyAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQxOiBUYWJsZSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBh
biBJbXBvcnQgaGFzIGEgdGFibGUgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTM1LDcgKzI2LDcg
QEAgZnVuY3Rpb24gYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIHN0cikgewogICAgICAgICAuRW5k
KCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0QmFkQmluYXJ5
KGJ1aWxkZXIsIGJhZFRhYmxlU3RyaW5nKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxNyAvIDI4OiBUYWJsZSBjb3VudCBvZiAyIGlzIGludmFsaWQsIG9ubHkgMSBpcyBhbGxvd2Vk
IGZvciBub3cgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTUxLDcgKzQyLDcgQEAgZnVuY3Rpb24g
YXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIHN0cikgewogICAgICAgICAgICAgICAgIC5DYWxsSW5k
aXJlY3QoMCwgMCkKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNz
ZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsICJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBh
IHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNCAvIDc6
IGNhbGxfaW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEgdGFibGUgaXMgZGVmaW5lZCBvciBp
bXBvcnRlZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0KIAogewpAQCAtNzAsNyArNjEsNyBAQCBmdW5jdGlvbiBh
c3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgc3RyKSB7CiAgICAgICAgICAgICAgICAgLkNhbGxJbmRp
cmVjdCgwLCAxKQogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3Nl
cnRCYWRCaW5hcnkoYnVpbGRlciwgImNhbGxfaW5kaXJlY3QgJ3Jlc2VydmVkJyB2YXJ1aW50MSBt
dXN0IGJlIDB4MCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJykiKTsK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA2IC8gNzogY2FsbF9pbmRpcmVjdCdzICdy
ZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTgz
LDcgKzc0LDcgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIHN0cikgewogICAg
ICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0
QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEV4cG9ydFN0cmluZyk7CisgICAgYXNzZXJ0LnRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMjMgLyAyNjogY2FuJ3QgZXhwb3J0IGEgbm9uLWV4aXN0ZW50IFRhYmxlIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSIpOwogfQogCiB7CkBAIC05OSwxMCArOTAsMTAgQEAgZnVuY3Rpb24gYXNzZXJ0QmFk
QmluYXJ5KGJ1aWxkZXIsIHN0cikgewogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQog
ICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEV4cG9ydFN0
cmluZyk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzAgLyAzMzogY2FuJ3QgZXhw
b3J0IFRhYmxlIDEgb25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiKTsKIH0KIAotZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGUodGFibGVEZXNjcmlwdGlvbikgewor
ZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGUodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAg
IGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCiAgICAgICAgIC5UeXBlKCkuRW5kKCkKICAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKQEAgLTExMSwxMCArMTAyLDEwIEBAIGZ1bmN0aW9uIGFz
c2VydEJhZFRhYmxlKHRhYmxlRGVzY3JpcHRpb24pIHsKICAgICAgICAgLkVuZCgpCiAgICAgICAg
IC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBi
YWRUYWJsZVN0cmluZyk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgbWVzc2FnZSk7CiB9CiAKLWZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRhYmxl
RGVzY3JpcHRpb24pIHsKK2Z1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3Jp
cHRpb24sIG1lc3NhZ2UpIHsKICAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQogICAg
ICAgICAuVHlwZSgpLkVuZCgpCiAgICAgICAgIC5JbXBvcnQoKQpAQCAtMTIzLDI5ICsxMTQsNTMg
QEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbikgewogICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5FbmQoKTsK
LSAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkSW1wb3J0U3RyaW5nKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBtZXNzYWdlKTsKIH0KIAogewog
ICAgIGxldCBiYWREZXNjcmlwdGlvbnMgPSBbCi0gICAgICAgIHtpbml0aWFsOiAxMCwgZWxlbWVu
dDogImkzMiJ9LAotICAgICAgICB7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmMzIifSwKLSAgICAg
ICAge2luaXRpYWw6IDEwLCBlbGVtZW50OiAiZjY0In0sCi0gICAgICAgIHtpbml0aWFsOiAxMCwg
ZWxlbWVudDogImk2NCJ9LAotICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVt
ZW50OiAiaTMyIn0sCi0gICAgICAgIHtpbml0aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6
ICJmMzIifSwKLSAgICAgICAge2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImY2
NCJ9LAotICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTY0In0s
CisgICAgICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJpMzIifSwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICBbe2luaXRpYWw6IDEw
LCBlbGVtZW50OiAiZjMyIn0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiXSwKKyAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImY2NCJ9LAorICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJs
ZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgIFt7
aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJpNjQifSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFu
eWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVu
YywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAy
MCwgZWxlbWVudDogImkzMiJ9LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290
IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIl0sCisgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50
OiAiZjMyIn0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKKyAgICAgICAgW3tpbml0aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJmNjQifSwK
KyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8g
MjQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNTog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImk2NCJ9LAorICAgICAgICAg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUg
dHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAKLSAgICAgICAge2luaXRp
YWw6IDEwLCBtYXhpbXVtOiA5LCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICB7aW5pdGlh
bDogMSwgbWF4aW11bTogMCwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAge2luaXRpYWw6
IDIqKjMyIC0gMSwgbWF4aW11bTogMioqMzIgLSAyLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAg
ICAgICB7aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCisgICAgICAgIFt7aW5p
dGlhbDogMTAsIG1heGltdW06IDksIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCisgICAgICAgICAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNpemFibGUg
bGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRo
YW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzNTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBp
bml0aWFsIHBhZ2UgY291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVt
IDkgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIl0sCisgICAgICAgIFt7aW5pdGlhbDogMSwgbWF4aW11bTogMCwgZWxlbWVu
dDogImFueWZ1bmMifSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDIxIC8gMjQ6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNv
dW50IG9mIDEgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwK
KyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5IC8g
MzU6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEgd2hpY2gg
aXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgIFt7aW5p
dGlhbDogMioqMzIgLSAxLCBtYXhpbXVtOiAyKiozMiAtIDIsIGVsZW1lbnQ6ICJhbnlmdW5jIn0s
CisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAv
IDMyOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3
Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
NyAvIDQzOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0
OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSJdLAorICAgICAgICBbe2luaXRpYWw6IDIqKjMxLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAor
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAy
NzogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlz
IGludmFsaWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWRE
ZXNjcmlwdGlvbnMpIHsKLSAgICAgICAgYXNzZXJ0QmFkVGFibGUoZCk7Ci0gICAgICAgIGFzc2Vy
dEJhZFRhYmxlSW1wb3J0KGQpOworICAgICAgICBhc3NlcnRCYWRUYWJsZShkWzBdLCBkWzFdKTsK
KyAgICAgICAgYXNzZXJ0QmFkVGFibGVJbXBvcnQoZFswXSwgZFsyXSk7CiAgICAgfQogfQogCkBA
IC0xNTksNyArMTc0LDcgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQodGFibGVEZXNj
cmlwdGlvbikgewogICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQogICAgICAgICAuQ29kZSgpCiAg
ICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkSW1wb3J0U3Ry
aW5nKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzOSAvIDQ4OiBUYWJsZSBzZWN0
aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgdGFibGUgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9
CiAKIApAQCAtMTczLDIzICsxODgsMTUgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQo
dGFibGVEZXNjcmlwdGlvbikgewogICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKICAgICAg
ICAgICAgIC5Db2RlKCkKICAgICAgICAgICAgIC5FbmQoKTsKLQotICAgICAgICBsZXQgdGhyZXcg
PSBmYWxzZTsKICAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAg
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlfX0pOwotICAgICAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS50b1N0cmluZygpLCBtZXNz
YWdlKTsKLSAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhc3Nl
cnQudHJ1dGh5KHRocmV3KTsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSksIFR5cGVFcnJvciwgbWVzc2Fn
ZSk7CiAgICAgfQogCiAgICAgY29uc3QgYmFkVGFibGVzID0gWwotICAgICAgICBbe2luaXRpYWw6
IDEwMCwgbWF4aW11bToxMDAsIGVsZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHtpbml0aWFsOjEwMCwgZWxlbWVudDogImFueWZ1bmMifSksICJUeXBlRXJyb3I6IFRhYmxl
IGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVz
IHRoYXQgaXQgZG9lcyJdLAotICAgICAgICBbe2luaXRpYWw6IDEwMCwgbWF4aW11bToxMDAsIGVs
ZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOjEwMCwgbWF4
aW11bToxMDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pLCAiVHlwZUVycm9yOiBJbXBvcnRlZCBUYWJs
ZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGlt
dW0nIl0sCi0gICAgICAgIFt7aW5pdGlhbDogMTAwLCBlbGVtZW50OiJhbnlmdW5jIn0sIG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDoxMCwgZWxlbWVudDogImFueWZ1bmMifSksICJUeXBl
RXJyb3I6IFRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21h
bGwiXSwKLSAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2Vi
QXNzZW1ibHkuVGFibGUoe2luaXRpYWw6OSwgZWxlbWVudDogImFueWZ1bmMifSksICJUeXBlRXJy
b3I6IFRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwi
XSwKKyAgICAgICAgW3tpbml0aWFsOiAxMDAsIG1heGltdW06MTAwLCBlbGVtZW50OiJhbnlmdW5j
In0sIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDoxMDAsIGVsZW1lbnQ6ICJhbnlmdW5j
In0pLCAiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1
bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIl0sCisgICAgICAgIFt7aW5pdGlhbDogMTAwLCBtYXhp
bXVtOjEwMCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRp
YWw6MTAwLCBtYXhpbXVtOjEwMSwgZWxlbWVudDogImFueWZ1bmMifSksICJJbXBvcnRlZCBUYWJs
ZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGlt
dW0nIl0sCisgICAgICAgIFt7aW5pdGlhbDogMTAwLCBlbGVtZW50OiJhbnlmdW5jIn0sIG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDoxMCwgZWxlbWVudDogImFueWZ1bmMifSksICJUYWJs
ZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIl0sCisgICAg
ICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHtpbml0aWFsOjksIGVsZW1lbnQ6ICJhbnlmdW5jIn0pLCAiVGFibGUgaW1wb3J0IHByb3Zp
ZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCJdLAogICAgIF07CiAgICAgZm9yIChj
b25zdCBbZCwgdCwgbV0gb2YgYmFkVGFibGVzKSB7CiAgICAgICAgIGFzc2VydEJhZFRhYmxlSW5z
dGFuY2UoZCwgdCwgbSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3Rh
cnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKaW5kZXggMDVkNjE5ZC4u
YjQ0NDU2OSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzCisr
KyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcwpAQCAtMzEsNSArMzEsNSBAQCBp
bXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICAgICAgLlN0YXJ0KDApLkVu
ZCgpIC8vIEludmFsaWQgaW5kZXguCiAgICAgICAgIC5Db2RlKCkuRW5kKCk7CiAgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBFcnJvciwgYGNvdWxkbid0IHBhcnNlIHNlY3Rpb24g
U3RhcnQ6IFN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbiknKWApOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pLCBFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMTcgLyAyMDogU3RhcnQgaW5kZXggMCBleGNlZWRzIGZ1bmN0aW9uIGluZGV4
IHNwYWNlIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpYCk7CiB9
KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKaW5kZXggN2IzZDEzNy4uZmE0
MTFkNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwor
KysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCkBAIC01NSw3ICs1NSw3
IEBAIGZvciAoY29uc3QgYyBpbiBjb25zdHJ1Y3RvclByb3BlcnRpZXMpIHsKICAgICAgICAgICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpLCBUeXBlRXJy
b3IsIGBmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5Nb2R1bGUgbXVzdCBiZSBhbiBBcnJh
eUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eVtjXShpbnZhbGlkKScpYCk7CiAgICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIFtuZXcgQXJy
YXlCdWZmZXIoKSwgbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigpKSwgbmV3IEludDhBcnJh
eSgpLCBuZXcgVWludDhBcnJheSgpLCBuZXcgVWludDhDbGFtcGVkQXJyYXkoKSwgbmV3IEludDE2
QXJyYXkoKSwgbmV3IFVpbnQxNkFycmF5KCksIG5ldyBJbnQzMkFycmF5KCksIG5ldyBVaW50MzJB
cnJheSgpLCBuZXcgRmxvYXQzMkFycmF5KCksIG5ldyBGbG9hdDY0QXJyYXkoKV0pCiAgICAgICAg
ICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3NjgKLSAg
ICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciks
IEVycm9yLCBgTW9kdWxlIGlzIDAgYnl0ZXMsIGV4cGVjdGVkIGF0IGxlYXN0IDggYnl0ZXMgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpJylgKTsKKyAgICAgICAgICAgIGFz
c2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVycm9yLCBgV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAwIC8gMDogZXhwZWN0ZWQgYSBt
b2R1bGUgb2YgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2Nd
KGJ1ZmZlciknKWApOwogICAgICAgICBhc3NlcnQuaW5zdGFuY2VvZihuZXcgV2ViQXNzZW1ibHlb
Y10oZW1wdHlNb2R1bGVBcnJheSksIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIC8vIEZJ
WE1FIHRlc3QgbmV1dGVyZWQgVHlwZWRBcnJheSBhbmQgVHlwZWRBcnJheVZpZXcuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4OTkKICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5k
ZXggNjk0OGYxMi4uZmZlOWRlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTM3LDUzICsxMzcsNjYgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxs
cHRyOwogCisgICAgdHlwZWRlZiBTdHJpbmcgRXJyb3JUeXBlOworICAgIHR5cGVkZWYgVW5leHBl
Y3RlZFR5cGU8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OworICAgIHR5cGVkZWYgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1
bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5FIFVuZXhw
ZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNlZSBBREwg
Y29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0
KG1ha2VTdHJpbmcoQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBp
bGluZzogIiksIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisjZGVmaW5lIFdBU01fQ09N
UElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZ
KGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gZmFpbChfX1ZB
X0FSR1NfXyk7ICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogICAgIEIzSVJH
ZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21J
bnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3Qg
SW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJik7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7Ci0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJf
dCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwogCiAg
ICAgLy8gTG9jYWxzCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7
CiAKICAgICAvLyBHbG9iYWxzCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUgdmFsdWUpOwogCiAgICAgLy8gTWVtb3J5Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
bG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHN0
b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwogCiAgICAgLy8gQmFzaWMgb3Bl
cmF0b3JzCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25U
eXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25U
eXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6
ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8vIENvbnRyb2wgZmxvdwogICAg
IENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7
CiAgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1
cmUpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOwotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxl
KENvbnRyb2xEYXRhJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
SWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEm
IHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShD
b250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAot
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2go
Q29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRj
aChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0
YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2Nr
KENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IEV4
cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0
VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKIAogICAgIC8v
IENhbGxzCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxs
ZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIHZvaWQgYWRkVW5yZWFjaGFibGUoKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNh
bGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZHVtcChj
b25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAotICAgIHZvaWQgc2V0RXJyb3JNZXNzYWdlKFN0cmlu
ZyYmKSB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9Ci0KIHByaXZhdGU6CiAgICAgRXhw
cmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAgRXhwcmVzc2lv
blR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIHVpbnQzMl90IG9mZnNldCk7CkBAIC0yOTEsMjQgKzMwNCwyMiBAQCBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6emVyb0ZvclR5cGUoVHlwZSB0eXBlKQogICAgIHJldHVybiB6ZXJvVmFsdWU7CiB9
CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3Vu
dCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3Vu
dCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGlmICghbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFdBU01fQ09NUElMRV9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9sb2Nh
bHMuc2l6ZSgpICsgY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBtX2xvY2Fs
cy5zaXplKCkgKyBjb3VudCwgIiBsb2NhbHMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFZhcmlhYmxlKiBsb2NhbCA9IG1fcHJvYy5hZGRW
YXJpYWJsZSh0b0IzVHlwZSh0eXBlKSk7CiAgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFwcGVu
ZChsb2NhbCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1
ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgemVyb0ZvclR5cGUodHlwZSkpOwogICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5l
cmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKQorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiB0eXBlcykgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKLSAgICBpZiAoIW1f
bG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0eXBlcy5zaXplKCkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBh
Y2l0eSh0eXBlcy5zaXplKCkpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0eXBlcy5z
aXplKCksICIgYXJndW1lbnRzIik7CiAKICAgICBtX2xvY2Fscy5ncm93KHR5cGVzLnNpemUoKSk7
CiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyh0eXBlcywgbV9wcm9j
LCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCksCkBAIC0zMTcsNDUgKzMyOCw0NiBAQCBib29sIEIz
SVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKQogICAg
ICAgICAgICAgbV9sb2NhbHNbaV0gPSBhcmd1bWVudFZhcmlhYmxlOwogICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2lu
KCksIGFyZ3VtZW50VmFyaWFibGUsIGFyZ3VtZW50KTsKICAgICAgICAgfSk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjpnZXRMb2Nh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKICAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6
OkdldCwgT3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpCith
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVhY2hhYmxlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7
CiAgICAgdW5yZWFjaGFibGUtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICBqaXQuYnJlYWtw
b2ludCgpOwogICAgIH0pOwogICAgIHVucmVhY2hhYmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1
ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OnNldExvY2FsKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CiAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBt
X2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIG1faW5zdGFuY2VW
YWx1ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSk7CiAgICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCB0b0IzVHlwZShtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSksIE9yaWdpbigpLCBnbG9iYWxz
QXJyYXksIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKQorYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlKSA9PSB2
YWx1ZS0+dHlwZSgpKTsKICAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmln
aW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xv
YmFscygpKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwgaW5kZXggKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiBpbmxp
bmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0
aW9uKQpAQCAtNDY1LDEyICs0NzcsMTIgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIE9yaWdpbiBvcmlnaW4sIEV4cHJlc3Npb24KICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6Omxv
YWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KQorYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChwb2ludGVy
LT50eXBlKCkgPT0gSW50MzIpOwogCiAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgT3JpZ2lu
KCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9h
ZE9wKG9wKSksIG9mZnNldCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCkBAIC01Mjcs
MTggKzUzOSwxOCBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9y
ZU9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvbgogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50
MzJfdCBvZmZzZXQpCithdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zm
c2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJ
bnQzMik7CiAKICAgICBlbWl0U3RvcmVPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBh
cmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zm
c2V0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJH
ZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25U
eXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIE9yaWdpbigpLCBjb25k
aXRpb24sIG5vblplcm8sIHplcm8pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07
CiB9CiAKIEIzSVJHZW5lcmF0b3I6OkV4cHJlc3Npb25UeXBlIEIzSVJHZW5lcmF0b3I6OmFkZENv
bnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpCkBAIC01NzYsNyArNTg4LDcgQEAgQjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25h
dHVyZSkKICAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIEJsb2NrVHlw
ZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjph
ZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlw
ZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZG8gc29tZSBraW5kIG9mIHN0YWNr
IHBhc3NpbmcuCiAKQEAgLTU5MSwzNSArNjAzLDM1IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
SWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUm
CiAKICAgICBtX2N1cnJlbnRCbG9jayA9IHRha2VuOwogICAgIHJlc3VsdCA9IENvbnRyb2xEYXRh
KG1fcHJvYywgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2Vu
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5l
cmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBj
dXJyZW50U3RhY2spCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRh
dGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsK
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwg
T3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFj
aGFibGUoZGF0YSk7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFi
bGUoQ29udHJvbERhdGEmIGRhdGEpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVh
Y2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJU
KGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0
YS5zcGVjaWFsOwogICAgIGRhdGEuY29udmVydElmVG9CbG9jaygpOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CiAgICAgaWYgKHJl
dHVyblZhbHVlcy5zaXplKCkpCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEm
IGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcykKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBk
YXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBpZiAoZGF0YS50eXBlKCkgIT0gQmxv
Y2tUeXBlOjpMb29wKQogICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMs
IGRhdGEucmVzdWx0KTsKQEAgLTYzNywxMCArNjQ5LDEwIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6
YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAg
IH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9y
PENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERh
dGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0KTsKQEAgLTY1MSwx
MCArNjYzLDEwIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQogICAgICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5k
Q2FzZShTd2l0Y2hDYXNlKGksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXRzW2ldLT50YXJnZXRCbG9j
a0ZvckJyYW5jaCgpKSkpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYm9vbCBCM0lSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHBy
ZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorYXV0byBCM0lSR2VuZXJhdG9yOjplbmRCbG9j
ayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9s
RGF0YTsKIApAQCAtNjY2LDcgKzY3OCw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2so
Q29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjCiB9CiAK
IAotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYg
ZW50cnkpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVu
dHJ5JiBlbnRyeSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0g
ZW50cnkuY29udHJvbERhdGE7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlv
bjsKQEAgLTY3OSwxMCArNjkxLDEwIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJl
YWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KQogICAgIGZvciAoVmFyaWFibGUqIHJlc3VsdCA6
IGRhdGEucmVzdWx0KQogICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpH
ZXQsIE9yaWdpbigpLCByZXN1bHQpKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7
IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIEFTU0VSVChzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPT0g
YXJncy5zaXplKCkpOwogCkBAIC03MDUsMTAgKzcxNywxMCBAQCBib29sIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1
cmUsCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFz
dCgpOwogICAgIEFTU0VSVChzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgPT0gYXJncy5zaXpl
KCkpOwpAQCAtNzc5LDcgKzc5MSw3IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5KFZhcmlhYmxlKiB2YXJpYWJsZSwgRXhw
cmVzc2lvblR5cGUgc291cmNlKQpAQCAtOTA3LDE1ICs5MTksMTQgQEAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgV2FzbUlu
dGVybmFsRnUKICAgICByZXR1cm4ganNFbnRyeXBvaW50OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4
X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
KiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25J
bmRleFNwYWNlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgb3B0TGV2
ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQs
IHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0
IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byBy
ZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCiAgICAg
UHJvY2VkdXJlIHByb2NlZHVyZTsKICAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQodm0sIGluZm8s
IHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rp
b25JbmRleFNwYWNlKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIo
Y29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBpbmZvKTsKLSAgICBpZiAoIXBhcnNlci5wYXJzZSgpKQotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJ
TFMocGFyc2VyLnBhcnNlKCkpOwogCiAgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7
CiAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCAiQWZ0ZXIgcGFyc2luZzpcbiIpOwpAQCAtOTI5LDEz
ICs5NDAsMTMgQEAgc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFu
ZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW4KICAgICByZXN1bHQtPndhc21FbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHBy
b2NlZHVyZSwgb3B0TGV2ZWwpOwogICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgcmVzdWx0
LT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIo
dm0sICpyZXN1bHQsIHNpZ25hdHVyZSwgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZSgpLCBpbmZvLm1lbW9yeSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOwogfQogCiAvLyBDdXN0b20gd2FzbSBvcHMuIFRoZXNlIGFyZSB0aGUg
b25lcyB0b28gbWVzc3kgdG8gZG8gaW4gd2FzbS5qc29uLgogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2lu
KCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwpAQCAtOTQ0LDExICs5NTUsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKICAgICB9KTsK
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgSW50NjQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKQEAgLTk1NywzMyArOTY4LDMzIEBAIGJvb2wgQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkK
K2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHBvcGNudCBpbnN0cnVjdGlvbiBpZiBTU0U0
IGlzIGF2YWlsYWJsZSBidXQgd2UgZG9uJ3QgaGF2ZSBjb2RlIHRvIGRldGVjdCBTU0U0IHlldC4K
ICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUz
NjMKICAgICB1aW50MzJfdCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVl
KSAtPiB1aW50MzJfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OwogICAg
IFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihwb3Bjb3VudCkpOwog
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUg
cG9wY250IGluc3RydWN0aW9uIGlmIFNTRTQgaXMgYXZhaWxhYmxlIGJ1dCB3ZSBkb24ndCBoYXZl
IGNvZGUgdG8gZGV0ZWN0IFNTRTQgeWV0LgogICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTM2MwogICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGlu
dDY0X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRp
bl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsKICAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdp
c2VfY2FzdDx2b2lkKj4ocG9wY291bnQpKTsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpLCBFZmZlY3RzOjpu
b25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVy
dFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIERvdWJsZSwgT3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQpAQCAt
OTk5LDExICsxMDEwLDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJ
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAgICAgfSk7CiAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRj
aHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRl
PD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBGbG9hdCwgT3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQpAQCAtMTAx
OSwxMSArMTAzMCwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29u
dmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvbgogICAgIH0pOwogICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+
Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3By
b2MsIERvdWJsZSwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTAzMiwxMSArMTA0MywxMSBAQCBib29sIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBPcmlnaW4oKSk7CiAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMDQ1LDEx
ICsxMDU2LDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlCiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJv
b2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3Vi
bGUsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKQEAgLTEwNTgsMTEgKzEwNjksMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JgogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAg
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEwNzEsMTEgKzEwODIsMTEgQEAg
Ym9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOwogICAgIFZhbHVlKiBt
aW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywg
T3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpKTsKQEAgLTEwOTQsMTEgKzExMDUsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHkKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwog
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgVmFsdWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSk7CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKQEAgLTExMTcsMTIg
KzExMjgsMTIgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Yz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICB9KTsKICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogCiB0ZW1wbGF0ZTw+Ci1i
b29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBz
dGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAq
IC0yLjApOwogICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwpAQCAtMTE0MSwxMSArMTE1Miwx
MSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0
PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKTsKICAg
ICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+
KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwpAQCAtMTE2NCwxMSArMTE3NSwxMSBAQCBib29sIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNT
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtc3RhdGljX2Nhc3Q8ZG91YmxlPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOwogICAgIFZhbHVlKiBtaW4gPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpKTsKQEAgLTExODcsMTEgKzExOTgsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAg
ICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
VUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFs
dWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9w
cm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptaW4oKSkgKiAtMi4wKTsKICAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAtMS4wKTsKQEAg
LTEyMjksMTEgKzEyNDAsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICB9KTsKICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBh
dGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxh
dGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIG1heCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdp
bigpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1p
bigpKSk7CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RG
bG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKQEAgLTEyNTIsMTEgKzEyNjMsMTEgQEAgYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
RWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRy
dW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIG1heCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCk7CiAgICAgVmFsdWUq
IG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2Ms
IE9yaWdpbigpLCAtMS4wKTsKQEAgLTEyOTQsNyArMTMwNSw3IEBAIGJvb2wgQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBiYTEwYWEzLi5kZmU2YTQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+
CiAKIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKIApAQCAtMzcsNyArMzgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJbmZv
cm1hdGlvbjsKIAotc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFu
ZENvbXBpbGUoVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbklu
ZGV4U3BhY2UmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIG9wdExldmVsID0g
MSk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZShWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEltbXV0YWJs
ZUZ1bmN0aW9uSW5kZXhTcGFjZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQg
b3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDRlMGVhZmQuLmU0OWE4OTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTYxLDM0ICs2MSw0NSBAQCBp
bmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
ICAgIAotc3RydWN0IEV4dGVybmFsIHsKLSAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKLSAgICAg
ICAgLy8gRklYTUUgYXV0by1nZW5lcmF0ZSB0aGlzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MjMxCi0gICAgICAgIEZ1bmN0aW9uID0gMCwKLSAgICAgICAgVGFi
bGUgPSAxLAotICAgICAgICBNZW1vcnkgPSAyLAotICAgICAgICBHbG9iYWwgPSAzLAotICAgIH07
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50PgotICAgIHN0YXRpYyBib29sIGlzVmFsaWQoSW50
IHZhbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodmFsKSB7Ci0gICAgICAgIGNhc2UgRnVuY3Rp
b246Ci0gICAgICAgIGNhc2UgVGFibGU6Ci0gICAgICAgIGNhc2UgTWVtb3J5OgotICAgICAgICBj
YXNlIEdsb2JhbDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0
YXRpY19hc3NlcnQoRnVuY3Rpb24gPT0gMCwgIldhc20gbmVlZHMgRnVuY3Rpb24gdG8gaGF2ZSB0
aGUgdmFsdWUgMCIpOwotICAgIHN0YXRpY19hc3NlcnQoVGFibGUgICAgPT0gMSwgIldhc20gbmVl
ZHMgVGFibGUgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOwotICAgIHN0YXRpY19hc3NlcnQoTWVtb3J5
ICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKLSAgICBz
dGF0aWNfYXNzZXJ0KEdsb2JhbCAgID09IDMsICJXYXNtIG5lZWRzIEdsb2JhbCB0byBoYXZlIHRo
ZSB2YWx1ZSAzIik7CitlbnVtIGNsYXNzIEV4dGVybmFsS2luZCA6IHVpbnQ4X3QgeworICAgIC8v
IEZJWE1FIGF1dG8tZ2VuZXJhdGUgdGhpcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTIzMQorICAgIEZ1bmN0aW9uID0gMCwKKyAgICBUYWJsZSA9IDEsCisgICAg
TWVtb3J5ID0gMiwKKyAgICBHbG9iYWwgPSAzLAogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgSW50
Pgorc3RhdGljIGJvb2wgaXNWYWxpZEV4dGVybmFsS2luZChJbnQgdmFsKQoreworICAgIHN3aXRj
aCAodmFsKSB7CisgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6RnVuY3Rp
b24pOgorICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKToKKyAg
ICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpOgorICAgIGNhc2Ug
c3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCk6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0
YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKSA9PSAw
LCAiV2FzbSBuZWVkcyBGdW5jdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSAwIik7CitzdGF0aWNfYXNz
ZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSkgICAgPT0gMSwgIldhc20g
bmVlZHMgVGFibGUgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOworc3RhdGljX2Fzc2VydChzdGF0aWNf
Y2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KSAgID09IDIsICJXYXNtIG5lZWRzIE1lbW9y
eSB0byBoYXZlIHRoZSB2YWx1ZSAyIik7CitzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4o
RXh0ZXJuYWxLaW5kOjpHbG9iYWwpICAgPT0gMywgIldhc20gbmVlZHMgR2xvYmFsIHRvIGhhdmUg
dGhlIHZhbHVlIDMiKTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4
dGVybmFsS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgRXh0ZXJu
YWxLaW5kOjpGdW5jdGlvbjogcmV0dXJuICJGdW5jdGlvbiI7CisgICAgY2FzZSBFeHRlcm5hbEtp
bmQ6OlRhYmxlOiByZXR1cm4gIlRhYmxlIjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5
OiByZXR1cm4gIk1lbW9yeSI7CisgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogcmV0dXJu
ICJHbG9iYWwiOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAiPyI7Cit9CisKIHN0cnVjdCBTaWduYXR1cmUgewogICAgIFR5cGUgcmV0dXJuVHlw
ZTsKICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRzOwpAQCAtOTcsMTMgKzEwOCwxMyBAQCBzdHJ1
Y3QgU2lnbmF0dXJlIHsKIHN0cnVjdCBJbXBvcnQgewogICAgIElkZW50aWZpZXIgbW9kdWxlOwog
ICAgIElkZW50aWZpZXIgZmllbGQ7Ci0gICAgRXh0ZXJuYWw6OktpbmQga2luZDsKKyAgICBFeHRl
cm5hbEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBraW5kSW5kZXg7IC8vIEluZGV4IGluIHRoZSB2
ZWN0b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4KIH07CiAKIHN0cnVjdCBFeHBvcnQgewog
ICAgIElkZW50aWZpZXIgZmllbGQ7Ci0gICAgRXh0ZXJuYWw6OktpbmQga2luZDsKKyAgICBFeHRl
cm5hbEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBraW5kSW5kZXg7IC8vIEluZGV4IGluIHRoZSB2
ZWN0b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggYTg3YzM1Zi4uNzg0YThj
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFy
c2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmgKQEAgLTM5LDcgKzM5LDcgQEAgZW51bSBjbGFzcyBCbG9ja1R5cGUgewogfTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgQ29udGV4dD4KLWNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNl
ciB7CitjbGFzcyBGdW5jdGlvblBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9pZD4gewogcHVibGlj
OgogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvblR5cGUgRXhwcmVzc2lv
blR5cGU7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpDb250cm9sVHlwZSBDb250cm9s
VHlwZTsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgRnVuY3Rpb25QYXJzZXIoQ29u
dGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0
aCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlKCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwogCiAgICAg
c3RydWN0IENvbnRyb2xFbnRyeSB7CiAgICAgICAgIEV4cHJlc3Npb25MaXN0IGVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOwpAQCAtNTcsMjUgKzU3LDI2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VCb2R5KCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VF
eHByZXNzaW9uKE9wVHlwZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJl
YWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRSZXR1cm4oKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJvZHkoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBlKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybigpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcG9wRXhwcmVzc2lvblN0YWNrKEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworI2RlZmluZSBX
QVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJlc3VsdCwgd2hhdCkgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
bV9leHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgcG9wIGVtcHR5IHN0YWNrIGluICIg
d2hhdCk7IFwKKyAgICAgICAgcmVzdWx0ID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKDApCiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gdW5hcnlDYXNlKCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5h
cnlDYXNlKCk7CiAKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gYmluYXJ5Q2FzZSgpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGJpbmFyeUNhc2UoKTsKIAotICAgIGJvb2wgc2V0RXJyb3JNZXNzYWdlKFN0cmluZyYmIG1lc3Nh
Z2UpCi0gICAgewotICAgICAgICBtX2NvbnRleHQuc2V0RXJyb3JNZXNzYWdlKFdURk1vdmUobWVz
c2FnZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorI2RlZmluZSBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVChhZGRfZXhwcmVzc2lvbikgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyht
X2NvbnRleHQuYWRkX2V4cHJlc3Npb24pCisKKyAgICAvLyBGSVhNRSBhZGQgYSBtYWNybyBhcyBh
Ym92ZSBmb3IgV0FTTV9UUllfQVBQRU5EX1RPX0NPTlRST0xfU1RBQ0sgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTg2MgogCiAgICAgQ29udGV4dCYgbV9jb250ZXh0
OwogICAgIEV4cHJlc3Npb25MaXN0IG1fZXhwcmVzc2lvblN0YWNrOwpAQCAtOTksMTE4ICsxMDAs
MTA0IEBAIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBj
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpCithdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIGlmICghbV9jb250
ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZS0+YXJndW1lbnRzKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgdWludDMyX3QgbG9jYWxDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGxvY2FsQ291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJlLT5hcmd1bWVudHMp
LCAiY2FuJ3QgYWRkICIsIG1fc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCAiIGFyZ3VtZW50
cyB0byBGdW5jdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGxvY2FsQ291bnQpLCAiY2FuJ3QgZ2V0IGxvY2FsIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihsb2NhbENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyBsb2NhbCBjb3VudCBpcyB0b28gYmlnICIsIGxvY2FsQ291
bnQpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxvY2FsQ291bnQ7ICsraSkgewog
ICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxvY2FsczsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihudW1iZXJPZkxvY2FscykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAg
ICAgVHlwZSB0eXBlT2ZMb2NhbDsKLSAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZM
b2NhbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFtX2NvbnRl
eHQuYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
bnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uJ3MgbnVtYmVyIG9mIGxvY2FscyBp
biBncm91cCAiLCBpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihudW1iZXJPZkxvY2Fs
cyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJGdW5jdGlvbiBzZWN0
aW9uJ3MgIiwgaSwgInRoIGxvY2FsIGdyb3VwIGNvdW50IGlzIHRvbyBiaWcgIiwgbnVtYmVyT2ZM
b2NhbHMpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZSh0eXBl
T2ZMb2NhbCksICJjYW4ndCBnZXQgRnVuY3Rpb24gbG9jYWwncyB0eXBlIGluIGdyb3VwICIsIGkp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuYWRkTG9jYWwodHlwZU9m
TG9jYWwsIG51bWJlck9mTG9jYWxzKSwgImNhbid0IGFkZCAiLCBudW1iZXJPZkxvY2FscywgIiBG
dW5jdGlvbiBsb2NhbHMgZnJvbSBncm91cCAiLCBpKTsKICAgICB9CiAKLSAgICByZXR1cm4gcGFy
c2VCb2R5KCk7CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUJvZHkoKSk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCb2R5KCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlQm9keSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICB1aW50OF90IG9wOwotICAgICAgICBpZiAoIXBhcnNlVUludDgob3ApIHx8
ICFpc1ZhbGlkT3BUeXBlKG9wKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgV1RGOjpkYXRhTG9nTG4oImF0dGVtcHRlZCB0byBkZWNvZGUgaW52YWxpZCBvcDog
IiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihvcCkpLCAiIGF0IG9mZnNldDog
IiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVVJbnQ4KG9wKSwgImNhbid0IGRlY29kZSBvcGNvZGUiKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighaXNWYWxpZE9wVHlwZShvcCksICJpbnZhbGlkIG9wY29kZSAiLCBv
cCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigicHJv
Y2Vzc2luZyBvcCAoIiwgbV91bnJlYWNoYWJsZUJsb2NrcywgIik6ICIsICBSYXdQb2ludGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSksICIgYXQgb2Zmc2V0OiAiLCBSYXdQb2ludGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwogICAgICAgICAgICAgbV9jb250ZXh0
LmR1bXAobV9jb250cm9sU3RhY2ssIG1fZXhwcmVzc2lvblN0YWNrKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChvcCA9PSBPcFR5cGU6OkVuZCAmJiAhbV9jb250cm9sU3RhY2suc2l6ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG1fdW5yZWFjaGFibGVCbG9ja3MgPyB0cnVlIDogYWRkUmV0dXJu
KCk7Ci0KLSAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpIHsKLSAgICAgICAgICAgIGlm
ICghcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiZmFpbGVkIHRvIHByb2Nlc3MgdW5yZWFjaGFibGUgb3A6Iiwgb3ApOwotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgh
cGFyc2VFeHByZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSkgewotICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcHJvY2Vz
cyBvcDoiLCBvcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvcCA9
PSBPcFR5cGU6OkVuZCAmJiAhbV9jb250cm9sU3RhY2suc2l6ZSgpKSB7CisgICAgICAgICAgICBp
ZiAobV91bnJlYWNoYWJsZUJsb2NrcykKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICAgICAgcmV0dXJuIGFkZFJldHVybigpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1f
dW5yZWFjaGFibGVCbG9ja3MpCisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VF
eHByZXNzaW9uKHN0YXRpY19jYXN0PE9wVHlwZT4ob3ApKSk7CiAgICAgfQogCiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4K
LWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmFkZFJldHVybigpCithdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjphZGRSZXR1cm4oKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhw
cmVzc2lvbkxpc3QgcmV0dXJuVmFsdWVzOwogICAgIGlmIChtX3NpZ25hdHVyZS0+cmV0dXJuVHlw
ZSAhPSBWb2lkKSB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJldHVyblZhbHVlOwotICAgICAg
ICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyZXR1cm5WYWx1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmV0
dXJuVmFsdWUsICJyZXR1cm4iKTsKICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChyZXR1cm5W
YWx1ZSk7CiAgICAgfQogCiAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKKyAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRSZXR1cm4ocmV0dXJuVmFsdWVzKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIHRlbXBsYXRlPE9wVHlwZSBvcD4KLWJvb2wgRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OmJpbmFyeUNhc2UoKQorYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6YmluYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9u
VHlwZSByaWdodDsKLSAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyaWdodCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIEV4cHJlc3Npb25UeXBlIGxlZnQ7Ci0gICAgaWYgKCFwb3BF
eHByZXNzaW9uU3RhY2sobGVmdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdDsKLSAgICBpZiAoIW1fY29udGV4dC50ZW1wbGF0ZSBhZGRPcDxvcD4o
bGVmdCwgcmlnaHQsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmlnaHQsICJiaW5hcnkgcmlnaHQiKTsKKyAg
ICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGxlZnQsICJiaW5hcnkgbGVmdCIp
OworICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCBy
aWdodCwgcmVzdWx0KSk7CisKICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250ZXh0PgogdGVtcGxhdGU8T3BUeXBlIG9wPgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6dW5hcnlDYXNlKCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2Fz
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICBp
ZiAoIXBvcEV4cHJlc3Npb25TdGFjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICBpZiAoIW1fY29udGV4dC50ZW1wbGF0ZSBh
ZGRPcDxvcD4odmFsdWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdB
U01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJ1bmFyeSIpOworICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPih2YWx1ZSwgcmVzdWx0KSk7
CisKICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9v
bCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkKK2F1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAjZGVmaW5lIENSRUFURV9DQVNF
KG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gYmluYXJ5Q2Fz
ZTxPcFR5cGU6Om5hbWU+KCk7CkBAIC0yNDEsMzI3ICsyMjgsMjQ4IEBAIGJvb2wgRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAKICAgICBjYXNlIE9w
VHlwZTo6U2VsZWN0OiB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAg
ICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQogICAgICAgICBFeHByZXNzaW9uVHlwZSB6ZXJvOwotICAgICAgICBpZiAoIXBv
cEV4cHJlc3Npb25TdGFjayh6ZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAg
ICAgICBFeHByZXNzaW9uVHlwZSBub25aZXJvOwotICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25T
dGFjayhub25aZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgInNlbGVjdCBjb25kaXRp
b24iKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh6ZXJvLCAi
c2VsZWN0IHplcm8iKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5U
Tyhub25aZXJvLCAic2VsZWN0IG5vbi16ZXJvIik7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUg
cmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRTZWxlY3QoY29uZGl0aW9uLCBub25a
ZXJvLCB6ZXJvLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJv
LCByZXN1bHQpKTsKIAogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAjZGVm
aW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgog
ICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NBU0UpIHsKICAgICAgICAg
dWludDMyX3QgYWxpZ25tZW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFsaWdubWVu
dCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3Qgb2Zmc2V0
OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlcjsKLSAgICAgICAgaWYg
KCFwb3BFeHByZXNzaW9uU3RhY2socG9pbnRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4
dC5sb2FkKHN0YXRpY19jYXN0PExvYWRPcFR5cGU+KG9wKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZz
ZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IGxvYWQgYWxpZ25tZW50
Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCks
ICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyhwb2ludGVyLCAibG9hZCBwb2ludGVyIik7CisgICAgICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4ob3ApLCBwb2ludGVy
LCByZXN1bHQsIG9mZnNldCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVz
dWx0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpIHsKICAgICAg
ICAgdWludDMyX3QgYWxpZ25tZW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFsaWdu
bWVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDMyX3Qgb2Zm
c2V0OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgICAgIGlm
ICghcG9wRXhwcmVzc2lvblN0YWNrKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQogICAgICAgICBFeHByZXNzaW9uVHlwZSBwb2ludGVyOwotICAgICAgICBpZiAoIXBvcEV4cHJl
c3Npb25TdGFjayhwb2ludGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LnN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihvcCksIHBv
aW50ZXIsIHZhbHVlLCBvZmZzZXQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IHN0b3JlIGFsaWdubWVudCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3Qg
Z2V0IHN0b3JlIG9mZnNldCIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFD
S19JTlRPKHZhbHVlLCAic3RvcmUgdmFsdWUiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJF
U1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9pbnRlciIpOworICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4ob3ApLCBw
b2ludGVyLCB2YWx1ZSwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogI3Vu
ZGVmIENSRUFURV9DQVNFCiAKICAgICBjYXNlIE9wVHlwZTo6RjMyQ29uc3Q6IHsKICAgICAgICAg
dWludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIGlmICghcGFyc2VVSW50MzIoY29uc3RhbnQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBwYXJzZSAzMi1iaXQgZmxvYXRpbmctcG9pbnQg
Y29uc3RhbnQiKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5h
ZGRDb25zdGFudChGMzIsIGNvbnN0YW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpJMzJDb25zdDogewogICAg
ICAgICBpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVmFySW50MzIoY29uc3Rh
bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhckludDMyKGNvbnN0YW50KSwgImNhbid0IHBhcnNlIDMyLWJpdCBjb25zdGFu
dCIpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0
YW50KEkzMiwgY29uc3RhbnQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkY2NENvbnN0OiB7CiAgICAgICAgIHVp
bnQ2NF90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVUludDY0KGNvbnN0YW50KSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgcGFyc2UgNjQtYml0IGZsb2F0aW5nLXBvaW50IGNv
bnN0YW50Iik7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRk
Q29uc3RhbnQoRjY0LCBjb25zdGFudCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6STY0Q29uc3Q6IHsKICAgICAg
ICAgaW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgaWYgKCFwYXJzZVZhckludDY0KGNvbnN0YW50
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJJbnQ2NChjb25zdGFudCksICJjYW4ndCBwYXJzZSA2NC1iaXQgY29uc3RhbnQi
KTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFu
dChJNjQsIGNvbnN0YW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpHZXRMb2NhbDogewogICAgICAgICB1aW50
MzJfdCBpbmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICAg
ICAgaWYgKCFtX2NvbnRleHQuZ2V0TG9jYWwoaW5kZXgsIHJlc3VsdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciBnZXRfbG9jYWwiKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9jb250ZXh0LmdldExvY2FsKGluZGV4LCByZXN1bHQpLCAiY2Fu
J3QgZ2V0X2xvY2FsIGF0IGluZGV4IiwgaW5kZXgpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OlNldExvY2FsOiB7CiAgICAgICAgIHVpbnQz
Ml90IGluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgICAg
IGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5zZXRMb2NhbChpbmRleCwgdmFsdWUpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBn
ZXQgaW5kZXggZm9yIHNldF9sb2NhbCIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lP
Tl9TVEFDS19JTlRPKHZhbHVlLCAic2V0X2xvY2FsIik7CisgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKHNldExvY2FsKGluZGV4LCB2YWx1ZSkpOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpUZWVMb2NhbDogewogICAgICAgICB1aW50MzJfdCBp
bmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LnNldExvY2Fs
KGluZGV4LCBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHRlZV9s
b2NhbCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlz
RW1wdHkoKSwgImNhbid0IHRlZV9sb2NhbCBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrIik7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCBtX2V4cHJlc3Np
b25TdGFjay5sYXN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNl
IE9wVHlwZTo6R2V0R2xvYmFsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4dC5nZXRH
bG9iYWwoaW5kZXgsIHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0
IGdldF9nbG9iYWwncyBpbmRleCIpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChn
ZXRHbG9iYWwoaW5kZXgsIHJlc3VsdCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBl
bmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OlNldEdsb2JhbDogewogICAgICAgICB1aW50MzJfdCBp
bmRleDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwotICAgICAgICBpZiAo
IXBvcEV4cHJlc3Npb25TdGFjayh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0
IGdldCBzZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyh2YWx1ZSwgInNldF9nbG9iYWwgdmFsdWUiKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSkpOwogICAgICAgICByZXR1
cm4gbV9jb250ZXh0LnNldEdsb2JhbChpbmRleCwgdmFsdWUpOwogICAgIH0KIAogICAgIGNhc2Ug
T3BUeXBlOjpDYWxsOiB7CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlvbkluZGV4U3Bh
Y2Uuc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCksICJjYW4ndCBwYXJzZSBjYWxs
J3MgZnVuY3Rpb24gaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlv
bkluZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUsICJjYWxsIGZ1bmN0aW9uIGluZGV4
ICIsIGZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX2Z1
bmN0aW9uSW5kZXhTcGFjZS5zaXplKTsKIAogICAgICAgICBjb25zdCBTaWduYXR1cmUqIGNhbGxl
ZVNpZ25hdHVyZSA9IG1fZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlci5nZXQoKVtmdW5jdGlvbklu
ZGV4XS5zaWduYXR1cmU7Ci0KLSAgICAgICAgaWYgKGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRz
LnNpemUoKSA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjYWxsZWVTaWduYXR1cmUtPmFyZ3Vt
ZW50cy5zaXplKCkgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsIGZ1bmN0aW9uIGlu
ZGV4ICIsIGZ1bmN0aW9uSW5kZXgsICIgaGFzICIsIGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRz
LnNpemUoKSwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50bHkg
aG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCiAgICAgICAg
IHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBj
YWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4gYXJnczsKLSAgICAgICAgYXJncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhbGxl
ZVNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgYXJncy5hcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxsZWVTaWduYXR1
cmUtPmFyZ3VtZW50cy5zaXplKCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
Y2FsbCdzICIsIGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgIiBhcmd1bWVudHMi
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBl
bmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJp
bmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQg
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZENh
bGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRD
YWxsKGZ1bmN0aW9uSW5kZXgsIGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0KSk7CiAKICAg
ICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAgICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkNh
bGxJbmRpcmVjdDogewotICAgICAgICBpZiAoIW1faW5mby50YWJsZUluZm9ybWF0aW9uKQotICAg
ICAgICAgICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZh
bGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIik7CiAgICAgICAgIHVpbnQz
Ml90IHNpZ25hdHVyZUluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpZ25hdHVy
ZUluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1aW50OF90IHJl
c2VydmVkOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChyZXNlcnZlZCAhPSAwKQotICAgICAgICAg
ICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiY2FsbF9pbmRpcmVjdCAncmVzZXJ2ZWQnIHZhcnVp
bnQxIG11c3QgYmUgMHgwIik7Ci0KLSAgICAgICAgaWYgKG1faW5mby5zaWduYXR1cmVzLnNpemUo
KSA8PSBzaWduYXR1cmVJbmRleCkKLSAgICAgICAgICAgIHJldHVybiBzZXRFcnJvck1lc3NhZ2Uo
IlRyaWVkIHRvIHVzZSBhIHNpZ25hdHVyZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB2YWxpZCBzaWdu
YXR1cmVzIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby50YWJsZUluZm9y
bWF0aW9uLCAiY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZp
bmVkIG9yIGltcG9ydGVkIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCBjYWxsX2luZGlyZWN0J3Mgc2lnbmF0
dXJlIGluZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEo
cmVzZXJ2ZWQpLCAiY2FuJ3QgZ2V0IGNhbGxfaW5kaXJlY3QncyByZXNlcnZlZCBieXRlIik7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocmVzZXJ2ZWQsICJjYWxsX2luZGlyZWN0J3MgJ3Jl
c2VydmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4MCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG1faW5mby5zaWduYXR1cmVzLnNpemUoKSA8PSBzaWduYXR1cmVJbmRleCwgImNhbGxfaW5k
aXJlY3QncyBzaWduYXR1cmUgaW5kZXggIiwgc2lnbmF0dXJlSW5kZXgsICIgZXhjZWVkcyBrbm93
biBzaWduYXR1cmVzICIsIG1faW5mby5zaWduYXR1cmVzLnNpemUoKSk7CiAKICAgICAgICAgY29u
c3QgU2lnbmF0dXJlKiBjYWxsZWVTaWduYXR1cmUgPSAmbV9pbmZvLnNpZ25hdHVyZXNbc2lnbmF0
dXJlSW5kZXhdOwogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxlZVNpZ25hdHVy
ZS0+YXJndW1lbnRzLnNpemUoKSArIDE7IC8vIEFkZCB0aGUgY2FsbGVlJ3MgaW5kZXguCi0gICAg
ICAgIGlmIChhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiTm90IGVub3VnaCB2YWx1ZXMgb24gdGhlIHN0
YWNrIGZvciBjYWxsX2luZGlyZWN0Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJn
dW1lbnRDb3VudCA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbGxfaW5kaXJlY3QgZXhw
ZWN0cyAiLCBhcmd1bWVudENvdW50LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBleHByZXNzaW9uIHN0
YWNrIGN1cnJlbnRseSBob2xkcyAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVz
Iik7CiAKICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwotICAgICAgICBpZiAo
IWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpKQotICAgICAgICAgICAgcmV0
dXJuIHNldEVycm9yTWVzc2FnZSgiT3V0IG9mIG1lbW9yeSIpOwotCisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgYXJndW1lbnRDb3VudCwgIiBjYWxsX2lu
ZGlyZWN0IGFyZ3VtZW50cyIpOwogICAgICAgICBzaXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gYXJndW1lbnRDb3VudDsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpOyArK2kpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkg
PCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGFyZ3MudW5jaGVj
a2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsKICAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUg
cmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBpZiAoIW1fY29udGV4
dC5hZGRDYWxsSW5kaXJlY3QoY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRD
YWxsSW5kaXJlY3QoY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQpKTsKIAogICAgICAgICBp
ZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbikKICAgICAgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpCbG9jazogewogICAg
ICAgICBUeXBlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgaWYgKCFwYXJzZVJlc3VsdFR5cGUo
aW5saW5lU2lnbmF0dXJlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUoaW5saW5lU2lnbmF0dXJlKSwgImNh
bid0IGdldCBibG9jaydzIGlubGluZSBzaWduYXR1cmUiKTsKICAgICAgICAgbV9jb250cm9sU3Rh
Y2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIG1fY29udGV4dC5hZGRCbG9j
ayhpbmxpbmVTaWduYXR1cmUpIH0pOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IEV4cHJl
c3Npb25MaXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpMb29wOiB7CiAgICAgICAgIFR5cGUgaW5saW5lU2ln
bmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGxvb3AncyBpbmxp
bmUgc2lnbmF0dXJlIik7CiAgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUo
bV9leHByZXNzaW9uU3RhY2spLCBtX2NvbnRleHQuYWRkTG9vcChpbmxpbmVTaWduYXR1cmUpIH0p
OwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BU
eXBlOjpJZjogewogICAgICAgICBUeXBlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdFR5cGUoaW5saW5lU2lnbmF0dXJlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQogICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247Ci0gICAgICAgIGlmICghcG9w
RXhwcmVzc2lvblN0YWNrKGNvbmRpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
ICAgICAgICAgQ29udHJvbFR5cGUgY29udHJvbDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRk
SWYoY29uZGl0aW9uLCBpbmxpbmVTaWduYXR1cmUsIGNvbnRyb2wpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlUmVzdWx0VHlw
ZShpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGlmJ3MgaW5saW5lIHNpZ25hdHVyZSIpOwor
ICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImlm
IGNvbmRpdGlvbiIpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRJZihjb25k
aXRpb24sIGlubGluZVNpZ25hdHVyZSwgY29udHJvbCkpOwogICAgICAgICBtX2NvbnRyb2xTdGFj
ay5hcHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgY29udHJvbCB9KTsKICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2sgPSBFeHByZXNzaW9uTGlzdCgpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RWxz
ZTogewotICAgICAgICBpZiAoIW1fY29udHJvbFN0YWNrLnNpemUoKSkgewotICAgICAgICAgICAg
c2V0RXJyb3JNZXNzYWdlKCJBdHRlbXB0ZWQgdG8gdXNlIGVsc2UgYmxvY2sgYXQgdGhlIHRvcC1s
ZXZlbCBvZiBhIGZ1bmN0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3Qo
KS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJvbFN0YWNrLmlzRW1wdHko
KSwgImNhbid0IHVzZSBlbHNlIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIp
OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlKG1fY29udHJvbFN0YWNr
Lmxhc3QoKS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suc2hyaW5rKDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6QnI6CiAgICAgY2FzZSBPcFR5cGU6
OkJySWY6IHsKICAgICAgICAgdWludDMyX3QgdGFyZ2V0OwotICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKHRhcmdldCkgfHwgdGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24g
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247Ci0gICAgICAgIGlmIChvcCA9PSBPcFR5cGU6OkJy
SWYpIHsKLSAgICAgICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKGNvbmRpdGlvbikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFyZ2V0KSwgImNhbid0IGdldCBiciAv
IGJyX2lmJ3MgdGFyZ2V0Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49
IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyIC8gYnJfaWYncyB0YXJnZXQgIiwgdGFyZ2V0LCAi
IGV4Y2VlZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7Cisg
ICAgICAgIGlmIChvcCA9PSBPcFR5cGU6OkJySWYpCisgICAgICAgICAgICBXQVNNX1RSWV9QT1Bf
RVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJyIC8gYnJfaWYgY29uZGl0aW9uIik7
CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwogCiAg
ICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2su
c2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CiAKLSAgICAgICAgcmV0dXJuIG1fY29u
dGV4dC5hZGRCcmFuY2goZGF0YSwgY29uZGl0aW9uLCBtX2V4cHJlc3Npb25TdGFjayk7CisgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1f
ZXhwcmVzc2lvblN0YWNrKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2Fz
ZSBPcFR5cGU6OkJyVGFibGU6IHsKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZUYXJnZXRzOwot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG51bWJlck9mVGFyZ2V0cykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKKyAgICAg
ICAgdWludDMyX3QgZGVmYXVsdFRhcmdldDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIobnVtYmVyT2ZUYXJnZXRzKSwgImNhbid0IGdldCB0aGUgbnVtYmVyIG9m
IHRhcmdldHMgZm9yIGJyX3RhYmxlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobnVt
YmVyT2ZUYXJnZXRzID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgImJy
X3RhYmxlJ3MgbnVtYmVyIG9mIHRhcmdldHMgaXMgdG9vIGJpZyAiLCBudW1iZXJPZlRhcmdldHMp
OwogCiAgICAgICAgIFZlY3RvcjxDb250cm9sVHlwZSo+IHRhcmdldHM7Ci0gICAgICAgIGlmICgh
dGFyZ2V0cy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZUYXJnZXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCF0YXJnZXRzLnRy
eVJlc2VydmVDYXBhY2l0eShudW1iZXJPZlRhcmdldHMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5
IGZvciAiLCBudW1iZXJPZlRhcmdldHMsICIgYnJfdGFibGUgdGFyZ2V0cyIpOwogICAgICAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZUYXJnZXRzOyArK2kpIHsKICAgICAgICAg
ICAgIHVpbnQzMl90IHRhcmdldDsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodGFy
Z2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQorICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dGFyZ2V0KSwgImNhbid0IGdldCAiLCBpLCAidGggdGFyZ2V0IGZvciBicl90YWJsZSIpOworICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6
ZSgpLCAiYnJfdGFibGUncyAiLCBpLCAidGggdGFyZ2V0ICIsIHRhcmdldCwgIiBleGNlZWRzIGNv
bnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOwogICAgICAgICAgICAg
dGFyZ2V0cy51bmNoZWNrZWRBcHBlbmQoJm1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNp
emUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhKTsKICAgICAgICAgfQogCi0gICAgICAgIHVp
bnQzMl90IGRlZmF1bHRUYXJnZXQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZGVmYXVs
dFRhcmdldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRlZmF1
bHRUYXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYgKCFw
b3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZFN3aXRjaChjb25kaXRpb24sIHRh
cmdldHMsIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBkZWZhdWx0
VGFyZ2V0XS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihk
ZWZhdWx0VGFyZ2V0KSwgImNhbid0IGdldCBkZWZhdWx0IHRhcmdldCBmb3IgYnJfdGFibGUiKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihkZWZhdWx0VGFyZ2V0ID49IG1fY29udHJvbFN0
YWNrLnNpemUoKSwgImJyX3RhYmxlJ3MgZGVmYXVsdCB0YXJnZXQgIiwgZGVmYXVsdFRhcmdldCwg
IiBleGNlZWRzIGNvbnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOwor
ICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJy
X3RhYmxlIGNvbmRpdGlvbiIpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRT
d2l0Y2goY29uZGl0aW9uLCB0YXJnZXRzLCBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5z
aXplKCkgLSAxIC0gZGVmYXVsdFRhcmdldF0uY29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNr
KSk7CiAKICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpSZXR1
cm46IHsKQEAgLTU3Myw4MiArNDgxLDc4IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
bGl0dGxlIHdlaXJkIGluIHRoYXQgaXQgd2lsbCBtb2RpZnkgdGhlIGV4cHJlc3Npb25TdGFjayBm
b3IgdGhlIHJlc3VsdCBvZiB0aGUgYmxvY2suCiAgICAgICAgIC8vIFRoYXQncyBhIGxpdHRsZSB0
b28gZWZmZWN0ZnVsIGZvciBtZSBidXQgSSBkb24ndCBoYXZlIGEgYmV0dGVyIEFQSSByaWdodCBu
b3cuCiAgICAgICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDM1MwotICAgICAgICBpZiAoIW1fY29udGV4dC5lbmRCbG9jayhkYXRhLCBtX2V4cHJl
c3Npb25TdGFjaykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKGVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAg
IGNhc2UgT3BUeXBlOjpVbnJlYWNoYWJsZTogewotICAgICAgICBtX2NvbnRleHQuYWRkVW5yZWFj
aGFibGUoKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVW5yZWFjaGFibGUo
KSk7CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RHJvcDog
ewotICAgICAgICBpZiAoIW1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewotICAgICAgICAgICAg
c2V0RXJyb3JNZXNzYWdlKCJBdHRlbXB0ZWQgdG8gZHJvcCBhbiBleHByZXNzaW9uIGZyb20gYW4g
ZW1wdHkgc3RhY2suIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2Fu
J3QgZHJvcCBvbiBlbXB0eSBzdGFjayIpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay50YWtl
TGFzdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKICAgICBjYXNlIE9wVHlwZTo6Tm9wOiB7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpHcm93TWVtb3J5OgorICAg
ICAgICByZXR1cm4gZmFpbCgibm90IHlldCBpbXBsZW1lbnRlZDogZ3Jvd19tZW1vcnkiKTsgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKICAgICBjYXNlIE9wVHlwZTo6Q3VycmVudE1l
bW9yeToKLSAgICAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhaWwoIm5vdCB5ZXQgaW1wbGVtZW50ZWQ6IGN1
cnJlbnRfbWVtb3J5Iik7IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkLgorCiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRl
eHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVz
c2lvbihPcFR5cGUgb3ApCithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVh
Y2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NF
UlQobV91bnJlYWNoYWJsZUJsb2Nrcyk7CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgT3BU
eXBlOjpFbHNlOiB7CiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICBD
b250cm9sRW50cnkmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CiAgICAgICAgIG1fdW5y
ZWFjaGFibGVCbG9ja3MgPSAwOwotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRFbHNlVG9VbnJl
YWNoYWJsZShkYXRhLmNvbnRyb2xEYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YS5j
b250cm9sRGF0YSkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoMCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2Ug
T3BUeXBlOjpFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPT0gMSkgewog
ICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgp
OwotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGRhdGEpKTsKICAgICAgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CiAgICAgICAg
IH0KICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6TG9vcDoKICAg
ICBjYXNlIE9wVHlwZTo6SWY6CiAgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CiAgICAgICAgIG1f
dW5yZWFjaGFibGVCbG9ja3MrKzsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgLy8gdHdvIGltbWVkaWF0ZSBjYXNlcwogICAgIGNhc2UgT3BU
eXBlOjpCcjoKICAgICBjYXNlIE9wVHlwZTo6QnJJZjogewogICAgICAgICB1aW50MzJfdCB1bnVz
ZWQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodW51c2VkKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlVmFyVUludDMyKHVudXNlZCk7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4ndCBn
ZXQgYnIgLyBicl9pZiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHVudXNlZCksICJjYW4ndCBnZXQgYnIgLyBicl9p
ZiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcwpAQCAtNjU5LDI1ICs1NjMsMTQgQEAgYm9vbCBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBl
IG9wKQogICAgIGNhc2UgT3BUeXBlOjpTZXRMb2NhbDoKICAgICBjYXNlIE9wVHlwZTo6R2V0TG9j
YWw6IHsKICAgICAgICAgdWludDMyX3QgdW51c2VkOwotICAgICAgICByZXR1cm4gcGFyc2VWYXJV
SW50MzIodW51c2VkKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIodW51c2VkKSwgImNhbid0IGdldCBjb25zdCAvIGxvY2FsIGluIHVucmVhY2hhYmxlIGNvbnRl
eHQiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpwb3BFeHByZXNzaW9uU3Rh
Y2soRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKLXsKLSAgICBpZiAobV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNldEVycm9yTWVzc2FnZSgiQXR0
ZW1wdGVkIHRvIHVzZSBhIHN0YWNrIHZhbHVlIHdoZW4gbm9uZSBleGlzdGVkIik7Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3Bw
CmluZGV4IGZiZGMzYzMuLmIwNTkxYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMzksMTg5ICszOSwxMTAgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwotCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQorYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlKCkgLT4gUmVzdWx0CiB7Ci0gICAgbV9tb2R1bGUgPSBzdGQ6Om1ha2VfdW5pcXVlPE1v
ZHVsZUluZm9ybWF0aW9uPigpOwotCisgICAgbV9yZXN1bHQubW9kdWxlID0gc3RkOjptYWtlX3Vu
aXF1ZTxNb2R1bGVJbmZvcm1hdGlvbj4oKTsKICAgICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7
Ci0gICAgaWYgKGxlbmd0aCgpIDwgbWluU2l6ZSkgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
ICJNb2R1bGUgaXMgIiArIFN0cmluZzo6bnVtYmVyKGxlbmd0aCgpKSArICIgYnl0ZXMsIGV4cGVj
dGVkIGF0IGxlYXN0ICIgKyBTdHJpbmc6Om51bWJlcihtaW5TaXplKSArICIgYnl0ZXMiOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghY29uc3VtZUNoYXJhY3RlcigwKSB8
fCAhY29uc3VtZVN0cmluZygiYXNtIikpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiTW9k
dWxlcyBkb2Vzbid0IHN0YXJ0IHdpdGggJ1xcMGFzbSciOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgdWludDMyX3QgdmVyc2lvbk51bWJlcjsKLSAgICBpZiAoIXBhcnNlVUlu
dDMyKHZlcnNpb25OdW1iZXIpKSB7Ci0gICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVz
c2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIHZlcnNpb24gbnVtYmVyIjsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9IGV4
cGVjdGVkVmVyc2lvbk51bWJlcikgewotICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1l
c3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9ICJ1bmV4cGVjdGVkIHZlcnNpb24gbnVtYmVyIjsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGxlbmd0aCgp
IDwgbWluU2l6ZSwgImV4cGVjdGVkIGEgbW9kdWxlIG9mIGF0IGxlYXN0ICIsIG1pblNpemUsICIg
Ynl0ZXMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lQ2hhcmFjdGVyKDApIHx8
ICFjb25zdW1lU3RyaW5nKCJhc20iKSwgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3aXRoICdcXDBh
c20nIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIodmVyc2lvbk51bWJl
ciksICJjYW4ndCBwYXJzZSB2ZXJzaW9uIG51bWJlciIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYodmVyc2lvbk51bWJlciAhPSBleHBlY3RlZFZlcnNpb25OdW1iZXIsICJ1bmV4cGVjdGVkIHZl
cnNpb24gbnVtYmVyICIsIHZlcnNpb25OdW1iZXIsICIgZXhwZWN0ZWQgIiwgZXhwZWN0ZWRWZXJz
aW9uTnVtYmVyKTsKIAotCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiUGFz
c2VkIHByb2Nlc3NpbmcgaGVhZGVyLiIpOwotCi0gICAgU2VjdGlvbnM6OlNlY3Rpb24gcHJldmlv
dXNTZWN0aW9uID0gU2VjdGlvbnM6OlVua25vd247CisgICAgU2VjdGlvbiBwcmV2aW91c1NlY3Rp
b24gPSBTZWN0aW9uOjpVbmtub3duOwogICAgIHdoaWxlIChtX29mZnNldCA8IGxlbmd0aCgpKSB7
Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyB0
byBwYXJzZSBuZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAiLCBtX29mZnNldCk7Ci0KICAgICAgICAg
dWludDhfdCBzZWN0aW9uQnl0ZTsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRl
KSkgewotICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBzZWN0aW9uIGJ5dGUiOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nTG4oIlNlY3Rpb24gYnl0ZTogIiwgc2VjdGlvbkJ5dGUpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRlKSwgImNhbid0IGdldCBzZWN0
aW9uIGJ5dGUiKTsKIAotICAgICAgICBTZWN0aW9uczo6U2VjdGlvbiBzZWN0aW9uID0gU2VjdGlv
bnM6OlVua25vd247CisgICAgICAgIFNlY3Rpb24gc2VjdGlvbiA9IFNlY3Rpb246OlVua25vd247
CiAgICAgICAgIGlmIChzZWN0aW9uQnl0ZSkgewotICAgICAgICAgICAgaWYgKHNlY3Rpb25CeXRl
IDwgU2VjdGlvbnM6OlVua25vd24pCi0gICAgICAgICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19j
YXN0PFNlY3Rpb25zOjpTZWN0aW9uPihzZWN0aW9uQnl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIVNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9ICJpbnZhbGlkIHNlY3Rpb24gb3JkZXIiOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKGlzVmFsaWRTZWN0aW9uKHNlY3Rpb25CeXRlKSkKKyAgICAg
ICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOwog
ICAgICAgICB9CiAKICAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKLSAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSkgewotICAgICAgICAgICAgLy8gRklYTUUg
aW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjM5MTkKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBz
ZWN0aW9uIGxlbmd0aCI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoc2VjdGlvbkxlbmd0aCA+IGxlbmd0aCgpIC0gbV9vZmZzZXQpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
ICJzZWN0aW9uIGNvbnRlbnQgd291bGQgb3ZlcmZsb3cgTW9kdWxlJ3Mgc2l6ZSI7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighdmFsaWRhdGVPcmRlcihwcmV2aW91c1NlY3Rpb24sIHNlY3Rpb24pLCAiaW52YWxpZCBzZWN0
aW9uIG9yZGVyLCAiLCBwcmV2aW91c1NlY3Rpb24sICIgZm9sbG93ZWQgYnkgIiwgc2VjdGlvbik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5n
dGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIgc2VjdGlvbidzIGxlbmd0aCIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25MZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCBzZWN0aW9uLCAic2VjdGlvbiBvZiBzaXplICIsIHNlY3Rpb25MZW5ndGgsICIgd291bGQgb3Zl
cmZsb3cgTW9kdWxlJ3Mgc2l6ZSIpOwogCiAgICAgICAgIGF1dG8gZW5kID0gbV9vZmZzZXQgKyBz
ZWN0aW9uTGVuZ3RoOwogCiAgICAgICAgIHN3aXRjaCAoc2VjdGlvbikgewotICAgICAgICAvLyBG
SVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaW4gbWFjcm8gYmVsb3cgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotI2RlZmluZSBXQVNNX1NFQ1RJT05fUEFS
U0UoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBcCi0gICAgICAgIGNhc2UgU2VjdGlvbnM6Ok5BTUU6
IHsgXAotICAgICAgICAgICAgaWYgKHZlcmJvc2UpIFwKLSAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIlBhcnNpbmcgIiBERVNDUklQVElPTik7IFwKLSAgICAgICAgICAgIGlmICghcGFyc2UgIyMg
TkFNRSgpKSB7IFwKLSAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBw
YXJzZSBzZWN0aW9uICIgI05BTUUgIjogIiBERVNDUklQVElPTjsgXAotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICBicmVhazsgXAor
I2RlZmluZSBXQVNNX1NFQ1RJT05fUEFSU0UoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIGNhc2UgU2VjdGlvbjo6TkFNRTogeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFMocGFyc2UgIyMgTkFNRSgpKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgIH0KICAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9QQVJT
RSkKICN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKIAotICAgICAgICBjYXNlIFNlY3Rpb25zOjpV
bmtub3duOiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIlVua25vd24gc2VjdGlvbiwgc2tpcHBpbmcuIik7CisgICAgICAgIGNhc2UgU2VjdGlv
bjo6VW5rbm93bjogewogICAgICAgICAgICAgLy8gSWdub3JlIHNlY3Rpb24ncyBuYW1lIExFQiBh
bmQgYnl0ZXM6IHRoZXkncmUgYWxyZWFkeSBpbmNsdWRlZCBpbiBzZWN0aW9uTGVuZ3RoLgogICAg
ICAgICAgICAgbV9vZmZzZXQgKz0gc2VjdGlvbkxlbmd0aDsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2dMbigiRmluaXNoZWQgcGFyc2luZyBzZWN0aW9uLiIpOwotCi0gICAgICAgIGlmIChl
bmQgIT0gbV9vZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVz
c2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9m
IHRoZSBzZWN0aW9uIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVuZCAhPSBtX29mZnNldCwgInBhcnNpbmcgZW5kZWQg
YmVmb3JlIHRoZSBlbmQgb2YgIiwgc2VjdGlvbiwgIiBzZWN0aW9uIik7CiAKICAgICAgICAgcHJl
dmlvdXNTZWN0aW9uID0gc2VjdGlvbjsKICAgICB9CiAKLSAgICAvLyBUT0RPCi0gICAgbV9mYWls
ZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGTW92ZShtX3Jlc3Vs
dCk7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVR5cGUoKQorYXV0byBNb2R1bGVQYXJz
ZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBjb3VudDsK
LSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KQotICAgICAgICB8fCBjb3VudCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwgIW1fbW9kdWxlLT5z
aWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCIgIGNvdW50OiAiLCBjb3Vu
dCk7CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJj
YW4ndCBnZXQgVHlwZSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIlR5cGUgc2Vj
dGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1fcmVzdWx0Lm1vZHVsZS0+c2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQp
LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291
bnQsICIgZW50cmllcyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgaW50OF90IHR5cGU7Ci0gICAgICAgIGlmICghcGFyc2VJbnQ3KHR5cGUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodHlwZSAhPSBGdW5jKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJHb3QgZnVuY3Rpb24gdHlwZS4iKTsKLQogICAgICAgICB1aW50MzJf
dCBhcmd1bWVudENvdW50OwogICAgICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KQotICAgICAgICAgICAgfHwg
YXJndW1lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAg
ICAgICAgICAgIHx8ICFhcmd1bWVudFR5cGVzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENv
dW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nTG4oIiAgYXJndW1lbnQgY291bnQ6ICIsIGFyZ3VtZW50Q291bnQp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0
IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5cGUpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSwgImNh
bid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksIGksICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmlnICIsIGFyZ3VtZW50
Q291bnQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmd1bWVudFR5cGVzLnRyeVJl
c2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1v
cnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCAiLCBhcmd1bWVudENvdW50LCAiIGFyZ3Vt
ZW50cyIpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50
OyArK2kpIHsKICAgICAgICAgICAgIFR5cGUgYXJndW1lbnRUeXBlOwotICAgICAgICAgICAgaWYg
KCFwYXJzZVJlc3VsdFR5cGUoYXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlc3VsdFR5cGUo
YXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1lbnQgVHlwZSIpOwogICAg
ICAgICAgICAgYXJndW1lbnRUeXBlcy51bmNoZWNrZWRBcHBlbmQoYXJndW1lbnRUeXBlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MShyZXR1cm5Db3VudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2Fu
J3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CiAgICAgICAgIFR5cGUgcmV0
dXJuVHlwZTsKIAotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbihy
ZXR1cm5Db3VudCk7Ci0KICAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CiAgICAgICAgICAgICBU
eXBlIHZhbHVlOwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZSh2YWx1ZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYWx1ZVR5cGUodmFsdWUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0
dXJuIHZhbHVlIik7CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4o
dmFsdWUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpW
b2lkOwogCi0gICAgICAgIG1fbW9kdWxlLT5zaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZCh7IHJl
dHVyblR5cGUsIFdURk1vdmUoYXJndW1lbnRUeXBlcykgfSk7CisgICAgICAgIG1fcmVzdWx0Lm1v
ZHVsZS0+c2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoeyByZXR1cm5UeXBlLCBXVEZNb3ZlKGFy
Z3VtZW50VHlwZXMpIH0pOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQorYXV0byBNb2R1bGVQYXJz
ZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IGltcG9y
dENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW1wb3J0Q291bnQpCi0gICAgICAgIHx8
IGltcG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQotICAg
ICAgICB8fCAhbV9tb2R1bGUtPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50
KSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVs
b3cuCi0gICAgICAgIHx8ICFtX21vZHVsZS0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1w
b3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJ
WE1FcyBiZWxvdy4KLSAgICAgICAgfHwgIW1fbW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdo
ZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgICAgIHx8ICFtX2Z1bmN0aW9uSW5kZXhT
cGFjZS50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpKSAvLyBGSVhNRSB0aGlzIG92ZXIt
YWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuIFdlJ2xsIGFsbG9jYXRlIHNv
bWUgbW9yZSBoZXJlIHdoZW4gd2Uga25vdyBob3cgbWFueSBmdW5jdGlvbnMgdG8gZXhwZWN0Lgot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoaW1wb3J0Q291bnQpLCAiY2FuJ3QgZ2V0IEltcG9ydCBzZWN0aW9uJ3MgY291bnQiKTsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGltcG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSwgIkltcG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAi
LCBpbXBvcnRDb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxl
LT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBnbG9iYWxzIik7IC8vIEZJWE1F
IHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGltcG9ydENvdW50LCAiIGltcG9ydHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3
aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
cmVzdWx0Lm1vZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRD
b3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwg
IiBpbXBvcnQgZnVuY3Rpb25zIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3
ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3Vs
dC5mdW5jdGlvbkluZGV4U3BhY2UudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGZ1bmN0aW9u
cyBpbiB0aGUgaW5kZXggc3BhY2UiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVu
IHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LiBXZSdsbCBhbGxvY2F0ZSBzb21lIG1vcmUgaGVyZSB3
aGVuIHdlIGtub3cgaG93IG1hbnkgZnVuY3Rpb25zIHRvIGV4cGVjdC4KIAogICAgIGZvciAodWlu
dDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1w
b3J0TnVtYmVyKSB7CiAgICAgICAgIEltcG9ydCBpbXA7CkBAIC0yMjksMTc5ICsxNTAsMTYwIEBA
IGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCiAgICAgICAgIHVpbnQzMl90IGZpZWxk
TGVuOwogICAgICAgICBTdHJpbmcgbW9kdWxlU3RyaW5nOwogICAgICAgICBTdHJpbmcgZmllbGRT
dHJpbmc7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobW9kdWxlTGVuKQotICAgICAgICAg
ICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIG1vZHVsZSBuYW1lIGxlbmd0aCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFjb25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVsZUxlbiksICJjYW4ndCBnZXQg
IiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgb2YgbGVuZ3RoICIsIG1v
ZHVsZUxlbik7CiAgICAgICAgIGltcC5tb2R1bGUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1f
dm0sIG1vZHVsZVN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZmllbGRMZW4p
Ci0gICAgICAgICAgICB8fCAhY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVu
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVy
LCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJp
bmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5n
KGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAn
IiwgbW9kdWxlU3RyaW5nLCAiJyIpOwogICAgICAgICBpbXAuZmllbGQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKG1fdm0sIGZpZWxkU3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZUV4dGVybmFs
S2luZChpbXAua2luZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoaW1wLmtpbmQpLCAiY2FuJ3QgZ2V0
ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgc3dpdGNoIChp
bXAua2luZCkgewotICAgICAgICBjYXNlIEV4dGVybmFsOjpGdW5jdGlvbjogeworICAgICAgICBj
YXNlIEV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0
aW9uU2lnbmF0dXJlSW5kZXgpCi0gICAgICAgICAgICAgICAgfHwgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleCA+PSBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgaW1wLmtpbmRJbmRleCA9IG1fbW9kdWxlLT5pbXBvcnRG
dW5jdGlvbnMuc2l6ZSgpOwotICAgICAgICAgICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSAmbV9t
b2R1bGUtPnNpZ25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF07Ci0gICAgICAgICAgICBt
X21vZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOwotICAg
ICAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2UudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlv
blNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQn
cyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxk
ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
ZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1v
ZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAg
aW1wLmtpbmRJbmRleCA9IG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnNpemUoKTsK
KyAgICAgICAgICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0gJm1fcmVzdWx0Lm1vZHVsZS0+c2ln
bmF0dXJlc1tmdW5jdGlvblNpZ25hdHVyZUluZGV4XTsKKyAgICAgICAgICAgIG1fcmVzdWx0Lm1v
ZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOworICAgICAg
ICAgICAgbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1
cmUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5h
bDo6VGFibGU6IHsKKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CiAgICAgICAg
ICAgICBib29sIGlzSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICghcGFyc2VUYWJsZUhl
bHBlcihpc0ltcG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0LmdldFVuZXhwZWN0ZWQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1lbW9yeTogeworICAgICAgICBjYXNlIEV4dGVybmFsS2lu
ZDo6TWVtb3J5OiB7CiAgICAgICAgICAgICBib29sIGlzSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGlmICghcGFyc2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VNZW1v
cnlIZWxwZXIoaXNJbXBvcnQpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZ2V0VW5leHBlY3RlZCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7Cisg
ICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKICAgICAgICAgICAgIEdsb2JhbCBn
bG9iYWw7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGdsb2JhbC5tdXRhYmls
aXR5ID09IEdsb2JhbDo6TXV0YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9i
YWwpKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZ2xvYmFsLm11dGFiaWxpdHkg
PT0gR2xvYmFsOjpNdXRhYmxlLCAiTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0ZWQiKTsK
IAotICAgICAgICAgICAgaW1wLmtpbmRJbmRleCA9IG1fbW9kdWxlLT5nbG9iYWxzLnNpemUoKTsK
LSAgICAgICAgICAgIG1fbW9kdWxlLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGds
b2JhbCkpOworICAgICAgICAgICAgaW1wLmtpbmRJbmRleCA9IG1fcmVzdWx0Lm1vZHVsZS0+Z2xv
YmFscy5zaXplKCk7CisgICAgICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgbV9tb2R1bGUtPmltcG9ydHMudW5jaGVja2VkQXBwZW5k
KGltcCk7CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQo
aW1wKTsKICAgICB9CiAKLSAgICBtX21vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCA9IG1fbW9k
dWxlLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX3Jlc3VsdC5tb2R1
bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwgPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgp
OworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpCi0g
ICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQot
ICAgICAgICB8fCAhbV9tb2R1bGUtPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzLnRyeVJlc2Vy
dmVDYXBhY2l0eShjb3VudCkKLSAgICAgICAgfHwgIW1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkKLSAgICAgICAgfHwgIW1fZnVuY3Rpb25JbmRleFNw
YWNlLnRyeVJlc2VydmVDYXBhY2l0eShtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkgKyBjb3Vu
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5pbnRlcm5h
bEZ1bmN0aW9uU2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeS50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgIiwgY291bnQsICJGdW5jdGlvbiBsb2NhdGlvbnMiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2UudHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkgKyBjb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBtb3JlIGZ1bmN0aW9ucyBpbiB0aGUg
ZnVuY3Rpb24gaW5kZXggc3BhY2UiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7Ci0gICAgICAgIGlmICgh
cGFyc2VWYXJVSW50MzIodHlwZU51bWJlcikKLSAgICAgICAgICAgIHx8IHR5cGVOdW1iZXIgPj0g
bV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwg
ImNhbid0IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1
cmVzLnNpemUoKSwgaSwgInRoIEZ1bmN0aW9uIHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlw
ZU51bWJlcik7CiAKLSAgICAgICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSAmbV9tb2R1bGUtPnNp
Z25hdHVyZXNbdHlwZU51bWJlcl07CisgICAgICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0gJm1f
cmVzdWx0Lm1vZHVsZS0+c2lnbmF0dXJlc1t0eXBlTnVtYmVyXTsKICAgICAgICAgLy8gVGhlIENv
ZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgogICAgICAgICBzaXplX3Qgc3RhcnQg
PSAwOwogICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9tb2R1bGUtPmludGVybmFs
RnVuY3Rpb25TaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOwotICAgICAgICBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNrZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0p
OwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
KTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlcy51
bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKKyAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnVuY2hlY2tlZEFwcGVuZCh7IHN0YXJ0LCBlbmQgfSk7CisgICAgICAgIG1f
cmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4
aW11bSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVCghbWF4aW11bSk7CiAKICAgICB1
aW50OF90IGZsYWdzOwotICAgIGlmICghcGFyc2VWYXJVSW50MShmbGFncykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5pdGlhbCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGZs
YWdzKSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6
YWJsZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CiAKICAgICBpZiAoZmxhZ3MpIHsKICAg
ICAgICAgdWludDMyX3QgbWF4aW11bUludDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMiht
YXhpbXVtSW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoaW5p
dGlhbCA+IG1heGltdW1JbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBw
YXJzZSByZXNpemFibGUgbGltaXRzIG1heGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBo
YXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gIiwgbWF4aW11bUludCk7CiAgICAgICAgIG1heGltdW0gPSBtYXhp
bXVtSW50OwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
LWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpCithdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgLy8gV2UncmUgb25seSBhbGxvd2VkIGEgdG90YWwgb2Ygb25lIFRhYmxl
IGltcG9ydCBvciBkZWZpbml0aW9uLgotICAgIGlmIChtX2hhc1RhYmxlKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2hhc1RhYmxlLCAiVGFibGUgc2Vj
dGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIHRhYmxlIik7CiAKICAgICBtX2hh
c1RhYmxlID0gdHJ1ZTsKIAogICAgIGludDhfdCB0eXBlOwotICAgIGlmICghcGFyc2VJbnQ3KHR5
cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHR5cGUgIT0gV2FzbTo6QW55ZnVu
YykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
SW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1
bmMsIGdvdCAiLCB0eXBlKTsKIAogICAgIHVpbnQzMl90IGluaXRpYWw7CiAgICAgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBpZiAoIXBhcnNlUmVzaXphYmxlTGltaXRzKGlu
aXRpYWwsIG1heGltdW0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUpTV2Vi
QXNzZW1ibHlUYWJsZTo6aXNWYWxpZFNpemUoaW5pdGlhbCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRp
YWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJu
IGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighSlNXZWJB
c3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSwgIlRhYmxlJ3MgaW5pdGlhbCBwYWdl
IGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwogCiAgICAgQVNTRVJUKCFtYXhp
bXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCi0gICAgbV9tb2R1bGUtPnRhYmxlSW5mb3Jt
YXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1heGltdW0sIGlzSW1wb3J0KTsKKyAg
ICBtX3Jlc3VsdC5tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGlu
aXRpYWwsIG1heGltdW0sIGlzSW1wb3J0KTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkKK2F1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IGNv
dW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBXZSBvbmx5IGFsbG93IG9uZSB0YWJsZSBmb3Igbm93LgotICAgIGlmIChj
b3VudCAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291bnQiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3Vu
dCwgIiBpcyBpbnZhbGlkLCBvbmx5IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7CiAKICAgICBib29s
IGlzSW1wb3J0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHBhcnNlVGFibGVIZWxwZXIoaXNJbXBvcnQp
OworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7
CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0LmdldFVu
ZXhwZWN0ZWQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpw
YXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
TWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICAvLyBX
ZSBkb24ndCBhbGxvdyByZWRlY2xhcmluZyBtZW1vcnkuIEVpdGhlciB2aWEgaW1wb3J0IG9yIGRl
ZmluaXRpb24uCi0gICAgaWYgKG1fbW9kdWxlLT5tZW1vcnkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5LCAiTWVt
b3J5IHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMgYSBtZW1vcnkiKTsKIAog
ICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50OwogICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFn
ZUNvdW50OwogICAgIHsKICAgICAgICAgdWludDMyX3QgaW5pdGlhbDsKICAgICAgICAgc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICAgICAgaWYgKCFwYXJzZVJlc2l6YWJsZUxp
bWl0cyhpbml0aWFsLCBtYXhpbXVtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgUGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBt
YXhpbXVtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQorICAgICAgICAgICAgcmV0
dXJuIGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7CiAgICAgICAgIEFTU0VSVCghbWF4aW11bSB8fCAq
bWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5p
dGlhbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFn
ZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIGludmFsaWQiKTsKIAogICAgICAgICBpbml0aWFs
UGFnZUNvdW50ID0gUGFnZUNvdW50KGluaXRpYWwpOwogCiAgICAgICAgIGlmIChtYXhpbXVtKSB7
Ci0gICAgICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZCgqbWF4aW11bSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
UGFnZUNvdW50Ojppc1ZhbGlkKCptYXhpbXVtKSwgIk1lbW9yeSdzIG1heGltdW0gcGFnZSBjb3Vu
dCBvZiAiLCAqbWF4aW11bSwgIiBpcyBpbnZhbGlkIik7CiAgICAgICAgICAgICBtYXhpbXVtUGFn
ZUNvdW50ID0gUGFnZUNvdW50KCptYXhpbXVtKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQwOSw0
MyArMzExLDM2IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlz
SW1wb3J0KQogICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXpl
cyA9IHsgMCB9OwotICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0
aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBwaW5uZWRTaXplcywgaXNJbXBvcnQpOwot
ICAgIHJldHVybiB0cnVlOworICAgIG1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5m
b3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgcGlubmVkU2l6ZXMs
IGlzSW1wb3J0KTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFy
c2VNZW1vcnkoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQxKGNvdW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDEoY291bnQpLCAiY2FuJ3QgcGFyc2UgTWVtb3J5IHNlY3Rpb24ncyBjb3VudCIpOwog
CiAgICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICAvLyBXZSBvbmx5IGFsbG93IG9uZSBtZW1vcnkgZm9yIG5vdy4KLSAgICBpZiAo
Y291bnQgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoY291bnQgIT0gMSwgIk1lbW9yeSBzZWN0aW9uIGhhcyBtb3JlIHRoYW4gb25lIG1lbW9yeSwg
V2ViQXNzZW1ibHkgY3VycmVudGx5IG9ubHkgYWxsb3dzIHplcm8gb3Igb25lIik7CiAKICAgICBi
b29sIGlzSW1wb3J0ID0gZmFsc2U7CiAgICAgcmV0dXJuIHBhcnNlTWVtb3J5SGVscGVyKGlzSW1w
b3J0KTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkKK2F1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZUdsb2JhbCgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBn
bG9iYWxDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGdsb2JhbENvdW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9tb2R1bGUtPmdsb2JhbHMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGdsb2JhbENvdW50ICsgbV9tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGdsb2JhbENvdW50ICsgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xv
YmFsKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgZ2xvYmFsQ291bnQgKyBtX3Jlc3Vs
dC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICIgZ2xvYmFscyIpOwogCiAgICAgZm9yICh1
aW50MzJfdCBnbG9iYWxJbmRleCA9IDA7IGdsb2JhbEluZGV4IDwgZ2xvYmFsQ291bnQ7ICsrZ2xv
YmFsSW5kZXgpIHsKICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgaWYgKCFwYXJzZUds
b2JhbFR5cGUoZ2xvYmFsKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1
aW50OF90IGluaXRPcGNvZGU7Ci0gICAgICAgIGlmICghcGFyc2VJbml0RXhwcihpbml0T3Bjb2Rl
LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5
cGUoZ2xvYmFsKSk7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0
RXhwcihpbml0T3Bjb2RlLCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwogCiAg
ICAgICAgIGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPSBHbG9iYWw6OkZyb21FeHByZXNzaW9u
OwogICAgICAgICBUeXBlIHR5cGVGb3JJbml0T3Bjb2RlOwpAQCAtNDYzLDEzMCArMzU4LDEwMyBA
QCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKQogICAgICAgICAgICAgdHlwZUZvcklu
aXRPcGNvZGUgPSBGNjQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRHbG9i
YWw6Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPj0g
bV9tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBtX21vZHVsZS0+Z2xvYmFsc1tn
bG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcl0udHlwZTsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPj0gbV9yZXN1
bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsLCBnbG9iYWxJbmRleCwgInRoIEdsb2JhbCB1
c2VzIGdldF9nbG9iYWwgIiwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIsICIgd2hp
Y2ggZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1fcmVzdWx0Lm1vZHVsZS0+
Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CisgICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IG1f
cmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcl0u
dHlwZTsKICAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPSBHbG9iYWw6OkZy
b21HbG9iYWxJbXBvcnQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAodHlwZUZvckluaXRPcGNvZGUgIT0gZ2xvYmFsLnR5cGUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZUZvckluaXRPcGNv
ZGUgIT0gZ2xvYmFsLnR5cGUsICJHbG9iYWwgaW5pdF9leHByIG9wY29kZSBvZiB0eXBlICIsIHR5
cGVGb3JJbml0T3Bjb2RlLCAiIGRvZXNuJ3QgbWF0Y2ggZ2xvYmFsJ3MgdHlwZSAiLCBnbG9iYWwu
dHlwZSk7CiAKLSAgICAgICAgbV9tb2R1bGUtPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoZ2xvYmFsKSk7CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKQorYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQz
Ml90IGV4cG9ydENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpCi0g
ICAgICAgIHx8IGV4cG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKQotICAgICAgICB8fCAhbV9tb2R1bGUtPmV4cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4
cG9ydENvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlv
bidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJFeHBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
cmVzdWx0Lm1vZHVsZS0+ZXhwb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgZXhwb3J0Q291bnQsICIgZXhwb3J0
cyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIg
PCBleHBvcnRDb3VudDsgKytleHBvcnROdW1iZXIpIHsKICAgICAgICAgRXhwb3J0IGV4cDsKICAg
ICAgICAgdWludDMyX3QgZmllbGRMZW47CiAgICAgICAgIFN0cmluZyBmaWVsZFN0cmluZzsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbikKLSAgICAgICAgICAgIHx8ICFjb25z
dW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBleHAuZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0s
IGZpZWxkU3RyaW5nKTsKLQotICAgICAgICBpZiAoIXBhcnNlRXh0ZXJuYWxLaW5kKGV4cC5raW5k
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGV4cC5raW5kSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQg
IiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZp
ZWxkTGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBu
YW1lIG9mIGxlbmd0aCAiLCBmaWVsZExlbik7CisgICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOwogCisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGV4cC5raW5kKSwgImNhbid0IGdldCAiLCBleHBv
cnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cC5raW5kSW5k
ZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgs
IG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgc3dpdGNoIChleHAua2luZCkg
ewotICAgICAgICBjYXNlIEV4dGVybmFsOjpGdW5jdGlvbjogewotICAgICAgICAgICAgaWYgKGV4
cC5raW5kSW5kZXggPj0gbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cC5raW5kSW5kZXggPj0gbV9yZXN1
bHQuZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhh
cyBpbnZhbGlkIGZ1bmN0aW9uIG51bWJlciAiLCBleHAua2luZEluZGV4LCAiIGl0IGV4Y2VlZHMg
dGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5z
aXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOiB7Ci0gICAgICAgICAg
ICBpZiAoIW1faGFzVGFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgaWYgKGV4cC5raW5kSW5kZXggIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogeworICAgICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9oYXNUYWJsZSwgImNhbid0IGV4cG9ydCBhIG5vbi1leGlzdGVu
dCBUYWJsZSIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHAua2luZEluZGV4
LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGV4cC5raW5kSW5kZXgsICIgb25seSBvbmUgVGFibGUg
aXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBpZiAoIW1fbW9k
dWxlLT5tZW1vcnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKGV4cC5raW5kSW5kZXggIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5LCAiY2FuJ3QgZXhwb3J0IGEgbm9u
LWV4aXN0ZW50IE1lbW9yeSIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHAu
a2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBleHAua2luZEluZGV4LCAiIG9ubHkg
b25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWw6Okdsb2JhbDogewotICAgICAgICAgICAg
aWYgKGV4cC5raW5kSW5kZXggPj0gbV9tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKG1fbW9kdWxlLT5nbG9iYWxz
W2V4cC5raW5kSW5kZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsOjpJbW11dGFibGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6R2xvYmFs
OiB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cC5raW5kSW5kZXggPj0gbV9y
ZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhh
cyBpbnZhbGlkIGdsb2JhbCBudW1iZXIgIiwgZXhwLmtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRo
ZSBnbG9iYWxzIGNvdW50ICIsIG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy5zaXplKCksICIsIG5h
bWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2V4cC5raW5kSW5kZXhdLm11dGFiaWxpdHkgIT0g
R2xvYmFsOjpJbW11dGFibGUsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBpc24ndCBpbW11dGFi
bGUsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBtX21vZHVsZS0+ZXhwb3J0cy51bmNoZWNrZWRB
cHBlbmQoZXhwKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5leHBvcnRzLnVuY2hlY2tlZEFw
cGVuZChleHApOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9
CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVN0YXJ0KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKHN0YXJ0RnVuY3Rpb25JbmRleCkKLSAg
ICAgICAgfHwgc3RhcnRGdW5jdGlvbkluZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0gbV9m
dW5jdGlvbkluZGV4U3BhY2Vbc3RhcnRGdW5jdGlvbkluZGV4XS5zaWduYXR1cmU7Ci0gICAgaWYg
KHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSAhPSAwCi0gICAgICAgIHx8IHNpZ25hdHVyZS0+
cmV0dXJuVHlwZSAhPSBWb2lkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2R1bGUt
PnN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlID0gc3RhcnRGdW5jdGlvbkluZGV4OwotICAgIHJldHVy
biB0cnVlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHN0YXJ0RnVu
Y3Rpb25JbmRleCksICJjYW4ndCBnZXQgU3RhcnQgaW5kZXgiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHN0YXJ0RnVuY3Rpb25JbmRleCA+PSBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uu
c2l6ZSgpLCAiU3RhcnQgaW5kZXggIiwgc3RhcnRGdW5jdGlvbkluZGV4LCAiIGV4Y2VlZHMgZnVu
Y3Rpb24gaW5kZXggc3BhY2UgIiwgbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSk7
CisgICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Vb
c3RhcnRGdW5jdGlvbkluZGV4XS5zaWduYXR1cmU7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
c2lnbmF0dXJlLT5hcmd1bWVudHMuaXNFbXB0eSgpLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2
ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS0+cmV0dXJu
VHlwZSAhPSBWb2lkLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAg
ICBtX3Jlc3VsdC5tb2R1bGUtPnN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlID0gc3RhcnRGdW5jdGlv
bkluZGV4OworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUVs
ZW1lbnQoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICBpZiAoIW1faGFzVGFibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2hhc1RhYmxlLCAiRWxlbWVudCBzZWN0aW9uIGV4cGVjdHMg
YSBUYWJsZSB0byBiZSBwcmVzZW50Iik7CiAKICAgICB1aW50MzJfdCBlbGVtZW50Q291bnQ7Ci0g
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihlbGVtZW50Q291bnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFtX21vZHVsZS0+ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1l
bnRDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBlbGVtZW50Q291bnQ7ICsraSkgeworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGVsZW1lbnRDb3VudCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3Mg
Y291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVsZW1lbnRDb3VudCA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9y
ZXN1bHQubW9kdWxlLT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7
CisgICAgZm9yICh1bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRD
b3VudDsgKytlbGVtZW50TnVtKSB7CiAgICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBvbmUgdGFibGUgZm9yIG5vdy4KLSAg
ICAgICAgaWYgKHRhYmxlSW5kZXggIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgICAgICB1aW50NjRfdCBvZmZzZXQ7CiAgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLSAg
ICAgICAgaWYgKCFwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNldCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGluaXRPcGNvZGUgIT0gT3BUeXBlOjpJMzJD
b25zdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1aW50MzJfdCBpbmRl
eENvdW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEFTU0VSVCghIW1fbW9kdWxlLT50YWJsZUlu
Zm9ybWF0aW9uKTsKLSAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0g
PSBtX21vZHVsZS0+dGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBnZXQgIiwg
ZWxlbWVudE51bSwgInRoIEVsZW1lbnQgdGFibGUgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRih0YWJsZUluZGV4LCAiRWxlbWVudCBzZWN0aW9uIGNhbiBvbmx5IGhhdmUgb25l
IFRhYmxlIGZvciBub3ciKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNldCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGluaXRPcGNvZGUgIT0gT3BUeXBlOjpJMzJDb25zdCwgIkVsZW1lbnQgc2VjdGlvbiBkb2Vz
bid0IHN1cHBvcnQgbm9uLWkzMiBpbml0X2V4cHIgb3Bjb2RlIGZvciBub3csIGdvdCAiLCBpbml0
T3Bjb2RlKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5k
ZXhDb3VudCksICJjYW4ndCBnZXQgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBF
bGVtZW50IHNlY3Rpb24iKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlv
bidzICIsIGVsZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291
bnQpOworCisgICAgICAgIEFTU0VSVCghIW1fcmVzdWx0Lm1vZHVsZS0+dGFibGVJbmZvcm1hdGlv
bik7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtID0gbV9yZXN1
bHQubW9kdWxlLT50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IHNob3VsZCBpbmRleENvdW50IGJlaW5nIHplcm8gYmUgYSB2YWxpZGF0aW9uIGVycm9y
PwogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTgyNgogICAgICAgICAgICAgaWYgKGluZGV4Q291bnQpIHsKQEAgLTU5NCwxODMgKzQ2Miwx
NDcgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpCiAgICAgICAgICAgICAgICAg
Ly8gU2hvdWxkIHRoZXkgYmUgdGhvdWdoPwogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjcKICAgICAgICAgICAgICAgICB1aW50
NjRfdCBsYXN0V3JpdHRlbkluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4Q291bnQp
ICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgLSAxOwotICAgICAgICAgICAgICAgIGlm
IChsYXN0V3JpdHRlbkluZGV4ID49IHN0YXRpY19jYXN0PHVpbnQ2NF90PigqbWF4aW11bSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGxhc3RXcml0dGVuSW5kZXggPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KCpt
YXhpbXVtKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50IHdy
aXRlcyB0byBpbmRleCAiLCBsYXN0V3JpdHRlbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIG1h
eGltdW0gIiwgKm1heGltdW0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
RWxlbWVudCBlbGVtZW50OwotICAgICAgICBpZiAoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRy
eVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAi
LCBpbmRleENvdW50LCAiIEVsZW1lbnQgaW5kaWNlcyIpOwogCiAgICAgICAgIGVsZW1lbnQub2Zm
c2V0ID0gb2Zmc2V0OwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleENv
dW50OyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaW5k
ZXhDb3VudDsgKytpbmRleCkgewogICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsK
LSAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA+
PSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVu
Y3Rpb25JbmRleCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwg
InRoIGVsZW1lbnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7CisgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNl
LnNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3Mg
IiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMg
dGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9yZXN1bHQuZnVuY3Rpb25JbmRl
eFNwYWNlLnNpemUoKSk7CiAKICAgICAgICAgICAgIGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChmdW5jdGlvbkluZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIG1fbW9k
dWxlLT5lbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAg
IG1fcmVzdWx0Lm1vZHVsZS0+ZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZWxlbWVu
dCkpOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29k
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGNvdW50KQotICAgICAgICB8fCBjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwgY291bnQgIT0gbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IENvZGUgc2VjdGlv
bidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28g
YmlnICIsIGNvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IG1fcmVzdWx0
LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwg
Y291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX3Jl
c3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKIAogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6
ZTsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpCi0gICAgICAgICAg
ICB8fCBmdW5jdGlvblNpemUgPiBsZW5ndGgoKQotICAgICAgICAgICAgfHwgZnVuY3Rpb25TaXpl
ID4gbGVuZ3RoKCkgLSBtX29mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0OwotICAg
ICAgICBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNldCArIGZ1bmN0
aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtp
XS5lbmQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0
aW9uU2l6ZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIENvZGUgZnVuY3Rpb24ncyBzaXplIik7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbGVuZ3RoKCksICJDb2Rl
IGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0aGUgbW9kdWxlJ3Mg
c2l6ZSAiLCBsZW5ndGgoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25T
aXplID4gbGVuZ3RoKCkgLSBtX29mZnNldCwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIsIGxlbmd0aCgp
IC0gbV9vZmZzZXQpOworCisgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eVtpXS5zdGFydCA9IG1fb2Zmc2V0OworICAgICAgICBtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnlbaV0uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNpemU7CisgICAgICAgIG1fb2Zm
c2V0ID0gbV9yZXN1bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZDsKICAgICB9CiAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnRO
dW1iZXIpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUs
IHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1iZXIpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBp
ZiAoIXBhcnNlVUludDgob3Bjb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgob3Bjb2RlKSwgImNhbid0IGdldCBpbml0X2V4cHIn
cyBvcGNvZGUiKTsKIAogICAgIHN3aXRjaCAob3Bjb2RlKSB7CiAgICAgY2FzZSBJMzJDb25zdDog
ewogICAgICAgICBpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVmFySW50MzIo
Y29uc3RhbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhckludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2
YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTMyLmNvbnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51
bWJlciA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihjb25zdGFudCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgSTY0Q29uc3Q6IHsKICAgICAgICAgaW50NjRfdCBjb25zdGFudDsK
LSAgICAgICAgaWYgKCFwYXJzZVZhckludDY0KGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25z
dGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGk2NC5jb25z
dCIpOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgY2FzZSBGMzJDb25zdDogewogICAgICAgICB1aW50MzJfdCBjb25z
dGFudDsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQzMihjb25zdGFudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDMyKGNv
bnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNv
bnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBjYXNlIEY2NENvbnN0OiB7CiAgICAgICAgIHVpbnQ2NF90IGNv
bnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVUludDY0KGNvbnN0YW50KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NjQo
Y29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmNjQu
Y29uc3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0R2xvYmFsOiB7CiAgICAgICAgIHVpbnQzMl90
IGluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoaW5kZXggPj0gbV9tb2R1bGUtPmltcG9ydHMu
c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb25zdCBJbXBvcnQm
IGltcG9ydCA9IG1fbW9kdWxlLT5pbXBvcnRzW2luZGV4XTsKLSAgICAgICAgaWYgKG1fbW9kdWxl
LT5pbXBvcnRzW2luZGV4XS5raW5kICE9IEV4dGVybmFsOjpHbG9iYWwKLSAgICAgICAgICAgIHx8
IGltcG9ydC5raW5kSW5kZXggPj0gbV9tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMu
c2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIG51bWJl
ciBvZiBpbXBvcnRzICIsIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0cy5zaXplKCkpOworICAgICAg
ICBjb25zdCBJbXBvcnQmIGltcG9ydCA9IG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0c1tpbmRleF07
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2lu
ZGV4XS5raW5kICE9IEV4dGVybmFsS2luZDo6R2xvYmFsLCAiZ2V0X2dsb2JhbCdzIGltcG9ydCBr
aW5kIGlzICIsIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0c1tpbmRleF0ua2luZCwgIiBzaG91bGQg
YmUgZ2xvYmFsIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW1wb3J0LmtpbmRJbmRl
eCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGlt
cG9ydCBraW5kIGluZGV4ICIsIGltcG9ydC5raW5kSW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3Qg
aW50ZXJuYWwgZ2xvYmFsICIsIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7
CiAKLSAgICAgICAgQVNTRVJUKG1fbW9kdWxlLT5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11
dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOworICAgICAgICBBU1NFUlQobV9yZXN1bHQu
bW9kdWxlLT5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJ
bW11dGFibGUpOwogCiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZmFsc2UsICJ1bmtub3duIGluaXRfZXhwciBvcGNv
ZGUgIiwgb3Bjb2RlKTsKICAgICB9CiAKICAgICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBpZiAo
IXBhcnNlVUludDgoZW5kT3Bjb2RlKSB8fCBlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGVu
ZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNob3Vs
ZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2Jh
bFR5cGUoR2xvYmFsJiBnbG9iYWwpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxUeXBl
KEdsb2JhbCYgZ2xvYmFsKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDhfdCBtdXRhYmls
aXR5OwotICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpIHx8ICFwYXJzZVZhclVJ
bnQxKG11dGFiaWxpdHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdz
IHZhbHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11
dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOwogICAgIGds
b2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmls
aXR5KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2VEYXRhKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3Qgc2VnbWVudENvdW50OwotICAgIGlmICghcGFy
c2VWYXJVSW50MzIoc2VnbWVudENvdW50KQotICAgICAgICB8fCBzZWdtZW50Q291bnQgPT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+
ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVudENvdW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIiAgc2VnbWVudHM6ICIs
IHNlZ21lbnRDb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
c2VnbWVudENvdW50KSwgImNhbid0IGdldCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVudENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSwgIkRhdGEgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgc2VnbWVu
dENvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmRhdGEu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNlZ21lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciBEYXRhIHNlY3Rpb24ncyAiLCBzZWdtZW50Q291bnQsICIgc2VnbWVudHMiKTsK
IAogICAgIGZvciAodWludDMyX3Qgc2VnbWVudE51bWJlciA9IDA7IHNlZ21lbnROdW1iZXIgPCBz
ZWdtZW50Q291bnQ7ICsrc2VnbWVudE51bWJlcikgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgIGRhdGFMb2dMbigiICBzZWdtZW50ICMiLCBzZWdtZW50TnVtYmVyKTsKICAgICAg
ICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAgIHVpbnQ2NF90IG9mZnNldDsKICAgICAgICAgdWlu
dDhfdCBpbml0T3Bjb2RlOwogICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLSAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkKLSAgICAgICAgICAgIHx8IGluZGV4KQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghcGFyc2VJbml0RXhwcihpbml0
T3Bjb2RlLCBvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlm
IChpbml0T3Bjb2RlICE9IE9wVHlwZTo6STMyQ29uc3QpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBv
ZmZzZXQ6ICIsIG9mZnNldCk7CiAKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihkYXRhQnl0
ZUxlbmd0aCkKLSAgICAgICAgICAgIHx8IGRhdGFCeXRlTGVuZ3RoID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBkYXRhIGJ5dGVzOiAi
LCBkYXRhQnl0ZUxlbmd0aCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGluZGV4KSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdt
ZW50J3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgbm9uLXplcm8gaW5kZXggIiwgaW5kZXgpOwor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29k
ZSwgb2Zmc2V0KSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29kZSAhPSBP
cFR5cGU6OkkzMkNvbnN0LCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50IGhhcyBvcGNv
ZGUgIiwgaW5pdE9wY29kZSwgIiBleHBlY3RlZCBpMzIuY29uc3QiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAiY2FuJ3QgZ2V0
ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3RoIik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdt
ZW50J3MgZGF0YSBieXRlIGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoKTsKIAog
ICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0gU2VnbWVudDo6bWFrZShvZmZzZXQsIGRhdGFCeXRl
TGVuZ3RoKTsKLSAgICAgICAgaWYgKCFzZWdtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBtX21vZHVsZS0+ZGF0YS51bmNoZWNrZWRBcHBlbmQoU2VnbWVudDo6bWFrZVB0
cihzZWdtZW50KSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlZ21lbnQsICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBz
ZWdtZW50IG9mIHNpemUgIiwgZGF0YUJ5dGVMZW5ndGgpOworICAgICAgICBtX3Jlc3VsdC5tb2R1
bGUtPmRhdGEudW5jaGVja2VkQXBwZW5kKFNlZ21lbnQ6Om1ha2VQdHIoc2VnbWVudCkpOwogICAg
ICAgICBmb3IgKHVpbnQzMl90IGRhdGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0
aDsgKytkYXRhQnl0ZSkgewogICAgICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAg
aWYgKCFwYXJzZVVJbnQ4KGJ5dGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJjYW4ndCBn
ZXQgIiwgZGF0YUJ5dGUsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBzZWdtZW50TnVtYmVyLCAidGgg
RGF0YSBzZWdtZW50Iik7CiAgICAgICAgICAgICBzZWdtZW50LT5ieXRlKGRhdGFCeXRlKSA9IGJ5
dGU7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
IiAgICBbIiwgZGF0YUJ5dGUsICJdID0gIiwgc2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkpOwogICAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggYjcxODc0My4uNmEyNDM2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtMzQsNyArMzQsMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTW9kdWxlUGFyc2Vy
IDogcHVibGljIFBhcnNlciB7CitzdHJ1Y3QgTW9kdWxlUGFyc2VyUmVzdWx0IHsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZTsKKyAgICBGdW5jdGlvbkluZGV4
U3BhY2UgZnVuY3Rpb25JbmRleFNwYWNlOworICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKK307CisKK2NsYXNzIE1vZHVsZVBhcnNl
ciA6IHB1YmxpYyBQYXJzZXI8TW9kdWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKICAgICBN
b2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBz
b3VyY2VMZW5ndGgpCkBAIC00Nyw1MSArNTMsMjMgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
LSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9Ci0gICAgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7Ci0gICAgfQotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24o
KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0
dXJuIG1fbW9kdWxlOwotICAgIH0KLQotICAgIEZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25J
bmRleFNwYWNlKCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0g
ICAgICAgIHJldHVybiBtX2Z1bmN0aW9uSW5kZXhTcGFjZTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8
RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiYgZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5KCkKLSAg
ICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICB9CisgICAgUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZSgpOwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFyc2VHbG9iYWxUeXBlKEds
b2JhbCYpOwogCi0jZGVmaW5lIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUihOQU1FLCBJRCwg
REVTQ1JJUFRJT04pIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlICMjIE5BTUUoKTsKKyNk
ZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKE5BTUUsIElELCBERVNDUklQVElPTikg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMgTkFNRSgpOwogICAgIEZP
Ul9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCiAjdW5kZWYg
V0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpOwotICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWludDY0X3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBl
cihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90Jik7CiAKICAgICBWTSogbV92bTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwotICAgIEZ1bmN0aW9u
SW5kZXhTcGFjZSBtX2Z1bmN0aW9uSW5kZXhTcGFjZTsKLSAgICBWZWN0b3I8RnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBib29sIG1fZmFp
bGVkIHsgdHJ1ZSB9OworICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKICAgICBib29s
IG1faGFzVGFibGUgeyBmYWxzZSB9OwotICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGFyc2VyLmgKaW5kZXggMDhmYWJiZi4uZDZhZThjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QYXJzZXIuaApAQCAtMzIsMTMgKzMyLDI5IEBACiAjaW5jbHVkZSAiV2FzbUZvcm1h
dC5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKKyNp
bmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRl
IDx3dGYvTEVCRGVjb2Rlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAorbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXIgeworLy8gRklYTUUgV2Ugc2hvdWxkIG1v
dmUgdGhpcyB0byBtYWtlU3RyaW5nLiBJdCdzIGluIGl0cyBvd24gbmFtZXNwYWNlIHRvIGVuYWJs
ZSBDKysgQXJndW1lbnQgRGVwZW5kZW50IExvb2t1cCDDoCBsYSBzdGQ6OnN3YXA6IHVzZXIgY29k
ZSBjYW4gZGVibGFyZSBpdHMgb3duICJib3hGYWlsdXJlIiBhbmQgdGhlIGZhaWwoKSBoZWxwZXIg
d2lsbCBmaW5kIGl0Lgorc3RhdGljIGlubGluZSBhdXRvIG1ha2VTdHJpbmcoY29uc3QgY2hhciAq
ZmFpbHVyZSkgeyByZXR1cm4gQVNDSUlMaXRlcmFsKGZhaWx1cmUpOyB9Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW50LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50
ZWdyYWw8SW50Pjo6dmFsdWU+Ojp0eXBlPgorc3RhdGljIGlubGluZSBhdXRvIG1ha2VTdHJpbmco
SW50IGZhaWx1cmUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKGZhaWx1cmUpOyB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgogY2xhc3MgUGFyc2VyIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CisgICAgdHlwZWRlZiBVbmV4cGVjdGVkVHlwZTxF
cnJvclR5cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBF
cnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxTdWNjZXNzVHlw
ZSwgRXJyb3JUeXBlPiBSZXN1bHQ7CisKIHByb3RlY3RlZDoKICAgICBQYXJzZXIoY29uc3QgdWlu
dDhfdCosIHNpemVfdCk7CiAKQEAgLTYwLDI1ICs3Niw0NCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVJlc3VsdFR5cGUoVHlwZSYpOwogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmKTsKLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbDo6S2luZCYpOworICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVybmFsS2luZCYpOwog
CiAgICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0K
ICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KIAog
ICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJn
cz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2Ug
RmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVzcGFjZSBhYm92ZS4KKyAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZyhBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgIiksIFN0cmluZzo6bnVtYmVy
KG1fb2Zmc2V0KSwgQVNDSUlMaXRlcmFsKCIgLyAiKSwgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VM
ZW5ndGgpLCBBU0NJSUxpdGVyYWwoIjogIiksIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9
CisjZGVmaW5lIFdBU01fUEFSU0VSX0ZBSUxfSUYoY29uZGl0aW9uLCAuLi4pIGRvIHsgXAorICAg
IGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
cmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAo
MCkKKworI2RlZmluZSBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGhlbHBlcikgZG8geyAgIFwK
KyAgICAgICAgYXV0byBoZWxwZXJSZXN1bHQgPSBoZWxwZXI7ICAgICAgICAgICAgICBcCisgICAg
ICAgIGlmIChVTkxJS0VMWSghaGVscGVyUmVzdWx0KSkgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgcmV0dXJuIGhlbHBlclJlc3VsdC5nZXRVbmV4cGVjdGVkKCk7IFwKKyAgICB9IHdoaWxlICgw
KQorCiBwcml2YXRlOgogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIHNpemVfdCBt
X3NvdXJjZUxlbmd0aDsKIH07CiAKLUFMV0FZU19JTkxJTkUgUGFyc2VyOjpQYXJzZXIoY29uc3Qg
dWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoKQordGVtcGxhdGU8dHlw
ZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIFBhcnNlcjxTdWNjZXNzVHlwZT46OlBh
cnNlcihjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiAg
ICAgOiBtX3NvdXJjZShzb3VyY2VCdWZmZXIpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChzb3VyY2VM
ZW5ndGgpCiB7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFyYWN0
ZXIoY2hhciBjKQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5F
IGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6Y29uc3VtZUNoYXJhY3RlcihjaGFyIGMpCiB7CiAg
ICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04
OSw3ICsxMjQsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lQ2hhcmFjdGVy
KGNoYXIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJz
ZXI6OmNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciogc3RyKQordGVtcGxhdGU8dHlwZW5hbWUgU3Vj
Y2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6Y29uc3Vt
ZVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCiB7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBtX29mZnNl
dDsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCkBAIC0xMDMsNyArMTM5LDggQEAgQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVV
VEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0LCBzaXplX3Qgc3RyaW5nTGVuZ3RoKQordGVtcGxhdGU8
dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NU
eXBlPjo6Y29uc3VtZVVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHQsIHNpemVfdCBzdHJpbmdMZW5n
dGgpCiB7CiAgICAgaWYgKHN0cmluZ0xlbmd0aCA9PSAwKSB7CiAgICAgICAgIHJlc3VsdCA9IGVt
cHR5U3RyaW5nKCk7CkBAIC0xMTgsMjcgKzE1NSwzMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFy
c2VyOjpjb25zdW1lVVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdCwgc2l6ZV90IHN0cmluZ0xlbmd0
aAogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJz
ZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5
cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYXJVSW50
MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVVSW50MzIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsKIH0K
IAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJVSW50NjQodWludDY0X3QmIHJl
c3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29s
IFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQpCiB7
CiAgICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLCBtX3Nv
dXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI6OnBhcnNlVmFySW50MzIoaW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUg
U3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFy
c2VWYXJJbnQzMihpbnQzMl90JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rl
cjo6ZGVjb2RlSW50MzIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0
KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJJbnQ2NChpbnQ2NF90
JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhckludDY0KGludDY0X3QmIHJlc3VsdCkK
IHsKICAgICByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVJbnQ2NChtX3NvdXJjZSwgbV9z
b3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wg
UGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUg
U3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFy
c2VVSW50MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICBpZiAobGVuZ3RoKCkgPCA0IHx8IG1f
b2Zmc2V0ID4gbGVuZ3RoKCkgLSA0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDcsNyAr
MTg5LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50MzIodWludDMyX3Qm
IHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNl
cjo6cGFyc2VVSW50NjQodWludDY0X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nl
c3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVUlu
dDY0KHVpbnQ2NF90JiByZXN1bHQpCiB7CiAgICAgaWYgKGxlbmd0aCgpIDwgOCB8fCBtX29mZnNl
dCA+IGxlbmd0aCgpIC0gOCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU2LDcgKzE5OSw4
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDY0KHVpbnQ2NF90JiByZXN1
bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBh
cnNlVUludDgodWludDhfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+
CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VVSW50OCh1aW50
OF90JiByZXN1bHQpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNjQsNyArMjA4LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNl
cjo6cGFyc2VVSW50OCh1aW50OF90JiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlSW50NyhpbnQ4X3QmIHJlc3VsdCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNj
ZXNzVHlwZT46OnBhcnNlSW50NyhpbnQ4X3QmIHJlc3VsdCkKIHsKICAgICBpZiAobV9vZmZzZXQg
Pj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3Myw3ICsyMTgsOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZUludDcoaW50OF90JiByZXN1bHQpCiAgICAg
cmV0dXJuICh2ICYgMHg4MCkgPT0gMDsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6
cGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlw
ZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVVJbnQ3KHVp
bnQ4X3QmIHJlc3VsdCkKIHsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE4MSw3ICsyMjcsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFy
c2VyOjpwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0IDwgMHg4
MDsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJVSW50MSh1aW50OF90
JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCkK
IHsKICAgICB1aW50MzJfdCB0ZW1wOwogICAgIGlmICghcGFyc2VWYXJVSW50MzIodGVtcCkpCkBA
IC0xOTAsNyArMjM3LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJVSW50
MSh1aW50OF90JiByZXN1bHQpCiAgICAgcmV0dXJuIHRlbXAgPD0gMTsKIH0KIAotQUxXQVlTX0lO
TElORSBib29sIFBhcnNlcjo6cGFyc2VSZXN1bHRUeXBlKFR5cGUmIHJlc3VsdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNz
VHlwZT46OnBhcnNlUmVzdWx0VHlwZShUeXBlJiByZXN1bHQpCiB7CiAgICAgaW50OF90IHZhbHVl
OwogICAgIGlmICghcGFyc2VJbnQ3KHZhbHVlKSkKQEAgLTIwMSwxOSArMjQ5LDIxIEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlUmVzdWx0VHlwZShUeXBlJiByZXN1bHQpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVU
eXBlKFR5cGUmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlT
X0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJl
c3VsdCkKIHsKICAgICByZXR1cm4gcGFyc2VSZXN1bHRUeXBlKHJlc3VsdCkgJiYgaXNWYWx1ZVR5
cGUocmVzdWx0KTsKIH0KLSAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlRXh0
ZXJuYWxLaW5kKEV4dGVybmFsOjpLaW5kJiByZXN1bHQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIFN1
Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNl
RXh0ZXJuYWxLaW5kKEV4dGVybmFsS2luZCYgcmVzdWx0KQogewogICAgIHVpbnQ4X3QgdmFsdWU7
CiAgICAgaWYgKCFwYXJzZVVJbnQ3KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghRXh0ZXJuYWw6OmlzVmFsaWQodmFsdWUpKQorICAgIGlmICghaXNWYWxpZEV4dGVybmFs
S2luZCh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxFeHRlcm5hbDo6S2luZD4odmFsdWUpOworICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEV4
dGVybmFsS2luZD4odmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggNjgzMjllNS4uMWMwZTAxOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNjAsMjMgKzYwLDE4IEBAIFBsYW46
OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgp
CiAKIHZvaWQgUGxhbjo6cnVuKCkKIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
Z0xuKCJTdGFydGluZyBwbGFuLiIpOwogICAgIHsKICAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVs
ZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwotICAgICAgICBpZiAoIW1v
ZHVsZVBhcnNlci5wYXJzZSgpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZDogIiwgbW9kdWxlUGFyc2Vy
LmVycm9yTWVzc2FnZSgpKTsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbW9kdWxlUGFy
c2VyLmVycm9yTWVzc2FnZSgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHBh
cnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CisgICAgICAgIGlmICghcGFyc2VSZXN1
bHQpIHsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsgLy8gRklYTUUgcmV0dXJuIGFuIEV4cGVjdGVkLgogICAgICAg
ICB9Ci0gICAgICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5t
b2R1bGVJbmZvcm1hdGlvbigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkg
PSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkoKSk7Ci0gICAg
ICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUgPSBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmRl
eFNwYWNlKCkuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIgPSBt
b2R1bGVQYXJzZXIuZnVuY3Rpb25JbmRleFNwYWNlKCkucmVsZWFzZUJ1ZmZlcigpOworICAgICAg
ICBtX21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9kdWxlKTsKKyAg
ICAgICAgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkgPSBXVEZNb3ZlKHBhcnNlUmVzdWx0LT5m
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkpOworICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5z
aXplID0gcGFyc2VSZXN1bHQtPmZ1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCk7CisgICAgICAgIG1f
ZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlciA9IHBhcnNlUmVzdWx0LT5mdW5jdGlvbkluZGV4U3Bh
Y2UucmVsZWFzZUJ1ZmZlcigpOwogICAgIH0KLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZ0xuKCJQYXJzZWQgbW9kdWxlLiIpOwogCiAgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkg
PSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsK
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkg
ewpAQCAtOTcsNyArOTIsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAKICAgICBmb3IgKHVuc2lnbmVk
IGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBv
cnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBJbXBvcnQqIGltcG9ydCA9ICZt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKLSAgICAgICAgaWYgKGlt
cG9ydC0+a2luZCAhPSBFeHRlcm5hbDo6RnVuY3Rpb24pCisgICAgICAgIGlmIChpbXBvcnQtPmtp
bmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0gbV93YXNtVG9KU1N0dWJzLnNpemUo
KTsKICAgICAgICAgaWYgKHZlcmJvc2UpCkBAIC0xMTcsMTkgKzExMiwyNCBAQCB2b2lkIFBsYW46
OnJ1bigpCiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvSlNT
dHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAgICAgICBBU1NFUlQobV9mdW5jdGlvbklu
ZGV4U3BhY2UuYnVmZmVyLmdldCgpW2Z1bmN0aW9uSW5kZXhTcGFjZV0uc2lnbmF0dXJlID09IHNp
Z25hdHVyZSk7CiAKLSAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhTcGFj
ZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24pOwotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7
CisgICAgICAgIGF1dG8gdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9u
U3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rpb25JbmRleFNwYWNlLCAq
bV9tb2R1bGVJbmZvcm1hdGlvbik7CisgICAgICAgIGlmICghdmFsaWRhdGVSZXN1bHQpIHsKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSks
ICIsICIpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvcjsKKyAgICAgICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gdmFsaWRhdGVSZXN1bHQuZXJyb3IoKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVj
dGVkLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMudW5jaGVja2VkQXBwZW5kKFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPigpKTsKLSAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5k
KHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMuYXQoZnVuY3Rpb25JbmRleCksIG1fZnVu
Y3Rpb25JbmRleFNwYWNlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbikpOworICAgICAgICBhdXRvIHBh
cnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMuYXQo
ZnVuY3Rpb25JbmRleCksIG1fZnVuY3Rpb25JbmRleFNwYWNlLCAqbV9tb2R1bGVJbmZvcm1hdGlv
bik7CisgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgeworICAg
ICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAg
ICAgICB9CisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpKTsKICAgICAgICAgbV9mdW5jdGlvbkluZGV4
U3BhY2UuYnVmZmVyLmdldCgpW2Z1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSA9IG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TZWN0aW9ucy5oCmluZGV4IDk5NjA1MjQuLjVlZTdiY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCkBAIC00MiwyMSArNDIsNDQgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKICAgICBtYWNybyhDb2RlLCAgICAxMCwgIkZ1
bmN0aW9uIGJvZGllcyAoY29kZSkiKSBcCiAgICAgbWFjcm8oRGF0YSwgICAgMTEsICJEYXRhIHNl
Z21lbnRzIikKIAotc3RydWN0IFNlY3Rpb25zIHsKLSAgICBlbnVtIFNlY3Rpb24gOiB1aW50OF90
IHsKK2VudW0gY2xhc3MgU2VjdGlvbiA6IHVpbnQ4X3QgewogI2RlZmluZSBERUZJTkVfV0FTTV9T
RUNUSU9OX0VOVU0oTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBOQU1FID0gSUQsCi0gICAgICAgIEZP
Ul9FQUNIX1dBU01fU0VDVElPTihERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0pCisgICAgRk9SX0VB
Q0hfV0FTTV9TRUNUSU9OKERFRklORV9XQVNNX1NFQ1RJT05fRU5VTSkKICN1bmRlZiBERUZJTkVf
V0FTTV9TRUNUSU9OX0VOVU0KLSAgICAgICAgVW5rbm93bgotICAgIH07Ci0gICAgc3RhdGljIGJv
b2wgdmFsaWRhdGVPcmRlcihTZWN0aW9uIHByZXZpb3VzLCBTZWN0aW9uIG5leHQpCi0gICAgewot
ICAgICAgICBpZiAocHJldmlvdXMgPT0gVW5rbm93bikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICByZXR1cm4gcHJldmlvdXMgPCBuZXh0OwotICAgIH0KKyAgICBVbmtub3duCiB9
OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CitzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNl
Y3Rpb24oSW50IHNlY3Rpb24pCit7CisgICAgc3dpdGNoIChzZWN0aW9uKSB7CisjZGVmaW5lIFZB
TElEQVRFX1NFQ1RJT04oTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBjYXNlIHN0YXRpY19jYXN0PElu
dD4oU2VjdGlvbjo6TkFNRSk6IHJldHVybiB0cnVlOworICAgICAgICBGT1JfRUFDSF9XQVNNX1NF
Q1RJT04oVkFMSURBVEVfU0VDVElPTikKKyN1bmRlZiBWQUxJREFURV9TRUNUSU9OCisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBi
b29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQoreworICAg
IGlmIChwcmV2aW91cyA9PSBTZWN0aW9uOjpVbmtub3duKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4ocHJldmlvdXMpIDwgc3RhdGljX2Nhc3Q8
dWludDhfdD4obmV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmlu
ZyhTZWN0aW9uIHNlY3Rpb24pCit7CisgICAgc3dpdGNoIChzZWN0aW9uKSB7CisjZGVmaW5lIFNU
UklOR0lGWV9TRUNUSU9OX05BTUUoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBjYXNlIFNlY3Rpb246
Ok5BTUU6IHJldHVybiAjTkFNRTsKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFNUUklO
R0lGWV9TRUNUSU9OX05BTUUpCisjdW5kZWYgU1RSSU5HSUZZX1NFQ1RJT05fTkFNRQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiAiPyI7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21WYWxpZGF0ZS5jcHAKaW5kZXggZjc5YmM2My4uZDFiNTU2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCkBAIC03MSw2ICs3MSw5IEBAIHB1YmxpYzoK
ICAgICAgICAgQmxvY2tUeXBlIG1fYmxvY2tUeXBlOwogICAgICAgICBUeXBlIG1fc2lnbmF0dXJl
OwogICAgIH07CisgICAgdHlwZWRlZiBTdHJpbmcgRXJyb3JUeXBlOworICAgIHR5cGVkZWYgVW5l
eHBlY3RlZFR5cGU8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OworICAgIHR5cGVkZWYgRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlwZWRlZiBUeXBlIEV4cHJlc3Np
b25UeXBlOwogICAgIHR5cGVkZWYgQ29udHJvbERhdGEgQ29udHJvbFR5cGU7CiAgICAgdHlwZWRl
ZiBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwpAQCAtNzgsMTQ0ICs4
MSwxMjkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IEV4cHJlc3Npb25UeXBlIGVtcHR5
RXhwcmVzc2lvbiA9IFZvaWQ7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1
bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5Bcmdz
PgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBm
YWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBG
YWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5oLgorICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6ICIpLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7
CisgICAgfQorI2RlZmluZSBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBk
byB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgICAg
XAorICAgIH0gd2hpbGUgKDApCisKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFy
Z3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25z
dGFudChUeXBlIHR5cGUsIHVpbnQ2NF90KSB7IHJldHVybiB0eXBlOyB9CiAKICAgICAvLyBMb2Nh
bHMKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0
TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAKICAgICAvLyBHbG9iYWxzCi0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKIAogICAgIC8vIE1lbW9yeQotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKICAgICAvLyBCYXNp
YyBvcGVyYXRvcnMKICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlw
ZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOwogCiAgICAgLy8gQ29udHJvbCBmbG93CiAgICAgQ29udHJvbERhdGEgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsKICAgICBDb250cm9sRGF0
YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7Ci0gICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNp
Z25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7Ci0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsK
KyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25M
aXN0Jik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sRGF0YSYpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJu
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3Qg
VmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVh
Y2hhYmxlKENvbnRyb2xFbnRyeSYpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVm
YXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CiAKLSAgICB2b2lkIGFkZFVucmVh
Y2hhYmxlKCkgeyB9CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJs
ZSgpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQ2FsbHMKLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUqLCBj
b25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4m
IGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4
LCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIGJvb2wgaGFzTWVtb3J5
KCkgY29uc3QgeyByZXR1cm4gISFtX21vZHVsZS5tZW1vcnk7IH0KIAotICAgIHZvaWQgc2V0RXJy
b3JNZXNzYWdlKFN0cmluZyYmIG1lc3NhZ2UpIHsgQVNTRVJUKG1fZXJyb3JNZXNzYWdlLmlzTnVs
bCgpKTsgbV9lcnJvck1lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2UpOyB9Ci0gICAgU3RyaW5nIGVy
cm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CiAgICAgVmFsaWRh
dGUoRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZSkKICAgICAgICAgOiBtX3JldHVyblR5cGUocmV0dXJuVHlwZSkKICAgICAgICAgLCBtX21v
ZHVsZShtb2R1bGUpCiAgICAgewogICAgIH0KIAorICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8
Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7CisKIHByaXZhdGU6Ci0gICAg
Ym9vbCB1bmlmeShUeXBlLCBUeXBlKTsKLSAgICBib29sIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25M
aXN0JiwgY29uc3QgQ29udHJvbERhdGEmKTsKKyAgICBSZXN1bHQgdW5pZnkoVHlwZSwgVHlwZSk7
CisgICAgUmVzdWx0IHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25MaXN0JiwgY29uc3QgQ29udHJvbERh
dGEmKTsKIAotICAgIGJvb2wgY2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbERhdGEmIHRhcmdldCwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUmVzdWx0IGNoZWNr
QnJhbmNoVGFyZ2V0KENvbnRyb2xEYXRhJiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBl
eHByZXNzaW9uU3RhY2spOwogCiAgICAgRXhwcmVzc2lvblR5cGUgbV9yZXR1cm5UeXBlOwogICAg
IFZlY3RvcjxUeXBlPiBtX2xvY2FsczsKLSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1fbW9kdWxlOwogfTsKIAotYm9vbCBWYWxpZGF0ZTo6
YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJncykKK2F1dG8gVmFsaWRhdGU6OmFk
ZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpIC0+IFJlc3VsdAogewotICAgIGZv
ciAoVHlwZSBhcmcgOiBhcmdzKSB7Ci0gICAgICAgIGlmICghYWRkTG9jYWwoYXJnLCAxKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgZm9y
IChUeXBlIGFyZyA6IGFyZ3MpCisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoYWRk
TG9jYWwoYXJnLCAxKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRk
TG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkKK2F1dG8gVmFsaWRhdGU6OmFkZExvY2Fs
KFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFJlc3VsdAogewotICAgIGlmICghbV9sb2Nh
bHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHNpemVfdCBzaXplID0gbV9sb2NhbHMuc2l6ZSgpICsgY291bnQ7
CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KHNpemUpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBzaXplLCAiIGxvY2FscyIpOwog
CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIG1fbG9j
YWxzLnVuY2hlY2tlZEFwcGVuZCh0eXBlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6OmdldExvY2FsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoaW5kZXggPCBt
X2xvY2Fscy5zaXplKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9sb2NhbHNbaW5kZXhdOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkF0dGVtcHQgdG8gdXNlIHVua25vd24gbG9jYWwuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9sb2NhbHMuc2l6ZSgpLCAiYXR0
ZW1wdCB0byB1c2UgdW5rbm93biBsb2NhbCAiLCBpbmRleCwgIiBsYXN0IG9uZSBpcyAiLCBtX2xv
Y2Fscy5zaXplKCkpOworICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUgdmFsdWUpCithdXRvIFZhbGlkYXRlOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIGxv
Y2FsVHlwZTsKLSAgICBpZiAoIWdldExvY2FsKGluZGV4LCBsb2NhbFR5cGUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobG9jYWxUeXBlID09IHZhbHVlKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdCB0byBz
ZXQgbG9jYWwgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyhsb2NhbFR5cGUpLCAiIHdpdGggYSB2YXJp
YWJsZSBvZiB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGdldExvY2FsKGluZGV4LCBsb2NhbFR5cGUpKTsK
KyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGxvY2FsVHlwZSAhPSB2YWx1ZSwgInNldF9sb2Nh
bCB0byB0eXBlICIsIHZhbHVlLCAiIGV4cGVjdGVkICIsIGxvY2FsVHlwZSk7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBWYWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoaW5kZXgg
PCBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSkgewotICAgICAgICByZXN1bHQgPSBtX21vZHVsZS5n
bG9iYWxzW2luZGV4XS50eXBlOwotICAgICAgICBBU1NFUlQoaXNWYWx1ZVR5cGUocmVzdWx0KSk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiQXR0ZW1wdCB0byB1c2UgdW5rbm93biBnbG9iYWwuIik7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZ2xvYmFs
cy5zaXplKCksICJnZXRfZ2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBsaW1p
dCBpcyAiLCBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSk7CisgICAgcmVzdWx0ID0gbV9tb2R1bGUu
Z2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICBBU1NFUlQoaXNWYWx1ZVR5cGUocmVzdWx0KSk7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6c2V0R2xvYmFsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKK2F1dG8gVmFsaWRhdGU6OnNldEdsb2JhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFJlc3VsdAogewotICAgIGlmIChp
bmRleCA+PSBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSkgewotICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdCB0byB1c2UgdW5rbm93biBnbG9iYWwuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9tb2R1bGUuZ2xvYmFsc1tpbmRl
eF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSkgewotICAgICAgICBtX2Vycm9yTWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdCB0byBzdG9yZSB0byBpbW11dGFibGUgZ2xvYmFs
LiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZ2xvYmFscy5zaXplKCksICJzZXRfZ2xvYmFsICIsIGlu
ZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBsaW1pdCBpcyAiLCBtX21vZHVsZS5nbG9iYWxzLnNp
emUoKSk7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX21vZHVsZS5nbG9iYWxzW2luZGV4
XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlLCAic2V0X2dsb2JhbCAiLCBpbmRleCwg
IiBpcyBpbW11dGFibGUiKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGdsb2JhbFR5cGUgPSBtX21v
ZHVsZS5nbG9iYWxzW2luZGV4XS50eXBlOwogICAgIEFTU0VSVChpc1ZhbHVlVHlwZShnbG9iYWxU
eXBlKSk7Ci0gICAgaWYgKGdsb2JhbFR5cGUgPT0gdmFsdWUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0IHRvIHNldCBnbG9i
YWwgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyhnbG9iYWxUeXBlKSwgIiB3aXRoIGEgdmFyaWFibGUg
b2YgdHlwZTogIiwgdG9TdHJpbmcodmFsdWUpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihnbG9iYWxUeXBlICE9IHZhbHVlLCAic2V0X2dsb2JhbCAiLCBp
bmRleCwgIiB3aXRoIHR5cGUgIiwgZ2xvYmFsVHlwZSwgIiB3aXRoIGEgdmFyaWFibGUgb2YgdHlw
ZSAiLCB2YWx1ZSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogVmFsaWRhdGU6OkNvbnRyb2xUeXBl
IFZhbGlkYXRlOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKQEAgLTIyOCwyMDkgKzIxNiwxMjkg
QEAgVmFsaWRhdGU6OkNvbnRyb2xUeXBlIFZhbGlkYXRlOjphZGRMb29wKFR5cGUgc2lnbmF0dXJl
KQogICAgIHJldHVybiBDb250cm9sRGF0YShCbG9ja1R5cGU6Okxvb3AsIHNpZ25hdHVyZSk7CiB9
CiAKLWJvb2wgVmFsaWRhdGU6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4
cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY29uZGl0aW9uICE9IEkzMikg
ewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gdXNl
ICIsIHRvU3RyaW5nKGNvbmRpdGlvbiksICIgYXMgdGhlIGNvbmRpdGlvbiBmb3Igc2VsZWN0Iik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobm9uWmVybyAhPSB6ZXJv
KSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiUmVzdWx0IHR5cGVzIG9m
IHNlbGVjdCBkb24ndCBtYXRjaC4gR290OiAiLCB0b1N0cmluZyhub25aZXJvKSwgIiBhbmQgIiwg
dG9TdHJpbmcoemVybykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCisgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gSTMyLCAic2VsZWN0IGNvbmRpdGlvbiBt
dXN0IGJlIGkzMiwgZ290ICIsIGNvbmRpdGlvbik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
Rihub25aZXJvICE9IHplcm8sICJzZWxlY3QgcmVzdWx0IHR5cGVzIG11c3QgbWF0Y2gsIGdvdCAi
LCBub25aZXJvLCAiIGFuZCAiLCB6ZXJvKTsKICAgICByZXN1bHQgPSB6ZXJvOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZElmKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQp
CithdXRvIFZhbGlkYXRlOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2ln
bmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY29uZGl0
aW9uICE9IEkzMikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVt
cHRpbmcgdG8gdXNlICIsIHRvU3RyaW5nKGNvbmRpdGlvbiksICIgYXMgdGhlIGNvbmRpdGlvbiBm
b3IgYW4gaWYgYmxvY2siKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJMzIsICJpZiBjb25kaXRpb24gbXVzdCBi
ZSBpMzIsIGdvdCAiLCBjb25kaXRpb24pOwogICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKEJsb2Nr
VHlwZTo6SWYsIHNpZ25hdHVyZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsK
IH0KIAotYm9vbCBWYWxpZGF0ZTo6YWRkRWxzZShDb250cm9sVHlwZSYgY3VycmVudCwgY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIHZhbHVlcykKK2F1dG8gVmFsaWRhdGU6OmFkZEVsc2UoQ29udHJvbFR5
cGUmIGN1cnJlbnQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMpIC0+IFJlc3VsdAogewot
ICAgIGlmICghdW5pZnkodmFsdWVzLCBjdXJyZW50KSkgewotICAgICAgICBBU1NFUlQoZXJyb3JN
ZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCisgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyh1bmlmeSh2YWx1ZXMsIGN1cnJlbnQpKTsKICAgICByZXR1cm4gYWRk
RWxzZVRvVW5yZWFjaGFibGUoY3VycmVudCk7CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEVsc2VU
b1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBjdXJyZW50KQorYXV0byBWYWxpZGF0ZTo6YWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGN1cnJlbnQpIC0+IFJlc3VsdAogewotICAgIGlm
IChjdXJyZW50LnR5cGUoKSAhPSBCbG9ja1R5cGU6OklmKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0byBhZGQgZWxzZSBibG9jayB0byBzb21ldGhp
bmcgb3RoZXIgdGhhbiBhbiBpZiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCisg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjdXJyZW50LnR5cGUoKSAhPSBCbG9ja1R5cGU6Oklm
LCAiZWxzZSBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGFuIGlmIik7CiAgICAgY3VycmVudCA9
IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6QmxvY2ssIGN1cnJlbnQuc2lnbmF0dXJlKCkpOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZFJl
dHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKQorYXV0byBWYWxpZGF0ZTo6
YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFJlc3VsdAog
ewogICAgIGlmIChtX3JldHVyblR5cGUgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPT0gMSk7
Ci0KLSAgICBpZiAobV9yZXR1cm5UeXBlID09IHJldHVyblZhbHVlc1swXSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcg
dG8gYWRkIHJldHVybiB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHJldHVyblZhbHVlc1swXSksICIg
YnV0IGZ1bmN0aW9uIGV4cGVjdHMgcmV0dXJuIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobV9yZXR1
cm5UeXBlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
bV9yZXR1cm5UeXBlICE9IHJldHVyblZhbHVlc1swXSwgInJldHVybiB0eXBlICIsIHJldHVyblZh
bHVlc1swXSwgIiBkb2Vzbid0IG1hdGNoIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgIiwgbV9yZXR1
cm5UeXBlKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjpjaGVja0JyYW5j
aFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrKQorYXV0byBWYWxpZGF0ZTo6Y2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbFR5cGUm
IHRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUmVzdWx0
CiAgICAgewogICAgICAgICBpZiAodGFyZ2V0LnR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAg
ICAgaWYgKHRhcmdldC5zaWduYXR1cmUoKSA9PSBWb2lkKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgaWYgKCFleHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYnJhbmNoIHRvIGJs
b2NrIHdpdGggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcodGFyZ2V0LnNpZ25hdHVyZSgpKSwg
IiBidXQgdGhlIHN0YWNrIHdhcyBlbXB0eSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIGlmICh0YXJnZXQu
c2lnbmF0dXJlKCkgPT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGV4cHJlc3Npb25TdGFjay5p
c0VtcHR5KCksICJicmFuY2ggdG8gYmxvY2sgb24gZW1wdHkgZXhwcmVzc2lvbiBzdGFjayIpOwor
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhcmdldC5zaWduYXR1cmUoKSAhPSBleHBy
ZXNzaW9uU3RhY2subGFzdCgpLCAiYnJhbmNoJ3Mgc3RhY2sgdHlwZSBkb2Vzbid0IG1hdGNoIGJs
b2NrJ3MgdHlwZSIpOwogCi0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0
ZW1wdGluZyB0byBicmFuY2ggdG8gYmxvY2sgd2l0aCBleHBlY3RlZCB0eXBlOiAiLCB0b1N0cmlu
Zyh0YXJnZXQuc2lnbmF0dXJlKCkpLCAiIGJ1dCBzdGFjayBoYXMgdHlwZTogIiwgdG9TdHJpbmco
dGFyZ2V0LnNpZ25hdHVyZSgpKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYg
dGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBz
dGFjaykKK2F1dG8gVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBzdGFjaykgLT4gUmVz
dWx0CiB7CiAgICAgLy8gVm9pZCBtZWFucyB0aGlzIGlzIGFuIHVuY29uZGl0aW9uYWwgYnJhbmNo
LgotICAgIGlmIChjb25kaXRpb24gIT0gVm9pZCAmJiBjb25kaXRpb24gIT0gSTMyKSB7Ci0gICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0byBhZGQgYSBjb25k
aXRpb25hbCBicmFuY2ggd2l0aCBjb25kaXRpb24gdHlwZTogIiwgdG9TdHJpbmcoY29uZGl0aW9u
KSwgIiBidXQgZXhwZWN0ZWQgaTMyLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gVm9pZCAmJiBjb25kaXRp
b24gIT0gSTMyLCAiY29uZGl0aW9uYWwgYnJhbmNoIHdpdGggbm9uLWkzMiBjb25kaXRpb24gIiwg
Y29uZGl0aW9uKTsKICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQodGFyZ2V0LCBzdGFjayk7
CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVs
dFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK2F1dG8gVmFs
aWRhdGU6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxD
b250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGNv
bmRpdGlvbiAhPSBJMzIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJB
dHRlbXB0aW5nIHRvIGFkZCBhIGJyX3RhYmxlIHdpdGggY29uZGl0aW9uIHR5cGU6ICIsIHRvU3Ry
aW5nKGNvbmRpdGlvbiksICIgYnV0IGV4cGVjdGVkIGkzMi4iKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJMzIs
ICJicl90YWJsZSB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNvbmRpdGlvbik7CiAKLSAgICBm
b3IgKGF1dG8gdGFyZ2V0IDogdGFyZ2V0cykgewotICAgICAgICBpZiAoZGVmYXVsdFRhcmdldC5z
aWduYXR1cmUoKSAhPSB0YXJnZXQtPnNpZ25hdHVyZSgpKSB7Ci0gICAgICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIGEgYnJfdGFibGUgd2l0aCBk
aWZmZXJlbnQgZXhwZWN0ZWQgdHlwZXMuIERlZmF1bHQgdGFyZ2V0IGhhcyB0eXBlOiAiLCB0b1N0
cmluZyhkZWZhdWx0VGFyZ2V0LnNpZ25hdHVyZSgpKSwgIiBidXQgY2FzZSBoYXMgdHlwZTogIiwg
dG9TdHJpbmcodGFyZ2V0LT5zaWduYXR1cmUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoYXV0byB0YXJnZXQgOiB0YXJnZXRzKQorICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQuc2lnbmF0dXJlKCkgIT0g
dGFyZ2V0LT5zaWduYXR1cmUoKSwgImJyX3RhYmxlIHRhcmdldCB0eXBlIG1pc21hdGNoIik7CiAK
ICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCwgZXhwcmVzc2lvblN0
YWNrKTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwg
RXhwcmVzc2lvbkxpc3QmIHN0YWNrKQorYXV0byBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVu
dHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKSAtPiBSZXN1bHQKIHsKICAgICBDb250
cm9sRGF0YSYgYmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBpZiAoYmxvY2suc2lnbmF0
dXJlKCkgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIXN0YWNrLnNp
emUoKSkgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkJsb2NrIGZhbGx0
aG91Z2ggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0dXJlKCkpLCAiIGJ1
dCB0aGUgc3RhY2sgd2FzIGVtcHR5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0gc3RhY2su
bGFzdCgpKSB7Ci0gICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChi
bG9jay5zaWduYXR1cmUoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKHN0YWNrLmlzRW1wdHkoKSwgInR5cGVkIGJsb2NrIGZhbGxzIHRo
cm91Z2ggb24gZW1wdHkgc3RhY2siKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGJsb2Nr
LnNpZ25hdHVyZSgpICE9IHN0YWNrLmxhc3QoKSwgImJsb2NrIGZhbGx0aHJvdWdoIGRvZXNuJ3Qg
bWF0Y2ggaXRzIGRlY2xhcmVkIHR5cGUiKTsKIAotICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0
cmluZygiQmxvY2sgZmFsbHRocm91Z2ggaGFzIGV4cGVjdGVkIHR5cGU6ICIsIHRvU3RyaW5nKGJs
b2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgcHJvZHVjZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2su
c2lnbmF0dXJlKCkpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2suYXBwZW5kKGJsb2NrLnNpZ25hdHVyZSgpKTsKKyAgICByZXR1cm4geyB9Owog
fQogCi1ib29sIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50
cnkpCithdXRvIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50
cnkpIC0+IFJlc3VsdAogewogICAgIGlmIChlbnRyeS5jb250cm9sRGF0YS5zaWduYXR1cmUoKSAh
PSBWb2lkKQogICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZW50
cnkuY29udHJvbERhdGEuc2lnbmF0dXJlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZENhbGwodW5zaWduZWQsIGNvbnN0IFNpZ25h
dHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29u
c3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewotICAgIGlmIChzaWduYXR1
cmUtPmFyZ3VtZW50cy5zaXplKCkgIT0gYXJncy5zaXplKCkpIHsKLSAgICAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiQXJpdHkgbWlzbWF0Y2ggaW4g
Y2FsbCwgZXhwZWN0ZWQ6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihzaWduYXR1
cmUtPmFyZ3VtZW50cy5zaXplKCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGJ1dCBnb3Q6
ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmdzLnNpemUoKSk7Ci0gICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoc2lnbmF0dXJlLT5hcmd1bWVu
dHMuc2l6ZSgpICE9IGFyZ3Muc2l6ZSgpLCAiYXJpdHkgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIs
IGFyZ3Muc2l6ZSgpLCAiIGFyZ3VtZW50cywgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLT5hcmd1bWVu
dHMuc2l6ZSgpKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChhcmdzW2ldICE9IHNpZ25hdHVyZS0+YXJndW1lbnRzW2ldKSB7
Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkV4cGVjdGVkIGFyZ3Vt
ZW50IHR5cGU6ICIsIHRvU3RyaW5nKHNpZ25hdHVyZS0+YXJndW1lbnRzW2ldKSwgIiBkb2VzIG5v
dCBtYXRjaCBwYXNzZWQgYXJndW1lbnQgdHlwZTogIiwgdG9TdHJpbmcoYXJnc1tpXSkpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0sICJhcmd1bWVudCB0eXBl
IG1pc21hdGNoIGluIGNhbGwsIGdvdCAiLCBhcmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1
cmUtPmFyZ3VtZW50c1tpXSk7CiAKICAgICByZXN1bHQgPSBzaWduYXR1cmUtPnJldHVyblR5cGU7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBWYWxp
ZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBS
ZXN1bHQKIHsKICAgICBjb25zdCBhdXRvIGFyZ3VtZW50Q291bnQgPSBzaWduYXR1cmUtPmFyZ3Vt
ZW50cy5zaXplKCk7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gYXJncy5zaXplKCkgLSAxKSB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IkFyaXR5IG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGV4cGVjdGVkOiAiKTsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmROdW1iZXIoc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIiBidXQgZ290OiAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRO
dW1iZXIoYXJncy5zaXplKCkpOwotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGJ1aWxkZXIudG9T
dHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKGFyZ3VtZW50Q291bnQgIT0gYXJncy5zaXplKCkgLSAxLCAiYXJpdHkgbWlzbWF0
Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZ3Muc2l6ZSgpIC0gMSwgIiBhcmd1bWVudHMs
IGV4cGVjdGVkICIsIGFyZ3VtZW50Q291bnQpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewotICAgICAgICBpZiAoYXJnc1tpXSAhPSBzaWduYXR1
cmUtPmFyZ3VtZW50c1tpXSkgewotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3Ry
aW5nKCJFeHBlY3RlZCBhcmd1bWVudCB0eXBlOiAiLCB0b1N0cmluZyhzaWduYXR1cmUtPmFyZ3Vt
ZW50c1tpXSksICIgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIGFyZ3VtZW50IHR5cGU6ICIsIHRvU3Ry
aW5nKGFyZ3NbaV0pKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQorICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1bWVu
dHNbaV0sICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBh
cmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUtPmFyZ3VtZW50c1tpXSk7CisKKyAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3MubGFzdCgpICE9IEkzMiwgIm5vbi1pMzIgY2FsbF9p
bmRpcmVjdCBpbmRleCAiLCBhcmdzLmxhc3QoKSk7CiAKLSAgICBpZiAoYXJncy5sYXN0KCkgIT0g
STMyKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQgY2Fs
bF9pbmRpcmVjdCB0YXJnZXQgaW5kZXggdG8gaGF2ZSB0eXBlOiBpMzIgYnV0IGdvdCB0eXBlOiAi
LCB0b1N0cmluZyhhcmdzLmxhc3QoKSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAogICAgIHJlc3VsdCA9IHNpZ25hdHVyZS0+cmV0dXJuVHlwZTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjp1bmlmeShjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlwZSYgYmxvY2spCithdXRvIFZhbGlk
YXRlOjp1bmlmeShjb25zdCBFeHByZXNzaW9uTGlzdCYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlw
ZSYgYmxvY2spIC0+IFJlc3VsdAogewogICAgIEFTU0VSVCh2YWx1ZXMuc2l6ZSgpIDw9IDEpOwog
ICAgIGlmIChibG9jay5zaWduYXR1cmUoKSA9PSBWb2lkKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmICghdmFsdWVzLnNpemUoKSkgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1h
a2VTdHJpbmcoIkJsb2NrIGhhcyBub24tdm9pZCBzaWduYXR1cmUgYnV0IGhhcyBubyBzdGFjayBl
bnRyaWVzIG9uIGV4aXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGlmICh2YWx1ZXNbMF0gPT0gYmxvY2suc2lnbmF0dXJlKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWVzLmlz
RW1wdHkoKSwgIm5vbi12b2lkIGJsb2NrIGVuZHMgd2l0aCBhbiBlbXB0eSBzdGFjayIpOworICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWVzWzBdICE9IGJsb2NrLnNpZ25hdHVyZSgpLCAi
Y29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUiKTsKIAotICAgIG1fZXJy
b3JNZXNzYWdlID0gbWFrZVN0cmluZygiRXhwZWN0ZWQgY29udHJvbCBmbG93IHRvIHJldHVybiB2
YWx1ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgZ290
IHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcodmFsdWVzWzBdKSk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpCkBAIC00MzksMjEgKzM0
NywxMiBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+Jiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmKQogICAgIC8vIFRoaW5rIG9mIHRoaXMgYXMgcGVuYW5jZSBm
b3IgdGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2FnZXMuCiB9CiAKLVN0cmluZyB2YWxpZGF0ZUZ1
bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0
dXJlKiBzaWduYXR1cmUsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rp
b25JbmRleFNwYWNlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlKQorRXhwZWN0ZWQ8
dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6
ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IEltbXV0YWJsZUZ1
bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlKQogewogICAgIFZhbGlkYXRlIGNvbnRleHQoc2lnbmF0dXJlLT5yZXR1cm5U
eXBlLCBtb2R1bGUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3IoY29u
dGV4dCwgc291cmNlLCBsZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtb2R1
bGUpOwotCi0gICAgaWYgKCF2YWxpZGF0b3IucGFyc2UoKSkgewotICAgICAgICAvLyBGSVhNRTog
YWRkIGJldHRlciBsb2NhdGlvbiBpbmZvcm1hdGlvbiBoZXJlLiBzZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyODgKLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBuZXZlciBub3QgaGF2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIHdlIHJldHVybiBmYWxzZS4K
LSAgICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0MzU0Ci0gICAgICAgIGlmIChjb250ZXh0LmVycm9yTWVzc2FnZSgpLmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuICJVbmtub3duIGVycm9yIjsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQu
ZXJyb3JNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFModmFsaWRhdG9yLnBhcnNlKCkpOworICAgIHJldHVybiB7IH07
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21WYWxpZGF0ZS5oCmluZGV4IDg2MWZkNzIuLjFmMDA0MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCkBAIC0yOCwxMCArMjgsMTEgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLVN0
cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25h
dHVyZSosIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oY29u
c3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgSW1tdXRhYmxlRnVu
Y3Rpb25JbmRleFNwYWNlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5w
eQppbmRleCA4MDRjYjIxLi41OTZkODU5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5l
c0hlYWRlci5weQpAQCAtMTg5LDEwICsxODksMTAgQEAgZGVmIGdlbmVyYXRlU2ltcGxlQ29kZShv
cCk6CiAgICAgYXJncyA9IFsiRXhwcmVzc2lvblR5cGUgYXJnIiArIHN0cihwYXJhbSkgZm9yIHBh
cmFtIGluIHJhbmdlKGxlbihvcGNvZGVbInBhcmFtZXRlciJdKSldCiAgICAgYXJncy5hcHBlbmQo
IkV4cHJlc3Npb25UeXBlJiByZXN1bHQiKQogICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5hbWUi
XSkgKyAiPigiICsgIiwgIi5qb2luKGFyZ3MpICsgIiIiKQordGVtcGxhdGU8PiBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6IiIiICsgd2FzbS50b0NwcChvcFsibmFtZSJdKSArICI+
KCIgKyAiLCAiLmpvaW4oYXJncykgKyAiIiIpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICIiIiArIGdl
bmVyYXRlQjNDb2RlKG9wY29kZSwgYjNvcCkgKyAiIiI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KICIiIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKaW5kZXggMDBkMjgzOC4uMTVjMWYzYyAxMDA3NTUK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5w
eQpAQCAtMTUxLDcgKzE1MSw3IEBAIGlubGluZSBCMzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5cGUp
CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAogI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0
eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOwotaW5saW5lIGNvbnN0IGNoYXIqIHRv
U3RyaW5nKFR5cGUgdHlwZSkKK2lubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKFR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBGT1JfRUFDSF9XQVNNX1RZUEUoQ1JFQVRF
X0NBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9n
ZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkKaW5kZXggMjVhMzkyZS4uNTJiNjZi
MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFs
aWRhdGVJbmxpbmVzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dl
bmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQpAQCAtNjAsMTUgKzYwLDEzIEBAIGRl
ZiB0b0NwcChuYW1lKToKIGRlZiB1bmFyeU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tu
YW1lXQogICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYm9vbCBWYWxpZGF0ZTo6YWRkT3A8T3BU
eXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTw+IGF1dG8gVmFsaWRhdGU6OmFkZE9wPE9wVHlw
ZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAodmFsdWUgIT0gIiIiICsgY3Bw
VHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUgKyAiIiIgZXhwZWN0cyB0aGUgdmFsdWUgdG8gYmUg
b2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsg
IiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyh2YWx1ZSkpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWSh2YWx1ZSAhPSAi
IiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICByZXR1cm4g
VW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIi
ICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CiAKICAgICByZXN1bHQgPSAiIiIg
KyBjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KICIiIgogCkBAIC03NiwyMCArNzQsMTYgQEAgdGVtcGxhdGU8PiBib29s
IFZhbGlkYXRlOjphZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNz
aW9uVHlwZQogZGVmIGJpbmFyeU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQog
ICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYm9vbCBWYWxpZGF0ZTo6YWRkT3A8T3BUeXBlOjoi
IiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTw+IGF1dG8gVmFsaWRh
dGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBS
ZXN1bHQKIHsKLSAgICBpZiAobGVmdCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsw
XSkgKyAiIiIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsg
bmFtZSArICIiIiBleHBlY3RzIHRoZSBsZWZ0IHZhbHVlIHRvIGJlIG9mIHR5cGU6ICIsIHRvU3Ry
aW5nKCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIiksICIgYnV0IGdvdCBh
IHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobGVmdCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShsZWZ0ICE9ICIiIiArIGNwcFR5cGUob3BbInBh
cmFtZXRlciJdWzBdKSArICIiIikpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1
bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIGxlZnQg
dmFsdWUgdHlwZSBtaXNtYXRjaCIpOwogCi0gICAgaWYgKHJpZ2h0ICE9ICIiIiArIGNwcFR5cGUo
b3BbInBhcmFtZXRlciJdWzFdKSArICIiIikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1h
a2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIiIGV4cGVjdHMgdGhlIHJpZ2h0IHZhbHVlIHRvIGJl
IG9mIHR5cGU6ICIsIHRvU3RyaW5nKCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSAr
ICIiIiksICIgYnV0IGdvdCBhIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcocmlnaHQpKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkocmlnaHQgIT0g
IiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSkKKyAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIi
IiArIG5hbWUgKyAiIiIgcmlnaHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAgcmVzdWx0
ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiB7IH07CiB9CiAiIiIKIApAQCAtOTcsMTMgKzkxLDExIEBAIGRlZiBsb2Fk
TWFjcm8obmFtZSk6CiAgICAgb3AgPSBvcGNvZGVzW25hbWVdCiAgICAgcmV0dXJuICIiIgogICAg
IGNhc2UgTG9hZE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI6IHsKLSAgICAgICAgaWYg
KHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0g
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIi
IGV4cGVjdHMgdGhlIHBvaW50ZXIgdG8gYmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3Bw
VHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0
eXBlOiAiLCB0b1N0cmluZyhwb2ludGVyKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
VHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsg
IiIiIHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAgICAgIHJlc3VsdCA9ICIiIiArIGNw
cFR5cGUob3BbInJldHVybiJdWzBdKSArICIiIjsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfSIiIgogCiAKQEAgLTExMSwxNyArMTAzLDEzIEBAIGRlZiBz
dG9yZU1hY3JvKG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQogICAgIHJldHVybiAiIiIK
ICAgICBjYXNlIFN0b3JlT3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAgICAg
ICBpZiAocG9pbnRlciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIp
IHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUg
KyAiIiIgZXhwZWN0cyB0aGUgcG9pbnRlciB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIg
KyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3
aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHBvaW50ZXIpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoVU5MSUtFTFkocG9pbnRlciAhPSAiIiIgKyBjcHBU
eXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5h
bWUgKyAiIiIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7CiAKLSAgICAgICAgaWYgKHZhbHVlICE9
ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKSArICIiIikgewotICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFtZSArICIiIiBleHBlY3RzIHRo
ZSB2YWx1ZSB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygiIiIgKyBjcHBUeXBlKG9wWyJwYXJh
bWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1ZSB3aXRoIHR5cGU6ICIsIHRvU3Ry
aW5nKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKFVOTElLRUxZKHZhbHVlICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFd
KSArICIiIikpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJv
clR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1p
c21hdGNoIik7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfSIiIgogCiAKQEAgLTE0MSwyMCArMTI5LDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKICIiIiArIHVuYXJ5U3BlY2lhbGl6YXRpb25zICsgYmluYXJ5U3BlY2lhbGl6
YXRpb25zICsgIiIiCiAKLWJvb2wgVmFsaWRhdGU6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3QpCithdXRv
IFZhbGlkYXRlOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIWhh
c01lbW9yeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFVOTElLRUxZKCFoYXNN
ZW1vcnkoKSkpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlw
ZT4oInZhbGlkYXRpb24gZmFpbGVkOiBsb2FkIGluc3RydWN0aW9uIHdpdGhvdXQgbWVtb3J5Iik7
CiAKICAgICBzd2l0Y2ggKG9wKSB7CiAiIiIgKyBsb2FkQ2FzZXMgKyAiIiIKICAgICB9CiB9CiAK
LWJvb2wgVmFsaWRhdGU6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QpCithdXRvIFZhbGlkYXRlOjpzdG9y
ZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIWhhc01lbW9yeSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFVOTElLRUxZKCFoYXNNZW1vcnkoKSkpCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24g
ZmFpbGVkOiBzdG9yZSBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwogCiAgICAgc3dpdGNo
IChvcCkgewogIiIiICsgc3RvcmVDYXNlcyArICIiIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggZjAwYTI2MS4uOWQ5NTkyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgICAgIHN3aXRj
aCAoaW1wb3J0LmtpbmQpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6RnVuY3Rpb246
IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAgICAg
ICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0OgogICAgICAgICAgICAgLy8gaS4g
SWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2Uo
RXhlY1N0YXRlKiBleAogICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0
cy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0
ZXJuYWw6OlRhYmxlOiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTog
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBz
aG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KICAgICAgICAgICAg
IC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6CiAgICAgICAgICAgICBoYXNU
YWJsZUltcG9ydCA9IHRydWU7CkBAIC0xNjAsNyArMTYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0
ZSogZXgKICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVt
b3J5OiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKICAgICAg
ICAgICAgIC8vIDYuIElmIGkgaXMgYSBtZW1vcnkgaW1wb3J0OgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQg
YnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVj
U3RhdGUqIGV4CiAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBtZW1vcnkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bDo6R2xvYmFsOiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
ICAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgogICAgICAgICAgICAg
Ly8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBUeXBlRXJyb3Iu
CiAgICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2lu
ZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAppbmRleCA0MjJkNWZjLi4yOTIyOTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0x
MDUsNyArMTA1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3Rh
dGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLmV4cG9ydHMpIHsKICAgICAgICAgSlNWYWx1ZSBl
eHBvcnRlZFZhbHVlOwogICAgICAgICBzd2l0Y2ggKGV4cC5raW5kKSB7Ci0gICAgICAgIGNhc2Ug
V2FzbTo6RXh0ZXJuYWw6OkZ1bmN0aW9uOiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewogICAgICAgICAgICAgLy8gMS4gSWYgZSBpcyBhIGNsb3N1cmUgYzoK
ICAgICAgICAgICAgIC8vICAgaS4gSWYgdGhlcmUgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhv
dGljIE9iamVjdCBmdW5jIGluIGZ1bmNzIHdob3NlIGZ1bmMuW1tDbG9zdXJlXV0gZXF1YWxzIGMs
IHRoZW4gcmV0dXJuIGZ1bmMuCiAgICAgICAgICAgICAvLyAgIGlpLiAoTm90ZTogQXQgbW9zdCBv
bmUgd3JhcHBlciBpcyBjcmVhdGVkIGZvciBhbnkgY2xvc3VyZSwgc28gZnVuYyBpcyB1bmlxdWUs
IGV2ZW4gaWYgdGhlcmUgYXJlIG11bHRpcGxlIG9jY3VycmFuY2VzIGluIHRoZSBsaXN0LiBNb3Jl
b3ZlciwgaWYgdGhlIGl0ZW0gd2FzIGFuIGltcG9ydCB0aGF0IGlzIGFscmVhZHkgYW4gRXhwb3J0
ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCwgdGhlbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2Jq
ZWN0IHdpbGwgYmUgZm91bmQuIEZvciBpbXBvcnRzIHRoYXQgYXJlIHJlZ3VsYXIgSlMgZnVuY3Rp
b25zLCBhIG5ldyB3cmFwcGVyIHdpbGwgYmUgY3JlYXRlZC4pCkBAIC0xMjYsNyArMTI2LDcgQEAg
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24u
c2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZTogeworICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsS2luZDo6VGFibGU6IHsKICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGd1
YXJhbnRlZWQgYnkgbW9kdWxlIHZlcmlmaWNhdGlvbi4KICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluc3RhbmNlLT50YWJsZSgpKTsgCiAgICAgICAgICAgICBBU1NFUlQoZXhwLmtpbmRJbmRl
eCA9PSAwKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAg
ICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGluc3RhbmNlLT50YWJsZSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7
CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKICAgICAgICAgICAg
IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgbW9kdWxlIHZlcmlmaWNhdGlvbi4KICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RhbmNlLT5tZW1vcnkoKSk7IAogICAgICAgICAg
ICAgQVNTRVJUKGV4cC5raW5kSW5kZXggPT0gMCk7CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3QKICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBpbnN0YW5jZS0+
bWVtb3J5KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsOjpHbG9iYWw6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewogICAgICAgICAgICAgLy8gQXNzZXJ0OiB0aGUgZ2xvYmFsIGlzIGltbXV0YWJs
ZSBieSBNVlAgdmFsaWRhdGlvbiBjb25zdHJhaW50LgogICAgICAgICAgICAgY29uc3QgV2FzbTo6
R2xvYmFsJiBnbG9iYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2V4cC5raW5kSW5kZXhd
OwogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6
SW1tdXRhYmxlKTsKLS0gCjIuMTAuMQoK
</data>
<flag name="review"
          id="319556"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="319502"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297228</attachid>
            <date>2016-12-15 15:05:56 -0800</date>
            <delta_ts>2016-12-15 15:42:56 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-Improve-parse-errors.patch</filename>
            <type>text/plain</type>
            <size>193591</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyNGEyY2U3MjNlODhkNzZhMDhhMTc4YzQ2NTlhZjYxY2M3MDkzOGIwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDEwOjEzOjQ1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gSW1wcm92
ZSBwYXJzZSBlcnJvcnMKCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMjggKwogSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzICAg
ICAgICAgICAgICAgICAgICAgfCAgMjUgKy0KIEpTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVy
cm9yLmpzICAgICAgICAgICAgICAgIHwgIDYzICstCiBKU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxl
LmpzICAgICAgICAgICAgICAgICAgICAgICB8IDEwMSArKy0tCiBKU1Rlc3RzL3dhc20vanMtYXBp
L3Rlc3RfRGF0YS5qcyAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogSlNUZXN0cy93YXNtL2pz
LWFwaS90ZXN0X1N0YXJ0LmpzICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIEpTVGVzdHMvd2Fz
bS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMgICAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICB8ICA4MCArKysKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgMjIxICsr
Ky0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggICAg
IHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggICAgICAg
ICAgICB8ICA2NyArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oICAgIHwgNDQ5ICsrKysrKy0tLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAgICAgfCA2MzkgKysrKysrKystLS0tLS0tLS0tLS0tCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggICAgICB8ICA1MiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oICAgICAgICAgICAgfCAg
OTIgKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAg
ICB8ICAzNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggICAg
ICAgICAgfCAgNDUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5j
cHAgICAgICAgIHwgMzQ3ICsrKystLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVmFsaWRhdGUuaCAgICAgICAgICB8ICAgMyArLQogLi4uL3dhc20vZ2VuZXJhdGVXYXNtQjNJ
UkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkgfCAgIDQgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93
YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSAgIHwgICAyICstCiAuLi4vd2FzbS9nZW5lcmF0
ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkgICAgICB8ICA2MCArLQogLi4uL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCAgICAgfCAgIDggKy0KIC4uLi93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAgICAgICAgIHwgICA4ICstCiAyNCBm
aWxlcyBjaGFuZ2VkLCAxMDM5IGluc2VydGlvbnMoKyksIDEzMDIgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBiYzg1
YTQ1Li5iNzM4YTUyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDE2LTEyLTE1ICBKRiBCYXN0aWVuICA8amZi
YXN0aWVuQGFwcGxlLmNvbT4KIAorICAgICAgICBXZWJBc3NlbWJseTogaW1wcm92ZSBjb21waWxh
dGlvbiBlcnJvciBtZXNzYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzOTE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisK
KyAgICAgICAgVXBkYXRlIGVycm9yIG1lc3NhZ2VzIGluIHRoZXNlIHRlc3RzLgorICAgICAgICBV
c2UgdGhlIGFzc2VydC50aHJvd3MgZmFjaWxpdHkgaW4gbWFueSBvZiB0aGVtIHdoaWNoIHdlcmVu
J3QgYWxyZWFkeS4KKworICAgICAgICAqIHdhc20vanMtYXBpL2VsZW1lbnQuanM6CisgICAgICAg
IChhc3NlcnQudGhyb3dzLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUuYnVpbGRlci5XZWJBc3NlbWJs
eSk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9nbG9i
YWwtZXJyb3IuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dzLm5ldy5XZWJBc3NlbWJseS5Nb2R1
bGUuYmluKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAobmV3Lk51bWJlcik6
CisgICAgICAgICogd2FzbS9qcy1hcGkvdGFibGUuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dz
Lm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUuYnVpbGRlci5XZWJBc3NlbWJseSk6CisgICAgICAgIChh
c3NlcnQudGhyb3dzKToKKyAgICAgICAgKGFzc2VydEJhZFRhYmxlSW1wb3J0KToKKyAgICAgICAg
KiB3YXNtL2pzLWFwaS90ZXN0X0RhdGEuanM6CisgICAgICAgIChEYXRhU2VjdGlvbldpdGhvdXRN
ZW1vcnkpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfU3RhcnQuanM6CisgICAgICAgIChJ
bnZhbGlkU3RhcnRGdW5jdGlvbkluZGV4KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X2Jh
c2ljX2FwaS5qczoKKyAgICAgICAgKGNvbnN0LmMuaW4uY29uc3RydWN0b3JQcm9wZXJ0aWVzLnN3
aXRjaCk6CisKKzIwMTYtMTItMTUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgor
CiAgICAgICAgIFdlYkFzc2VtYmx5IEFQSTogaW1wcm92ZSBkYXRhIHNlY3Rpb24gZXJyb3JzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MzMKIApk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzIGIvSlNUZXN0cy93YXNt
L2pzLWFwaS9lbGVtZW50LmpzCmluZGV4IDRjODFjM2UuLjE2MGZmZDAgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2Vs
ZW1lbnQuanMKQEAgLTEsMjEgKzEsNiBAQAogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRl
ci5qcyc7CiBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIAotZnVuY3Rp
b24gYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIHN0cikgewotICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBsZXQgdGhyZXcgPSBmYWxzZTsKLSAgICB0cnkg
ewotICAgICAgICBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Ci0gICAgfSBjYXRjaChlKSB7
Ci0gICAgICAgIHRocmV3ID0gdHJ1ZTsKLSAgICAgICAgYXNzZXJ0LnRydXRoeShlLnRvU3RyaW5n
KCkuaW5kZXhPZihzdHIpICE9PSAtMSk7Ci0gICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5j
ZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7Ci0gICAgfQotICAgIGFzc2VydC50cnV0aHko
dGhyZXcpOwotfQotCi1jb25zdCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyA9ICJjb3VsZG4ndCBw
YXJzZSBzZWN0aW9uIEVsZW1lbnQiOwotCiB7CiAgICAgLy8gQmFkIGVsZW1lbnQgc2VjdGlvbiBi
L2Mgbm8gVGFibGUgc2VjdGlvbi9pbXBvcnQuCiAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWls
ZGVyKCkKQEAgLTMzLDcgKzE4LDcgQEAgY29uc3QgYmFkRWxlbWVudFNlY3Rpb25TdHJpbmcgPSAi
Y291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBFbGVtZW50IjsKICAgICAgICAgICAgIC5FbmQoKQogICAg
ICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkRWxlbWVudFNl
Y3Rpb25TdHJpbmcpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIyIC8gNDE6IEVs
ZW1lbnQgc2VjdGlvbiBleHBlY3RzIGEgVGFibGUgdG8gYmUgcHJlc2VudCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsK
IH0KIAogewpAQCAtNTYsNyArNDEsNyBAQCBjb25zdCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyA9
ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIEVsZW1lbnQiOwogICAgICAgICAgICAgLkVuZCgpCiAg
ICAgICAgIC5FbmQoKTsKIAotICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRFbGVtZW50
U2VjdGlvblN0cmluZyk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzAgLyA0Nzog
RWxlbWVudCBzZWN0aW9uIGNhbiBvbmx5IGhhdmUgb25lIFRhYmxlIGZvciBub3cgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Iik7CiB9CiAKIHsKQEAgLTc5LDcgKzY0LDcgQEAgY29uc3QgYmFkRWxlbWVudFNlY3Rpb25TdHJp
bmcgPSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBFbGVtZW50IjsKICAgICAgICAgICAgIC5FbmQo
KQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkRWxl
bWVudFNlY3Rpb25TdHJpbmcpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM1IC8g
NDk6IEVsZW1lbnQgc2VjdGlvbidzIDB0aCBlbGVtZW50IHdyaXRlcyB0byBpbmRleCAyMCB3aGlj
aCBleGNlZWRzIHRoZSBtYXhpbXVtIDIwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC0xMDIsNyAr
ODcsNyBAQCBjb25zdCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBz
ZWN0aW9uIEVsZW1lbnQiOwogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKIAot
ICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyk7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzUgLyA0ODogRWxlbWVudCBzZWN0aW9uJ3Mg
MHRoIGVsZW1lbnQgd3JpdGVzIHRvIGluZGV4IDIwIHdoaWNoIGV4Y2VlZHMgdGhlIG1heGltdW0g
MjAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTEyNSw3ICsxMTAsNyBAQCBjb25zdCBiYWRFbGVt
ZW50U2VjdGlvblN0cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIEVsZW1lbnQiOwogICAg
ICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKIAotICAgIGFzc2VydEJhZEJpbmFyeShi
dWlsZGVyLCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMzggLyA1MDogRWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAydGggaW5k
ZXggaXMgMSB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mIDEg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIik7CiB9CiAKIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xv
YmFsLWVycm9yLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKaW5kZXgg
NmZhMzVlYy4uMmE3ZDhjMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwt
ZXJyb3IuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKQEAgLTIz
LDE0ICsyMyw3IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogICAgIGNv
bnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAg
bGV0IHBhc3NlZCA9IGZhbHNlOwotICAgIHRyeSB7Ci0gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgIGlmIChlLm1lc3NhZ2UgPT09ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIEdsb2JhbDogR2xv
YmFsIGRlY2xhcmF0aW9ucyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4u
Z2V0KCkpJykiKQotICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgYXNzZXJ0
LnRydXRoeShwYXNzZWQpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gNTk6IGdldF9nbG9iYWwncyBpbmRl
eCAwIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBpbXBvcnRzIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIApAQCAtNTksMTQgKzUyLDcgQEAg
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAgICAgY29uc3QgYmluID0gYnVp
bGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBsZXQgcGFzc2VkID0g
ZmFsc2U7Ci0gICAgdHJ5IHsKLSAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4uZ2V0KCkpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUubWVz
c2FnZSA9PT0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gSW1wb3J0OiBJbXBvcnQgZGVjbGFyYXRp
b25zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpCi0g
ICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwotICAgIH0KLSAgICBhc3NlcnQudHJ1dGh5KHBhc3Nl
ZCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMzIgLyA3NjogTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0
ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9
CiAKIHsKQEAgLTkxLDE0ICs3Nyw3IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIu
anMnOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJp
bSgpOwogCi0gICAgbGV0IHBhc3NlZCA9IGZhbHNlOwotICAgIHRyeSB7Ci0gICAgICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKTsKLSAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9u
IEV4cG9ydDogRXhwb3J0cyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4u
Z2V0KCkpJykiKQotICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgYXNzZXJ0
LnRydXRoeShwYXNzZWQpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDUxIC8gNTk6IDF0aCBFeHBvcnQgaXNuJ3Qg
aW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogewpAQCAtMTI0LDE0ICsxMDMsNyBAQCBpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldl
YkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGxldCBwYXNzZWQgPSBmYWxzZTsK
LSAgICB0cnkgewotICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbi5nZXQoKSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBpZiAoZS5tZXNzYWdlID09
PSAiQXR0ZW1wdCB0byBzdG9yZSB0byBpbW11dGFibGUgZ2xvYmFsLiAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKQotICAgICAgICAgICAgcGFzc2VkID0g
dHJ1ZTsKLSAgICB9Ci0gICAgYXNzZXJ0LnRydXRoeShwYXNzZWQpOworICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCB2YWxpZGF0ZTogc2V0X2ds
b2JhbCAwIGlzIGltbXV0YWJsZSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4uZ2V0KCkpJykiKTsKIH0KIAogCkBAIC0xNTgsMTQgKzEzMCw3IEBAIGltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAgbGV0IHBhc3NlZCA9IGZhbHNlOwotICAgIHRy
eSB7Ci0gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdl
dCgpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09ICJBdHRl
bXB0IHRvIHVzZSB1bmtub3duIGdsb2JhbC4gKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluLmdldCgpKScpIikKLSAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7Ci0gICAgfQot
ICAgIGFzc2VydC50cnV0aHkocGFzc2VkKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6IHNldF9nbG9iYWwgMSBvZiB1bmtu
b3duIGdsb2JhbCwgbGltaXQgaXMgMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogCkBAIC0xOTEsMTQgKzE1Niw3IEBAIGltcG9ydCBCdWls
ZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAgbGV0IHBhc3NlZCA9IGZhbHNlOwotICAg
IHRyeSB7Ci0gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
LmdldCgpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09ICJB
dHRlbXB0IHRvIHNldCBnbG9iYWwgd2l0aCB0eXBlOiBGMzIgd2l0aCBhIHZhcmlhYmxlIG9mIHR5
cGU6IEkzMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJyki
KQotICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgYXNzZXJ0LnRydXRoeShw
YXNzZWQpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCB2YWxpZGF0ZTogc2V0X2dsb2JhbCAwIHdpdGggdHlwZSBGMzIgd2l0aCBhIHZhcmlh
YmxlIG9mIHR5cGUgSTMyIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5n
ZXQoKSknKSIpOwogfQogCiBmb3IgKCBsZXQgaW1wIG9mIFt1bmRlZmluZWQsIG51bGwsIHt9LCAo
KSA9PiB7fSwgIm51bWJlciIsIG5ldyBOdW1iZXIoNCldKSB7CkBAIC0yMjYsMTMgKzE4NCw2IEBA
IGZvciAoIGxldCBpbXAgb2YgW3VuZGVmaW5lZCwgbnVsbCwge30sICgpID0+IHt9LCAibnVtYmVy
IiwgbmV3IE51bWJlcig0KV0pIHsKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5
KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGxldCBwYXNzZWQgPSBmYWxzZTsKICAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSk7Ci0gICAgdHJ5IHsK
LSAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZ2xvYmFs
OiBpbXAgfSB9KTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09
ICJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsgZ2xvYmFsOiBpbXAgfSB9KScpIikKLSAg
ICAgICAgICAgIHBhc3NlZCA9IHRydWU7Ci0gICAgfQotICAgIGFzc2VydC50cnV0aHkocGFzc2Vk
KTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHsgaW1wOiB7IGdsb2JhbDogaW1wIH0gfSksIFR5cGVFcnJvciwgImltcG9ydGVkIGdsb2Jh
bCBtdXN0IGJlIGEgbnVtYmVyIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IGltcDogeyBnbG9iYWw6IGltcCB9IH0pJykiKTsKIH0KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpz
CmluZGV4IDM3NTg3ZDAuLmRiNzM0MjEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkv
dGFibGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwpAQCAtMSwxNSArMSw2
IEBACiBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIGltcG9ydCAqIGFzIGFz
c2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogCi1jb25zdCBiYWRUYWJsZVN0cmluZyA9ICJjb3Vs
ZG4ndCBwYXJzZSBzZWN0aW9uIFRhYmxlOiBJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQgb3Ro
ZXIgdGFibGVzIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiknKSI7Ci1j
b25zdCBiYWRJbXBvcnRTdHJpbmcgPSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBJbXBvcnQ6IElt
cG9ydCBkZWNsYXJhdGlvbnMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KScpIjsKLWNvbnN0IGJhZEV4cG9ydFN0cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIEV4
cG9ydDogRXhwb3J0cyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJyki
OwotCi1mdW5jdGlvbiBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgc3RyKSB7Ci0gICAgY29uc3Qg
YmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
IHN0cik7Ci19Ci0KIHsKICAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQogICAgICAg
ICAuVHlwZSgpLkVuZCgpCkBAIC0yMiw3ICsxMyw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZEJpbmFy
eShidWlsZGVyLCBzdHIpIHsKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAg
ICAgLkVuZCgpOwotICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRUYWJsZVN0cmluZyk7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzQgLyA0MTogVGFibGUgc2VjdGlvbiBj
YW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIHRhYmxlIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7
CkBAIC0zNSw3ICsyNiw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBzdHIp
IHsKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAg
IGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRUYWJsZVN0cmluZyk7CisgICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMTcgLyAyODogVGFibGUgY291bnQgb2YgMiBpcyBpbnZhbGlkLCBv
bmx5IDEgaXMgYWxsb3dlZCBmb3Igbm93IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC01MSw3ICs0
Miw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBzdHIpIHsKICAgICAgICAg
ICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApCiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAg
LkVuZCgpOwotICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCAiY2FsbF9pbmRpcmVjdCBpcyBv
bmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDQgLyA3OiBjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxl
IGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTcwLDcgKzYx
LDcgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIHN0cikgewogICAgICAgICAg
ICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMSkKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAu
RW5kKCk7Ci0gICAgYXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsICJjYWxsX2luZGlyZWN0ICdyZXNl
cnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNiAvIDc6IGNh
bGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIp
OwogfQogCiB7CkBAIC04Myw3ICs3NCw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZEJpbmFyeShidWls
ZGVyLCBzdHIpIHsKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVu
ZCgpOwotICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRFeHBvcnRTdHJpbmcpOworICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzIC8gMjY6IGNhbid0IGV4cG9ydCBhIG5vbi1l
eGlzdGVudCBUYWJsZSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0KIAogewpAQCAtOTksMTAgKzkwLDEwIEBAIGZ1
bmN0aW9uIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBzdHIpIHsKICAgICAgICAgLkVuZCgpCiAg
ICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydEJhZEJpbmFyeShidWls
ZGVyLCBiYWRFeHBvcnRTdHJpbmcpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMw
IC8gMzM6IGNhbid0IGV4cG9ydCBUYWJsZSAxIG9ubHkgemVyby1pbmRleCBUYWJsZSBpcyBjdXJy
ZW50bHkgc3VwcG9ydGVkIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCi1mdW5jdGlvbiBhc3NlcnRCYWRUYWJs
ZSh0YWJsZURlc2NyaXB0aW9uKSB7CitmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZSh0YWJsZURlc2Ny
aXB0aW9uLCBtZXNzYWdlKSB7CiAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKICAg
ICAgICAgLlR5cGUoKS5FbmQoKQogICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQpAQCAtMTExLDEw
ICsxMDIsMTAgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGUodGFibGVEZXNjcmlwdGlvbikgewog
ICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNz
ZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZFRhYmxlU3RyaW5nKTsKKyAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBtZXNzYWdlKTsKIH0KIAotZnVuY3Rpb24gYXNz
ZXJ0QmFkVGFibGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbikgeworZnVuY3Rpb24gYXNzZXJ0QmFk
VGFibGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgIGNvbnN0IGJ1aWxk
ZXIgPSBuZXcgQnVpbGRlcigpCiAgICAgICAgIC5UeXBlKCkuRW5kKCkKICAgICAgICAgLkltcG9y
dCgpCkBAIC0xMjMsMjkgKzExNCw1MyBAQCBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZUltcG9ydCh0
YWJsZURlc2NyaXB0aW9uKSB7CiAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCiAgICAgICAgIC5D
b2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRJ
bXBvcnRTdHJpbmcpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsIG1lc3NhZ2UpOwogfQogCiB7CiAgICAgbGV0IGJhZERlc2NyaXB0aW9ucyA9IFsKLSAgICAg
ICAge2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTMyIn0sCi0gICAgICAgIHtpbml0aWFsOiAxMCwg
ZWxlbWVudDogImYzMiJ9LAotICAgICAgICB7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmNjQifSwK
LSAgICAgICAge2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTY0In0sCi0gICAgICAgIHtpbml0aWFs
OiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJpMzIifSwKLSAgICAgICAge2luaXRpYWw6IDEw
LCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImYzMiJ9LAotICAgICAgICB7aW5pdGlhbDogMTAsIG1h
eGltdW06IDIwLCBlbGVtZW50OiAiZjY0In0sCi0gICAgICAgIHtpbml0aWFsOiAxMCwgbWF4aW11
bTogMjAsIGVsZW1lbnQ6ICJpNjQifSwKKyAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDog
ImkzMiJ9LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
NiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CisgICAgICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmMzIifSwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICBbe2luaXRpYWw6IDEw
LCBlbGVtZW50OiAiZjY0In0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiXSwKKyAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImk2NCJ9LAorICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJs
ZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgIFt7
aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTMyIn0sCisgICAgICAgICAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hv
dWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgW3tpbml0aWFsOiAx
MCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJmMzIifSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNTogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55
ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVt
OiAyMCwgZWxlbWVudDogImY2NCJ9LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIl0sCisgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVt
ZW50OiAiaTY0In0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiXSwKIAotICAgICAgICB7aW5pdGlhbDogMTAsIG1heGltdW06IDksIGVsZW1lbnQ6ICJhbnlm
dW5jIn0sCi0gICAgICAgIHtpbml0aWFsOiAxLCBtYXhpbXVtOiAwLCBlbGVtZW50OiAiYW55ZnVu
YyJ9LAotICAgICAgICB7aW5pdGlhbDogMioqMzIgLSAxLCBtYXhpbXVtOiAyKiozMiAtIDIsIGVs
ZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgIHtpbml0aWFsOiAyKiozMSwgZWxlbWVudDogImFu
eWZ1bmMifSwKKyAgICAgICAgW3tpbml0aWFsOiAxMCwgbWF4aW11bTogOSwgZWxlbWVudDogImFu
eWZ1bmMifSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDIxIC8gMjQ6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9m
IDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDM1OiBy
ZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBn
cmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgW3tpbml0aWFs
OiAxLCBtYXhpbXVtOiAwLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAorICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjEgLyAyNDogcmVzaXphYmxlIGxpbWl0
cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRz
IG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzNTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiXSwKKyAgICAgICAgW3tpbml0aWFsOiAyKiozMiAtIDEsIG1heGltdW06IDIqKjMyIC0g
MiwgZWxlbWVudDogImFueWZ1bmMifSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI5IC8gMzI6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlh
bCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhp
bXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDM3IC8gNDM6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5p
dGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBt
YXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgIFt7aW5pdGlhbDogMioqMzEs
IGVsZW1lbnQ6ICJhbnlmdW5jIn0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAy
MTQ3NDgzNjQ4IGlzIGludmFsaWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICBdOwogCiAg
ICAgZm9yIChjb25zdCBkIG9mIGJhZERlc2NyaXB0aW9ucykgewotICAgICAgICBhc3NlcnRCYWRU
YWJsZShkKTsKLSAgICAgICAgYXNzZXJ0QmFkVGFibGVJbXBvcnQoZCk7CisgICAgICAgIGFzc2Vy
dEJhZFRhYmxlKGRbMF0sIGRbMV0pOworICAgICAgICBhc3NlcnRCYWRUYWJsZUltcG9ydChkWzBd
LCBkWzJdKTsKICAgICB9CiB9CiAKQEAgLTE1OSw3ICsxNzQsNyBAQCBmdW5jdGlvbiBhc3NlcnRC
YWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uKSB7CiAgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydEJhZEJpbmFy
eShidWlsZGVyLCBiYWRJbXBvcnRTdHJpbmcpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3Nl
bWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDM5IC8gNDg6IFRhYmxlIHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMg
YSB0YWJsZSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0KIAogCkBAIC0xNzMsMjMgKzE4OCwxNSBAQCBmdW5jdGlv
biBhc3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQogICAgICAgICAgICAgLkNvZGUoKQogICAgICAgICAgICAgLkVuZCgp
OwotCi0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwogICAgICAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7Ci0gICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
aW1wOiB7dGFibGV9fSk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIGFzc2Vy
dC5lcShlLnRvU3RyaW5nKCksIG1lc3NhZ2UpOwotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworICAgICAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJs
ZX19KSwgVHlwZUVycm9yLCBtZXNzYWdlKTsKICAgICB9CiAKICAgICBjb25zdCBiYWRUYWJsZXMg
PSBbCi0gICAgICAgIFt7aW5pdGlhbDogMTAwLCBtYXhpbXVtOjEwMCwgZWxlbWVudDoiYW55ZnVu
YyJ9LCBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6MTAwLCBlbGVtZW50OiAiYW55ZnVu
YyJ9KSwgIlR5cGVFcnJvcjogVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScg
YnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIl0sCi0gICAgICAgIFt7aW5pdGlh
bDogMTAwLCBtYXhpbXVtOjEwMCwgZWxlbWVudDoiYW55ZnVuYyJ9LCBuZXcgV2ViQXNzZW1ibHku
VGFibGUoe2luaXRpYWw6MTAwLCBtYXhpbXVtOjEwMSwgZWxlbWVudDogImFueWZ1bmMifSksICJU
eXBlRXJyb3I6IEltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBt
b2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciXSwKLSAgICAgICAgW3tpbml0aWFsOiAxMDAsIGVs
ZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOjEwLCBlbGVt
ZW50OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjogVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdp
bml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCJdLAotICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVt
ZW50OiJhbnlmdW5jIn0sIG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDo5LCBlbGVtZW50
OiAiYW55ZnVuYyJ9KSwgIlR5cGVFcnJvcjogVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0
aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCJdLAorICAgICAgICBbe2luaXRpYWw6IDEwMCwgbWF4aW11
bToxMDAsIGVsZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFs
OjEwMCwgZWxlbWVudDogImFueWZ1bmMifSksICJUYWJsZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBh
ICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiXSwKKyAgICAg
ICAgW3tpbml0aWFsOiAxMDAsIG1heGltdW06MTAwLCBlbGVtZW50OiJhbnlmdW5jIn0sIG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDoxMDAsIG1heGltdW06MTAxLCBlbGVtZW50OiAiYW55
ZnVuYyJ9KSwgIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBt
b2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciXSwKKyAgICAgICAgW3tpbml0aWFsOiAxMDAsIGVs
ZW1lbnQ6ImFueWZ1bmMifSwgbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOjEwLCBlbGVt
ZW50OiAiYW55ZnVuYyJ9KSwgIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhh
dCBpcyB0b28gc21hbGwiXSwKKyAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDoiYW55ZnVu
YyJ9LCBuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6OSwgZWxlbWVudDogImFueWZ1bmMi
fSksICJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxs
Il0sCiAgICAgXTsKICAgICBmb3IgKGNvbnN0IFtkLCB0LCBtXSBvZiBiYWRUYWJsZXMpIHsKICAg
ICAgICAgYXNzZXJ0QmFkVGFibGVJbnN0YW5jZShkLCB0LCBtKTsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0Rh
dGEuanMKaW5kZXggN2ViY2U5NS4uN2MxZmExOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pz
LWFwaS90ZXN0X0RhdGEuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMK
QEAgLTUyLDcgKzUyLDcgQEAgY29uc3QgYXNzZXJ0TWVtb3J5QWxsWmVybyA9IG1lbW9yeSA9PiB7
CiAgICAgICAgICAgLlNlZ21lbnQoWzB4ZmZdKS5PZmZzZXQoMCkuRW5kKCkKICAgICAgICAgLkVu
ZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBh
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCBgY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBEYXRhOiBEYXRhIHNlZ21l
bnRzIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiknKWApOworICAgIGFz
c2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDEzIC8gMjA6IERhdGEgc2VjdGlvbiBjYW5ub3QgZXhpc3Qgd2l0aG91dCBhIE1lbW9yeSBzZWN0
aW9uIG9yIEltcG9ydCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJylg
KTsKIH0pKCk7CiAKIChmdW5jdGlvbiBFbXB0eURhdGFTZWN0aW9uV2l0aG91dE1lbW9yeSgpIHsK
QEAgLTYyLDcgKzYyLDcgQEAgY29uc3QgYXNzZXJ0TWVtb3J5QWxsWmVybyA9IG1lbW9yeSA9PiB7
CiAgICAgICAgICAgLlNlZ21lbnQoW10pLk9mZnNldCgwKS5FbmQoKQogICAgICAgICAuRW5kKCk7
CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsIGBjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIERhdGE6IERhdGEgc2VnbWVudHMg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpYCk7CisgICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTMg
LyAxOTogRGF0YSBzZWN0aW9uIGNhbm5vdCBleGlzdCB3aXRob3V0IGEgTWVtb3J5IHNlY3Rpb24g
b3IgSW1wb3J0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiknKWApOwog
fSkoKTsKIAogKGZ1bmN0aW9uIERhdGFTZWN0aW9uQmlnZ2VyVGhhbk1lbW9yeSgpIHsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdGVzdF9TdGFydC5qcwppbmRleCAwNWQ2MTlkLi5iNDQ0NTY5IDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFw
aS90ZXN0X1N0YXJ0LmpzCkBAIC0zMSw1ICszMSw1IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4u
L0J1aWxkZXIuanMnOwogICAgICAgICAuU3RhcnQoMCkuRW5kKCkgLy8gSW52YWxpZCBpbmRleC4K
ICAgICAgICAgLkNvZGUoKS5FbmQoKTsKICAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
biksIEVycm9yLCBgY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBTdGFydDogU3RhcnQgZnVuY3Rpb24g
ZGVjbGFyYXRpb24gKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpYCk7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIEVy
cm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNyAvIDIwOiBT
dGFydCBpbmRleCAwIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJylgKTsKIH0pKCk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90
ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCA3YjNkMTM3Li5mYTQxMWQ1IDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1h
cGkvdGVzdF9iYXNpY19hcGkuanMKQEAgLTU1LDcgKzU1LDcgQEAgZm9yIChjb25zdCBjIGluIGNv
bnN0cnVjdG9yUHJvcGVydGllcykgewogICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHlbY10oaW52YWxpZCksIFR5cGVFcnJvciwgYGZpcnN0IGFyZ3VtZW50IHRv
IFdlYkFzc2VtYmx5Lk1vZHVsZSBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJh
eUJ1ZmZlciAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpJylgKTsKICAg
ICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgW25ldyBBcnJheUJ1ZmZlcigpLCBuZXcgRGF0YVZp
ZXcobmV3IEFycmF5QnVmZmVyKCkpLCBuZXcgSW50OEFycmF5KCksIG5ldyBVaW50OEFycmF5KCks
IG5ldyBVaW50OENsYW1wZWRBcnJheSgpLCBuZXcgSW50MTZBcnJheSgpLCBuZXcgVWludDE2QXJy
YXkoKSwgbmV3IEludDMyQXJyYXkoKSwgbmV3IFVpbnQzMkFycmF5KCksIG5ldyBGbG9hdDMyQXJy
YXkoKSwgbmV3IEZsb2F0NjRBcnJheSgpXSkKICAgICAgICAgICAgIC8vIEZJWE1FIHRoZSBmb2xs
b3dpbmcgc2hvdWxkIGJlIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvci4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzc2OAotICAgICAgICAgICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3IsIGBNb2R1bGUgaXMgMCBi
eXRlcywgZXhwZWN0ZWQgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5W2NdKGJ1ZmZlciknKWApOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcg
V2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDAgLyAwOiBleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCA4IGJ5
dGVzIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKScpYCk7CiAgICAgICAg
IGFzc2VydC5pbnN0YW5jZW9mKG5ldyBXZWJBc3NlbWJseVtjXShlbXB0eU1vZHVsZUFycmF5KSwg
V2ViQXNzZW1ibHkuTW9kdWxlKTsKICAgICAgICAgLy8gRklYTUUgdGVzdCBuZXV0ZXJlZCBUeXBl
ZEFycmF5IGFuZCBUeXBlZEFycmF5Vmlldy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mzg5OQogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGI3ZTNkNmIuLmU5NmNiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDg1IEBACiAyMDE2LTEyLTE1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAor
ICAgICAgICBXZWJBc3NlbWJseTogaW1wcm92ZSBjb21waWxhdGlvbiBlcnJvciBtZXNzYWdlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgVGhlIGVycm9yIGhh
bmRsaW5nIG1lc3NhZ2VzIHdlcmUgdW5kZXJ3aGVsbWluZyBiZWNhdXNlIG1vc3QKKyAgICAgICAg
bG9jYXRpb25zIG1lcmVseSByZXR1cm5lZCBgZmFsc2VgIG9uIGZhaWx1cmUuIFRoaXMgcGF0Y2gg
dXNlcworICAgICAgICBzdGQ6OmV4cGVjdGVkIHRvIGRlbm90ZSB0aGF0IGZhaWx1cmUgaXNuJ3Qg
ZXhwZWN0ZWQuIERvaW5nIHRoaXMKKyAgICAgICAgbWFrZXMgaXQgYWxtb3N0IGltcG9zc2libGUg
dG8gbWVzcyB1cCB0aGUgY29kZTogZWl0aGVyIGEgZnVuY3Rpb24KKyAgICAgICAgcmV0dXJucyBh
IHJlc3VsdCAob3IgYSBwYXJ0aWFsIHJlc3VsdCBmb3IgaW50ZXJuYWwgaGVscGVycykgb3IgYW4K
KyAgICAgICAgZXJyb3IuIFdlJ3JlIG5vdCBzeW5jaHJvbml6aW5nIHRoZSBlcnJvciBzdHJpbmcg
d2l0aCB0aGUgbV9mYWlsZWQKKyAgICAgICAgYm9vbCBhbnltb3JlLCBhbmQgdGhlIGNhbGxlciB3
aWxsIGFib3J0IGlmIHRoZXkgdHJ5IHRvIGdldCBhCisgICAgICAgIHJlc3VsdCBidXQgdGhlIG91
dGNvbWUgd2FzIGFuIGVycm9yLgorCisgICAgICAgIFRoaXMgYWxzbyBzaG9ydGVucyB0aGUgY29k
ZSBzaWduaWZpY2FudGx5IHVzaW5nIG1hY3Jvcywgd2hpbGUgYWxzbworICAgICAgICBqdWRpY2lv
dXNseSBwcmV2ZW50aW5nIGlubGluaW5nIG9mIGVycm9yIGhhbmRsaW5nIGNvZGUgYW5kIGJpYXNp
bmcKKyAgICAgICAgdG93YXJkcyBzdWNjZXNzIHVzaW5nIFVOTElLRUxZLiBUaGlzIG1lYW5zIHRo
YXQgdGhlIGdlbmVyYXRlZCBjb2RlCisgICAgICAgIHNob3VsZCBiZSBtb3JlIGVmZmljaWVudCAo
bm8gc3RyaW5nIGZvcm1hdHRpbmcgb24gc3VjY2VzcywgYW5kCisgICAgICAgIHJlZ2FsbG9jIGNh
biBhdm9pZCB0aGVzZSB1bmxpa2VseSBwYXRocykuCisKKyAgICAgICAgVGhlIHBhdGNoIGFkZHMg
YSBmZXcgbWlzc2luZyBjaGVja3MgYXMgd2VsbCwgZXNwZWNpYWxseSByZWxhdGVkIHRvCisgICAg
ICAgIGNvdW50IGxpbWl0cyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKworICAgICAg
ICBBcyBhIGZvbGxvdy11cCBJJ2QgbGlrZSB0byBpbXByb3ZlIFdURjo6bWFrZVN0cmluZyBmdXJ0
aGVyLCBzbyBpdAorICAgICAgICBkb2VzIGNvZXJjaW9ucyB0byBzdHJpbmcgYW5kIHVuZGVyc3Rh
bmRzIEFETCBhcyBJIGRpZCBpbiB0aGlzCisgICAgICAgIHBhdGNoLgorCisgICAgICAgICogd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmZhaWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAg
ICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQu
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNWYWxpZEV4dGVybmFsS2luZCk6CisgICAgICAgIChK
U0M6Oldhc206Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RmFpbHVyZUhlbHBlcjo6bWFrZVN0cmluZyk6CisgICAgICAgIChKU0M6
Oldhc206OlBhcnNlcjo6ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNjZXNz
VHlwZT46OlBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNjZXNzVHlwZT46
OmNvbnN1bWVDaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vzc1R5
cGU+Ojpjb25zdW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1Y2Nlc3NU
eXBlPjo6Y29uc3VtZVVURjhTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3Vj
Y2Vzc1R5cGU+OjpwYXJzZVZhclVJbnQzMik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxT
dWNjZXNzVHlwZT46OnBhcnNlVmFyVUludDY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2Vy
PFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYXJJbnQzMik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjxTdWNjZXNzVHlwZT46OnBhcnNlVmFySW50NjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJz
ZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVVJbnQzMik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjxTdWNjZXNzVHlwZT46OnBhcnNlVUludDY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2Vy
PFN1Y2Nlc3NUeXBlPjo6cGFyc2VVSW50OCk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxT
dWNjZXNzVHlwZT46OnBhcnNlSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNj
ZXNzVHlwZT46OnBhcnNlVUludDcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZVZhclVJbnQxKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1Y2Nl
c3NUeXBlPjo6cGFyc2VSZXN1bHRUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1
Y2Nlc3NUeXBlPjo6cGFyc2VWYWx1ZVR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8
U3VjY2Vzc1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZCk6CisgICAgICAgICogd2FzbS9XYXNtUGxh
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJ1bik6CisgICAgICAgICogd2FzbS9X
YXNtU2VjdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNWYWxpZFNlY3Rpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjp2YWxpZGF0ZU9yZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFr
ZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpWYWxpZGF0ZTo6ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjph
ZGRVbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OnZhbGlkYXRlRnVuY3Rpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbVZhbGlkYXRlLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdh
c21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKiB3YXNtL2dlbmVyYXRl
V2FzbU9wc0hlYWRlci5weToKKyAgICAgICAgKiB3YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5s
aW5lc0hlYWRlci5weToKKyAgICAgICAgKGxvYWRNYWNybyk6CisgICAgICAgIChzdG9yZU1hY3Jv
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKworMjAxNi0xMi0xNSAgSkYgQmFzdGllbiAg
PGpmYmFzdGllbkBhcHBsZS5jb20+CisKICAgICAgICAgV2ViQXNzZW1ibHkgQVBJOiBpbXByb3Zl
IGRhdGEgc2VjdGlvbiBlcnJvcnMsIGluaXRpYWxpemUgYWZ0ZXIgRWxlbWVudAogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzMzCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA2OTQ4
ZjEyLi5mZDM3OWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCkBAIC0xMzcsNTMgKzEzNyw2NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IG51bGxwdHI7CiAK
KyAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CisgICAgdHlwZWRlZiBVbmV4cGVjdGVkVHlw
ZTxFcnJvclR5cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+IFJlc3VsdDsKKyAg
ICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJlc3VsdDsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50
IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0
cmluZyhBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5nOiAi
KSwgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKyNkZWZpbmUgV0FTTV9DT01QSUxFX0ZB
SUxfSUYoY29uZGl0aW9uLCAuLi4pIGRvIHsgXAorICAgICAgICBpZiAoVU5MSUtFTFkoY29uZGl0
aW9uKSkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FS
R1NfXyk7ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCiAgICAgQjNJUkdlbmVyYXRv
cihWTSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFs
RnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFi
bGVGdW5jdGlvbkluZGV4U3BhY2UmKTsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CiAKICAgICAvLyBM
b2NhbHMKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKIAogICAg
IC8vIEdsb2JhbHMKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSk7CiAKICAgICAvLyBNZW1vcnkKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExv
YWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3Rv
cmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxv
YWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKICAgICAvLyBCYXNpYyBvcGVyYXRvcnMK
ICAgICB0ZW1wbGF0ZTxPcFR5cGU+Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3Ao
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9u
WmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAgLy8gQ29udHJvbCBmbG93CiAgICAgQ29udHJv
bERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsKICAgICBD
b250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7
Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJv
bERhdGEmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xE
YXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCi0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9s
RGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMs
IENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJv
bEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBW
ZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRz
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9u
TGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwogCiAgICAgLy8gQ2FsbHMK
LSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4
LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5k
aXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgdm9pZCBhZGRVbnJlYWNoYWJsZSgpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwogCiAgICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBl
eHByZXNzaW9uU3RhY2spOwogCi0gICAgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYpIHsg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7IH0KLQogcHJpdmF0ZToKICAgICBFeHByZXNzaW9u
VHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBFeHByZXNzaW9uVHlwZSBl
bWl0TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWlu
dDMyX3Qgb2Zmc2V0KTsKQEAgLTI5MSwyNCArMzA0LDIyIEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9y
Ojp6ZXJvRm9yVHlwZShUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHplcm9WYWx1ZTsKIH0KIAotYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KQorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgaWYgKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9s
b2NhbHMuc2l6ZSgpICsgY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9D
T01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShtX2xvY2Fscy5zaXpl
KCkgKyBjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIG1fbG9jYWxzLnNpemUo
KSArIGNvdW50LCAiIGxvY2FscyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKICAgICAgICAgVmFyaWFibGUqIGxvY2FsID0gbV9wcm9jLmFkZFZhcmlhYmxl
KHRvQjNUeXBlKHR5cGUpKTsKICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2Fs
KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3By
b2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCB6ZXJvRm9yVHlwZSh0eXBlKSk7CiAgICAgfQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6
YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgdHlwZXMpCithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwotICAgIGlmICghbV9sb2NhbHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHR5cGVzLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBXQVNNX0NPTVBJTEVfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHR5
cGVzLnNpemUoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHR5cGVzLnNpemUoKSwg
IiBhcmd1bWVudHMiKTsKIAogICAgIG1fbG9jYWxzLmdyb3codHlwZXMuc2l6ZSgpKTsKICAgICB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5sb2FkQXJndW1lbnRzKHR5cGVzLCBtX3Byb2MsIG1fY3Vy
cmVudEJsb2NrLCBPcmlnaW4oKSwKQEAgLTMxNyw0NSArMzI4LDQ2IEBAIGJvb2wgQjNJUkdlbmVy
YXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgdHlwZXMpCiAgICAgICAgICAg
ICBtX2xvY2Fsc1tpXSA9IGFyZ3VtZW50VmFyaWFibGU7CiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgYXJn
dW1lbnRWYXJpYWJsZSwgYXJndW1lbnQpOwogICAgICAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjpn
ZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwogICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBP
cmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKICAgICB1
bnJlYWNoYWJsZS0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgIGppdC5icmVha3BvaW50KCk7
CiAgICAgfSk7CiAgICAgdW5yZWFjaGFibGUtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworICAg
IHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKQorYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2Nh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgT3JpZ2luKCksIG1fbG9jYWxz
W2luZGV4XSwgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
LWJvb2wgQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1
ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKTsKICAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNU
eXBlKG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlKSwgT3JpZ2luKCksIGdsb2JhbHNBcnJheSwg
aW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpCithdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICBBU1NFUlQodG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGUpID09IHZhbHVlLT50
eXBlKCkpOwogICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBt
X2luc3RhbmNlVmFsdWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkp
OwogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3Rv
cmUsIE9yaWdpbigpLCB2YWx1ZSwgZ2xvYmFsc0FycmF5LCBpbmRleCAqIHNpemVvZihSZWdpc3Rl
cikpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIGlubGluZSBWYWx1
ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCkBA
IC00NjUsMTIgKzQ3NywxMiBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2Fk
T3AoTG9hZE9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvbgogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6bG9hZChMb2Fk
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
LCB1aW50MzJfdCBvZmZzZXQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMy
X3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHBvaW50ZXItPnR5cGUo
KSA9PSBJbnQzMik7CiAKICAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBPcmlnaW4oKSwgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3Ap
KSwgb2Zmc2V0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiBpbmxp
bmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKQEAgLTUyNywxOCArNTM5
LDE4IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBl
IG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9m
ZnNldCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMyKTsK
IAogICAgIGVtaXRTdG9yZU9wKG9wLCBPcmlnaW4oKSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50
ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZzZXQpOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRv
cjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9u
WmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVz
c2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgT3JpZ2luKCksIGNvbmRpdGlvbiwg
bm9uWmVybywgemVybyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAog
QjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQo
VHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkKQEAgLTU3Niw3ICs1ODgsNyBAQCBCM0lSR2VuZXJh
dG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQog
ICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29w
LCBjb250aW51YXRpb24sIGJvZHkpOwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1
bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
VHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBkbyBzb21lIGtpbmQgb2Ygc3RhY2sgcGFzc2lu
Zy4KIApAQCAtNTkxLDM1ICs2MDMsMzUgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYKIAogICAg
IG1fY3VycmVudEJsb2NrID0gdGFrZW47CiAgICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9j
LCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6
YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRT
dGFjaykKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1bHQpOwogICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4o
KSwgZGF0YS5jb250aW51YXRpb24pOwogICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShk
YXRhKTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250
cm9sRGF0YSYgZGF0YSkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUo
Q29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZGF0YS50
eXBlKCkgPT0gQmxvY2tUeXBlOjpJZik7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNp
YWw7CiAgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJu
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUoKSA8PSAxKTsKICAgICBpZiAocmV0dXJuVmFs
dWVzLnNpemUoKSkKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShtX3Byb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigpLCByZXR1cm5WYWx1ZXNbMF0pOwogICAgIGVs
c2UKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEIzOjpSZXR1cm4sIE9yaWdpbigpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwg
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFs
dWVzKQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVl
cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGlmIChkYXRhLnR5cGUoKSAhPSBCbG9ja1R5cGU6
Okxvb3ApCiAgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5y
ZXN1bHQpOwpAQCAtNjM3LDEwICs2NDksMTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRCcmFu
Y2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QKICAg
ICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9y
OjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJv
bERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFN3aXRj
aChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0
YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKICAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxv
Y2soZXhwcmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHQpOwpAQCAtNjUxLDEwICs2NjMs
MTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRhcmdldHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3
aXRjaENhc2UoaSwgRnJlcXVlbnRlZEJsb2NrKHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJh
bmNoKCkpKSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29s
IEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spCithdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRy
b2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwog
CkBAIC02NjYsNyArNjc4LDcgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9s
RW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWMKIH0KIAogCi1ib29s
IEIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkK
K2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVu
dHJ5KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5j
b250cm9sRGF0YTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOwpAQCAt
Njc5LDEwICs2OTEsMTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxl
KENvbnRyb2xFbnRyeSYgZW50cnkpCiAgICAgZm9yIChWYXJpYWJsZSogcmVzdWx0IDogZGF0YS5y
ZXN1bHQpCiAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3Jp
Z2luKCksIHJlc3VsdCkpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSA9PSBhcmdzLnNp
emUoKSk7CiAKQEAgLTcwNSwxMCArNzE3LDEwIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAg
ICAgQVNTRVJUKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSA9PSBhcmdzLnNpemUoKSk7CkBA
IC03NzksNyArNzkxLDcgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29u
c3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgICAgIH0p
OwogICAgICAgICB9KTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
IHZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFyaWFibGUqIHZhcmlhYmxlLCBFeHByZXNzaW9u
VHlwZSBzb3VyY2UpCkBAIC05MDcsMTUgKzkxOSwxNCBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENvbXBpbGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBXYXNtSW50ZXJuYWxG
dQogICAgIHJldHVybiBqc0VudHJ5cG9pbnQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50
ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3QgdWludDhfdCogZnVu
Y3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3Bh
Y2UsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBvcHRMZXZlbCkKK0V4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90
IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRh
YmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9
IHN0ZDo6bWFrZV91bmlxdWU8V2FzbUludGVybmFsRnVuY3Rpb24+KCk7CiAKICAgICBQcm9jZWR1
cmUgcHJvY2VkdXJlOwogICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2Vk
dXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4
U3BhY2UpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4
U3BhY2UsIGluZm8pOwotICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZXIucGFyc2UoKSk7CiAKICAgICBwcm9jZWR1cmUucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICB2
YWxpZGF0ZShwcm9jZWR1cmUsICJBZnRlciBwYXJzaW5nOlxuIik7CkBAIC05MjksMTMgKzk0MCwx
MyBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5kQ29tcGls
ZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bgogICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQu
Y29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvY2VkdXJl
LCBvcHRMZXZlbCk7CiAgICAgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICByZXN1bHQtPmpzVG9X
YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcih2bSwgKnJl
c3VsdCwgc2lnbmF0dXJlLCByZXN1bHQtPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2Rl
KCksIGluZm8ubWVtb3J5KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7CiB9CiAKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhlc2UgYXJlIHRoZSBvbmVzIHRv
byBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CiAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC05
NDQsMTEgKzk1NSwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZQogICAgIH0pOwogICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+
Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2
NCwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOwpAQCAtOTU3LDMzICs5NjgsMzMgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUK
ICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsK
IH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBv
cGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgcG9wY250IGluc3RydWN0aW9uIGlmIFNTRTQgaXMgYXZh
aWxhYmxlIGJ1dCB3ZSBkb24ndCBoYXZlIGNvZGUgdG8gZGV0ZWN0IFNTRTQgeWV0LgogICAgIC8v
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTM2MwogICAg
IHVpbnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0gW10gKGludDMyX3QgdmFsdWUpIC0+IHVp
bnQzMl90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh2YWx1ZSk7IH07CiAgICAgVmFsdWUq
IGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBvcGNvdW50KSk7CiAgICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMy
LCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJnKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBwb3BjbnQg
aW5zdHJ1Y3Rpb24gaWYgU1NFNCBpcyBhdmFpbGFibGUgYnV0IHdlIGRvbid0IGhhdmUgY29kZSB0
byBkZXRlY3QgU1NFNCB5ZXQuCiAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MzYzCiAgICAgdWludDY0X3QgKCpwb3Bjb3VudCkoaW50NjRfdCkg
PSBbXSAoaW50NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNv
dW50bGwodmFsdWUpOyB9OwogICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0
PHZvaWQqPihwb3Bjb3VudCkpOwogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwg
ZnVuY0FkZHJlc3MsIGFyZyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8PgotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgRG91YmxlLCBPcmlnaW4oKSk7CiAgICAgaWYgKGlzWDg2KCkpCkBAIC05OTksMTEg
KzEwMTAsMTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKICAgICB9KTsKICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEZsb2F0LCBPcmlnaW4oKSk7CiAgICAgaWYgKGlzWDg2KCkpCkBAIC0xMDE5LDExICsx
MDMwLDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uCiAgICAgfSk7CiAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50Owot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wg
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91
YmxlLCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNv
bWVSZWdpc3Rlcik7CkBAIC0xMDMyLDExICsxMDQzLDExIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsK
ICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCith
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEwNDUsMTEgKzEwNTYs
MTEgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgT3Jp
Z2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOwpAQCAtMTA1OCwxMSArMTA2OSwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiAgICAg
fSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1
bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
IHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBGbG9hdCwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTA3MSwxMSArMTA4MiwxMSBAQCBib29sIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVj
dHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7CiAgICAgVmFsdWUqIG1pbiA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4o
KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KSkpOwpAQCAtMTA5NCwxMSArMTEwNSwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQog
CiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1
ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCkpKTsKICAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0Pihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpOwpAQCAtMTExNywxMiArMTEyOCwx
MiBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19j
YXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCk7
CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVW
YWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgLTEuMCk7CkBAIC0xMTQxLDExICsxMTUyLDExIEBAIGJv
b2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApOwogICAgIFZhbHVl
KiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgLTEuMCk7CkBAIC0xMTY0LDExICsxMTc1LDExIEBAIGJvb2wgQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKICAgICByZXN1bHQgPSBwYXRjaHBvaW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIFZhbHVlKiBtYXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91
YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSk7CiAgICAgVmFsdWUqIG1pbiA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOwpA
QCAtMTE4NywxMSArMTE5OCwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwog
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0g
cGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSAqIC0yLjApOwogICAgIFZhbHVlKiBtaW4gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC0xLjApOwpAQCAtMTIyOSwx
MSArMTI0MCwxMSBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNV
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2lu
dDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1i
b29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIC1z
dGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsK
ICAgICBWYWx1ZSogbWluID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFs
dWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDY0X3Q+OjptaW4oKSkpOwpAQCAtMTI1MiwxMSArMTI2MywxMSBAQCBib29sIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeQogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7CiAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBWYWx1ZSogbWF4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKTsKICAgICBWYWx1ZSogbWluID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIC0xLjApOwpAQCAtMTI5NCw3ICsxMzA1LDcgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkK
ICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IGJhMTBhYTMuLmRmZTZhNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJWTS5oIgog
I2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogZXh0
ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwogCkBAIC0zNyw3ICszOCw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9yeUluZm9ybWF0aW9u
OwogCi1zdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5kQ29tcGls
ZShWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFj
ZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK0V4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJl
KiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgSW1tdXRhYmxlRnVuY3Rp
b25JbmRleFNwYWNlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBvcHRMZXZl
bCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggNGUwZWFmZC4uZTQ5YTg5MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtNjEsMzQgKzYxLDQ1IEBAIGlubGluZSBi
b29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCi1z
dHJ1Y3QgRXh0ZXJuYWwgewotICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgewotICAgICAgICAvLyBG
SVhNRSBhdXRvLWdlbmVyYXRlIHRoaXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjUyMzEKLSAgICAgICAgRnVuY3Rpb24gPSAwLAotICAgICAgICBUYWJsZSA9IDEs
Ci0gICAgICAgIE1lbW9yeSA9IDIsCi0gICAgICAgIEdsb2JhbCA9IDMsCi0gICAgfTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZChJbnQgdmFsKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoICh2YWwpIHsKLSAgICAgICAgY2FzZSBGdW5jdGlvbjoKLSAg
ICAgICAgY2FzZSBUYWJsZToKLSAgICAgICAgY2FzZSBNZW1vcnk6Ci0gICAgICAgIGNhc2UgR2xv
YmFsOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGljX2Fz
c2VydChGdW5jdGlvbiA9PSAwLCAiV2FzbSBuZWVkcyBGdW5jdGlvbiB0byBoYXZlIHRoZSB2YWx1
ZSAwIik7Ci0gICAgc3RhdGljX2Fzc2VydChUYWJsZSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJs
ZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7Ci0gICAgc3RhdGljX2Fzc2VydChNZW1vcnkgICA9PSAy
LCAiV2FzbSBuZWVkcyBNZW1vcnkgdG8gaGF2ZSB0aGUgdmFsdWUgMiIpOwotICAgIHN0YXRpY19h
c3NlcnQoR2xvYmFsICAgPT0gMywgIldhc20gbmVlZHMgR2xvYmFsIHRvIGhhdmUgdGhlIHZhbHVl
IDMiKTsKK2VudW0gY2xhc3MgRXh0ZXJuYWxLaW5kIDogdWludDhfdCB7CisgICAgLy8gRklYTUUg
YXV0by1nZW5lcmF0ZSB0aGlzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1MjMxCisgICAgRnVuY3Rpb24gPSAwLAorICAgIFRhYmxlID0gMSwKKyAgICBNZW1vcnkg
PSAyLAorICAgIEdsb2JhbCA9IDMsCiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CitzdGF0
aWMgYm9vbCBpc1ZhbGlkRXh0ZXJuYWxLaW5kKEludCB2YWwpCit7CisgICAgc3dpdGNoICh2YWwp
IHsKKyAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbik6Cisg
ICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6VGFibGUpOgorICAgIGNhc2Ug
c3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6Ok1lbW9yeSk6CisgICAgY2FzZSBzdGF0aWNf
Y2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6R2xvYmFsKToKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6RnVuY3Rpb24pID09IDAsICJXYXNt
IG5lZWRzIEZ1bmN0aW9uIHRvIGhhdmUgdGhlIHZhbHVlIDAiKTsKK3N0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVkcyBU
YWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7CitzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGlu
dD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhh
dmUgdGhlIHZhbHVlIDIiKTsKK3N0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5h
bEtpbmQ6Okdsb2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBHbG9iYWwgdG8gaGF2ZSB0aGUgdmFs
dWUgMyIpOworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoRXh0ZXJuYWxL
aW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
OkZ1bmN0aW9uOiByZXR1cm4gIkZ1bmN0aW9uIjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFi
bGU6IHJldHVybiAiVGFibGUiOworICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHJldHVy
biAiTWVtb3J5IjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6R2xvYmFsOiByZXR1cm4gIkdsb2Jh
bCI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
ICI/IjsKK30KKwogc3RydWN0IFNpZ25hdHVyZSB7CiAgICAgVHlwZSByZXR1cm5UeXBlOwogICAg
IFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7CkBAIC05NywxMyArMTA4LDEzIEBAIHN0cnVjdCBTaWdu
YXR1cmUgewogc3RydWN0IEltcG9ydCB7CiAgICAgSWRlbnRpZmllciBtb2R1bGU7CiAgICAgSWRl
bnRpZmllciBmaWVsZDsKLSAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIEV4dGVybmFsS2lu
ZCBraW5kOwogICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBv
ZiB0aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsKIAogc3RydWN0IEV4cG9ydCB7CiAgICAgSWRl
bnRpZmllciBmaWVsZDsKLSAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIEV4dGVybmFsS2lu
ZCBraW5kOwogICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBv
ZiB0aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCBhODdjMzVmLi43ODRhOGM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAt
MzksNyArMzksNyBAQCBlbnVtIGNsYXNzIEJsb2NrVHlwZSB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250ZXh0PgotY2xhc3MgRnVuY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFyc2VyIHsKK2Ns
YXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjx2b2lkPiB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHByZXNzaW9uVHlwZTsK
ICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwpA
QCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0Jiwg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25z
dCBTaWduYXR1cmUqLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2Uo
KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKICAgICBzdHJ1Y3Qg
Q29udHJvbEVudHJ5IHsKICAgICAgICAgRXhwcmVzc2lvbkxpc3QgZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2s7CkBAIC01NywyNSArNTcsMjYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUJvZHkoKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Np
b24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxl
RXhwcmVzc2lvbihPcFR5cGUpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVy
bigpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlQm9keSgpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKCk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnlDb250cm9sKFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mLCB1bnNpZ25lZCBsZXZlbCk7CiAKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwb3BF
eHByZXNzaW9uU3RhY2soRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisjZGVmaW5lIFdBU01fVFJZ
X1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmVzdWx0LCB3aGF0KSBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2V4cHJl
c3Npb25TdGFjay5pc0VtcHR5KCksICJjYW4ndCBwb3AgZW1wdHkgc3RhY2sgaW4gIiB3aGF0KTsg
XAorICAgICAgICByZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkK
IAogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFy
eUNhc2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFyeUNhc2Uo
KTsKIAogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBi
aW5hcnlDYXNlKCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5
Q2FzZSgpOwogCi0gICAgYm9vbCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkKLSAg
ICB7Ci0gICAgICAgIG1fY29udGV4dC5zZXRFcnJvck1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisjZGVmaW5lIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZF9leHByZXNzaW9uKSBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKG1fY29udGV4
dC5hZGRfZXhwcmVzc2lvbikKKworICAgIC8vIEZJWE1FIGFkZCBhIG1hY3JvIGFzIGFib3ZlIGZv
ciBXQVNNX1RSWV9BUFBFTkRfVE9fQ09OVFJPTF9TVEFDSyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODYyCiAKICAgICBDb250ZXh0JiBtX2NvbnRleHQ7CiAgICAg
RXhwcmVzc2lvbkxpc3QgbV9leHByZXNzaW9uU3RhY2s7CkBAIC05OSwxMTggKzEwMCwxMDQgQEAg
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQs
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4K
LWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkKK2F1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKCFtX2NvbnRleHQuYWRk
QXJndW1lbnRzKG1fc2lnbmF0dXJlLT5hcmd1bWVudHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICB1aW50MzJfdCBsb2NhbENvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIobG9j
YWxDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1fY29udGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUtPmFyZ3VtZW50cyksICJjYW4n
dCBhZGQgIiwgbV9zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksICIgYXJndW1lbnRzIHRvIEZ1
bmN0aW9uIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobG9jYWxD
b3VudCksICJjYW4ndCBnZXQgbG9jYWwgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGxvY2FsQ291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRnVu
Y3Rpb24gc2VjdGlvbidzIGxvY2FsIGNvdW50IGlzIHRvbyBiaWcgIiwgbG9jYWxDb3VudCk7CiAK
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7CiAgICAgICAg
IHVpbnQzMl90IG51bWJlck9mTG9jYWxzOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG51
bWJlck9mTG9jYWxzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICBUeXBl
IHR5cGVPZkxvY2FsOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRM
b2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihudW1iZXJP
ZkxvY2FscyksICJjYW4ndCBnZXQgRnVuY3Rpb24ncyBudW1iZXIgb2YgbG9jYWxzIGluIGdyb3Vw
ICIsIGkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG51bWJlck9mTG9jYWxzID09IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAi
LCBpLCAidGggbG9jYWwgZ3JvdXAgY291bnQgaXMgdG9vIGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2Fs
KSwgImNhbid0IGdldCBGdW5jdGlvbiBsb2NhbCdzIHR5cGUgaW4gZ3JvdXAgIiwgaSk7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwg
bnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgYWRkICIsIG51bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9u
IGxvY2FscyBmcm9tIGdyb3VwICIsIGkpOwogICAgIH0KIAotICAgIHJldHVybiBwYXJzZUJvZHko
KTsKKyAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQm9keSgpKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUJvZHkoKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2VCb2R5KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgIHVpbnQ4X3Qgb3A7Ci0gICAgICAgIGlmICghcGFyc2VVSW50OChvcCkgfHwgIWlzVmFs
aWRPcFR5cGUob3ApKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICBXVEY6OmRhdGFMb2dMbigiYXR0ZW1wdGVkIHRvIGRlY29kZSBpbnZhbGlkIG9wOiAiLCBSYXdQ
b2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSksICIgYXQgb2Zmc2V0OiAiLCBSYXdQ
b2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVUludDgob3ApLCAiY2FuJ3QgZGVjb2RlIG9wY29kZSIpOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFpc1ZhbGlkT3BUeXBlKG9wKSwgImludmFsaWQgb3Bjb2RlICIsIG9wKTsKIAog
ICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5n
IG9wICgiLCBtX3VucmVhY2hhYmxlQmxvY2tzLCAiKTogIiwgIFJhd1BvaW50ZXIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZHVtcCht
X2NvbnRyb2xTdGFjaywgbV9leHByZXNzaW9uU3RhY2spOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKG9wID09IE9wVHlwZTo6RW5kICYmICFtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbV91bnJlYWNoYWJsZUJsb2NrcyA/IHRydWUgOiBhZGRSZXR1cm4oKTsKLQot
ICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcykgewotICAgICAgICAgICAgaWYgKCFwYXJz
ZVVucmVhY2hhYmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJm
YWlsZWQgdG8gcHJvY2VzcyB1bnJlYWNoYWJsZSBvcDoiLCBvcCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4
cHJlc3Npb24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7Ci0gICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIs
IG9wKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9wID09IE9wVHlw
ZTo6RW5kICYmICFtX2NvbnRyb2xTdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Vu
cmVhY2hhYmxlQmxvY2tzKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAg
ICByZXR1cm4gYWRkUmV0dXJuKCk7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobV91bnJlYWNo
YWJsZUJsb2NrcykKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VV
bnJlYWNoYWJsZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4cHJlc3Np
b24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6YWRkUmV0dXJuKCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OmFkZFJldHVybigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9u
TGlzdCByZXR1cm5WYWx1ZXM7CiAgICAgaWYgKG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9IFZv
aWQpIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmV0dXJuVmFsdWU7Ci0gICAgICAgIGlmICgh
cG9wRXhwcmVzc2lvblN0YWNrKHJldHVyblZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyZXR1cm5WYWx1
ZSwgInJldHVybiIpOwogICAgICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKHJldHVyblZhbHVlKTsK
ICAgICB9CiAKICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICByZXR1cm4gbV9jb250
ZXh0LmFkZFJldHVybihyZXR1cm5WYWx1ZXMpOworICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZFJldHVybihyZXR1cm5WYWx1ZXMpKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb250ZXh0PgogdGVtcGxhdGU8T3BUeXBlIG9wPgotYm9vbCBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6YmluYXJ5Q2FzZSgpCithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpiaW5hcnlDYXNlKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIHJp
Z2h0OwotICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHJpZ2h0KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgRXhwcmVzc2lvblR5cGUgbGVmdDsKLSAgICBpZiAoIXBvcEV4cHJlc3Np
b25TdGFjayhsZWZ0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgRXhwcmVzc2lvblR5
cGUgcmVzdWx0OwotICAgIGlmICghbV9jb250ZXh0LnRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCBy
aWdodCwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV0FTTV9UUllfUE9Q
X0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyaWdodCwgImJpbmFyeSByaWdodCIpOworICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8obGVmdCwgImJpbmFyeSBsZWZ0Iik7CisgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCBy
ZXN1bHQpKTsKKwogICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRl
eHQ+CiB0ZW1wbGF0ZTxPcFR5cGUgb3A+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1
bmFyeUNhc2UoKQorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5hcnlDYXNlKCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwotICAgIGlmICghcG9w
RXhwcmVzc2lvblN0YWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgRXhw
cmVzc2lvblR5cGUgcmVzdWx0OwotICAgIGlmICghbV9jb250ZXh0LnRlbXBsYXRlIGFkZE9wPG9w
Pih2YWx1ZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV0FTTV9UUllf
UE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInVuYXJ5Iik7CisgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KHZhbHVlLCByZXN1bHQpKTsKKwogICAg
IG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQorYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIHN3aXRjaCAob3ApIHsKICNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwg
aWQsIGIzb3AsIGluYykgY2FzZSBPcFR5cGU6Om5hbWU6IHJldHVybiBiaW5hcnlDYXNlPE9wVHlw
ZTo6bmFtZT4oKTsKQEAgLTI0MSwzMjcgKzIyOCwyNDggQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkKIAogICAgIGNhc2UgT3BUeXBlOjpT
ZWxlY3Q6IHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOwotICAgICAgICBpZiAo
IXBvcEV4cHJlc3Npb25TdGFjayhjb25kaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHplcm87Ci0gICAgICAgIGlmICghcG9wRXhwcmVz
c2lvblN0YWNrKHplcm8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4
cHJlc3Npb25UeXBlIG5vblplcm87Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKG5v
blplcm8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAic2VsZWN0IGNvbmRpdGlvbiIpOwor
ICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHplcm8sICJzZWxlY3Qg
emVybyIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKG5vblpl
cm8sICJzZWxlY3Qgbm9uLXplcm8iKTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7
Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZFNlbGVjdChjb25kaXRpb24sIG5vblplcm8sIHpl
cm8sIHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKGFkZFNlbGVjdChjb25kaXRpb24sIG5vblplcm8sIHplcm8sIHJlc3Vs
dCkpOwogCiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICNkZWZpbmUgQ1JF
QVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5cGU6Om5hbWU6CiAgICAgRk9S
X0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9PUChDUkVBVEVfQ0FTRSkgewogICAgICAgICB1aW50MzJf
dCBhbGlnbm1lbnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1aW50MzJfdCBvZmZzZXQ7Ci0gICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQogICAgICAgICBFeHByZXNzaW9uVHlwZSBwb2ludGVyOwotICAgICAgICBpZiAoIXBvcEV4
cHJlc3Npb25TdGFjayhwb2ludGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAg
ICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmxvYWQo
c3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4ob3ApLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGFsaWdubWVudCksICJjYW4ndCBnZXQgbG9hZCBhbGlnbm1lbnQiKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0
IGdldCBsb2FkIG9mZnNldCIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFD
S19JTlRPKHBvaW50ZXIsICJsb2FkIHBvaW50ZXIiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBlPihvcCksIHBvaW50ZXIsIHJlc3Vs
dCwgb2Zmc2V0KSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBG
T1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkgewogICAgICAgICB1aW50
MzJfdCBhbGlnbm1lbnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAgICB1aW50MzJfdCBvZmZzZXQ7Ci0g
ICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQogICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKCFwb3BF
eHByZXNzaW9uU3RhY2sodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAg
ICAgIEV4cHJlc3Npb25UeXBlIHBvaW50ZXI7Ci0gICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0
YWNrKHBvaW50ZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVy
biBtX2NvbnRleHQuc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+KG9wKSwgcG9pbnRlciwg
dmFsdWUsIG9mZnNldCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGFsaWdubWVudCksICJjYW4ndCBnZXQgc3RvcmUgYWxpZ25tZW50Iik7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgc3Rv
cmUgb2Zmc2V0Iik7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
dmFsdWUsICJzdG9yZSB2YWx1ZSIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9T
VEFDS19JTlRPKHBvaW50ZXIsICJzdG9yZSBwb2ludGVyIik7CisgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKHN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihvcCksIHBvaW50ZXIs
IHZhbHVlLCBvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjdW5kZWYgQ1JF
QVRFX0NBU0UKIAogICAgIGNhc2UgT3BUeXBlOjpGMzJDb25zdDogewogICAgICAgICB1aW50MzJf
dCBjb25zdGFudDsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQzMihjb25zdGFudCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUlu
dDMyKGNvbnN0YW50KSwgImNhbid0IHBhcnNlIDMyLWJpdCBmbG9hdGluZy1wb2ludCBjb25zdGFu
dCIpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0
YW50KEYzMiwgY29uc3RhbnQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OiB7CiAgICAgICAgIGlu
dDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJJbnQzMihjb25zdGFudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgcGFyc2UgMzItYml0IGNvbnN0YW50Iik7CiAg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTMy
LCBjb25zdGFudCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6IHsKICAgICAgICAgdWludDY0X3Qg
Y29uc3RhbnQ7Ci0gICAgICAgIGlmICghcGFyc2VVSW50NjQoY29uc3RhbnQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2
NChjb25zdGFudCksICJjYW4ndCBwYXJzZSA2NC1iaXQgZmxvYXRpbmctcG9pbnQgY29uc3RhbnQi
KTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFu
dChGNjQsIGNvbnN0YW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpJNjRDb25zdDogewogICAgICAgICBpbnQ2
NF90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVmFySW50NjQoY29uc3RhbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IHBhcnNlIDY0LWJpdCBjb25zdGFudCIpOwogICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50KEk2NCwg
Y29uc3RhbnQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkdldExvY2FsOiB7CiAgICAgICAgIHVpbnQzMl90IGlu
ZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBpZiAo
IW1fY29udGV4dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRl
eCksICJjYW4ndCBnZXQgaW5kZXggZm9yIGdldF9sb2NhbCIpOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX2NvbnRleHQuZ2V0TG9jYWwoaW5kZXgsIHJlc3VsdCksICJjYW4ndCBnZXRf
bG9jYWwgYXQgaW5kZXgiLCBpbmRleCk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKICAgICBjYXNlIE9wVHlwZTo6U2V0TG9jYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5k
ZXg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKCFw
b3BFeHByZXNzaW9uU3RhY2sodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICByZXR1cm4gbV9jb250ZXh0LnNldExvY2FsKGluZGV4LCB2YWx1ZSk7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRl
eCBmb3Igc2V0X2xvY2FsIik7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNL
X0lOVE8odmFsdWUsICJzZXRfbG9jYWwiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQoc2V0TG9jYWwoaW5kZXgsIHZhbHVlKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBPcFR5cGU6OlRlZUxvY2FsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4Owot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFtX2V4cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgs
IG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBmb3IgdGVlX2xvY2FsIik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suaXNFbXB0eSgp
LCAiY2FuJ3QgdGVlX2xvY2FsIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIG1fZXhwcmVzc2lvblN0YWNr
Lmxhc3QoKSkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBl
OjpHZXRHbG9iYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmdldEdsb2JhbChp
bmRleCwgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2ds
b2JhbCdzIGluZGV4Iik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldEdsb2Jh
bChpbmRleCwgcmVzdWx0KSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1
bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
ICAgICBjYXNlIE9wVHlwZTo6U2V0R2xvYmFsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4Owot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgICAgIGlmICghcG9wRXhw
cmVzc2lvblN0YWNrKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IHNl
dF9nbG9iYWwncyBpbmRleCIpOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFD
S19JTlRPKHZhbHVlLCAic2V0X2dsb2JhbCB2YWx1ZSIpOworICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChzZXRHbG9iYWwoaW5kZXgsIHZhbHVlKSk7CiAgICAgICAgIHJldHVybiBtX2Nv
bnRleHQuc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6
OkNhbGw6IHsKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA+PSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXpl
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSwgImNhbid0IHBhcnNlIGNhbGwncyBmdW5j
dGlvbiBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uSW5kZXgg
Pj0gbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSwgImNhbGwgZnVuY3Rpb24gaW5kZXggIiwgZnVu
Y3Rpb25JbmRleCwgIiBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1fZnVuY3Rpb25J
bmRleFNwYWNlLnNpemUpOwogCiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSogY2FsbGVlU2lnbmF0
dXJlID0gbV9mdW5jdGlvbkluZGV4U3BhY2UuYnVmZmVyLmdldCgpW2Z1bmN0aW9uSW5kZXhdLnNp
Z25hdHVyZTsKLQotICAgICAgICBpZiAoY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgp
ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRzLnNp
emUoKSA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbGwgZnVuY3Rpb24gaW5kZXggIiwg
ZnVuY3Rpb25JbmRleCwgIiBoYXMgIiwgY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgp
LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBleHByZXNzaW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAi
LCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7CiAKICAgICAgICAgc2l6ZV90
IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGNhbGxlZVNp
Z25hdHVyZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiBhcmdzOwotICAgICAgICBhcmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2FsbGVlU2lnbmF0
dXJlLT5hcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3RB
cmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBhcmdzLmFwcGVuZChtX2V4cHJlc3Npb25TdGFja1tpXSk7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNhbGxlZVNpZ25hdHVyZS0+YXJn
dW1lbnRzLnNpemUoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3Mg
IiwgY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCAiIGFyZ3VtZW50cyIpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChtX2V4
cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJz
dEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRl
eHQ6OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5j
dGlvbkluZGV4LCBjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVu
Y3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQpKTsKIAogICAgICAgICBp
ZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbikKICAgICAgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGly
ZWN0OiB7Ci0gICAgICAgIGlmICghbV9pbmZvLnRhYmxlSW5mb3JtYXRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gc2V0RXJyb3JNZXNzYWdlKCJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hl
biBhIHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQiKTsKICAgICAgICAgdWludDMyX3Qgc2ln
bmF0dXJlSW5kZXg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2lnbmF0dXJlSW5kZXgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7
Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MShyZXNlcnZlZCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHJlc2VydmVkICE9IDApCi0gICAgICAgICAgICByZXR1
cm4gc2V0RXJyb3JNZXNzYWdlKCJjYWxsX2luZGlyZWN0ICdyZXNlcnZlZCcgdmFydWludDEgbXVz
dCBiZSAweDAiKTsKLQotICAgICAgICBpZiAobV9pbmZvLnNpZ25hdHVyZXMuc2l6ZSgpIDw9IHNp
Z25hdHVyZUluZGV4KQotICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yTWVzc2FnZSgiVHJpZWQg
dG8gdXNlIGEgc2lnbmF0dXJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHZhbGlkIHNpZ25hdHVyZXMi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLnRhYmxlSW5mb3JtYXRpb24s
ICJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxlIGlzIGRlZmluZWQgb3Ig
aW1wb3J0ZWQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
c2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0IGNhbGxfaW5kaXJlY3QncyBzaWduYXR1cmUgaW5k
ZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXNlcnZl
ZCksICJjYW4ndCBnZXQgY2FsbF9pbmRpcmVjdCdzIHJlc2VydmVkIGJ5dGUiKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihyZXNlcnZlZCwgImNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQn
IHZhcnVpbnQxIG11c3QgYmUgMHgwIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9p
bmZvLnNpZ25hdHVyZXMuc2l6ZSgpIDw9IHNpZ25hdHVyZUluZGV4LCAiY2FsbF9pbmRpcmVjdCdz
IHNpZ25hdHVyZSBpbmRleCAiLCBzaWduYXR1cmVJbmRleCwgIiBleGNlZWRzIGtub3duIHNpZ25h
dHVyZXMgIiwgbV9pbmZvLnNpZ25hdHVyZXMuc2l6ZSgpKTsKIAogICAgICAgICBjb25zdCBTaWdu
YXR1cmUqIGNhbGxlZVNpZ25hdHVyZSA9ICZtX2luZm8uc2lnbmF0dXJlc1tzaWduYXR1cmVJbmRl
eF07CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2lnbmF0dXJlLT5hcmd1
bWVudHMuc2l6ZSgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBpbmRleC4KLSAgICAgICAgaWYg
KGFyZ3VtZW50Q291bnQgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2V0RXJyb3JNZXNzYWdlKCJOb3QgZW5vdWdoIHZhbHVlcyBvbiB0aGUgc3RhY2sgZm9y
IGNhbGxfaW5kaXJlY3QiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENv
dW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbF9pbmRpcmVjdCBleHBlY3RzICIs
IGFyZ3VtZW50Q291bnQsICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3Vy
cmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAog
ICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7Ci0gICAgICAgIGlmICghYXJncy50
cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCi0gICAgICAgICAgICByZXR1cm4gc2V0
RXJyb3JNZXNzYWdlKCJPdXQgb2YgbWVtb3J5Iik7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBhcmd1bWVudENvdW50LCAiIGNhbGxfaW5kaXJlY3Qg
YXJndW1lbnRzIik7CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4cHJl
c3Npb25TdGFjay5zaXplKCkgLSBhcmd1bWVudENvdW50OwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsr
aSkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBl
bmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJp
bmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQg
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZENh
bGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRp
cmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChyZXN1
bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CiAgICAgICAgIFR5
cGUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlUmVzdWx0VHlwZShpbmxpbmVT
aWduYXR1cmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0
IGJsb2NrJ3MgaW5saW5lIHNpZ25hdHVyZSIpOwogICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBl
bmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgbV9jb250ZXh0LmFkZEJsb2NrKGlubGlu
ZVNpZ25hdHVyZSkgfSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxp
c3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKICAgICAgICAgVHlwZSBpbmxpbmVTaWduYXR1cmU7
Ci0gICAgICAgIGlmICghcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VS
ZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgbG9vcCdzIGlubGluZSBzaWdu
YXR1cmUiKTsKICAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJl
c3Npb25TdGFjayksIG1fY29udGV4dC5hZGRMb29wKGlubGluZVNpZ25hdHVyZSkgfSk7CiAgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6Oklm
OiB7CiAgICAgICAgIFR5cGUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlUmVz
dWx0VHlwZShpbmxpbmVTaWduYXR1cmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAg
ICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYgKCFwb3BFeHByZXNz
aW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgICAg
ICBDb250cm9sVHlwZSBjb250cm9sOwotICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRJZihjb25k
aXRpb24sIGlubGluZVNpZ25hdHVyZSwgY29udHJvbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGlu
ZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgaWYncyBpbmxpbmUgc2lnbmF0dXJlIik7CisgICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiaWYgY29uZGl0
aW9uIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElmKGNvbmRpdGlvbiwg
aW5saW5lU2lnbmF0dXJlLCBjb250cm9sKSk7CiAgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVu
ZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBjb250cm9sIH0pOwogICAgICAgICBtX2V4
cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpFbHNlOiB7Ci0g
ICAgICAgIGlmICghbV9jb250cm9sU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzZXRFcnJv
ck1lc3NhZ2UoIkF0dGVtcHRlZCB0byB1c2UgZWxzZSBibG9jayBhdCB0aGUgdG9wLWxldmVsIG9m
IGEgZnVuY3Rpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVsc2UobV9jb250cm9sU3RhY2subGFzdCgpLmNvbnRy
b2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suaXNFbXB0eSgpLCAiY2Fu
J3QgdXNlIGVsc2UgYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVsc2UobV9jb250cm9sU3RhY2subGFzdCgp
LmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5zaHJpbmsoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpCcjoKICAgICBjYXNlIE9wVHlwZTo6QnJJZjog
ewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIo
dGFyZ2V0KSB8fCB0YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiA9IENvbnRl
eHQ6OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6QnJJZikgewot
ICAgICAgICAgICAgaWYgKCFwb3BFeHByZXNzaW9uU3RhY2soY29uZGl0aW9uKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YXJnZXQpLCAiY2FuJ3QgZ2V0IGJyIC8gYnJfaWYn
cyB0YXJnZXQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YXJnZXQgPj0gbV9jb250
cm9sU3RhY2suc2l6ZSgpLCAiYnIgLyBicl9pZidzIHRhcmdldCAiLCB0YXJnZXQsICIgZXhjZWVk
cyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAg
aWYgKG9wID09IE9wVHlwZTo6QnJJZikKKyAgICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNT
SU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiYnIgLyBicl9pZiBjb25kaXRpb24iKTsKKyAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CiAKICAgICAgICAg
Q29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkg
LSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKIAotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFk
ZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQnJhbmNoKGRhdGEsIGNvbmRpdGlvbiwgbV9leHByZXNz
aW9uU3RhY2spKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlw
ZTo6QnJUYWJsZTogewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZlRhcmdldHM7Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIobnVtYmVyT2ZUYXJnZXRzKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOworICAgICAgICB1aW50
MzJfdCBkZWZhdWx0VGFyZ2V0OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihudW1iZXJPZlRhcmdldHMpLCAiY2FuJ3QgZ2V0IHRoZSBudW1iZXIgb2YgdGFyZ2V0
cyBmb3IgYnJfdGFibGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihudW1iZXJPZlRh
cmdldHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiYnJfdGFibGUn
cyBudW1iZXIgb2YgdGFyZ2V0cyBpcyB0b28gYmlnICIsIG51bWJlck9mVGFyZ2V0cyk7CiAKICAg
ICAgICAgVmVjdG9yPENvbnRyb2xUeXBlKj4gdGFyZ2V0czsKLSAgICAgICAgaWYgKCF0YXJnZXRz
LnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJPZlRhcmdldHMpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXRhcmdldHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KG51bWJlck9mVGFyZ2V0cyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIs
IG51bWJlck9mVGFyZ2V0cywgIiBicl90YWJsZSB0YXJnZXRzIik7CiAgICAgICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlRhcmdldHM7ICsraSkgewogICAgICAgICAgICAgdWlu
dDMyX3QgdGFyZ2V0OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0YXJnZXQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldCA+
PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YXJnZXQp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCB0YXJnZXQgZm9yIGJyX3RhYmxlIik7CisgICAgICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJi
cl90YWJsZSdzICIsIGksICJ0aCB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBz
dGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7CiAgICAgICAgICAgICB0YXJnZXRz
LnVuY2hlY2tlZEFwcGVuZCgmbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0g
MSAtIHRhcmdldF0uY29udHJvbERhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3Qg
ZGVmYXVsdFRhcmdldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihkZWZhdWx0VGFyZ2V0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGVmYXVsdFRhcmdl
dCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOwotICAgICAgICBpZiAoIXBvcEV4cHJl
c3Npb25TdGFjayhjb25kaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkU3dpdGNoKGNvbmRpdGlvbiwgdGFyZ2V0cywg
bV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRd
LmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRlZmF1bHRU
YXJnZXQpLCAiY2FuJ3QgZ2V0IGRlZmF1bHQgdGFyZ2V0IGZvciBicl90YWJsZSIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6
ZSgpLCAiYnJfdGFibGUncyBkZWZhdWx0IHRhcmdldCAiLCBkZWZhdWx0VGFyZ2V0LCAiIGV4Y2Vl
ZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7CisgICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiYnJfdGFibGUg
Y29uZGl0aW9uIik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFN3aXRjaChj
b25kaXRpb24sIHRhcmdldHMsIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAt
IDEgLSBkZWZhdWx0VGFyZ2V0XS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKIAog
ICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OlJldHVybjogewpA
QCAtNTczLDgyICs0ODEsNzggQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eHByZXNzaW9uKE9wVHlwZSBvcCkKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBsaXR0bGUg
d2VpcmQgaW4gdGhhdCBpdCB3aWxsIG1vZGlmeSB0aGUgZXhwcmVzc2lvblN0YWNrIGZvciB0aGUg
cmVzdWx0IG9mIHRoZSBibG9jay4KICAgICAgICAgLy8gVGhhdCdzIGEgbGl0dGxlIHRvbyBlZmZl
Y3RmdWwgZm9yIG1lIGJ1dCBJIGRvbid0IGhhdmUgYSBiZXR0ZXIgQVBJIHJpZ2h0IG5vdy4KICAg
ICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
MzUzCi0gICAgICAgIGlmICghbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0
YWNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQoZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBP
cFR5cGU6OlVucmVhY2hhYmxlOiB7Ci0gICAgICAgIG1fY29udGV4dC5hZGRVbnJlYWNoYWJsZSgp
OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRVbnJlYWNoYWJsZSgpKTsKICAg
ICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpEcm9wOiB7Ci0gICAg
ICAgIGlmICghbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzZXRFcnJv
ck1lc3NhZ2UoIkF0dGVtcHRlZCB0byBkcm9wIGFuIGV4cHJlc3Npb24gZnJvbSBhbiBlbXB0eSBz
dGFjay4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYW4ndCBkcm9w
IG9uIGVtcHR5IHN0YWNrIik7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAg
IGNhc2UgT3BUeXBlOjpOb3A6IHsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6Okdyb3dNZW1vcnk6CisgICAgICAgIHJl
dHVybiBmYWlsKCJub3QgeWV0IGltcGxlbWVudGVkOiBncm93X21lbW9yeSIpOyAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZC4KKwogICAgIGNhc2UgT3BUeXBlOjpDdXJyZW50TWVtb3J5Ogot
ICAgICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gZmFpbCgibm90IHlldCBpbXBsZW1lbnRlZDogY3VycmVudF9t
ZW1vcnkiKTsgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKICAgICB9CiAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWJv
b2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKE9w
VHlwZSBvcCkKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVF
eHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChtX3Vu
cmVhY2hhYmxlQmxvY2tzKTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBPcFR5cGU6OkVs
c2U6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIENvbnRyb2xF
bnRyeSYgZGF0YSA9IG1fY29udHJvbFN0YWNrLmxhc3QoKTsKICAgICAgICAgbV91bnJlYWNoYWJs
ZUJsb2NrcyA9IDA7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVsc2VUb1VucmVhY2hhYmxl
KGRhdGEuY29udHJvbERhdGEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhLmNvbnRyb2xE
YXRhKSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluaygwKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6
OkVuZDogewogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA9PSAxKSB7CiAgICAgICAg
ICAgICBDb250cm9sRW50cnkgZGF0YSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRFbmRUb1VucmVhY2hhYmxlKGRhdGEpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKGFkZEVuZFRvVW5yZWFjaGFibGUoZGF0YSkpOwogICAgICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKICAgICAgICAgfQogICAg
ICAgICBtX3VucmVhY2hhYmxlQmxvY2tzLS07Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpMb29wOgogICAgIGNhc2Ug
T3BUeXBlOjpJZjoKICAgICBjYXNlIE9wVHlwZTo6QmxvY2s6IHsKICAgICAgICAgbV91bnJlYWNo
YWJsZUJsb2NrcysrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKICAgICAvLyB0d28gaW1tZWRpYXRlIGNhc2VzCiAgICAgY2FzZSBPcFR5cGU6OkJy
OgogICAgIGNhc2UgT3BUeXBlOjpCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHVudXNlZDsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih1bnVzZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51c2VkKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodW51c2VkKSwgImNhbid0IGdldCBiciAv
IGJyX2lmIGluIHVucmVhY2hhYmxlIGNvbnRleHQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIodW51c2VkKSwgImNhbid0IGdldCBiciAvIGJyX2lmIGluIHVu
cmVhY2hhYmxlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICAv
LyBvbmUgaW1tZWRpYXRlIGNhc2VzCkBAIC02NTksMjUgKzU2MywxNCBAQCBib29sIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAg
ICAgY2FzZSBPcFR5cGU6OlNldExvY2FsOgogICAgIGNhc2UgT3BUeXBlOjpHZXRMb2NhbDogewog
ICAgICAgICB1aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIHJldHVybiBwYXJzZVZhclVJbnQzMih1
bnVzZWQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih1bnVz
ZWQpLCAiY2FuJ3QgZ2V0IGNvbnN0IC8gbG9jYWwgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4
dD4KLWJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBvcEV4cHJlc3Npb25TdGFjayhFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIGlmIChtX2V4cHJlc3Npb25TdGFjay5zaXplKCkp
IHsKLSAgICAgICAgcmVzdWx0ID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc2V0RXJyb3JNZXNzYWdlKCJBdHRlbXB0ZWQg
dG8gdXNlIGEgc3RhY2sgdmFsdWUgd2hlbiBub25lIGV4aXN0ZWQiKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKaW5kZXgg
MWQyN2RiZi4uZjRmNzZiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZVBhcnNlci5jcHAKQEAgLTM5LDE4OSArMzksMTEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsK
LQotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgp
IC0+IFJlc3VsdAogewotICAgIG1fbW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZv
cm1hdGlvbj4oKTsKLQorICAgIG1fcmVzdWx0Lm1vZHVsZSA9IHN0ZDo6bWFrZV91bmlxdWU8TW9k
dWxlSW5mb3JtYXRpb24+KCk7CiAgICAgY29uc3Qgc2l6ZV90IG1pblNpemUgPSA4OwotICAgIGlm
IChsZW5ndGgoKSA8IG1pblNpemUpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiTW9kdWxl
IGlzICIgKyBTdHJpbmc6Om51bWJlcihsZW5ndGgoKSkgKyAiIGJ5dGVzLCBleHBlY3RlZCBhdCBs
ZWFzdCAiICsgU3RyaW5nOjpudW1iZXIobWluU2l6ZSkgKyAiIGJ5dGVzIjsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWNvbnN1bWVDaGFyYWN0ZXIoMCkgfHwgIWNvbnN1
bWVTdHJpbmcoImFzbSIpKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIk1vZHVsZXMgZG9l
c24ndCBzdGFydCB3aXRoICdcXDBhc20nIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQogICAgIHVpbnQzMl90IHZlcnNpb25OdW1iZXI7Ci0gICAgaWYgKCFwYXJzZVVJbnQzMih2ZXJz
aW9uTnVtYmVyKSkgewotICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB2ZXJzaW9uIG51bWJlciI7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICBpZiAodmVyc2lvbk51bWJlciAhPSBleHBlY3RlZFZl
cnNpb25OdW1iZXIpIHsKLSAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSAidW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihsZW5ndGgoKSA8IG1pblNp
emUsICJleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCAiLCBtaW5TaXplLCAiIGJ5dGVzIik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZUNoYXJhY3RlcigwKSB8fCAhY29uc3Vt
ZVN0cmluZygiYXNtIiksICJtb2R1bGVzIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnXFwwYXNtJyIpOwor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDMyKHZlcnNpb25OdW1iZXIpLCAiY2Fu
J3QgcGFyc2UgdmVyc2lvbiBudW1iZXIiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHZlcnNp
b25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5leHBlY3RlZCB2ZXJzaW9uIG51
bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4cGVjdGVkVmVyc2lvbk51bWJl
cik7CiAKLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9j
ZXNzaW5nIGhlYWRlci4iKTsKLQotICAgIFNlY3Rpb25zOjpTZWN0aW9uIHByZXZpb3VzU2VjdGlv
biA9IFNlY3Rpb25zOjpVbmtub3duOworICAgIFNlY3Rpb24gcHJldmlvdXNTZWN0aW9uID0gU2Vj
dGlvbjo6VW5rbm93bjsKICAgICB3aGlsZSAobV9vZmZzZXQgPCBsZW5ndGgoKSkgewotICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiU3RhcnRpbmcgdG8gcGFyc2Ug
bmV4dCBzZWN0aW9uIGF0IG9mZnNldDogIiwgbV9vZmZzZXQpOwotCiAgICAgICAgIHVpbnQ4X3Qg
c2VjdGlvbkJ5dGU7Ci0gICAgICAgIGlmICghcGFyc2VVSW50NyhzZWN0aW9uQnl0ZSkpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBieXRlIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxv
Z0xuKCJTZWN0aW9uIGJ5dGU6ICIsIHNlY3Rpb25CeXRlKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VVSW50NyhzZWN0aW9uQnl0ZSksICJjYW4ndCBnZXQgc2VjdGlvbiBieXRl
Iik7CiAKLSAgICAgICAgU2VjdGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtu
b3duOworICAgICAgICBTZWN0aW9uIHNlY3Rpb24gPSBTZWN0aW9uOjpVbmtub3duOwogICAgICAg
ICBpZiAoc2VjdGlvbkJ5dGUpIHsKLSAgICAgICAgICAgIGlmIChzZWN0aW9uQnl0ZSA8IFNlY3Rp
b25zOjpVbmtub3duKQotICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0
aW9uczo6U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFT
ZWN0aW9uczo6dmFsaWRhdGVPcmRlcihwcmV2aW91c1NlY3Rpb24sIHNlY3Rpb24pKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2Ug
PSAiaW52YWxpZCBzZWN0aW9uIG9yZGVyIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChpc1ZhbGlkU2VjdGlvbihzZWN0aW9uQnl0ZSkpCisgICAgICAgICAgICAg
ICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PFNlY3Rpb24+KHNlY3Rpb25CeXRlKTsKICAgICAgICAg
fQogCiAgICAgICAgIHVpbnQzMl90IHNlY3Rpb25MZW5ndGg7Ci0gICAgICAgIGlmICghcGFyc2VW
YXJVSW50MzIoc2VjdGlvbkxlbmd0aCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUg
ZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
OTE5Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBs
ZW5ndGgiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHNlY3Rpb25MZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0KSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAic2VjdGlv
biBjb250ZW50IHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXZhbGlk
YXRlT3JkZXIocHJldmlvdXNTZWN0aW9uLCBzZWN0aW9uKSwgImludmFsaWQgc2VjdGlvbiBvcmRl
ciwgIiwgcHJldmlvdXNTZWN0aW9uLCAiIGZvbGxvd2VkIGJ5ICIsIHNlY3Rpb24pOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWN0aW9uLCAiIHNlY3Rpb24ncyBsZW5ndGgiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihzZWN0aW9uTGVuZ3RoID4gbGVuZ3RoKCkgLSBtX29mZnNldCwgc2VjdGlv
biwgInNlY3Rpb24gb2Ygc2l6ZSAiLCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1v
ZHVsZSdzIHNpemUiKTsKIAogICAgICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxl
bmd0aDsKIAogICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKLSAgICAgICAgLy8gRklYTUUgaW1w
cm92ZSBlcnJvciBtZXNzYWdlIGluIG1hY3JvIGJlbG93IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSNkZWZpbmUgV0FTTV9TRUNUSU9OX1BBUlNFKE5BTUUs
IElELCBERVNDUklQVElPTikgXAotICAgICAgICBjYXNlIFNlY3Rpb25zOjpOQU1FOiB7IFwKLSAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSBcCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJz
aW5nICIgREVTQ1JJUFRJT04pOyBcCi0gICAgICAgICAgICBpZiAoIXBhcnNlICMjIE5BTUUoKSkg
eyBcCi0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2Ugc2Vj
dGlvbiAiICNOQU1FICI6ICIgREVTQ1JJUFRJT047IFwKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgYnJlYWs7IFwKKyNkZWZpbmUg
V0FTTV9TRUNUSU9OX1BBUlNFKE5BTUUsIElELCBERVNDUklQVElPTikgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBjYXNlIFNlY3Rpb246Ok5BTUU6IHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlICMjIE5BTUUoKSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9
CiAgICAgICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fUEFSU0UpCiAjdW5k
ZWYgV0FTTV9TRUNUSU9OX1BBUlNFCiAKLSAgICAgICAgY2FzZSBTZWN0aW9uczo6VW5rbm93bjog
ewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJV
bmtub3duIHNlY3Rpb24sIHNraXBwaW5nLiIpOworICAgICAgICBjYXNlIFNlY3Rpb246OlVua25v
d246IHsKICAgICAgICAgICAgIC8vIElnbm9yZSBzZWN0aW9uJ3MgbmFtZSBMRUIgYW5kIGJ5dGVz
OiB0aGV5J3JlIGFscmVhZHkgaW5jbHVkZWQgaW4gc2VjdGlvbkxlbmd0aC4KICAgICAgICAgICAg
IG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
TG4oIkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKLQotICAgICAgICBpZiAoZW5kICE9IG1f
b2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2Vj
dGlvbiI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOwogCiAgICAgICAgIHByZXZpb3VzU2Vj
dGlvbiA9IHNlY3Rpb247CiAgICAgfQogCi0gICAgLy8gVE9ETwotICAgIG1fZmFpbGVkID0gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUobV9yZXN1bHQpOwogfQog
Ci1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZVR5cGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3QgY291bnQ7Ci0gICAgaWYg
KCFwYXJzZVZhclVJbnQzMihjb3VudCkKLSAgICAgICAgfHwgY291bnQgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgIHx8ICFtX21vZHVsZS0+c2lnbmF0dXJl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiICBjb3VudDogIiwgY291bnQpOworCisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0
IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJUeXBlIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIGNvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jl
c3VsdC5tb2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVu
dHJpZXMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAg
ICAgICAgIGludDhfdCB0eXBlOwotICAgICAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUgIT0gRnVuYykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiR290IGZ1bmN0aW9uIHR5cGUuIik7Ci0KICAgICAgICAgdWludDMyX3QgYXJndW1l
bnRDb3VudDsKICAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCkKLSAgICAgICAgICAgIHx8IGFyZ3VtZW50
Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpCi0gICAgICAgICAg
ICB8fCAhYXJndW1lbnRUeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZ0xuKCIgIGFyZ3VtZW50IGNvdW50OiAiLCBhcmd1bWVudENvdW50KTsKKworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBnZXQgIiwg
aSwgInRoIFR5cGUncyB0eXBlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAh
PSBGdW5jLCBpLCAidGggVHlwZSBpcyBub24tRnVuYyAiLCB0eXBlKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCksICJjYW4ndCBnZXQg
IiwgaSwgInRoIFR5cGUncyBhcmd1bWVudCBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGFyZ3VtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50KTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJndW1lbnRUeXBlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBU
eXBlIHNlY3Rpb24ncyAiLCBpLCAidGggIiwgYXJndW1lbnRDb3VudCwgIiBhcmd1bWVudHMiKTsK
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7
CiAgICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAgICAgIGlmICghcGFyc2VS
ZXN1bHRUeXBlKGFyZ3VtZW50VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGFyZ3VtZW50
VHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKICAgICAgICAgICAg
IGFyZ3VtZW50VHlwZXMudW5jaGVja2VkQXBwZW5kKGFyZ3VtZW50VHlwZSk7CiAgICAgICAgIH0K
IAogICAgICAgICB1aW50OF90IHJldHVybkNvdW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDEocmV0dXJuQ291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAi
LCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOwogICAgICAgICBUeXBlIHJldHVyblR5cGU7
CiAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4ocmV0dXJuQ291
bnQpOwotCiAgICAgICAgIGlmIChyZXR1cm5Db3VudCkgewogICAgICAgICAgICAgVHlwZSB2YWx1
ZTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUodmFsdWUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiB2YWx1
ZSIpOwogICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6Vm9pZDsKIAot
ICAgICAgICBtX21vZHVsZS0+c2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoeyByZXR1cm5UeXBl
LCBXVEZNb3ZlKGFyZ3VtZW50VHlwZXMpIH0pOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPnNp
Z25hdHVyZXMudW5jaGVja2VkQXBwZW5kKHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5
cGVzKSB9KTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBpbXBvcnRDb3VudDsK
LSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KQotICAgICAgICB8fCBpbXBvcnRD
b3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwg
IW1fbW9kdWxlLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklY
TUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAg
ICAgICB8fCAhbV9tb2R1bGUtPmltcG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50
KSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVs
b3cuCi0gICAgICAgIHx8ICFtX21vZHVsZS0+aW1wb3J0RnVuY3Rpb25zLnRyeVJlc2VydmVDYXBh
Y2l0eShpbXBvcnRDb3VudCkgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZp
eCB0aGUgRklYTUVzIGJlbG93LgotICAgICAgICB8fCAhbV9mdW5jdGlvbkluZGV4U3BhY2UudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSkgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRl
cyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LiBXZSdsbCBhbGxvY2F0ZSBzb21lIG1vcmUg
aGVyZSB3aGVuIHdlIGtub3cgaG93IG1hbnkgZnVuY3Rpb25zIHRvIGV4cGVjdC4KLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGlt
cG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0
Q291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFs
cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgZ2xvYmFscyIpOyAvLyBGSVhNRSB0aGlzIG92
ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShp
bXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRD
b3VudCwgIiBpbXBvcnRzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBm
aXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5t
b2R1bGUtPmltcG9ydEZ1bmN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0
IGZ1bmN0aW9ucyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRo
ZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQuZnVuY3Rp
b25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBmdW5jdGlvbnMgaW4gdGhl
IGluZGV4IHNwYWNlIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXgg
dGhlIEZJWE1FcyBiZWxvdy4gV2UnbGwgYWxsb2NhdGUgc29tZSBtb3JlIGhlcmUgd2hlbiB3ZSBr
bm93IGhvdyBtYW55IGZ1bmN0aW9ucyB0byBleHBlY3QuCiAKICAgICBmb3IgKHVpbnQzMl90IGlt
cG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciA8IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJl
cikgewogICAgICAgICBJbXBvcnQgaW1wOwpAQCAtMjI5LDE3OSArMTUwLDE2MCBAQCBib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAgICB1aW50MzJfdCBmaWVsZExlbjsKICAg
ICAgICAgU3RyaW5nIG1vZHVsZVN0cmluZzsKICAgICAgICAgU3RyaW5nIGZpZWxkU3RyaW5nOwot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbikKLSAgICAgICAgICAgIHx8ICFj
b25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVsZUxlbikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIobW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBt
b2R1bGUgbmFtZSBsZW5ndGgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3Vt
ZVVURjhTdHJpbmcobW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9y
dE51bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4p
OwogICAgICAgICBpbXAubW9kdWxlID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBtb2R1
bGVTdHJpbmcpOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKQotICAgICAg
ICAgICAgfHwgIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbikpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0
cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbiwgIiBpbiBtb2R1bGUgJyIsIG1vZHVs
ZVN0cmluZywgIiciKTsKICAgICAgICAgaW1wLmZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhtX3ZtLCBmaWVsZFN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtpbmQoaW1w
LmtpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGltcC5raW5kKSwgImNhbid0IGdldCAiLCBpbXBv
cnROdW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAi
JyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIHN3aXRjaCAoaW1wLmtpbmQp
IHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246IHsKKyAgICAgICAgY2FzZSBFeHRl
cm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvblNpZ25h
dHVyZUluZGV4OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25h
dHVyZUluZGV4KQotICAgICAgICAgICAgICAgIHx8IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXggPj0g
bV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGltcC5raW5kSW5kZXggPSBtX21vZHVsZS0+aW1wb3J0RnVuY3Rpb25z
LnNpemUoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0gJm1fbW9kdWxlLT5z
aWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdOwotICAgICAgICAgICAgbV9tb2R1bGUt
PmltcG9ydEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKLSAgICAgICAgICAg
IG1fZnVuY3Rpb25JbmRleFNwYWNlLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUpOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaWduYXR1
cmVJbmRleCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZnVuY3Rp
b24gc2lnbmF0dXJlIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmll
bGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9u
U2lnbmF0dXJlSW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSwgImlu
dmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQs
ICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1fcmVz
dWx0Lm1vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJp
bmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGltcC5raW5k
SW5kZXggPSBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0aW9ucy5zaXplKCk7CisgICAgICAg
ICAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9ICZtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZXNb
ZnVuY3Rpb25TaWduYXR1cmVJbmRleF07CisgICAgICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmlt
cG9ydEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxl
OiB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewogICAgICAgICAgICAgYm9v
bCBpc0ltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVGFibGVIZWxwZXIoaXNJ
bXBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFBhcnRp
YWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7CisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5n
ZXRVbmV4cGVjdGVkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewogICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAo
IXBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0LmdldFVuZXhwZWN0ZWQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWw6Okdsb2JhbDogeworICAgICAgICBj
YXNlIEV4dGVybmFsS2luZDo6R2xvYmFsOiB7CiAgICAgICAgICAgICBHbG9iYWwgZ2xvYmFsOwot
ICAgICAgICAgICAgaWYgKCFwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PSBH
bG9iYWw6Ok11dGFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSk7Cisg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbC5tdXRhYmlsaXR5ID09IEdsb2Jh
bDo6TXV0YWJsZSwgIk11dGFibGUgR2xvYmFscyBhcmVuJ3Qgc3VwcG9ydGVkIik7CiAKLSAgICAg
ICAgICAgIGltcC5raW5kSW5kZXggPSBtX21vZHVsZS0+Z2xvYmFscy5zaXplKCk7Ci0gICAgICAg
ICAgICBtX21vZHVsZS0+Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsK
KyAgICAgICAgICAgIGltcC5raW5kSW5kZXggPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6
ZSgpOworICAgICAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIG1fbW9kdWxlLT5pbXBvcnRzLnVuY2hlY2tlZEFwcGVuZChpbXApOwor
ICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKGltcCk7CiAg
ICAgfQogCi0gICAgbV9tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwgPSBtX21vZHVsZS0+Z2xv
YmFscy5zaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV9yZXN1bHQubW9kdWxlLT5maXJz
dEludGVybmFsR2xvYmFsID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpCithdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1
aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KQotICAgICAgICB8
fCBjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAg
fHwgIW1fbW9kdWxlLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNp
dHkoY291bnQpCi0gICAgICAgIHx8ICFtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS50cnlSZXNl
cnZlQ2FwYWNpdHkoY291bnQpCi0gICAgICAgIHx8ICFtX2Z1bmN0aW9uSW5kZXhTcGFjZS50cnlS
ZXNlcnZlQ2FwYWNpdHkobV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpICsgY291bnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpLCAiRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+aW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiIEZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9y
ICIsIGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9yZXN1bHQuZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShtX3Jlc3Vs
dC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpICsgY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgbW9yZSBmdW5jdGlvbnMgaW4gdGhlIGZ1bmN0aW9u
IGluZGV4IHNwYWNlIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewogICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKHR5cGVOdW1iZXIpCi0gICAgICAgICAgICB8fCB0eXBlTnVtYmVyID49IG1fbW9kdWxl
LT5zaWduYXR1cmVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBn
ZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1fcmVzdWx0Lm1vZHVsZS0+c2lnbmF0dXJlcy5zaXpl
KCksIGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIp
OwogCi0gICAgICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0gJm1fbW9kdWxlLT5zaWduYXR1cmVz
W3R5cGVOdW1iZXJdOworICAgICAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9ICZtX3Jlc3VsdC5t
b2R1bGUtPnNpZ25hdHVyZXNbdHlwZU51bWJlcl07CiAgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rp
b24gZml4ZXMgdXAgc3RhcnQgYW5kIGVuZC4KICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKICAg
ICAgICAgc2l6ZV90IGVuZCA9IDA7Ci0gICAgICAgIG1fbW9kdWxlLT5pbnRlcm5hbEZ1bmN0aW9u
U2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlKTsKLSAgICAgICAgbV9mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKLSAgICAg
ICAgbV9mdW5jdGlvbkluZGV4U3BhY2UudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7CisgICAg
ICAgIG1fcmVzdWx0Lm1vZHVsZS0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZXMudW5jaGVja2Vk
QXBwZW5kKHNpZ25hdHVyZSk7CisgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeS51bmNoZWNrZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgICAgICBtX3Jlc3VsdC5m
dW5jdGlvbkluZGV4U3BhY2UudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiYgbWF4aW11bSkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0
cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0pIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoIW1heGltdW0pOwogCiAgICAgdWludDhfdCBm
bGFnczsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluaXRpYWwpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwogCiAgICAgaWYgKGZsYWdzKSB7CiAgICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobWF4aW11bUlu
dCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGluaXRpYWwgPiBt
YXhpbXVtSW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVz
aXphYmxlIGxpbWl0cyBtYXhpbXVtIHBhZ2UgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbml0aWFsID4gbWF4aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0
cyBtYXhpbXVtICIsIG1heGltdW1JbnQpOwogICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsK
ICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KQorYXV0byBNb2R1bGVQ
YXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAog
ewotICAgIC8vIFdlJ3JlIG9ubHkgYWxsb3dlZCBhIHRvdGFsIG9mIG9uZSBUYWJsZSBpbXBvcnQg
b3IgZGVmaW5pdGlvbi4KLSAgICBpZiAobV9oYXNUYWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9oYXNUYWJsZSwgIlRhYmxlIHNlY3Rpb24gY2Fu
bm90IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMgYSB0YWJsZSIpOwogCiAgICAgbV9oYXNUYWJsZSA9
IHRydWU7CiAKICAgICBpbnQ4X3QgdHlwZTsKLSAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh0eXBlICE9IFdhc206OkFueWZ1bmMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUludDcodHlw
ZSksICJjYW4ndCBwYXJzZSBUYWJsZSB0eXBlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlICE9IFdhc206OkFueWZ1bmMsICJUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
IiwgdHlwZSk7CiAKICAgICB1aW50MzJfdCBpbml0aWFsOwogICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW07Ci0gICAgaWYgKCFwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBt
YXhpbXVtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFKU1dlYkFzc2VtYmx5
VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
UGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhp
bXVtKTsKKyAgICBpZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgIHJldHVybiBsaW1pdHMu
Z2V0VW5leHBlY3RlZCgpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIUpTV2ViQXNzZW1ibHlU
YWJsZTo6aXNWYWxpZFNpemUoaW5pdGlhbCksICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBv
ZiAiLCBpbml0aWFsLCAiIGlzIGludmFsaWQiKTsKIAogICAgIEFTU0VSVCghbWF4aW11bSB8fCAq
bWF4aW11bSA+PSBpbml0aWFsKTsKIAotICAgIG1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uID0g
VGFibGVJbmZvcm1hdGlvbihpbml0aWFsLCBtYXhpbXVtLCBpc0ltcG9ydCk7CisgICAgbV9yZXN1
bHQubW9kdWxlLT50YWJsZUluZm9ybWF0aW9uID0gVGFibGVJbmZvcm1hdGlvbihpbml0aWFsLCBt
YXhpbXVtLCBpc0ltcG9ydCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9Owog
fQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCithdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VUYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBjb3VudDsKLSAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gV2Ugb25seSBhbGxvdyBvbmUgdGFibGUgZm9yIG5vdy4KLSAgICBpZiAoY291bnQgIT0g
MSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiVGFibGUgY291bnQgb2YgIiwgY291bnQsICIgaXMg
aW52YWxpZCwgb25seSAxIGlzIGFsbG93ZWQgZm9yIG5vdyIpOwogCiAgICAgYm9vbCBpc0ltcG9y
dCA9IGZhbHNlOwotICAgIHJldHVybiBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlVGFibGVIZWxwZXIoaXNJbXBvcnQpOworICAgIGlm
IChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXRVbmV4cGVjdGVk
KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1v
cnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhl
bHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgLy8gV2UgZG9uJ3Qg
YWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIgdmlhIGltcG9ydCBvciBkZWZpbml0aW9u
LgotICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSwgIk1lbW9yeSBzZWN0
aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CiAKICAgICBQYWdl
Q291bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsK
ICAgICB7CiAgICAgICAgIHVpbnQzMl90IGluaXRpYWw7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW07Ci0gICAgICAgIGlmICghcGFyc2VSZXNpemFibGVMaW1pdHMoaW5p
dGlhbCwgbWF4aW11bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFBhcnRp
YWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKKyAgICAgICAgICAgIHJldHVybiBsaW1p
dHMuZ2V0VW5leHBlY3RlZCgpOwogICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0g
Pj0gaW5pdGlhbCk7Ci0gICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFQ
YWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCksICJNZW1vcnkncyBpbml0aWFsIHBhZ2UgY291bnQg
b2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CiAKICAgICAgICAgaW5pdGlhbFBhZ2VDb3Vu
dCA9IFBhZ2VDb3VudChpbml0aWFsKTsKIAogICAgICAgICBpZiAobWF4aW11bSkgewotICAgICAg
ICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3Vu
dDo6aXNWYWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwg
Km1heGltdW0sICIgaXMgaW52YWxpZCIpOwogICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9
IFBhZ2VDb3VudCgqbWF4aW11bSk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MDksNDMgKzMxMSwz
NiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkK
ICAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0
aWFsUGFnZUNvdW50KTsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAg
fTsKLSAgICBtX21vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VD
b3VudCwgbWF4aW11bVBhZ2VDb3VudCwgcGlubmVkU2l6ZXMsIGlzSW1wb3J0KTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9u
KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIHBpbm5lZFNpemVzLCBpc0ltcG9y
dCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5
KCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICB1aW50OF90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MShjb3VudCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQx
KGNvdW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKIAogICAgIGlm
ICghY291bnQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgLy8gV2Ugb25seSBhbGxvdyBvbmUgbWVtb3J5IGZvciBub3cuCi0gICAgaWYgKGNvdW50ICE9
IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50
ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFzc2Vt
Ymx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOwogCiAgICAgYm9vbCBpc0lt
cG9ydCA9IGZhbHNlOwogICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7CiB9
CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpCithdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3QgZ2xvYmFsQ291
bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihnbG9iYWxDb3VudCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIW1fbW9kdWxlLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShn
bG9iYWxDb3VudCArIG1fbW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGdsb2Jh
bENvdW50KSwgImNhbid0IGdldCBHbG9iYWwgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0
eShnbG9iYWxDb3VudCArIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCksICJj
YW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGdsb2JhbENvdW50ICsgbV9yZXN1bHQubW9kdWxl
LT5maXJzdEludGVybmFsR2xvYmFsLCAiIGdsb2JhbHMiKTsKIAogICAgIGZvciAodWludDMyX3Qg
Z2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4
KSB7CiAgICAgICAgIEdsb2JhbCBnbG9iYWw7Ci0gICAgICAgIGlmICghcGFyc2VHbG9iYWxUeXBl
KGdsb2JhbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgdWludDhfdCBp
bml0T3Bjb2RlOwotICAgICAgICBpZiAoIXBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgZ2xvYmFs
LmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2Jh
bCkpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5p
dE9wY29kZSwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKIAogICAgICAgICBn
bG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKICAgICAg
ICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKQEAgLTQ2MywxMzAgKzM1OCwxMDMgQEAgYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkKICAgICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2Rl
ID0gRjY0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsOgotICAg
ICAgICAgICAgaWYgKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyID49IG1fbW9kdWxl
LT5maXJzdEludGVybmFsR2xvYmFsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gbV9tb2R1bGUtPmdsb2JhbHNbZ2xvYmFsLmlu
aXRpYWxCaXRzT3JJbXBvcnROdW1iZXJdLnR5cGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyID49IG1fcmVzdWx0Lm1vZHVs
ZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgZ2xvYmFsSW5kZXgsICJ0aCBHbG9iYWwgdXNlcyBnZXRf
Z2xvYmFsICIsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCAiIHdoaWNoIGV4Y2Vl
ZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2JhbCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50
ZXJuYWxHbG9iYWwpOworICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBtX3Jlc3VsdC5t
b2R1bGUtPmdsb2JhbHNbZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXJdLnR5cGU7CiAg
ICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFs
SW1wb3J0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KHR5cGVGb3JJbml0T3Bjb2RlICE9IGdsb2JhbC50eXBlKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVGb3JJbml0T3Bjb2RlICE9IGds
b2JhbC50eXBlLCAiR2xvYmFsIGluaXRfZXhwciBvcGNvZGUgb2YgdHlwZSAiLCB0eXBlRm9ySW5p
dE9wY29kZSwgIiBkb2Vzbid0IG1hdGNoIGdsb2JhbCdzIHR5cGUgIiwgZ2xvYmFsLnR5cGUpOwog
Ci0gICAgICAgIG1fbW9kdWxlLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2Jh
bCkpOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoZ2xvYmFsKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkKK2F1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBleHBv
cnRDb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGV4cG9ydENvdW50KQotICAgICAgICB8
fCBleHBvcnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAg
ICAgICAgfHwgIW1fbW9kdWxlLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBvcnRDb3Vu
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihleHBvcnRDb3VudCksICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3Vu
dCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0Q291bnQgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28g
YmlnICIsIGV4cG9ydENvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5t
b2R1bGUtPmV4cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKIAog
ICAgIGZvciAodWludDMyX3QgZXhwb3J0TnVtYmVyID0gMDsgZXhwb3J0TnVtYmVyIDwgZXhwb3J0
Q291bnQ7ICsrZXhwb3J0TnVtYmVyKSB7CiAgICAgICAgIEV4cG9ydCBleHA7CiAgICAgICAgIHVp
bnQzMl90IGZpZWxkTGVuOwogICAgICAgICBTdHJpbmcgZmllbGRTdHJpbmc7Ci0gICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pCi0gICAgICAgICAgICB8fCAhY29uc3VtZVVURjhT
dHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgZXhwLmZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBmaWVsZFN0
cmluZyk7Ci0KLSAgICAgICAgaWYgKCFwYXJzZUV4dGVybmFsS2luZChleHAua2luZCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihleHAu
a2luZEluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBs
ZW5ndGggIiwgZmllbGRMZW4pOworICAgICAgICBleHAuZmllbGQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKG1fdm0sIGZpZWxkU3RyaW5nKTsKIAorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZUV4dGVybmFsS2luZChleHAua2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVy
LCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1lZCAn
IiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIHN3aXRjaCAoZXhwLmtpbmQpIHsKLSAgICAg
ICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIGlmIChleHAua2luZElu
ZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHAua2luZEluZGV4ID49IG1fcmVzdWx0LmZ1bmN0
aW9uSW5kZXhTcGFjZS5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxp
ZCBmdW5jdGlvbiBudW1iZXIgIiwgZXhwLmtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpLCAi
LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsOjpUYWJsZTogewotICAgICAgICAgICAgaWYgKCFt
X2hhc1RhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlm
IChleHAua2luZEluZGV4ICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIW1faGFzVGFibGUsICJjYW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgVGFibGUi
KTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwLmtpbmRJbmRleCwgImNhbid0
IGV4cG9ydCBUYWJsZSAiLCBleHAua2luZEluZGV4LCAiIG9ubHkgemVyby1pbmRleCBUYWJsZSBp
cyBjdXJyZW50bHkgc3VwcG9ydGVkIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIGlmICghbV9tb2R1
bGUtPm1lbW9yeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBp
ZiAoZXhwLmtpbmRJbmRleCAhPSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogeworICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5tZW1vcnksICJjYW4ndCBleHBvcnQgYSBub24t
ZXhpc3RlbnQgTWVtb3J5Iik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cC5r
aW5kSW5kZXgsICJjYW4ndCBleHBvcnQgTWVtb3J5ICIsIGV4cC5raW5kSW5kZXgsICIgb25seSBv
bmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICBp
ZiAoZXhwLmtpbmRJbmRleCA+PSBtX21vZHVsZS0+Z2xvYmFscy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9tb2R1bGUtPmdsb2JhbHNb
ZXhwLmtpbmRJbmRleF0ubXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6
IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwLmtpbmRJbmRleCA+PSBtX3Jl
c3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFz
IGludmFsaWQgZ2xvYmFsIG51bWJlciAiLCBleHAua2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhl
IGdsb2JhbHMgY291bnQgIiwgbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKSwgIiwgbmFt
ZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbZXhwLmtpbmRJbmRleF0ubXV0YWJpbGl0eSAhPSBH
bG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGlzbid0IGltbXV0YWJs
ZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIG1fbW9kdWxlLT5leHBvcnRzLnVuY2hlY2tlZEFw
cGVuZChleHApOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBw
ZW5kKGV4cCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlU3RhcnQoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBh
cnNlU3RhcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3Qgc3RhcnRGdW5jdGlv
bkluZGV4OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KQotICAg
ICAgICB8fCBzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtX2Z1
bmN0aW9uSW5kZXhTcGFjZVtzdGFydEZ1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZTsKLSAgICBpZiAo
c2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpICE9IDAKLSAgICAgICAgfHwgc2lnbmF0dXJlLT5y
ZXR1cm5UeXBlICE9IFZvaWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vZHVsZS0+
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5j
dGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRleCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZS5z
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpKTsK
KyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1fcmVzdWx0LmZ1bmN0aW9uSW5kZXhTcGFjZVtz
dGFydEZ1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFz
aWduYXR1cmUtPmFyZ3VtZW50cy5pc0VtcHR5KCksICJTdGFydCBmdW5jdGlvbiBjYW4ndCBoYXZl
IGFyZ3VtZW50cyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLT5yZXR1cm5U
eXBlICE9IFZvaWQsICJTdGFydCBmdW5jdGlvbiBjYW4ndCByZXR1cm4gYSB2YWx1ZSIpOworICAg
IG1fcmVzdWx0Lm1vZHVsZS0+c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9u
SW5kZXg7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRWxl
bWVudCgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3Vs
dAogewotICAgIGlmICghbV9oYXNUYWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faGFzVGFibGUsICJFbGVtZW50IHNlY3Rpb24gZXhwZWN0cyBh
IFRhYmxlIHRvIGJlIHByZXNlbnQiKTsKIAogICAgIHVpbnQzMl90IGVsZW1lbnRDb3VudDsKLSAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGVsZW1lbnRDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fbW9kdWxlLT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVu
dENvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGVsZW1lbnRDb3VudDsgKytpKSB7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBj
b3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzIGNvdW50IGlz
IHRvbyBiaWcgIiwgZWxlbWVudENvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jl
c3VsdC5tb2R1bGUtPmVsZW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBlbGVtZW50Q291bnQsICIgRWxlbWVudHMiKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnROdW0gPSAwOyBlbGVtZW50TnVtIDwgZWxlbWVudENv
dW50OyArK2VsZW1lbnROdW0pIHsKICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleDsKLSAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IG9uZSB0YWJsZSBmb3Igbm93LgotICAg
ICAgICBpZiAodGFibGVJbmRleCAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAg
ICAgICAgIHVpbnQ2NF90IG9mZnNldDsKICAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAg
ICAgICBpZiAoIXBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgb2Zmc2V0KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoaW5pdE9wY29kZSAhPSBPcFR5cGU6OkkzMkNv
bnN0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIHVpbnQzMl90IGluZGV4
Q291bnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgQVNTRVJUKCEhbV9tb2R1bGUtPnRhYmxlSW5m
b3JtYXRpb24pOwotICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSA9
IG1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgeworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBl
bGVtZW50TnVtLCAidGggRWxlbWVudCB0YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHRhYmxlSW5kZXgsICJFbGVtZW50IHNlY3Rpb24gY2FuIG9ubHkgaGF2ZSBvbmUg
VGFibGUgZm9yIG5vdyIpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
SW5pdEV4cHIoaW5pdE9wY29kZSwgb2Zmc2V0KSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoaW5pdE9wY29kZSAhPSBPcFR5cGU6OkkzMkNvbnN0LCAiRWxlbWVudCBzZWN0aW9uIGRvZXNu
J3Qgc3VwcG9ydCBub24taTMyIGluaXRfZXhwciBvcGNvZGUgZm9yIG5vdywgZ290ICIsIGluaXRP
cGNvZGUpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRl
eENvdW50KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgZm9yIEVs
ZW1lbnQgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4Q291bnQg
PT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9u
J3MgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwgaW5kZXhDb3Vu
dCk7CisKKyAgICAgICAgQVNTRVJUKCEhbV9yZXN1bHQubW9kdWxlLT50YWJsZUluZm9ybWF0aW9u
KTsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0gPSBtX3Jlc3Vs
dC5tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogc2hvdWxkIGluZGV4Q291bnQgYmVpbmcgemVybyBiZSBhIHZhbGlkYXRpb24gZXJyb3I/
CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1ODI2CiAgICAgICAgICAgICBpZiAoaW5kZXhDb3VudCkgewpAQCAtNTk0LDE4NSArNDYyLDE0
OCBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkKICAgICAgICAgICAgICAgICAv
LyBTaG91bGQgdGhleSBiZSB0aG91Z2g/CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTgyNwogICAgICAgICAgICAgICAgIHVpbnQ2
NF90IGxhc3RXcml0dGVuSW5kZXggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXhDb3VudCkg
KyBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSAtIDE7Ci0gICAgICAgICAgICAgICAgaWYg
KGxhc3RXcml0dGVuSW5kZXggPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KCptYXhpbXVtKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYobGFzdFdyaXR0ZW5JbmRleCA+PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKm1h
eGltdW0pLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQgd3Jp
dGVzIHRvIGluZGV4ICIsIGxhc3RXcml0dGVuSW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbWF4
aW11bSAiLCAqbWF4aW11bSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBF
bGVtZW50IGVsZW1lbnQ7Ci0gICAgICAgIGlmICghZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGluZGV4Q291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy50cnlS
ZXNlcnZlQ2FwYWNpdHkoaW5kZXhDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIs
IGluZGV4Q291bnQsICIgRWxlbWVudCBpbmRpY2VzIik7CiAKICAgICAgICAgZWxlbWVudC5vZmZz
ZXQgPSBvZmZzZXQ7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4Q291
bnQ7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRl
eENvdW50OyArK2luZGV4KSB7CiAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4Owot
ICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4ID49
IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5j
dGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAi
dGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4U3BhY2Uu
c2l6ZSgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQncyAi
LCBpbmRleCwgInRoIGluZGV4IGlzICIsIGZ1bmN0aW9uSW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugc2l6ZSBvZiAiLCBtX3Jlc3VsdC5mdW5jdGlvbkluZGV4
U3BhY2Uuc2l6ZSgpKTsKIAogICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5j
aGVja2VkQXBwZW5kKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tb2R1
bGUtPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICAgICAg
bV9yZXN1bHQubW9kdWxlLT5lbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpCithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2Rl
KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFy
c2VWYXJVSW50MzIoY291bnQpCi0gICAgICAgIHx8IGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKQotICAgICAgICB8fCBjb3VudCAhPSBtX2Z1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9u
J3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBi
aWcgIiwgY291bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9yZXN1bHQu
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBj
b3VudCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1fcmVz
dWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOwogCiAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXpl
OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkKLSAgICAgICAgICAg
IHx8IGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpCi0gICAgICAgICAgICB8fCBmdW5jdGlvblNpemUg
PiBsZW5ndGgoKSAtIG1fb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLnN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAg
ICAgIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rp
b25TaXplOwotICAgICAgICBtX29mZnNldCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ld
LmVuZDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rp
b25TaXplKSwgImNhbid0IGdldCAiLCBpLCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUg
ZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBz
aXplICIsIGxlbmd0aCgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNp
emUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rp
b25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkg
LSBtX29mZnNldCk7CisKKyAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
W2ldLnN0YXJ0ID0gbV9vZmZzZXQ7CisgICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeVtpXS5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKKyAgICAgICAgbV9vZmZz
ZXQgPSBtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kOwogICAgIH0KIAot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2Vy
OjpwYXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51
bWJlcikKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwg
dWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlcikgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGlm
ICghcGFyc2VVSW50OChvcGNvZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidz
IG9wY29kZSIpOwogCiAgICAgc3dpdGNoIChvcGNvZGUpIHsKICAgICBjYXNlIEkzMkNvbnN0OiB7
CiAgICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJJbnQzMihj
b25zdGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZh
bHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVt
YmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgY2FzZSBJNjRDb25zdDogewogICAgICAgICBpbnQ2NF90IGNvbnN0YW50Owot
ICAgICAgICBpZiAoIXBhcnNlVmFySW50NjQoY29uc3RhbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDY0KGNvbnN0
YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTY0LmNvbnN0
Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIEYzMkNvbnN0OiB7CiAgICAgICAgIHVpbnQzMl90IGNvbnN0
YW50OwotICAgICAgICBpZiAoIXBhcnNlVUludDMyKGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIoY29u
c3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmMzIuY29u
c3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgRjY0Q29uc3Q6IHsKICAgICAgICAgdWludDY0X3QgY29u
c3RhbnQ7Ci0gICAgICAgIGlmICghcGFyc2VVSW50NjQoY29uc3RhbnQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChj
b25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5j
b25zdCIpOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRHbG9iYWw6IHsKICAgICAgICAgdWludDMyX3Qg
aW5kZXg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChpbmRleCA+PSBtX21vZHVsZS0+aW1wb3J0cy5z
aXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbnN0IEltcG9ydCYg
aW1wb3J0ID0gbV9tb2R1bGUtPmltcG9ydHNbaW5kZXhdOwotICAgICAgICBpZiAobV9tb2R1bGUt
PmltcG9ydHNbaW5kZXhdLmtpbmQgIT0gRXh0ZXJuYWw6Okdsb2JhbAotICAgICAgICAgICAgfHwg
aW1wb3J0LmtpbmRJbmRleCA+PSBtX21vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGdldF9nbG9iYWwncyBpbmRleCIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0cy5z
aXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVy
IG9mIGltcG9ydHMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnNpemUoKSk7CisgICAgICAg
IGNvbnN0IEltcG9ydCYgaW1wb3J0ID0gbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHNbaW5k
ZXhdLmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpHbG9iYWwsICJnZXRfZ2xvYmFsJ3MgaW1wb3J0IGtp
bmQgaXMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kLCAiIHNob3VsZCBi
ZSBnbG9iYWwiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnQua2luZEluZGV4
ID49IG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1w
b3J0IGtpbmQgaW5kZXggIiwgaW1wb3J0LmtpbmRJbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBp
bnRlcm5hbCBnbG9iYWwgIiwgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsKTsK
IAotICAgICAgICBBU1NFUlQobV9tb2R1bGUtPmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0
YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5t
b2R1bGUtPmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6Oklt
bXV0YWJsZSk7CiAKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmYWxzZSwgInVua25vd24gaW5pdF9leHByIG9wY29k
ZSAiLCBvcGNvZGUpOwogICAgIH0KIAogICAgIHVpbnQ4X3QgZW5kT3Bjb2RlOwotICAgIGlmICgh
cGFyc2VVSW50OChlbmRPcGNvZGUpIHx8IGVuZE9wY29kZSAhPSBPcFR5cGU6OkVuZCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5k
T3Bjb2RlKSwgImNhbid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxk
IGVuZCB3aXRoIGVuZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOwogCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFs
VHlwZShHbG9iYWwmIGdsb2JhbCkKK2F1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUo
R2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50OF90IG11dGFiaWxp
dHk7Ci0gICAgaWYgKCFwYXJzZVZhbHVlVHlwZShnbG9iYWwudHlwZSkgfHwgIXBhcnNlVmFyVUlu
dDEobXV0YWJpbGl0eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhbHVlVHlwZShnbG9iYWwudHlwZSksICJjYW4ndCBnZXQgR2xvYmFsJ3Mg
dmFsdWUgdHlwZSIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEobXV0
YWJpbGl0eSksICJjYW4ndCBnZXQgR2xvYmFsIHR5cGUncyBtdXRhYmlsaXR5Iik7CiAgICAgZ2xv
YmFsLm11dGFiaWxpdHkgPSBzdGF0aWNfY2FzdDxHbG9iYWw6Ok11dGFiaWxpdHk+KG11dGFiaWxp
dHkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZURhdGEoKQorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7Ci0gICAgaWYgKCFtX21v
ZHVsZS0+bWVtb3J5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihzZWdtZW50Q291bnQpCi0gICAgICAgIHx8IHNlZ21lbnRDb3VudCA9PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkKLSAgICAgICAgfHwgIW1fbW9kdWxlLT5kYXRhLnRy
eVJlc2VydmVDYXBhY2l0eShzZWdtZW50Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiICBzZWdtZW50czogIiwgc2VnbWVu
dENvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPm1lbW9y
eSwgIkRhdGEgc2VjdGlvbiBjYW5ub3QgZXhpc3Qgd2l0aG91dCBhIE1lbW9yeSBzZWN0aW9uIG9y
IEltcG9ydCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNlZ21l
bnRDb3VudCksICJjYW4ndCBnZXQgRGF0YSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHNlZ21lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJEYXRhIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3Vu
dCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5kYXRhLnRyeVJl
c2VydmVDYXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgRGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7CiAKICAg
ICBmb3IgKHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVu
dENvdW50OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nTG4oIiAgc2VnbWVudCAjIiwgc2VnbWVudE51bWJlcik7CiAgICAgICAgIHVp
bnQzMl90IGluZGV4OwogICAgICAgICB1aW50NjRfdCBvZmZzZXQ7CiAgICAgICAgIHVpbnQ4X3Qg
aW5pdE9wY29kZTsKICAgICAgICAgdWludDMyX3QgZGF0YUJ5dGVMZW5ndGg7Ci0gICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoaW5kZXgpCi0gICAgICAgICAgICB8fCBpbmRleCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIXBhcnNlSW5pdEV4cHIoaW5pdE9wY29k
ZSwgb2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoaW5p
dE9wY29kZSAhPSBPcFR5cGU6OkkzMkNvbnN0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCIgICAgb2Zmc2V0
OiAiLCBvZmZzZXQpOwogCi0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5n
dGgpCi0gICAgICAgICAgICB8fCBkYXRhQnl0ZUxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCIgICAgZGF0YSBieXRlczogIiwgZGF0
YUJ5dGVMZW5ndGgpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihpbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdz
IGluZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXgsIHNlZ21lbnROdW1i
ZXIsICJ0aCBEYXRhIHNlZ21lbnQgaGFzIG5vbi16ZXJvIGluZGV4ICIsIGluZGV4KTsKKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9m
ZnNldCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRPcGNvZGUgIT0gT3BUeXBl
OjpJMzJDb25zdCwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgb3Bjb2RlICIs
IGluaXRPcGNvZGUsICIgZXhwZWN0ZWQgaTMyLmNvbnN0Iik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNhbid0IGdldCAiLCBz
ZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0aCIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdz
IGRhdGEgYnl0ZSBsZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCk7CiAKICAgICAg
ICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6Om1ha2Uob2Zmc2V0LCBkYXRhQnl0ZUxlbmd0
aCk7Ci0gICAgICAgIGlmICghc2VnbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbV9tb2R1bGUtPmRhdGEudW5jaGVja2VkQXBwZW5kKFNlZ21lbnQ6Om1ha2VQdHIoc2Vn
bWVudCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVu
dCBvZiBzaXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5k
YXRhLnVuY2hlY2tlZEFwcGVuZChTZWdtZW50OjptYWtlUHRyKHNlZ21lbnQpKTsKICAgICAgICAg
Zm9yICh1aW50MzJfdCBkYXRhQnl0ZSA9IDA7IGRhdGFCeXRlIDwgZGF0YUJ5dGVMZW5ndGg7ICsr
ZGF0YUJ5dGUpIHsKICAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZTsKLSAgICAgICAgICAgIGlmICgh
cGFyc2VVSW50OChieXRlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIs
IGRhdGFCeXRlLCAidGggZGF0YSBieXRlIGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEg
c2VnbWVudCIpOwogICAgICAgICAgICAgc2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOwot
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCIgICAg
WyIsIGRhdGFCeXRlLCAiXSA9ICIsIHNlZ21lbnQtPmJ5dGUoZGF0YUJ5dGUpKTsKICAgICAgICAg
fQogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5oCmluZGV4IGI3MTg3NDMuLjZhMjQzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTM0LDcgKzM0LDEzIEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIE1vZHVsZVBhcnNlciA6IHB1
YmxpYyBQYXJzZXIgeworc3RydWN0IE1vZHVsZVBhcnNlclJlc3VsdCB7CisgICAgc3RkOjp1bmlx
dWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGU7CisgICAgRnVuY3Rpb25JbmRleFNwYWNl
IGZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
PiBmdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7Cit9OworCitjbGFzcyBNb2R1bGVQYXJzZXIgOiBw
dWJsaWMgUGFyc2VyPE1vZHVsZVBhcnNlclJlc3VsdD4gewogcHVibGljOgogCiAgICAgTW9kdWxl
UGFyc2VyKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNl
TGVuZ3RoKQpAQCAtNDcsNTEgKzUzLDIzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQotICAgIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGZh
aWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwotICAgIH0KLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBt
X21vZHVsZTsKLSAgICB9Ci0KLSAgICBGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhT
cGFjZSgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAg
ICByZXR1cm4gbV9mdW5jdGlvbkluZGV4U3BhY2U7Ci0gICAgfQotCi0gICAgVmVjdG9yPEZ1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeT4mIGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSgpCi0gICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnk7Ci0gICAgfQorICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2UoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIHBhcnNlR2xvYmFsVHlwZShHbG9iYWwm
KTsKIAotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NS
SVBUSU9OKSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7CisjZGVmaW5l
IFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUihOQU1FLCBJRCwgREVTQ1JJUFRJT04pIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlICMjIE5BTUUoKTsKICAgICBGT1JfRUFD
SF9XQVNNX1NFQ1RJT04oV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKQogI3VuZGVmIFdBU01f
U0VDVElPTl9ERUNMQVJFX1BBUlNFUgogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VHbG9iYWxUeXBlKEdsb2JhbCYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9v
bCBpc0ltcG9ydCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VS
ZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
JiBtYXhpbXVtKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUlu
aXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYpOwogCiAgICAgVk0qIG1fdm07Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZTsKLSAgICBGdW5jdGlvbkluZGV4
U3BhY2UgbV9mdW5jdGlvbkluZGV4U3BhY2U7Ci0gICAgVmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeT4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7Ci0gICAgYm9vbCBtX2ZhaWxlZCB7
IHRydWUgfTsKKyAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1bHQ7CiAgICAgYm9vbCBtX2hh
c1RhYmxlIHsgZmFsc2UgfTsKLSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNl
ci5oCmluZGV4IDA4ZmFiYmYuLmQ2YWU4YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGFyc2VyLmgKQEAgLTMyLDEzICszMiwyOSBAQAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
ICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisjaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L0xFQkRlY29kZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CiAKK25hbWVzcGFjZSBGYWlsdXJlSGVscGVyIHsKKy8vIEZJWE1FIFdlIHNob3VsZCBtb3ZlIHRo
aXMgdG8gbWFrZVN0cmluZy4gSXQncyBpbiBpdHMgb3duIG5hbWVzcGFjZSB0byBlbmFibGUgQysr
IEFyZ3VtZW50IERlcGVuZGVudCBMb29rdXAgw6AgbGEgc3RkOjpzd2FwOiB1c2VyIGNvZGUgY2Fu
IGRlYmxhcmUgaXRzIG93biAiYm94RmFpbHVyZSIgYW5kIHRoZSBmYWlsKCkgaGVscGVyIHdpbGwg
ZmluZCBpdC4KK3N0YXRpYyBpbmxpbmUgYXV0byBtYWtlU3RyaW5nKGNvbnN0IGNoYXIgKmZhaWx1
cmUpIHsgcmV0dXJuIEFTQ0lJTGl0ZXJhbChmYWlsdXJlKTsgfQordGVtcGxhdGUgPHR5cGVuYW1l
IEludCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2ludGVncmFs
PEludD46OnZhbHVlPjo6dHlwZT4KK3N0YXRpYyBpbmxpbmUgYXV0byBtYWtlU3RyaW5nKEludCBm
YWlsdXJlKSB7IHJldHVybiBTdHJpbmc6Om51bWJlcihmYWlsdXJlKTsgfQorfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KIGNsYXNzIFBhcnNlciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBTdHJpbmcgRXJyb3JUeXBlOworICAgIHR5cGVkZWYgVW5leHBlY3RlZFR5cGU8RXJyb3JU
eXBlPiBVbmV4cGVjdGVkUmVzdWx0OworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JU
eXBlPiBQYXJ0aWFsUmVzdWx0OworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVy
cm9yVHlwZT4gUmVzdWx0OworCiBwcm90ZWN0ZWQ6CiAgICAgUGFyc2VyKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpOwogCkBAIC02MCwyNSArNzYsNDQgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXN1bHRUeXBlKFR5cGUmKTsKICAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZVZhbHVlVHlwZShUeXBlJik7Ci0gICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWw6OktpbmQmKTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmKTsKIAogICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAg
c2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CiAKICAgICBz
aXplX3QgbV9vZmZzZXQgPSAwOwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+Cisg
ICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwo
QXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1
cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlICIpLCBTdHJpbmc6Om51bWJlcihtX29m
ZnNldCksIEFTQ0lJTGl0ZXJhbCgiIC8gIiksIFN0cmluZzo6bnVtYmVyKG1fc291cmNlTGVuZ3Ro
KSwgQVNDSUlMaXRlcmFsKCI6ICIpLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAgfQorI2Rl
ZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICBpZiAo
VU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVy
biBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisK
KyNkZWZpbmUgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhoZWxwZXIpIGRvIHsgICBcCisgICAg
ICAgIGF1dG8gaGVscGVyUmVzdWx0ID0gaGVscGVyOyAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoVU5MSUtFTFkoIWhlbHBlclJlc3VsdCkpICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJl
dHVybiBoZWxwZXJSZXN1bHQuZ2V0VW5leHBlY3RlZCgpOyBcCisgICAgfSB3aGlsZSAoMCkKKwog
cHJpdmF0ZToKICAgICBjb25zdCB1aW50OF90KiBtX3NvdXJjZTsKICAgICBzaXplX3QgbV9zb3Vy
Y2VMZW5ndGg7CiB9OwogCi1BTFdBWVNfSU5MSU5FIFBhcnNlcjo6UGFyc2VyKGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJzZXIo
Y29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoKQogICAgIDog
bV9zb3VyY2Uoc291cmNlQnVmZmVyKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3Ro
KQogewogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lQ2hhcmFjdGVyKGNo
YXIgYykKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29s
IFBhcnNlcjxTdWNjZXNzVHlwZT46OmNvbnN1bWVDaGFyYWN0ZXIoY2hhciBjKQogewogICAgIGlm
IChtX29mZnNldCA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODksNyAr
MTI0LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZUNoYXJhY3RlcihjaGFy
IGMpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpj
b25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NU
eXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OmNvbnN1bWVTdHJp
bmcoY29uc3QgY2hhciogc3RyKQogewogICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9vZmZzZXQ7CiAg
ICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQpAQCAtMTAzLDcgKzEzOSw4IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciogc3RyKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lVVRGOFN0
cmluZyhTdHJpbmcmIHJlc3VsdCwgc2l6ZV90IHN0cmluZ0xlbmd0aCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFN1Y2Nlc3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46
OmNvbnN1bWVVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0LCBzaXplX3Qgc3RyaW5nTGVuZ3RoKQog
ewogICAgIGlmIChzdHJpbmdMZW5ndGggPT0gMCkgewogICAgICAgICByZXN1bHQgPSBlbXB0eVN0
cmluZygpOwpAQCAtMTE4LDI3ICsxNTUsMzIgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6
Y29uc3VtZVVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHQsIHNpemVfdCBzdHJpbmdMZW5ndGgKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYXJV
SW50MzIodWludDMyX3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgor
QUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFyVUludDMyKHVp
bnQzMl90JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUlu
dDMyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJz
ZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhclVJbnQ2NCh1aW50NjRfdCYgcmVzdWx0KQogewogICAg
IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQ2NChtX3NvdXJjZSwgbV9zb3VyY2VM
ZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2Vy
OjpwYXJzZVZhckludDMyKGludDMyX3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nl
c3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFy
SW50MzIoaW50MzJfdCYgcmVzdWx0KQogewogICAgIHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRl
Y29kZUludDMyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFySW50NjQoaW50NjRfdCYgcmVz
dWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wg
UGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYXJJbnQ2NChpbnQ2NF90JiByZXN1bHQpCiB7CiAg
ICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50NjQobV9zb3VyY2UsIG1fc291cmNl
TGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFBhcnNl
cjo6cGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nl
c3NUeXBlPgorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVUlu
dDMyKHVpbnQzMl90JiByZXN1bHQpCiB7CiAgICAgaWYgKGxlbmd0aCgpIDwgNCB8fCBtX29mZnNl
dCA+IGxlbmd0aCgpIC0gNCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ3LDcgKzE4OSw4
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDMyKHVpbnQzMl90JiByZXN1
bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBh
cnNlVUludDY0KHVpbnQ2NF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlw
ZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVVJbnQ2NCh1
aW50NjRfdCYgcmVzdWx0KQogewogICAgIGlmIChsZW5ndGgoKSA8IDggfHwgbV9vZmZzZXQgPiBs
ZW5ndGgoKSAtIDgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Niw3ICsxOTksOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ2NCh1aW50NjRfdCYgcmVzdWx0KQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJ
bnQ4KHVpbnQ4X3QmIHJlc3VsdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgorQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVUludDgodWludDhfdCYg
cmVzdWx0KQogewogICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTY0LDcgKzIwOCw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBh
cnNlVUludDgodWludDhfdCYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZUludDcoaW50OF90JiByZXN1bHQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5
cGU+OjpwYXJzZUludDcoaW50OF90JiByZXN1bHQpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ID49IGxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzMsNyArMjE4LDggQEAgQUxXQVlT
X0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VJbnQ3KGludDhfdCYgcmVzdWx0KQogICAgIHJldHVy
biAodiAmIDB4ODApID09IDA7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNl
VUludDcodWludDhfdCYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitB
TFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VVSW50Nyh1aW50OF90
JiByZXN1bHQpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xODEsNyArMjI3LDggQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6
cGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdCA8IDB4ODA7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDEodWludDhfdCYgcmVz
dWx0KQordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wg
UGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpCiB7CiAg
ICAgdWludDMyX3QgdGVtcDsKICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHRlbXApKQpAQCAtMTkw
LDcgKzIzNyw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDEodWlu
dDhfdCYgcmVzdWx0KQogICAgIHJldHVybiB0ZW1wIDw9IDE7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI6OnBhcnNlUmVzdWx0VHlwZShUeXBlJiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+
OjpwYXJzZVJlc3VsdFR5cGUoVHlwZSYgcmVzdWx0KQogewogICAgIGludDhfdCB2YWx1ZTsKICAg
ICBpZiAoIXBhcnNlSW50Nyh2YWx1ZSkpCkBAIC0yMDEsMTkgKzI0OSwyMSBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyOjpwYXJzZVJlc3VsdFR5cGUoVHlwZSYgcmVzdWx0KQogICAgIHJldHVy
biB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhbHVlVHlwZShU
eXBlJiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KK0FMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhbHVlVHlwZShUeXBlJiByZXN1bHQp
CiB7CiAgICAgcmV0dXJuIHBhcnNlUmVzdWx0VHlwZShyZXN1bHQpICYmIGlzVmFsdWVUeXBlKHJl
c3VsdCk7CiB9Ci0gICAgCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZUV4dGVybmFs
S2luZChFeHRlcm5hbDo6S2luZCYgcmVzdWx0KQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNz
VHlwZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZUV4dGVy
bmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkKIHsKICAgICB1aW50OF90IHZhbHVlOwogICAg
IGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IUV4dGVybmFsOjppc1ZhbGlkKHZhbHVlKSkKKyAgICBpZiAoIWlzVmFsaWRFeHRlcm5hbEtpbmQo
dmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
RXh0ZXJuYWw6OktpbmQ+KHZhbHVlKTsKKyAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFeHRlcm5h
bEtpbmQ+KHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IDY4MzI5ZTUuLjFjMGUwMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTYwLDIzICs2MCwxOCBAQCBQbGFuOjpQbGFu
KFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoKQogCiB2
b2lkIFBsYW46OnJ1bigpCiB7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigi
U3RhcnRpbmcgcGxhbi4iKTsKICAgICB7CiAgICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJz
ZXIobV92bSwgbV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAgaWYgKCFtb2R1bGVQ
YXJzZXIucGFyc2UoKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJQYXJzaW5nIG1vZHVsZSBmYWlsZWQ6ICIsIG1vZHVsZVBhcnNlci5lcnJv
ck1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1vZHVsZVBhcnNlci5l
cnJvck1lc3NhZ2UoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBwYXJzZVJl
c3VsdCA9IG1vZHVsZVBhcnNlci5wYXJzZSgpOworICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7
CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVycm9yKCk7CisgICAg
ICAgICAgICByZXR1cm47IC8vIEZJWE1FIHJldHVybiBhbiBFeHBlY3RlZC4KICAgICAgICAgfQot
ICAgICAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShtb2R1bGVQYXJzZXIubW9kdWxl
SW5mb3JtYXRpb24oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5ID0gV1RG
TW92ZShtb2R1bGVQYXJzZXIuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5KCkpOwotICAgICAgICBt
X2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplID0gbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5kZXhTcGFj
ZSgpLnNpemUoKTsKLSAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2UuYnVmZmVyID0gbW9kdWxl
UGFyc2VyLmZ1bmN0aW9uSW5kZXhTcGFjZSgpLnJlbGVhc2VCdWZmZXIoKTsKKyAgICAgICAgbV9t
b2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZSk7CisgICAgICAg
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5ID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+ZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5KTsKKyAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSA9
IHBhcnNlUmVzdWx0LT5mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0
aW9uSW5kZXhTcGFjZS5idWZmZXIgPSBwYXJzZVJlc3VsdC0+ZnVuY3Rpb25JbmRleFNwYWNlLnJl
bGVhc2VCdWZmZXIoKTsKICAgICB9Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dM
bigiUGFyc2VkIG1vZHVsZS4iKTsKIAogICAgIGF1dG8gdHJ5UmVzZXJ2ZUNhcGFjaXR5ID0gW3Ro
aXNdIChhdXRvJiB2ZWN0b3IsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiB3aGF0KSB7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkpIHsKQEAg
LTk3LDcgKzkyLDcgQEAgdm9pZCBQbGFuOjpydW4oKQogCiAgICAgZm9yICh1bnNpZ25lZCBpbXBv
cnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5z
aXplKCk7ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07Ci0gICAgICAgIGlmIChpbXBvcnQt
PmtpbmQgIT0gRXh0ZXJuYWw6OkZ1bmN0aW9uKQorICAgICAgICBpZiAoaW1wb3J0LT5raW5kICE9
IEV4dGVybmFsS2luZDo6RnVuY3Rpb24pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
dW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbVRvSlNTdHVicy5zaXplKCk7CiAg
ICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMTE3LDE5ICsxMTIsMjQgQEAgdm9pZCBQbGFuOjpydW4o
KQogICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21Ub0pTU3R1YnMu
c2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKICAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25JbmRleFNw
YWNlLmJ1ZmZlci5nZXQoKVtmdW5jdGlvbkluZGV4U3BhY2VdLnNpZ25hdHVyZSA9PSBzaWduYXR1
cmUpOwogCi0gICAgICAgIFN0cmluZyBlcnJvciA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9mdW5jdGlvbkluZGV4U3BhY2UsICpt
X21vZHVsZUluZm9ybWF0aW9uKTsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgeworICAg
ICAgICBhdXRvIHZhbGlkYXRlUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0
LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSwgKm1fbW9k
dWxlSW5mb3JtYXRpb24pOworICAgICAgICBpZiAoIXZhbGlkYXRlUmVzdWx0KSB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJh
d1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAi
KTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3I7CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IHZhbGlkYXRlUmVzdWx0LmVycm9yKCk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4K
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLnVuY2hlY2tlZEFwcGVuZChWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4o
KSk7Ci0gICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChwYXJz
ZUFuZENvbXBpbGUoKm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1
cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgpLCBtX2Z1bmN0aW9u
SW5kZXhTcGFjZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24pKTsKKyAgICAgICAgYXV0byBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoKm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0
aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24pOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCk7CisgICAg
ICAgICAgICByZXR1cm47IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KKyAgICAgICAg
fQorICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KSk7CiAgICAgICAgIG1fZnVuY3Rpb25JbmRleFNwYWNl
LmJ1ZmZlci5nZXQoKVtmdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUgPSBtX3dhc21JbnRlcm5hbEZ1
bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2VjdGlvbnMuaAppbmRleCA5OTYwNTI0Li41ZWU3YmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaApAQCAtNDIsMjEgKzQyLDQ0IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAgICAgbWFjcm8oQ29kZSwgICAgMTAsICJGdW5jdGlv
biBib2RpZXMgKGNvZGUpIikgXAogICAgIG1hY3JvKERhdGEsICAgIDExLCAiRGF0YSBzZWdtZW50
cyIpCiAKLXN0cnVjdCBTZWN0aW9ucyB7Ci0gICAgZW51bSBTZWN0aW9uIDogdWludDhfdCB7Citl
bnVtIGNsYXNzIFNlY3Rpb24gOiB1aW50OF90IHsKICNkZWZpbmUgREVGSU5FX1dBU01fU0VDVElP
Tl9FTlVNKE5BTUUsIElELCBERVNDUklQVElPTikgTkFNRSA9IElELAotICAgICAgICBGT1JfRUFD
SF9XQVNNX1NFQ1RJT04oREVGSU5FX1dBU01fU0VDVElPTl9FTlVNKQorICAgIEZPUl9FQUNIX1dB
U01fU0VDVElPTihERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0pCiAjdW5kZWYgREVGSU5FX1dBU01f
U0VDVElPTl9FTlVNCi0gICAgICAgIFVua25vd24KLSAgICB9OwotICAgIHN0YXRpYyBib29sIHZh
bGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQotICAgIHsKLSAgICAg
ICAgaWYgKHByZXZpb3VzID09IFVua25vd24pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKLSAgICB9CisgICAgVW5rbm93bgogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgSW50Pgorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTZWN0aW9u
KEludCBzZWN0aW9uKQoreworICAgIHN3aXRjaCAoc2VjdGlvbikgeworI2RlZmluZSBWQUxJREFU
RV9TRUNUSU9OKE5BTUUsIElELCBERVNDUklQVElPTikgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KFNl
Y3Rpb246Ok5BTUUpOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9O
KFZBTElEQVRFX1NFQ1RJT04pCisjdW5kZWYgVkFMSURBVEVfU0VDVElPTgorICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCB2
YWxpZGF0ZU9yZGVyKFNlY3Rpb24gcHJldmlvdXMsIFNlY3Rpb24gbmV4dCkKK3sKKyAgICBpZiAo
cHJldmlvdXMgPT0gU2VjdGlvbjo6VW5rbm93bikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHByZXZpb3VzKSA8IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KG5leHQpOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoU2Vj
dGlvbiBzZWN0aW9uKQoreworICAgIHN3aXRjaCAoc2VjdGlvbikgeworI2RlZmluZSBTVFJJTkdJ
RllfU0VDVElPTl9OQU1FKE5BTUUsIElELCBERVNDUklQVElPTikgY2FzZSBTZWN0aW9uOjpOQU1F
OiByZXR1cm4gI05BTUU7CisgICAgICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihTVFJJTkdJRllf
U0VDVElPTl9OQU1FKQorI3VuZGVmIFNUUklOR0lGWV9TRUNUSU9OX05BTUUKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
Ij8iOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFs
aWRhdGUuY3BwCmluZGV4IGY3OWJjNjMuLmQxYjU1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtNzEsNiArNzEsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIEJsb2NrVHlwZSBtX2Jsb2NrVHlwZTsKICAgICAgICAgVHlwZSBtX3NpZ25hdHVyZTsKICAg
ICB9OworICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsKKyAgICB0eXBlZGVmIFVuZXhwZWN0
ZWRUeXBlPEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsKKyAgICB0eXBlZGVmIEV4cGVjdGVk
PHZvaWQsIEVycm9yVHlwZT4gUmVzdWx0OwogICAgIHR5cGVkZWYgVHlwZSBFeHByZXNzaW9uVHlw
ZTsKICAgICB0eXBlZGVmIENvbnRyb2xEYXRhIENvbnRyb2xUeXBlOwogICAgIHR5cGVkZWYgVmVj
dG9yPEV4cHJlc3Npb25UeXBlLCAxPiBFeHByZXNzaW9uTGlzdDsKQEAgLTc4LDE0NCArODEsMTI5
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJl
c3Npb24gPSBWb2lkOwogCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRz
KGNvbnN0IFZlY3RvcjxUeXBlPiYpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExv
Y2FsKFR5cGUsIHVpbnQzMl90KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAg
ICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChB
cmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVy
ZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZyhBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiAiKSwgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAg
IH0KKyNkZWZpbmUgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBc
CisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlICgwKQorCisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVu
dHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQo
VHlwZSB0eXBlLCB1aW50NjRfdCkgeyByZXR1cm4gdHlwZTsgfQogCiAgICAgLy8gTG9jYWxzCi0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2Fs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisgICAgUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwogCiAgICAgLy8gR2xvYmFscwotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAKICAgICAvLyBNZW1vcnkKLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwogCiAgICAgLy8gQmFzaWMgb3Bl
cmF0b3JzCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9u
WmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHBy
ZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKIAogICAgIC8vIENvbnRyb2wgZmxvdwogICAgIENvbnRyb2xEYXRhIFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CiAgICAgQ29udHJvbERhdGEgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwotICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1
cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOwotICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYp
OworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29u
dHJvbERhdGEmKTsKIAotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3Rv
cjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Np
b25TdGFjayk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJs
ZShDb250cm9sRW50cnkmKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVy
bihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBj
b25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRU
YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRF
bmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwogCi0gICAgdm9pZCBhZGRVbnJlYWNoYWJs
ZSgpIHsgfQorICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKSB7
IHJldHVybiB7IH07IH0KIAogICAgIC8vIENhbGxzCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3Qg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVy
ZSosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOwotCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250
cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29u
c3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICBib29sIGhhc01lbW9yeSgpIGNv
bnN0IHsgcmV0dXJuICEhbV9tb2R1bGUubWVtb3J5OyB9CiAKLSAgICB2b2lkIHNldEVycm9yTWVz
c2FnZShTdHJpbmcmJiBtZXNzYWdlKSB7IEFTU0VSVChtX2Vycm9yTWVzc2FnZS5pc051bGwoKSk7
IG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShtZXNzYWdlKTsgfQotICAgIFN0cmluZyBlcnJvck1l
c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yTWVzc2FnZTsgfQogICAgIFZhbGlkYXRlKEV4
cHJlc3Npb25UeXBlIHJldHVyblR5cGUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGUp
CiAgICAgICAgIDogbV9yZXR1cm5UeXBlKHJldHVyblR5cGUpCiAgICAgICAgICwgbV9tb2R1bGUo
bW9kdWxlKQogICAgIHsKICAgICB9CiAKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRy
b2xFbnRyeT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworCiBwcml2YXRlOgotICAgIGJvb2wg
dW5pZnkoVHlwZSwgVHlwZSk7Ci0gICAgYm9vbCB1bmlmeShjb25zdCBFeHByZXNzaW9uTGlzdCYs
IGNvbnN0IENvbnRyb2xEYXRhJik7CisgICAgUmVzdWx0IHVuaWZ5KFR5cGUsIFR5cGUpOworICAg
IFJlc3VsdCB1bmlmeShjb25zdCBFeHByZXNzaW9uTGlzdCYsIGNvbnN0IENvbnRyb2xEYXRhJik7
CiAKLSAgICBib29sIGNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xEYXRhJiB0YXJnZXQsIGNvbnN0
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJlc3VsdCBjaGVja0JyYW5j
aFRhcmdldChDb250cm9sRGF0YSYgdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIG1fcmV0dXJuVHlwZTsKICAgICBWZWN0
b3I8VHlwZT4gbV9sb2NhbHM7Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBtX21vZHVsZTsKIH07CiAKLWJvb2wgVmFsaWRhdGU6OmFkZEFy
Z3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCithdXRvIFZhbGlkYXRlOjphZGRBcmd1
bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmdzKSAtPiBSZXN1bHQKIHsKLSAgICBmb3IgKFR5
cGUgYXJnIDogYXJncykgewotICAgICAgICBpZiAoIWFkZExvY2FsKGFyZywgMSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIGZvciAoVHlw
ZSBhcmcgOiBhcmdzKQorICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGFkZExvY2Fs
KGFyZywgMSkpOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZExvY2Fs
KFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpCithdXRvIFZhbGlkYXRlOjphZGRMb2NhbChUeXBl
IHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoIW1fbG9jYWxzLnRy
eVJlc2VydmVDYXBhY2l0eShtX2xvY2Fscy5zaXplKCkgKyBjb3VudCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fbG9jYWxzLnNpemUoKSArIGNvdW50OworICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaXpl
KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgc2l6ZSwgIiBsb2NhbHMiKTsKIAogICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICBtX2xvY2Fscy51
bmNoZWNrZWRBcHBlbmQodHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsK
IH0KIAotYm9vbCBWYWxpZGF0ZTo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpCithdXRvIFZhbGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGluZGV4IDwgbV9sb2Nh
bHMuc2l6ZSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIG1fZXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJB
dHRlbXB0IHRvIHVzZSB1bmtub3duIGxvY2FsLiIpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbG9jYWxzLnNpemUoKSwgImF0dGVtcHQg
dG8gdXNlIHVua25vd24gbG9jYWwgIiwgaW5kZXgsICIgbGFzdCBvbmUgaXMgIiwgbV9sb2NhbHMu
c2l6ZSgpKTsKKyAgICByZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF07CisgICAgcmV0dXJuIHsgfTsK
IH0KIAotYm9vbCBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlIHZhbHVlKQorYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSBsb2NhbFR5
cGU7Ci0gICAgaWYgKCFnZXRMb2NhbChpbmRleCwgbG9jYWxUeXBlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGxvY2FsVHlwZSA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHQgdG8gc2V0IGxv
Y2FsIHdpdGggdHlwZTogIiwgdG9TdHJpbmcobG9jYWxUeXBlKSwgIiB3aXRoIGEgdmFyaWFibGUg
b2YgdHlwZTogIiwgdG9TdHJpbmcodmFsdWUpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhnZXRMb2NhbChpbmRleCwgbG9jYWxUeXBlKSk7CisgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihsb2NhbFR5cGUgIT0gdmFsdWUsICJzZXRfbG9jYWwgdG8g
dHlwZSAiLCB2YWx1ZSwgIiBleHBlY3RlZCAiLCBsb2NhbFR5cGUpOworICAgIHJldHVybiB7IH07
CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGluZGV4IDwgbV9t
b2R1bGUuZ2xvYmFscy5zaXplKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9tb2R1bGUuZ2xvYmFs
c1tpbmRleF0udHlwZTsKLSAgICAgICAgQVNTRVJUKGlzVmFsdWVUeXBlKHJlc3VsdCkpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkF0dGVtcHQgdG8gdXNlIHVua25vd24gZ2xvYmFsLiIpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6
ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMg
IiwgbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpOworICAgIHJlc3VsdCA9IG1fbW9kdWxlLmdsb2Jh
bHNbaW5kZXhdLnR5cGU7CisgICAgQVNTRVJUKGlzVmFsdWVUeXBlKHJlc3VsdCkpOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpCithdXRvIFZhbGlkYXRlOjpzZXRHbG9iYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoaW5kZXgg
Pj0gbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gdXNlIHVua25vd24gZ2xvYmFsLiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLm11
dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gc3RvcmUgdG8gaW1tdXRhYmxlIGdsb2JhbC4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KGluZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpLCAic2V0X2dsb2JhbCAiLCBpbmRleCwg
IiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkp
OworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9tb2R1bGUuZ2xvYmFsc1tpbmRleF0ubXV0
YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgaXMg
aW1tdXRhYmxlIik7CiAKICAgICBFeHByZXNzaW9uVHlwZSBnbG9iYWxUeXBlID0gbV9tb2R1bGUu
Z2xvYmFsc1tpbmRleF0udHlwZTsKICAgICBBU1NFUlQoaXNWYWx1ZVR5cGUoZ2xvYmFsVHlwZSkp
OwotICAgIGlmIChnbG9iYWxUeXBlID09IHZhbHVlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdCB0byBzZXQgZ2xvYmFsIHdp
dGggdHlwZTogIiwgdG9TdHJpbmcoZ2xvYmFsVHlwZSksICIgd2l0aCBhIHZhcmlhYmxlIG9mIHR5
cGU6ICIsIHRvU3RyaW5nKHZhbHVlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYoZ2xvYmFsVHlwZSAhPSB2YWx1ZSwgInNldF9nbG9iYWwgIiwgaW5kZXgs
ICIgd2l0aCB0eXBlICIsIGdsb2JhbFR5cGUsICIgd2l0aCBhIHZhcmlhYmxlIG9mIHR5cGUgIiwg
dmFsdWUpOworICAgIHJldHVybiB7IH07CiB9CiAKIFZhbGlkYXRlOjpDb250cm9sVHlwZSBWYWxp
ZGF0ZTo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCkBAIC0yMjgsMjA5ICsyMTYsMTI5IEBAIFZh
bGlkYXRlOjpDb250cm9sVHlwZSBWYWxpZGF0ZTo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSkKICAg
ICByZXR1cm4gQ29udHJvbERhdGEoQmxvY2tUeXBlOjpMb29wLCBzaWduYXR1cmUpOwogfQogCi1i
b29sIFZhbGlkYXRlOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNz
aW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KQorYXV0byBWYWxpZGF0ZTo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
RXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGNvbmRpdGlvbiAhPSBJMzIpIHsKLSAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIHVzZSAiLCB0
b1N0cmluZyhjb25kaXRpb24pLCAiIGFzIHRoZSBjb25kaXRpb24gZm9yIHNlbGVjdCIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG5vblplcm8gIT0gemVybykgewot
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIlJlc3VsdCB0eXBlcyBvZiBzZWxl
Y3QgZG9uJ3QgbWF0Y2guIEdvdDogIiwgdG9TdHJpbmcobm9uWmVybyksICIgYW5kICIsIHRvU3Ry
aW5nKHplcm8pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQorICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9IEkzMiwgInNlbGVjdCBjb25kaXRpb24gbXVzdCBi
ZSBpMzIsIGdvdCAiLCBjb25kaXRpb24pOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobm9u
WmVybyAhPSB6ZXJvLCAic2VsZWN0IHJlc3VsdCB0eXBlcyBtdXN0IG1hdGNoLCBnb3QgIiwgbm9u
WmVybywgIiBhbmQgIiwgemVybyk7CiAgICAgcmVzdWx0ID0gemVybzsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRJZihFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KQorYXV0
byBWYWxpZGF0ZTo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVy
ZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKGNvbmRpdGlvbiAh
PSBJMzIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5n
IHRvIHVzZSAiLCB0b1N0cmluZyhjb25kaXRpb24pLCAiIGFzIHRoZSBjb25kaXRpb24gZm9yIGFu
IGlmIGJsb2NrIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gSTMyLCAiaWYgY29uZGl0aW9uIG11c3QgYmUgaTMy
LCBnb3QgIiwgY29uZGl0aW9uKTsKICAgICByZXN1bHQgPSBDb250cm9sRGF0YShCbG9ja1R5cGU6
OklmLCBzaWduYXR1cmUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAK
LWJvb2wgVmFsaWRhdGU6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiB2YWx1ZXMpCithdXRvIFZhbGlkYXRlOjphZGRFbHNlKENvbnRyb2xUeXBlJiBj
dXJyZW50LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgdmFsdWVzKSAtPiBSZXN1bHQKIHsKLSAgICBp
ZiAoIXVuaWZ5KHZhbHVlcywgY3VycmVudCkpIHsKLSAgICAgICAgQVNTRVJUKGVycm9yTWVzc2Fn
ZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQorICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFModW5pZnkodmFsdWVzLCBjdXJyZW50KSk7CiAgICAgcmV0dXJuIGFkZEVsc2VU
b1VucmVhY2hhYmxlKGN1cnJlbnQpOwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRFbHNlVG9VbnJl
YWNoYWJsZShDb250cm9sVHlwZSYgY3VycmVudCkKK2F1dG8gVmFsaWRhdGU6OmFkZEVsc2VUb1Vu
cmVhY2hhYmxlKENvbnRyb2xUeXBlJiBjdXJyZW50KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoY3Vy
cmVudC50eXBlKCkgIT0gQmxvY2tUeXBlOjpJZikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIGVsc2UgYmxvY2sgdG8gc29tZXRoaW5nIG90
aGVyIHRoYW4gYW4gaWYiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQorICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoY3VycmVudC50eXBlKCkgIT0gQmxvY2tUeXBlOjpJZiwgImVs
c2UgYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhbiBpZiIpOwogICAgIGN1cnJlbnQgPSBDb250
cm9sRGF0YShCbG9ja1R5cGU6OkJsb2NrLCBjdXJyZW50LnNpZ25hdHVyZSgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRSZXR1cm4o
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKK2F1dG8gVmFsaWRhdGU6OmFkZFJl
dHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBSZXN1bHQKIHsKICAg
ICBpZiAobV9yZXR1cm5UeXBlID09IFZvaWQpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpID09IDEpOwotCi0g
ICAgaWYgKG1fcmV0dXJuVHlwZSA9PSByZXR1cm5WYWx1ZXNbMF0pCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFk
ZCByZXR1cm4gd2l0aCB0eXBlOiAiLCB0b1N0cmluZyhyZXR1cm5WYWx1ZXNbMF0pLCAiIGJ1dCBm
dW5jdGlvbiBleHBlY3RzIHJldHVybiB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKG1fcmV0dXJuVHlw
ZSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fcmV0
dXJuVHlwZSAhPSByZXR1cm5WYWx1ZXNbMF0sICJyZXR1cm4gdHlwZSAiLCByZXR1cm5WYWx1ZXNb
MF0sICIgZG9lc24ndCBtYXRjaCBmdW5jdGlvbidzIHJldHVybiB0eXBlICIsIG1fcmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6Y2hlY2tCcmFuY2hUYXJn
ZXQoQ29udHJvbFR5cGUmIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25T
dGFjaykKK2F1dG8gVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBlJiB0YXJn
ZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFJlc3VsdAogICAg
IHsKICAgICAgICAgaWYgKHRhcmdldC50eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIGlm
ICh0YXJnZXQuc2lnbmF0dXJlKCkgPT0gVm9pZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgICAgIGlmICghZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewotICAgICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGJyYW5jaCB0byBibG9jayB3
aXRoIGV4cGVjdGVkIHR5cGU6ICIsIHRvU3RyaW5nKHRhcmdldC5zaWduYXR1cmUoKSksICIgYnV0
IHRoZSBzdGFjayB3YXMgZW1wdHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBpZiAodGFyZ2V0LnNpZ25h
dHVyZSgpID09IGV4cHJlc3Npb25TdGFjay5sYXN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0
eSgpLCAiYnJhbmNoIHRvIGJsb2NrIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YXJnZXQuc2lnbmF0dXJlKCkgIT0gZXhwcmVzc2lv
blN0YWNrLmxhc3QoKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgZG9lc24ndCBtYXRjaCBibG9jaydz
IHR5cGUiKTsKIAotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRp
bmcgdG8gYnJhbmNoIHRvIGJsb2NrIHdpdGggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcodGFy
Z2V0LnNpZ25hdHVyZSgpKSwgIiBidXQgc3RhY2sgaGFzIHR5cGU6ICIsIHRvU3RyaW5nKHRhcmdl
dC5zaWduYXR1cmUoKSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCi1ib29sIFZhbGlkYXRlOjphZGRCcmFuY2goQ29udHJvbFR5cGUmIHRhcmdl
dCwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgc3RhY2sp
CithdXRvIFZhbGlkYXRlOjphZGRCcmFuY2goQ29udHJvbFR5cGUmIHRhcmdldCwgRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJlc3VsdAog
ewogICAgIC8vIFZvaWQgbWVhbnMgdGhpcyBpcyBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaC4KLSAg
ICBpZiAoY29uZGl0aW9uICE9IFZvaWQgJiYgY29uZGl0aW9uICE9IEkzMikgewotICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIGEgY29uZGl0aW9u
YWwgYnJhbmNoIHdpdGggY29uZGl0aW9uIHR5cGU6ICIsIHRvU3RyaW5nKGNvbmRpdGlvbiksICIg
YnV0IGV4cGVjdGVkIGkzMi4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQorICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9IFZvaWQgJiYgY29uZGl0aW9uICE9
IEkzMiwgImNvbmRpdGlvbmFsIGJyYW5jaCB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNvbmRp
dGlvbik7CiAgICAgcmV0dXJuIGNoZWNrQnJhbmNoVGFyZ2V0KHRhcmdldCwgc3RhY2spOwogfQog
Ci1ib29sIFZhbGlkYXRlOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJn
ZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCithdXRvIFZhbGlkYXRl
OjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJv
bERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFJlc3VsdAogewotICAgIGlmIChjb25kaXRp
b24gIT0gSTMyKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1w
dGluZyB0byBhZGQgYSBicl90YWJsZSB3aXRoIGNvbmRpdGlvbiB0eXBlOiAiLCB0b1N0cmluZyhj
b25kaXRpb24pLCAiIGJ1dCBleHBlY3RlZCBpMzIuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gSTMyLCAiYnJf
dGFibGUgd2l0aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25kaXRpb24pOwogCi0gICAgZm9yIChh
dXRvIHRhcmdldCA6IHRhcmdldHMpIHsKLSAgICAgICAgaWYgKGRlZmF1bHRUYXJnZXQuc2lnbmF0
dXJlKCkgIT0gdGFyZ2V0LT5zaWduYXR1cmUoKSkgewotICAgICAgICAgICAgbV9lcnJvck1lc3Nh
Z2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBhIGJyX3RhYmxlIHdpdGggZGlmZmVy
ZW50IGV4cGVjdGVkIHR5cGVzLiBEZWZhdWx0IHRhcmdldCBoYXMgdHlwZTogIiwgdG9TdHJpbmco
ZGVmYXVsdFRhcmdldC5zaWduYXR1cmUoKSksICIgYnV0IGNhc2UgaGFzIHR5cGU6ICIsIHRvU3Ry
aW5nKHRhcmdldC0+c2lnbmF0dXJlKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBmb3IgKGF1dG8gdGFyZ2V0IDogdGFyZ2V0cykKKyAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihkZWZhdWx0VGFyZ2V0LnNpZ25hdHVyZSgpICE9IHRhcmdl
dC0+c2lnbmF0dXJlKCksICJicl90YWJsZSB0YXJnZXQgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAg
cmV0dXJuIGNoZWNrQnJhbmNoVGFyZ2V0KGRlZmF1bHRUYXJnZXQsIGV4cHJlc3Npb25TdGFjayk7
CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJl
c3Npb25MaXN0JiBzdGFjaykKK2F1dG8gVmFsaWRhdGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYg
ZW50cnksIEV4cHJlc3Npb25MaXN0JiBzdGFjaykgLT4gUmVzdWx0CiB7CiAgICAgQ29udHJvbERh
dGEmIGJsb2NrID0gZW50cnkuY29udHJvbERhdGE7CiAgICAgaWYgKGJsb2NrLnNpZ25hdHVyZSgp
ID09IFZvaWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFzdGFjay5zaXplKCkp
IHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJCbG9jayBmYWxsdGhvdWdo
IGV4cGVjdGVkIHR5cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgdGhl
IHN0YWNrIHdhcyBlbXB0eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgaWYgKGJsb2NrLnNpZ25hdHVyZSgpID09IHN0YWNrLmxhc3Qo
KSkgewotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoYmxvY2su
c2lnbmF0dXJlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihzdGFjay5pc0VtcHR5KCksICJ0eXBlZCBibG9jayBmYWxscyB0aHJvdWdo
IG9uIGVtcHR5IHN0YWNrIik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihibG9jay5zaWdu
YXR1cmUoKSAhPSBzdGFjay5sYXN0KCksICJibG9jayBmYWxsdGhyb3VnaCBkb2Vzbid0IG1hdGNo
IGl0cyBkZWNsYXJlZCB0eXBlIik7CiAKLSAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmco
IkJsb2NrIGZhbGx0aHJvdWdoIGhhcyBleHBlY3RlZCB0eXBlOiAiLCB0b1N0cmluZyhibG9jay5z
aWduYXR1cmUoKSksICIgYnV0IHByb2R1Y2VkIHR5cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25h
dHVyZSgpKSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrLmFwcGVuZChibG9jay5zaWduYXR1cmUoKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
Ym9vbCBWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KQor
YXV0byBWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAt
PiBSZXN1bHQKIHsKICAgICBpZiAoZW50cnkuY29udHJvbERhdGEuc2lnbmF0dXJlKCkgIT0gVm9p
ZCkKICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGVudHJ5LmNv
bnRyb2xEYXRhLnNpZ25hdHVyZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCi1ib29sIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUq
IHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6OmFkZENhbGwodW5zaWduZWQsIGNvbnN0IFNp
Z25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKLSAgICBpZiAoc2lnbmF0dXJlLT5h
cmd1bWVudHMuc2l6ZSgpICE9IGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIkFyaXR5IG1pc21hdGNoIGluIGNhbGws
IGV4cGVjdGVkOiAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2lnbmF0dXJlLT5h
cmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBidXQgZ290OiAiKTsK
LSAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYXJncy5zaXplKCkpOwotICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNp
emUoKSAhPSBhcmdzLnNpemUoKSwgImFyaXR5IG1pc21hdGNoIGluIGNhbGwsIGdvdCAiLCBhcmdz
LnNpemUoKSwgIiBhcmd1bWVudHMsIGV4cGVjdGVkICIsIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNp
emUoKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoYXJnc1tpXSAhPSBzaWduYXR1cmUtPmFyZ3VtZW50c1tpXSkgewotICAg
ICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJFeHBlY3RlZCBhcmd1bWVudCB0
eXBlOiAiLCB0b1N0cmluZyhzaWduYXR1cmUtPmFyZ3VtZW50c1tpXSksICIgZG9lcyBub3QgbWF0
Y2ggcGFzc2VkIGFyZ3VtZW50IHR5cGU6ICIsIHRvU3RyaW5nKGFyZ3NbaV0pKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RihhcmdzW2ldICE9IHNpZ25hdHVyZS0+YXJndW1lbnRzW2ldLCAiYXJndW1lbnQgdHlwZSBtaXNt
YXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnc1tpXSwgIiwgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLT5h
cmd1bWVudHNbaV0pOwogCiAgICAgcmVzdWx0ID0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgVmFsaWRhdGU6OmFkZENh
bGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK2F1dG8gVmFsaWRhdGU6
OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0
CiB7CiAgICAgY29uc3QgYXV0byBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLT5hcmd1bWVudHMu
c2l6ZSgpOwotICAgIGlmIChhcmd1bWVudENvdW50ICE9IGFyZ3Muc2l6ZSgpIC0gMSkgewotICAg
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJBcml0
eSBtaXNtYXRjaCBpbiBjYWxsX2luZGlyZWN0LCBleHBlY3RlZDogIik7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTnVtYmVyKHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgYnV0IGdvdDogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KGFyZ3Muc2l6ZSgpKTsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBidWlsZGVyLnRvU3RyaW5n
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihhcmd1bWVudENvdW50ICE9IGFyZ3Muc2l6ZSgpIC0gMSwgImFyaXR5IG1pc21hdGNoIGlu
IGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmdzLnNpemUoKSAtIDEsICIgYXJndW1lbnRzLCBleHBl
Y3RlZCAiLCBhcmd1bWVudENvdW50KTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cmd1bWVudENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5h
cmd1bWVudHNbaV0pIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygi
RXhwZWN0ZWQgYXJndW1lbnQgdHlwZTogIiwgdG9TdHJpbmcoc2lnbmF0dXJlLT5hcmd1bWVudHNb
aV0pLCAiIGRvZXMgbm90IG1hdGNoIHBhc3NlZCBhcmd1bWVudCB0eXBlOiAiLCB0b1N0cmluZyhh
cmdzW2ldKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKKyAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmdzW2ldICE9IHNpZ25hdHVyZS0+YXJndW1lbnRzW2ld
LCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsX2luZGlyZWN0LCBnb3QgIiwgYXJnc1tp
XSwgIiwgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLT5hcmd1bWVudHNbaV0pOworCisgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRihhcmdzLmxhc3QoKSAhPSBJMzIsICJub24taTMyIGNhbGxfaW5kaXJl
Y3QgaW5kZXggIiwgYXJncy5sYXN0KCkpOwogCi0gICAgaWYgKGFyZ3MubGFzdCgpICE9IEkzMikg
ewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkV4cGVjdGVkIGNhbGxfaW5k
aXJlY3QgdGFyZ2V0IGluZGV4IHRvIGhhdmUgdHlwZTogaTMyIGJ1dCBnb3QgdHlwZTogIiwgdG9T
dHJpbmcoYXJncy5sYXN0KCkpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
ICAgICByZXN1bHQgPSBzaWduYXR1cmUtPnJldHVyblR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBWYWxpZGF0ZTo6dW5pZnkoY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHZhbHVlcywgY29uc3QgQ29udHJvbFR5cGUmIGJsb2NrKQorYXV0byBWYWxpZGF0ZTo6
dW5pZnkoY29uc3QgRXhwcmVzc2lvbkxpc3QmIHZhbHVlcywgY29uc3QgQ29udHJvbFR5cGUmIGJs
b2NrKSAtPiBSZXN1bHQKIHsKICAgICBBU1NFUlQodmFsdWVzLnNpemUoKSA8PSAxKTsKICAgICBp
ZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoIXZhbHVlcy5zaXplKCkpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3Ry
aW5nKCJCbG9jayBoYXMgbm9uLXZvaWQgc2lnbmF0dXJlIGJ1dCBoYXMgbm8gc3RhY2sgZW50cmll
cyBvbiBleGl0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBpZiAodmFsdWVzWzBdID09IGJsb2NrLnNpZ25hdHVyZSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVlcy5pc0VtcHR5
KCksICJub24tdm9pZCBibG9jayBlbmRzIHdpdGggYW4gZW1wdHkgc3RhY2siKTsKKyAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVlc1swXSAhPSBibG9jay5zaWduYXR1cmUoKSwgImNvbnRy
b2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlIik7CiAKLSAgICBtX2Vycm9yTWVz
c2FnZSA9IG1ha2VTdHJpbmcoIkV4cGVjdGVkIGNvbnRyb2wgZmxvdyB0byByZXR1cm4gdmFsdWUg
d2l0aCB0eXBlOiAiLCB0b1N0cmluZyhibG9jay5zaWduYXR1cmUoKSksICIgYnV0IGdvdCB2YWx1
ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHZhbHVlc1swXSkpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxD
b250cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKQpAQCAtNDM5LDIxICszNDcsMTIg
QEAgdm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0
IEV4cHJlc3Npb25MaXN0JikKICAgICAvLyBUaGluayBvZiB0aGlzIGFzIHBlbmFuY2UgZm9yIHRo
ZSBzaW4gb2YgYmFkIGVycm9yIG1lc3NhZ2VzLgogfQogCi1TdHJpbmcgdmFsaWRhdGVGdW5jdGlv
bihjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZSkKK0V4cGVjdGVkPHZvaWQs
IFN0cmluZz4gdmFsaWRhdGVGdW5jdGlvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBs
ZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBJbW11dGFibGVGdW5jdGlv
bkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFjZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZSkKIHsKICAgICBWYWxpZGF0ZSBjb250ZXh0KHNpZ25hdHVyZS0+cmV0dXJuVHlwZSwg
bW9kdWxlKTsKICAgICBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT4gdmFsaWRhdG9yKGNvbnRleHQs
IHNvdXJjZSwgbGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbW9kdWxlKTsK
LQotICAgIGlmICghdmFsaWRhdG9yLnBhcnNlKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGFkZCBi
ZXR0ZXIgbG9jYXRpb24gaW5mb3JtYXRpb24gaGVyZS4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0Mjg4Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
bmV2ZXIgbm90IGhhdmUgYW4gZXJyb3IgbWVzc2FnZSBpZiB3ZSByZXR1cm4gZmFsc2UuCi0gICAg
ICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDM1
NAotICAgICAgICBpZiAoY29udGV4dC5lcnJvck1lc3NhZ2UoKS5pc051bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiAiVW5rbm93biBlcnJvciI7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmVycm9y
TWVzc2FnZSgpOwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHZhbGlkYXRvci5wYXJzZSgpKTsKKyAgICByZXR1cm4geyB9OwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVmFsaWRhdGUuaAppbmRleCA4NjFmZDcyLi4xZjAwNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaApAQCAtMjgsMTAgKzI4LDExIEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgPHd0Zi9F
eHBlY3RlZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1TdHJpbmcg
dmFsaWRhdGVGdW5jdGlvbihjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUq
LCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9u
SW5kZXhTcGFjZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dl
bmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkKaW5k
ZXggODA0Y2IyMS4uNTk2ZDg1OSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFk
ZXIucHkKQEAgLTE4OSwxMCArMTg5LDEwIEBAIGRlZiBnZW5lcmF0ZVNpbXBsZUNvZGUob3ApOgog
ICAgIGFyZ3MgPSBbIkV4cHJlc3Npb25UeXBlIGFyZyIgKyBzdHIocGFyYW0pIGZvciBwYXJhbSBp
biByYW5nZShsZW4ob3Bjb2RlWyJwYXJhbWV0ZXIiXSkpXQogICAgIGFyZ3MuYXBwZW5kKCJFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0IikKICAgICByZXR1cm4gIiIiCi10ZW1wbGF0ZTw+IGJvb2wgQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjoiIiIgKyB3YXNtLnRvQ3BwKG9wWyJuYW1lIl0pICsg
Ij4oIiArICIsICIuam9pbihhcmdzKSArICIiIikKK3RlbXBsYXRlPD4gYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5hbWUiXSkgKyAiPigiICsg
IiwgIi5qb2luKGFyZ3MpICsgIiIiKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAiIiIgKyBnZW5lcmF0
ZUIzQ29kZShvcGNvZGUsIGIzb3ApICsgIiIiOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAiIiIKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
Z2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2Vu
ZXJhdGVXYXNtT3BzSGVhZGVyLnB5CmluZGV4IDAwZDI4MzguLjE1YzFmM2MgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKQEAg
LTE1MSw3ICsxNTEsNyBAQCBpbmxpbmUgQjM6OlR5cGUgdG9CM1R5cGUoVHlwZSB0eXBlKQogI3Vu
ZGVmIENSRUFURV9DQVNFCiAKICNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwg
aW5jKSBjYXNlIG5hbWU6IHJldHVybiAjbmFtZTsKLWlubGluZSBjb25zdCBjaGFyKiB0b1N0cmlu
ZyhUeXBlIHR5cGUpCitpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhUeXBlIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgRk9SX0VBQ0hfV0FTTV9UWVBFKENSRUFURV9DQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFs
aWRhdGVJbmxpbmVzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJh
dGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5CmluZGV4IDI1YTM5MmUuLjUyYjY2YjEgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRl
SW5saW5lc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0
ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkKQEAgLTYwLDE1ICs2MCwxMyBAQCBkZWYgdG9D
cHAobmFtZSk6CiBkZWYgdW5hcnlNYWNybyhuYW1lKToKICAgICBvcCA9IG9wY29kZXNbbmFtZV0K
ICAgICByZXR1cm4gIiIiCi10ZW1wbGF0ZTw+IGJvb2wgVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6
IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KQordGVtcGxhdGU8PiBhdXRvIFZhbGlkYXRlOjphZGRPcDxPcFR5cGU6OiIi
IiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKHZhbHVlICE9ICIiIiArIGNwcFR5cGUo
b3BbInBhcmFtZXRlciJdWzBdKSArICIiIikgewotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1h
a2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIiIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIG9mIHR5
cGU6ICIsIHRvU3RyaW5nKCIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIiks
ICIgYnV0IGdvdCBhIHZhbHVlIHdpdGggdHlwZTogIiwgdG9TdHJpbmcodmFsdWUpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkodmFsdWUgIT0gIiIiICsg
Y3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKKyAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5h
bWUgKyAiIiIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwogCiAgICAgcmVzdWx0ID0gIiIiICsgY3Bw
VHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAiIiIKIApAQCAtNzYsMjAgKzc0LDE2IEBAIHRlbXBsYXRlPD4gYm9vbCBWYWxp
ZGF0ZTo6YWRkT3A8T3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5
cGUKIGRlZiBiaW5hcnlNYWNybyhuYW1lKToKICAgICBvcCA9IG9wY29kZXNbbmFtZV0KICAgICBy
ZXR1cm4gIiIiCi10ZW1wbGF0ZTw+IGJvb2wgVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsg
dG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQordGVtcGxhdGU8PiBhdXRvIFZhbGlkYXRlOjph
ZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0
CiB7Ci0gICAgaWYgKGxlZnQgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsg
IiIiKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUg
KyAiIiIgZXhwZWN0cyB0aGUgbGVmdCB2YWx1ZSB0byBiZSBvZiB0eXBlOiAiLCB0b1N0cmluZygi
IiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpLCAiIGJ1dCBnb3QgYSB2YWx1
ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKGxlZnQpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKyAgICBpZiAoVU5MSUtFTFkobGVmdCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0
ZXIiXVswXSkgKyAiIiIpKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpF
cnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBsZWZ0IHZhbHVl
IHR5cGUgbWlzbWF0Y2giKTsKIAotICAgIGlmIChyaWdodCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJw
YXJhbWV0ZXIiXVsxXSkgKyAiIiIpIHsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3Ry
aW5nKFwiIiIiICsgbmFtZSArICIiIiBleHBlY3RzIHRoZSByaWdodCB2YWx1ZSB0byBiZSBvZiB0
eXBlOiAiLCB0b1N0cmluZygiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIp
LCAiIGJ1dCBnb3QgYSB2YWx1ZSB3aXRoIHR5cGU6ICIsIHRvU3RyaW5nKHJpZ2h0KSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKHJpZ2h0ICE9ICIiIiAr
IGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKSArICIiIikpCisgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkVHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBu
YW1lICsgIiIiIHJpZ2h0IHZhbHVlIHR5cGUgbWlzbWF0Y2giKTsKIAogICAgIHJlc3VsdCA9ICIi
IiArIGNwcFR5cGUob3BbInJldHVybiJdWzBdKSArICIiIjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4geyB9OwogfQogIiIiCiAKQEAgLTk3LDEzICs5MSwxMSBAQCBkZWYgbG9hZE1hY3Jv
KG5hbWUpOgogICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQogICAgIHJldHVybiAiIiIKICAgICBjYXNl
IExvYWRPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiOiB7Ci0gICAgICAgIGlmIChwb2lu
dGVyICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIikgewotICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKFwiIiIiICsgbmFtZSArICIiIiBleHBl
Y3RzIHRoZSBwb2ludGVyIHRvIGJlIG9mIHR5cGU6ICIsIHRvU3RyaW5nKCIiIiArIGNwcFR5cGUo
b3BbInBhcmFtZXRlciJdWzBdKSArICIiIiksICIgYnV0IGdvdCBhIHZhbHVlIHdpdGggdHlwZTog
IiwgdG9TdHJpbmcocG9pbnRlcikpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9CisgICAgICAgIGlmIChVTkxJS0VMWShwb2ludGVyICE9ICIiIiArIGNwcFR5cGUob3BbInBh
cmFtZXRlciJdWzBdKSArICIiIikpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8
UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBw
b2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKIAogICAgICAgICByZXN1bHQgPSAiIiIgKyBjcHBUeXBl
KG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0iIiIKIAogCkBAIC0xMTEsMTcgKzEwMywxMyBAQCBkZWYgc3RvcmVN
YWNybyhuYW1lKToKICAgICBvcCA9IG9wY29kZXNbbmFtZV0KICAgICByZXR1cm4gIiIiCiAgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI6IHsKLSAgICAgICAgaWYg
KHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSB7Ci0g
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoXCIiIiIgKyBuYW1lICsgIiIi
IGV4cGVjdHMgdGhlIHBvaW50ZXIgdG8gYmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3Bw
VHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0
eXBlOiAiLCB0b1N0cmluZyhwb2ludGVyKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
VHlwZTxSZXN1bHQ6OkVycm9yVHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsg
IiIiIHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIpOwogCi0gICAgICAgIGlmICh2YWx1ZSAhPSAiIiIg
KyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsxXSkgKyAiIiIpIHsKLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gbWFrZVN0cmluZyhcIiIiIiArIG5hbWUgKyAiIiIgZXhwZWN0cyB0aGUgdmFs
dWUgdG8gYmUgb2YgdHlwZTogIiwgdG9TdHJpbmcoIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVy
Il1bMF0pICsgIiIiKSwgIiBidXQgZ290IGEgdmFsdWUgd2l0aCB0eXBlOiAiLCB0b1N0cmluZyh2
YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlm
IChVTkxJS0VMWSh2YWx1ZSAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsxXSkgKyAi
IiIpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPFJlc3VsdDo6RXJyb3JUeXBl
PigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUgdHlwZSBtaXNtYXRj
aCIpOwogCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0i
IiIKIAogCkBAIC0xNDEsMjAgKzEyOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCiAiIiIgKyB1bmFyeVNwZWNpYWxpemF0aW9ucyArIGJpbmFyeVNwZWNpYWxpemF0aW9u
cyArICIiIgogCi1ib29sIFZhbGlkYXRlOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90KQorYXV0byBWYWxp
ZGF0ZTo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKCFoYXNNZW1v
cnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChVTkxJS0VMWSghaGFzTWVtb3J5
KCkpKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2
YWxpZGF0aW9uIGZhaWxlZDogbG9hZCBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwogCiAg
ICAgc3dpdGNoIChvcCkgewogIiIiICsgbG9hZENhc2VzICsgIiIiCiAgICAgfQogfQogCi1ib29s
IFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90KQorYXV0byBWYWxpZGF0ZTo6c3RvcmUoU3Rv
cmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVl
LCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAgaWYgKCFoYXNNZW1vcnkoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChVTkxJS0VMWSghaGFzTWVtb3J5KCkpKQorICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZFR5cGU8UmVzdWx0OjpFcnJvclR5cGU+KCJ2YWxpZGF0aW9uIGZhaWxl
ZDogc3RvcmUgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsKIAogICAgIHN3aXRjaCAob3Ap
IHsKICIiIiArIHN0b3JlQ2FzZXMgKyAiIiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CmluZGV4IGYwMGEyNjEuLjlkOTU5MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cApAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgICAgICBzd2l0Y2ggKGlt
cG9ydC5raW5kKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OkZ1bmN0aW9uOiB7Cisg
ICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewogICAgICAgICAgICAg
Ly8gNC4gSWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9ydDoKICAgICAgICAgICAgIC8vIGkuIElmIElz
Q2FsbGFibGUodikgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc0Z1bmN0aW9uKCkpCkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNT
dGF0ZSogZXgKICAgICAgICAgICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
OjpUYWJsZTogeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNUYWJsZUltcG9ydCk7IC8vIFRoaXMgc2hvdWxk
IGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCiAgICAgICAgICAgICAvLyA3
LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgogICAgICAgICAgICAgaGFzVGFibGVJ
bXBvcnQgPSB0cnVlOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4
CiAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sIHRhYmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTog
eworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CiAgICAgICAgICAg
ICAvLyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFoYXNNZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEg
dmFsaWRhdGlvbiBmYWlsdXJlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5KTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRl
KiBleAogICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Okds
b2JhbDogeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOiB7CiAgICAg
ICAgICAgICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9ydDoKICAgICAgICAgICAgIC8vIGku
IElmIGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRocm93IGEgVHlwZUVycm9yLgogICAg
ICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRl
eF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAKaW5kZXggYjAxNTRiZS4uMGM2ZDg4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMTA1LDcg
KzEwNSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0CiAgICAgZm9yIChjb25zdCBhdXRvJiBl
eHAgOiBtb2R1bGVJbmZvcm1hdGlvbi5leHBvcnRzKSB7CiAgICAgICAgIEpTVmFsdWUgZXhwb3J0
ZWRWYWx1ZTsKICAgICAgICAgc3dpdGNoIChleHAua2luZCkgewotICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsOjpGdW5jdGlvbjogeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
RnVuY3Rpb246IHsKICAgICAgICAgICAgIC8vIDEuIElmIGUgaXMgYSBjbG9zdXJlIGM6CiAgICAg
ICAgICAgICAvLyAgIGkuIElmIHRoZXJlIGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBP
YmplY3QgZnVuYyBpbiBmdW5jcyB3aG9zZSBmdW5jLltbQ2xvc3VyZV1dIGVxdWFscyBjLCB0aGVu
IHJldHVybiBmdW5jLgogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdy
YXBwZXIgaXMgY3JlYXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVu
IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIs
IGlmIHRoZSBpdGVtIHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1
bmN0aW9uIEV4b3RpYyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3
aWxsIGJlIGZvdW5kLiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywg
YSBuZXcgd3JhcHBlciB3aWxsIGJlIGNyZWF0ZWQuKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0CiAgICAgICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2
bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6VGFibGU6IHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6OlRhYmxlOiB7CiAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50
ZWVkIGJ5IG1vZHVsZSB2ZXJpZmljYXRpb24uCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnN0YW5jZS0+dGFibGUoKSk7IAogICAgICAgICAgICAgQVNTRVJUKGV4cC5raW5kSW5kZXggPT0g
MCk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
ayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QKICAgICAgICAg
ICAgIGV4cG9ydGVkVmFsdWUgPSBpbnN0YW5jZS0+dGFibGUoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTogeworICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CiAgICAgICAgICAgICAvLyBU
aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG1vZHVsZSB2ZXJpZmljYXRpb24uCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpbnN0YW5jZS0+bWVtb3J5KCkpOyAKICAgICAgICAgICAgIEFT
U0VSVChleHAua2luZEluZGV4ID09IDApOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0CiAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gaW5zdGFuY2UtPm1lbW9y
eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpF
eHRlcm5hbDo6R2xvYmFsOiB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9i
YWw6IHsKICAgICAgICAgICAgIC8vIEFzc2VydDogdGhlIGdsb2JhbCBpcyBpbW11dGFibGUgYnkg
TVZQIHZhbGlkYXRpb24gY29uc3RyYWludC4KICAgICAgICAgICAgIGNvbnN0IFdhc206Okdsb2Jh
bCYgZ2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tleHAua2luZEluZGV4XTsKICAg
ICAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0
YWJsZSk7Ci0tIAoyLjEwLjEKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>