<?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>163796</bug_id>
          
          <creation_ts>2016-10-21 10:18:57 -0700</creation_ts>
          <short_desc>Rename WASM to Wasm</short_desc>
          <delta_ts>2016-10-21 12:17:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1242949</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-21 10:18:57 -0700</bug_when>
    <thetext>Rename WASM to Wasm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242950</commentid>
    <comment_count>1</comment_count>
      <attachid>292363</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-21 10:19:34 -0700</bug_when>
    <thetext>Created attachment 292363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242953</commentid>
    <comment_count>2</comment_count>
      <attachid>292364</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-21 10:21:37 -0700</bug_when>
    <thetext>Created attachment 292364
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242957</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-21 10:24:45 -0700</bug_when>
    <thetext>Attachment 292364 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:65:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:75:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/testWasm.cpp:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:125:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:161:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:173:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:143:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOps.h:237:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 16 in 26 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>1242993</commentid>
    <comment_count>4</comment_count>
      <attachid>292377</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-21 10:59:42 -0700</bug_when>
    <thetext>Created attachment 292377
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242997</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-21 11:02:25 -0700</bug_when>
    <thetext>Attachment 292377 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:65:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:75:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/testWasm.cpp:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:125:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:161:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:173:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/testWasm.cpp:177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:143:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOps.h:237:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 16 in 27 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>1243041</commentid>
    <comment_count>6</comment_count>
      <attachid>292377</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-21 12:17:07 -0700</bug_when>
    <thetext>Comment on attachment 292377
Patch for landing

Clearing flags on attachment: 292377

Committed r207693: &lt;http://trac.webkit.org/changeset/207693&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243042</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-21 12:17:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292363</attachid>
            <date>2016-10-21 10:19:34 -0700</date>
            <delta_ts>2016-10-21 10:21:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163796-20161021101555.patch</filename>
            <type>text/plain</type>
            <size>376154</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YzExNjRmNDQxNmRlYTNiYTFjNGQzZTcwMWY1MWQ0ZWQxNWU5OGIxLi41ODVlMDJkMGY2Mjc4NGFi
YjI4YmNiNzk5YzVjN2FhMzMyNjgxMzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTcgQEAKKzIwMTYtMTAtMjEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFdBU00gdG8gV2FzbQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNzk2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBDb25maWd1cmF0aW9ucy9Ub29sRXhlY3V0YWJsZS54Y2NvbmZpZzoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxsaW50L0xM
SW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6dm1FbnRyeVRvV2FzbSk6CisgICAgICAgIChK
U0M6OnZtRW50cnlUb1dBU00pOiBEZWxldGVkLgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtz
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHRlc3RXQVNNLmNwcDoKKyAgICAgICAgKHJ1
bldBU01UZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdFdhc20uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNNLmNwcC4KKyAgICAgICAgKENvbW1hbmRM
aW5lOjpDb21tYW5kTGluZSk6CisgICAgICAgIChwcmludFVzYWdlU3RhdGVtZW50KToKKyAgICAg
ICAgKENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgIChydW5MRUJUZXN0cyk6
CisgICAgICAgIChpbnZva2UpOgorICAgICAgICAoYm94KToKKyAgICAgICAgKHJ1bldhc21UZXN0
cyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6SlNXQVNNTW9kdWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNXQVNNTW9kdWxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL0pT
V0FTTU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjppMzJDb25zdGFudHMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmYzMkNvbnN0YW50cyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZjY0Q29uc3RhbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNXQVNNTW9kdWxlOjpzaWduYXR1cmVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNXQVNNTW9kdWxlOjpmdW5jdGlvbkltcG9ydHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1dBU01Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTV0FTTU1vZHVsZTo6Z2xvYmFsVmFyaWFibGVUeXBlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25EZWNsYXJhdGlvbnMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6YXJyYXlCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25TdGFja0hlaWdodHMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6Omdsb2JhbFZhcmlhYmxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6aW1wb3J0ZWRGdW5jdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vSlNXYXNtTW9kdWxlLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAuCisgICAgICAgIChKU0M6
OkpTV2FzbU1vZHVsZTo6SlNXYXNtTW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxl
OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKiB3YXNtL0pTV2FzbU1vZHVsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmguCisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVs
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpKU1dhc21Nb2R1bGU6OmkzMkNvbnN0YW50cyk6CisgICAgICAgIChK
U0M6OkpTV2FzbU1vZHVsZTo6ZjMyQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9k
dWxlOjpmNjRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpKU1dhc21Nb2R1bGU6OnNpZ25hdHVy
ZXMpOgorICAgICAgICAoSlNDOjpKU1dhc21Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0cyk6CisgICAg
ICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKToKKyAgICAg
ICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpnbG9iYWxWYXJpYWJsZVR5cGVzKToKKyAgICAgICAgKEpT
Qzo6SlNXYXNtTW9kdWxlOjpmdW5jdGlvbkRlY2xhcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpT
V2FzbU1vZHVsZTo6ZnVuY3Rpb25Qb2ludGVyVGFibGVzKToKKyAgICAgICAgKEpTQzo6SlNXYXNt
TW9kdWxlOjphcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6ZnVuY3Rp
b25zKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpmdW5jdGlvblN0YXJ0T2Zmc2V0c0lu
U291cmNlKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpmdW5jdGlvblN0YWNrSGVpZ2h0
cyk6CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6Z2xvYmFsVmFyaWFibGVzKToKKyAgICAg
ICAgKEpTQzo6SlNXYXNtTW9kdWxlOjppbXBvcnRlZEZ1bmN0aW9ucyk6CisgICAgICAgICogd2Fz
bS9XQVNNQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OldBU006OmNyZWF0ZUpTV3Jh
cHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OnBhcnNlQW5kQ29tcGlsZSk6IERl
bGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwOgorICAgICAg
ICAoSlNDOjpXQVNNOjpqc2NDYWxsaW5nQ29udmVudGlvbik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU006Ondhc21DYWxsaW5nQ29udmVudGlvbik6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpTQzo6V0FTTTo6Q2FsbGluZ0Nv
bnZlbnRpb246OkNhbGxpbmdDb252ZW50aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnRJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpDYWxsaW5nQ29udmVudGlvbjo6bG9hZEFyZ3Vt
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OkNhbGxpbmdDb252ZW50aW9uOjpz
ZXR1cENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpuZXh0SlNDT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V0FT
TTo6dG9CM1R5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjppc1ZhbHVlVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAg
KEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpX
QVNNOjpNZW1vcnk6Ok1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNTWVtb3J5
Lmg6CisgICAgICAgIChKU0M6OldBU006Ok1lbW9yeTo6fk1lbW9yeSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU006Ok1lbW9yeTo6bWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTTo6TWVtb3J5OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6TWVtb3J5
OjpwaW5uZWRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6
Om1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6Omdyb3cpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FT
TTo6TW9kdWxlUGFyc2VyOjpwYXJzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpN
b2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU006Ok1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblNpZ25hdHVyZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9u
cyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6CisgICAgICAg
IChKU0M6OldBU006Ok1vZHVsZVBhcnNlcjo6TW9kdWxlUGFyc2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTTo6TW9kdWxlUGFyc2VyOjpmdW5jdGlvbkluZm9ybWF0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxlUGFyc2VyOjptZW1vcnkpOiBEZWxldGVkLgor
ICAgICAgICAqIHdhc20vV0FTTU9wcy5oOgorICAgICAgICAoSlNDOjpXQVNNOjppc1ZhbGlkT3BU
eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6aXNDb250cm9sT3ApOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vV0FTTVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXQVNNOjpQYXJz
ZXI6OnBhcnNlVmFyVUludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2Vy
OjpwYXJzZVZhclVJbnQ2NCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6
UGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpjb25zdW1lQ2hh
cmFjdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpjb25zdW1lU3Ry
aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpwYXJzZVVJbnQzMik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6cGFyc2VVSW50Nyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6cGFyc2VWYXJVSW50MSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUpOiBEZWxldGVkLgor
ICAgICAgICAqIHdhc20vV0FTTVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXQVNNOjpQbGFuOjpQ
bGFuKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01TZWN0aW9ucy5oOgorICAgICAgICAo
SlNDOjpXQVNNOjpTZWN0aW9uczo6dmFsaWRhdGVPcmRlcik6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5jcHAuCisgICAgICAgIChkdW1wUHJvY2VkdXJl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9y
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVy
YXRvci5oLgorICAgICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5j
cHAuCisgICAgICAgIChKU0M6Oldhc206OmpzY0NhbGxpbmdDb252ZW50aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21D
YWxsaW5nQ29udmVudGlvbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUNhbGxpbmdDb252ZW50aW9uLmguCisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdD
b252ZW50aW9uOjpDYWxsaW5nQ29udmVudGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxp
bmdDb252ZW50aW9uOjptYXJzaGFsbEFyZ3VtZW50SW1wbCk6CisgICAgICAgIChKU0M6Oldhc206
OkNhbGxpbmdDb252ZW50aW9uOjptYXJzaGFsbEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q2FsbGluZ0NvbnZlbnRpb246OmxvYWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsaW5nQ29udmVudGlvbjo6c2V0dXBDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6bmV4
dEpTQ09mZnNldCk6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmguCisgICAgICAgIChKU0M6Oldh
c206OnRvQjNUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNWYWx1ZVR5cGUpOgorICAgICAg
ICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpX
YXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHBy
ZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1lbW9yeS5jcHAuCisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01NZW1vcnkuaC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5
OjptZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnNpemUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNZW1vcnk6OnBpbm5lZFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6bW9kZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTU1vZHVsZVBhcnNlci5jcHAuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uVHlwZXMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1
cmVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVm
aW5pdGlvbnMpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oLgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZVBhcnNlcjo6ZnVuY3Rpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZVBhcnNlcjo6bWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21PcHMuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6aXNWYWxpZE9wVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OmlzQ29u
dHJvbE9wKToKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
UGFyc2VyOjpwYXJzZVZhclVJbnQzMik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFy
c2VWYXJVSW50NjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OlBhcnNlcik6CisgICAg
ICAgIChKU0M6Oldhc206OlBhcnNlcjo6Y29uc3VtZUNoYXJhY3Rlcik6CisgICAgICAgIChKU0M6
Oldhc206OlBhcnNlcjo6Y29uc3VtZVN0cmluZyk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjo6cGFyc2VVSW50MzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVUludDcp
OgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVmFyVUludDEpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dhc21Q
bGFuLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QbGFu
LmNwcC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgICogd2FzbS9X
YXNtUGxhbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBs
YW4uaC4KKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9ucy5oOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmguCisgICAgICAgIChKU0M6Oldhc206
OlNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKToKKwogMjAxNi0xMC0yMCAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgV0FTTSBj
YWxscwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDM5NWZlMmNhNTVmNDhl
NTZmYzUyZGU1NDMxZjZmMWRmYzA2NWM1OTAuLjAxY2IyOTQ3MzdiMjQ0ZjIxZGI3YTk1Mzk3OWU0
OTJiNzMwMDQyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg2MSwx
MyArODYxLDEzIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvSlNEb2xs
YXJWTS5jcHAKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAogCi0gICAgd2FzbS9K
U1dBU01Nb2R1bGUuY3BwCisgICAgd2FzbS9KU1dhc21Nb2R1bGUuY3BwCiAgICAgd2FzbS9KU1dl
YkFzc2VtYmx5LmNwcAotICAgIHdhc20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwCi0gICAgd2FzbS9X
QVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwCi0gICAgd2FzbS9XQVNNTWVtb3J5LmNwcAotICAgIHdh
c20vV0FTTU1vZHVsZVBhcnNlci5jcHAKLSAgICB3YXNtL1dBU01QbGFuLmNwcAorICAgIHdhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCisgICAgd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3Bw
CisgICAgd2FzbS9XYXNtTWVtb3J5LmNwcAorICAgIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAK
KyAgICB3YXNtL1dhc21QbGFuLmNwcAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVjdXRhYmxl
LnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVj
dXRhYmxlLnhjY29uZmlnCmluZGV4IDcxNzE4MzM0MTIyODVhNGQ3ZGI2YjRhMmJmOGQ3NzFiNmI5
MjE2OWMuLmExYTkwYmFhMjIyZDMyNDA3MTYwNmY4YmFmMTFjYWUzNDVmYWIyMDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9Ub29sRXhlY3V0YWJsZS54
Y2NvbmZpZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvVG9vbEV4
ZWN1dGFibGUueGNjb25maWcKQEAgLTMxLDcgKzMxLDcgQEAgQ09ERV9TSUdOX0VOVElUTEVNRU5U
U19pb3NfbWluaWRvbSA9IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJVExFTUVO
VFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CiBDT0RFX1NJR05fRU5USVRMRU1F
TlRTX2lvc190ZXN0YXBpID0gZW50aXRsZW1lbnRzLnBsaXN0OwogQ09ERV9TSUdOX0VOVElUTEVN
RU5UU19pb3NfdGVzdGIzID0gZW50aXRsZW1lbnRzLnBsaXN0OwotQ09ERV9TSUdOX0VOVElUTEVN
RU5UU19pb3NfdGVzdFdBU00gPSBlbnRpdGxlbWVudHMucGxpc3Q7CitDT0RFX1NJR05fRU5USVRM
RU1FTlRTX2lvc190ZXN0V2FzbSA9IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJ
VExFTUVOVFNfaW9zX3Rlc3RSZWdFeHAgPSBlbnRpdGxlbWVudHMucGxpc3Q7CiAKIFNLSVBfSU5T
VEFMTCA9ICQoU0tJUF9JTlNUQUxMXyQoRk9SQ0VfVE9PTF9JTlNUQUxMKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGZkNDJiOWM3NWRlNGRhZGU3ODI2MTkwNzg5YzA3ODI2OTNj
YzI4NmIuLjg2YWEwODRlODExZGEzMTRkYTZjZmI0NzAxYTMzMzhmYjMwYzMzNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjA5LDggKzEyMDksOCBAQAogCQk1MkMwNjExRjFB
QTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1l
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4
NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MkM5NTJCOTE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI4
MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovOyB9OwotCQk1MzEzNzRCRDFE
NUNFNjc2MDBBRjdBMEIgLyogV0FTTVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXQVNNUGxhbi5o
ICovOyB9OwotCQk1MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV0FTTVBsYW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1
MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNwcCAqLzsgfTsKKwkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3
QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKKwkJ
NTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAv
KiBXYXNtUGxhbi5jcHAgKi87IH07CiAJCTUzNDFGQzcwMURBQzMzRTUwMEU3RTRENyAvKiBCM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVj
a1ZhbHVlLmNwcCAqLzsgfTsKIAkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJv
dW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVl
LmggKi87IH07CiAJCTUzNDg2QkI3MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMx
Nzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07CkBAIC0xMjE5LDMwICsxMjE5LDMwIEBACiAJCTUzNEM0NTdD
MUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEM0NTdCMUJDNzI0MTEw
MDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgfTsKIAkJNTM0QzQ1
N0UxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRDNDU3RDFCQzcy
NTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJ
NTM1MjlBNEMxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYgLyog
QVBJVXRpbHMuaCAqLzsgfTsKLQkJNTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdBU01NZW1v
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1
NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmggKi87IH07Ci0JCTUzNTU1NzE2MUQ5
REZBMzIwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXQVNNTWVt
b3J5LmNwcCAqLzsgfTsKKwkJNTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzEz
MUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi87IH07CisJCTUzNTU1NzE2MUQ5REZB
MzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5
LmNwcCAqLzsgfTsKIAkJNTM3MEI0RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1Mzcw
QjRGNjFCRjI2MjA1MDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM3MEI0RjQxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludEJhc2UuaCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0MDAwRUJE
MzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLzsgfTsK
IAkJNTM5RUIwNzkxRDU1NjA3MDAwQzgyRUY3IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4
NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OwogCQk1MzlFQjA3QTFE
NTU2MDcwMDBDODJFRjcgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2
OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKLQkJNTM5RUIwODExRDU1NjA4
QTAwQzgyRUY3IC8qIHRlc3RXQVNNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzOUVCMDcxMUQ1NTNERjgwMEM4MkVGNyAvKiB0ZXN0V0FTTS5jcHAg
Ki87IH07CisJCTUzOUVCMDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA3MTFENTUzREY4
MDBDODJFRjcgLyogdGVzdFdhc20uY3BwICovOyB9OwogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBG
QTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5o
ICovOyB9OwogCQk1M0Q0NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDRE
QjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CiAJCTUzRDQ0
NERFMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REQxREFGMDlBMDAwQjky
Nzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgKi87IH07Ci0JCTUzRjQwRTg1MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMu
aCAqLzsgfTsKLQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBF
OEExRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovOyB9OwotCQk1M0Y0
MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdB
U01QYXJzZXIuaCAqLzsgfTsKLQkJNTNGNDBFOEYxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lS
R2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi87
IH07Ci0JCTUzRjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MDFENTkwMzAyMDA5OUEx
QjYgLyogV0FTTU9wcy5oICovOyB9OwotCQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FT
TUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICov
OyB9OwotCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVB
N0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLzsgfTsKLQkJNTNGNDBFOTcxRDVB
N0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdB
U01Nb2R1bGVQYXJzZXIuY3BwICovOyB9OworCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyog
V2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CisJ
CTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIw
MDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKKwkJNTNGNDBFOEQxRDU5MDFG
MjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmgg
Ki87IH07CisJCTUzRjQwRThGMUQ1OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4
RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovOyB9OworCQk1M0Y0
MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdhc21P
cHMuaCAqLzsgfTsKKwkJNTNGNDBFOTMxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0
MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLzsgfTsKKwkJNTNG
NDBFOTUxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFC
NiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi87IH07CisJCTUzRjQwRTk3MUQ1QTdCRUMwMDk5QTFC
NiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFy
c2VyLmNwcCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTElu
dFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMzFDRjM4MDM5MDAy
MjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUy
MUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwICovOyB9OwotCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV0FTTUNh
bGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZlbnRp
b24uY3BwICovOyB9OwotCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3RDMgLyogV0FTTUNhbGxpbmdD
b252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV0FTTUNhbGxpbmdDb252ZW50aW9uLmggKi87
IH07CisJCTUzRkQwNEQzMUQ3QUIyNzcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0
RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi87IH07CisJ
CTUzRkQwNEQ0MUQ3QUIyOTEwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3QUIx
ODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLzsgfTsKIAkJNUQ1RDhBRDEw
RTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGli
ZWRpdC5keWxpYiAqLzsgfTsKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGku
anMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURC
QjE1MjUxMzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlw
dCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0
ODAyNTUgLyogbWluaWRvbS5qcyAqLzsgfTsKQEAgLTEzNjUsOSArMTM2NSw5IEBACiAJCTc5RUUw
QzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZs
dXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUY4RkMxRjFCOUZFRDBGMDBDQTY2QUIg
LyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovOyB9OwotCQk3Qjk4RDEzNjFCNjBDRDVGMDAy
M0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUu
Y3BwICovOyB9OwotCQk3Qjk4RDEzNzFCNjBDRDYyMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk4RDEzNTFC
NjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdB
U01Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNC
MUE0IC8qIEpTV2FzbU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXYXNtTW9kdWxlLmNw
cCAqLzsgfTsKKwkJN0I5OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUxQjYw
Q0Q1QTAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXYXNt
Rm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMy
NCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVm
ZXJyZWQuY3BwICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNl
RGVmZXJyZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3NjMx
QjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUxMCw4
ICszNTEwLDggQEAKIAkJNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJv
ZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVByb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdBU01QbGFuLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXQVNNUGxhbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNUGxhbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxh
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBs
YW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcg
LyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2FzbUJv
dW5kc0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM3
MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGggPSBi
My9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNTIyLDMyICszNTIyLDMyIEBACiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0NzZB
NyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM1MjlBNEIxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTU1lbW9yeS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21NZW1vcnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8q
IFdhc21NZW1vcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bU1lbW9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNzBCNEYzMUJGMjVF
QTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzcwQjRGNDFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMg
LyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBl
LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVBy
b3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJj
ZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJNTM5RUIwNzExRDU1M0RGODAwQzgyRUY3IC8qIHRl
c3RXQVNNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RXQVNN
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM5RUIwNzExRDU1M0RGODAwQzgy
RUY3IC8qIHRlc3RXYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IHRlc3RXYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwODAxRDU1
NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNNICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSB0ZXN0V0FTTTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21B
ZGRyZXNzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQWRk
cmVzc1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21BZGRyZXNzVmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFkZHJl
c3NWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21B
ZGRyZXNzVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVNlY3Rpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rp
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1bmN0aW9u
UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzRjQwRThDMUQ1OTAxRjIw
MDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBU01QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGNDBFOEUxRDU5
MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01CM0lSR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU9wcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2
IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0FTTU1vZHVsZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0Y0MEU5
NjFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2VjdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdh
c21GdW5jdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
RnVuY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEMx
RDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0
MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUIzSVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV2FzbU9w
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJ
UkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQjNJUkdl
bmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5NDFENUE3QUVG
MDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAy
MjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTUNhbGxpbmdDb252
ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGRDA0RDIxRDdBQjE4
NzAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXQVNNQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVu
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0ZEMDREMjFE
N0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5keWxp
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliZWRpdC5keWxpYjsgcGF0aCA9IC91c3IvbGli
L2xpYmVkaXQuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTVEQUZENkNC
MTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSlNDLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RERERjQ0NjE0RkVFNzIyMDBCNEZC
NEQgLyogTExJbnREZXNpcmVkT2Zmc2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBMTEludERlc2lyZWRPZmZzZXRzLmg7IHBhdGggPSBMTEludE9mZnNldHMvTExJbnREZXNp
cmVkT2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMzcw
Niw5ICszNzA2LDkgQEAKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZp
cm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUY4RkMxQzFCOUZFRDBG
MDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTWF4aW1h
bEZsdXNoSW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0I5
OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBK
U1dhc21Nb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
YXNtTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0I5OEQxMzUxQjYw
Q0Q1QTAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1dhc21Nb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JD
NTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyog
SlNQcm9taXNlRGVmZXJyZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQ
cm9taXNlRGVmZXJyZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRTUx
ODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNaWNyb3Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTUs
NyArNTI5NSw3IEBACiAJCQkJRkVDQjhCMjkxRDI1Q0FCQjAwNkYyNDYzIC8qIHRlc3RhcGktZnVu
Y3Rpb24tb3ZlcnJpZGVzLmpzICovLAogCQkJCTg2RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAvKiB0
ZXN0YXBpLm1tICovLAogCQkJCTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhw
LmNwcCAqLywKLQkJCQk1MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVzdFdBU00uY3BwICov
LAorCQkJCTUzOUVCMDcxMUQ1NTNERjgwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgKi8sCiAJCQkp
OwogCQkJbmFtZSA9IHRlc3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU4MTks
MjMgKzU4MTksMjMgQEAKIAkJCQlBRDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseS5jcHAgKi8sCiAJCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHkuaCAqLywKIAkJCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8sCi0JCQkJN0I5
OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8sCi0JCQkJN0I5OEQx
MzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovLAotCQkJCTUzRjQwRThFMUQ1
OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi8sCi0JCQkJNTNGNDBFOTIx
RDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggKi8sCi0JCQkJNTNGRDA0RDEx
RDdBQjE4NzAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCi0JCQkJNTNG
RDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5oICovLAotCQkJ
CTUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi8sCi0JCQkJN0JDNTQ3RDIx
QjY5NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLywKLQkJCQk1M0Y0MEU4QTFENTkwMUJC
MDA5OUExQjYgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8sCi0JCQkJNTM1NTU3MTUxRDlERkEz
MjAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuY3BwICovLAotCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZE
NTgzQiAvKiBXQVNNTWVtb3J5LmggKi8sCi0JCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8q
IFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAotCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAv
KiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCi0JCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8q
IFdBU01QbGFuLmNwcCAqLywKLQkJCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV0FTTVBs
YW4uaCAqLywKLQkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oICov
LAotCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLywKKwkJ
CQk3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXYXNtTW9kdWxlLmNwcCAqLywKKwkJCQk3
Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXYXNtTW9kdWxlLmggKi8sCisJCQkJNTNGNDBF
OEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmNwcCAqLywKKwkJCQk1M0Y0
MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKKwkJCQk1M0ZE
MDREMTFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJ
CQk1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8s
CisJCQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdhc21PcHMuaCAqLywKKwkJCQk3QkM1
NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICovLAorCQkJCTUzRjQwRThBMUQ1
OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKKwkJCQk1MzU1NTcxNTFE
OURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8sCisJCQkJNTM1NTU3MTMxRDlEOUVB
NTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLywKKwkJCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUEx
QjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi8sCisJCQkJNTNGNDBFOTQxRDVBN0FFRjAwOTlB
MUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAqLywKKwkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdB
MEIgLyogV2FzbVBsYW4uY3BwICovLAorCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBX
YXNtUGxhbi5oICovLAorCQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2Vy
LmggKi8sCisJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICov
LAogCQkJKTsKIAkJCXBhdGggPSB3YXNtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTc2MDMsNyArNzYwMyw3IEBACiAJCQkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3Jp
Z2luRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAx
ODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV2Fz
bU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThG
RjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAw
RjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2
MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTc2ODMsNyAr
NzY4Myw3IEBACiAJCQkJQkMxOEMzRkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyQ2FsbEZy
YW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkgLyogRGVi
dWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjExODJCN0EwNDAw
RjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGNDBF
ODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJREM5QTBDMUYxRDJEOUNCMTAwODUxMjRFIC8qIEIzQ2FzZUNvbGxlY3Rpb25JbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdn
ZXJTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8q
IERlZmVyR0MuaCBpbiBIZWFkZXJzICovLApAQCAtNzg0Myw3ICs3ODQzLDcgQEAKIAkJCQkwRjcw
MjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enou
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1M0Y0MEU4RDFENTkwMUYy
MDA5OUExQjYgLyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFOEQxRDU5
MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDBFNEE4
MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtODAwOSw3ICs4MDA5LDcgQEAKIAkJ
CQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFGMTdCNkI1NDUw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUzMTM3NEJEMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXQVNNUGxhbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCQkQ5ODFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTU0RThFQjAxOEJGRkJCQjAwNTU2RDI4IC8qIEdDU2VnbWVudGVk
QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtODA2Myw3ICs4MDYzLDcgQEAKIAkJCQkxNDJFMzEz
ODEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
NzgyOTdCMTM3OUU4QTgwMEE3QzJBMyAvKiBIYW5kbGVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzNTU1NzE0MUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNEJBN0E5ODEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzMkJEMTExQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkRBNzc4MzE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODIzNyw3ICs4MjM3LDcgQEAKIAkJCQkwRjJCNjZGNjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGNDBF
OEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2Jq
ZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8q
IEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFB
NjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTgzMDUsNyArODMwNSw3IEBACiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcw
MTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxMjIwMjcx
QkU3RjU4QzAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBp
biBIZWFkZXJzICovLAotCQkJCTUzRjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV2FzbU9wcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlEOUUxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENM
b29wU3RhY2suaCBpbiBIZWFkZXJzICovLApAQCAtODM0MSw3ICs4MzQxLDcgQEAKIAkJCQlCQzE4
QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTdCOThEMTM3MUI2MENENjIwMDIzQjFBNCAvKiBK
U1dBU01Nb2R1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCOThEMTM3MUI2MENENjIwMDIzQjFB
NCAvKiBKU1dhc21Nb2R1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCURDNjA1QjVFMUNFMjZFQTIw
MDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3
REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5
MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLApAQCAtODM1Nyw3ICs4MzU3LDcgQEAKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEw
MEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzRjQwRTkzMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkUwRTE2RkNFMTAwQjM0NDYwIC8qIExleGVyLmx1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENGM0Q1NkIxQ0QyOTQ3MjAwM0Q1QzY1IC8qIExhenlD
bGFzc1N0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTg3QTAyMUJGQkU1
NjEwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODYwNyw3
ICs4NjA3LDcgQEAKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21p
bmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzJGRjFFQTFEQTc1NzFDMDBBOEJGMjEgLyog
RE9NSklUU2xvd1BhdGhDYWxscy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGRDA0RDQxRDdBQjI5
MTAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTNGRDA0RDQxRDdBQjI5MTAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI4
MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywK
QEAgLTg2NjgsNyArODY2OCw3IEBACiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZN
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRy
eVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8q
IFZNRW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5
QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQzU0N0QzMUI2OTU5QTEw
MDk1OUI1OCAvKiBXYXNtRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFERDFDNEVG
QUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
QkQ5QTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICov
LApAQCAtOTIxMSw3ICs5MjExLDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTUzOUVC
MDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V0FTTS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzlFQjA4MTFENTU2MDhBMDBDODJFRjcgLyogdGVzdFdhc20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC05NDI3LDcgKzk0MjcsNyBAQAogCQkJCTBGNUExMjczMTkyRDlGREYwMDg3NjRBMyAvKiBERkdE
b2VzR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8q
IERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5
NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MzU1NTcxNjFEOURGQTMyMDA2
RDU4M0IgLyogV0FTTU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzU1NTcxNjFEOURG
QTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMTQz
MzFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZC
QzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC05NDU0LDcgKzk0NTQsNyBAQAogCQkJCTBGQzk3RjNGMTgyMDIx
MTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkVBMEM0MDIxQ0REN0QxRDAwNDgxOTkxIC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3M0E1MzVBMTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV0FTTUNh
bGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzRkQwNEQzMUQ3QUIyNzcw
MDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJGMkFBMzcxQjBCRURFMzAwNjEwQzdBIC8qIERGR0xhenlOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3RDlBMjk3MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjQyLDcgKzk2
NDIsNyBAQAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFk
aW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJ
bmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBG
M0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUzMTM3
NEJGMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXQVNNUGxhbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0Ix
MCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk4MjEsNyAr
OTgyMSw3IEBACiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0
dWFsTWFjaGluZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTdCOThEMTM2MUI2MENENUYwMDIzQjFB
NCAvKiBKU1dBU01Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0I5OEQxMzYxQjYwQ0Q1
RjAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBM0FF
NzE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA0Myw3ICsxMDA0Myw3IEBACiAJCQkJQUQyRkNDMDIx
REI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxODdBMDExQkZCRTU1RTAwMzhCQkNBIC8qIEpJVE11bEdl
bmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1M0Y0MEU4RjFENTkwMjgyMDA5OUExQjYg
LyogV0FTTUIzSVJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNGNDBFOEYxRDU5
MDI4MjAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0
Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0RTdEIC8q
IFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA1NCw3ICsxMDA1NCw3IEBACiAJ
CQkJQTdDQTNBRTMxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjMzOERGOTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFr
TWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYg
LyogV0FTTU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0Y0MEU5NzFENUE3
QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0NBM0FFNTE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFRodW5rcy5jcHAKaW5kZXggZmVmNDQ4ODQ4M2Y1YTg3Mjg3ZGRiNzNjYWQ3M2M1NzEwY2Y4YjM2
MS4uYTlmYTdkZDY1ZTUxZGZlNzI5ZDNkODZhYjZiYmUzNmUwNDQ5YzM2OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU19FWFBPUlRfUFJJVkFURSB2bUVu
dHJ5VG9XQVNNKHZvaWQqIGNvZGUsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIGZyYW1lKQorRW5j
b2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBW
TSogdm0sIFByb3RvQ2FsbEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gdm1FbnRyeVRvSmF2
YVNjcmlwdChjb2RlLCB2bSwgZnJhbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuaAppbmRleCA3ZThlNGVhODVlZTcyMDMwYTNkOTU3OWU3MGJhY2UzYzVmYWUx
NGQ3Li5mYzk3NDJjNDJhYTU4NDJlNDRiN2QxZDJiMzQ0ZDQ4OGQ5N2YzODViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApAQCAtMzgsNyArMzgsNyBAQCBleHRl
cm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUodm9pZCosIFZNKiwg
UHJvdG9DYWxsRnJhbWUqKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUg
dm1FbnRyeVRvV0FTTSh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOworRW5jb2RlZEpTVmFs
dWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeVRvV2FzbSh2b2lkKiwgVk0qLCBQcm90b0NhbGxG
cmFtZSopOwogCiBuYW1lc3BhY2UgTExJbnQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDM0N2NmZGVlODIyZDYwN2RhMmJlOTE0MjA3NTRm
YTZjZmM3ZDNjNTcuLmI0OTk4NjZhODBiM2M1YjNiMzI2ZWMzYmQ5ZTJlOWM2ZjljNmJlOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCkBAIC0zMSw3
ICszMSw3IEBACiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCisjaW5jbHVkZSAi
SlNXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAi
UGFyc2VyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCkBAIC03NDcsNyArNzQ3LDcgQEAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4ZWN1
dGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxlQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSkg
fTsKIAotV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUoVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4KQorV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1
dGFibGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV2FzbU1vZHVsZSogbW9k
dWxlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQogICAgIDogRXhlY3V0YWJsZUJhc2Uodm0sIHZt
LndlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfTk9U
X0NPTVBJTEVELCBOb0ludHJpbnNpYykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1f
bW9kdWxlKHZtLCB0aGlzLCBtb2R1bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKaW5kZXggOWMzNTU5NjA1ZTcyMWI3YWE2YmZjMWRlMzE2ZDcyMzNjZDQ5NmY1
OS4uMWQyM2IxNTlhNDU4MTVjMjUwMjU3ODI0Njk0MmYwMWY4YTY5MmI5MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNDYsNyArNDYsNyBAQCBjbGFz
cyBDb2RlQmxvY2s7CiBjbGFzcyBFdmFsQ29kZUJsb2NrOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxv
Y2s7CiBjbGFzcyBKU1Njb3BlOwotY2xhc3MgSlNXQVNNTW9kdWxlOworY2xhc3MgSlNXYXNtTW9k
dWxlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jazsKIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CkBAIC03MTksNyArNzE5LDcgQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVy
ZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBjcmVhdGUo
Vk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorICAgIHN0YXRpYyBXZWJBc3NlbWJseUV4ZWN1dGFibGUq
IGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNXYXNtTW9kdWxlKiBt
b2R1bGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBXZWJBc3NlbWJs
eUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJB
c3NlbWJseUV4ZWN1dGFibGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseUV4ZWN1dGFibGUodm0sIHNv
dXJjZSwgbW9kdWxlLCBmdW5jdGlvbkluZGV4KTsKICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNo
Q3JlYXRpb24odm0pOwpAQCAtNzQ0LDEyICs3NDQsMTIgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKLSAgICBXZWJBc3NlbWJseUV4ZWN1dGFi
bGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNXQVNNTW9kdWxlKiwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCk7CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTV2FzbU1vZHVsZSosIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgU291cmNl
Q29kZSBtX3NvdXJjZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNXQVNNTW9kdWxlPiBtX21vZHVsZTsK
KyAgICBXcml0ZUJhcnJpZXI8SlNXYXNtTW9kdWxlPiBtX21vZHVsZTsKICAgICB1bnNpZ25lZCBt
X2Z1bmN0aW9uSW5kZXg7CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+
IG1fY29kZUJsb2NrRm9yQ2FsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0V0FTTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdBU00uY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTc2ZWM0YTVhZTU2ODExZmVlMDdkOWJjYTM0ZDZhNDIy
MjY5YTkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjA1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVk
ZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJMTEludFRodW5rcy5oIgotI2luY2x1
ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiVk0uaCIKLSNpbmNsdWRlICJXQVNNTWVt
b3J5LmgiCi0jaW5jbHVkZSAiV0FTTVBsYW4uaCIKLQotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
Ci0jaW5jbHVkZSA8d3RmL0xFQkRlY29kZXIuaD4KLQotY2xhc3MgQ29tbWFuZExpbmUgewotcHVi
bGljOgotICAgIENvbW1hbmRMaW5lKGludCBhcmdjLCBjaGFyKiogYXJndikKLSAgICB7Ci0gICAg
ICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YpOwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJp
bmc+IG1fYXJndW1lbnRzOwotICAgIGJvb2wgbV9ydW5MRUJUZXN0cyB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX3J1bldBU01UZXN0cyB7IGZhbHNlIH07Ci0KLSAgICB2b2lkIHBhcnNlQXJndW1lbnRz
KGludCwgY2hhcioqKTsKLX07Ci0KLXN0YXRpYyBOT19SRVRVUk4gdm9pZCBwcmludFVzYWdlU3Rh
dGVtZW50KGJvb2wgaGVscCA9IGZhbHNlKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6
IHRlc3RXQVNNIFtvcHRpb25zXVxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIC1ofC0taGVs
cCAgUHJpbnRzIHRoaXMgaGVscCBtZXNzYWdlXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAg
LWx8LS1sZWIgICBSdW5zIHRoZSBMRUIgZGVjb2RlciB0ZXN0c1xuIik7Ci0gICAgZnByaW50Zihz
dGRlcnIsICIgIC13fC0td2ViICAgUnVuIHRoZSBXQVNNIHRlc3RzXG4iKTsKLSAgICBmcHJpbnRm
KHN0ZGVyciwgIlxuIik7Ci0KLSAgICBleGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZB
SUxVUkUpOwotfQotCi12b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCi17Ci0gICAgaW50IGkgPSAxOwotCi0gICAgZm9yICg7IGkgPCBhcmdjOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgY2hhciogYXJnID0gYXJndltpXTsKLSAgICAgICAgaWYgKCFz
dHJjbXAoYXJnLCAiLWgiKSB8fCAhc3RyY21wKGFyZywgIi0taGVscCIpKQotICAgICAgICAgICAg
cHJpbnRVc2FnZVN0YXRlbWVudCh0cnVlKTsKLQotICAgICAgICBpZiAoIXN0cmNtcChhcmcsICIt
bCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1sZWIiKSkKLSAgICAgICAgICAgIG1fcnVuTEVCVGVzdHMg
PSB0cnVlOwotCi0gICAgICAgIGlmICghc3RyY21wKGFyZywgIi13IikgfHwgIXN0cmNtcChhcmcs
ICItLXdlYiIpKQotICAgICAgICAgICAgbV9ydW5XQVNNVGVzdHMgPSB0cnVlOwotICAgIH0KLQot
ICAgIGZvciAoOyBpIDwgYXJnYzsgKytpKQotICAgICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJn
dltpXSk7Ci0KLX0KLQotU3RhdGljTG9jayBjcmFzaExvY2s7Ci0KLSNkZWZpbmUgQ0hFQ0tfRVEo
eCwgeSkgZG8geyBcCi0gICAgICAgIGF1dG8gX194ID0gKHgpOyBcCi0gICAgICAgIGF1dG8gX195
ID0gKHkpOyBcCi0gICAgICAgIGlmIChfX3ggPT0gX195KSBcCi0gICAgICAgIGJyZWFrOyBcCi0g
ICAgICAgIGNyYXNoTG9jay5sb2NrKCk7IFwKLSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFp
bHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIHRvQ1N0cmluZygj
eCAiID09ICIgI3ksICIgKCIgI3ggIiA9PSAiLCBfX3gsICIsICIgI3kgIiA9PSAiLCBfX3ksICIp
IikuZGF0YSgpKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0K
LSNkZWZpbmUgRk9SX0VBQ0hfVU5TSUdORURfTEVCX1RFU1QobWFjcm8pIFwKLSAgICAvKiBTaW1w
bGUgdGVzdHMgdGhhdCB1c2UgYWxsIHRoZSBiaXRzIGluIHRoZSBhcnJheSAqLyBcCi0gICAgbWFj
cm8oKHsgMHgwNyB9KSwgMCwgdHJ1ZSwgMHg3bHUsIDFsdSkgXAotICAgIG1hY3JvKCh7IDB4Nzcg
fSksIDAsIHRydWUsIDB4NzdsdSwgMWx1KSBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHgwNyB9KSwg
MCwgdHJ1ZSwgMHgzODBsdSwgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHg4OSwgMHgxMiB9KSwgMCwg
dHJ1ZSwgMHg5MDlsdSwgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHgwMiB9KSwg
MCwgdHJ1ZSwgMHg4MmYzbHUsIDNsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4ZmYs
IDB4NzQgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0bHUpIFwKLSAgICBtYWNybygoeyAweGYz
LCAweDg1LCAweGZmLCAweGY0LCAweDdmIH0pLCAwLCB0cnVlLCAweGZlOWZjMmYzbHUsIDVsdSkg
XAotICAgIC8qIFRlc3Qgd2l0aCBleHRyYSB0cmFpbGluZyBudW1iZXJzICovIFwKLSAgICBtYWNy
bygoeyAweDA3LCAweDgwIH0pLCAwLCB0cnVlLCAweDdsdSwgMWx1KSBcCi0gICAgbWFjcm8oKHsg
MHgwNywgMHg3NSB9KSwgMCwgdHJ1ZSwgMHg3bHUsIDFsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjMs
IDB4ODUsIDB4ZmYsIDB4NzQsIDB4NDMgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0bHUpIFwK
LSAgICBtYWNybygoeyAweGYzLCAweDg1LCAweGZmLCAweDc0LCAweDgwIH0pLCAwLCB0cnVlLCAw
eGU5ZmMyZjNsdSwgNGx1KSBcCi0gICAgLyogVGVzdCB3aXRoIHByZWNlZWRpbmcgbnVtYmVycyAq
LyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAot
ICAgIG1hY3JvKCh7IDB4MDMsIDB4MDcgfSksIDEsIHRydWUsIDB4N2x1LCAybHUpIFwKLSAgICBt
YWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweDY3LCAweDc5LCAweDc3IH0pLCA1LCB0cnVlLCAw
eDc3bHUsIDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4ODQs
IDB4NzcgfSksIDUsIHRydWUsIDB4NzdsdSwgNnVsKSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1
MywgMHg0MywgMHhmMywgMHg4NSwgMHgwMiB9KSwgMywgdHJ1ZSwgMHg4MmYzbHUsIDZsdSkgXAot
ICAgIC8qIFRlc3QgaW4gdGhlIG1pZGRsZSAqLyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgwNywg
MHg4OSB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAotICAgIG1hY3JvKCh7IDB4MDMsIDB4MDcs
IDB4MjMgfSksIDEsIHRydWUsIDB4N2x1LCAybHUpIFwKLSAgICBtYWNybygoeyAweGYyLCAweDUz
LCAweDQzLCAweDY3LCAweDc5LCAweDc3LCAweDQzIH0pLCA1LCB0cnVlLCAweDc3bHUsIDZsdSkg
XAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4ODQsIDB4NzcsIDB4Zjkg
fSksIDUsIHRydWUsIDB4NzdsdSwgNmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0
MywgMHhmMywgMHg4NSwgMHgwMiwgMHhhNCB9KSwgMywgdHJ1ZSwgMHg4MmYzbHUsIDZsdSkgXAot
ICAgIC8qIFRlc3QgZGVjb2RlIHRvbyBsb25nICovIFwKLSAgICBtYWNybygoeyAweDgwLCAweDgw
LCAweDgwLCAweDgwLCAweDgwLCAweDgwfSksIDAsIGZhbHNlLCAweDBsdSwgMGx1KSBcCi0gICAg
bWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhmZn0pLCAxLCBm
YWxzZSwgMHgwbHUsIDBsdSkgXAotICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEs
IDB4OWEsIDB4YTMsIDB4ZmZ9KSwgMCwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKLSAgICAvKiBUZXN0
IGRlY29kZSBvZmYgZW5kIG9mIGFycmF5ICovIFwKLSAgICBtYWNybygoeyAweDgwLCAweDgwLCAw
eGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDIsIGZhbHNlLCAweDBsdSwgMGx1KSBcCi0K
LQotI2RlZmluZSBURVNUX1VOU0lHTkVEX0xFQl9ERUNPREUoaW5pdCwgc3RhcnRPZmZzZXQsIGV4
cGVjdGVkU3RhdHVzLCBleHBlY3RlZFJlc3VsdCwgZXhwZWN0ZWRPZmZzZXQpIFwKLSAgICB7IFwK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBc
Ci0gICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAotICAgICAgICB1aW50MzJf
dCByZXN1bHQ7IFwKLSAgICAgICAgYm9vbCBzdGF0dXMgPSBXVEY6OkxFQkRlY29kZXI6OmRlY29k
ZVVJbnQzMih2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpLCBvZmZzZXQsIHJlc3VsdCk7IFwK
LSAgICAgICAgQ0hFQ0tfRVEoc3RhdHVzLCBleHBlY3RlZFN0YXR1cyk7IFwKLSAgICAgICAgaWYg
KGV4cGVjdGVkU3RhdHVzKSB7IFwKLSAgICAgICAgICAgIENIRUNLX0VRKHJlc3VsdCwgZXhwZWN0
ZWRSZXN1bHQpOyBcCi0gICAgICAgICAgICBDSEVDS19FUShvZmZzZXQsIGV4cGVjdGVkT2Zmc2V0
KTsgXAotICAgICAgICB9IFwKLSAgICB9OwotCi0KLSNkZWZpbmUgRk9SX0VBQ0hfU0lHTkVEX0xF
Ql9URVNUKG1hY3JvKSBcCi0gICAgLyogU2ltcGxlIHRlc3RzIHRoYXQgdXNlIGFsbCB0aGUgYml0
cyBpbiB0aGUgYXJyYXkgKi8gXAotICAgIG1hY3JvKCh7IDB4MDcgfSksIDAsIHRydWUsIDB4Nywg
MWx1KSBcCi0gICAgbWFjcm8oKHsgMHg3NyB9KSwgMCwgdHJ1ZSwgLTB4OSwgMWx1KSBcCi0gICAg
bWFjcm8oKHsgMHg4MCwgMHgwNyB9KSwgMCwgdHJ1ZSwgMHgzODAsIDJsdSkgXAotICAgIG1hY3Jv
KCh7IDB4ODksIDB4MTIgfSksIDAsIHRydWUsIDB4OTA5LCAybHUpIFwKLSAgICBtYWNybygoeyAw
eGYzLCAweDg1LCAweDAyIH0pLCAwLCB0cnVlLCAweDgyZjMsIDNsdSkgXAotICAgIG1hY3JvKCh7
IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4NzQgfSksIDAsIHRydWUsIDB4ZmU5ZmMyZjMsIDRsdSkgXAot
ICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4ZjQsIDB4N2YgfSksIDAsIHRydWUsIDB4
ZmU5ZmMyZjMsIDVsdSkgXAotICAgIC8qIFRlc3Qgd2l0aCBleHRyYSB0cmFpbGluZyBudW1iZXJz
ICovIFwKLSAgICBtYWNybygoeyAweDA3LCAweDgwIH0pLCAwLCB0cnVlLCAweDcsIDFsdSkgXAot
ICAgIG1hY3JvKCh7IDB4MDcsIDB4NzUgfSksIDAsIHRydWUsIDB4NywgMWx1KSBcCi0gICAgbWFj
cm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCwgMHg0MyB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJm
MywgNGx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCwgMHg4MCB9KSwg
MCwgdHJ1ZSwgMHhmZTlmYzJmMywgNGx1KSBcCi0gICAgLyogVGVzdCB3aXRoIHByZWNlZWRpbmcg
bnVtYmVycyAqLyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3LCAy
bHUpIFwKLSAgICBtYWNybygoeyAweDAzLCAweDA3IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkgXAot
ICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4NjcsIDB4NzksIDB4NzcgfSksIDUsIHRy
dWUsIC0weDksIDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4
ODQsIDB4NzcgfSksIDUsIHRydWUsIC0weDksIDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4
NTMsIDB4NDMsIDB4ZjMsIDB4ODUsIDB4MDIgfSksIDMsIHRydWUsIDB4ODJmMywgNmx1KSBcCi0g
ICAgLyogVGVzdCBpbiB0aGUgbWlkZGxlICovIFwKLSAgICBtYWNybygoeyAweGYzLCAweDA3LCAw
eDg5IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkgXAotICAgIG1hY3JvKCh7IDB4MDMsIDB4MDcsIDB4
MjMgfSksIDEsIHRydWUsIDB4NywgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0
MywgMHg2NywgMHg3OSwgMHg3NywgMHg0MyB9KSwgNSwgdHJ1ZSwgLTB4OSwgNmx1KSBcCi0gICAg
bWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NywgMHhmOSB9KSwgNSwg
dHJ1ZSwgLTB4OSwgNmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmMywg
MHg4NSwgMHgwMiwgMHhhNCB9KSwgMywgdHJ1ZSwgMHg4MmYzLCA2bHUpIFwKLSAgICAvKiBUZXN0
IGRlY29kZSB0b28gbG9uZyAqLyBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHg4MCwgMHg4
MCwgMHg4MCwgMHg4MH0pLCAwLCBmYWxzZSwgMHgwLCAwbHUpIFwKLSAgICBtYWNybygoeyAweDgw
LCAweDgwLCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDEsIGZhbHNlLCAweDAsIDBs
dSkgXAotICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEsIDB4OWEsIDB4YTMsIDB4
ZmZ9KSwgMCwgZmFsc2UsIDB4MCwgMGx1KSBcCi0gICAgLyogVGVzdCBkZWNvZGUgb2ZmIGVuZCBv
ZiBhcnJheSAqLyBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwg
MHhhMywgMHhmZn0pLCAyLCBmYWxzZSwgMHgwLCAwbHUpIFwKLQotCi0jZGVmaW5lIFRFU1RfU0lH
TkVEX0xFQl9ERUNPREUoaW5pdCwgc3RhcnRPZmZzZXQsIGV4cGVjdGVkU3RhdHVzLCBleHBlY3Rl
ZFJlc3VsdCwgZXhwZWN0ZWRPZmZzZXQpIFwKLSAgICB7IFwKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBcCi0gICAgICAgIHNpemVfdCBvZmZz
ZXQgPSBzdGFydE9mZnNldDsgXAotICAgICAgICBpbnQzMl90IHJlc3VsdDsgXAotICAgICAgICBi
b29sIHN0YXR1cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50MzIodmVjdG9yLmRhdGEoKSwg
dmVjdG9yLnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCi0gICAgICAgIENIRUNLX0VRKHN0YXR1
cywgZXhwZWN0ZWRTdGF0dXMpOyBcCi0gICAgICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBcCi0g
ICAgICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0gZXhwZWN0ZWRSZXN1bHQ7IFwKLSAgICAgICAg
ICAgIENIRUNLX0VRKHJlc3VsdCwgZXhwZWN0ZWQpOyBcCi0gICAgICAgICAgICBDSEVDS19FUShv
ZmZzZXQsIGV4cGVjdGVkT2Zmc2V0KTsgXAotICAgICAgICB9IFwKLSAgICB9OwotCi0KLXN0YXRp
YyB2b2lkIHJ1bkxFQlRlc3RzKCkKLXsKLSAgICBGT1JfRUFDSF9VTlNJR05FRF9MRUJfVEVTVChU
RVNUX1VOU0lHTkVEX0xFQl9ERUNPREUpCi0gICAgRk9SX0VBQ0hfU0lHTkVEX0xFQl9URVNUKFRF
U1RfU0lHTkVEX0xFQl9ERUNPREUpCi19Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLXN0
YXRpYyBKU0M6OlZNKiB2bTsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFj
ZSBXQVNNOwotdXNpbmcgbmFtZXNwYWNlIEIzOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBp
bnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0ciwgc3RkOjppbml0aWFsaXplcl9saXN0PEpT
VmFsdWU+IGFyZ3MpCi17Ci0gICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50OwotICAgIC8vIFNpbmNl
IHZtRW50cnlUb0phdmFTY3JpcHQgZXhwZWN0cyBhIHRoaXMgdmFsdWUgd2UgY2xhaW0gdGhlcmUg
aXMgb25lLi4uIHRoZXJlIGlzbid0LgotICAgIGludCBhcmdDb3VudCA9IDE7Ci0gICAgSlNWYWx1
ZSogcmVtYWluaW5nQXJndW1lbnRzID0gbnVsbHB0cjsKLSAgICBpZiAoYXJncy5zaXplKCkpIHsK
LSAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzID0gY29uc3RfY2FzdDxKU1ZhbHVlKj4oYXJncy5i
ZWdpbigpKTsKLSAgICAgICAgZmlyc3RBcmd1bWVudCA9ICpyZW1haW5pbmdBcmd1bWVudHM7Ci0g
ICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50cysrOwotICAgICAgICBhcmdDb3VudCA9IGFyZ3Muc2l6
ZSgpOwotICAgIH0KLQotICAgIFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwotICAgIHBy
b3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgbnVsbHB0ciwgZmlyc3RBcmd1bWVudCwgYXJnQ291
bnQsIHJlbWFpbmluZ0FyZ3VtZW50cyk7Ci0KLSAgICAvLyBUaGlzIHdvbid0IHdvcmsgZm9yIGZs
b2F0aW5nIHBvaW50IHZhbHVlcyBidXQgd2UgZG9uJ3QgaGF2ZSB0aG9zZSB5ZXQuCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KHZtRW50cnlUb1dBU00ocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHZtLCAmcHJvdG9DYWxsRnJhbWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgaW52
b2tlKGNvbnN0IENvbXBpbGF0aW9uJiBjb2RlLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1
ZT4gYXJncykKLXsKLSAgICByZXR1cm4gaW52b2tlPFQ+KGNvZGUuY29kZSgpLCBhcmdzKTsKLX0K
LQotaW5saW5lIEpTVmFsdWUgYm94KHVpbnQ2NF90IHZhbHVlKQotewotICAgIHJldHVybiBKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpOwotfQotCi0vLyBGb3Igbm93IHdlIGlubGluZSB0aGUgdGVzdCBm
aWxlcy4KLXN0YXRpYyB2b2lkIHJ1bldBU01UZXN0cygpCi17Ci0gICAgewotICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1l
bW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgJHN1bTEyIChwYXJhbSBpMzIpIChwYXJhbSBp
MzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJh
bSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChw
YXJhbSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgMCkgKGkz
Mi5hZGQgKGdldF9sb2NhbCAxKSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDIpIChpMzIuYWRkIChnZXRf
bG9jYWwgMykgKGkzMi5hZGQgKGdldF9sb2NhbCA0KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDUpIChp
MzIuYWRkIChnZXRfbG9jYWwgNikgKGkzMi5hZGQgKGdldF9sb2NhbCA3KSAoaTMyLmFkZCAoZ2V0
X2xvY2FsIDgpIChpMzIuYWRkIChnZXRfbG9jYWwgOSkgKGkzMi5hZGQgKGdldF9sb2NhbCAxMCkg
KGdldF9sb2NhbCAxMSkpKSkpKSkpKSkpKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0
ICJtdWx0MTIiKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoY2FsbCAkc3VtMTIg
KGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAo
Z2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChn
ZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkpKSkK
LSAgICAgICAgLy8gICAgICkKLQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewot
ICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMSwgMHg5NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg0MCwKLSAgICAg
ICAgICAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4NDAsCi0gICAgICAgICAg
ICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgzLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAyLCAweDAwLCAweDAxLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4YSwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2ZCwgMHg3NSwKLSAgICAgICAgICAgIDB4NmMsIDB4
NzQsIDB4MzEsIDB4MzIsIDB4MDAsIDB4MDEsIDB4MGEsIDB4Y2UsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDIsIDB4YTYsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAwLCAw
eDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAyLCAweDE0LCAweDAzLCAweDE0
LCAweDA0LCAweDE0LCAweDA1LCAweDE0LAotICAgICAgICAgICAgMHgwNiwgMHgxNCwgMHgwNywg
MHgxNCwgMHgwOCwgMHgxNCwgMHgwOSwgMHgxNCwgMHgwYSwgMHgxNCwgMHgwYiwgMHg0MCwgMHg0
MCwgMHg0MCwgMHg0MCwgMHg0MCwKLSAgICAgICAgICAgIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAs
IDB4NDAsIDB4NDAsIDB4MDksIDB4MGYsIDB4OWQsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDAsIDB4MTQsIDB4MDAsCi0gICAgICAgICAgICAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0
LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAw
eDE0LCAweDAwLAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNiwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxh
bigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8fCAh
cGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
TG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMjAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUp
LCBib3goNiksIGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJveCgx
MikgfSksIDc4KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSks
IGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEw
MCkgfSksIDE2Nik7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToK
LSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAg
ICAvLyAgICAgKGZ1bmMgJGZhYyAoZXhwb3J0ICJmYWMiKSAocGFyYW0gaTY0KSAocmVzdWx0IGk2
NCkKLSAgICAgICAgLy8gICAgICAoaWYgKGk2NC5lcXogKGdldF9sb2NhbCAwKSkKLSAgICAgICAg
Ly8gICAgICAgKHJldHVybiAoaTY0LmNvbnN0IDEpKQotICAgICAgICAvLyAgICAgICApCi0gICAg
ICAgIC8vICAgICAgKHJldHVybiAoaTY0Lm11bCAoZ2V0X2xvY2FsIDApIChjYWxsICRmYWMgKGk2
NC5zdWIgKGdldF9sb2NhbCAwKSAoaTY0LmNvbnN0IDEpKSkpKQotICAgICAgICAvLyAgICAgICkK
LSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAg
ICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAg
ICAgICAweDAxLCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAotICAgICAgICAgICAg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4NywgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg2NiwgMHg2MSwgMHg2MywKLSAgICAgICAgICAgIDB4MDAs
IDB4MDAsIDB4MGEsIDB4OWUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OTgsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAwLCAweDEx
LCAweDAwLCAweDY4LCAweDAzLCAweDAwLCAweDExLCAweDAxLCAweDA5LCAweDBmLCAweDE0LCAw
eDAwLCAweDE0LCAweDAwLCAweDExLCAweDAxLAotICAgICAgICAgICAgMHg1YywgMHgxNiwgMHgw
MCwgMHg1ZCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0s
IHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5y
ZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21w
aWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAxKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0pLCAy
NCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAg
Ly8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAg
KGZ1bmMgKGV4cG9ydCAiZG91YmxlIikgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQpIChyZXR1cm4g
KGNhbGwgMSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkpKSkKLSAgICAgICAgLy8gICAgIChm
dW5jICRzdW0gKHBhcmFtIGk2NCkgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQpIChyZXR1cm4gKGk2
NC5hZGQgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCi0gICAgICAgIC8vICAgICApCi0g
ICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYx
LCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAyLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMiwgMHgw
MSwgMHgwMiwgMHg0MCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMywgMHg4Mywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MDEsIDB4
MDUsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDcs
IDB4OGEsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAwLCAweDAxLCAweDA2LCAw
eDY0LCAweDZmLCAweDc1LCAweDYyLCAweDZjLCAweDY1LCAweDAwLCAweDAwLCAweDBhLCAweDlj
LCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMiwgMHg4OSwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNiwgMHgw
MSwgMHgwOSwKLSAgICAgICAgICAgIDB4MGYsIDB4ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NWIsIDB4MDksIDB4MGYKLSAgICAgICAg
fTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5y
ZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJlc3VsdFsxXSkg
ewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9KSwgMTYp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpIH0pLCAyKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgot
ICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAobWVtb3J5IDEpCi0gICAgICAg
IC8vICAgICAoZnVuYyAkaWQgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJu
IChnZXRfbG9jYWwgJHZhbHVlKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpZC1j
YWxsIikgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChjYWxsICRpZCAo
Z2V0X2xvY2FsICR2YWx1ZSkpKSkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4
MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAw
eDgzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA1LCAweDgz
LCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwNywgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNywgMHg2OSwgMHg2
NCwKLSAgICAgICAgICAgIDB4MmQsIDB4NjMsIDB4NjEsIDB4NmMsIDB4NmMsIDB4MDAsIDB4MDEs
IDB4MGEsIDB4OTcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODUsIDB4ODAsCi0g
ICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDA5LCAweDBm
LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLAotICAgICAg
ICAgICAgMHgxNiwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4g
cGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8
fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAgICAgIC8vICAobWVtb3J5IDEpCi0g
ICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChw
YXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgKGk2NC5zdG9yZSAoZ2V0
X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgIChyZXR1cm4gKGk2NC5s
b2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAgICkKLSAgICAgICAgLy8gICkKLSAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEs
IDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAyLCAweDAx
LCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4
NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAs
IDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAweDM0LCAweDAzLCAweDAw
LCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYiwgMHgwMywgMHgwMCwgMHgwOSwgMHgwZgot
ICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlm
IChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAg
ICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAgfQot
Ci0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gKG1vZHVsZQot
ICAgICAgICAvLyAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xv
YWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTMyKQotICAg
ICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkKLSAg
ICAgICAgLy8gICAocmV0dXJuIChpMzIubG9hZCAoZ2V0X2xvY2FsICRwdHIpKSkKLSAgICAgICAg
Ly8gICApCi0gICAgICAgIC8vICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7
Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAw
eDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAg
ICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAg
ICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsCi0gICAgICAgICAgICAw
eDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAw
LCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwg
MHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgx
NCwgMHgwMCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxNCwKLSAgICAgICAgICAgIDB4MDEsIDB4MmEs
IDB4MDIsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4o
KnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBs
YW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8g
Y29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZy
b206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAg
ICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIndyaXRlX2FycmF5IikgKHBhcmFtICR4IGkzMikg
KHBhcmFtICRwIGkzMikgKHBhcmFtICRsZW5ndGggaTMyKSAobG9jYWwgJGkgaTMyKQotICAgICAg
ICAvLyAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAo
YmxvY2sKLSAgICAgICAgLy8gICAgICAgKGxvb3AKLSAgICAgICAgLy8gICAgICAgIChicl9pZiAx
IChpMzIuZ2VfdSAoZ2V0X2xvY2FsICRpKSAoZ2V0X2xvY2FsICRsZW5ndGgpKSkKLSAgICAgICAg
Ly8gICAgICAgIChpMzIuc3RvcmUgKGkzMi5hZGQgKGdldF9sb2NhbCAkcCkgKGkzMi5tdWwgKGdl
dF9sb2NhbCAkaSkgKGkzMi5jb25zdCA0KSkpIChnZXRfbG9jYWwgJHgpKQotICAgICAgICAvLyAg
ICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChnZXRfbG9jYWwgJGkp
KSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgKQotICAgICAg
ICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAgICAgLy8gICAgICAp
Ci0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0g
ICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAw
LCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAg
ICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4MiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAgICAg
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAgICAgICAgICAweDY5
LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAweDc5LCAweDAwLCAw
eDAwLCAweDBhLCAweGIyLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgw
MSwgMHhhYywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwg
MHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4
MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDEsIDB4MTQs
IDB4MDMsIDB4MTAsIDB4MDQsIDB4NDIsCi0gICAgICAgICAgICAweDQwLCAweDE0LCAweDAwLCAw
eDMzLCAweDAyLCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAweDAz
LCAweDA2LCAweDAwLCAweDBmLAotICAgICAgICAgICAgMHgwZiwgMHgwOSwgMHgwZgotICAgICAg
ICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFu
LnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAg
ICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5zaXpl
KCkpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSA1OwotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzaXplb2YodWludDMy
X3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3QqPihw
bGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9
KTsKLSAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIENIRUNLX0VR
KG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwotICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0
ICsgbGVuZ3RoXSwgMHUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDEwMHUpOwot
Ci0gICAgICAgIGxlbmd0aCA9IDEwOwotICAgICAgICBvZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQz
Ml90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwotICAgICAgICBvZmZzZXQg
Lz0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFd
LCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7Ci0gICAgfQotCi0gICAgewotICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAv
LyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJy
YXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAgaTMyKSAocGFyYW0gJGxlbmd0aCBpMzIpIChs
b2NhbCAkaSBpMzIpCi0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDAp
KQotICAgICAgICAvLyAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAobG9vcAotICAgICAg
ICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwg
JGxlbmd0aCkpKQotICAgICAgICAvLyAgICAgICAgKGkzMi5zdG9yZTggKGkzMi5hZGQgKGdldF9s
b2NhbCAkcCkgKGdldF9sb2NhbCAkaSkpIChnZXRfbG9jYWwgJHgpKQotICAgICAgICAvLyAgICAg
ICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChnZXRfbG9jYWwgJGkpKSkK
LSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgKQotICAgICAgICAv
LyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAgICAgLy8gICAgICApCi0g
ICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAg
ICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAw
eDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAg
ICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAgICAgIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAgICAgICAgICAweDY5LCAw
eDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAweDc5LCAweDAwLCAweDAw
LCAweDBhLCAweGFmLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwg
MHhhOSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwgMHgw
MCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MTQs
IDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDEsIDB4MTQsIDB4
MDMsIDB4NDAsIDB4MTQsIDB4MDAsCi0gICAgICAgICAgICAweDJlLCAweDAwLCAweDAwLCAweDEw
LCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAweDAzLCAweDA2LCAweDAwLCAweDBmLCAw
eDBmLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVj
dG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3Vs
dFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUg
Y29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7Ci0gICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVu
Z3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7Ci0gICAg
ICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIENIRUNLX0VRKG1l
bW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7Ci0KLSAgICAgICAgbGVuZ3RoID0gMTA7Ci0gICAgICAg
IG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAgICAg
Q0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRd
LCA1dSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAg
ICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAg
ICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0
ciBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgICAgIChpMzIuc3RvcmU4IChnZXRfbG9j
YWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoaTMyLmxv
YWQ4X3MgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAg
ICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgw
MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4Nywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDBiLCAweDY5LCAweDMzLAotICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2Yywg
MHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5
NSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MmUsIDB4
MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAweDIwLCAweDAwLCAweDAwLCAweDA5
LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAg
ICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5
LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQocGxh
bi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSks
IDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAg
ICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAg
Ly8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImkzMl9sb2Fk
OF9zIikgKHBhcmFtICRpIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGkzMi5z
dG9yZTggKGkzMi5jb25zdCA4KSAoZ2V0X2xvY2FsICRpKSkKLSAgICAgICAgLy8gICAgICAocmV0
dXJuIChpMzIubG9hZDhfcyAoaTMyLmNvbnN0IDgpKSkKLSAgICAgICAgLy8gICAgICApCi0gICAg
ICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAx
LCAweDg2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDVmLCAweDZj
LCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAw
eDk1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLAotICAgICAgICAgICAgMHgwMSwgMHg4ZiwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHgyZSwg
MHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKLSAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MDAsIDB4
MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwot
ICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0
bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
IH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAg
Ly8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vIChtb2R1bGUKLSAgICAgICAgLy8gIChtZW1v
cnkgMSkKLSAgICAgICAgLy8gIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRp
IGkzMikgKHBhcmFtICRwdHIgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAoaTMyLnN0
b3JlIChnZXRfbG9jYWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8vICAgKHJldHVy
biAoaTMyLmxvYWQgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8vICAgKQotICAgICAgICAv
LyAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgw
MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4Nywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIsIDB4
MDIsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDBiLCAweDY5LCAweDMzLAotICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2Yywg
MHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5
NSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MzQsIDB4
MDMsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAweDJiLCAweDAzLCAweDAwLCAweDA5
LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAg
ICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5
LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KC0xMiksIGJveChwbGFuLm1lbW9yeS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90
KSkgfSksIC0xMik7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToK
LSAgICAgICAgLy8gKG1vZHVsZQotICAgICAgICAvLyAgKG1lbW9yeSAxKQotICAgICAgICAvLyAg
KGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBp
MzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9sb2NhbCAkcHRy
KSAoZ2V0X2xvY2FsICRpKSkKLSAgICAgICAgLy8gICAocmV0dXJuIChpMzIubG9hZCAoZ2V0X2xv
Y2FsICRwdHIpKSkKLSAgICAgICAgLy8gICApCi0gICAgICAgIC8vICApCi0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZk
LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwg
MHg4MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4Njks
IDB4MzMsCi0gICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAw
eDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgw
LAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxNCwKLSAg
ICAgICAgICAgIDB4MDEsIDB4MmEsIDB4MDIsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsK
LQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1
bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
TG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSks
IDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAg
ICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAg
Ly8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIndyaXRlX2Fy
cmF5IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICRwIGkzMikgKHBhcmFtICRsZW5ndGggaTMyKSAo
bG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAw
KSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAgKGxvb3AKLSAgICAg
ICAgLy8gICAgICAgIChicl9pZiAxIChpMzIuZ2VfdSAoZ2V0X2xvY2FsICRpKSAoZ2V0X2xvY2Fs
ICRsZW5ndGgpKSkKLSAgICAgICAgLy8gICAgICAgIChpMzIuc3RvcmUgKGkzMi5hZGQgKGdldF9s
b2NhbCAkcCkgKGkzMi5tdWwgKGdldF9sb2NhbCAkaSkgKGkzMi5jb25zdCA0KSkpIChnZXRfbG9j
YWwgJHgpKQotICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNv
bnN0IDEpIChnZXRfbG9jYWwgJGkpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAg
ICAvLyAgICAgICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVy
bikKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4
MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4
NzIsCi0gICAgICAgICAgICAweDY5LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcy
LCAweDYxLCAweDc5LCAweDAwLCAweDAwLCAweDBhLCAweGIyLCAweDgwLCAweDgwLCAweDgwLAot
ICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHhhYywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAg
ICAgICAgIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4
MDEsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDIsCi0gICAgICAgICAg
ICAweDQwLCAweDE0LCAweDAwLCAweDMzLCAweDAyLCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAw
eDAzLCAweDQwLCAweDE1LCAweDAzLCAweDA2LCAweDAwLCAweDBmLAotICAgICAgICAgICAgMHgw
ZiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRb
MF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNv
cnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNT
RVJUKHBsYW4ubWVtb3J5LT5zaXplKCkpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwotICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3Rh
dGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZv
a2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChv
ZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJf
dCk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwotICAgICAgICBD
SEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBDSEVDS19FUShtZW1vcnlb
aSArIG9mZnNldF0sIDEwMHUpOwotCi0gICAgICAgIGxlbmd0aCA9IDEwOwotICAgICAgICBvZmZz
ZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgp
IH0pOwotICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgQ0hFQ0tf
RVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29m
ZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7
Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8g
ICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1
bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAgaTMyKSAo
cGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBpMzIpCi0gICAgICAgIC8vICAgICAgKHNldF9s
b2NhbCAkaSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgIChibG9jawotICAgICAgICAv
LyAgICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChnZXRf
bG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkpKQotICAgICAgICAvLyAgICAgICAgKGkzMi5z
dG9yZTggKGkzMi5hZGQgKGdldF9sb2NhbCAkcCkgKGdldF9sb2NhbCAkaSkpIChnZXRfbG9jYWwg
JHgpKQotICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0
IDEpIChnZXRfbG9jYWwgJGkpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAv
LyAgICAgICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikK
LSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50
OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBj
LCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgw
MywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4Mywg
MHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIs
Ci0gICAgICAgICAgICAweDY5LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAw
eDYxLCAweDc5LCAweDAwLCAweDAwLCAweDBhLCAweGFmLCAweDgwLCAweDgwLCAweDgwLAotICAg
ICAgICAgICAgMHgwMCwgMHgwMSwgMHhhOSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAg
ICAgIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEs
IDB4MTQsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTQsIDB4MDAsCi0gICAgICAgICAgICAw
eDJlLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAweDAz
LCAweDA2LCAweDAwLCAweDBmLCAweDBmLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUo
KSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1
bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgfQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IDU7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9y
eSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAg
ICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29m
ZnNldCAtIDFdLCAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhd
LCAwdSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7Ci0KLSAgICAgICAg
bGVuZ3RoID0gMTA7Ci0gICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9rZTx2b2lkPigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3go
bGVuZ3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsK
LSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tf
RVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1l
bW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFy
YW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgICAg
IChpMzIuc3RvcmU4IChnZXRfbG9jYWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8v
ICAgICAgKHJldHVybiAoaTMyLmxvYWQ4X3MgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8v
ICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
ID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwK
LSAgICAgICAgICAgIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAg
ICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDY5LCAweDMzLAotICAgICAgICAg
ICAgMHgzMiwgMHg1ZiwgMHg2YywgMHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3Mywg
MHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4
MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEs
IDB4MTQsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAw
eDIwLCAweDAwLCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVk
IHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
fQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEp
OwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8v
ICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChm
dW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHJlc3VsdCBpMzIpCi0g
ICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTggKGkzMi5jb25zdCA4KSAoZ2V0X2xvY2FsICRpKSkK
LSAgICAgICAgLy8gICAgICAocmV0dXJuIChpMzIubG9hZDhfcyAoaTMyLmNvbnN0IDgpKSkKLSAg
ICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4Miwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwgMHg4
MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsIDB4MzIsCi0g
ICAgICAgICAgICAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDcz
LCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLAotICAgICAg
ICAgICAgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgw
OCwgMHgxNCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKLSAgICAgICAgICAg
IDB4MjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWls
ZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9
KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwotICAg
IH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgICht
b2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5jICJkdW1iLWVxIiAocGFyYW0gJHggaTMyKSAocGFy
YW0gJHkgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaWYgKGkzMi5lcSAoZ2V0
X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICAgKHRoZW4gKGJyIDAp
KQotICAgICAgICAvLyAgICAgICAoZWxzZSAocmV0dXJuIChpMzIuY29uc3QgMSkpKSkKLSAgICAg
ICAgLy8gICAgICAocmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgKQotICAg
ICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAg
ICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAg
IDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGIsIDB4ODAsCi0gICAgICAgICAgICAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDA3LCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJkLCAw
eDY1LCAweDcxLCAweDAwLCAweDAwLCAweDBhLCAweDk5LAotICAgICAgICAgICAgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg5MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwg
MHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDAsIDB4
MDYsIDB4MDAsIDB4MDQsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MTAsIDB4MDAsIDB4MDks
IDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAg
ICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0
aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCksIGJveCg2KSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMg
KGV4cG9ydCAiZHVtYi1sZXNzLXRoYW4iKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAo
cmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAoaWYg
KGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICAg
ICh0aGVuIChyZXR1cm4gKGkzMi5jb25zdCAwKSkpCi0gICAgICAgIC8vICAgICAgICAoZWxzZSAo
aWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAg
ICAgICAgICAgIChyZXR1cm4gKGkzMi5jb25zdCAxKSkpKSkKLSAgICAgICAgLy8gICAgICAgKHNl
dF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAg
ICAgLy8gICAgICAgKGJyIDApCi0gICAgICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICAp
Ci0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0g
ICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAw
LCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAg
ICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAgICAg
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4
MmQsIDB4NmMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAweDY4
LCAweDYxLCAweDZlLCAweDAwLCAweDAwLCAweDBhLCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweGE2LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgw
MCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwMywgMHgwMCwg
MHgxMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgxNCwKLSAgICAgICAgICAgIDB4MDAsIDB4MTAsIDB4
MDAsIDB4NGQsIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MGYsIDB4MTQs
IDB4MDAsIDB4MTAsIDB4MDEsIDB4NDEsCi0gICAgICAgICAgICAweDE1LCAweDAwLCAweDA2LCAw
eDAwLCAweDBmLCAweDAwLCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2
bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFu
LnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNv
bXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9
KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIp
IH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2
KSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwotICAgIH0KLQotCi0gICAg
ewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJyZXR1
cm4taTMyIikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGkzMi5jb25zdCA1KSkpICkKLSAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMs
IDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAweDAz
LCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAw
eDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3MiwgMHg2
NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgwMCwg
MHgwMCwgMHgwYSwKLSAgICAgICAgICAgIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDEsIDB4ODUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4MDks
IDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAg
ICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0
aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IH0pLCA1KTsKLSAgICB9Ci0KLQotICAgIHsKLSAgICAg
ICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1bmMgKGV4cG9ydCAicmV0dXJuLWkzMiIp
IChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCA2
KSkpKSApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg1
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMCwg
MHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNywgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEs
IDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4NjksIDB4
MzMsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAgICAgICAgICAweDhlLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDg4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAw
eDEwLCAweDA1LCAweDEwLCAweDA2LAotICAgICAgICAgICAgMHg0MCwgMHgwOSwgMHgwZgotICAg
ICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgfSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkz
MikgKHJldHVybiAoaTMyLmFkZCAoaTMyLmFkZCAoaTMyLmNvbnN0IDUpIChpMzIuY29uc3QgMykp
IChpMzIuY29uc3QgMykpKSkgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewot
ICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAg
ICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAg
ICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAweDZlLCAw
eDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBhLAotICAgICAgICAgICAgMHg5
MSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwMywKLSAgICAgICAgICAgIDB4NDAsIDB4
MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBs
YW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwg
IXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQg
dG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7Ci0g
ICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAo
ZXhwb3J0ICJyZXR1cm4taTMyIikgKHJlc3VsdCBpMzIpIChibG9jayAocmV0dXJuIChpMzIuYWRk
IChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCAzKSkgKGkzMi5jb25zdCAzKSkpKSAo
dW5yZWFjaGFibGUpKSApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAg
ICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAw
eDAxLCAweDg1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAg
ICAgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwNywgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4
MDAsIDB4MDEsIDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQs
IDB4NjksIDB4MzMsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAgICAgICAgICAweDk1LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAwLCAweDAxLCAweDAwLCAweDEwLCAweDA1LAotICAgICAgICAgICAgMHgxMCwgMHgwMywg
MHg0MCwgMHgxMCwgMHgwMywgMHg0MCwgMHgwOSwgMHgwZiwgMHgwMCwgMHgwZgotICAgICAgICB9
OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJl
c3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFM
b2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAg
IENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFz
aC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgfSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBm
cm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgImFkZCIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAk
eSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgJHgpIChnZXRf
bG9jYWwgJHkpKSkpICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAg
ICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAg
ICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAweDgwLAotICAgICAgICAgICAgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg2MSwgMHg2NCwgMHg2NCwgMHgwMCwgMHgwMCwg
MHgwYSwgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwKLSAgICAgICAgICAgIDB4MDEsIDB4
ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEs
IDB4NDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2
ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVz
dWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGls
ZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAx
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9KSwgMTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0xKSwgYm94KDEp
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgx
KSB9KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgfQotCi0gICAgewot
ICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAg
ICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAibG9jYWxzIikgKHBhcmFtICR4IGkzMikgKHJlc3VsdCBp
MzIpIChsb2NhbCAkbnVtIGkzMikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRudW0gKGdl
dF9sb2NhbCAkeCkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0X2xvY2FsICRudW0pKQot
ICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgy
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhhLCAweDgwLCAw
eDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2YywgMHg2ZiwgMHg2
MywgMHg2MSwgMHg2YywgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg4MCwgMHg4MCwK
LSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MTQsCi0gICAg
ICAgICAgICAweDAxLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFu
KCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFw
bGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRv
IGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMTApIH0pLCAxMCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMg
KGV4cG9ydCAic3VtIikgKHBhcmFtICR4IGkzMikgKHJlc3VsdCBpMzIpIChsb2NhbCAkeSBpMzIp
Ci0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkeSAoaTMyLmNvbnN0IDApKQotICAgICAgICAv
LyAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAg
KGJyX2lmIDAgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKSkKLSAgICAgICAg
Ly8gICAgICAgIChzZXRfbG9jYWwgJHkgKGkzMi5hZGQgKGdldF9sb2NhbCAkeCkgKGdldF9sb2Nh
bCAkeSkpKQotICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0X2xv
Y2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAxKQotICAgICAg
ICAvLyAgICAgICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVy
biAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0g
ICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYx
LCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwg
MHgwNywgMHg4NywgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDMsIDB4NzMsIDB4NzUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YWUsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsCi0gICAgICAgICAgICAweGE4LCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDAxLCAweDAyLCAweDAw
LCAweDAxLCAweDAwLAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0ZCwg
MHgwNywgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgxNSwgMHgwMSwgMHgx
NCwgMHgwMCwKLSAgICAgICAgICAgIDB4MTAsIDB4MDEsIDB4NDEsIDB4MTUsIDB4MDAsIDB4MDYs
IDB4MDEsIDB4MGYsIDB4MGYsIDB4MTQsIDB4MDEsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQot
ICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQu
c2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4o
Ik1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFT
SCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAz
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCkgfSksIDUwNTApOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8g
R2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChm
dW5jIChleHBvcnQgImR1bWItbXVsdCIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChy
ZXN1bHQgaTMyKSAobG9jYWwgJHRvdGFsIGkzMikgKGxvY2FsICRpIGkzMikgKGxvY2FsICRqIGkz
MikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICR0b3RhbCAoaTMyLmNvbnN0IDApKQotICAg
ICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAg
ICAoYmxvY2sgKGxvb3AKLSAgICAgICAgLy8gICAgICAgICAgICAgIChicl9pZiAxIChpMzIuZXEg
KGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkeCkpKQotICAgICAgICAvLyAgICAgICAgICAgICAg
KHNldF9sb2NhbCAkaiAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgICAgICAgICAgKHNl
dF9sb2NhbCAkaSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRpKSAoaTMyLmNvbnN0IDEpKSkKLSAgICAg
ICAgLy8gICAgICAgICAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAgICAgICAgICAgKGJyX2lm
IDEgKGkzMi5lcSAoZ2V0X2xvY2FsICRqKSAoZ2V0X2xvY2FsICR5KSkpCi0gICAgICAgIC8vICAg
ICAgICAgICAgICAgKHNldF9sb2NhbCAkdG90YWwgKGkzMi5hZGQgKGdldF9sb2NhbCAkdG90YWwp
IChpMzIuY29uc3QgMSkpKQotICAgICAgICAvLyAgICAgICAgICAgICAgIChzZXRfbG9jYWwgJGog
KGkzMi5hZGQgKGdldF9sb2NhbCAkaikgKGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAg
ICAgICAgICAgKGJyIDApCi0gICAgICAgIC8vICAgICAgICAgICAgICAgKQotICAgICAgICAvLyAg
ICAgICAgICAgICAgKSkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9jYWwgJHRvdGFs
KSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4
ZCwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDksIDB4NjQs
IDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NmQsIDB4NzUsIDB4NmMsIDB4NzQsIDB4MDAsIDB4
MDAsCi0gICAgICAgICAgICAweDBhLCAweGM3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweGMxLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAzLCAweDAxLCAweDEwLAot
ICAgICAgICAgICAgMHgwMCwgMHgxNSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgw
MSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMCwgMHg0ZCwKLSAgICAg
ICAgICAgIDB4MDcsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MTQsIDB4MDMsIDB4
MTAsIDB4MDEsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MTQsCi0gICAgICAgICAg
ICAweDA0LCAweDE0LCAweDAxLCAweDRkLCAweDA3LCAweDAxLCAweDE0LCAweDAyLCAweDEwLCAw
eDAxLCAweDQwLCAweDE1LCAweDAyLCAweDE0LCAweDA0LCAweDEwLAotICAgICAgICAgICAgMHgw
MSwgMHg0MCwgMHgxNSwgMHgwNCwgMHgwNiwgMHgwMCwgMHgwZiwgMHgwZiwgMHgwZiwgMHgxNCwg
MHgwMiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZl
Y3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1
bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxl
IGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAy
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwg
NCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikg
fSksIDYwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAwMDApOwotICAgIH0KLQot
ICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUK
LSAgICAgICAgLy8gICAgIChmdW5jICJkdW1iLWxlc3MtdGhhbiIgKHBhcmFtICR4IGkzMikgKHBh
cmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGxvb3AKLSAgICAgICAg
Ly8gICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAg
ICAgICAoYnJfaWYgMCAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChnZXRfbG9jYWwgJHkpKSkKLSAg
ICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAgICApCi0gICAgICAgIC8v
ICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgICApCi0gICAg
ICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGJsb2NrCi0gICAgICAgIC8v
ICAgICAgICAgKGJyX2lmIDAgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKSkK
LSAgICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAgICApCi0gICAgICAg
IC8vICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMSkpCi0gICAgICAgIC8vICAgICAgICApCi0g
ICAgICAgIC8vICAgICAgIChzZXRfbG9jYWwgJHggKGkzMi5zdWIgKGdldF9sb2NhbCAkeCkgKGkz
Mi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAp
Ci0gICAgICAgIC8vICAgICAgICh1bnJlYWNoYWJsZSkKLSAgICAgICAgLy8gICAgICApCi0gICAg
ICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAx
LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAg
MHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4
NmMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDYx
LCAweDZlLCAweDAwLCAweDAwLCAweDBhLCAweGI5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweGIzLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgw
MiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwg
MHg0ZCwgMHgwNywgMHgwMCwgMHgwNiwKLSAgICAgICAgICAgIDB4MDEsIDB4MGYsIDB4MTAsIDB4
MDAsIDB4MDksIDB4MGYsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTAs
IDB4MDAsIDB4NGQsIDB4MDcsCi0gICAgICAgICAgICAweDAwLCAweDA2LCAweDAxLCAweDBmLCAw
eDEwLCAweDAxLCAweDA5LCAweDBmLCAweDE0LCAweDAwLCAweDEwLCAweDAxLCAweDQxLCAweDE1
LCAweDAwLCAweDA2LAotICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZgotICAgICAg
ICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFu
LnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAg
ICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9
KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikg
fSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEp
IH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KDYpIH0pLCAwKTsKLSAgICB9Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIENvbW1hbmRMaW5lIG9w
dGlvbnMoYXJnYywgYXJndik7Ci0KLSAgICBpZiAob3B0aW9ucy5tX3J1bkxFQlRlc3RzKQotICAg
ICAgICBydW5MRUJUZXN0cygpOwotCi0gICAgaWYgKG9wdGlvbnMubV9ydW5XQVNNVGVzdHMpIHsK
LSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwotICAgICAgICB2bSA9ICZKU0M6OlZNOjpjcmVhdGUoSlNDOjpMYXJnZUhlYXApLmxlYWtS
ZWYoKTsKLSAgICAgICAgcnVuV0FTTVRlc3RzKCk7Ci0jZWxzZQotICAgICAgICBkYXRhTG9nTG4o
IldBU00gaXMgbm90IGVuYWJsZWQhIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0j
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIH0KLQotICAgIHJldHVybiBFWElUX1NV
Q0NFU1M7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4MTMy
MDczOGQyZjA0NDQ4ZjI2Yzg3ZmFlNWZiMDFiNWYzMzRmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCkBAIC0wLDAgKzEsMTIwNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJJbml0aWFsaXpl
VGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJK
U1N0cmluZy5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5jbHVkZSAiUHJvdG9DYWxs
RnJhbWUuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNs
dWRlICJXYXNtUGxhbi5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3
dGYvTEVCRGVjb2Rlci5oPgorCitjbGFzcyBDb21tYW5kTGluZSB7CitwdWJsaWM6CisgICAgQ29t
bWFuZExpbmUoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorICAgIHsKKyAgICAgICAgcGFyc2VBcmd1
bWVudHMoYXJnYywgYXJndik7CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4gbV9hcmd1bWVu
dHM7CisgICAgYm9vbCBtX3J1bkxFQlRlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcnVuV2Fz
bVRlc3RzIHsgZmFsc2UgfTsKKworICAgIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50LCBjaGFyKiop
OworfTsKKworc3RhdGljIE5PX1JFVFVSTiB2b2lkIHByaW50VXNhZ2VTdGF0ZW1lbnQoYm9vbCBo
ZWxwID0gZmFsc2UpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogdGVzdFdhc20gW29w
dGlvbnNdXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWh8LS1oZWxwICBQcmludHMgdGhp
cyBoZWxwIG1lc3NhZ2VcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAtbHwtLWxlYiAgIFJ1
bnMgdGhlIExFQiBkZWNvZGVyIHRlc3RzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXd8
LS13ZWIgICBSdW4gdGhlIFdhc20gdGVzdHNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4i
KTsKKworICAgIGV4aXQoaGVscCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7Cit9CisK
K3ZvaWQgQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikK
K3sKKyAgICBpbnQgaSA9IDE7CisKKyAgICBmb3IgKDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAg
ICBjb25zdCBjaGFyKiBhcmcgPSBhcmd2W2ldOworICAgICAgICBpZiAoIXN0cmNtcChhcmcsICIt
aCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oZWxwIikpCisgICAgICAgICAgICBwcmludFVzYWdlU3Rh
dGVtZW50KHRydWUpOworCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi1sIikgfHwgIXN0cmNt
cChhcmcsICItLWxlYiIpKQorICAgICAgICAgICAgbV9ydW5MRUJUZXN0cyA9IHRydWU7CisKKyAg
ICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLXciKSB8fCAhc3RyY21wKGFyZywgIi0td2ViIikpCisg
ICAgICAgICAgICBtX3J1bldhc21UZXN0cyA9IHRydWU7CisgICAgfQorCisgICAgZm9yICg7IGkg
PCBhcmdjOyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd2W2ldKTsKKworfQor
CitTdGF0aWNMb2NrIGNyYXNoTG9jazsKKworI2RlZmluZSBDSEVDS19FUSh4LCB5KSBkbyB7IFwK
KyAgICAgICAgYXV0byBfX3ggPSAoeCk7IFwKKyAgICAgICAgYXV0byBfX3kgPSAoeSk7IFwKKyAg
ICAgICAgaWYgKF9feCA9PSBfX3kpIFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgY3Jhc2hM
b2NrLmxvY2soKTsgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9f
LCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgdG9DU3RyaW5nKCN4ICIgPT0gIiAjeSwg
IiAoIiAjeCAiID09ICIsIF9feCwgIiwgIiAjeSAiID09ICIsIF9feSwgIikiKS5kYXRhKCkpOyBc
CisgICAgICAgIENSQVNIKCk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBGT1Jf
RUFDSF9VTlNJR05FRF9MRUJfVEVTVChtYWNybykgXAorICAgIC8qIFNpbXBsZSB0ZXN0cyB0aGF0
IHVzZSBhbGwgdGhlIGJpdHMgaW4gdGhlIGFycmF5ICovIFwKKyAgICBtYWNybygoeyAweDA3IH0p
LCAwLCB0cnVlLCAweDdsdSwgMWx1KSBcCisgICAgbWFjcm8oKHsgMHg3NyB9KSwgMCwgdHJ1ZSwg
MHg3N2x1LCAxbHUpIFwKKyAgICBtYWNybygoeyAweDgwLCAweDA3IH0pLCAwLCB0cnVlLCAweDM4
MGx1LCAybHUpIFwKKyAgICBtYWNybygoeyAweDg5LCAweDEyIH0pLCAwLCB0cnVlLCAweDkwOWx1
LCAybHUpIFwKKyAgICBtYWNybygoeyAweGYzLCAweDg1LCAweDAyIH0pLCAwLCB0cnVlLCAweDgy
ZjNsdSwgM2x1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCB9KSwgMCwg
dHJ1ZSwgMHhlOWZjMmYzbHUsIDRsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4ZmYs
IDB4ZjQsIDB4N2YgfSksIDAsIHRydWUsIDB4ZmU5ZmMyZjNsdSwgNWx1KSBcCisgICAgLyogVGVz
dCB3aXRoIGV4dHJhIHRyYWlsaW5nIG51bWJlcnMgKi8gXAorICAgIG1hY3JvKCh7IDB4MDcsIDB4
ODAgfSksIDAsIHRydWUsIDB4N2x1LCAxbHUpIFwKKyAgICBtYWNybygoeyAweDA3LCAweDc1IH0p
LCAwLCB0cnVlLCAweDdsdSwgMWx1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwg
MHg3NCwgMHg0MyB9KSwgMCwgdHJ1ZSwgMHhlOWZjMmYzbHUsIDRsdSkgXAorICAgIG1hY3JvKCh7
IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4NzQsIDB4ODAgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0
bHUpIFwKKyAgICAvKiBUZXN0IHdpdGggcHJlY2VlZGluZyBudW1iZXJzICovIFwKKyAgICBtYWNy
bygoeyAweGYzLCAweDA3IH0pLCAxLCB0cnVlLCAweDdsdSwgMmx1KSBcCisgICAgbWFjcm8oKHsg
MHgwMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjIs
IDB4NTMsIDB4NDMsIDB4NjcsIDB4NzksIDB4NzcgfSksIDUsIHRydWUsIDB4NzdsdSwgNmx1KSBc
CisgICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NyB9KSwgNSwg
dHJ1ZSwgMHg3N2x1LCA2dWwpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYz
LCAweDg1LCAweDAyIH0pLCAzLCB0cnVlLCAweDgyZjNsdSwgNmx1KSBcCisgICAgLyogVGVzdCBp
biB0aGUgbWlkZGxlICovIFwKKyAgICBtYWNybygoeyAweGYzLCAweDA3LCAweDg5IH0pLCAxLCB0
cnVlLCAweDdsdSwgMmx1KSBcCisgICAgbWFjcm8oKHsgMHgwMywgMHgwNywgMHgyMyB9KSwgMSwg
dHJ1ZSwgMHg3bHUsIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4Njcs
IDB4NzksIDB4NzcsIDB4NDMgfSksIDUsIHRydWUsIDB4NzdsdSwgNmx1KSBcCisgICAgbWFjcm8o
KHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NywgMHhmOSB9KSwgNSwgdHJ1ZSwg
MHg3N2x1LCA2bHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYzLCAweDg1
LCAweDAyLCAweGE0IH0pLCAzLCB0cnVlLCAweDgyZjNsdSwgNmx1KSBcCisgICAgLyogVGVzdCBk
ZWNvZGUgdG9vIGxvbmcgKi8gXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4ODB9KSwgMCwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKKyAgICBtYWNybygoeyAweDgw
LCAweDgwLCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDEsIGZhbHNlLCAweDBsdSwg
MGx1KSBcCisgICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywg
MHhmZn0pLCAwLCBmYWxzZSwgMHgwbHUsIDBsdSkgXAorICAgIC8qIFRlc3QgZGVjb2RlIG9mZiBl
bmQgb2YgYXJyYXkgKi8gXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEsIDB4
OWEsIDB4YTMsIDB4ZmZ9KSwgMiwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKKworCisjZGVmaW5lIFRF
U1RfVU5TSUdORURfTEVCX0RFQ09ERShpbml0LCBzdGFydE9mZnNldCwgZXhwZWN0ZWRTdGF0dXMs
IGV4cGVjdGVkUmVzdWx0LCBleHBlY3RlZE9mZnNldCkgXAorICAgIHsgXAorICAgICAgICBWZWN0
b3I8dWludDhfdD4gdmVjdG9yID0gVmVjdG9yPHVpbnQ4X3Q+IGluaXQ7IFwKKyAgICAgICAgc2l6
ZV90IG9mZnNldCA9IHN0YXJ0T2Zmc2V0OyBcCisgICAgICAgIHVpbnQzMl90IHJlc3VsdDsgXAor
ICAgICAgICBib29sIHN0YXR1cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDMyKHZlY3Rv
ci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBDSEVD
S19FUShzdGF0dXMsIGV4cGVjdGVkU3RhdHVzKTsgXAorICAgICAgICBpZiAoZXhwZWN0ZWRTdGF0
dXMpIHsgXAorICAgICAgICAgICAgQ0hFQ0tfRVEocmVzdWx0LCBleHBlY3RlZFJlc3VsdCk7IFwK
KyAgICAgICAgICAgIENIRUNLX0VRKG9mZnNldCwgZXhwZWN0ZWRPZmZzZXQpOyBcCisgICAgICAg
IH0gXAorICAgIH07CisKKworI2RlZmluZSBGT1JfRUFDSF9TSUdORURfTEVCX1RFU1QobWFjcm8p
IFwKKyAgICAvKiBTaW1wbGUgdGVzdHMgdGhhdCB1c2UgYWxsIHRoZSBiaXRzIGluIHRoZSBhcnJh
eSAqLyBcCisgICAgbWFjcm8oKHsgMHgwNyB9KSwgMCwgdHJ1ZSwgMHg3LCAxbHUpIFwKKyAgICBt
YWNybygoeyAweDc3IH0pLCAwLCB0cnVlLCAtMHg5LCAxbHUpIFwKKyAgICBtYWNybygoeyAweDgw
LCAweDA3IH0pLCAwLCB0cnVlLCAweDM4MCwgMmx1KSBcCisgICAgbWFjcm8oKHsgMHg4OSwgMHgx
MiB9KSwgMCwgdHJ1ZSwgMHg5MDksIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4
MDIgfSksIDAsIHRydWUsIDB4ODJmMywgM2x1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwg
MHhmZiwgMHg3NCB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywgNGx1KSBcCisgICAgbWFjcm8oKHsg
MHhmMywgMHg4NSwgMHhmZiwgMHhmNCwgMHg3ZiB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywgNWx1
KSBcCisgICAgLyogVGVzdCB3aXRoIGV4dHJhIHRyYWlsaW5nIG51bWJlcnMgKi8gXAorICAgIG1h
Y3JvKCh7IDB4MDcsIDB4ODAgfSksIDAsIHRydWUsIDB4NywgMWx1KSBcCisgICAgbWFjcm8oKHsg
MHgwNywgMHg3NSB9KSwgMCwgdHJ1ZSwgMHg3LCAxbHUpIFwKKyAgICBtYWNybygoeyAweGYzLCAw
eDg1LCAweGZmLCAweDc0LCAweDQzIH0pLCAwLCB0cnVlLCAweGZlOWZjMmYzLCA0bHUpIFwKKyAg
ICBtYWNybygoeyAweGYzLCAweDg1LCAweGZmLCAweDc0LCAweDgwIH0pLCAwLCB0cnVlLCAweGZl
OWZjMmYzLCA0bHUpIFwKKyAgICAvKiBUZXN0IHdpdGggcHJlY2VlZGluZyBudW1iZXJzICovIFwK
KyAgICBtYWNybygoeyAweGYzLCAweDA3IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkgXAorICAgIG1h
Y3JvKCh7IDB4MDMsIDB4MDcgfSksIDEsIHRydWUsIDB4NywgMmx1KSBcCisgICAgbWFjcm8oKHsg
MHhmMiwgMHg1MywgMHg0MywgMHg2NywgMHg3OSwgMHg3NyB9KSwgNSwgdHJ1ZSwgLTB4OSwgNmx1
KSBcCisgICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NyB9KSwg
NSwgdHJ1ZSwgLTB4OSwgNmx1KSBcCisgICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhm
MywgMHg4NSwgMHgwMiB9KSwgMywgdHJ1ZSwgMHg4MmYzLCA2bHUpIFwKKyAgICAvKiBUZXN0IGlu
IHRoZSBtaWRkbGUgKi8gXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4MDcsIDB4ODkgfSksIDEsIHRy
dWUsIDB4NywgMmx1KSBcCisgICAgbWFjcm8oKHsgMHgwMywgMHgwNywgMHgyMyB9KSwgMSwgdHJ1
ZSwgMHg3LCAybHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweDY3LCAweDc5
LCAweDc3LCAweDQzIH0pLCA1LCB0cnVlLCAtMHg5LCA2bHUpIFwKKyAgICBtYWNybygoeyAweGYy
LCAweDUzLCAweDQzLCAweGY3LCAweDg0LCAweDc3LCAweGY5IH0pLCA1LCB0cnVlLCAtMHg5LCA2
bHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYzLCAweDg1LCAweDAyLCAw
eGE0IH0pLCAzLCB0cnVlLCAweDgyZjMsIDZsdSkgXAorICAgIC8qIFRlc3QgZGVjb2RlIHRvbyBs
b25nICovIFwKKyAgICBtYWNybygoeyAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgw
fSksIDAsIGZhbHNlLCAweDAsIDBsdSkgXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIs
IDB4OGEsIDB4OWEsIDB4YTMsIDB4ZmZ9KSwgMSwgZmFsc2UsIDB4MCwgMGx1KSBcCisgICAgbWFj
cm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhmZn0pLCAwLCBmYWxz
ZSwgMHgwLCAwbHUpIFwKKyAgICAvKiBUZXN0IGRlY29kZSBvZmYgZW5kIG9mIGFycmF5ICovIFwK
KyAgICBtYWNybygoeyAweDgwLCAweDgwLCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSks
IDIsIGZhbHNlLCAweDAsIDBsdSkgXAorCisKKyNkZWZpbmUgVEVTVF9TSUdORURfTEVCX0RFQ09E
RShpbml0LCBzdGFydE9mZnNldCwgZXhwZWN0ZWRTdGF0dXMsIGV4cGVjdGVkUmVzdWx0LCBleHBl
Y3RlZE9mZnNldCkgXAorICAgIHsgXAorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
VmVjdG9yPHVpbnQ4X3Q+IGluaXQ7IFwKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0YXJ0T2Zm
c2V0OyBcCisgICAgICAgIGludDMyX3QgcmVzdWx0OyBcCisgICAgICAgIGJvb2wgc3RhdHVzID0g
V1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVJbnQzMih2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgp
LCBvZmZzZXQsIHJlc3VsdCk7IFwKKyAgICAgICAgQ0hFQ0tfRVEoc3RhdHVzLCBleHBlY3RlZFN0
YXR1cyk7IFwKKyAgICAgICAgaWYgKGV4cGVjdGVkU3RhdHVzKSB7IFwKKyAgICAgICAgICAgIGlu
dDMyX3QgZXhwZWN0ZWQgPSBleHBlY3RlZFJlc3VsdDsgXAorICAgICAgICAgICAgQ0hFQ0tfRVEo
cmVzdWx0LCBleHBlY3RlZCk7IFwKKyAgICAgICAgICAgIENIRUNLX0VRKG9mZnNldCwgZXhwZWN0
ZWRPZmZzZXQpOyBcCisgICAgICAgIH0gXAorICAgIH07CisKKworc3RhdGljIHZvaWQgcnVuTEVC
VGVzdHMoKQoreworICAgIEZPUl9FQUNIX1VOU0lHTkVEX0xFQl9URVNUKFRFU1RfVU5TSUdORURf
TEVCX0RFQ09ERSkKKyAgICBGT1JfRUFDSF9TSUdORURfTEVCX1RFU1QoVEVTVF9TSUdORURfTEVC
X0RFQ09ERSkKK30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworc3RhdGljIEpTQzo6Vk0q
IHZtOworCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIFdhc207Cit1c2lu
ZyBuYW1lc3BhY2UgQjM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIGludm9rZShNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgcHRyLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJncykK
K3sKKyAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQ7CisgICAgLy8gU2luY2Ugdm1FbnRyeVRvSmF2
YVNjcmlwdCBleHBlY3RzIGEgdGhpcyB2YWx1ZSB3ZSBjbGFpbSB0aGVyZSBpcyBvbmUuLi4gdGhl
cmUgaXNuJ3QuCisgICAgaW50IGFyZ0NvdW50ID0gMTsKKyAgICBKU1ZhbHVlKiByZW1haW5pbmdB
cmd1bWVudHMgPSBudWxscHRyOworICAgIGlmIChhcmdzLnNpemUoKSkgeworICAgICAgICByZW1h
aW5pbmdBcmd1bWVudHMgPSBjb25zdF9jYXN0PEpTVmFsdWUqPihhcmdzLmJlZ2luKCkpOworICAg
ICAgICBmaXJzdEFyZ3VtZW50ID0gKnJlbWFpbmluZ0FyZ3VtZW50czsKKyAgICAgICAgcmVtYWlu
aW5nQXJndW1lbnRzKys7CisgICAgICAgIGFyZ0NvdW50ID0gYXJncy5zaXplKCk7CisgICAgfQor
CisgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CisgICAgcHJvdG9DYWxsRnJhbWUu
aW5pdChudWxscHRyLCBudWxscHRyLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5n
QXJndW1lbnRzKTsKKworICAgIC8vIFRoaXMgd29uJ3Qgd29yayBmb3IgZmxvYXRpbmcgcG9pbnQg
dmFsdWVzIGJ1dCB3ZSBkb24ndCBoYXZlIHRob3NlIHlldC4KKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4odm1FbnRyeVRvV2FzbShwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdm0sICZwcm90b0Nh
bGxGcmFtZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBpbnZva2UoY29uc3QgQ29t
cGlsYXRpb24mIGNvZGUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlPiBhcmdzKQorewor
ICAgIHJldHVybiBpbnZva2U8VD4oY29kZS5jb2RlKCksIGFyZ3MpOworfQorCitpbmxpbmUgSlNW
YWx1ZSBib3godWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh2
YWx1ZSk7Cit9CisKKy8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVzLgorc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKK3sKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAg
ICAgIC8vICAgICAoZnVuYyAkc3VtMTIgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkz
MikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFt
IGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHJl
c3VsdCBpMzIpIChyZXR1cm4gKGkzMi5hZGQgKGdldF9sb2NhbCAwKSAoaTMyLmFkZCAoZ2V0X2xv
Y2FsIDEpIChpMzIuYWRkIChnZXRfbG9jYWwgMikgKGkzMi5hZGQgKGdldF9sb2NhbCAzKSAoaTMy
LmFkZCAoZ2V0X2xvY2FsIDQpIChpMzIuYWRkIChnZXRfbG9jYWwgNSkgKGkzMi5hZGQgKGdldF9s
b2NhbCA2KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDcpIChpMzIuYWRkIChnZXRfbG9jYWwgOCkgKGkz
Mi5hZGQgKGdldF9sb2NhbCA5KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDEwKSAoZ2V0X2xvY2FsIDEx
KSkpKSkpKSkpKSkpKSkKKyAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIm11bHQxMiIpIChw
YXJhbSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChjYWxsICRzdW0xMiAoZ2V0X2xvY2FsIDAp
IChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkg
KGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAo
Z2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSkpKQorICAgICAgICAvLyAg
ICAgKQorCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDk2
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDQwLAorICAgICAgICAgICAgMHgwYywg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4
MDAsIDB4MDEsIDB4MDUsIDB4ODMsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDAxLCAweDA3LCAweDhhLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDA2LCAweDZkLCAweDc1LAorICAgICAgICAgICAgMHg2YywgMHg3NCwgMHgzMSwgMHgz
MiwgMHgwMCwgMHgwMSwgMHgwYSwgMHhjZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwg
MHhhNiwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4
MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDQsIDB4MTQs
IDB4MDUsIDB4MTQsCisgICAgICAgICAgICAweDA2LCAweDE0LCAweDA3LCAweDE0LCAweDA4LCAw
eDE0LCAweDA5LCAweDE0LCAweDBhLCAweDE0LCAweDBiLCAweDQwLCAweDQwLCAweDQwLCAweDQw
LCAweDQwLAorICAgICAgICAgICAgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwg
MHgwOSwgMHgwZiwgMHg5ZCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgw
MCwKKyAgICAgICAgICAgIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQs
IDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsCisg
ICAgICAgICAgICAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE2LCAweDAw
LCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9y
KTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3VsdFsw
XSB8fCAhcGxhbi5yZXN1bHRbMV0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEyMDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEyKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94
KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3go
NyksIGJveCg4KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAg
ICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVu
YyAkZmFjIChleHBvcnQgImZhYyIpIChwYXJhbSBpNjQpIChyZXN1bHQgaTY0KQorICAgICAgICAv
LyAgICAgIChpZiAoaTY0LmVxeiAoZ2V0X2xvY2FsIDApKQorICAgICAgICAvLyAgICAgICAocmV0
dXJuIChpNjQuY29uc3QgMSkpCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAo
cmV0dXJuIChpNjQubXVsIChnZXRfbG9jYWwgMCkgKGNhbGwgJGZhYyAoaTY0LnN1YiAoZ2V0X2xv
Y2FsIDApIChpNjQuY29uc3QgMSkpKSkpCisgICAgICAgIC8vICAgICAgKQorICAgICAgICAvLyAg
ICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgw
MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4Niwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDEsIDB4
MDIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDAwLCAw
eDAxLCAweDAwLCAweDAxLCAweDA3LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDAzLCAweDY2LCAweDYxLCAweDYzLAorICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwYSwg
MHg5ZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg5OCwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDAsIDB4MTEsIDB4MDAsIDB4Njgs
IDB4MDMsIDB4MDAsIDB4MTEsIDB4MDEsIDB4MDksIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTQsIDB4
MDAsIDB4MTEsIDB4MDEsCisgICAgICAgICAgICAweDVjLCAweDE2LCAweDAwLCAweDVkLCAweDA5
LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAg
ICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5
LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDEpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSks
IDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMikgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNCkgfSksIDI0KTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxl
CisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0
ICJkb3VibGUiKSAocGFyYW0gaTY0KSAocmVzdWx0IGk2NCkgKHJldHVybiAoY2FsbCAxIChnZXRf
bG9jYWwgMCkgKGdldF9sb2NhbCAwKSkpKQorICAgICAgICAvLyAgICAgKGZ1bmMgJHN1bSAocGFy
YW0gaTY0KSAocGFyYW0gaTY0KSAocmVzdWx0IGk2NCkgKHJldHVybiAoaTY0LmFkZCAoZ2V0X2xv
Y2FsIDApIChnZXRfbG9jYWwgMSkpKSkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQs
IDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDIsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAyLCAweDAxLCAweDAyLCAweDQw
LCAweDAyLCAweDAyLCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgzLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgwMSwgMHgwNSwgMHg4MywgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4YSwgMHg4MCwg
MHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4NjQsIDB4NmYsIDB4
NzUsIDB4NjIsIDB4NmMsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OWMsIDB4ODAsIDB4ODAs
CisgICAgICAgICAgICAweDgwLCAweDAwLCAweDAyLCAweDg5LCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE2LCAweDAxLCAweDA5LAorICAg
ICAgICAgICAgMHgwZiwgMHg4OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwg
MHgwMCwgMHgxNCwgMHgwMSwgMHg1YiwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAg
IFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkg
IT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eCgwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTUpIH0pLCAxNik7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAyMDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206CisgICAgICAgIC8vICAg
IChtb2R1bGUKKyAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKKyAgICAgICAgLy8gICAgIChmdW5j
ICRpZCAocGFyYW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGdldF9sb2NhbCAk
dmFsdWUpKSkKKyAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImlkLWNhbGwiKSAocGFyYW0g
JHZhbHVlIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGNhbGwgJGlkIChnZXRfbG9jYWwgJHZh
bHVlKSkpKQorICAgICAgICAvLyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
ID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwK
KyAgICAgICAgICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODMsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCisgICAg
ICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhiLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDA3LCAweDY5LCAweDY0LAorICAgICAgICAg
ICAgMHgyZCwgMHg2MywgMHg2MSwgMHg2YywgMHg2YywgMHgwMCwgMHgwMSwgMHgwYSwgMHg5Nywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg4NSwgMHg4MCwKKyAgICAgICAgICAgIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDksIDB4MGYsIDB4ODcsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsCisgICAgICAgICAgICAweDE2LCAw
eDAwLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVj
dG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3Vs
dFswXSB8fCAhcGxhbi5yZXN1bHRbMV0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxl
IGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MSkgfSksIDEpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Cisg
ICAgICAgIC8vIChtb2R1bGUKKyAgICAgICAgLy8gIChtZW1vcnkgMSkKKyAgICAgICAgLy8gIChm
dW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHBhcmFtICRwdHIgaTMy
KSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAoaTY0LnN0b3JlIChnZXRfbG9jYWwgJHB0cikg
KGdldF9sb2NhbCAkaSkpCisgICAgICAgIC8vICAgKHJldHVybiAoaTY0LmxvYWQgKGdldF9sb2Nh
bCAkcHRyKSkpCisgICAgICAgIC8vICAgKQorICAgICAgICAvLyAgKQorICAgICAgICBWZWN0b3I8
dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwg
MHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDIs
IDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4
ODMsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAx
LCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDY5LCAw
eDMzLAorICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2YywgMHg2ZiwgMHg2MSwgMHg2NCwgMHgz
OCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwK
KyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MTQsCisgICAg
ICAgICAgICAweDAxLCAweDJiLCAweDAzLCAweDAwLCAweDA5LCAweDBmCisgICAgICAgIH07CisK
KyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0
LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xu
KCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAx
MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAobW9kdWxlCisgICAgICAgIC8vICAo
bWVtb3J5IDEpCisgICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJh
bSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgKGkz
Mi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAgIChy
ZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQorICAgICAgICAvLyAgICkKKyAgICAg
ICAgLy8gICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAg
IDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4
ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAy
LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKKyAgICAgICAgICAgIDB4MzIsIDB4NWYsIDB4
NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEs
IDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDhmLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAweDMz
LCAweDAyLCAweDAwLCAweDE0LAorICAgICAgICAgICAgMHgwMSwgMHgyYSwgMHgwMiwgMHgwMCwg
MHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7
CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0p
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJl
Y3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
ZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwg
MSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAg
Ly8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAgICAgICAvLyAgICAg
KGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAgaTMy
KSAocGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBpMzIpCisgICAgICAgIC8vICAgICAgKHNl
dF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgIChibG9jaworICAgICAg
ICAvLyAgICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChn
ZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkpKQorICAgICAgICAvLyAgICAgICAgKGkz
Mi5zdG9yZSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAoaTMyLm11bCAoZ2V0X2xvY2FsICRpKSAo
aTMyLmNvbnN0IDQpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAgICAgICAoc2V0X2xv
Y2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkpKQorICAgICAgICAv
LyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAgIC8vICAgICAgICkK
KyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8g
ICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAzLCAw
eDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4NjksIDB4NzQsIDB4NjUs
IDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MDAsIDB4MGEsIDB4
YjIsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweGFjLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAw
eDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgx
NCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMywgMHgxMCwg
MHgwNCwgMHg0MiwKKyAgICAgICAgICAgIDB4NDAsIDB4MTQsIDB4MDAsIDB4MzMsIDB4MDIsIDB4
MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAs
IDB4MGYsCisgICAgICAgICAgICAweDBmLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUo
KSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1
bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7CisKKyAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IDU7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAg
IHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5LT5t
ZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBv
ZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNl
dCAtIDFdLCAwdSk7CisgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAw
dSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7CisKKyAgICAgICAgbGVu
Z3RoID0gMTA7CisgICAgICAgIG9mZnNldCA9IDUgKiBzaXplb2YodWludDMyX3QpOworICAgICAg
ICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBi
b3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWlu
dDMyX3QpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOworICAg
ICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBDSEVDS19FUSht
ZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5
IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJheSIpIChwYXJhbSAk
eCBpMzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxvY2FsICRpIGkzMikK
KyAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8v
ICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgIChsb29wCisgICAgICAgIC8vICAgICAgICAo
YnJfaWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkbGVuZ3RoKSkpCisg
ICAgICAgIC8vICAgICAgICAoaTMyLnN0b3JlOCAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAoZ2V0
X2xvY2FsICRpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAgICAgICAoc2V0X2xvY2Fs
ICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkpKQorICAgICAgICAvLyAg
ICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAgIC8vICAgICAgICkKKyAg
ICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAg
ICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAs
IDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAzLCAweDAx
LCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4NjksIDB4NzQsIDB4NjUsIDB4
NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MDAsIDB4MGEsIDB4YWYs
IDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweGE5LCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDAz
LCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgxNCwg
MHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgx
NCwgMHgwMCwKKyAgICAgICAgICAgIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MTQs
IDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDksIDB4
MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAg
ICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAg
ICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChwbGFuLm1l
bW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsK
KyAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVt
b3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAg
ICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKKyAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZz
ZXRdLCAxMDB1KTsKKworICAgICAgICBsZW5ndGggPSAxMDsKKyAgICAgICAgb2Zmc2V0ID0gNTsK
KyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBDSEVDS19FUShtZW1v
cnlbb2Zmc2V0IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsg
bGVuZ3RoXSwgMHUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9k
dWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhw
b3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3Vs
dCBpMzIpCisgICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTggKGdldF9sb2NhbCAkcHRyKSAoZ2V0
X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChpMzIubG9hZDhfcyAoZ2V0X2xv
Y2FsICRwdHIpKSkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAgICApCisgICAgICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDcz
LCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwg
MHgwNSwgMHg4MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIs
IDB4NjksIDB4MzMsCisgICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAw
eDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgw
LCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgx
NCwKKyAgICAgICAgICAgIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGYKKyAgICAg
ICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxh
bi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBk
YXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6
ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
LCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9y
eSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0g
JGkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAgICAoaTMyLnN0b3JlOCAoaTMyLmNv
bnN0IDgpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2Fk
OF9zIChpMzIuY29uc3QgOCkpKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkK
KyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4
NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAxLCAw
eDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAw
LCAweDA1LCAweDgzLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
YiwgMHg2OSwgMHgzMywgMHgzMiwKKyAgICAgICAgICAgIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEs
IDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsCisgICAgICAgICAgICAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAw
eDEwLCAweDA4LAorICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgorICAg
ICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKKyAgICAgICAgLy8gKG1vZHVsZQorICAgICAgICAvLyAgKG1lbW9yeSAxKQorICAgICAg
ICAvLyAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0g
JHB0ciBpMzIpIChyZXN1bHQgaTMyKQorICAgICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9sb2Nh
bCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAocmV0dXJuIChpMzIubG9hZCAo
Z2V0X2xvY2FsICRwdHIpKSkKKyAgICAgICAgLy8gICApCisgICAgICAgIC8vICApCisgICAgICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDcz
LCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMiwgMHgwMSwgMHgw
MSwgMHgwMiwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwg
MHgwNSwgMHg4MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIs
IDB4NjksIDB4MzMsCisgICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAw
eDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgw
LCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgx
NCwKKyAgICAgICAgICAgIDB4MDEsIDB4MmIsIDB4MDMsIDB4MDAsIDB4MDksIDB4MGYKKyAgICAg
ICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxh
bi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBk
YXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goLTEy
KSwgYm94KHBsYW4ubWVtb3J5LT5zaXplKCkgLSBzaXplb2YodWludDY0X3QpKSB9KSwgLTEyKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAo
bW9kdWxlCisgICAgICAgIC8vICAobWVtb3J5IDEpCisgICAgICAgIC8vICAoZnVuYyAoZXhwb3J0
ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBp
MzIpCisgICAgICAgIC8vICAgKGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwg
JGkpKQorICAgICAgICAvLyAgIChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQor
ICAgICAgICAvLyAgICkKKyAgICAgICAgLy8gICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgy
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAor
ICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4
ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKKyAgICAg
ICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4
NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAg
ICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAw
eDAxLCAweDE0LCAweDAwLCAweDMzLCAweDAyLCAweDAwLCAweDE0LAorICAgICAgICAgICAgMHgw
MSwgMHgyYSwgMHgwMiwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBs
YW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
LCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9y
eSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFyYW0g
JHggaTMyKSAocGFyYW0gJHAgaTMyKSAocGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBpMzIp
CisgICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAgICAv
LyAgICAgIChibG9jaworICAgICAgICAvLyAgICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAg
KGJyX2lmIDEgKGkzMi5nZV91IChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkpKQor
ICAgICAgICAvLyAgICAgICAgKGkzMi5zdG9yZSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAoaTMy
Lm11bCAoZ2V0X2xvY2FsICRpKSAoaTMyLmNvbnN0IDQpKSkgKGdldF9sb2NhbCAkeCkpCisgICAg
ICAgIC8vICAgICAgICAoc2V0X2xvY2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9s
b2NhbCAkaSkpKQorICAgICAgICAvLyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICAp
CisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAv
LyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAs
CisgICAgICAgICAgICAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAg
ICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4Ziwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAg
ICAgIDB4NjksIDB4NzQsIDB4NjUsIDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4Nzks
IDB4MDAsIDB4MDAsIDB4MGEsIDB4YjIsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAw
eDAwLCAweDAxLCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAx
LCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwg
MHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgw
MSwgMHgxNCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0MiwKKyAgICAgICAgICAgIDB4NDAsIDB4MTQs
IDB4MDAsIDB4MzMsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4
MTUsIDB4MDMsIDB4MDYsIDB4MDAsIDB4MGYsCisgICAgICAgICAgICAweDBmLCAweDA5LCAweDBm
CisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAg
aWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocGxhbi5tZW1v
cnktPnNpemUoKSk7CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVv
Zih1aW50MzJfdCk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChs
ZW5ndGgpIH0pOworICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAg
Q0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CisgICAgICAgIENIRUNLX0VRKG1lbW9y
eVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwg
MTAwdSk7CisKKyAgICAgICAgbGVuZ3RoID0gMTA7CisgICAgICAgIG9mZnNldCA9IDUgKiBzaXpl
b2YodWludDMyX3QpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAg
IG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zm
c2V0IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3Ro
XSwgMHUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisg
ICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3
cml0ZV9hcnJheSIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3Ro
IGkzMikgKGxvY2FsICRpIGkzMikKKyAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIu
Y29uc3QgMCkpCisgICAgICAgIC8vICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgIChsb29w
CisgICAgICAgIC8vICAgICAgICAoYnJfaWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdl
dF9sb2NhbCAkbGVuZ3RoKSkpCisgICAgICAgIC8vICAgICAgICAoaTMyLnN0b3JlOCAoaTMyLmFk
ZCAoZ2V0X2xvY2FsICRwKSAoZ2V0X2xvY2FsICRpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAg
IC8vICAgICAgICAoc2V0X2xvY2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2Nh
bCAkaSkpKQorICAgICAgICAvLyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICApCisg
ICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAg
ICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9
IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisg
ICAgICAgICAgICAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAg
ICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAg
IDB4NjksIDB4NzQsIDB4NjUsIDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4
MDAsIDB4MDAsIDB4MGEsIDB4YWYsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAw
LCAweDAxLCAweGE5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAw
eDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgw
MCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwg
MHgxNCwgMHgwMywgMHg0MCwgMHgxNCwgMHgwMCwKKyAgICAgICAgICAgIDB4MmUsIDB4MDAsIDB4
MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAs
IDB4MGYsIDB4MGYsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4o
KnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBs
YW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8g
Y29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKKyAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lk
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCks
IGJveChsZW5ndGgpIH0pOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1
KTsKKyAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgQ0hF
Q0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCAxMDB1KTsKKworICAgICAgICBsZW5ndGggPSAxMDsK
KyAgICAgICAgb2Zmc2V0ID0gNTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwor
ICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVD
S19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSAr
IG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAg
ICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChw
YXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTgg
KGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAgICAocmV0dXJu
IChpMzIubG9hZDhfcyAoZ2V0X2xvY2FsICRwdHIpKSkKKyAgICAgICAgLy8gICAgICApCisgICAg
ICAgIC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAg
ICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAx
LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAg
MHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsCisgICAgICAgICAgICAweDMyLCAweDVm
LCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAw
eDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4
ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwg
MHgyZSwgMHgwMCwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDEsIDB4MjAsIDB4MDAsIDB4
MDAsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0
WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBj
b3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgfQorCisg
ICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQor
ICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAi
aTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAg
ICAoaTMyLnN0b3JlOCAoaTMyLmNvbnN0IDgpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAg
ICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChpMzIuY29uc3QgOCkpKQorICAgICAgICAvLyAgICAg
ICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsK
KyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAg
ICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAorICAgICAgICAg
ICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywgMHgzMiwKKyAgICAgICAgICAgIDB4
NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAs
IDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsCisgICAgICAgICAgICAweDAxLCAw
eDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAw
LCAweDJlLCAweDAwLCAweDAwLCAweDEwLCAweDA4LAorICAgICAgICAgICAgMHgyMCwgMHgwMCwg
MHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZl
Y3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1
bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxl
IGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgfQorCisgICAgewor
ICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAg
ICAvLyAgICAgKGZ1bmMgImR1bWItZXEiIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChy
ZXN1bHQgaTMyKQorICAgICAgICAvLyAgICAgIChpZiAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChn
ZXRfbG9jYWwgJHkpKQorICAgICAgICAvLyAgICAgICAodGhlbiAoYnIgMCkpCisgICAgICAgIC8v
ICAgICAgIChlbHNlIChyZXR1cm4gKGkzMi5jb25zdCAxKSkpKQorICAgICAgICAvLyAgICAgIChy
ZXR1cm4gKGkzMi5jb25zdCAwKSkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAgICAp
CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAw
eDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwMCwgMHgwNywgMHg4YiwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDcsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NjUsIDB4NzEsIDB4
MDAsIDB4MDAsIDB4MGEsIDB4OTksCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDkzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAw
eDE0LCAweDAxLCAweDRkLAorICAgICAgICAgICAgMHgwMywgMHgwMCwgMHgwNiwgMHgwMCwgMHgw
NCwgMHgxMCwgMHgwMSwgMHgwOSwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAg
ICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFu
LnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9
KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikg
fSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KDYpIH0pLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgor
ICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJkdW1i
LWxlc3MtdGhhbiIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChyZXN1bHQgaTMyKQor
ICAgICAgICAvLyAgICAgIChsb29wCisgICAgICAgIC8vICAgICAgIChpZiAoaTMyLmVxIChnZXRf
bG9jYWwgJHgpIChnZXRfbG9jYWwgJHkpKQorICAgICAgICAvLyAgICAgICAgKHRoZW4gKHJldHVy
biAoaTMyLmNvbnN0IDApKSkKKyAgICAgICAgLy8gICAgICAgIChlbHNlIChpZiAoaTMyLmVxIChn
ZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAgICAgICAgKHJl
dHVybiAoaTMyLmNvbnN0IDEpKSkpKQorICAgICAgICAvLyAgICAgICAoc2V0X2xvY2FsICR4IChp
MzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkpKQorICAgICAgICAvLyAgICAgICAo
YnIgMCkKKyAgICAgICAgLy8gICAgICAgKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8g
ICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA3LCAweDkyLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwZSwgMHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2
NSwgMHg3MywgMHg3MywgMHgyZCwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4NjEsIDB4NmUs
IDB4MDAsIDB4MDAsIDB4MGEsIDB4YWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
YTYsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAweDAw
LCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDRkLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAw
eDA5LCAweDA0LCAweDE0LAorICAgICAgICAgICAgMHgwMCwgMHgxMCwgMHgwMCwgMHg0ZCwgMHgw
MywgMHgwMCwgMHgxMCwgMHgwMSwgMHgwOSwgMHgwZiwgMHgwZiwgMHgxNCwgMHgwMCwgMHgxMCwg
MHgwMSwgMHg0MSwKKyAgICAgICAgICAgIDB4MTUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGYsIDB4
MDAsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwor
ICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7
CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0
bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CisgICAgfQorCisKKyAgICB7CisgICAgICAgIC8v
IEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVz
dWx0IGkzMikgKHJldHVybiAoaTMyLmNvbnN0IDUpKSkgKQorICAgICAgICBWZWN0b3I8dWludDhf
dD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAsIDB4
ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1
LCAweDcyLCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBhLAor
ICAgICAgICAgICAgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwOSwgMHgwZgorICAgICAg
ICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFu
LnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgfSksIDUpOworICAgIH0KKworCisgICAgeworICAgICAgICAvLyBHZW5lcmF0
ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJyZXR1cm4taTMyIikgKHJlc3VsdCBpMzIp
IChyZXR1cm4gKGkzMi5hZGQgKGkzMi5jb25zdCA1KSAoaTMyLmNvbnN0IDYpKSkpICkKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAw
eDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhl
LCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3Miwg
MHg2NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgw
MCwgMHgwMCwgMHgwYSwKKyAgICAgICAgICAgIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4
MTAsIDB4MDYsCisgICAgICAgICAgICAweDQwLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAg
ICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNp
emUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJN
b2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyB9KSwgMTEpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206ICht
b2R1bGUgKGZ1bmMgKGV4cG9ydCAicmV0dXJuLWkzMiIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChp
MzIuYWRkIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCAzKSkgKGkzMi5jb25zdCAz
KSkpKSApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg1
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMCwg
MHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNywgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDEs
IDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4NjksIDB4
MzMsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsCisgICAgICAgICAgICAweDkxLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDhiLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAw
eDEwLCAweDA1LCAweDEwLCAweDAzLAorICAgICAgICAgICAgMHg0MCwgMHgxMCwgMHgwMywgMHg0
MCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRb
MF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNv
cnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVy
bi1pMzIiKSAocmVzdWx0IGkzMikgKGJsb2NrIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5hZGQgKGkz
Mi5jb25zdCA1KSAoaTMyLmNvbnN0IDMpKSAoaTMyLmNvbnN0IDMpKSkpICh1bnJlYWNoYWJsZSkp
ICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAs
IDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAwLCAweDAx
LCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAw
eDA3LCAweDhlLCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgw
YSwgMHg3MiwgMHg2NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywg
MHgzMiwgMHgwMCwgMHgwMCwgMHgwYSwKKyAgICAgICAgICAgIDB4OTUsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDEs
IDB4MDAsIDB4MTAsIDB4MDUsCisgICAgICAgICAgICAweDEwLCAweDAzLCAweDQwLCAweDEwLCAw
eDAzLCAweDQwLCAweDA5LCAweDBmLCAweDAwLCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAg
UGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAh
PSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUg
ZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyB9KSwg
MTEpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUg
KGZ1bmMgKGV4cG9ydCAiYWRkIikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3Vs
dCBpMzIpIChyZXR1cm4gKGkzMi5hZGQgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpKSkg
KQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwg
MHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDEsIDB4MDAsIDB4MDcsIDB4ODcsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAzLCAweDYxLCAweDY0LCAweDY0LCAweDAwLCAweDAwLCAweDBhLCAweDhlLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLAorICAgICAgICAgICAgMHgwMSwgMHg4OCwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgwOSwg
MHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAg
ICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4i
KTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MTAwKSwgYm94KDEpIH0pLCAxMDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goLTEpLCBib3goMSl9KSwgMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwgYm94KDEpIH0pLCBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVu
YyAoZXhwb3J0ICJsb2NhbHMiKSAocGFyYW0gJHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICRu
dW0gaTMyKQorICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJG51bSAoZ2V0X2xvY2FsICR4KSkK
KyAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9jYWwgJG51bSkpCisgICAgICAgIC8vICAg
ICAgKQorICAgICAgICAvLyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
eworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAg
ICAgICAgICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGEsIDB4ODAsIDB4ODAsCisgICAgICAg
ICAgICAweDgwLCAweDAwLCAweDAxLCAweDA2LCAweDZjLCAweDZmLCAweDYzLCAweDYxLCAweDZj
LCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDkxLCAweDgwLCAweDgwLAorICAgICAgICAgICAg
MHg4MCwgMHgwMCwgMHgwMSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgxNCwgMHgwMCwgMHgxNSwgMHgwMSwgMHgxNCwKKyAgICAgICAgICAgIDB4MDEs
IDB4MDksIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBd
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3Jy
ZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MCkgfSksIDEwKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgor
ICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJzdW0i
KSAocGFyYW0gJHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICR5IGkzMikKKyAgICAgICAgLy8g
ICAgICAoc2V0X2xvY2FsICR5IChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgKGxvb3AK
KyAgICAgICAgLy8gICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgICAoYnJfaWYgMCAoaTMy
LmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQorICAgICAgICAvLyAgICAgICAgKHNl
dF9sb2NhbCAkeSAoaTMyLmFkZCAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkpCisgICAg
ICAgIC8vICAgICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIu
Y29uc3QgMSkpKQorICAgICAgICAvLyAgICAgICAgKGJyIDEpCisgICAgICAgIC8vICAgICAgICAp
CisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9jYWwg
JHkpKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQs
IDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAz
LCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAw
eDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg3MywgMHg3
NSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwKKyAgICAgICAgICAgIDB4YTgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAs
CisgICAgICAgICAgICAweDE0LCAweDAwLCAweDEwLCAweDAwLCAweDRkLCAweDA3LCAweDAwLCAw
eDE0LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDE1LCAweDAxLCAweDE0LCAweDAwLAorICAg
ICAgICAgICAgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgwZiwg
MHgwZiwgMHgxNCwgMHgwMSwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4g
cGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8
fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxl
ZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0p
LCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpfSksIDMpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MTAwKSB9KSwgNTA1MCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAi
ZHVtYi1tdWx0IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpIChs
b2NhbCAkdG90YWwgaTMyKSAobG9jYWwgJGkgaTMyKSAobG9jYWwgJGogaTMyKQorICAgICAgICAv
LyAgICAgIChzZXRfbG9jYWwgJHRvdGFsIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAg
KHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgIChibG9jayAobG9v
cAorICAgICAgICAvLyAgICAgICAgICAgICAgKGJyX2lmIDEgKGkzMi5lcSAoZ2V0X2xvY2FsICRp
KSAoZ2V0X2xvY2FsICR4KSkpCisgICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2FsICRq
IChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2FsICRpIChp
MzIuYWRkIChnZXRfbG9jYWwgJGkpIChpMzIuY29uc3QgMSkpKQorICAgICAgICAvLyAgICAgICAg
ICAgICAgKGxvb3AKKyAgICAgICAgLy8gICAgICAgICAgICAgICAoYnJfaWYgMSAoaTMyLmVxIChn
ZXRfbG9jYWwgJGopIChnZXRfbG9jYWwgJHkpKSkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAo
c2V0X2xvY2FsICR0b3RhbCAoaTMyLmFkZCAoZ2V0X2xvY2FsICR0b3RhbCkgKGkzMi5jb25zdCAx
KSkpCisgICAgICAgIC8vICAgICAgICAgICAgICAgKHNldF9sb2NhbCAkaiAoaTMyLmFkZCAoZ2V0
X2xvY2FsICRqKSAoaTMyLmNvbnN0IDEpKSkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAoYnIg
MCkKKyAgICAgICAgLy8gICAgICAgICAgICAgICApCisgICAgICAgIC8vICAgICAgICAgICAgICAp
KQorICAgICAgICAvLyAgICAgIChyZXR1cm4gKGdldF9sb2NhbCAkdG90YWwpKQorICAgICAgICAv
LyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAs
CisgICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhkLCAweDgwLAorICAg
ICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwOSwgMHg2NCwgMHg3NSwgMHg2ZCwg
MHg2MiwgMHgyZCwgMHg2ZCwgMHg3NSwgMHg2YywgMHg3NCwgMHgwMCwgMHgwMCwKKyAgICAgICAg
ICAgIDB4MGEsIDB4YzcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YzEsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4MDEsIDB4MTAsCisgICAgICAgICAgICAw
eDAwLCAweDE1LCAweDAyLCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLCAweDAy
LCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAwLCAweDRkLAorICAgICAgICAgICAgMHgwNywg
MHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0
MCwgMHgxNSwgMHgwMywgMHgwMiwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDQsIDB4MTQs
IDB4MDEsIDB4NGQsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4
MTUsIDB4MDIsIDB4MTQsIDB4MDQsIDB4MTAsCisgICAgICAgICAgICAweDAxLCAweDQwLCAweDE1
LCAweDA0LCAweDA2LCAweDAwLCAweDBmLCAweDBmLCAweDBmLCAweDE0LCAweDAyLCAweDA5LCAw
eDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAg
ICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIp
OworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhp
cyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDIpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgyKSB9KSwgMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCA0KTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDIpLCBib3goNikgfSksIDEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgNjAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCgxMDApIH0pLCAxMDAwMCk7CisgICAgfQorCisgICAgeworICAgICAg
ICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAg
ICAgKGZ1bmMgImR1bWItbGVzcy10aGFuIiAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAo
cmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAoYmxv
Y2sKKyAgICAgICAgLy8gICAgICAgIChibG9jaworICAgICAgICAvLyAgICAgICAgIChicl9pZiAw
IChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpKQorICAgICAgICAvLyAgICAg
ICAgIChiciAxKQorICAgICAgICAvLyAgICAgICAgICkKKyAgICAgICAgLy8gICAgICAgIChyZXR1
cm4gKGkzMi5jb25zdCAwKSkKKyAgICAgICAgLy8gICAgICAgICkKKyAgICAgICAgLy8gICAgICAg
KGJsb2NrCisgICAgICAgIC8vICAgICAgICAoYmxvY2sKKyAgICAgICAgLy8gICAgICAgICAoYnJf
aWYgMCAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQorICAgICAgICAvLyAg
ICAgICAgIChiciAxKQorICAgICAgICAvLyAgICAgICAgICkKKyAgICAgICAgLy8gICAgICAgIChy
ZXR1cm4gKGkzMi5jb25zdCAxKSkKKyAgICAgICAgLy8gICAgICAgICkKKyAgICAgICAgLy8gICAg
ICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkK
KyAgICAgICAgLy8gICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8g
ICAgICAgKHVucmVhY2hhYmxlKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkK
KyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4
NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAw
eDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDAwLCAweDA3LCAweDkyLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwZSwgMHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2NSwgMHg3
MywgMHg3MywgMHgyZCwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4NjEsIDB4NmUsIDB4MDAs
IDB4MDAsIDB4MGEsIDB4YjksIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YjMsIDB4
ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAx
LCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDRkLCAweDA3LCAw
eDAwLCAweDA2LAorICAgICAgICAgICAgMHgwMSwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwOSwgMHgw
ZiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0ZCwg
MHgwNywKKyAgICAgICAgICAgIDB4MDAsIDB4MDYsIDB4MDEsIDB4MGYsIDB4MTAsIDB4MDEsIDB4
MDksIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDEsIDB4MTUsIDB4MDAsIDB4MDYs
CisgICAgICAgICAgICAweDAwLCAweDBmLCAweDAwLCAweDBmCisgICAgICAgIH07CisKKyAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUo
KSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1
bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDIpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMiksIGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwor
ICAgIH0KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgQ29tbWFuZExpbmUgb3B0aW9ucyhhcmdjLCBh
cmd2KTsKKworICAgIGlmIChvcHRpb25zLm1fcnVuTEVCVGVzdHMpCisgICAgICAgIHJ1bkxFQlRl
c3RzKCk7CisKKyAgICBpZiAob3B0aW9ucy5tX3J1bldhc21UZXN0cykgeworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKyAgICAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgICAg
IHZtID0gJkpTQzo6Vk06OmNyZWF0ZShKU0M6OkxhcmdlSGVhcCkubGVha1JlZigpOworICAgICAg
ICBydW5XYXNtVGVzdHMoKTsKKyNlbHNlCisgICAgICAgIGRhdGFMb2dMbigiV2FzbSBpcyBub3Qg
ZW5hYmxlZCEiKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgfQorCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNkOTk2YWM5N2NhMTk4OTdjMjcyYmE3NTBiZWQ3NjEyMTQ2NjQ0
MGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCi0KLSNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5o
IgotI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
b25zdCBDbGFzc0luZm8gSlNXQVNNTW9kdWxlOjpzX2luZm8gPSB7ICJXQVNNTW9kdWxlIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dBU01Nb2R1bGUpIH07Ci0KLUpT
V0FTTU1vZHVsZTo6SlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQotICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotewot
ICAgIGlmIChhcnJheUJ1ZmZlcikKLSAgICAgICAgbV9hcnJheUJ1ZmZlci5zZXQodm0sIHRoaXMs
IGFycmF5QnVmZmVyKTsKLX0KLQotdm9pZCBKU1dBU01Nb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQotewotICAgIEpTV0FTTU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dBU01Nb2R1
bGUqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU1dBU01Nb2R1bGU6On5KU1dBU01Nb2R1bGUo
KTsKLX0KLQotdm9pZCBKU1dBU01Nb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU1dBU01Nb2R1bGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNXQVNNTW9kdWxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZm
ZXIpOwotICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25zKQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOwotICAgIGZvciAoYXV0byBpbXBvcnRl
ZEZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9pbXBvcnRlZEZ1bmN0aW9ucykKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQoJmltcG9ydGVkRnVuY3Rpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXQVNNTW9kdWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjZlYjVm
ZDExYWM0ODIwNmRkZjM4YjAzZWM0YzQ1NDljZTgxNDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNN
TW9kdWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKLSNpbmNs
dWRlICJXQVNNRm9ybWF0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1dBU01Nb2R1
bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKLQotICAgIHVuaW9uIEdsb2JhbFZhcmlhYmxlIHsK
LSAgICAgICAgR2xvYmFsVmFyaWFibGUoaW50MzJfdCB2YWx1ZSkKLSAgICAgICAgICAgIDogaW50
VmFsdWUodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBHbG9iYWxWYXJpYWJs
ZShmbG9hdCB2YWx1ZSkKLSAgICAgICAgICAgIDogZmxvYXRWYWx1ZSh2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgICAgIEdsb2JhbFZhcmlhYmxlKGRvdWJsZSB2YWx1ZSkKLSAgICAg
ICAgICAgIDogZG91YmxlVmFsdWUodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIGludDMyX3QgaW50VmFsdWU7Ci0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7Ci0gICAgICAg
IGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICB9OwotCi0gICAgc3RhdGljIEpTV0FTTU1vZHVsZSog
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXIqIGFycmF5
QnVmZmVyKQotICAgIHsKLSAgICAgICAgSlNXQVNNTW9kdWxlKiBtb2R1bGUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dBU01Nb2R1bGU+KHZtLmhlYXApKSBKU1dBU01Nb2R1bGUodm0s
IHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIpOwotICAgICAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICAgICAgcmV0dXJuIG1vZHVsZTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7Ci0KLSAgICBWZWN0b3I8dWludDMyX3Q+JiBpMzJDb25zdGFudHMoKSB7IHJldHVy
biBtX2kzMkNvbnN0YW50czsgfQotICAgIFZlY3RvcjxmbG9hdD4mIGYzMkNvbnN0YW50cygpIHsg
cmV0dXJuIG1fZjMyQ29uc3RhbnRzOyB9Ci0gICAgVmVjdG9yPGRvdWJsZT4mIGY2NENvbnN0YW50
cygpIHsgcmV0dXJuIG1fZjY0Q29uc3RhbnRzOyB9Ci0gICAgVmVjdG9yPFdBU006OlNpZ25hdHVy
ZT4mIHNpZ25hdHVyZXMoKSB7IHJldHVybiBtX3NpZ25hdHVyZXM7IH0KLSAgICBWZWN0b3I8V0FT
TTo6RnVuY3Rpb25JbXBvcnQ+JiBmdW5jdGlvbkltcG9ydHMoKSB7IHJldHVybiBtX2Z1bmN0aW9u
SW1wb3J0czsgfQotICAgIFZlY3RvcjxXQVNNOjpGdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4mIGZ1
bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1
cmVzOyB9Ci0gICAgVmVjdG9yPFdBU006OlR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzKCkgeyBy
ZXR1cm4gbV9nbG9iYWxWYXJpYWJsZVR5cGVzOyB9Ci0gICAgVmVjdG9yPFdBU006OkZ1bmN0aW9u
RGVjbGFyYXRpb24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25E
ZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8V0FTTTo6RnVuY3Rpb25Qb2ludGVyVGFibGU+JiBm
dW5jdGlvblBvaW50ZXJUYWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsg
fQotCi0gICAgY29uc3QgSlNBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2FycmF5QnVmZmVyLmdldCgpOyB9Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0
aW9uPj4mIGZ1bmN0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9Ci0gICAgVmVjdG9yPHVu
c2lnbmVkPiYgZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25TdGFydE9mZnNldHNJblNvdXJjZTsgfQotICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGZ1bmN0aW9u
U3RhY2tIZWlnaHRzKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNrSGVpZ2h0czsgfQotICAgIFZl
Y3RvcjxHbG9iYWxWYXJpYWJsZT4mIGdsb2JhbFZhcmlhYmxlcygpIHsgcmV0dXJuIG1fZ2xvYmFs
VmFyaWFibGVzOyB9Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4mIGltcG9y
dGVkRnVuY3Rpb25zKCkgeyByZXR1cm4gbV9pbXBvcnRlZEZ1bmN0aW9uczsgfQotCi1wcml2YXRl
OgotICAgIEpTV0FTTU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIEpTQXJyYXlCdWZmZXIqKTsKLQot
ICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9pMzJDb25zdGFudHM7Ci0gICAgVmVjdG9yPGZsb2F0PiBt
X2YzMkNvbnN0YW50czsKLSAgICBWZWN0b3I8ZG91YmxlPiBtX2Y2NENvbnN0YW50czsKLSAgICBW
ZWN0b3I8V0FTTTo6U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7Ci0gICAgVmVjdG9yPFdBU006OkZ1
bmN0aW9uSW1wb3J0PiBtX2Z1bmN0aW9uSW1wb3J0czsKLSAgICBWZWN0b3I8V0FTTTo6RnVuY3Rp
b25JbXBvcnRTaWduYXR1cmU+IG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOwotICAgIFZlY3Rv
cjxXQVNNOjpUeXBlPiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7Ci0gICAgVmVjdG9yPFdBU006OkZ1
bmN0aW9uRGVjbGFyYXRpb24+IG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7Ci0gICAgVmVjdG9yPFdB
U006OkZ1bmN0aW9uUG9pbnRlclRhYmxlPiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsKLQotICAg
IFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyOwotICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwotICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gbV9mdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4g
bV9mdW5jdGlvblN0YWNrSGVpZ2h0czsKLSAgICBWZWN0b3I8R2xvYmFsVmFyaWFibGU+IG1fZ2xv
YmFsVmFyaWFibGVzOwotICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1faW1w
b3J0ZWRGdW5jdGlvbnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dhc21Nb2R1
bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFmNjZhOWQ4Y2I4NzBkODZmMzEzMGZlZTQ0OGE2YjI2MjRmZWQ1
ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dhc21N
b2R1bGUuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXYXNtTW9k
dWxlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBdXhpbGlhcnlC
YXJyaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXYXNtTW9kdWxlOjpzX2luZm8gPSB7ICJX
YXNtTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dhc21N
b2R1bGUpIH07CisKK0pTV2FzbU1vZHVsZTo6SlNXYXNtTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQoreworICAgIGlmIChhcnJheUJ1ZmZlcikKKyAgICAgICAgbV9hcnJheUJ1ZmZl
ci5zZXQodm0sIHRoaXMsIGFycmF5QnVmZmVyKTsKK30KKwordm9pZCBKU1dhc21Nb2R1bGU6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEpTV2FzbU1vZHVsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dhc21Nb2R1bGUqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1dhc21Nb2R1bGU6
On5KU1dhc21Nb2R1bGUoKTsKK30KKwordm9pZCBKU1dhc21Nb2R1bGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1dhc21Nb2R1bGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXYXNtTW9kdWxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fYXJyYXlCdWZmZXIpOworICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmplY3Qt
Pm1fZnVuY3Rpb25zKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOworICAgIGZv
ciAoYXV0byBpbXBvcnRlZEZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9pbXBvcnRlZEZ1bmN0aW9u
cykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmltcG9ydGVkRnVuY3Rpb24pOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2FzbU1vZHVsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vSlNXYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JiMjM1MmY3OTkw
ZmI2MGM2ZDk4NzgzOTczY2I5MDQxOTBkMWI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL0pTV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVj
dC5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEpTV2FzbU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgdW5pb24gR2xvYmFs
VmFyaWFibGUgeworICAgICAgICBHbG9iYWxWYXJpYWJsZShpbnQzMl90IHZhbHVlKQorICAgICAg
ICAgICAgOiBpbnRWYWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIEds
b2JhbFZhcmlhYmxlKGZsb2F0IHZhbHVlKQorICAgICAgICAgICAgOiBmbG9hdFZhbHVlKHZhbHVl
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgR2xvYmFsVmFyaWFibGUoZG91YmxlIHZh
bHVlKQorICAgICAgICAgICAgOiBkb3VibGVWYWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgaW50MzJfdCBpbnRWYWx1ZTsKKyAgICAgICAgZmxvYXQgZmxvYXRWYWx1
ZTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOworICAgIH07CisKKyAgICBzdGF0aWMgSlNX
YXNtTW9kdWxlKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1
ZmZlciogYXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICBKU1dhc21Nb2R1bGUqIG1vZHVsZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2FzbU1vZHVsZT4odm0uaGVhcCkpIEpTV2Fz
bU1vZHVsZSh2bSwgc3RydWN0dXJlLCBhcnJheUJ1ZmZlcik7CisgICAgICAgIG1vZHVsZS0+Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gbW9kdWxlOworICAgIH0KKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4mIGkzMkNvbnN0YW50
cygpIHsgcmV0dXJuIG1faTMyQ29uc3RhbnRzOyB9CisgICAgVmVjdG9yPGZsb2F0PiYgZjMyQ29u
c3RhbnRzKCkgeyByZXR1cm4gbV9mMzJDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8ZG91YmxlPiYg
ZjY0Q29uc3RhbnRzKCkgeyByZXR1cm4gbV9mNjRDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8V2Fz
bTo6U2lnbmF0dXJlPiYgc2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fc2lnbmF0dXJlczsgfQorICAg
IFZlY3RvcjxXYXNtOjpGdW5jdGlvbkltcG9ydD4mIGZ1bmN0aW9uSW1wb3J0cygpIHsgcmV0dXJu
IG1fZnVuY3Rpb25JbXBvcnRzOyB9CisgICAgVmVjdG9yPFdhc206OkZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlPiYgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkgeyByZXR1cm4gbV9mdW5jdGlvbklt
cG9ydFNpZ25hdHVyZXM7IH0KKyAgICBWZWN0b3I8V2FzbTo6VHlwZT4mIGdsb2JhbFZhcmlhYmxl
VHlwZXMoKSB7IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7IH0KKyAgICBWZWN0b3I8V2Fz
bTo6RnVuY3Rpb25EZWNsYXJhdGlvbj4mIGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4g
bV9mdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxXYXNtOjpGdW5jdGlvblBvaW50
ZXJUYWJsZT4mIGZ1bmN0aW9uUG9pbnRlclRhYmxlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25Qb2lu
dGVyVGFibGVzOyB9CisKKyAgICBjb25zdCBKU0FycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXIuZ2V0KCk7IH0KKyAgICBWZWN0b3I8V3JpdGVCYXJy
aWVyPEpTRnVuY3Rpb24+PiYgZnVuY3Rpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKyAg
ICBWZWN0b3I8dW5zaWduZWQ+JiBmdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlKCkgeyByZXR1
cm4gbV9mdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOyB9CisgICAgVmVjdG9yPHVuc2lnbmVk
PiYgZnVuY3Rpb25TdGFja0hlaWdodHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uU3RhY2tIZWlnaHRz
OyB9CisgICAgVmVjdG9yPEdsb2JhbFZhcmlhYmxlPiYgZ2xvYmFsVmFyaWFibGVzKCkgeyByZXR1
cm4gbV9nbG9iYWxWYXJpYWJsZXM7IH0KKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rp
b24+PiYgaW1wb3J0ZWRGdW5jdGlvbnMoKSB7IHJldHVybiBtX2ltcG9ydGVkRnVuY3Rpb25zOyB9
CisKK3ByaXZhdGU6CisgICAgSlNXYXNtTW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgSlNBcnJheUJ1
ZmZlciopOworCisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2kzMkNvbnN0YW50czsKKyAgICBWZWN0
b3I8ZmxvYXQ+IG1fZjMyQ29uc3RhbnRzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fZjY0Q29uc3Rh
bnRzOworICAgIFZlY3RvcjxXYXNtOjpTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKKyAgICBWZWN0
b3I8V2FzbTo6RnVuY3Rpb25JbXBvcnQ+IG1fZnVuY3Rpb25JbXBvcnRzOworICAgIFZlY3RvcjxX
YXNtOjpGdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7
CisgICAgVmVjdG9yPFdhc206OlR5cGU+IG1fZ2xvYmFsVmFyaWFibGVUeXBlczsKKyAgICBWZWN0
b3I8V2FzbTo6RnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKKyAg
ICBWZWN0b3I8V2FzbTo6RnVuY3Rpb25Qb2ludGVyVGFibGU+IG1fZnVuY3Rpb25Qb2ludGVyVGFi
bGVzOworCisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXI7Cisg
ICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisgICAgVmVj
dG9yPHVuc2lnbmVkPiBtX2Z1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2U7CisgICAgVmVjdG9y
PHVuc2lnbmVkPiBtX2Z1bmN0aW9uU3RhY2tIZWlnaHRzOworICAgIFZlY3RvcjxHbG9iYWxWYXJp
YWJsZT4gbV9nbG9iYWxWYXJpYWJsZXM7CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0
aW9uPj4gbV9pbXBvcnRlZEZ1bmN0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNGE4MDBjOGE0ZmZlOWY1M2VhODhiNDYyMmQxZmNjZjRhZWQ0ZTNhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01CM0lSR2VuZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldBU01CM0lSR2VuZXJhdG9yLmgiCi0KLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiQjNDb25zdFB0clZhbHVlLmgiCi0jaW5jbHVkZSAiQjNGaXhTU0EuaCIKLSNpbmNsdWRlICJC
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgotI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKLSNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKLSNpbmNs
dWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKLSNpbmNsdWRlICJCM1dhc21BZGRyZXNzVmFsdWUuaCIK
LSNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCi0jaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCi0jaW5jbHVkZSAiV0FTTUNhbGxpbmdDb252ZW50aW9uLmgiCi0jaW5jbHVkZSAi
V0FTTUZ1bmN0aW9uUGFyc2VyLmgiCi0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotCi12b2lkIGR1bXBQcm9jZWR1cmUodm9pZCogcHRyKQotewotICAg
IEpTQzo6QjM6OlByb2NlZHVyZSogcHJvYyA9IHN0YXRpY19jYXN0PEpTQzo6QjM6OlByb2NlZHVy
ZSo+KHB0cik7Ci0gICAgcHJvYy0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotfQotCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1uYW1lc3BhY2UgewotCi11c2luZyBuYW1lc3Bh
Y2UgQjM7Ci0KLWNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1pbmxpbmUgQjM6Ok9wY29k
ZSB0b0IzT3AoQmluYXJ5T3BUeXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSNkZWZpbmUg
Q1JFQVRFX0NBU0UobmFtZSwgb3AsIGIzb3ApIGNhc2UgQmluYXJ5T3BUeXBlOjpuYW1lOiByZXR1
cm4gYjNvcDsKLSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkKLSN1bmRl
ZiBDUkVBVEVfQ0FTRQotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi1pbmxpbmUgQjM6Ok9wY29kZSB0b0IzT3AoVW5hcnlPcFR5cGUgb3ApCi17Ci0gICAgc3dp
dGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBvcCwgYjNvcCkgY2FzZSBVbmFy
eU9wVHlwZTo6bmFtZTogcmV0dXJuIGIzb3A7Ci0gICAgRk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChD
UkVBVEVfQ0FTRSkKLSN1bmRlZiBDUkVBVEVfQ0FTRQotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi1jbGFzcyBCM0lSR2VuZXJhdG9yIHsKLXByaXZhdGU6Ci0g
ICAgY2xhc3MgTGF6eUJsb2NrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExhenlCbG9jayhCYXNp
Y0Jsb2NrKiBibG9jaykKLSAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9ibG9jazsgfQotCi0gICAgICAgIEJhc2ljQmxvY2sqIGdldChQcm9jZWR1cmUmIHBy
b2MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9ibG9jaykKLSAgICAgICAgICAgICAg
ICBtX2Jsb2NrID0gcHJvYy5hZGRCbG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2s7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fYmxvY2spCi0gICAgICAgICAgICAgICAgb3V0
LnByaW50KCptX2Jsb2NrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIlVuaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKLSAgICB9OwotCi1wdWJsaWM6Ci0g
ICAgc3RydWN0IENvbnRyb2xEYXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBw
cm9jLCBUeXBlIHNpZ25hdHVyZSwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIsIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbiA9IG51bGxwdHIpCi0gICAgICAgICAgICA6IGNvbnRpbnVhdGlv
bihjb250aW51YXRpb24pCi0gICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSAhPSBWb2lkKQotICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQocHJvYy5hZGRWYXJpYWJsZSh0b0IzVHlwZShzaWduYXR1cmUpKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQmxv
Y2tUeXBlOjpJZjoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAiKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIkJsb2NrOiAiKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgotICAgICAgICAgICAgICAgIG91
dC5wcmludCgiTG9vcDogICIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsIGNvbnRpbnVhdGlvbiwg
IiwgU3BlY2lhbDogIik7Ci0gICAgICAgICAgICBpZiAoc3BlY2lhbCkKLSAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoKnNwZWNpYWwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG91dC5wcmludCgiTm9uZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQmxvY2tUeXBlIHR5cGUo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNwZWNpYWwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEJsb2NrVHlwZTo6QmxvY2s7Ci0gICAgICAgICAgICBpZiAoY29udGludWF0
aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBCbG9ja1R5cGU6OklmOwotICAgICAgICAgICAg
cmV0dXJuIEJsb2NrVHlwZTo6TG9vcDsKLSAgICAgICAgfQotCi0gICAgICAgIEJhc2ljQmxvY2sq
IHRhcmdldEJsb2NrRm9yQnJhbmNoKFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHNwZWNpYWw7Ci0gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uLmdldChwcm9jKTsK
LSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIEIzSVJHZW5l
cmF0b3I7Ci0gICAgICAgIC8vIFdlIHVzZSBhIExhenlCbG9jayBmb3IgdGhlIGNvbnRpbnVhdGlv
biBzaW5jZSBCMzo6dmFsaWRhdGUgZG9lcyBub3QgbGlrZSBvcnBoYW5lZCBibG9ja3MuIE5vdGUs
Ci0gICAgICAgIC8vIGl0J3MgcG9zc2libGUgdG8gY3JlYXRlIGFuIG9ycGhhbmVkIGJsb2NrIGJ5
IGRvaW5nIHNvbWV0aGluZyBsaWtlIChibG9jayAocmV0dXJuICguLi4pKSkuIEluCi0gICAgICAg
IC8vIHRoYXQgZXhhbXBsZSwgaWYgd2UgZWFnZXJseSBhbGxvY2F0ZSBhIEJhc2ljQmxvY2sgZm9y
IHRoZSBjb250aW51YXRpb24gaXQgd2lsbCBuZXZlciBiZSByZWFjaGFibGUuCi0gICAgICAgIExh
enlCbG9jayBjb250aW51YXRpb247Ci0gICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0gICAg
ICAgIFZlY3RvcjxWYXJpYWJsZSosIDE+IHJlc3VsdDsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBW
YWx1ZSogRXhwcmVzc2lvblR5cGU7Ci0gICAgdHlwZWRlZiBDb250cm9sRGF0YSBDb250cm9sVHlw
ZTsKLSAgICB0eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7
Ci0gICAgdHlwZWRlZiBWZWN0b3I8VmFyaWFibGUqLCAxPiBSZXN1bHRMaXN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsKLQot
ICAgIEIzSVJHZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2VkQ2Fs
bD4mIHVubGlua2VkQ2FsbHMpOwotCi0gICAgdm9pZCBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9y
PFR5cGU+Jik7Ci0gICAgdm9pZCBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7Ci0gICAgRXhwcmVz
c2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwotCi0gICAgLy8gTG9jYWxzCi0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2Fs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7Ci0KLSAgICAvLyBNZW1vcnkK
LSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwotCi0g
ICAgLy8gQmFzaWMgb3BlcmF0b3JzCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5
T3AoQmluYXJ5T3BUeXBlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
dW5hcnlPcChVbmFyeU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKLQotICAgIC8vIENvbnRyb2wgZmxvdwotICAgIENvbnRyb2xEYXRhIFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7Ci0gICAgQ29udHJvbERhdGEgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwotICAgIENvbnRyb2xEYXRh
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUg
c2lnbmF0dXJlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xE
YXRhJik7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBlbmRCbG9jayhDb250cm9sRGF0YSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sp
OwotCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotCi0gICAgYm9vbCBpc0NvbnRpbnVhdGlv
blJlYWNoYWJsZShDb250cm9sRGF0YSYpOwotCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxD
b250cm9sVHlwZT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Np
b25TdGFjayk7Ci0KLXByaXZhdGU6Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBzaXplT2ZPcCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBl
LCBPcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAg
dm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLQotICAgIHZvaWQg
dW5pZnkoVmFyaWFibGUqIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsKLSAg
ICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRT
dGFjaywgUmVzdWx0TGlzdCYgc3RhY2spOwotCi0gICAgTWVtb3J5KiBtX21lbW9yeTsKLSAgICBQ
cm9jZWR1cmUmIG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKLSAgICBW
ZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKLSAgICAvLyBtX3VubGlrZWRDYWxscyBpcyBsaXN0
IG9mIGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBp
dCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgotICAgIFZlY3RvcjxVbmxpbmtlZENhbGw+JiBtX3Vu
bGlua2VkQ2FsbHM7Ci0gICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUjsKLSAgICBHUFJSZWcgbV9t
ZW1vcnlTaXplR1BSOwotfTsKLQotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1vcnkq
IG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZENhbGw+JiB1bmxp
bmtlZENhbGxzKQotICAgIDogbV9tZW1vcnkobWVtb3J5KQotICAgICwgbV9wcm9jKHByb2NlZHVy
ZSkKLSAgICAsIG1fdW5saW5rZWRDYWxscyh1bmxpbmtlZENhbGxzKQotewotICAgIG1fY3VycmVu
dEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0KLSAgICBpZiAobV9tZW1vcnkpIHsKLSAgICAg
ICAgbV9tZW1vcnlCYXNlR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1v
cnlQb2ludGVyOwotICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BSKTsK
LSAgICAgICAgQVNTRVJUKCFtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVy
c1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gbV9tZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOwotICAgICAgICBm
b3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIGluZm8gOiBtX21lbW9yeS0+cGlubmVk
UmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rl
cihpbmZvLnNpemVSZWdpc3Rlcik7Ci0KLSAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVj
a0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1bnNp
Z25lZCkgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6
ZUdQUiA9PSBwaW5uZWRHUFIpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVu
d2luZCB0aGUgc3RhY2sgYW5kIHRocm93IGEgSlMgZXhjZXB0aW9uLiBTZWU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMzNTEKLSAgICAgICAgICAgIGppdC5icmVh
a3BvaW50KCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9pZCBCM0lSR2VuZXJhdG9yOjph
ZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KQotewotICAgIG1fbG9jYWxzLnJlc2Vy
dmVDYXBhY2l0eShtX2xvY2Fscy5zaXplKCkgKyBjb3VudCk7Ci0gICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fbG9jYWxzLmFwcGVuZChtX3Byb2MuYWRk
VmFyaWFibGUodG9CM1R5cGUodHlwZSkpKTsKLX0KLQotdm9pZCBCM0lSR2VuZXJhdG9yOjphZGRB
cmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiB0eXBlcykKLXsKLSAgICBBU1NFUlQoIW1fbG9j
YWxzLnNpemUoKSk7Ci0gICAgbV9sb2NhbHMuZ3Jvdyh0eXBlcy5zaXplKCkpOwotICAgIHdhc21D
YWxsaW5nQ29udmVudGlvbigpLmxvYWRBcmd1bWVudHModHlwZXMsIG1fcHJvYywgbV9jdXJyZW50
QmxvY2ssIE9yaWdpbigpLAotICAgICAgICBbJl0gKEV4cHJlc3Npb25UeXBlIGFyZ3VtZW50LCB1
bnNpZ25lZCBpKSB7Ci0gICAgICAgICAgICBWYXJpYWJsZSogYXJndW1lbnRWYXJpYWJsZSA9IG1f
cHJvYy5hZGRWYXJpYWJsZShhcmd1bWVudC0+dHlwZSgpKTsKLSAgICAgICAgICAgIG1fbG9jYWxz
W2ldID0gYXJndW1lbnRWYXJpYWJsZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBhcmd1bWVudFZhcmlh
YmxlLCBhcmd1bWVudCk7Ci0gICAgICAgIH0pOwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIEFT
U0VSVChtX2xvY2Fsc1tpbmRleF0pOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgbV9sb2NhbHNb
aW5kZXhdKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjpzZXRM
b2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpCi17Ci0gICAgQVNTRVJU
KG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0sIHZhbHVl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKLXsKLSAgICBBU1NFUlQobV9tZW1v
cnlCYXNlR1BSICYmIG1fbWVtb3J5U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJhdGlv
biArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNt
Qm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXpl
R1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsKLSAgICBwb2ludGVyID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBwb2lu
dGVyKTsKLSAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1Zh
bHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeUJhc2VHUFIpOwotfQotCi1p
bmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCi17Ci0gICAgc3dpdGNo
IChvcCkgewotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgotICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDhVOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgotICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQxNlM6Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgot
ICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6Ci0gICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
VToKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgotICAg
ICAgICByZXR1cm4gODsKLSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6Ci0gICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoK
LSAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgVmFsdWUqIEIzSVJH
ZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQotewotICAgIHN3aXRjaCAob3ApIHsK
LSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewotICAgICAgICByZXR1cm4gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIG9yaWdpbiwg
cG9pbnRlciwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4
UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0
MzIsIG9yaWdpbiwgdmFsdWUpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDhVOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgIH0KLQot
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBv
cmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOiB7Ci0gICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdp
biwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICB9Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2Fk
MTZTOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBT
RXh0MzIsIG9yaWdpbiwgdmFsdWUpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKTsKLSAgICB9Ci0KLSAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQz
Miwgb3JpZ2luLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4sIHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQz
Miwgb3JpZ2luLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbiwg
cG9pbnRlcik7Ci0gICAgfQotCi0gICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7Ci0gICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIEZsb2F0LCBvcmlnaW4sIHBvaW50ZXIpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9w
VHlwZTo6RjY0TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlcik7Ci0g
ICAgfQotCi0gICAgLy8gQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0LgotICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2VToKLSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KQot
ewotICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwotCi0gICAgcmVzdWx0ID0g
ZW1pdExvYWRPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50
ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWlubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQotewot
ICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6Ci0gICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3Jl
MTY6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlOgot
ICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6Ci0gICAgY2FzZSBTdG9yZU9wVHlwZTo6
RjMyU3RvcmU6Ci0gICAgICAgIHJldHVybiA0OwotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlOgotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgotICAgICAgICByZXR1cm4gODsK
LSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotCi1pbmxpbmUg
dm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgT3JpZ2luIG9y
aWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQz
Ml90IG9mZnNldCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBTdG9yZU9wVHlwZTo6
STY0U3RvcmU4OgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOwotICAgICAgICBGQUxMVEhST1VHSDsK
LQotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbiwgdmFsdWUs
IHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgU3RvcmVPcFR5
cGU6Okk2NFN0b3JlMTY6Ci0gICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7Ci0gICAgICAgIEZBTExUSFJP
VUdIOwotCi0gICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2LCBvcmlnaW4s
IHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFN0
b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOwotICAgICAgICBG
QUxMVEhST1VHSDsKLQotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgotICAgIGNhc2Ug
U3RvcmVPcFR5cGU6OkkzMlN0b3JlOgotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgot
ICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4sIHZhbHVlLCBwb2lu
dGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50
MzJfdCBvZmZzZXQpCi17Ci0gICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7Ci0K
LSAgICBlbWl0U3RvcmVPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjp1bmFyeU9wKFVuYXJ5T3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCB0b0Iz
T3Aob3ApLCBPcmlnaW4oKSwgYXJnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCM0lS
R2VuZXJhdG9yOjpiaW5hcnlPcChCaW5hcnlPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgdG9CM09wKG9w
KSwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQjNJUkdl
bmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0
eXBlLCB1aW50NjRfdCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIElu
dDMyOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7Ci0gICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3Q2NFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCB2YWx1ZSk7Ci0gICAgY2FzZSBGbG9hdDoKLSAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPiht
X3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+
KHZhbHVlKSkpOwotICAgIGNhc2UgRG91YmxlOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNl
X2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0KLQot
QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBz
aWduYXR1cmUpCi17Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlKTsK
LX0KLQotQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChU
eXBlIHNpZ25hdHVyZSkKLXsKLSAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJsb2Nr
KCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIE9yaWdpbigpLCBib2R5KTsKLSAgICBib2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRC
bG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIHJldHVybiBDb250cm9sRGF0
YShtX3Byb2MsIHNpZ25hdHVyZSwgYm9keSk7Ci19Ci0KLUIzSVJHZW5lcmF0b3I6OkNvbnRyb2xE
YXRhIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBz
aWduYXR1cmUpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZG8gc29tZSBraW5kIG9m
IHN0YWNrIHBhc3NpbmcuCi0KLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJvYy5hZGRCbG9j
aygpOwotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0KLSAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIE9yaWdpbigp
LCBjb25kaXRpb24pOwotICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50
ZWRCbG9jayh0YWtlbiksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOwotICAgIHRha2VuLT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbm90VGFrZW4tPmFkZFByZWRlY2Vz
c29yKG1fY3VycmVudEJsb2NrKTsKLQotICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Ci0gICAg
cmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBub3RUYWtlbiwgY29udGludWF0
aW9uKTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRh
KQotewotICAgIEFTU0VSVChkYXRhLmNvbnRpbnVhdGlvbik7Ci0gICAgbV9jdXJyZW50QmxvY2sg
PSBkYXRhLnNwZWNpYWw7Ci0gICAgLy8gQ2xlYXIgdGhlIHNwZWNpYWwgcG9pbnRlciBzbyB0aGF0
IHdoZW4gd2UgcGFyc2UgdGhlIGVuZCB3ZSBkb24ndCB0aGluayB0aGF0IHRoaXMgYmxvY2sgaXMg
YW4gaWYgYmxvY2suCi0gICAgZGF0YS5zcGVjaWFsID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoZGF0
YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5W
YWx1ZXMpCi17Ci0gICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7Ci0gICAgaWYg
KHJldHVyblZhbHVlcy5zaXplKCkpCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBd
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpCi17
Ci0gICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaChtX3By
b2MpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHQp
OwotICAgIGlmIChjb25kaXRpb24pIHsKLSAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgT3JpZ2luKCksIGNvbmRpdGlvbik7Ci0gICAgICAg
IG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBG
cmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIHRhcmdldC0+YWRkUHJlZGVj
ZXNzb3IobV9jdXJyZW50QmxvY2spOwotICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vz
c29yKG1fY3VycmVudEJsb2NrKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b247Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7
Ci0gICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENv
bnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQotewotICAg
IGlmICghZGF0YS5jb250aW51YXRpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7Ci0g
ICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgQVNTRVJUKCFk
YXRhLnNwZWNpYWwtPnNpemUoKSAmJiAhZGF0YS5zcGVjaWFsLT5zdWNjZXNzb3JzKCkuc2l6ZSgp
KTsKLSAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWxzZSBibG9jayB3ZSBuZWVk
IHRvIHBvaW50IHRoZSBub3RUYWtlbiBicmFuY2ggdG8gdGhlIGNvbnRpbnVhdGlvbi4KLSAgICAg
ICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmln
aW4oKSk7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxv
Y2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3Io
ZGF0YS5zcGVjaWFsKTsKLSAgICB9Ci0KLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNz
aW9uU3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGNvbnRpbnVhdGlvbik7Ci0gICAgY29u
dGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJyZW50
QmxvY2sgPSBjb250aW51YXRpb247Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbCh1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBGdW5jdGlvbklu
Zm9ybWF0aW9uJiBpbmZvLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KQotewotICAgIEFTU0VSVChpbmZvLnNpZ25hdHVyZS0+YXJndW1lbnRzLnNp
emUoKSA9PSBhcmdzLnNpemUoKSk7Ci0KLSAgICBUeXBlIHJldHVyblR5cGUgPSBpbmZvLnNpZ25h
dHVyZS0+cmV0dXJuVHlwZTsKLQotICAgIHNpemVfdCBjYWxsSW5kZXggPSBtX3VubGlua2VkQ2Fs
bHMuc2l6ZSgpOwotICAgIG1fdW5saW5rZWRDYWxscy5ncm93KGNhbGxJbmRleCArIDEpOwotICAg
IHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3Vy
cmVudEJsb2NrLCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCi0gICAgICAg
IFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7Ci0gICAgICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Ci0gICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotCi0gICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAg
ICBtX3VubGlua2VkQ2FsbHNbY2FsbEluZGV4XSA9IHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNh
bGwpLCBmdW5jdGlvbkluZGV4IH07Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJUkdlbmVyYXRv
cjo6aXNDb250aW51YXRpb25SZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpCi17Ci0gICAgLy8g
SWYgbm90aGluZyB0YXJnZXRzIHRoZSBjb250aW51YXRpb24gb2YgdGhlIGN1cnJlbnQgYmxvY2sg
dGhlbiB3ZSBkb24ndCB3YW50IHRvIGNyZWF0ZQotICAgIC8vIGFuIG9ycGhhbmVkIEJhc2ljQmxv
Y2sgc2luY2UgaXQgY2FuJ3QgYmUgcmVhY2hlZCBieSBmYWxsdGhyb3VnaC4KLSAgICBpZiAoIWRh
dGEuY29udGludWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2N1cnJlbnRC
bG9jayA9IGRhdGEuY29udGludWF0aW9uLmdldChtX3Byb2MpOwotICAgIGlmIChkYXRhLnR5cGUo
KSA9PSBCbG9ja1R5cGU6OklmKSB7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKLSAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFkZFByZWRlY2Vzc29yKGRhdGEuc3BlY2lhbCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFyaWFi
bGUqIHZhcmlhYmxlLCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCi17Ci0gICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZhcmlh
YmxlLCBzb3VyY2UpOwotfQotCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVzdWx0
KQotewotICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpID49IHJlc3VsdFN0YWNrLnNpemUoKSk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFN0YWNrLnNpemUoKTsgKytpKQotICAg
ICAgICB1bmlmeShyZXN1bHRbaV0sIHJlc3VsdFN0YWNrW2ldKTsKLX0KLQotdm9pZCBCM0lSR2Vu
ZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mIGNvbnRyb2xTdGFjaywgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKLXsKLSAgICBkYXRhTG9nTG4oIlBy
b2Nlc3NpbmcgR3JhcGg6Iik7Ci0gICAgZGF0YUxvZyhtX3Byb2MpOwotICAgIGRhdGFMb2dMbigi
V2l0aCBjdXJyZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7Ci0gICAgZGF0YUxvZ0xuKCJD
b250cm9sIHN0YWNrOiIpOwotICAgIGZvciAoY29uc3QgQ29udHJvbFR5cGUmIGRhdGEgOiBjb250
cm9sU3RhY2spCi0gICAgICAgIGRhdGFMb2dMbigiICAiLCBkYXRhKTsKLSAgICBkYXRhTG9nTG4o
IkV4cHJlc3Npb25TdGFjazoiKTsKLSAgICBmb3IgKGNvbnN0IEV4cHJlc3Npb25UeXBlJiBleHBy
ZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgKmV4cHJl
c3Npb24pOwotICAgIGRhdGFMb2dMbigiXG4iKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYXRlSlNXcmFw
cGVyKFZNJiB2bSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBtYWluRnVuY3Rpb24sIE1lbW9yeSogbWVtb3J5KQotewotICAgIFByb2NlZHVyZSBwcm9j
OwotICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygpOwotCi0gICAgLy8gQ2hl
Y2sgYXJndW1lbnQgY291bnQgaXMgc2FuZS4KLSAgICBWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigp
KTsKLSAgICBWYWx1ZSogb2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgVmFsdWUqIGFyZ3VtZW50Q291bnQgPSBibG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCi0gICAg
ICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGZyYW1lUG9p
bnRlciwgb2ZmU2V0T2ZBcmd1bWVudENvdW50KSk7Ci0KLSAgICBWYWx1ZSogZXhwZWN0ZWRBcmd1
bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOwotCi0gICAgQ2hlY2tWYWx1ZSogYXJndW1l
bnRDb3VudENoZWNrID0gYmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVjaywg
T3JpZ2luKCksCi0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlLCBP
cmlnaW4oKSwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVudENvdW50KSk7Ci0gICAgYXJn
dW1lbnRDb3VudENoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7
Ci0gICAgfSk7Ci0KLSAgICAvLyBNb3ZlIG1lbW9yeSB2YWx1ZXMgdG8gdGhlIGFwcHJvcmlhdGUg
cGxhY2VzLCBpZiBuZWVkZWQuCi0gICAgVmFsdWUqIGJhc2VNZW1vcnkgPSBudWxscHRyOwotICAg
IFZlY3RvcjxWYWx1ZSo+IHNpemVzOwotICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgYmFzZU1l
bW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1l
bW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBWYWx1ZSogc2l6ZSA9IGJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2Fz
dDxjaGFyKj4obWVtb3J5KSArIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKLSAgICAgICAgc2l6
ZXMucmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVy
cy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS0+cGlubmVkUmVnaXN0
ZXJzKCkuc2l6ZVJlZ2lzdGVycykgewotICAgICAgICAgICAgc2l6ZXMuYXBwZW5kKGJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIHNpemUsCi0gICAgICAgICAgICAg
ICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpbmZvLnNp
emVPZmZzZXQpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgb3VyIGFyZ3VtZW50
cy4KLSAgICBWZWN0b3I8VmFsdWUqPiBhcmd1bWVudHM7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRp
b24oKS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZS0+YXJndW1lbnRzLCBwcm9jLCBibG9jaywgT3Jp
Z2luKCksIFsmXSAoVmFsdWUqIGFyZ3VtZW50LCB1bnNpZ25lZCkgewotICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGFyZ3VtZW50KTsKLSAgICB9KTsKLQotICAgIC8vIE1vdmUgdGhlIGFyZ3VtZW50
cyBpbnRvIHBsYWNlLgotICAgIFZhbHVlKiByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5zZXR1cENhbGwocHJvYywgYmxvY2ssIE9yaWdpbigpLCBhcmd1bWVudHMsIHRvQjNUeXBlKHNp
Z25hdHVyZS0+cmV0dXJuVHlwZSksIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7
Ci0gICAgICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzaXplcy5zaXplKCkg
PT0gbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShiYXNlTWVtb3J5LCBW
YWx1ZVJlcDo6cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXIp
KSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUo
c2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVn
aXN0ZXJzW2ldLnNpemVSZWdpc3RlcikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyKG1haW5GdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIHJlc3VsdCwgaWYgbmVlZGVkLgotICAgIGlmIChzaWduYXR1cmUtPnJldHVyblR5cGUgIT0g
Vm9pZCkKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICBlbHNlCi0gICAgICAgIGJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCkpOwotCi0gICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jKTsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIFZlY3Rv
cjx1aW50OF90PiYgc291cmNlLCBNZW1vcnkqIG1lbW9yeSwgRnVuY3Rpb25JbmZvcm1hdGlvbiBp
bmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucywgdW5zaWdu
ZWQgb3B0TGV2ZWwpCi17Ci0gICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0
aW9uQ29tcGlsYXRpb24+KCk7Ci0KLSAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIzSVJH
ZW5lcmF0b3IgY29udGV4dChtZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LT51bmxpbmtlZENhbGxz
KTsKLSAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgc291
cmNlLCBpbmZvLCBmdW5jdGlvbnMpOwotICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBwcm9jZWR1cmUucmVzZXRSZWFj
aGFiaWxpdHkoKTsKLSAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJBZnRlciBwYXJzaW5nOlxuIik7
Ci0KLSAgICBmaXhTU0EocHJvY2VkdXJlKTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZygiUG9zdCBTU0E6ICIsIHByb2NlZHVyZSk7Ci0KLSAgICByZXN1bHQtPmNvZGUgPSBzdGQ6
Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7Ci0gICAg
cmVzdWx0LT5qc0VudHJ5UG9pbnQgPSBjcmVhdGVKU1dyYXBwZXIodm0sIGluZm8uc2lnbmF0dXJl
LCByZXN1bHQtPmNvZGUtPmNvZGUoKSwgbWVtb3J5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJHZW5l
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM0lSR2VuZXJhdG9yLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYmM4M2YyMTI2ZjkyYzdiYjY5OTIzYTll
NzQ3NzQxM2NmNWU5NzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuaAorKysg
L2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LQotI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUg
IldBU01Gb3JtYXQuaCIKLQotZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1jbGFzcyBNZW1vcnk7Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBW
ZWN0b3I8dWludDhfdD4mLCBNZW1vcnkqLCBGdW5jdGlvbkluZm9ybWF0aW9uLCBjb25zdCBWZWN0
b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwotCi19IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdDb252ZW50
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlv
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhY2JiYzI3ODBlNTU3NjEzNmYx
OTBkYTEzOTJjNGVmMzQ2NGQ1YWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdDb252ZW50
aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV0FTTUNhbGxpbmdDb252ZW50aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXQVNNIHsKLQotY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdDb252
ZW50aW9uKCkKLXsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252
ZW50aW9uPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKLSAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNl
KHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgewotICAgICAgICBzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9yPFJlZz4o
KSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgfSk7Ci0KLSAgICBy
ZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Ci19Ci0KLWNvbnN0IFdBU01DYWxsaW5n
Q29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkKLXsKLSAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNXQVNNQ2FsbGluZ0NvbnZl
bnRpb247Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dBU01DYWxsaW5nQ29udmVu
dGlvbkZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV0FTTUNhbGxpbmdDb252ZW50aW9u
RmxhZywgW10gKCkgewotICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJlZ2lzdGVycyhH
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKLSAg
ICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJl
Z2lzdGVyKGkpOwotCi0gICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVnaXN0ZXJzKEZQ
UkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQotICAg
ICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoaSk7Ci0KLSAgICAgICAgc3RhdGljV0FTTUNhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVj
dChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1bWVudFJlZ2lz
dGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIH0pOwotCi0g
ICAgcmV0dXJuIHN0YXRpY1dBU01DYWxsaW5nQ29udmVudGlvbjsKLX0KLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OldBU00KLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxNmViNTQ4NzBkMmE1YmU4ZDVkMDNlZTZlZDU0YjJjYmVkZWU0
ZWNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2lu
Y2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgotI2luY2x1ZGUgIkIzQXJn
dW1lbnRSZWdWYWx1ZS5oIgotI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgotI2luY2x1ZGUgIkIz
Q29uc3Q2NFZhbHVlLmgiCi0jaW5jbHVkZSAiQjNDb25zdHJhaW5lZFZhbHVlLmgiCi0jaW5jbHVk
ZSAiQjNNZW1vcnlWYWx1ZS5oIgotI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCi0jaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNp
bmNsdWRlICJSZWdpc3RlclNldC5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKLQotbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXQVNNIHsKLQotdHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZz
ZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5cGUpOwotCi10ZW1wbGF0ZTx1
bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KLWNsYXNzIENhbGxp
bmdDb252ZW50aW9uIHsKLXB1YmxpYzoKLSAgICBDYWxsaW5nQ29udmVudGlvbihWZWN0b3I8UmVn
PiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVT
YXZlUmVnaXN0ZXJzKQotICAgICAgICA6IG1fZ3ByQXJncyhncHJBcmdzKQotICAgICAgICAsIG1f
ZnByQXJncyhmcHJBcmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhjYWxsZWVT
YXZlUmVnaXN0ZXJzKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQjM6OlZhbHVlUmVw
IG1hcnNoYWxsQXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5cGUs
IHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBCMzo6VmFs
dWVSZXA6OnJlZyhyZWdBcmdzW2NvdW50KytdKTsKLQotICAgICAgICBjb3VudCsrOwotICAgICAg
ICBCMzo6VmFsdWVSZXAgcmVzdWx0ID0gQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0YWNr
T2Zmc2V0KTsKLSAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQs
IHR5cGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEIzOjpWYWx1ZVJl
cCBtYXJzaGFsbEFyZ3VtZW50KEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgZ3BBcmd1bWVudENvdW50
LCBzaXplX3QmIGZwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEIzOjpJbnQzMjoKLSAg
ICAgICAgY2FzZSBCMzo6SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVu
dEltcGwobV9ncHJBcmdzLCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKLSAg
ICAgICAgY2FzZSBCMzo6RmxvYXQ6Ci0gICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAgICAg
ICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1l
bnRDb3VudCwgc3RhY2tPZmZzZXQpOwotICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLQotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9p
ZCBsb2FkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRUeXBlcywgQjM6OlBy
b2NlZHVyZSYgcHJvYywgQjM6OkJhc2ljQmxvY2sqIGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEIzOjpWYWx1ZSog
ZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFt
ZVBvaW50ZXIsIG9yaWdpbik7Ci0KLSAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7
Ci0gICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3Qgc3Rh
Y2tPZmZzZXQgPSBoZWFkZXJTaXplOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJndW1lbnRUeXBlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQjM6OlR5cGUgdHlwZSA9
IHRvQjNUeXBlKGFyZ3VtZW50VHlwZXNbaV0pOwotICAgICAgICAgICAgQjM6OlZhbHVlKiBhcmd1
bWVudDsKLSAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXAgPSBtYXJzaGFsbEFyZ3VtZW50KHR5
cGUsIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7Ci0gICAg
ICAgICAgICBpZiAocmVwLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICBhcmd1bWVudCA9IGJs
b2NrLT5hcHBlbmROZXc8QjM6OkFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIG9yaWdpbiwgcmVwLnJl
ZygpKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBCMzo6SW50MzIpCi0gICAgICAgICAg
ICAgICAgICAgIGFyZ3VtZW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIz
OjpUcnVuYywgb3JpZ2luLCBhcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhv
dyBkbyBJIGdldCBhIGZsb2F0IGZyb20gYSBGUFI/IFdlIGRvbid0IHN1cHBvcnQgZmxvYXRpbmcg
cG9pbnRzIHlldCBzbyBpdCdzIG5vdCBhIGJpZyBkZWFsLi4uIHlldC4KLSAgICAgICAgICAgICAg
ICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3NzAK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlcC5pc1N0YWNr
QXJndW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgQjM6OlZhbHVlKiBhZGRyZXNzID0gYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVy
LAotICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+
KHByb2MsIG9yaWdpbiwgcmVwLm9mZnNldEZyb21TUCgpKSk7Ci0gICAgICAgICAgICAgICAgYXJn
dW1lbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6OkxvYWQs
IHR5cGUsIG9yaWdpbiwgYWRkcmVzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmdW5j
dG9yKGFyZ3VtZW50LCBpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEl0J3MgZXhwZWN0
ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRoZSBj
YWxsIG9wZXJhdGlvbi4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIEIzOjpW
YWx1ZSogc2V0dXBDYWxsKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBibG9j
aywgQjM6Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxCMzo6VmFsdWUqPiYgYXJndW1lbnRz
LCBCMzo6VHlwZSByZXR1cm5UeXBlLCBjb25zdCBGdW5jdG9yJiBwYXRjaHBvaW50RnVuY3Rvcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0
ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLQotICAgICAgICBWZWN0
b3I8QjM6OkNvbnN0cmFpbmVkVmFsdWU+IGNvbnN0cmFpbmVkQXJndW1lbnRzOwotICAgICAgICBm
b3IgKEIzOjpWYWx1ZSogYXJndW1lbnQgOiBhcmd1bWVudHMpIHsKLSAgICAgICAgICAgIEIzOjpW
YWx1ZVJlcCByZXAgPSBtYXJzaGFsbEFyZ3VtZW50KGFyZ3VtZW50LT50eXBlKCksIGdwQXJndW1l
bnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7Ci0gICAgICAgICAgICBjb25z
dHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJndW1lbnQsIHJl
cCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5C
eXRlcyhXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFj
a09mZnNldCkpOwotCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBi
bG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIHJldHVyblR5cGUsIG9y
aWdpbik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShS
ZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7Ci0gICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZFZlY3Rvcihjb25zdHJhaW5lZEFyZ3VtZW50cyk7Ci0gICAgICAgIHBhdGNo
cG9pbnRGdW5jdG9yKHBhdGNocG9pbnQpOwotCi0gICAgICAgIGlmIChyZXR1cm5UeXBlID09IEIz
OjpWb2lkKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcGF0Y2hwb2lu
dC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7Ci0gICAgfQotCi0gICAgY29uc3Qg
VmVjdG9yPFJlZz4gbV9ncHJBcmdzOwotICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZnByQXJnczsK
LSAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgY29uc3Qg
UmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJzOwotfTsKLQotaW5saW5lIHVuc2lnbmVk
IG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUpCi17Ci0gICAg
cmV0dXJuIGN1cnJlbnRPZmZzZXQgKyBzaXplb2YoUmVnaXN0ZXIpOwotfQotCi1jb25zdGV4cHIg
dW5zaWduZWQganNjSGVhZGVyU2l6ZSA9IEV4ZWNTdGF0ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
ICogc2l6ZW9mKFJlZ2lzdGVyKTsKLXR5cGVkZWYgQ2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVy
U2l6ZSwgbmV4dEpTQ09mZnNldD4gSlNDQ2FsbGluZ0NvbnZlbnRpb247Ci0KLXR5cGVkZWYgSlND
Q2FsbGluZ0NvbnZlbnRpb24gV0FTTUNhbGxpbmdDb252ZW50aW9uOwotCi1jb25zdCBKU0NDYWxs
aW5nQ29udmVudGlvbiYganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLWNvbnN0IFdBU01DYWxsaW5n
Q29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFj
NDZmZjM1YWRmYWIyMDZmYzhmMmQ3MDRhZTU0NzU5ZTBlZGFjZTguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZvcm1hdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgot
ICogQ29weXJpZ2h0IChjKSAyMDE1IGJ5IHRoZSByZXBvc2l0b3J5IGF1dGhvcnMgb2YKLSAqIFdl
YkFzc2VtYmx5L3BvbHlmaWxsLXByb3RvdHlwZS0xLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAg
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2lu
Y2x1ZGUgIkIzVHlwZS5oIgotI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIEpTRnVuY3Rpb247Ci0KLW5hbWVzcGFjZSBXQVNNIHsKLQotZW51bSBU
eXBlIDogdWludDhfdCB7Ci0gICAgVm9pZCwKLSAgICBJMzIsCi0gICAgSTY0LAotICAgIEYzMiwK
LSAgICBGNjQsCi0gICAgTGFzdFZhbHVlVHlwZSA9IEY2NCwKLX07Ci0KLXN0YXRpY19hc3NlcnQo
STMyID09IDEsICJXQVNNIG5lZWRzIEkzMiB0byBoYXZlIHRoZSB2YWx1ZSAxIik7Ci1zdGF0aWNf
YXNzZXJ0KEk2NCA9PSAyLCAiV0FTTSBuZWVkcyBJNjQgdG8gaGF2ZSB0aGUgdmFsdWUgMiIpOwot
c3RhdGljX2Fzc2VydChGMzIgPT0gMywgIldBU00gbmVlZHMgRjMyIHRvIGhhdmUgdGhlIHZhbHVl
IDMiKTsKLXN0YXRpY19hc3NlcnQoRjY0ID09IDQsICJXQVNNIG5lZWRzIEY2NCB0byBoYXZlIHRo
ZSB2YWx1ZSA0Iik7Ci0KLWlubGluZSBCMzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJMzI6IHJldHVybiBCMzo6SW50MzI7Ci0gICAg
Y2FzZSBJNjQ6IHJldHVybiBCMzo6SW50NjQ7Ci0gICAgY2FzZSBGMzI6IHJldHVybiBCMzo6Rmxv
YXQ7Ci0gICAgY2FzZSBGNjQ6IHJldHVybiBCMzo6RG91YmxlOwotICAgIGNhc2UgVm9pZDogcmV0
dXJuIEIzOjpWb2lkOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5
cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJMzI6Ci0gICAgY2FzZSBJNjQ6
Ci0gICAgY2FzZSBGMzI6Ci0gICAgY2FzZSBGNjQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LQotc3RydWN0IFNpZ25hdHVyZSB7Ci0gICAgVHlwZSByZXR1cm5UeXBlOwotICAgIFZlY3RvcjxU
eXBlPiBhcmd1bWVudHM7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25JbXBvcnQgewotICAgIFN0cmlu
ZyBmdW5jdGlvbk5hbWU7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgewot
ICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OwotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0
SW5kZXg7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAgdWludDMyX3Qg
c2lnbmF0dXJlSW5kZXg7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25Qb2ludGVyVGFibGUgewotICAg
IHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gZnVuY3Rpb25J
bmRpY2VzOwotICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rpb25zOwotfTsKLQotc3RydWN0
IEZ1bmN0aW9uSW5mb3JtYXRpb24gewotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOwotICAgIHNp
emVfdCBzdGFydDsKLSAgICBzaXplX3QgZW5kOwotfTsKLQotc3RydWN0IFVubGlua2VkQ2FsbCB7
Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsTG9jYXRpb247Ci0gICAgc2l6ZV90IGZ1bmN0aW9u
SW5kZXg7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25Db21waWxhdGlvbiB7Ci0gICAgVmVjdG9yPFVu
bGlua2VkQ2FsbD4gdW5saW5rZWRDYWxsczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBp
bGF0aW9uPiBjb2RlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGpzRW50
cnlQb2ludDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvblBhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTJlMjhiNTY5
OTJiNWRhYmM3NzA5NjNkNWFkODQ3NDAwNmM2Yjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvblBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIldBU01QYXJzZXIuaCIKLSNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1lbnVt
IGNsYXNzIEJsb2NrVHlwZSB7Ci0gICAgSWYsCi0gICAgQmxvY2ssCi0gICAgTG9vcAotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGlj
IFBhcnNlciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNz
aW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNv
bnRyb2xUeXBlIENvbnRyb2xUeXBlOwotCi0gICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0
aW9uJiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOwotCi0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUJsb2NrKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHBy
ZXNzaW9uKE9wVHlwZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNo
YWJsZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlm
eUNvbnRyb2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKLQotICAg
IENvbnRleHQmIG1fY29udGV4dDsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhw
cmVzc2lvblN0YWNrOwotICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7Ci0g
ICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKLSAgICBjb25zdCBWZWN0b3I8RnVuY3Rp
b25JbmZvcm1hdGlvbj4mIG1fZnVuY3Rpb25zOwotICAgIHVuc2lnbmVkIG1fdW5yZWFjaGFibGVC
bG9ja3MgeyAwIH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBp
bmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKLSAgICA6
IFBhcnNlcihzb3VyY2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQotICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NpZ25hdHVyZSgqaW5mby5zaWduYXR1cmUpCi0gICAgLCBt
X2Z1bmN0aW9ucyhmdW5jdGlvbnMpCi17Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2dMbigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBlbmRp
bmcgYXQ6ICIsIGluZm8uZW5kKTsKLSAgICBtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0
dXJlLmFyZ3VtZW50cyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpCi17Ci0gICAgdWludDMyX3QgbG9jYWxDb3Vu
dDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7
Ci0gICAgICAgIHVpbnQzMl90IG51bWJlck9mTG9jYWxzOwotICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKG51bWJlck9mTG9jYWxzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBUeXBlIHR5cGVPZkxvY2FsOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVP
ZkxvY2FsKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRleHQu
YWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcGFyc2VCbG9jaygpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCi17Ci0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgdWludDhfdCBvcDsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSB8fCAh
aXNWYWxpZE9wVHlwZShvcCkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgICAgIFdURjo6ZGF0YUxvZ0xuKCJhdHRlbXB0ZWQgdG8gZGVjb2RlIGludmFsaWQgb3A6ICIs
IFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIs
IFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyYm9zZSkgewot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBtX3VucmVhY2hhYmxlQmxv
Y2tzLCAiKTogIiwgIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBh
dCBvZmZzZXQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQp
KSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQuZHVtcChtX2NvbnRyb2xTdGFjaywgbV9leHByZXNz
aW9uU3RhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6RW5kICYm
ICFtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBp
ZiAobV91bnJlYWNoYWJsZUJsb2NrcykgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVhY2hh
YmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8g
cHJvY2VzcyB1bnJlYWNoYWJsZSBvcDoiLCBvcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4cHJlc3Npb24o
c3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgLy8gSSdt
IG5vdCBzdXJlIGlmIHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJlLi4u
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29w
KSBjYXNlIG5hbWU6Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQotewotICAgIHN3aXRj
aCAob3ApIHsKLSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkgewotICAg
ICAgICBFeHByZXNzaW9uVHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7
Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFz
dCgpOwotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250
ZXh0LmJpbmFyeU9wKHN0YXRpY19jYXN0PEJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdodCwg
cmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IEZPUl9FQUNIX1dBU01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpIHsKLSAgICAgICAgRXhwcmVzc2lv
blR5cGUgYXJnID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgcmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4dC51bmFyeU9wKHN0YXRpY19j
YXN0PFVuYXJ5T3BUeXBlPihvcCksIGFyZywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1Ao
Q1JFQVRFX0NBU0UpIHsKLSAgICAgICAgdWludDMyX3QgYWxpZ25tZW50OwotICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGFsaWdubWVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9m
ZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQubG9hZChzdGF0aWNfY2Fz
dDxMb2FkT3BUeXBlPihvcCksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZ
X1NUT1JFX09QKENSRUFURV9DQVNFKSB7Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhbGlnbm1lbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7
Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+
KG9wKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6
OkkzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIsIGNv
bnN0YW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgT3BUeXBl
OjpJNjRDb25zdDogewotICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQ2NChjb25zdGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0LCBj
b25zdGFudCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlw
ZTo6R2V0TG9jYWw6IHsKLSAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmdldExvY2FsKGlu
ZGV4LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBjYXNlIE9wVHlwZTo6U2V0TG9jYWw6IHsKLSAgICAgICAgdWludDMyX3QgaW5kZXg7
Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG1fZXhwcmVzc2lvblN0YWNr
LnRha2VMYXN0KCk7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZh
bHVlKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6Q2FsbDogewotICAgICAgICB1aW50MzJf
dCBmdW5jdGlvbkluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChmdW5jdGlvbklu
ZGV4ID49IG1fZnVuY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbZnVu
Y3Rpb25JbmRleF07Ci0KLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRh
a2VMYXN0KCkpOwotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVt
cHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5jdGlvbklu
ZGV4LCBpbmZvLCBhcmdzLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQotICAgICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7Ci0gICAgICAgIFR5cGUgaW5s
aW5lU2lnbmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25hdHVy
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9jb250cm9sU3RhY2su
YXBwZW5kKG1fY29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKLSAgICAgICAgVHlw
ZSBpbmxpbmVTaWduYXR1cmU7Ci0gICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2ln
bmF0dXJlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRyb2xT
dGFjay5hcHBlbmQobV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgT3BUeXBlOjpJZjogewotICAgICAgICBU
eXBlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxpbmVT
aWduYXR1cmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAg
IG1fY29udHJvbFN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxpbmVT
aWduYXR1cmUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5
cGU6OkVsc2U6IHsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0
YWNrLmxhc3QoKSk7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6OkJyOgotICAgIGNhc2UgT3BU
eXBlOjpCcklmOiB7Ci0gICAgICAgIHVpbnQzMl90IHRhcmdldDsKLSAgICAgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMih0YXJnZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBpZiAob3AgPT0gT3BUeXBl
OjpCcklmKQotICAgICAgICAgICAgY29uZGl0aW9uID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxh
c3QoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7
Ci0KLSAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xT
dGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XTsKLQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFk
ZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKLSAgICB9Ci0KLSAg
ICBjYXNlIE9wVHlwZTo6UmV0dXJuOiB7Ci0gICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwg
MT4gcmV0dXJuVmFsdWVzOwotICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSAhPSBW
b2lkKQotICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChtX2V4cHJlc3Npb25TdGFjay50
YWtlTGFzdCgpKTsKLQotICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICAgICAg
cmV0dXJuIG1fY29udGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKLSAgICB9Ci0KLSAgICBj
YXNlIE9wVHlwZTo6RW5kOiB7Ci0gICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xT
dGFjay50YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEs
IG1fZXhwcmVzc2lvblN0YWNrKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFi
bGU6Ci0gICAgY2FzZSBPcFR5cGU6OlNlbGVjdDoKLSAgICBjYXNlIE9wVHlwZTo6QnJUYWJsZToK
LSAgICBjYXNlIE9wVHlwZTo6Tm9wOgotICAgIGNhc2UgT3BUeXBlOjpEcm9wOgotICAgIGNhc2Ug
T3BUeXBlOjpGMzJDb25zdDoKLSAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6Ci0gICAgY2FzZSBP
cFR5cGU6OlRlZUxvY2FsOgotICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6Ci0gICAgY2FzZSBP
cFR5cGU6OlNldEdsb2JhbDoKLSAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OgotICAgICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJs
ZUV4cHJlc3Npb24oT3BUeXBlIG9wKQotewotICAgIEFTU0VSVChtX3VucmVhY2hhYmxlQmxvY2tz
KTsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKLSAgICAgICAg
aWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7Ci0gICAg
ICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKLSAgICAgICAgbV91bnJl
YWNoYWJsZUJsb2NrcyA9IDA7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShkYXRh
KTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6RW5kOiB7Ci0gICAgICAgIGlmIChtX3VucmVh
Y2hhYmxlQmxvY2tzID09IDEpIHsKLSAgICAgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2Nv
bnRyb2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXNDb250
aW51YXRpb25SZWFjaGFibGUoZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6TG9vcDoKLSAgICBjYXNlIE9wVHlwZTo6
SWY6Ci0gICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7Ci0gICAgICAgIG1fdW5yZWFjaGFibGVCbG9j
a3MrKzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gdHdvIGltbWVkaWF0
ZSBjYXNlcwotICAgIGNhc2UgT3BUeXBlOjpCcjoKLSAgICBjYXNlIE9wVHlwZTo6QnJJZjogewot
ICAgICAgICB1aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodW51
c2VkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlVmFy
VUludDMyKHVudXNlZCk7Ci0gICAgfQotCi0gICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcwotICAg
IGNhc2UgT3BUeXBlOjpSZXR1cm46Ci0gICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OgotICAgIGNh
c2UgT3BUeXBlOjpTZXRMb2NhbDoKLSAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKLSAgICAg
ICAgdWludDMyX3QgdW51c2VkOwotICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51c2Vk
KTsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLSN1bmRlZiBDUkVBVEVfQ0FTRQotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNTWVtb3J5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmM4NTBkOWYzMjY5NjcwNGRiY2UzNWViNjU5YWQ3YjgyMjc5MmQwNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTWVtb3J5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1NZW1vcnk6Ok1lbW9yeSh1aW50MzJf
dCBzdGFydGluZ1NpemUsIHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+
JiBwaW5uZWRTaXplUmVnaXN0ZXJzKQotICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5n
KQotICAgICwgbV9zaXplKHN0YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkp
Ci0gICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5nIHRo
ZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KLSAgICAvLyBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICAsIG1f
bWFwcGVkQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFBhZ2VDb3VudCkgKiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpKQotewotICAgIEFTU0VSVChwaW5uZWRTaXplUmVn
aXN0ZXJzLnNpemUoKSA+IDApOwotCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYg
d2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwg
bV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwg
MCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIC8vIFRyeSBhZ2Fp
biB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1f
Y2FwYWNpdHk7Ci0gICAgICAgIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0
eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgICAgIGlm
IChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoc3RhcnRpbmdTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIGlmIChtcHJv
dGVjdChyZXN1bHQsIHN0YXJ0aW5nU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAg
ICAgICAgbXVubWFwKHJlc3VsdCwgbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRT
aXplUmVnaXN0ZXJzLnNpemUoKSArIDE7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2Nh
bGxlZVNhdmVSZWdpc3RlcnMuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgR1BSUmVn
IGdwciA9IHJlZy5ncHIoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMg
fHwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkgewotICAg
ICAgICAgICAgbV9waW5uZWRSZWdpc3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7Ci0gICAg
ICAgICAgICByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMtLTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlu
bmVkU2l6ZVJlZ2lzdGVyc1stLXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0pOwotICAg
IH0pOwotCi0gICAgQVNTRVJUKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOwotICAgIG1fbWVt
b3J5ID0gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotfSAvLyBuYW1lc3BhY2Ug
V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTU1lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGUyNDg1
MmYzODllMTYwNzQ0MTFiZDE2MDk4MDBkOGIxZDYyNjEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01N
ZW1vcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIldBU01DYWxsaW5nQ29udmVudGlvbi5oIgotCi0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewot
Ci1zdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7Ci0gICAgR1BSUmVnIHNpemVSZWdpc3Rl
cjsKLSAgICB1bnNpZ25lZCBzaXplT2Zmc2V0OwotfTsKLQotLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIuIFJpZ2h0IG5vdyB3ZSB0
YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUKLS8vIGVudHJ5LiBTcGVjaWZpY2FsbHkgYW4gZW50
cnkgd2hlcmUgdGhlIHNpemVPZmZzZXQgPT0gMC4gSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHNp
emUgcmVnaXN0ZXIsCi0vLyB3ZSBjYW4gaGF2ZSBvbmUgZm9yIGVhY2ggbG9hZCBzaXplIGNsYXNz
LiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKLXN0
cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewotICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJ
bmZvPiBzaXplUmVnaXN0ZXJzOwotICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlcjsKLX07Ci0K
LWNvbnN0ZXhwciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7Ci1jb25zdGV4cHIgdWludDMy
X3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxsIDw8IDMyKSAvIHBh
Z2VTaXplKTsKLQotY2xhc3MgTWVtb3J5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1v
cnkpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotCi0gICAgLy8gRklY
TUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICBlbnVtIGNsYXNzIE1vZGUgewotICAg
ICAgICBCb3VuZHNDaGVja2luZwotICAgIH07Ci0KLSAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7Ci0g
ICAgTWVtb3J5KHVpbnQzMl90IHN0YXJ0aW5nU2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNvbnN0
IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpOwotCi0gICAgfk1lbW9yeSgp
Ci0gICAgewotICAgICAgICBpZiAobV9tZW1vcnkpCi0gICAgICAgICAgICBtdW5tYXAobV9tZW1v
cnksIG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIH0KLQotICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWVtb3J5OyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVnaXN0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdpc3RlcnM7IH0KLQotICAgIE1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotCi0gICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1Np
emUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9tZW1vcnkpOwotICAgICAgICBpZiAobmV3U2l6
ZSA+IG1fY2FwYWNpdHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuICFtcHJvdGVjdChtX21lbW9yeSwgbmV3U2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZv
aWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5l
ZFJlZ2lzdGVyczsKLSAgICBNb2RlIG1fbW9kZTsKLSAgICB1aW50MzJfdCBtX3NpemUgeyAwIH07
Ci0gICAgdWludDMyX3QgbV9jYXBhY2l0eSB7IDAgfTsKLSAgICB1aW50NjRfdCBtX21hcHBlZENh
cGFjaXR5IHsgMCB9OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3OTZi
ZjgzOWFlYWM2MWI2NWI3NmFhMjYyMmUzZDJlMTExMzQwZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldBU01Nb2R1bGVQYXJzZXIuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKLQotI2luY2x1ZGUgIkpTV0FTTU1vZHVsZS5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIK
LSNpbmNsdWRlICJXQVNNT3BzLmgiCi0jaW5jbHVkZSAiV0FTTVNlY3Rpb25zLmgiCi0KLSNpbmNs
dWRlIDxzeXMvbW1hbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1z
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLWJvb2wgTW9kdWxlUGFyc2VyOjpw
YXJzZSgpCi17Ci0gICAgaWYgKG1fc291cmNlTGVuZ3RoIDwgOCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghY29uc3VtZUNoYXJhY3RlcigwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghY29uc3VtZVN0cmluZygiYXNtIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3Qg
ZG8gYW55dGhpbmcgd2l0aCBpdC4KLSAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOwotICAgIGlm
ICghcGFyc2VVSW50MzIodmVyc2lvbk51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9j
ZXNzaW5nIGhlYWRlci4iKTsKLQotICAgIFNlY3Rpb25zOjpTZWN0aW9uIHByZXZpb3VzU2VjdGlv
biA9IFNlY3Rpb25zOjpVbmtub3duOwotICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNlTGVu
Z3RoKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJTdGFy
dGluZyB0byBwYXJzZSBuZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAiLCBtX29mZnNldCk7Ci0KLSAg
ICAgICAgdWludDhfdCBzZWN0aW9uQnl0ZTsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNlY3Rp
b25CeXRlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiU2VjdGlvbiBieXRlOiAiLCBzZWN0aW9uQnl0ZSk7
Ci0KLSAgICAgICAgU2VjdGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3du
OwotICAgICAgICBpZiAoc2VjdGlvbkJ5dGUpIHsKLSAgICAgICAgICAgIGlmIChzZWN0aW9uQnl0
ZSA8IFNlY3Rpb25zOjpVbmtub3duKQotICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxTZWN0aW9uczo6U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgdWludDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7Ci0gICAgICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0
aGUgc2VjdGlvbidzIHNpemUuCi0gICAgICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFt
ZUxlbmd0aCArIFdURjo6TEVCRGVjb2Rlcjo6bWF4MzJCaXRMRUJCeXRlTGVuZ3RoID49IG1fc291
cmNlTGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBhbnkgY3VzdG9tIHNlY3Rpb25zIHlldC4KLQotICAgICAgICAg
ICAgbV9vZmZzZXQgKz0gc2VjdGlvbk5hbWVMZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIVNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0
aDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX29mZnNldCArIHNl
Y3Rpb25MZW5ndGg7Ci0KLSAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7Ci0KLSAgICAgICAgY2Fz
ZSBTZWN0aW9uczo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgTWVtb3J5LiIpOwotICAgICAgICAgICAgaWYgKCFw
YXJzZU1lbW9yeSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6RnVuY3Rpb25UeXBl
czogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJQYXJzaW5nIHR5cGVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uVHlwZXMo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgU2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKLSAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5j
dGlvbiBzaWduYXR1cmVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0
dXJlcygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsKLSAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2lu
ZyBmdW5jdGlvbiBkZWZpbml0aW9ucy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlv
bkRlZmluaXRpb25zKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpVbmtub3duOgot
ICAgICAgICAvLyBGSVhNRTogRGVsZXRlIHRoaXMgd2hlbiB3ZSBzdXBwb3J0IGFsbCB0aGUgc2Vj
dGlvbnMuCi0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsKLSAg
ICAgICAgICAgIG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nTG4oIkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKLQotICAgICAgICBpZiAo
ZW5kICE9IG1fb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHBy
ZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247Ci0gICAgfQotCi0gICAgLy8gVE9ETwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQotewotICAgIHVp
bnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMy
KHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNpemUgPiBtYXhQYWdlQ291
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4
UGFnZUNvdW50OwotICAgIGlmIChmbGFncykgewotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNhcGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHNpemUg
PiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKLSAgICBzaXplICo9
IHBhZ2VTaXplOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9Owot
ICAgIG1fbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBw
aW5uZWRTaXplcyk7Ci0gICAgcmV0dXJuIG1fbWVtb3J5LT5tZW1vcnkoKTsKLX0KLQotYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcygpCi17Ci0gICAgdWludDMyX3QgY291bnQ7
Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBjb3VudCk7
Ci0KLSAgICBtX3NpZ25hdHVyZXMucmVzaXplKGNvdW50KTsKLQotICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHVpbnQ4X3QgdHlwZTsKLSAgICAgICAg
aWYgKCFwYXJzZVVJbnQ3KHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAodHlwZSAhPSAweDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZ0xuKCJHb3QgZnVuY3Rpb24gdHlwZS4iKTsKLQotICAgICAgICB1aW50MzJfdCBhcmd1bWVu
dENvdW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJhcmd1bWVudENvdW50OiAiLCBhcmd1bWVudENvdW50KTsKLQotICAgICAg
ICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLSAgICAgICAgYXJndW1lbnRUeXBlcy5yZXNp
emUoYXJndW1lbnRDb3VudCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFy
Z3VtZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8
ICFpc1ZhbHVlVHlwZShzdGF0aWNfY2FzdDxUeXBlPih0eXBlKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19jYXN0
PFR5cGU+KHR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHR5
cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7
Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7Ci0K
LSAgICAgICAgaWYgKHR5cGUpIHsKLSAgICAgICAgICAgIFR5cGUgdmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOwotCi0g
ICAgICAgIG1fc2lnbmF0dXJlc1tpXSA9IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5
cGVzKSB9OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCkKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
bV9mdW5jdGlvbnMucmVzaXplKGNvdW50KTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7Ci0gICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIodHlwZU51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgaWYgKHR5cGVOdW1iZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2Z1bmN0aW9uc1tpXS5zaWduYXR1cmUg
PSAmbV9zaWduYXR1cmVzW3R5cGVOdW1iZXJdOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNvdW50ICE9IG1fZnVuY3Rpb25zLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwotICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1fZnVuY3Rpb25zW2ldOwot
ICAgICAgICBpbmZvLnN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIGluZm8uZW5kID0gbV9vZmZz
ZXQgKyBmdW5jdGlvblNpemU7Ci0gICAgICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZTRk
MTBhZGY2MDM0NzczODc3YzFlZjBhYmQ2MWM0ZmEyNDY0ZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU1vZHVsZVBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotI2luY2x1ZGUg
IldBU01PcHMuaCIKLSNpbmNsdWRlICJXQVNNUGFyc2VyLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1jbGFzcyBNb2R1bGVQ
YXJzZXIgOiBwdWJsaWMgUGFyc2VyIHsKLXB1YmxpYzoKLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYWdpY051bWJlciA9IDB4YzsKLQotICAgIE1vZHVsZVBhcnNlcihjb25zdCBWZWN0b3I8
dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKLSAgICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCAw
LCBzb3VyY2VCdWZmZXIuc2l6ZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZSgpOwotCi0gICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRp
b24+JiBmdW5jdGlvbkluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnk7
IH0KLQotcHJpdmF0ZToKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeSgp
OwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25UeXBlcygpOwotICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCk7Ci0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCk7Ci0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odWludDMyX3Qg
bnVtYmVyKTsKLQotICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9uczsK
LSAgICBWZWN0b3I8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PE1lbW9yeT4gbV9tZW1vcnk7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V0FTTQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTU9wcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9w
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmY3Mjg5NGI1ZjhiYmIyMGY4Yjhl
MDE3N2QxMjhkYzc3MWFiYzY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIHVzaW5nIHdhc20uanNv
bi4KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRl
IDxjc3RkaW50PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi0jZGVmaW5l
IEZPUl9FQUNIX1dBU01fU1BFQ0lBTF9PUChtYWNybykgXAotICAgIG1hY3JvKEkzMkNvbnN0LCAw
eDEwLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0Q29uc3QsIDB4MTEsIE9vcHMpIFwKLSAgICBtYWNy
byhGNjRDb25zdCwgMHgxMiwgT29wcykgXAotICAgIG1hY3JvKEYzMkNvbnN0LCAweDEzLCBPb3Bz
KSBcCi0gICAgbWFjcm8oR2V0TG9jYWwsIDB4MTQsIE9vcHMpIFwKLSAgICBtYWNybyhTZXRMb2Nh
bCwgMHgxNSwgT29wcykgXAotICAgIG1hY3JvKFRlZUxvY2FsLCAweDE5LCBPb3BzKSBcCi0gICAg
bWFjcm8oR2V0R2xvYmFsLCAweGJiLCBPb3BzKSBcCi0gICAgbWFjcm8oU2V0R2xvYmFsLCAweGJj
LCBPb3BzKSBcCi0gICAgbWFjcm8oQ2FsbCwgMHgxNiwgT29wcykgXAotICAgIG1hY3JvKENhbGxJ
bmRpcmVjdCwgMHgxNywgT29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxP
V19PUChtYWNybykgXAotICAgIG1hY3JvKFVucmVhY2hhYmxlLCAweDAsIE9vcHMpIFwKLSAgICBt
YWNybyhCbG9jaywgMHgxLCBPb3BzKSBcCi0gICAgbWFjcm8oTG9vcCwgMHgyLCBPb3BzKSBcCi0g
ICAgbWFjcm8oSWYsIDB4MywgT29wcykgXAotICAgIG1hY3JvKEVsc2UsIDB4NCwgT29wcykgXAot
ICAgIG1hY3JvKFNlbGVjdCwgMHg1LCBPb3BzKSBcCi0gICAgbWFjcm8oQnIsIDB4NiwgT29wcykg
XAotICAgIG1hY3JvKEJySWYsIDB4NywgT29wcykgXAotICAgIG1hY3JvKEJyVGFibGUsIDB4OCwg
T29wcykgXAotICAgIG1hY3JvKFJldHVybiwgMHg5LCBPb3BzKSBcCi0gICAgbWFjcm8oRHJvcCwg
MHhiLCBPb3BzKSBcCi0gICAgbWFjcm8oTm9wLCAweGEsIE9vcHMpIFwKLSAgICBtYWNybyhFbmQs
IDB4ZiwgT29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKG1hY3JvKSBcCi0g
ICAgbWFjcm8oSTMyQ2x6LCAweDU3LCBDbHopIFwKLSAgICBtYWNybyhJMzJDdHosIDB4NTgsIE9v
cHMpIFwKLSAgICBtYWNybyhJMzJQb3BjbnQsIDB4NTksIE9vcHMpIFwKLSAgICBtYWNybyhJNjRD
bHosIDB4NzIsIENseikgXAotICAgIG1hY3JvKEk2NEN0eiwgMHg3MywgT29wcykgXAotICAgIG1h
Y3JvKEk2NFBvcGNudCwgMHg3NCwgT29wcykgXAotICAgIG1hY3JvKEYzMkFicywgMHg3YiwgT29w
cykgXAotICAgIG1hY3JvKEYzMk5lZywgMHg3YywgT29wcykgXAotICAgIG1hY3JvKEYzMkNvcHlz
aWduLCAweDdkLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyQ2VpbCwgMHg3ZSwgT29wcykgXAotICAg
IG1hY3JvKEYzMkZsb29yLCAweDdmLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyVHJ1bmMsIDB4ODAs
IE9vcHMpIFwKLSAgICBtYWNybyhGMzJOZWFyZXN0LCAweDgxLCBPb3BzKSBcCi0gICAgbWFjcm8o
RjMyU3FydCwgMHg4MiwgT29wcykgXAotICAgIG1hY3JvKEY2NEFicywgMHg4ZiwgT29wcykgXAot
ICAgIG1hY3JvKEY2NE5lZywgMHg5MCwgT29wcykgXAotICAgIG1hY3JvKEY2NENvcHlzaWduLCAw
eDkxLCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0Q2VpbCwgMHg5MiwgT29wcykgXAotICAgIG1hY3Jv
KEY2NEZsb29yLCAweDkzLCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0VHJ1bmMsIDB4OTQsIE9vcHMp
IFwKLSAgICBtYWNybyhGNjROZWFyZXN0LCAweDk1LCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0U3Fy
dCwgMHg5NiwgT29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNybykg
XAotICAgIG1hY3JvKEkzMkFkZCwgMHg0MCwgQWRkKSBcCi0gICAgbWFjcm8oSTMyU3ViLCAweDQx
LCBTdWIpIFwKLSAgICBtYWNybyhJMzJNdWwsIDB4NDIsIE11bCkgXAotICAgIG1hY3JvKEkzMkRp
dlMsIDB4NDMsIERpdikgXAotICAgIG1hY3JvKEkzMkRpdlUsIDB4NDQsIE9vcHMpIFwKLSAgICBt
YWNybyhJMzJSZW1TLCAweDQ1LCBNb2QpIFwKLSAgICBtYWNybyhJMzJSZW1VLCAweDQ2LCBPb3Bz
KSBcCi0gICAgbWFjcm8oSTMyQW5kLCAweDQ3LCBCaXRBbmQpIFwKLSAgICBtYWNybyhJMzJPciwg
MHg0OCwgQml0T3IpIFwKLSAgICBtYWNybyhJMzJYb3IsIDB4NDksIEJpdFhvcikgXAotICAgIG1h
Y3JvKEkzMlNobCwgMHg0YSwgU2hsKSBcCi0gICAgbWFjcm8oSTMyU2hyVSwgMHg0YiwgU1Nocikg
XAotICAgIG1hY3JvKEkzMlNoclMsIDB4NGMsIFpTaHIpIFwKLSAgICBtYWNybyhJMzJSb3RyLCAw
eGI2LCBPb3BzKSBcCi0gICAgbWFjcm8oSTMyUm90bCwgMHhiNywgT29wcykgXAotICAgIG1hY3Jv
KEkzMkVxLCAweDRkLCBFcXVhbCkgXAotICAgIG1hY3JvKEkzMk5lLCAweDRlLCBOb3RFcXVhbCkg
XAotICAgIG1hY3JvKEkzMkx0UywgMHg0ZiwgTGVzc1RoYW4pIFwKLSAgICBtYWNybyhJMzJMZVMs
IDB4NTAsIExlc3NFcXVhbCkgXAotICAgIG1hY3JvKEkzMkx0VSwgMHg1MSwgQmVsb3cpIFwKLSAg
ICBtYWNybyhJMzJMZVUsIDB4NTIsIEJlbG93RXF1YWwpIFwKLSAgICBtYWNybyhJMzJHdFMsIDB4
NTMsIEdyZWF0ZXJUaGFuKSBcCi0gICAgbWFjcm8oSTMyR2VTLCAweDU0LCBHcmVhdGVyRXF1YWwp
IFwKLSAgICBtYWNybyhJMzJHdFUsIDB4NTUsIEFib3ZlKSBcCi0gICAgbWFjcm8oSTMyR2VVLCAw
eDU2LCBBYm92ZUVxdWFsKSBcCi0gICAgbWFjcm8oSTY0QWRkLCAweDViLCBBZGQpIFwKLSAgICBt
YWNybyhJNjRTdWIsIDB4NWMsIFN1YikgXAotICAgIG1hY3JvKEk2NE11bCwgMHg1ZCwgTXVsKSBc
Ci0gICAgbWFjcm8oSTY0RGl2UywgMHg1ZSwgRGl2KSBcCi0gICAgbWFjcm8oSTY0RGl2VSwgMHg1
ZiwgT29wcykgXAotICAgIG1hY3JvKEk2NFJlbVMsIDB4NjAsIE1vZCkgXAotICAgIG1hY3JvKEk2
NFJlbVUsIDB4NjEsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRBbmQsIDB4NjIsIEJpdEFuZCkgXAot
ICAgIG1hY3JvKEk2NE9yLCAweDYzLCBCaXRPcikgXAotICAgIG1hY3JvKEk2NFhvciwgMHg2NCwg
Qml0WG9yKSBcCi0gICAgbWFjcm8oSTY0U2hsLCAweDY1LCBTaGwpIFwKLSAgICBtYWNybyhJNjRT
aHJVLCAweDY2LCBTU2hyKSBcCi0gICAgbWFjcm8oSTY0U2hyUywgMHg2NywgWlNocikgXAotICAg
IG1hY3JvKEk2NFJvdHIsIDB4YjgsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRSb3RsLCAweGI5LCBP
b3BzKSBcCi0gICAgbWFjcm8oSTY0RXEsIDB4NjgsIEVxdWFsKSBcCi0gICAgbWFjcm8oSTY0TmUs
IDB4NjksIE5vdEVxdWFsKSBcCi0gICAgbWFjcm8oSTY0THRTLCAweDZhLCBMZXNzVGhhbikgXAot
ICAgIG1hY3JvKEk2NExlUywgMHg2YiwgTGVzc0VxdWFsKSBcCi0gICAgbWFjcm8oSTY0THRVLCAw
eDZjLCBCZWxvdykgXAotICAgIG1hY3JvKEk2NExlVSwgMHg2ZCwgQmVsb3dFcXVhbCkgXAotICAg
IG1hY3JvKEk2NEd0UywgMHg2ZSwgR3JlYXRlclRoYW4pIFwKLSAgICBtYWNybyhJNjRHZVMsIDB4
NmYsIEdyZWF0ZXJFcXVhbCkgXAotICAgIG1hY3JvKEk2NEd0VSwgMHg3MCwgQWJvdmUpIFwKLSAg
ICBtYWNybyhJNjRHZVUsIDB4NzEsIEFib3ZlRXF1YWwpIFwKLSAgICBtYWNybyhGMzJBZGQsIDB4
NzUsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJTdWIsIDB4NzYsIE9vcHMpIFwKLSAgICBtYWNybyhG
MzJNdWwsIDB4NzcsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJEaXYsIDB4NzgsIE9vcHMpIFwKLSAg
ICBtYWNybyhGMzJNaW4sIDB4NzksIE9vcHMpIFwKLSAgICBtYWNybyhGMzJNYXgsIDB4N2EsIE9v
cHMpIFwKLSAgICBtYWNybyhGMzJFcSwgMHg4MywgT29wcykgXAotICAgIG1hY3JvKEYzMk5lLCAw
eDg0LCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyTHQsIDB4ODUsIE9vcHMpIFwKLSAgICBtYWNybyhG
MzJMZSwgMHg4NiwgT29wcykgXAotICAgIG1hY3JvKEYzMkd0LCAweDg3LCBPb3BzKSBcCi0gICAg
bWFjcm8oRjMyR2UsIDB4ODgsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRBZGQsIDB4ODksIE9vcHMp
IFwKLSAgICBtYWNybyhGNjRTdWIsIDB4OGEsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRNdWwsIDB4
OGIsIE9vcHMpIFwKLSAgICBtYWNybyhGNjREaXYsIDB4OGMsIE9vcHMpIFwKLSAgICBtYWNybyhG
NjRNaW4sIDB4OGQsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRNYXgsIDB4OGUsIE9vcHMpIFwKLSAg
ICBtYWNybyhGNjRFcSwgMHg5NywgT29wcykgXAotICAgIG1hY3JvKEY2NE5lLCAweDk4LCBPb3Bz
KSBcCi0gICAgbWFjcm8oRjY0THQsIDB4OTksIE9vcHMpIFwKLSAgICBtYWNybyhGNjRMZSwgMHg5
YSwgT29wcykgXAotICAgIG1hY3JvKEY2NEd0LCAweDliLCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0
R2UsIDB4OWMsIE9vcHMpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9PUCht
YWNybykgXAotICAgIG1hY3JvKEkzMkxvYWQ4UywgMHgyMCwgT29wcykgXAotICAgIG1hY3JvKEkz
MkxvYWQ4VSwgMHgyMSwgT29wcykgXAotICAgIG1hY3JvKEkzMkxvYWQxNlMsIDB4MjIsIE9vcHMp
IFwKLSAgICBtYWNybyhJMzJMb2FkMTZVLCAweDIzLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0TG9h
ZDhTLCAweDI0LCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0TG9hZDhVLCAweDI1LCBPb3BzKSBcCi0g
ICAgbWFjcm8oSTY0TG9hZDE2UywgMHgyNiwgT29wcykgXAotICAgIG1hY3JvKEk2NExvYWQxNlUs
IDB4MjcsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRMb2FkMzJTLCAweDI4LCBPb3BzKSBcCi0gICAg
bWFjcm8oSTY0TG9hZDMyVSwgMHgyOSwgT29wcykgXAotICAgIG1hY3JvKEkzMkxvYWQsIDB4MmEs
IE9vcHMpIFwKLSAgICBtYWNybyhJNjRMb2FkLCAweDJiLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMy
TG9hZCwgMHgyYywgT29wcykgXAotICAgIG1hY3JvKEY2NExvYWQsIDB4MmQsIE9vcHMpCi0KLSNk
ZWZpbmUgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AobWFjcm8pIFwKLSAgICBtYWNybyhJ
MzJTdG9yZTgsIDB4MmUsIE9vcHMpIFwKLSAgICBtYWNybyhJMzJTdG9yZTE2LCAweDJmLCBPb3Bz
KSBcCi0gICAgbWFjcm8oSTY0U3RvcmU4LCAweDMwLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0U3Rv
cmUxNiwgMHgzMSwgT29wcykgXAotICAgIG1hY3JvKEk2NFN0b3JlMzIsIDB4MzIsIE9vcHMpIFwK
LSAgICBtYWNybyhJMzJTdG9yZSwgMHgzMywgT29wcykgXAotICAgIG1hY3JvKEk2NFN0b3JlLCAw
eDM0LCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyU3RvcmUsIDB4MzUsIE9vcHMpIFwKLSAgICBtYWNy
byhGNjRTdG9yZSwgMHgzNiwgT29wcykKLQotCi0KLSNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9PUCht
YWNybykgXAotICAgIEZPUl9FQUNIX1dBU01fU1BFQ0lBTF9PUChtYWNybykgXAotICAgIEZPUl9F
QUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKG1hY3JvKSBcCi0gICAgRk9SX0VBQ0hfV0FTTV9VTkFS
WV9PUChtYWNybykgXAotICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKG1hY3JvKSBcCi0gICAg
Rk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9PUChtYWNybykgXAotICAgIEZPUl9FQUNIX1dBU01f
TUVNT1JZX1NUT1JFX09QKG1hY3JvKQotCi0jZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUs
IGlkLCBiM29wKSBuYW1lID0gaWQsCi0KLWVudW0gT3BUeXBlIDogdWludDhfdCB7Ci0gICAgRk9S
X0VBQ0hfV0FTTV9PUChDUkVBVEVfRU5VTV9WQUxVRSkKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEludD4KLWlubGluZSBib29sIGlzVmFsaWRPcFR5cGUoSW50IGkpCi17Ci0gICAgLy8gQml0c2V0
IG9mIHZhbGlkIG9wcy4KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCB2YWxpZFtdID0geyAweGZm
LCAweDhmLCAweGZmLCAweDIsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4YSwgMHhmZiwgMHhmZiwgMHhm
ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwg
MHhmZiwgMHhmZiwgMHhmZiwgMHgxZiB9OwotICAgIHJldHVybiAwIDw9IGkgJiYgaSA8PSAxODgg
JiYgKHZhbGlkW2kgLyA4XSAmICgxIDw8IChpICUgOCkpKTsKLX0KLQotZW51bSBjbGFzcyBCaW5h
cnlPcFR5cGUgOiB1aW50OF90IHsKLSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVf
RU5VTV9WQUxVRSkKLX07Ci0KLWVudW0gY2xhc3MgVW5hcnlPcFR5cGUgOiB1aW50OF90IHsKLSAg
ICBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKENSRUFURV9FTlVNX1ZBTFVFKQotfTsKLQotZW51bSBj
bGFzcyBMb2FkT3BUeXBlIDogdWludDhfdCB7Ci0gICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9B
RF9PUChDUkVBVEVfRU5VTV9WQUxVRSkKLX07Ci0KLWVudW0gY2xhc3MgU3RvcmVPcFR5cGUgOiB1
aW50OF90IHsKLSAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfRU5VTV9W
QUxVRSkKLX07Ci0KLSN1bmRlZiBDUkVBVEVfRU5VTV9WQUxVRQotCi1pbmxpbmUgYm9vbCBpc0Nv
bnRyb2xPcChPcFR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVf
Q0FTRShuYW1lLCBpZCwgYjNvcCkgY2FzZSBPcFR5cGU6Om5hbWU6Ci0gICAgRk9SX0VBQ0hfV0FT
TV9DT05UUk9MX0ZMT1dfT1AoQ1JFQVRFX0NBU0UpCi0gICAgICAgIHJldHVybiB0cnVlOwotI3Vu
ZGVmIENSRUFURV9DQVNFCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBh
cnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjc5MTg2ZjVlZDdhNTlhOTZk
NjAyM2U1NWFjMDRjMGY1ZmVjMjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci0KLSNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIK
LSNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCi0jaW5jbHVkZSAiV0FTTU9wcy5oIgotI2luY2x1ZGUg
IldBU01TZWN0aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9MRUJEZWNvZGVyLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci0KLWNsYXNzIFBhcnNlciB7Ci1wcm90ZWN0ZWQ6Ci0g
ICAgUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVu
ZCk7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1lQ2hhcmFjdGVyKGNoYXIp
OwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciop
OwotCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90JiBy
ZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDcodWludDhfdCYg
cmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1aW50MzJf
dCYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1
aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMiht
X3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQotICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQp
IHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLmRhdGEoKSwg
bV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9Ci0KLQotICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCk7Ci0KLSAgICBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIG1fc291cmNlOwotICAgIHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKLSAg
ICBzaXplX3QgbV9vZmZzZXQ7Ci19OwotCi1BTFdBWVNfSU5MSU5FIFBhcnNlcjo6UGFyc2VyKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBl
bmQpCi0gICAgOiBtX3NvdXJjZShzb3VyY2VCdWZmZXIpCi0gICAgLCBtX3NvdXJjZUxlbmd0aChl
bmQpCi0gICAgLCBtX29mZnNldChzdGFydCkKLXsKLSAgICBBU1NFUlQoZW5kIDw9IHNvdXJjZUJ1
ZmZlci5zaXplKCkpOwotICAgIEFTU0VSVChzdGFydCA8IGVuZCk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIoY2hhciBjKQotewotICAgIGlmIChtX29m
ZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChj
ID09IG1fc291cmNlW21fb2Zmc2V0XSkgewotICAgICAgICBtX29mZnNldCsrOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1BTFdBWVNfSU5MSU5F
IGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICB1bnNp
Z25lZCBzdGFydCA9IG1fb2Zmc2V0OwotICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHN0cltp
XTsgaSsrKSB7Ci0gICAgICAgIGlmICghY29uc3VtZUNoYXJhY3RlcihzdHJbaV0pKSB7Ci0gICAg
ICAgICAgICBtX29mZnNldCA9IHN0YXJ0OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wg
UGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQotewotICAgIGlmIChtX3NvdXJj
ZUxlbmd0aCA8IDQgfHwgbV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGggLSA0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMy
X3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7Ci0gICAgbV9vZmZzZXQgKz0gNDsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50
Nyh1aW50OF90JiByZXN1bHQpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gbV9zb3VyY2VbbV9vZmZzZXQr
K107Ci0gICAgcmV0dXJuIHJlc3VsdCA8IDB4ODA7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI6OnBhcnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0KQotewotICAgIHVpbnQzMl90IHRl
bXA7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMih0ZW1wKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRlbXApOwotICAgIHJldHVybiB0
ZW1wIDw9IDE7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVUeXBl
KFR5cGUmIHJlc3VsdCkKLXsKLSAgICB1aW50OF90IHZhbHVlOwotICAgIGlmICghcGFyc2VVSW50
Nyh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgPj0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVHlwZTo6TGFzdFZhbHVlVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMjk4ZmY1NTExZmM1ZjdjYjA1YzdjM2NkODI1YjYy
MzY0MWM0OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXQVNNUGxhbi5oIgotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUg
IldBU01CM0lSR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiV0FTTUNhbGxpbmdDb252ZW50aW9uLmgi
Ci0jaW5jbHVkZSAiV0FTTU1vZHVsZVBhcnNlci5oIgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci0KLXN0YXRpYyBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKLQotUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiBz
b3VyY2UpCi17Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiU3RhcnRpbmcg
cGxhbi4iKTsKLSAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSk7Ci0gICAgaWYg
KCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgewotICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9k
dWxlIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nTG4oIlBhcnNlZCBtb2R1bGUuIik7Ci0KLSAgICBmb3IgKGNvbnN0
IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8gOiBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1h
dGlvbigpKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJQ
cm9jZXNzaW5nIGZ1bmNpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIgYW5kIGVuZGlu
ZyBhdDogIiwgaW5mby5lbmQpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBhcnNlQW5kQ29tcGls
ZSh2bSwgc291cmNlLCBtb2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCksIGluZm8sIG1vZHVsZVBh
cnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBQYXRjaCB0aGUg
Y2FsbCBzaXRlcyBmb3IgZWFjaCBmdW5jdGlvbi4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvbXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIgOiByZXN1bHQpIHsKLSAgICAgICAgRnVu
Y3Rpb25Db21waWxhdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblB0ci5nZXQoKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogZnVuY3Rpb24tPnVubGlua2VkQ2FsbHMpCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHJlc3VsdFtjYWxsLmZ1bmN0aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsKLSAgICB9
Ci0KLSAgICBtZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7Ci19Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjg0NWVlMTQ4OTc4Zjk2MDEwNzY5MDY0MGE1ZDEwYjZmYzdmMzU1NS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNUGxhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQu
aCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKLSNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci1jbGFzcyBNZW1vcnk7Ci0KLS8vIFRPRE86
IFRoaXMgc2hvdWxkIGNyZWF0ZSBhIFdBU00gTW9kdWxlIG5vdCBhIGxpc3Qgb2YgZnVuY3Rpb25z
LgotY2xhc3MgUGxhbiB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYs
IFZlY3Rvcjx1aW50OF90PiBzb3VyY2UpOwotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvbXBpbGF0aW9uPj4gcmVzdWx0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+
IG1lbW9yeTsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNU2VjdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9u
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2M3MmQ0MWQzYmVlZGNkMTcyMzhh
OGMyMDA0MjMyNzUxM2I0NmU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1zdHJ1Y3QgU2VjdGlvbnMgewot
ICAgIGVudW0gU2VjdGlvbiA6IHVpbnQ4X3QgewotICAgICAgICBGdW5jdGlvblR5cGVzID0gMSwK
LSAgICAgICAgU2lnbmF0dXJlcyA9IDMsCi0gICAgICAgIE1lbW9yeSA9IDUsCi0gICAgICAgIERl
ZmluaXRpb25zID0gMTAsCi0gICAgICAgIFVua25vd24KLSAgICB9OwotICAgIHN0YXRpYyBib29s
IHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQotICAgIHsKLSAg
ICAgICAgaWYgKHByZXZpb3VzID09IFVua25vd24pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKLSAgICB9Ci19OwotCi19IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUzNTlkMzA4OThmMGViNTRkZGMyYWQwNWQ5Y2NlZWRhMmViOTU5ZWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
QEAgLTAsMCArMSw3MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3Iu
aCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lu
bGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZpeFNT
QS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNW
YXJpYWJsZS5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2Fz
bUFkZHJlc3NWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKKyNp
bmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK3ZvaWQgZHVtcFByb2NlZHVyZSh2
b2lkKiBwdHIpCit7CisgICAgSlNDOjpCMzo6UHJvY2VkdXJlKiBwcm9jID0gc3RhdGljX2Nhc3Q8
SlNDOjpCMzo6UHJvY2VkdXJlKj4ocHRyKTsKKyAgICBwcm9jLT5kdW1wKFdURjo6ZGF0YUZpbGUo
KSk7Cit9CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK25hbWVzcGFjZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBCMzsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
K2lubGluZSBCMzo6T3Bjb2RlIHRvQjNPcChCaW5hcnlPcFR5cGUgb3ApCit7CisgICAgc3dpdGNo
IChvcCkgeworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBvcCwgYjNvcCkgY2FzZSBCaW5hcnlP
cFR5cGU6Om5hbWU6IHJldHVybiBiM29wOworICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENS
RUFURV9DQVNFKQorI3VuZGVmIENSRUFURV9DQVNFCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBCMzo6T3Bjb2RlIHRvQjNPcChVbmFyeU9wVHlw
ZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIG9w
LCBiM29wKSBjYXNlIFVuYXJ5T3BUeXBlOjpuYW1lOiByZXR1cm4gYjNvcDsKKyAgICBGT1JfRUFD
SF9XQVNNX1VOQVJZX09QKENSRUFURV9DQVNFKQorI3VuZGVmIENSRUFURV9DQVNFCisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIEIzSVJHZW5lcmF0
b3IgeworcHJpdmF0ZToKKyAgICBjbGFzcyBMYXp5QmxvY2sgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgTGF6eUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJs
b2NrKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX2Jsb2NrOyB9CisKKyAgICAgICAgQmFzaWNCbG9jayog
Z2V0KFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2Jsb2Nr
KQorICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9ibG9jazsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9ibG9jaykKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoKm1fYmxvY2spOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiVW5pbml0aWFsaXplZCIpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAg
IH07CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9s
RGF0YShQcm9jZWR1cmUmIHByb2MsIFR5cGUgc2lnbmF0dXJlLCBCYXNpY0Jsb2NrKiBzcGVjaWFs
ID0gbnVsbHB0ciwgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbnVsbHB0cikKKyAgICAgICAg
ICAgIDogY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChz
cGVjaWFsKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlICE9IFZvaWQpCisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcm9jLmFkZFZhcmlhYmxlKHRvQjNUeXBlKHNp
Z25hdHVyZSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgi
SWY6ICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6Okxvb3A6Cisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjog
IiwgY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFs
KQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3BlY2lhbCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25lIik7CisgICAgICAgIH0KKworICAgICAg
ICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghc3Bl
Y2lhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpCbG9jazsKKyAgICAgICAg
ICAgIGlmIChjb250aW51YXRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIEJsb2NrVHlwZTo6
SWY7CisgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpMb29wOworICAgICAgICB9CisKKyAg
ICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goUHJvY2VkdXJlJiBwcm9jKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAgIHJldHVybiBjb250aW51
YXRpb24uZ2V0KHByb2MpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmll
bmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKKyAgICAgICAgLy8gV2UgdXNlIGEgTGF6eUJsb2NrIGZv
ciB0aGUgY29udGludWF0aW9uIHNpbmNlIEIzOjp2YWxpZGF0ZSBkb2VzIG5vdCBsaWtlIG9ycGhh
bmVkIGJsb2Nrcy4gTm90ZSwKKyAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYW4g
b3JwaGFuZWQgYmxvY2sgYnkgZG9pbmcgc29tZXRoaW5nIGxpa2UgKGJsb2NrIChyZXR1cm4gKC4u
LikpKS4gSW4KKyAgICAgICAgLy8gdGhhdCBleGFtcGxlLCBpZiB3ZSBlYWdlcmx5IGFsbG9jYXRl
IGEgQmFzaWNCbG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBpdCB3aWxsIG5ldmVyIGJlIHJlYWNo
YWJsZS4KKyAgICAgICAgTGF6eUJsb2NrIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNCbG9j
ayogc3BlY2lhbDsKKyAgICAgICAgVmVjdG9yPFZhcmlhYmxlKiwgMT4gcmVzdWx0OworICAgIH07
CisKKyAgICB0eXBlZGVmIFZhbHVlKiBFeHByZXNzaW9uVHlwZTsKKyAgICB0eXBlZGVmIENvbnRy
b2xEYXRhIENvbnRyb2xUeXBlOworICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAx
PiBFeHByZXNzaW9uTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZSosIDE+IFJlc3Vs
dExpc3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Np
b24gPSBudWxscHRyOworCisgICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBW
ZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscyk7CisKKyAgICB2b2lkIGFkZEFyZ3Vt
ZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKKyAgICB2b2lkIGFkZExvY2FsKFR5cGUsIHVpbnQz
Ml90KTsKKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CisK
KyAgICAvLyBMb2NhbHMKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsK
KworICAgIC8vIE1lbW9yeQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9w
VHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWlu
dDMyX3Qgb2Zmc2V0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9w
VHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQz
Ml90IG9mZnNldCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBiaW5hcnlPcChCaW5hcnlPcFR5cGUsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiB1bmFyeU9wKFVuYXJ5T3BUeXBlLCBFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAgQ29u
dHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsKKyAg
ICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7
CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2UoQ29udHJvbERhdGEmKTsKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjayk7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
KHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICBi
b29sIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICB2b2lkIGR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKworcHJpdmF0ZToKKyAgICBFeHByZXNzaW9uVHlw
ZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0
TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBPcmlnaW4sIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZz
ZXQpOworCisgICAgdm9pZCB1bmlmeShWYXJpYWJsZSogdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9u
VHlwZSBzb3VyY2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVz
c2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBSZXN1bHRMaXN0JiBzdGFjayk7CisKKyAgICBNZW1vcnkq
IG1fbWVtb3J5OworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIEJhc2ljQmxvY2sqIG1fY3Vy
cmVudEJsb2NrOworICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOworICAgIC8vIG1fdW5s
aWtlZENhbGxzIGlzIGxpc3Qgb2YgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRl
eCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9yPFVu
bGlua2VkQ2FsbD4mIG1fdW5saW5rZWRDYWxsczsKKyAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BS
OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFI7Cit9OworCitCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVu
bGlua2VkQ2FsbD4mIHVubGlua2VkQ2FsbHMpCisgICAgOiBtX21lbW9yeShtZW1vcnkpCisgICAg
LCBtX3Byb2MocHJvY2VkdXJlKQorICAgICwgbV91bmxpbmtlZENhbGxzKHVubGlua2VkQ2FsbHMp
Cit7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKworICAgIGlmICht
X21lbW9yeSkgeworICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21lbW9yeS0+cGlubmVkUmVn
aXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rlciht
X21lbW9yeUJhc2VHUFIpOworICAgICAgICBBU1NFUlQoIW1fbWVtb3J5LT5waW5uZWRSZWdpc3Rl
cnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNpemVH
UFIgPSBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVn
aXN0ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgaW5mbyA6
IG1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQorICAgICAgICAgICAg
bV9wcm9jLnBpblJlZ2lzdGVyKGluZm8uc2l6ZVJlZ2lzdGVyKTsKKworICAgICAgICBtX3Byb2Mu
c2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5l
ZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgdW53aW5kIHRoZSBzdGFjayBhbmQgdGhyb3cgYSBKUyBleGNlcHRpb24u
IFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM1MQorICAg
ICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lk
IEIzSVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpCit7Cisg
ICAgbV9sb2NhbHMucmVzZXJ2ZUNhcGFjaXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50KTsKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgbV9sb2NhbHMu
YXBwZW5kKG1fcHJvYy5hZGRWYXJpYWJsZSh0b0IzVHlwZSh0eXBlKSkpOworfQorCit2b2lkIEIz
SVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKQorewor
ICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBtX2xvY2Fscy5ncm93KHR5cGVzLnNp
emUoKSk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyh0eXBlcywg
bV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCksCisgICAgICAgIFsmXSAoRXhwcmVzc2lv
blR5cGUgYXJndW1lbnQsIHVuc2lnbmVkIGkpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlKiBhcmd1
bWVudFZhcmlhYmxlID0gbV9wcm9jLmFkZFZhcmlhYmxlKGFyZ3VtZW50LT50eXBlKCkpOworICAg
ICAgICAgICAgbV9sb2NhbHNbaV0gPSBhcmd1bWVudFZhcmlhYmxlOworICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2lu
KCksIGFyZ3VtZW50VmFyaWFibGUsIGFyZ3VtZW50KTsKKyAgICAgICAgfSk7Cit9CisKK2Jvb2wg
QjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpCit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIE9y
aWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIz
SVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgT3JpZ2luKCksIG1fbG9j
YWxzW2luZGV4XSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgVmFsdWUq
IEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQorewor
ICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIgJiYgbV9tZW1vcnlTaXplR1BSKTsKKyAgICBBU1NF
UlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2lu
dGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAg
IHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQz
MiwgT3JpZ2luKCksIHBvaW50ZXIpOworICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5
QmFzZUdQUik7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBv
cCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJldHVy
biAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQxNlM6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkMzJVOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQ6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpGMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBPcmln
aW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCit7Cisg
ICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4sIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4sIHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsKKyAgICAg
ICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4s
IHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKyAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBv
aW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50
ZXIpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVTogeworICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIpOworICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFs
dWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIpOworICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFs
dWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDogeworICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBJbnQ2NCwgb3JpZ2luLCBwb2ludGVyKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6
OkYzMkxvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlcik7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIERvdWJsZSwgb3Jp
Z2luLCBwb2ludGVyKTsKKyAgICB9CisKKyAgICAvLyBCMyBkb2Vzbid0IHN1cHBvcnQgTG9hZDE2
WiB5ZXQuCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1
aW50MzJfdCBvZmZzZXQpCit7CisgICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7
CisKKyAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBPcmlnaW4oKSwgZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3Rv
cmVPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6
OkkzMlN0b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHJl
dHVybiAxOworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6Cisg
ICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCisKK2lubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BU
eXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7CisgICAg
ICAgIEZBTExUSFJPVUdIOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3Jl
OCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4sIHZhbHVlKTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2
OgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IFN0b3JlMTYsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgICAgIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2
YWx1ZSk7CisgICAgICAgIEZBTExUSFJPVUdIOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6RjMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9y
aWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9y
OjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBBU1NFUlQocG9pbnRlci0+dHlw
ZSgpID09IEludDMyKTsKKworICAgIGVtaXRTdG9yZU9wKG9wLCBPcmlnaW4oKSwgZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZh
bHVlLCBvZmZzZXQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIzSVJHZW5lcmF0b3I6
OnVuYXJ5T3AoVW5hcnlPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIHRvQjNPcChvcCksIE9yaWdpbigpLCBhcmcpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEIzSVJHZW5lcmF0b3I6OmJpbmFyeU9wKEJpbmFyeU9wVHlwZSBvcCwgRXhw
cmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCB0b0IzT3Aob3ApLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB0
cnVlOworfQorCitCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4odmFsdWUpKTsKKyAgICBjYXNlIEludDY0OgorICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHZhbHVlKTsKKyAg
ICBjYXNlIEZsb2F0OgorICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxmbG9hdD4oc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSk7CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9y
OjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9w
cm9jLCBzaWduYXR1cmUpOworfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2Vu
ZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2ljQmxvY2sqIGJvZHkg
PSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGJvZHkpOworICAgIGJvZHktPmFkZFByZWRl
Y2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7CisgICAg
cmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBib2R5KTsKK30KKworQjNJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0
byBkbyBzb21lIGtpbmQgb2Ygc3RhY2sgcGFzc2luZy4KKworICAgIEJhc2ljQmxvY2sqIHRha2Vu
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX3Byb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxv
Y2soKTsKKworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6
OkJyYW5jaCwgT3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1
Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2Vu
KSk7CisgICAgdGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICBub3RU
YWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworCisgICAgbV9jdXJyZW50Qmxv
Y2sgPSB0YWtlbjsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIG5v
dFRha2VuLCBjb250aW51YXRpb24pOworfQorCitib29sIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2Uo
Q29udHJvbERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGRhdGEuY29udGludWF0aW9uKTsKKyAg
ICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKKyAgICAvLyBDbGVhciB0aGUgc3BlY2lh
bCBwb2ludGVyIHNvIHRoYXQgd2hlbiB3ZSBwYXJzZSB0aGUgZW5kIHdlIGRvbid0IHRoaW5rIHRo
YXQgdGhpcyBibG9jayBpcyBhbiBpZiBibG9jay4KKyAgICBkYXRhLnNwZWNpYWwgPSBudWxscHRy
OworICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgRXhwcmVz
c2lvbkxpc3QmIHJldHVyblZhbHVlcykKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUo
KSA8PSAxKTsKKyAgICBpZiAocmV0dXJuVmFsdWVzLnNpemUoKSkKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigp
LCByZXR1cm5WYWx1ZXNbMF0pOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERh
dGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IHJldHVyblZhbHVlcykKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJs
b2NrRm9yQnJhbmNoKG1fcHJvYyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFs
dWVzLCBkYXRhLnJlc3VsdCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4oKSwgY29u
ZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRl
ZEJsb2NrKHRhcmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAgICAg
dGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgICAgIGNvbnRpbnVh
dGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBtX2N1cnJlbnRC
bG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50
ZWRCbG9jayh0YXJnZXQpKTsKKyAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJl
bnRCbG9jayk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQjNJUkdlbmVy
YXRvcjo6ZW5kQmxvY2soQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spCit7CisgICAgaWYgKCFkYXRhLmNvbnRpbnVhdGlvbikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBkYXRhLmNvbnRpbnVhdGlv
bi5nZXQobV9wcm9jKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewor
ICAgICAgICBBU1NFUlQoIWRhdGEuc3BlY2lhbC0+c2l6ZSgpICYmICFkYXRhLnNwZWNpYWwtPnN1
Y2Nlc3NvcnMoKS5zaXplKCkpOworICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGFueSBl
bHNlIGJsb2NrIHdlIG5lZWQgdG8gcG9pbnQgdGhlIG5vdFRha2VuIGJyYW5jaCB0byB0aGUgY29u
dGludWF0aW9uLgorICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIE9yaWdpbigpKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNz
b3JzKEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAgICAgY29udGludWF0aW9u
LT5hZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNpYWwpOworICAgIH0KKworICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1bHQpOworICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKKyAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8sIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgQVNTRVJUKGluZm8uc2lnbmF0
dXJlLT5hcmd1bWVudHMuc2l6ZSgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIFR5cGUgcmV0dXJu
VHlwZSA9IGluZm8uc2lnbmF0dXJlLT5yZXR1cm5UeXBlOworCisgICAgc2l6ZV90IGNhbGxJbmRl
eCA9IG1fdW5saW5rZWRDYWxscy5zaXplKCk7CisgICAgbV91bmxpbmtlZENhbGxzLmdyb3coY2Fs
bEluZGV4ICsgMSk7CisgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBD
YWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1
cm5UeXBlKSwKKyAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fdW5saW5rZWRDYWxsc1tjYWxsSW5kZXhdID0geyBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoY2FsbCksIGZ1bmN0aW9uSW5kZXggfTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBCM0lSR2VuZXJhdG9yOjppc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0YSYg
ZGF0YSkKK3sKKyAgICAvLyBJZiBub3RoaW5nIHRhcmdldHMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0
aGUgY3VycmVudCBibG9jayB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCisgICAgLy8gYW4g
b3JwaGFuZWQgQmFzaWNCbG9jayBzaW5jZSBpdCBjYW4ndCBiZSByZWFjaGVkIGJ5IGZhbGx0aHJv
dWdoLgorICAgIGlmICghZGF0YS5jb250aW51YXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7Cisg
ICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgZGF0YS5zcGVj
aWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJy
ZW50QmxvY2spOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5z
cGVjaWFsKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCM0lSR2VuZXJh
dG9yOjp1bmlmeShWYXJpYWJsZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKK3sK
KyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0
LCBPcmlnaW4oKSwgdmFyaWFibGUsIHNvdXJjZSk7Cit9CisKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBS
ZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPj0gcmVzdWx0
U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0U3RhY2su
c2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5KHJlc3VsdFtpXSwgcmVzdWx0U3RhY2tbaV0pOwor
fQorCit2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYg
Y29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorewor
ICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fcHJvYyk7
CisgICAgZGF0YUxvZ0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsK
KyAgICBkYXRhTG9nTG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgZm9yIChjb25zdCBDb250cm9s
VHlwZSYgZGF0YSA6IGNvbnRyb2xTdGFjaykKKyAgICAgICAgZGF0YUxvZ0xuKCIgICIsIGRhdGEp
OworICAgIGRhdGFMb2dMbigiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZvciAoY29uc3QgRXhw
cmVzc2lvblR5cGUmIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFM
b2dMbigiICAiLCAqZXhwcmVzc2lvbik7CisgICAgZGF0YUxvZ0xuKCJcbiIpOworfQorCit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0
aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCit7Cisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAvLyBDaGVjayBhcmd1bWVudCBjb3VudCBpcyBzYW5lLgorICAgIFZhbHVlKiBm
cmFtZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkZyYW1l
UG9pbnRlciwgT3JpZ2luKCkpOworICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQgPSBi
bG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBWYWx1ZSogYXJndW1l
bnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMy
LCBPcmlnaW4oKSwKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBP
cmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKKworICAgIFZh
bHVlKiBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7CisKKyAgICBD
aGVja1ZhbHVlKiBhcmd1bWVudENvdW50Q2hlY2sgPSBibG9jay0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQWJvdmUsIE9yaWdpbigpLCBleHBlY3RlZEFyZ3VtZW50Q291bnQsIGFyZ3VtZW50
Q291bnQpKTsKKyAgICBhcmd1bWVudENvdW50Q2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
aml0LmJyZWFrcG9pbnQoKTsKKyAgICB9KTsKKworICAgIC8vIE1vdmUgbWVtb3J5IHZhbHVlcyB0
byB0aGUgYXBwcm9yaWF0ZSBwbGFjZXMsIGlmIG5lZWRlZC4KKyAgICBWYWx1ZSogYmFzZU1lbW9y
eSA9IG51bGxwdHI7CisgICAgVmVjdG9yPFZhbHVlKj4gc2l6ZXM7CisgICAgaWYgKG1lbW9yeSkg
eworICAgICAgICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgbWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIFZhbHVlKiBzaXplID0g
YmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigp
LAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYml0d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpvZmZzZXRPZlNpemUo
KSkpOworICAgICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5LT5waW5uZWRSZWdpc3Rl
cnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVt
b3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBzaXpl
cy5hcHBlbmQoYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgc2l6
ZSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGluZm8uc2l6ZU9mZnNldCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEdldCBvdXIgYXJndW1lbnRzLgorICAgIFZlY3RvcjxWYWx1ZSo+IGFyZ3VtZW50czsKKyAgICBq
c2NDYWxsaW5nQ29udmVudGlvbigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLT5hcmd1bWVudHMs
IHByb2MsIGJsb2NrLCBPcmlnaW4oKSwgWyZdIChWYWx1ZSogYXJndW1lbnQsIHVuc2lnbmVkKSB7
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOworICAgIH0pOworCisgICAgLy8g
TW92ZSB0aGUgYXJndW1lbnRzIGludG8gcGxhY2UuCisgICAgVmFsdWUqIHJlc3VsdCA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgT3JpZ2luKCksIGFyZ3Vt
ZW50cywgdG9CM1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKSwgWyZdIChQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQpIHsKKyAgICAgICAgaWYgKG1lbW9yeSkgeworICAgICAgICAgICAgQVNT
RVJUKHNpemVzLnNpemUoKSA9PSBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3Rl
cnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZh
bHVlKGJhc2VNZW1vcnksIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5i
YXNlTWVtb3J5UG9pbnRlcikpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
Q29uc3RyYWluZWRWYWx1ZShzaXplc1tpXSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJl
Z2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOworICAgICAgICB9CisK
KyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobWFpbkZ1bmN0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
KworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0LCBpZiBuZWVkZWQuCisgICAgaWYgKHNpZ25hdHVy
ZS0+cmV0dXJuVHlwZSAhPSBWb2lkKQorICAgICAgICBibG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAg
ICAgYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4o
KSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2Mp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21w
aWxlKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIE1lbW9yeSogbWVtb3J5LCBGdW5j
dGlvbkluZm9ybWF0aW9uIGluZm8sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYg
ZnVuY3Rpb25zLCB1bnNpZ25lZCBvcHRMZXZlbCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6
bWFrZV91bmlxdWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKKworICAgIFByb2NlZHVyZSBwcm9j
ZWR1cmU7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlLCByZXN1
bHQtPnVubGlua2VkQ2FsbHMpOworICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBh
cnNlcihjb250ZXh0LCBzb3VyY2UsIGluZm8sIGZ1bmN0aW9ucyk7CisgICAgaWYgKCFwYXJzZXIu
cGFyc2UoKSkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHBy
b2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2NlZHVyZSwgIkFm
dGVyIHBhcnNpbmc6XG4iKTsKKworICAgIGZpeFNTQShwcm9jZWR1cmUpOworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKCJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKKworICAgIHJl
c3VsdC0+Y29kZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jZWR1cmUs
IG9wdExldmVsKTsKKyAgICByZXN1bHQtPmpzRW50cnlQb2ludCA9IGNyZWF0ZUpTV3JhcHBlcih2
bSwgaW5mby5zaWduYXR1cmUsIHJlc3VsdC0+Y29kZS0+Y29kZSgpLCBtZW1vcnkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGQ4NDIwYWZmZTcwMTcxNWFhZDgxNjA1MDU3
Mzc2NjAzOTZmMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiVk0u
aCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK2V4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2Vk
dXJlKHZvaWQqKTsKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3Mg
TWVtb3J5OworCitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRD
b21waWxlKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiwgTWVtb3J5KiwgRnVuY3Rpb25JbmZvcm1hdGlv
biwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiwgdW5zaWduZWQgb3B0TGV2ZWwg
PSAxKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsaW5nQ29udmVudGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNmFjNjcwYTljOGZlYTI2YjA1ZjA4OGU0
YjVhMTIwMDQ4NWZiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0Nh
bGxpbmdDb252ZW50aW9uKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0Nh
bGxpbmdDb252ZW50aW9uPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6
Y2FsbF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAg
ICBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVj
dG9yPFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7
CisKKyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKK2NvbnN0IFdh
c21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkKK3sKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNXYXNtQ2Fs
bGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dhc21DYWxs
aW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV2FzbUNhbGxpbmdD
b252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJl
Z2lzdGVycyhHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7
ICsraSkKKyAgICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVn
aXN0ZXJzKEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsg
KytpKQorICAgICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0Fy
Z3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9u
LmNvbnN0cnVjdChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1
bWVudFJlZ2lzdGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAg
IH0pOworCisgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc0NDJlNzEyYWZiZjdjNzI3NmFiOTVmODQ5YTI5MTc5ZTMzZDljOWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAi
QjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVk
ZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0cmFpbmVkVmFsdWUuaCIKKyNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit0eXBlZGVmIHVuc2lnbmVkICgqTmV4
dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUgdHlwZSk7CisKK3RlbXBs
YXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xhc3Mg
Q2FsbGluZ0NvbnZlbnRpb24geworcHVibGljOgorICAgIENhbGxpbmdDb252ZW50aW9uKFZlY3Rv
cjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNh
bGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKGdwckFyZ3MpCisgICAgICAg
ICwgbV9mcHJBcmdzKGZwckFyZ3MpCisgICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKGNh
bGxlZVNhdmVSZWdpc3RlcnMpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBCMzo6VmFs
dWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoVmVjdG9yPFJlZz4gcmVnQXJncywgQjM6OlR5cGUg
dHlwZSwgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEIz
OjpWYWx1ZVJlcDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOworCisgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgIEIzOjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQo
c3RhY2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09m
ZnNldCwgdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQjM6OlZh
bHVlUmVwIG1hcnNoYWxsQXJndW1lbnQoQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50
Q291bnQsIHNpemVfdCYgZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQjM6OkludDMy
OgorICAgICAgICBjYXNlIEIzOjpJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFy
Z3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQp
OworICAgICAgICBjYXNlIEIzOjpGbG9hdDoKKyAgICAgICAgY2FzZSBCMzo6RG91YmxlOgorICAg
ICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlwZSwgZnBB
cmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVzLCBC
Mzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayogYmxvY2ssIEIzOjpPcmlnaW4gb3Jp
Z2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQjM6OlZh
bHVlKiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6
OkZyYW1lUG9pbnRlciwgb3JpZ2luKTsKKworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50
ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVf
dCBzdGFja09mZnNldCA9IGhlYWRlclNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmd1bWVudFR5cGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBCMzo6VHlwZSB0
eXBlID0gdG9CM1R5cGUoYXJndW1lbnRUeXBlc1tpXSk7CisgICAgICAgICAgICBCMzo6VmFsdWUq
IGFyZ3VtZW50OworICAgICAgICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJndW1l
bnQodHlwZSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsK
KyAgICAgICAgICAgIGlmIChyZXAuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50
ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgb3JpZ2luLCBy
ZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEIzOjpJbnQzMikKKyAgICAg
ICAgICAgICAgICAgICAgYXJndW1lbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJv
YywgQjM6OlRydW5jLCBvcmlnaW4sIGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSG93IGRvIEkgZ2V0IGEgZmxvYXQgZnJvbSBhIEZQUj8gV2UgZG9uJ3Qgc3VwcG9ydCBmbG9h
dGluZyBwb2ludHMgeWV0IHNvIGl0J3Mgbm90IGEgYmlnIGRlYWwuLi4geWV0LgorICAgICAgICAg
ICAgICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
Mzc3MAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVwLmlz
U3RhY2tBcmd1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3MgPSBi
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBv
aW50ZXIsCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRW
YWx1ZT4ocHJvYywgb3JpZ2luLCByZXAub2Zmc2V0RnJvbVNQKCkpKTsKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6
TG9hZCwgdHlwZSwgb3JpZ2luLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZ1bmN0b3IoYXJndW1lbnQsIGkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSXQncyBl
eHBlY3RlZCB0aGF0IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdlbmVyYXRvciBmb3Ig
dGhlIGNhbGwgb3BlcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
QjM6OlZhbHVlKiBzZXR1cENhbGwoQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6OkJhc2ljQmxvY2sq
IGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgVmVjdG9yPEIzOjpWYWx1ZSo+JiBhcmd1
bWVudHMsIEIzOjpUeXBlIHJldHVyblR5cGUsIGNvbnN0IEZ1bmN0b3ImIHBhdGNocG9pbnRGdW5j
dG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7Cisg
ICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3RhY2tP
ZmZzZXQgPSBoZWFkZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAgICAg
IFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRBcmd1bWVudHM7CisgICAg
ICAgIGZvciAoQjM6OlZhbHVlKiBhcmd1bWVudCA6IGFyZ3VtZW50cykgeworICAgICAgICAgICAg
QjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJndW1lbnQoYXJndW1lbnQtPnR5cGUoKSwgZ3BB
cmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAg
IGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShhcmd1bWVu
dCwgcmVwKSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNp
emVJbkJ5dGVzKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCks
IHN0YWNrT2Zmc2V0KSk7CisKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgcmV0dXJuVHlw
ZSwgb3JpZ2luKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0
OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJM
YXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGNvbnN0cmFpbmVkQXJndW1lbnRzKTsKKyAgICAgICAg
cGF0Y2hwb2ludEZ1bmN0b3IocGF0Y2hwb2ludCk7CisKKyAgICAgICAgaWYgKHJldHVyblR5cGUg
PT0gQjM6OlZvaWQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwYXRj
aHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKKyAgICB9CisKKyAgICBj
b25zdCBWZWN0b3I8UmVnPiBtX2dwckFyZ3M7CisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9mcHJB
cmdzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBj
b25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7Cit9OworCitpbmxpbmUgdW5z
aWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSkKK3sK
KyAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNpemVvZihSZWdpc3Rlcik7Cit9CisKK2NvbnN0
ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0YXRlOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwordHlwZWRlZiBDYWxsaW5nQ29udmVudGlvbjxqc2NI
ZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5nQ29udmVudGlvbjsKKwordHlwZWRl
ZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0NvbnZlbnRpb247CisKK2NvbnN0IEpT
Q0NhbGxpbmdDb252ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlvbigpOworY29uc3QgV2FzbUNh
bGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWI1YjFhZGQ5NzI4ODc3
NTg1ZjVkZWI3ZWRlZmNjYTBhMjNiYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoK
KyAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0aGUgcmVwb3NpdG9yeSBhdXRob3JzIG9mCisgKiBX
ZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUtMS4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAg
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisg
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNp
bmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU0Z1bmN0aW9uOworCituYW1lc3BhY2UgV2FzbSB7CisKK2VudW0g
VHlwZSA6IHVpbnQ4X3QgeworICAgIFZvaWQsCisgICAgSTMyLAorICAgIEk2NCwKKyAgICBGMzIs
CisgICAgRjY0LAorICAgIExhc3RWYWx1ZVR5cGUgPSBGNjQsCit9OworCitzdGF0aWNfYXNzZXJ0
KEkzMiA9PSAxLCAiV2FzbSBuZWVkcyBJMzIgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOworc3RhdGlj
X2Fzc2VydChJNjQgPT0gMiwgIldhc20gbmVlZHMgSTY0IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsK
K3N0YXRpY19hc3NlcnQoRjMyID09IDMsICJXYXNtIG5lZWRzIEYzMiB0byBoYXZlIHRoZSB2YWx1
ZSAzIik7CitzdGF0aWNfYXNzZXJ0KEY2NCA9PSA0LCAiV2FzbSBuZWVkcyBGNjQgdG8gaGF2ZSB0
aGUgdmFsdWUgNCIpOworCitpbmxpbmUgQjM6OlR5cGUgdG9CM1R5cGUoVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSTMyOiByZXR1cm4gQjM6OkludDMyOworICAg
IGNhc2UgSTY0OiByZXR1cm4gQjM6OkludDY0OworICAgIGNhc2UgRjMyOiByZXR1cm4gQjM6OkZs
b2F0OworICAgIGNhc2UgRjY0OiByZXR1cm4gQjM6OkRvdWJsZTsKKyAgICBjYXNlIFZvaWQ6IHJl
dHVybiBCMzo6Vm9pZDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIGJvb2wgaXNWYWx1ZVR5cGUoVHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSTMyOgorICAgIGNhc2UgSTY0
OgorICAgIGNhc2UgRjMyOgorICAgIGNhc2UgRjY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisKK3N0cnVjdCBTaWduYXR1cmUgeworICAgIFR5cGUgcmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8
VHlwZT4gYXJndW1lbnRzOworfTsKKworc3RydWN0IEZ1bmN0aW9uSW1wb3J0IHsKKyAgICBTdHJp
bmcgZnVuY3Rpb25OYW1lOworfTsKKworc3RydWN0IEZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIHsK
KyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICB1aW50MzJfdCBmdW5jdGlvbkltcG9y
dEluZGV4OworfTsKKworc3RydWN0IEZ1bmN0aW9uRGVjbGFyYXRpb24geworICAgIHVpbnQzMl90
IHNpZ25hdHVyZUluZGV4OworfTsKKworc3RydWN0IEZ1bmN0aW9uUG9pbnRlclRhYmxlIHsKKyAg
ICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmN0aW9u
SW5kaWNlczsKKyAgICBWZWN0b3I8SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKK307CisKK3N0cnVj
dCBGdW5jdGlvbkluZm9ybWF0aW9uIHsKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZTsKKyAgICBz
aXplX3Qgc3RhcnQ7CisgICAgc2l6ZV90IGVuZDsKK307CisKK3N0cnVjdCBVbmxpbmtlZENhbGwg
eworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbExvY2F0aW9uOworICAgIHNpemVfdCBmdW5jdGlv
bkluZGV4OworfTsKKworc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb24geworICAgIFZlY3RvcjxV
bmxpbmtlZENhbGw+IHVubGlua2VkQ2FsbHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21w
aWxhdGlvbj4gY29kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBqc0Vu
dHJ5UG9pbnQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmNlN2UzOWJjZjhkNzY1Y2IyYmRhZjYxMzhm
MGIzYWJhMjEzZThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitlbnVtIGNs
YXNzIEJsb2NrVHlwZSB7CisgICAgSWYsCisgICAgQmxvY2ssCisgICAgTG9vcAorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2NsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBh
cnNlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9u
VHlwZSBFeHByZXNzaW9uVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRy
b2xUeXBlIENvbnRyb2xUeXBlOworCisgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9u
JiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOworCisgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUJsb2NrKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNz
aW9uKE9wVHlwZSk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJs
ZUV4cHJlc3Npb24oT3BUeXBlKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNv
bnRyb2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKKworICAgIENv
bnRleHQmIG1fY29udGV4dDsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhwcmVz
c2lvblN0YWNrOworICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7CisgICAg
Y29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKKyAgICBjb25zdCBWZWN0b3I8RnVuY3Rpb25J
bmZvcm1hdGlvbj4mIG1fZnVuY3Rpb25zOworICAgIHVuc2lnbmVkIG1fdW5yZWFjaGFibGVCbG9j
a3MgeyAwIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZv
LCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKKyAgICA6IFBh
cnNlcihzb3VyY2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCisgICAgLCBtX3NpZ25hdHVyZSgqaW5mby5zaWduYXR1cmUpCisgICAgLCBtX2Z1
bmN0aW9ucyhmdW5jdGlvbnMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dM
bigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBlbmRpbmcg
YXQ6ICIsIGluZm8uZW5kKTsKKyAgICBtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJl
LmFyZ3VtZW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpCit7CisgICAgdWludDMyX3QgbG9jYWxDb3VudDsK
KyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7Cisg
ICAgICAgIHVpbnQzMl90IG51bWJlck9mTG9jYWxzOworICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKG51bWJlck9mTG9jYWxzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBUeXBlIHR5cGVPZkxvY2FsOworICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxv
Y2FsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2NvbnRleHQuYWRk
TG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cGFyc2VCbG9jaygpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCit7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgdWludDhfdCBvcDsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSB8fCAhaXNW
YWxpZE9wVHlwZShvcCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIFdURjo6ZGF0YUxvZ0xuKCJhdHRlbXB0ZWQgdG8gZGVjb2RlIGludmFsaWQgb3A6ICIsIFJh
d1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIsIFJh
d1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBtX3VucmVhY2hhYmxlQmxvY2tz
LCAiKTogIiwgIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBv
ZmZzZXQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7
CisgICAgICAgICAgICBtX2NvbnRleHQuZHVtcChtX2NvbnRyb2xTdGFjaywgbV9leHByZXNzaW9u
U3RhY2spOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6RW5kICYmICFt
X2NvbnRyb2xTdGFjay5zaXplKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
bV91bnJlYWNoYWJsZUJsb2NrcykgeworICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVhY2hhYmxl
RXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcHJv
Y2VzcyB1bnJlYWNoYWJsZSBvcDoiLCBvcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4cHJlc3Npb24oc3Rh
dGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgLy8gSSdtIG5v
dCBzdXJlIGlmIHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJlLi4uCisg
ICAgcmV0dXJuIHRydWU7Cit9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wKSBj
YXNlIG5hbWU6CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkgeworICAgICAg
ICBFeHByZXNzaW9uVHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Cisg
ICAgICAgIEV4cHJlc3Npb25UeXBlIGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgp
OworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250ZXh0
LmJpbmFyeU9wKHN0YXRpY19jYXN0PEJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdodCwgcmVz
dWx0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZP
Ul9FQUNIX1dBU01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpIHsKKyAgICAgICAgRXhwcmVzc2lvblR5
cGUgYXJnID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgRXhwcmVzc2lv
blR5cGUgcmVzdWx0OworICAgICAgICBpZiAoIW1fY29udGV4dC51bmFyeU9wKHN0YXRpY19jYXN0
PFVuYXJ5T3BUeXBlPihvcCksIGFyZywgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JF
QVRFX0NBU0UpIHsKKyAgICAgICAgdWludDMyX3QgYWxpZ25tZW50OworICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGFsaWdubWVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgdWludDMyX3Qgb2Zmc2V0OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNl
dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEV4cHJlc3Np
b25UeXBlIHJlc3VsdDsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQubG9hZChzdGF0aWNfY2FzdDxM
b2FkT3BUeXBlPihvcCksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NU
T1JFX09QKENSRUFURV9DQVNFKSB7CisgICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKKyAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihhbGlnbm1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEV4cHJl
c3Npb25UeXBlIHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Cisg
ICAgICAgIHJldHVybiBtX2NvbnRleHQuc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+KG9w
KSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6Okkz
MkNvbnN0OiB7CisgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OworICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGNvbnN0YW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIsIGNvbnN0
YW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgT3BUeXBlOjpJ
NjRDb25zdDogeworICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKKyAgICAgICAgaWYgKCFwYXJz
ZVZhclVJbnQ2NChjb25zdGFudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0LCBjb25z
dGFudCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6
R2V0TG9jYWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIGlmICghcGFyc2VW
YXJVSW50MzIoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBFeHBy
ZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250ZXh0LmdldExvY2FsKGluZGV4
LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBjYXNlIE9wVHlwZTo6U2V0TG9jYWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7Cisg
ICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnRh
a2VMYXN0KCk7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZhbHVl
KTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6Q2FsbDogeworICAgICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChmdW5jdGlvbkluZGV4
ID49IG1fZnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CisKKyAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRha2VM
YXN0KCkpOworCisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5
RXhwcmVzc2lvbjsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5jdGlvbkluZGV4
LCBpbmZvLCBhcmdzLCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQorICAgICAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CisgICAgICAgIFR5cGUgaW5saW5l
U2lnbmF0dXJlOworICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25hdHVyZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9jb250cm9sU3RhY2suYXBw
ZW5kKG1fY29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKKyAgICAgICAgVHlwZSBp
bmxpbmVTaWduYXR1cmU7CisgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2lnbmF0
dXJlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2NvbnRyb2xTdGFj
ay5hcHBlbmQobV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgT3BUeXBlOjpJZjogeworICAgICAgICBUeXBl
IGlubGluZVNpZ25hdHVyZTsKKyAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxpbmVTaWdu
YXR1cmUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIG1f
Y29udHJvbFN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxpbmVTaWdu
YXR1cmUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6
OkVsc2U6IHsKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNr
Lmxhc3QoKSk7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OkJyOgorICAgIGNhc2UgT3BUeXBl
OjpCcklmOiB7CisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMih0YXJnZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOworICAgICAgICBpZiAob3AgPT0gT3BUeXBlOjpC
cklmKQorICAgICAgICAgICAgY29uZGl0aW9uID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3Qo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CisK
KyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFj
ay5zaXplKCkgLSAxIC0gdGFyZ2V0XTsKKworICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFkZEJy
YW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICB9CisKKyAgICBj
YXNlIE9wVHlwZTo6UmV0dXJuOiB7CisgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4g
cmV0dXJuVmFsdWVzOworICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSAhPSBWb2lk
KQorICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChtX2V4cHJlc3Npb25TdGFjay50YWtl
TGFzdCgpKTsKKworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0
dXJuIG1fY29udGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKKyAgICB9CisKKyAgICBjYXNl
IE9wVHlwZTo6RW5kOiB7CisgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFj
ay50YWtlTGFzdCgpOworICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1f
ZXhwcmVzc2lvblN0YWNrKTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6
CisgICAgY2FzZSBPcFR5cGU6OlNlbGVjdDoKKyAgICBjYXNlIE9wVHlwZTo6QnJUYWJsZToKKyAg
ICBjYXNlIE9wVHlwZTo6Tm9wOgorICAgIGNhc2UgT3BUeXBlOjpEcm9wOgorICAgIGNhc2UgT3BU
eXBlOjpGMzJDb25zdDoKKyAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6CisgICAgY2FzZSBPcFR5
cGU6OlRlZUxvY2FsOgorICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6CisgICAgY2FzZSBPcFR5
cGU6OlNldEdsb2JhbDoKKyAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OgorICAgICAgICAv
LyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250ZXh0PgorYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4
cHJlc3Npb24oT3BUeXBlIG9wKQoreworICAgIEFTU0VSVChtX3VucmVhY2hhYmxlQmxvY2tzKTsK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKKyAgICAgICAgaWYg
KG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAg
IEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgbV91bnJlYWNo
YWJsZUJsb2NrcyA9IDA7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShkYXRhKTsK
KyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6RW5kOiB7CisgICAgICAgIGlmIChtX3VucmVhY2hh
YmxlQmxvY2tzID09IDEpIHsKKyAgICAgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRy
b2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXNDb250aW51
YXRpb25SZWFjaGFibGUoZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6TG9vcDoKKyAgICBjYXNlIE9wVHlwZTo6SWY6
CisgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3Mr
KzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gdHdvIGltbWVkaWF0ZSBj
YXNlcworICAgIGNhc2UgT3BUeXBlOjpCcjoKKyAgICBjYXNlIE9wVHlwZTo6QnJJZjogeworICAg
ICAgICB1aW50MzJfdCB1bnVzZWQ7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodW51c2Vk
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHBhcnNlVmFyVUlu
dDMyKHVudXNlZCk7CisgICAgfQorCisgICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcworICAgIGNh
c2UgT3BUeXBlOjpSZXR1cm46CisgICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OgorICAgIGNhc2Ug
T3BUeXBlOjpTZXRMb2NhbDoKKyAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKKyAgICAgICAg
dWludDMyX3QgdW51c2VkOworICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51c2VkKTsK
KyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKyN1bmRlZiBDUkVBVEVfQ0FTRQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2QxMzNhN2UyMDU1Y2VjOWQyMWZh
ZGEwMDA4NzEwODg4MWRmMjMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK01lbW9yeTo6TWVtb3J5KHVpbnQzMl90IHN0YXJ0
aW5nU2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5l
ZFNpemVSZWdpc3RlcnMpCisgICAgOiBtX21vZGUoTW9kZTo6Qm91bmRzQ2hlY2tpbmcpCisgICAg
LCBtX3NpemUoc3RhcnRpbmdTaXplKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKKyAgICAv
LyBGSVhNRTogSWYgd2UgYWRkIHNpZ25hbCBiYXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBu
ZWVkIGV4dHJhIHNwYWNlIGZvciBvdmVyZmxvdyBvbiBsb2FkLgorICAgIC8vIHNlZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworICAgICwgbV9tYXBwZWRD
YXBhY2l0eShzdGF0aWNfY2FzdDx1aW50NjRfdD4obWF4UGFnZUNvdW50KSAqIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihwYWdlU2l6ZSkpCit7CisgICAgQVNTRVJUKHBpbm5lZFNpemVSZWdpc3RlcnMu
c2l6ZSgpID4gMCk7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQg
YSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzNjAwCisgICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBl
ZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAg
ICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGgg
YSBkaWZmZXJlbnQgbnVtYmVyLgorICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gbV9jYXBhY2l0
eTsKKyAgICAgICAgcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9U
X05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCA9PSBNQVBfRkFJTEVEKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VChzdGFydGluZ1NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgaWYgKG1wcm90ZWN0KHJl
c3VsdCwgc3RhcnRpbmdTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICBt
dW5tYXAocmVzdWx0LCBtX21hcHBlZENhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHVuc2lnbmVkIHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyA9IHBpbm5lZFNpemVSZWdp
c3RlcnMuc2l6ZSgpICsgMTsKKyAgICBqc2NDYWxsaW5nQ29udmVudGlvbigpLm1fY2FsbGVlU2F2
ZVJlZ2lzdGVycy5mb3JFYWNoKFsmXSAoUmVnIHJlZykgeworICAgICAgICBHUFJSZWcgZ3ByID0g
cmVnLmdwcigpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyB8fCBSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyA9PSAxKSB7CisgICAgICAgICAg
ICBtX3Bpbm5lZFJlZ2lzdGVycy5iYXNlTWVtb3J5UG9pbnRlciA9IGdwcjsKKyAgICAgICAgICAg
IHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycy0tOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fcGlubmVkUmVnaXN0ZXJzLnNpemVSZWdpc3RlcnMuYXBwZW5kKHsgZ3ByLCBwaW5uZWRTaXpl
UmVnaXN0ZXJzWy0tcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIC0gMV0gfSk7CisgICAgfSk7CisK
KyAgICBBU1NFUlQoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyk7CisgICAgbV9tZW1vcnkgPSBy
ZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCit9IC8vIG5hbWVzcGFjZSBXYXNtCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2IyMGEwNGMwNmQ2MWFhMGY4YzcyN2U0Y2QxYmZhNDNi
Yzk0ZDVkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RydWN0IFBp
bm5lZFNpemVSZWdpc3RlckluZm8geworICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7CisgICAgdW5z
aWduZWQgc2l6ZU9mZnNldDsKK307CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3Jl
IHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3Rv
ciB3aXRoIG9ubHkgb25lCisvLyBlbnRyeS4gU3BlY2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRo
ZSBzaXplT2Zmc2V0ID09IDAuIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVy
LAorLy8gd2UgY2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCitzdHJ1Y3QgUGlubmVk
UmVnaXN0ZXJJbmZvIHsKKyAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJl
Z2lzdGVyczsKKyAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Cit9OworCitjb25zdGV4cHIg
dWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOworY29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VD
b3VudCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigoMXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7CisK
K2NsYXNzIE1lbW9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNjkzCisgICAgZW51bSBjbGFzcyBNb2RlIHsKKyAgICAgICAgQm91bmRz
Q2hlY2tpbmcKKyAgICB9OworCisgICAgTWVtb3J5KCkgPSBkZWZhdWx0OworICAgIE1lbW9yeSh1
aW50MzJfdCBzdGFydGluZ1NpemUsIHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5z
aWduZWQ+JiBwaW5uZWRTaXplUmVnaXN0ZXJzKTsKKworICAgIH5NZW1vcnkoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fbWVtb3J5KQorICAgICAgICAgICAgbXVubWFwKG1fbWVtb3J5LCBtX21hcHBl
ZENhcGFjaXR5KTsKKyAgICB9CisKKyAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBt
X21lbW9yeTsgfQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
KyAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcGlubmVkUmVnaXN0ZXJzOyB9CisKKyAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KKworICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fbWVtb3J5KTsKKyAgICAgICAgaWYgKG5ld1NpemUgPiBtX2NhcGFj
aXR5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAhbXByb3Rl
Y3QobV9tZW1vcnksIG5ld1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgIH0KKwor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1lbW9yeSwgbV9zaXplKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBtX21lbW9y
eSB7IG51bGxwdHIgfTsKKyAgICBQaW5uZWRSZWdpc3RlckluZm8gbV9waW5uZWRSZWdpc3RlcnM7
CisgICAgTW9kZSBtX21vZGU7CisgICAgdWludDMyX3QgbV9zaXplIHsgMCB9OworICAgIHVpbnQz
Ml90IG1fY2FwYWNpdHkgeyAwIH07CisgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAg
fTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1MWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VlMDFiMGFhNTMzMDQ4OWNiZWNlODk4Y2M4MGRiNjExZmEx
NDIwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldh
c21Nb2R1bGVQYXJzZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
IkpTV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNt
T3BzLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCit7CisgICAg
aWYgKG1fc291cmNlTGVuZ3RoIDwgOCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
Y29uc3VtZUNoYXJhY3RlcigwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY29u
c3VtZVN0cmluZygiYXNtIikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNraXAg
dGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0
aCBpdC4KKyAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOworICAgIGlmICghcGFyc2VVSW50MzIo
dmVyc2lvbk51bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJzaW9u
TnVtYmVyICE9IG1hZ2ljTnVtYmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9jZXNzaW5nIGhlYWRlci4i
KTsKKworICAgIFNlY3Rpb25zOjpTZWN0aW9uIHByZXZpb3VzU2VjdGlvbiA9IFNlY3Rpb25zOjpV
bmtub3duOworICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNlTGVuZ3RoKSB7CisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyB0byBwYXJzZSBu
ZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAiLCBtX29mZnNldCk7CisKKyAgICAgICAgdWludDhfdCBz
ZWN0aW9uQnl0ZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiU2VjdGlvbiBieXRlOiAiLCBzZWN0aW9uQnl0ZSk7CisKKyAgICAgICAgU2Vj
dGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOworICAgICAgICBpZiAo
c2VjdGlvbkJ5dGUpIHsKKyAgICAgICAgICAgIGlmIChzZWN0aW9uQnl0ZSA8IFNlY3Rpb25zOjpV
bmtub3duKQorICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0aW9uczo6
U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdWlu
dDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KHNlY3Rpb25OYW1lTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUgc2VjdGlvbidzIHNp
emUuCisgICAgICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCArIFdURjo6
TEVCRGVjb2Rlcjo6bWF4MzJCaXRMRUJCeXRlTGVuZ3RoID49IG1fc291cmNlTGVuZ3RoKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBhbnkgY3VzdG9tIHNlY3Rpb25zIHlldC4KKworICAgICAgICAgICAgbV9vZmZzZXQgKz0g
c2VjdGlvbk5hbWVMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIVNlY3Rpb25zOjp2
YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25MZW5ndGg7CisK
KyAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CisKKyAgICAgICAgY2FzZSBTZWN0aW9uczo6TWVt
b3J5OiB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIlBhcnNpbmcgTWVtb3J5LiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBTZWN0aW9uczo6RnVuY3Rpb25UeXBlczogeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIHR5cGVz
LiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uVHlwZXMoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgU2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzaWduYXR1cmVz
LiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBTZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBkZWZp
bml0aW9ucy4iKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFNlY3Rpb25zOjpVbmtub3duOgorICAgICAgICAvLyBGSVhN
RTogRGVsZXRlIHRoaXMgd2hlbiB3ZSBzdXBwb3J0IGFsbCB0aGUgc2VjdGlvbnMuCisgICAgICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsKKyAgICAgICAgICAgIG1fb2Zm
c2V0ICs9IHNlY3Rpb25MZW5ndGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4oIkZp
bmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKKworICAgICAgICBpZiAoZW5kICE9IG1fb2Zmc2V0
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHByZXZpb3VzU2VjdGlvbiA9
IHNlY3Rpb247CisgICAgfQorCisgICAgLy8gVE9ETworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQoreworICAgIHVpbnQ4X3QgZmxhZ3M7Cisg
ICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdWludDMyX3Qgc2l6ZTsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNpemUgPiBtYXhQYWdlQ291bnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OworICAg
IGlmIChmbGFncykgeworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSB8fCBj
YXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKKyAgICBzaXplICo9IHBhZ2VTaXplOworCisg
ICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OworICAgIG1fbWVtb3J5ID0g
c3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7Cisg
ICAgcmV0dXJuIG1fbWVtb3J5LT5tZW1vcnkoKTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb25UeXBlcygpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBjb3VudCk7CisKKyAgICBtX3NpZ25h
dHVyZXMucmVzaXplKGNvdW50KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIHVpbnQ4X3QgdHlwZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3
KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZSAhPSAw
eDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJHb3QgZnVu
Y3Rpb24gdHlwZS4iKTsKKworICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50OworICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJh
cmd1bWVudENvdW50OiAiLCBhcmd1bWVudENvdW50KTsKKworICAgICAgICBWZWN0b3I8VHlwZT4g
YXJndW1lbnRUeXBlczsKKyAgICAgICAgYXJndW1lbnRUeXBlcy5yZXNpemUoYXJndW1lbnRDb3Vu
dCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8ICFpc1ZhbHVlVHlwZShz
dGF0aWNfY2FzdDxUeXBlPih0eXBlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19jYXN0PFR5cGU+KHR5cGUpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBUeXBlIHJldHVyblR5cGU7CisKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7CisKKyAgICAgICAgaWYgKHR5
cGUpIHsKKyAgICAgICAgICAgIFR5cGUgdmFsdWU7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFs
dWVUeXBlKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworCisgICAgICAgIG1fc2lnbmF0
dXJlc1tpXSA9IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9OworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25T
aWduYXR1cmVzKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9mdW5jdGlvbnMucmVz
aXplKGNvdW50KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50
MzIodHlwZU51bWJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KHR5cGVOdW1iZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBtX2Z1bmN0aW9uc1tpXS5zaWduYXR1cmUgPSAmbV9zaWduYXR1cmVz
W3R5cGVOdW1iZXJdOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkKK3sKKyAgICB1aW50MzJfdCBjb3Vu
dDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGNvdW50ICE9IG1fZnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGZ1bmN0aW9uU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRnVu
Y3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1fZnVuY3Rpb25zW2ldOworICAgICAgICBpbmZvLnN0
YXJ0ID0gbV9vZmZzZXQ7CisgICAgICAgIGluZm8uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNp
emU7CisgICAgICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTQwZDVhNjNiNGJlODBkMTFlMGM0ZTk4YTk1ZmE0ZmZjMjc5NDcy
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1
ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJz
ZXIgeworcHVibGljOgorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hZ2ljTnVtYmVyID0g
MHhjOworCisgICAgTW9kdWxlUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVm
ZmVyKQorICAgICAgICA6IFBhcnNlcihzb3VyY2VCdWZmZXIsIDAsIHNvdXJjZUJ1ZmZlci5zaXpl
KCkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7
CisKKyAgICBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9uSW5mb3Jt
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQorICAgIHN0ZDo6dW5pcXVlX3B0
cjxNZW1vcnk+JiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeTsgfQorCitwcml2YXRlOgorICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5KCk7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvblR5cGVzKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gcGFyc2VGdW5jdGlvblNpZ25hdHVyZXMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbih1aW50MzJfdCBudW1iZXIpOworCisgICAgVmVj
dG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+IG1fZnVuY3Rpb25zOworICAgIFZlY3RvcjxTaWduYXR1
cmU+IG1fc2lnbmF0dXJlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX21lbW9yeTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Nk
OWVlNzBjYWU1M2Q3NWZkZWI5MTkzMGQ4OWQzYzA3OGM3N2ZhZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcHMuaApAQCAtMCwwICsxLDI0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgZmls
ZSBpcyBhdXRvLWdlbmVyYXRlZCB1c2luZyB3YXNtLmpzb24uCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSA8Y3N0ZGludD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NQRUNJQUxf
T1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJDb25zdCwgMHgxMCwgT29wcykgXAorICAgIG1hY3Jv
KEk2NENvbnN0LCAweDExLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0Q29uc3QsIDB4MTIsIE9vcHMp
IFwKKyAgICBtYWNybyhGMzJDb25zdCwgMHgxMywgT29wcykgXAorICAgIG1hY3JvKEdldExvY2Fs
LCAweDE0LCBPb3BzKSBcCisgICAgbWFjcm8oU2V0TG9jYWwsIDB4MTUsIE9vcHMpIFwKKyAgICBt
YWNybyhUZWVMb2NhbCwgMHgxOSwgT29wcykgXAorICAgIG1hY3JvKEdldEdsb2JhbCwgMHhiYiwg
T29wcykgXAorICAgIG1hY3JvKFNldEdsb2JhbCwgMHhiYywgT29wcykgXAorICAgIG1hY3JvKENh
bGwsIDB4MTYsIE9vcHMpIFwKKyAgICBtYWNybyhDYWxsSW5kaXJlY3QsIDB4MTcsIE9vcHMpCisK
KyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AobWFjcm8pIFwKKyAgICBtYWNy
byhVbnJlYWNoYWJsZSwgMHgwLCBPb3BzKSBcCisgICAgbWFjcm8oQmxvY2ssIDB4MSwgT29wcykg
XAorICAgIG1hY3JvKExvb3AsIDB4MiwgT29wcykgXAorICAgIG1hY3JvKElmLCAweDMsIE9vcHMp
IFwKKyAgICBtYWNybyhFbHNlLCAweDQsIE9vcHMpIFwKKyAgICBtYWNybyhTZWxlY3QsIDB4NSwg
T29wcykgXAorICAgIG1hY3JvKEJyLCAweDYsIE9vcHMpIFwKKyAgICBtYWNybyhCcklmLCAweDcs
IE9vcHMpIFwKKyAgICBtYWNybyhCclRhYmxlLCAweDgsIE9vcHMpIFwKKyAgICBtYWNybyhSZXR1
cm4sIDB4OSwgT29wcykgXAorICAgIG1hY3JvKERyb3AsIDB4YiwgT29wcykgXAorICAgIG1hY3Jv
KE5vcCwgMHhhLCBPb3BzKSBcCisgICAgbWFjcm8oRW5kLCAweGYsIE9vcHMpCisKKyNkZWZpbmUg
Rk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChtYWNybykgXAorICAgIG1hY3JvKEkzMkNseiwgMHg1Nywg
Q2x6KSBcCisgICAgbWFjcm8oSTMyQ3R6LCAweDU4LCBPb3BzKSBcCisgICAgbWFjcm8oSTMyUG9w
Y250LCAweDU5LCBPb3BzKSBcCisgICAgbWFjcm8oSTY0Q2x6LCAweDcyLCBDbHopIFwKKyAgICBt
YWNybyhJNjRDdHosIDB4NzMsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRQb3BjbnQsIDB4NzQsIE9v
cHMpIFwKKyAgICBtYWNybyhGMzJBYnMsIDB4N2IsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJOZWcs
IDB4N2MsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJDb3B5c2lnbiwgMHg3ZCwgT29wcykgXAorICAg
IG1hY3JvKEYzMkNlaWwsIDB4N2UsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJGbG9vciwgMHg3Ziwg
T29wcykgXAorICAgIG1hY3JvKEYzMlRydW5jLCAweDgwLCBPb3BzKSBcCisgICAgbWFjcm8oRjMy
TmVhcmVzdCwgMHg4MSwgT29wcykgXAorICAgIG1hY3JvKEYzMlNxcnQsIDB4ODIsIE9vcHMpIFwK
KyAgICBtYWNybyhGNjRBYnMsIDB4OGYsIE9vcHMpIFwKKyAgICBtYWNybyhGNjROZWcsIDB4OTAs
IE9vcHMpIFwKKyAgICBtYWNybyhGNjRDb3B5c2lnbiwgMHg5MSwgT29wcykgXAorICAgIG1hY3Jv
KEY2NENlaWwsIDB4OTIsIE9vcHMpIFwKKyAgICBtYWNybyhGNjRGbG9vciwgMHg5MywgT29wcykg
XAorICAgIG1hY3JvKEY2NFRydW5jLCAweDk0LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TmVhcmVz
dCwgMHg5NSwgT29wcykgXAorICAgIG1hY3JvKEY2NFNxcnQsIDB4OTYsIE9vcHMpCisKKyNkZWZp
bmUgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJBZGQsIDB4
NDAsIEFkZCkgXAorICAgIG1hY3JvKEkzMlN1YiwgMHg0MSwgU3ViKSBcCisgICAgbWFjcm8oSTMy
TXVsLCAweDQyLCBNdWwpIFwKKyAgICBtYWNybyhJMzJEaXZTLCAweDQzLCBEaXYpIFwKKyAgICBt
YWNybyhJMzJEaXZVLCAweDQ0LCBPb3BzKSBcCisgICAgbWFjcm8oSTMyUmVtUywgMHg0NSwgTW9k
KSBcCisgICAgbWFjcm8oSTMyUmVtVSwgMHg0NiwgT29wcykgXAorICAgIG1hY3JvKEkzMkFuZCwg
MHg0NywgQml0QW5kKSBcCisgICAgbWFjcm8oSTMyT3IsIDB4NDgsIEJpdE9yKSBcCisgICAgbWFj
cm8oSTMyWG9yLCAweDQ5LCBCaXRYb3IpIFwKKyAgICBtYWNybyhJMzJTaGwsIDB4NGEsIFNobCkg
XAorICAgIG1hY3JvKEkzMlNoclUsIDB4NGIsIFNTaHIpIFwKKyAgICBtYWNybyhJMzJTaHJTLCAw
eDRjLCBaU2hyKSBcCisgICAgbWFjcm8oSTMyUm90ciwgMHhiNiwgT29wcykgXAorICAgIG1hY3Jv
KEkzMlJvdGwsIDB4YjcsIE9vcHMpIFwKKyAgICBtYWNybyhJMzJFcSwgMHg0ZCwgRXF1YWwpIFwK
KyAgICBtYWNybyhJMzJOZSwgMHg0ZSwgTm90RXF1YWwpIFwKKyAgICBtYWNybyhJMzJMdFMsIDB4
NGYsIExlc3NUaGFuKSBcCisgICAgbWFjcm8oSTMyTGVTLCAweDUwLCBMZXNzRXF1YWwpIFwKKyAg
ICBtYWNybyhJMzJMdFUsIDB4NTEsIEJlbG93KSBcCisgICAgbWFjcm8oSTMyTGVVLCAweDUyLCBC
ZWxvd0VxdWFsKSBcCisgICAgbWFjcm8oSTMyR3RTLCAweDUzLCBHcmVhdGVyVGhhbikgXAorICAg
IG1hY3JvKEkzMkdlUywgMHg1NCwgR3JlYXRlckVxdWFsKSBcCisgICAgbWFjcm8oSTMyR3RVLCAw
eDU1LCBBYm92ZSkgXAorICAgIG1hY3JvKEkzMkdlVSwgMHg1NiwgQWJvdmVFcXVhbCkgXAorICAg
IG1hY3JvKEk2NEFkZCwgMHg1YiwgQWRkKSBcCisgICAgbWFjcm8oSTY0U3ViLCAweDVjLCBTdWIp
IFwKKyAgICBtYWNybyhJNjRNdWwsIDB4NWQsIE11bCkgXAorICAgIG1hY3JvKEk2NERpdlMsIDB4
NWUsIERpdikgXAorICAgIG1hY3JvKEk2NERpdlUsIDB4NWYsIE9vcHMpIFwKKyAgICBtYWNybyhJ
NjRSZW1TLCAweDYwLCBNb2QpIFwKKyAgICBtYWNybyhJNjRSZW1VLCAweDYxLCBPb3BzKSBcCisg
ICAgbWFjcm8oSTY0QW5kLCAweDYyLCBCaXRBbmQpIFwKKyAgICBtYWNybyhJNjRPciwgMHg2Mywg
Qml0T3IpIFwKKyAgICBtYWNybyhJNjRYb3IsIDB4NjQsIEJpdFhvcikgXAorICAgIG1hY3JvKEk2
NFNobCwgMHg2NSwgU2hsKSBcCisgICAgbWFjcm8oSTY0U2hyVSwgMHg2NiwgU1NocikgXAorICAg
IG1hY3JvKEk2NFNoclMsIDB4NjcsIFpTaHIpIFwKKyAgICBtYWNybyhJNjRSb3RyLCAweGI4LCBP
b3BzKSBcCisgICAgbWFjcm8oSTY0Um90bCwgMHhiOSwgT29wcykgXAorICAgIG1hY3JvKEk2NEVx
LCAweDY4LCBFcXVhbCkgXAorICAgIG1hY3JvKEk2NE5lLCAweDY5LCBOb3RFcXVhbCkgXAorICAg
IG1hY3JvKEk2NEx0UywgMHg2YSwgTGVzc1RoYW4pIFwKKyAgICBtYWNybyhJNjRMZVMsIDB4NmIs
IExlc3NFcXVhbCkgXAorICAgIG1hY3JvKEk2NEx0VSwgMHg2YywgQmVsb3cpIFwKKyAgICBtYWNy
byhJNjRMZVUsIDB4NmQsIEJlbG93RXF1YWwpIFwKKyAgICBtYWNybyhJNjRHdFMsIDB4NmUsIEdy
ZWF0ZXJUaGFuKSBcCisgICAgbWFjcm8oSTY0R2VTLCAweDZmLCBHcmVhdGVyRXF1YWwpIFwKKyAg
ICBtYWNybyhJNjRHdFUsIDB4NzAsIEFib3ZlKSBcCisgICAgbWFjcm8oSTY0R2VVLCAweDcxLCBB
Ym92ZUVxdWFsKSBcCisgICAgbWFjcm8oRjMyQWRkLCAweDc1LCBPb3BzKSBcCisgICAgbWFjcm8o
RjMyU3ViLCAweDc2LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTXVsLCAweDc3LCBPb3BzKSBcCisg
ICAgbWFjcm8oRjMyRGl2LCAweDc4LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTWluLCAweDc5LCBP
b3BzKSBcCisgICAgbWFjcm8oRjMyTWF4LCAweDdhLCBPb3BzKSBcCisgICAgbWFjcm8oRjMyRXEs
IDB4ODMsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJOZSwgMHg4NCwgT29wcykgXAorICAgIG1hY3Jv
KEYzMkx0LCAweDg1LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTGUsIDB4ODYsIE9vcHMpIFwKKyAg
ICBtYWNybyhGMzJHdCwgMHg4NywgT29wcykgXAorICAgIG1hY3JvKEYzMkdlLCAweDg4LCBPb3Bz
KSBcCisgICAgbWFjcm8oRjY0QWRkLCAweDg5LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0U3ViLCAw
eDhhLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TXVsLCAweDhiLCBPb3BzKSBcCisgICAgbWFjcm8o
RjY0RGl2LCAweDhjLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TWluLCAweDhkLCBPb3BzKSBcCisg
ICAgbWFjcm8oRjY0TWF4LCAweDhlLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0RXEsIDB4OTcsIE9v
cHMpIFwKKyAgICBtYWNybyhGNjROZSwgMHg5OCwgT29wcykgXAorICAgIG1hY3JvKEY2NEx0LCAw
eDk5LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TGUsIDB4OWEsIE9vcHMpIFwKKyAgICBtYWNybyhG
NjRHdCwgMHg5YiwgT29wcykgXAorICAgIG1hY3JvKEY2NEdlLCAweDljLCBPb3BzKQorCisjZGVm
aW5lIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJM
b2FkOFMsIDB4MjAsIE9vcHMpIFwKKyAgICBtYWNybyhJMzJMb2FkOFUsIDB4MjEsIE9vcHMpIFwK
KyAgICBtYWNybyhJMzJMb2FkMTZTLCAweDIyLCBPb3BzKSBcCisgICAgbWFjcm8oSTMyTG9hZDE2
VSwgMHgyMywgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQ4UywgMHgyNCwgT29wcykgXAorICAg
IG1hY3JvKEk2NExvYWQ4VSwgMHgyNSwgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQxNlMsIDB4
MjYsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRMb2FkMTZVLCAweDI3LCBPb3BzKSBcCisgICAgbWFj
cm8oSTY0TG9hZDMyUywgMHgyOCwgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQzMlUsIDB4Mjks
IE9vcHMpIFwKKyAgICBtYWNybyhJMzJMb2FkLCAweDJhLCBPb3BzKSBcCisgICAgbWFjcm8oSTY0
TG9hZCwgMHgyYiwgT29wcykgXAorICAgIG1hY3JvKEYzMkxvYWQsIDB4MmMsIE9vcHMpIFwKKyAg
ICBtYWNybyhGNjRMb2FkLCAweDJkLCBPb3BzKQorCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fTUVN
T1JZX1NUT1JFX09QKG1hY3JvKSBcCisgICAgbWFjcm8oSTMyU3RvcmU4LCAweDJlLCBPb3BzKSBc
CisgICAgbWFjcm8oSTMyU3RvcmUxNiwgMHgyZiwgT29wcykgXAorICAgIG1hY3JvKEk2NFN0b3Jl
OCwgMHgzMCwgT29wcykgXAorICAgIG1hY3JvKEk2NFN0b3JlMTYsIDB4MzEsIE9vcHMpIFwKKyAg
ICBtYWNybyhJNjRTdG9yZTMyLCAweDMyLCBPb3BzKSBcCisgICAgbWFjcm8oSTMyU3RvcmUsIDB4
MzMsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRTdG9yZSwgMHgzNCwgT29wcykgXAorICAgIG1hY3Jv
KEYzMlN0b3JlLCAweDM1LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0U3RvcmUsIDB4MzYsIE9vcHMp
CisKKworCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9X
QVNNX1NQRUNJQUxfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxPV19P
UChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fVU5BUllfT1AobWFjcm8pIFwKKyAgICBGT1Jf
RUFDSF9XQVNNX0JJTkFSWV9PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xP
QURfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChtYWNybykK
KworI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgYjNvcCkgbmFtZSA9IGlkLAor
CitlbnVtIE9wVHlwZSA6IHVpbnQ4X3QgeworICAgIEZPUl9FQUNIX1dBU01fT1AoQ1JFQVRFX0VO
VU1fVkFMVUUpCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CitpbmxpbmUgYm9vbCBpc1Zh
bGlkT3BUeXBlKEludCBpKQoreworICAgIC8vIEJpdHNldCBvZiB2YWxpZCBvcHMuCisgICAgc3Rh
dGljIGNvbnN0IHVpbnQ4X3QgdmFsaWRbXSA9IHsgMHhmZiwgMHg4ZiwgMHhmZiwgMHgyLCAweGZm
LCAweGZmLCAweDdmLCAweGEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4
ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYg
fTsKKyAgICByZXR1cm4gMCA8PSBpICYmIGkgPD0gMTg4ICYmICh2YWxpZFtpIC8gOF0gJiAoMSA8
PCAoaSAlIDgpKSk7Cit9CisKK2VudW0gY2xhc3MgQmluYXJ5T3BUeXBlIDogdWludDhfdCB7Cisg
ICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0VOVU1fVkFMVUUpCit9OworCitlbnVt
IGNsYXNzIFVuYXJ5T3BUeXBlIDogdWludDhfdCB7CisgICAgRk9SX0VBQ0hfV0FTTV9VTkFSWV9P
UChDUkVBVEVfRU5VTV9WQUxVRSkKK307CisKK2VudW0gY2xhc3MgTG9hZE9wVHlwZSA6IHVpbnQ4
X3QgeworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0VOVU1fVkFMVUUp
Cit9OworCitlbnVtIGNsYXNzIFN0b3JlT3BUeXBlIDogdWludDhfdCB7CisgICAgRk9SX0VBQ0hf
V0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0VOVU1fVkFMVUUpCit9OworCisjdW5kZWYgQ1JF
QVRFX0VOVU1fVkFMVUUKKworaW5saW5lIGJvb2wgaXNDb250cm9sT3AoT3BUeXBlIG9wKQorewor
ICAgIHN3aXRjaCAob3ApIHsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3ApIGNh
c2UgT3BUeXBlOjpuYW1lOgorICAgIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKENSRUFU
RV9DQVNFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyN1bmRlZiBDUkVBVEVfQ0FTRQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDgx
MzRkNjYxNmNhNzllNzE5N2RlOTY1YzNjYjE3MTBhZjIyNTIxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC0wLDAgKzEsMTMzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9u
LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisj
aW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgorI2luY2x1ZGUg
PHd0Zi9MRUJEZWNvZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K2NsYXNzIFBhcnNlciB7Citwcm90ZWN0ZWQ6CisgICAgUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCk7CisKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBjb25zdW1lQ2hhcmFjdGVyKGNoYXIpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciopOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBX
VEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVu
Z3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6
ZGVjb2RlVUludDY0KG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCBy
ZXN1bHQpOyB9CisKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBl
KFR5cGUmIHJlc3VsdCk7CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1fc291cmNlOwor
ICAgIHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKKyAgICBzaXplX3QgbV9vZmZzZXQ7Cit9OworCitB
TFdBWVNfSU5MSU5FIFBhcnNlcjo6UGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNl
QnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCisgICAgOiBtX3NvdXJjZShzb3VyY2VC
dWZmZXIpCisgICAgLCBtX3NvdXJjZUxlbmd0aChlbmQpCisgICAgLCBtX29mZnNldChzdGFydCkK
K3sKKyAgICBBU1NFUlQoZW5kIDw9IHNvdXJjZUJ1ZmZlci5zaXplKCkpOworICAgIEFTU0VSVChz
dGFydCA8IGVuZCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFy
YWN0ZXIoY2hhciBjKQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjID09IG1fc291cmNlW21fb2Zmc2V0XSkgewor
ICAgICAgICBtX29mZnNldCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5n
KGNvbnN0IGNoYXIqIHN0cikKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0OworICAg
IGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHN0cltpXTsgaSsrKSB7CisgICAgICAgIGlmICghY29u
c3VtZUNoYXJhY3RlcihzdHJbaV0pKSB7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0Owor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJf
dCYgcmVzdWx0KQoreworICAgIGlmIChtX3NvdXJjZUxlbmd0aCA8IDQgfHwgbV9vZmZzZXQgPj0g
bV9zb3VyY2VMZW5ndGggLSA0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29m
ZnNldCk7CisgICAgbV9vZmZzZXQgKz0gNDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpCit7CisgICAg
aWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmVzdWx0ID0gbV9zb3VyY2VbbV9vZmZzZXQrK107CisgICAgcmV0dXJuIHJlc3VsdCA8IDB4
ODA7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDEodWludDhf
dCYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IHRlbXA7CisgICAgaWYgKCFwYXJzZVZhclVJbnQz
Mih0ZW1wKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHRlbXApOworICAgIHJldHVybiB0ZW1wIDw9IDE7Cit9CisKK0FMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCkKK3sKKyAgICB1aW50
OF90IHZhbHVlOworICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVHlwZTo6TGFzdFZh
bHVlVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxUeXBlPih2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmEwZmEzZmY0NDExNGM1YTdiZDZh
Njc3YjU1ZGQ1MTVjNzJiOGJmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldhc21QbGFuLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJC
M0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2VyLmgi
CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitQbGFuOjpQbGFu
KFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOworICAgIE1vZHVsZVBhcnNlciBtb2R1
bGVQYXJzZXIoc291cmNlKTsKKyAgICBpZiAoIW1vZHVsZVBhcnNlci5wYXJzZSgpKSB7CisgICAg
ICAgIGRhdGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkLiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigiUGFyc2VkIG1v
ZHVsZS4iKTsKKworICAgIGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6IG1v
ZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgZnVuY2lvbiBzdGFydGluZyBhdDog
IiwgaW5mby5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBpbmZvLmVuZCk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQocGFyc2VBbmRDb21waWxlKHZtLCBzb3VyY2UsIG1vZHVsZVBhcnNlci5tZW1v
cnkoKS5nZXQoKSwgaW5mbywgbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkpOwor
ICAgIH0KKworICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgor
ICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlvblB0
ciA6IHJlc3VsdCkgeworICAgICAgICBGdW5jdGlvbkNvbXBpbGF0aW9uKiBmdW5jdGlvbiA9IGZ1
bmN0aW9uUHRyLmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBmdW5jdGlvbi0+dW5s
aW5rZWRDYWxscykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxs
LmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0W2NhbGwuZnVuY3Rpb25JbmRl
eF0tPmNvZGUtPmNvZGUoKSkpOworICAgIH0KKworICAgIG1lbW9yeSA9IFdURk1vdmUobW9kdWxl
UGFyc2VyLm1lbW9yeSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZlZDEzNmFiMWJlMzU1ZjgyZjk3OTIxMGY3YjlmZmM3N2E4MzAyNTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXYXNt
Rm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworY2xh
c3MgTWVtb3J5OworCisvLyBUT0RPOiBUaGlzIHNob3VsZCBjcmVhdGUgYSBXYXNtIE1vZHVsZSBu
b3QgYSBsaXN0IG9mIGZ1bmN0aW9ucy4KK2NsYXNzIFBsYW4geworcHVibGljOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4gc291cmNlKTsKKworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4+IHJlc3VsdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtZW1vcnk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjU3ODY3MjEwYTEwYmY2OTIy
MzQxYzBhNzZjM2MyNTAxOWE4NGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitz
dHJ1Y3QgU2VjdGlvbnMgeworICAgIGVudW0gU2VjdGlvbiA6IHVpbnQ4X3QgeworICAgICAgICBG
dW5jdGlvblR5cGVzID0gMSwKKyAgICAgICAgU2lnbmF0dXJlcyA9IDMsCisgICAgICAgIE1lbW9y
eSA9IDUsCisgICAgICAgIERlZmluaXRpb25zID0gMTAsCisgICAgICAgIFVua25vd24KKyAgICB9
OworICAgIHN0YXRpYyBib29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlv
biBuZXh0KQorICAgIHsKKyAgICAgICAgaWYgKHByZXZpb3VzID09IFVua25vd24pCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKKyAgICB9
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292364</attachid>
            <date>2016-10-21 10:21:37 -0700</date>
            <delta_ts>2016-10-21 10:59:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-163796-20161021101758.patch</filename>
            <type>text/plain</type>
            <size>376157</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YzExNjRmNDQxNmRlYTNiYTFjNGQzZTcwMWY1MWQ0ZWQxNWU5OGIxLi5iOTAzZWQwYjhhOGViOTkw
MWU5NDljMjQ4NjU1OWU4MDUyMmNiZDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTcgQEAKKzIwMTYtMTAtMjEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFdBU00gdG8gV2FzbQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNzk2CisKKyAgICAgICAgUnViYmVyIHN0
YW1wZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9Ub29sRXhlY3V0YWJsZS54Y2NvbmZpZzoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxsaW50
L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6dm1FbnRyeVRvV2FzbSk6CisgICAgICAg
IChKU0M6OnZtRW50cnlUb1dBU00pOiBEZWxldGVkLgorICAgICAgICAqIGxsaW50L0xMSW50VGh1
bmtzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAq
IHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHRlc3RXQVNNLmNwcDoKKyAgICAgICAg
KHJ1bldBU01UZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdFdhc20uY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNNLmNwcC4KKyAgICAgICAgKENvbW1h
bmRMaW5lOjpDb21tYW5kTGluZSk6CisgICAgICAgIChwcmludFVzYWdlU3RhdGVtZW50KToKKyAg
ICAgICAgKENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgIChydW5MRUJUZXN0
cyk6CisgICAgICAgIChpbnZva2UpOgorICAgICAgICAoYm94KToKKyAgICAgICAgKHJ1bldhc21U
ZXN0cyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5jcHA6
CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6SlNXQVNNTW9kdWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNXQVNNTW9kdWxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNt
L0pTV0FTTU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjppMzJDb25zdGFudHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmYzMkNvbnN0YW50cyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZjY0Q29uc3RhbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpzaWduYXR1cmVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlvbkltcG9ydHMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6Z2xvYmFsVmFyaWFibGVUeXBlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25EZWNsYXJhdGlvbnMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6YXJyYXlCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9ucyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25TdGFja0hlaWdodHMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6Omdsb2JhbFZhcmlhYmxlcyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6aW1wb3J0ZWRGdW5jdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIHdhc20vSlNXYXNtTW9kdWxlLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAuCisgICAgICAgIChK
U0M6OkpTV2FzbU1vZHVsZTo6SlNXYXNtTW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9k
dWxlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiB3YXNtL0pTV2FzbU1vZHVsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmguCisgICAgICAgIChKU0M6OkpTV2FzbU1v
ZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpKU1dhc21Nb2R1bGU6OmkzMkNvbnN0YW50cyk6CisgICAgICAg
IChKU0M6OkpTV2FzbU1vZHVsZTo6ZjMyQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXYXNt
TW9kdWxlOjpmNjRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpKU1dhc21Nb2R1bGU6OnNpZ25h
dHVyZXMpOgorICAgICAgICAoSlNDOjpKU1dhc21Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0cyk6Cisg
ICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKToKKyAg
ICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpnbG9iYWxWYXJpYWJsZVR5cGVzKToKKyAgICAgICAg
KEpTQzo6SlNXYXNtTW9kdWxlOjpmdW5jdGlvbkRlY2xhcmF0aW9ucyk6CisgICAgICAgIChKU0M6
OkpTV2FzbU1vZHVsZTo6ZnVuY3Rpb25Qb2ludGVyVGFibGVzKToKKyAgICAgICAgKEpTQzo6SlNX
YXNtTW9kdWxlOjphcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6ZnVu
Y3Rpb25zKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpmdW5jdGlvblN0YXJ0T2Zmc2V0
c0luU291cmNlKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpmdW5jdGlvblN0YWNrSGVp
Z2h0cyk6CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6Z2xvYmFsVmFyaWFibGVzKToKKyAg
ICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjppbXBvcnRlZEZ1bmN0aW9ucyk6CisgICAgICAgICog
d2FzbS9XQVNNQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OldBU006OmNyZWF0ZUpT
V3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OnBhcnNlQW5kQ29tcGlsZSk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpXQVNNOjpqc2NDYWxsaW5nQ29udmVudGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldBU006Ondhc21DYWxsaW5nQ29udmVudGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpTQzo6V0FTTTo6Q2FsbGlu
Z0NvbnZlbnRpb246OkNhbGxpbmdDb252ZW50aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnRJbXBsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpDYWxsaW5nQ29udmVudGlvbjo6bG9hZEFy
Z3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OkNhbGxpbmdDb252ZW50aW9u
OjpzZXR1cENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpuZXh0SlNDT2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6
V0FTTTo6dG9CM1R5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjppc1ZhbHVlVHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01NZW1vcnkuY3BwOgorICAgICAgICAoSlND
OjpXQVNNOjpNZW1vcnk6Ok1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNTWVt
b3J5Lmg6CisgICAgICAgIChKU0M6OldBU006Ok1lbW9yeTo6fk1lbW9yeSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldBU006Ok1lbW9yeTo6bWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTTo6TWVtb3J5OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6TWVt
b3J5OjpwaW5uZWRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1v
cnk6Om1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6Omdyb3cpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSk6IERlbGV0
ZWQuCisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
V0FTTTo6TW9kdWxlUGFyc2VyOjpwYXJzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006
Ok1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
OjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU006Ok1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblNpZ25hdHVyZXMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0
aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6CisgICAg
ICAgIChKU0M6OldBU006Ok1vZHVsZVBhcnNlcjo6TW9kdWxlUGFyc2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTTo6TW9kdWxlUGFyc2VyOjpmdW5jdGlvbkluZm9ybWF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxlUGFyc2VyOjptZW1vcnkpOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vV0FTTU9wcy5oOgorICAgICAgICAoSlNDOjpXQVNNOjppc1ZhbGlk
T3BUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6aXNDb250cm9sT3ApOiBEZWxl
dGVkLgorICAgICAgICAqIHdhc20vV0FTTVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXQVNNOjpQ
YXJzZXI6OnBhcnNlVmFyVUludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFy
c2VyOjpwYXJzZVZhclVJbnQ2NCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNl
cjo6UGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpjb25zdW1l
Q2hhcmFjdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpjb25zdW1l
U3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpwYXJzZVVJbnQz
Mik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6cGFyc2VVSW50Nyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6cGFyc2VWYXJVSW50MSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vV0FTTVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXQVNNOjpQbGFu
OjpQbGFuKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01TZWN0aW9ucy5oOgorICAgICAg
ICAoSlNDOjpXQVNNOjpTZWN0aW9uczo6dmFsaWRhdGVPcmRlcik6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5jcHAuCisgICAgICAgIChkdW1wUHJvY2Vk
dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdl
bmVyYXRvci5oLgorICAgICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlv
bi5jcHAuCisgICAgICAgIChKU0M6Oldhc206OmpzY0NhbGxpbmdDb252ZW50aW9uKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKToKKyAgICAgICAgKiB3YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUNhbGxpbmdDb252ZW50aW9uLmguCisgICAgICAgIChKU0M6Oldhc206OkNhbGxp
bmdDb252ZW50aW9uOjpDYWxsaW5nQ29udmVudGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkNh
bGxpbmdDb252ZW50aW9uOjptYXJzaGFsbEFyZ3VtZW50SW1wbCk6CisgICAgICAgIChKU0M6Oldh
c206OkNhbGxpbmdDb252ZW50aW9uOjptYXJzaGFsbEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OmxvYWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpDYWxsaW5nQ29udmVudGlvbjo6c2V0dXBDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
bmV4dEpTQ09mZnNldCk6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmguCisgICAgICAgIChKU0M6
Oldhc206OnRvQjNUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNWYWx1ZVR5cGUpOgorICAg
ICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQmxvY2spOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVF
eHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1lbW9yeS5jcHAuCisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01NZW1vcnkuaC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVt
b3J5OjptZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnNpemUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNZW1vcnk6OnBpbm5lZFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6bW9kZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBh
cnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlTWVt
b3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uVHlw
ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWdu
YXR1cmVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
RGVmaW5pdGlvbnMpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oLgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6ZnVuY3Rpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6bWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21PcHMu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6aXNWYWxpZE9wVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206Omlz
Q29udHJvbE9wKToKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGFyc2VyOjpwYXJzZVZhclVJbnQzMik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6
cGFyc2VWYXJVSW50NjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OlBhcnNlcik6Cisg
ICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6Y29uc3VtZUNoYXJhY3Rlcik6CisgICAgICAgIChK
U0M6Oldhc206OlBhcnNlcjo6Y29uc3VtZVN0cmluZyk6CisgICAgICAgIChKU0M6Oldhc206OlBh
cnNlcjo6cGFyc2VVSW50MzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVUlu
dDcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVmFyVUludDEpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dh
c21QbGFuLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Q
bGFuLmNwcC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgICogd2Fz
bS9XYXNtUGxhbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TVBsYW4uaC4KKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9ucy5oOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmguCisgICAgICAgIChKU0M6Oldh
c206OlNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKToKKwogMjAxNi0xMC0yMCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgV0FT
TSBjYWxscwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDM5NWZlMmNhNTVm
NDhlNTZmYzUyZGU1NDMxZjZmMWRmYzA2NWM1OTAuLjAxY2IyOTQ3MzdiMjQ0ZjIxZGI3YTk1Mzk3
OWU0OTJiNzMwMDQyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg2
MSwxMyArODYxLDEzIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvSlNE
b2xsYXJWTS5jcHAKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAogCi0gICAgd2Fz
bS9KU1dBU01Nb2R1bGUuY3BwCisgICAgd2FzbS9KU1dhc21Nb2R1bGUuY3BwCiAgICAgd2FzbS9K
U1dlYkFzc2VtYmx5LmNwcAotICAgIHdhc20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwCi0gICAgd2Fz
bS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwCi0gICAgd2FzbS9XQVNNTWVtb3J5LmNwcAotICAg
IHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKLSAgICB3YXNtL1dBU01QbGFuLmNwcAorICAgIHdh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisgICAgd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwCisgICAgd2FzbS9XYXNtTWVtb3J5LmNwcAorICAgIHdhc20vV2FzbU1vZHVsZVBhcnNlci5j
cHAKKyAgICB3YXNtL1dhc21QbGFuLmNwcAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVjdXRh
YmxlLnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xF
eGVjdXRhYmxlLnhjY29uZmlnCmluZGV4IDcxNzE4MzM0MTIyODVhNGQ3ZGI2YjRhMmJmOGQ3NzFi
NmI5MjE2OWMuLmExYTkwYmFhMjIyZDMyNDA3MTYwNmY4YmFmMTFjYWUzNDVmYWIyMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9Ub29sRXhlY3V0YWJs
ZS54Y2NvbmZpZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvVG9v
bEV4ZWN1dGFibGUueGNjb25maWcKQEAgLTMxLDcgKzMxLDcgQEAgQ09ERV9TSUdOX0VOVElUTEVN
RU5UU19pb3NfbWluaWRvbSA9IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJVExF
TUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CiBDT0RFX1NJR05fRU5USVRM
RU1FTlRTX2lvc190ZXN0YXBpID0gZW50aXRsZW1lbnRzLnBsaXN0OwogQ09ERV9TSUdOX0VOVElU
TEVNRU5UU19pb3NfdGVzdGIzID0gZW50aXRsZW1lbnRzLnBsaXN0OwotQ09ERV9TSUdOX0VOVElU
TEVNRU5UU19pb3NfdGVzdFdBU00gPSBlbnRpdGxlbWVudHMucGxpc3Q7CitDT0RFX1NJR05fRU5U
SVRMRU1FTlRTX2lvc190ZXN0V2FzbSA9IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RSZWdFeHAgPSBlbnRpdGxlbWVudHMucGxpc3Q7CiAKIFNLSVBf
SU5TVEFMTCA9ICQoU0tJUF9JTlNUQUxMXyQoRk9SQ0VfVE9PTF9JTlNUQUxMKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZkNDJiOWM3NWRlNGRhZGU3ODI2MTkwNzg5YzA3ODI2
OTNjYzI4NmIuLjg2YWEwODRlODExZGEzMTRkYTZjZmI0NzAxYTMzMzhmYjMwYzMzNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjA5LDggKzEyMDksOCBAQAogCQk1MkMwNjEx
RjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50
aW1lVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5
QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MkM5NTJCOTE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1
MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovOyB9OwotCQk1MzEzNzRC
RDFENUNFNjc2MDBBRjdBMEIgLyogV0FTTVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXQVNNUGxh
bi5oICovOyB9OwotCQk1MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV0FTTVBsYW4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVD
RTk1MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNwcCAqLzsgfTsKKwkJNTMxMzc0QkQxRDVDRTY3NjAw
QUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsK
KwkJNTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0Ew
QiAvKiBXYXNtUGxhbi5jcHAgKi87IH07CiAJCTUzNDFGQzcwMURBQzMzRTUwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmNwcCAqLzsgfTsKIAkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmggKi87IH07CiAJCTUzNDg2QkI3MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2
MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQdWJsaWMsICk7IH07IH07CkBAIC0xMjE5LDMwICsxMjE5LDMwIEBACiAJCTUzNEM0
NTdDMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEM0NTdCMUJDNzI0
MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgfTsKIAkJNTM0
QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRDNDU3RDFC
QzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLzsgfTsK
IAkJNTM1MjlBNEMxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYg
LyogQVBJVXRpbHMuaCAqLzsgfTsKLQkJNTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdBU01N
ZW1vcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
NTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmggKi87IH07Ci0JCTUzNTU1NzE2
MUQ5REZBMzIwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXQVNN
TWVtb3J5LmNwcCAqLzsgfTsKKwkJNTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1v
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1
NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi87IH07CisJCTUzNTU1NzE2MUQ5
REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVt
b3J5LmNwcCAqLzsgfTsKIAkJNTM3MEI0RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1
MzcwQjRGNjFCRjI2MjA1MDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM3MEI0RjQxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMz
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0MDAw
RUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLzsg
fTsKIAkJNTM5RUIwNzkxRDU1NjA3MDAwQzgyRUY3IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEw
NUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OwogCQk1MzlFQjA3
QTFENTU2MDcwMDBDODJFRjcgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAw
NzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKLQkJNTM5RUIwODExRDU1
NjA4QTAwQzgyRUY3IC8qIHRlc3RXQVNNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCMDcxMUQ1NTNERjgwMEM4MkVGNyAvKiB0ZXN0V0FTTS5j
cHAgKi87IH07CisJCTUzOUVCMDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA3MTFENTUz
REY4MDBDODJFRjcgLyogdGVzdFdhc20uY3BwICovOyB9OwogCQk1MzlGQjhCQTFDOTlEQTdDMDA5
NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5l
cy5oICovOyB9OwogCQk1M0Q0NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1Zh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0
NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CiAJCTUz
RDQ0NERFMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REQxREFGMDlBMDAw
QjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgKi87IH07Ci0JCTUzRjQwRTg1MUQ1OEY5
NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlv
bnMuaCAqLzsgfTsKLQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
NDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovOyB9OwotCQk1
M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8q
IFdBU01QYXJzZXIuaCAqLzsgfTsKLQkJNTNGNDBFOEYxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01C
M0lSR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAg
Ki87IH07Ci0JCTUzRjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MDFENTkwMzAyMDA5
OUExQjYgLyogV0FTTU9wcy5oICovOyB9OwotCQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyog
V0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5o
ICovOyB9OwotCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQx
RDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLzsgfTsKLQkJNTNGNDBFOTcx
RDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8q
IFdBU01Nb2R1bGVQYXJzZXIuY3BwICovOyB9OworCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYg
LyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07
CisJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAx
QkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKKwkJNTNGNDBFOEQxRDU5
MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2Vy
LmggKi87IH07CisJCTUzRjQwRThGMUQ1OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0
MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovOyB9OworCQk1
M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdh
c21PcHMuaCAqLzsgfTsKKwkJNTNGNDBFOTMxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLzsgfTsKKwkJ
NTNGNDBFOTUxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0MUQ1QTdBRUYwMDk5
QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi87IH07CisJCTUzRjQwRTk3MUQ1QTdCRUMwMDk5
QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxl
UGFyc2VyLmNwcCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFs
RnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3Rv
dHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMzFDRjM4MDM5
MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEy
QUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwICovOyB9OwotCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV0FT
TUNhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZl
bnRpb24uY3BwICovOyB9OwotCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3RDMgLyogV0FTTUNhbGxp
bmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV0FTTUNhbGxpbmdDb252ZW50aW9uLmgg
Ki87IH07CisJCTUzRkQwNEQzMUQ3QUIyNzcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
RDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi87IH07
CisJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3
QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLzsgfTsKIAkJNUQ1RDhB
RDEwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyog
bGliZWRpdC5keWxpYiAqLzsgfTsKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3Rh
cGkuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJ
NURCQjE1MjUxMzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNj
cmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3
MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLzsgfTsKQEAgLTEzNjUsOSArMTM2NSw5IEBACiAJCTc5
RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAw
Mzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1h
bEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUY4RkMxRjFCOUZFRDBGMDBDQTY2
QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBE
RkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovOyB9OwotCQk3Qjk4RDEzNjFCNjBDRDVG
MDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1
bGUuY3BwICovOyB9OwotCQk3Qjk4RDEzNzFCNjBDRDYyMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk4RDEz
NTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8q
IFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0I5OEQxMzYxQjYwQ0Q1RjAw
MjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXYXNtTW9kdWxl
LmNwcCAqLzsgfTsKKwkJN0I5OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUx
QjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBX
YXNtRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1
NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNl
RGVmZXJyZWQuY3BwICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9t
aXNlRGVmZXJyZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3
NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2su
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUx
MCw4ICszNTEwLDggQEAKIAkJNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBl
UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVByb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdBU01QbGFuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01QbGFuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXQVNNUGxhbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNUGxhbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNt
UGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2Fz
bVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0
RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQx
RkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGgg
PSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zNTIyLDMyICszNTIyLDMyIEBACiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0
NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM1MjlBNEIxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTU1lbW9yeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBX
YXNtTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21NZW1vcnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNC
IC8qIFdhc21NZW1vcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbU1lbW9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNzBCNEYzMUJG
MjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzcwQjRGNDFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJE
MzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJh
eVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJNTM5RUIwNzExRDU1M0RGODAwQzgyRUY3IC8q
IHRlc3RXQVNNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RX
QVNNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM5RUIwNzExRDU1M0RGODAw
QzgyRUY3IC8qIHRlc3RXYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IHRlc3RXYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwODAx
RDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNNICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0V0FTTTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dh
c21BZGRyZXNzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNt
QWRkcmVzc1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21BZGRyZXNzVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFk
ZHJlc3NWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dh
c21BZGRyZXNzVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpT
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVNlY3Rpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVu
Y3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1bmN0
aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzRjQwRThDMUQ1OTAx
RjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdBU01QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGNDBFOEUx
RDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01CM0lSR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU9wcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5l
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGNDBFOTQxRDVBN0FFRjAwOTlB
MUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0FTTU1vZHVsZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0Y0
MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2VjdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8q
IFdhc21GdW5jdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
YXNtRnVuY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBF
OEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUIzSVJHZW5lcmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV2Fz
bU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNt
QjNJUkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQjNJ
UkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5NDFENUE3
QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyog
SW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5
MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBl
TG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZlbnRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTUNhbGxpbmdD
b252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGRDA0RDIxRDdB
QjE4NzAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXQVNNQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29u
dmVudGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0ZEMDRE
MjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5k
eWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliZWRpdC5keWxpYjsgcGF0aCA9IC91c3Iv
bGliL2xpYmVkaXQuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTVEQUZE
NkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSlNDLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RERERjQ0NjE0RkVFNzIyMDBC
NEZCNEQgLyogTExJbnREZXNpcmVkT2Zmc2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBMTEludERlc2lyZWRPZmZzZXRzLmg7IHBhdGggPSBMTEludE9mZnNldHMvTExJbnRE
ZXNpcmVkT2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAt
MzcwNiw5ICszNzA2LDkgQEAKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxl
RW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVF
bnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUY4RkMxQzFCOUZF
RDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTWF4
aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FT
TUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAv
KiBKU1dhc21Nb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXYXNtTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0I5OEQxMzUx
QjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dhc21Nb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQg
LyogSlNQcm9taXNlRGVmZXJyZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNQcm9taXNlRGVmZXJyZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhD
RTUxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNaWNyb3Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUy
OTUsNyArNTI5NSw3IEBACiAJCQkJRkVDQjhCMjkxRDI1Q0FCQjAwNkYyNDYzIC8qIHRlc3RhcGkt
ZnVuY3Rpb24tb3ZlcnJpZGVzLmpzICovLAogCQkJCTg2RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAv
KiB0ZXN0YXBpLm1tICovLAogCQkJCTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVn
RXhwLmNwcCAqLywKLQkJCQk1MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVzdFdBU00uY3Bw
ICovLAorCQkJCTUzOUVCMDcxMUQ1NTNERjgwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IHRlc3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU4
MTksMjMgKzU4MTksMjMgQEAKIAkJCQlBRDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseS5jcHAgKi8sCiAJCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHkuaCAqLywKIAkJCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8sCi0JCQkJ
N0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8sCi0JCQkJN0I5
OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovLAotCQkJCTUzRjQwRThF
MUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi8sCi0JCQkJNTNGNDBF
OTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggKi8sCi0JCQkJNTNGRDA0
RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCi0JCQkJ
NTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5oICovLAot
CQkJCTUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi8sCi0JCQkJN0JDNTQ3
RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLywKLQkJCQk1M0Y0MEU4QTFENTkw
MUJCMDA5OUExQjYgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8sCi0JCQkJNTM1NTU3MTUxRDlE
RkEzMjAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuY3BwICovLAotCQkJCTUzNTU1NzEzMUQ5RDlFQTUw
MDZENTgzQiAvKiBXQVNNTWVtb3J5LmggKi8sCi0JCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2
IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAotCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFC
NiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCi0JCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBC
IC8qIFdBU01QbGFuLmNwcCAqLywKLQkJCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV0FT
TVBsYW4uaCAqLywKLQkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5o
ICovLAotCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLywK
KwkJCQk3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXYXNtTW9kdWxlLmNwcCAqLywKKwkJ
CQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXYXNtTW9kdWxlLmggKi8sCisJCQkJNTNG
NDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmNwcCAqLywKKwkJCQk1
M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKKwkJCQk1
M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLywK
KwkJCQk1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmgg
Ki8sCisJCQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdhc21PcHMuaCAqLywKKwkJCQk3
QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICovLAorCQkJCTUzRjQwRThB
MUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKKwkJCQk1MzU1NTcx
NTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8sCisJCQkJNTM1NTU3MTMxRDlE
OUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLywKKwkJCQk1M0Y0MEU5NjFENUE3QkVDMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi8sCisJCQkJNTNGNDBFOTQxRDVBN0FFRjAw
OTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAqLywKKwkJCQk1MzEzNzRCRTFENUNFOTUwMDBB
RjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAorCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAv
KiBXYXNtUGxhbi5oICovLAorCQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFy
c2VyLmggKi8sCisJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5o
ICovLAogCQkJKTsKIAkJCXBhdGggPSB3YXNtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTc2MDMsNyArNzYwMyw3IEBACiAJCQkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIz
T3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZF
QzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBp
biBIZWFkZXJzICovLAotCQkJCTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxl
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyog
V2FzbU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAw
OThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNF
QTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTc2ODMs
NyArNzY4Myw3IEBACiAJCQkJQkMxOEMzRkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyQ2Fs
bEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkgLyog
RGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjExODJCN0Ew
NDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJREM5QTBDMUYxRDJEOUNCMTAwODUxMjRFIC8qIEIzQ2FzZUNvbGxlY3Rpb25Jbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVi
dWdnZXJTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0
IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICovLApAQCAtNzg0Myw3ICs3ODQzLDcgQEAKIAkJCQkw
RjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1
enouaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdP
U1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1M0Y0MEU4RDFENTkw
MUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFOEQx
RDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDBF
NEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtODAwOSw3ICs4MDA5LDcgQEAK
IAkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFGMTdCNkI1
NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTUzMTM3NEJEMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXQVNNUGxhbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5ODFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0RThFQjAxOEJGRkJCQjAwNTU2RDI4IC8qIEdDU2VnbWVu
dGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtODA2Myw3ICs4MDYzLDcgQEAKIAkJCQkxNDJF
MzEzODEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0NzgyOTdCMTM3OUU4QTgwMEE3QzJBMyAvKiBIYW5kbGVUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUzNTU1NzE0MUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNEJBN0E5ODEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzMkJEMTExQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29s
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkRBNzc4MzE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElu
bGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODIzNyw3ICs4MjM3LDcgQEAKIAkJCQkwRjJCNjZG
NjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNG
NDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFs
T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMx
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMz
QTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTgzMDUsNyArODMwNSw3IEBACiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAw
MTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxMjIw
MjcxQkU3RjU4QzAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUzRjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3Bz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV2FzbU9w
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlEOUUxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8q
IENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLApAQCAtODM0MSw3ICs4MzQxLDcgQEAKIAkJCQlC
QzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTdCOThEMTM3MUI2MENENjIwMDIzQjFBNCAv
KiBKU1dBU01Nb2R1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCOThEMTM3MUI2MENENjIwMDIz
QjFBNCAvKiBKU1dhc21Nb2R1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCURDNjA1QjVFMUNFMjZF
QTIwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FF
ODE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4
MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLApAQCAtODM1Nyw3ICs4MzU3LDcgQEAKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAy
QzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5
REEwMEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUzRjQwRTkzMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkUwRTE2RkNFMTAwQjM0NDYwIC8qIExleGVy
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENGM0Q1NkIxQ0QyOTQ3MjAwM0Q1QzY1IC8qIExh
enlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTg3QTAyMUJG
QkU1NjEwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODYw
Nyw3ICs4NjA3LDcgQEAKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNGNjcgLyogQjNE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzJGRjFFQTFEQTc1NzFDMDBBOEJGMjEg
LyogRE9NSklUU2xvd1BhdGhDYWxscy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGRDA0RDQxRDdB
QjI5MTAwMzI4N0QzIC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTNGRDA0RDQxRDdBQjI5MTAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI4MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAq
LywKQEAgLTg2NjgsNyArODY2OCw3IEBACiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8q
IFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1F
bnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0ND
IC8qIFZNRW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0JDNTQ3RDMxQjY5NTlBMTAw
OTU5QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQzU0N0QzMUI2OTU5
QTEwMDk1OUI1OCAvKiBXYXNtRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFERDFD
NEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCQkQ5QTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTIxMSw3ICs5MjExLDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNl
OwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTUz
OUVCMDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V0FTTS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1MzlFQjA4MTFENTU2MDhBMDBDODJFRjcgLyogdGVzdFdhc20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC05NDI3LDcgKzk0MjcsNyBAQAogCQkJCTBGNUExMjczMTkyRDlGREYwMDg3NjRBMyAvKiBE
RkdEb2VzR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNC
IC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1
REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MzU1NTcxNjFEOURGQTMy
MDA2RDU4M0IgLyogV0FTTU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzU1NTcxNjFE
OURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhG
MTQzMzFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NDU0LDcgKzk0NTQsNyBAQAogCQkJCTBGQzk3RjNGMTgy
MDIxMTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVBMEM0MDIxQ0REN0QxRDAwNDgxOTkxIC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3M0E1MzVBMTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV0FT
TUNhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzRkQwNEQzMUQ3QUIy
NzcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjJGMkFBMzcxQjBCRURFMzAwNjEwQzdBIC8qIERGR0xhenlOb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RDlBMjk3MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjQyLDcg
Kzk2NDIsNyBAQAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhy
ZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAv
KiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0
MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUz
MTM3NEJGMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXQVNNUGxhbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0
M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk4MjEs
NyArOTgyMSw3IEBACiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJl
Zi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
aXJ0dWFsTWFjaGluZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTdCOThEMTM2MUI2MENENUYwMDIz
QjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0I5OEQxMzYxQjYw
Q0Q1RjAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NB
M0FFNzE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA0Myw3ICsxMDA0Myw3IEBACiAJCQkJQUQyRkND
MDIxREI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxODdBMDExQkZCRTU1RTAwMzhCQkNBIC8qIEpJVE11
bEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1M0Y0MEU4RjFENTkwMjgyMDA5OUEx
QjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNGNDBFOEYx
RDU5MDI4MjAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0RTdE
IC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA1NCw3ICsxMDA1NCw3IEBA
CiAJCQkJQTdDQTNBRTMxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjMzOERGOTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBX
ZWFrTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUEx
QjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0Y0MEU5NzFE
NUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0NBM0FFNTE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5jcHAKaW5kZXggZmVmNDQ4ODQ4M2Y1YTg3Mjg3ZGRiNzNjYWQ3M2M1NzEwY2Y4
YjM2MS4uYTlmYTdkZDY1ZTUxZGZlNzI5ZDNkODZhYjZiYmUzNmUwNDQ5YzM2OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCkBAIC00Miw3ICs0Miw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU19FWFBPUlRfUFJJVkFURSB2
bUVudHJ5VG9XQVNNKHZvaWQqIGNvZGUsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIGZyYW1lKQor
RW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2Rl
LCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gdm1FbnRyeVRv
SmF2YVNjcmlwdChjb2RlLCB2bSwgZnJhbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuaAppbmRleCA3ZThlNGVhODVlZTcyMDMwYTNkOTU3OWU3MGJhY2UzYzVm
YWUxNGQ3Li5mYzk3NDJjNDJhYTU4NDJlNDRiN2QxZDJiMzQ0ZDQ4OGQ5N2YzODViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApAQCAtMzgsNyArMzgsNyBAQCBl
eHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUodm9pZCosIFZN
KiwgUHJvdG9DYWxsRnJhbWUqKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZB
VEUgdm1FbnRyeVRvV0FTTSh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOworRW5jb2RlZEpT
VmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeVRvV2FzbSh2b2lkKiwgVk0qLCBQcm90b0Nh
bGxGcmFtZSopOwogCiBuYW1lc3BhY2UgTExJbnQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDM0N2NmZGVlODIyZDYwN2RhMmJlOTE0MjA3
NTRmYTZjZmM3ZDNjNTcuLmI0OTk4NjZhODBiM2M1YjNiMzI2ZWMzYmQ5ZTJlOWM2ZjljNmJlOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCisjaW5jbHVk
ZSAiSlNXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVk
ZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCkBAIC03NDcsNyArNzQ3LDcg
QEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2Rl
KAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4
ZWN1dGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxl
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSkgfTsKIAotV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUoVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4KQorV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4
ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV2FzbU1vZHVsZSog
bW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQogICAgIDogRXhlY3V0YWJsZUJhc2Uodm0s
IHZtLndlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNf
Tk9UX0NPTVBJTEVELCBOb0ludHJpbnNpYykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAs
IG1fbW9kdWxlKHZtLCB0aGlzLCBtb2R1bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgKaW5kZXggOWMzNTU5NjA1ZTcyMWI3YWE2YmZjMWRlMzE2ZDcyMzNjZDQ5
NmY1OS4uMWQyM2IxNTlhNDU4MTVjMjUwMjU3ODI0Njk0MmYwMWY4YTY5MmI5MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNDYsNyArNDYsNyBAQCBj
bGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBFdmFsQ29kZUJsb2NrOwogY2xhc3MgRnVuY3Rpb25Db2Rl
QmxvY2s7CiBjbGFzcyBKU1Njb3BlOwotY2xhc3MgSlNXQVNNTW9kdWxlOworY2xhc3MgSlNXYXNt
TW9kdWxlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jazsKIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CkBAIC03MTksNyArNzE5LDcgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBjcmVh
dGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorICAgIHN0YXRpYyBXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNXYXNtTW9kdWxl
KiBtb2R1bGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBXZWJBc3Nl
bWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxX
ZWJBc3NlbWJseUV4ZWN1dGFibGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseUV4ZWN1dGFibGUodm0s
IHNvdXJjZSwgbW9kdWxlLCBmdW5jdGlvbkluZGV4KTsKICAgICAgICAgZXhlY3V0YWJsZS0+Zmlu
aXNoQ3JlYXRpb24odm0pOwpAQCAtNzQ0LDEyICs3NDQsMTIgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKLSAgICBXZWJBc3NlbWJseUV4ZWN1
dGFibGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNXQVNNTW9kdWxlKiwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCk7CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNl
Q29kZSYsIEpTV2FzbU1vZHVsZSosIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgU291
cmNlQ29kZSBtX3NvdXJjZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNXQVNNTW9kdWxlPiBtX21vZHVs
ZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNXYXNtTW9kdWxlPiBtX21vZHVsZTsKICAgICB1bnNpZ25l
ZCBtX2Z1bmN0aW9uSW5kZXg7CiAKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlDb2RlQmxv
Y2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0V0FTTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdBU00uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTc2ZWM0YTVhZTU2ODExZmVlMDdkOWJjYTM0ZDZh
NDIyMjY5YTkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5j
bHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJMTEludFRodW5rcy5oIgotI2lu
Y2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiVk0uaCIKLSNpbmNsdWRlICJXQVNN
TWVtb3J5LmgiCi0jaW5jbHVkZSAiV0FTTVBsYW4uaCIKLQotI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+Ci0jaW5jbHVkZSA8d3RmL0xFQkRlY29kZXIuaD4KLQotY2xhc3MgQ29tbWFuZExpbmUgewot
cHVibGljOgotICAgIENvbW1hbmRMaW5lKGludCBhcmdjLCBjaGFyKiogYXJndikKLSAgICB7Ci0g
ICAgICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YpOwotICAgIH0KLQotICAgIFZlY3RvcjxT
dHJpbmc+IG1fYXJndW1lbnRzOwotICAgIGJvb2wgbV9ydW5MRUJUZXN0cyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX3J1bldBU01UZXN0cyB7IGZhbHNlIH07Ci0KLSAgICB2b2lkIHBhcnNlQXJndW1l
bnRzKGludCwgY2hhcioqKTsKLX07Ci0KLXN0YXRpYyBOT19SRVRVUk4gdm9pZCBwcmludFVzYWdl
U3RhdGVtZW50KGJvb2wgaGVscCA9IGZhbHNlKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiVXNh
Z2U6IHRlc3RXQVNNIFtvcHRpb25zXVxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIC1ofC0t
aGVscCAgUHJpbnRzIHRoaXMgaGVscCBtZXNzYWdlXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
IiAgLWx8LS1sZWIgICBSdW5zIHRoZSBMRUIgZGVjb2RlciB0ZXN0c1xuIik7Ci0gICAgZnByaW50
ZihzdGRlcnIsICIgIC13fC0td2ViICAgUnVuIHRoZSBXQVNNIHRlc3RzXG4iKTsKLSAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7Ci0KLSAgICBleGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElU
X0ZBSUxVUkUpOwotfQotCi12b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCi17Ci0gICAgaW50IGkgPSAxOwotCi0gICAgZm9yICg7IGkgPCBhcmdj
OyArK2kpIHsKLSAgICAgICAgY29uc3QgY2hhciogYXJnID0gYXJndltpXTsKLSAgICAgICAgaWYg
KCFzdHJjbXAoYXJnLCAiLWgiKSB8fCAhc3RyY21wKGFyZywgIi0taGVscCIpKQotICAgICAgICAg
ICAgcHJpbnRVc2FnZVN0YXRlbWVudCh0cnVlKTsKLQotICAgICAgICBpZiAoIXN0cmNtcChhcmcs
ICItbCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1sZWIiKSkKLSAgICAgICAgICAgIG1fcnVuTEVCVGVz
dHMgPSB0cnVlOwotCi0gICAgICAgIGlmICghc3RyY21wKGFyZywgIi13IikgfHwgIXN0cmNtcChh
cmcsICItLXdlYiIpKQotICAgICAgICAgICAgbV9ydW5XQVNNVGVzdHMgPSB0cnVlOwotICAgIH0K
LQotICAgIGZvciAoOyBpIDwgYXJnYzsgKytpKQotICAgICAgICBtX2FyZ3VtZW50cy5hcHBlbmQo
YXJndltpXSk7Ci0KLX0KLQotU3RhdGljTG9jayBjcmFzaExvY2s7Ci0KLSNkZWZpbmUgQ0hFQ0tf
RVEoeCwgeSkgZG8geyBcCi0gICAgICAgIGF1dG8gX194ID0gKHgpOyBcCi0gICAgICAgIGF1dG8g
X195ID0gKHkpOyBcCi0gICAgICAgIGlmIChfX3ggPT0gX195KSBcCi0gICAgICAgIGJyZWFrOyBc
Ci0gICAgICAgIGNyYXNoTG9jay5sb2NrKCk7IFwKLSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9u
RmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIHRvQ1N0cmlu
ZygjeCAiID09ICIgI3ksICIgKCIgI3ggIiA9PSAiLCBfX3gsICIsICIgI3kgIiA9PSAiLCBfX3ks
ICIpIikuZGF0YSgpKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSB3aGlsZSAoZmFsc2Up
Ci0KLSNkZWZpbmUgRk9SX0VBQ0hfVU5TSUdORURfTEVCX1RFU1QobWFjcm8pIFwKLSAgICAvKiBT
aW1wbGUgdGVzdHMgdGhhdCB1c2UgYWxsIHRoZSBiaXRzIGluIHRoZSBhcnJheSAqLyBcCi0gICAg
bWFjcm8oKHsgMHgwNyB9KSwgMCwgdHJ1ZSwgMHg3bHUsIDFsdSkgXAotICAgIG1hY3JvKCh7IDB4
NzcgfSksIDAsIHRydWUsIDB4NzdsdSwgMWx1KSBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHgwNyB9
KSwgMCwgdHJ1ZSwgMHgzODBsdSwgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHg4OSwgMHgxMiB9KSwg
MCwgdHJ1ZSwgMHg5MDlsdSwgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHgwMiB9
KSwgMCwgdHJ1ZSwgMHg4MmYzbHUsIDNsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4
ZmYsIDB4NzQgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0bHUpIFwKLSAgICBtYWNybygoeyAw
eGYzLCAweDg1LCAweGZmLCAweGY0LCAweDdmIH0pLCAwLCB0cnVlLCAweGZlOWZjMmYzbHUsIDVs
dSkgXAotICAgIC8qIFRlc3Qgd2l0aCBleHRyYSB0cmFpbGluZyBudW1iZXJzICovIFwKLSAgICBt
YWNybygoeyAweDA3LCAweDgwIH0pLCAwLCB0cnVlLCAweDdsdSwgMWx1KSBcCi0gICAgbWFjcm8o
KHsgMHgwNywgMHg3NSB9KSwgMCwgdHJ1ZSwgMHg3bHUsIDFsdSkgXAotICAgIG1hY3JvKCh7IDB4
ZjMsIDB4ODUsIDB4ZmYsIDB4NzQsIDB4NDMgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0bHUp
IFwKLSAgICBtYWNybygoeyAweGYzLCAweDg1LCAweGZmLCAweDc0LCAweDgwIH0pLCAwLCB0cnVl
LCAweGU5ZmMyZjNsdSwgNGx1KSBcCi0gICAgLyogVGVzdCB3aXRoIHByZWNlZWRpbmcgbnVtYmVy
cyAqLyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkg
XAotICAgIG1hY3JvKCh7IDB4MDMsIDB4MDcgfSksIDEsIHRydWUsIDB4N2x1LCAybHUpIFwKLSAg
ICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweDY3LCAweDc5LCAweDc3IH0pLCA1LCB0cnVl
LCAweDc3bHUsIDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4
ODQsIDB4NzcgfSksIDUsIHRydWUsIDB4NzdsdSwgNnVsKSBcCi0gICAgbWFjcm8oKHsgMHhmMiwg
MHg1MywgMHg0MywgMHhmMywgMHg4NSwgMHgwMiB9KSwgMywgdHJ1ZSwgMHg4MmYzbHUsIDZsdSkg
XAotICAgIC8qIFRlc3QgaW4gdGhlIG1pZGRsZSAqLyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgw
NywgMHg4OSB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAotICAgIG1hY3JvKCh7IDB4MDMsIDB4
MDcsIDB4MjMgfSksIDEsIHRydWUsIDB4N2x1LCAybHUpIFwKLSAgICBtYWNybygoeyAweGYyLCAw
eDUzLCAweDQzLCAweDY3LCAweDc5LCAweDc3LCAweDQzIH0pLCA1LCB0cnVlLCAweDc3bHUsIDZs
dSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4ODQsIDB4NzcsIDB4
ZjkgfSksIDUsIHRydWUsIDB4NzdsdSwgNmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1Mywg
MHg0MywgMHhmMywgMHg4NSwgMHgwMiwgMHhhNCB9KSwgMywgdHJ1ZSwgMHg4MmYzbHUsIDZsdSkg
XAotICAgIC8qIFRlc3QgZGVjb2RlIHRvbyBsb25nICovIFwKLSAgICBtYWNybygoeyAweDgwLCAw
eDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfSksIDAsIGZhbHNlLCAweDBsdSwgMGx1KSBcCi0g
ICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhmZn0pLCAx
LCBmYWxzZSwgMHgwbHUsIDBsdSkgXAotICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4
OGEsIDB4OWEsIDB4YTMsIDB4ZmZ9KSwgMCwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKLSAgICAvKiBU
ZXN0IGRlY29kZSBvZmYgZW5kIG9mIGFycmF5ICovIFwKLSAgICBtYWNybygoeyAweDgwLCAweDgw
LCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDIsIGZhbHNlLCAweDBsdSwgMGx1KSBc
Ci0KLQotI2RlZmluZSBURVNUX1VOU0lHTkVEX0xFQl9ERUNPREUoaW5pdCwgc3RhcnRPZmZzZXQs
IGV4cGVjdGVkU3RhdHVzLCBleHBlY3RlZFJlc3VsdCwgZXhwZWN0ZWRPZmZzZXQpIFwKLSAgICB7
IFwKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0
OyBcCi0gICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAotICAgICAgICB1aW50
MzJfdCByZXN1bHQ7IFwKLSAgICAgICAgYm9vbCBzdGF0dXMgPSBXVEY6OkxFQkRlY29kZXI6OmRl
Y29kZVVJbnQzMih2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpLCBvZmZzZXQsIHJlc3VsdCk7
IFwKLSAgICAgICAgQ0hFQ0tfRVEoc3RhdHVzLCBleHBlY3RlZFN0YXR1cyk7IFwKLSAgICAgICAg
aWYgKGV4cGVjdGVkU3RhdHVzKSB7IFwKLSAgICAgICAgICAgIENIRUNLX0VRKHJlc3VsdCwgZXhw
ZWN0ZWRSZXN1bHQpOyBcCi0gICAgICAgICAgICBDSEVDS19FUShvZmZzZXQsIGV4cGVjdGVkT2Zm
c2V0KTsgXAotICAgICAgICB9IFwKLSAgICB9OwotCi0KLSNkZWZpbmUgRk9SX0VBQ0hfU0lHTkVE
X0xFQl9URVNUKG1hY3JvKSBcCi0gICAgLyogU2ltcGxlIHRlc3RzIHRoYXQgdXNlIGFsbCB0aGUg
Yml0cyBpbiB0aGUgYXJyYXkgKi8gXAotICAgIG1hY3JvKCh7IDB4MDcgfSksIDAsIHRydWUsIDB4
NywgMWx1KSBcCi0gICAgbWFjcm8oKHsgMHg3NyB9KSwgMCwgdHJ1ZSwgLTB4OSwgMWx1KSBcCi0g
ICAgbWFjcm8oKHsgMHg4MCwgMHgwNyB9KSwgMCwgdHJ1ZSwgMHgzODAsIDJsdSkgXAotICAgIG1h
Y3JvKCh7IDB4ODksIDB4MTIgfSksIDAsIHRydWUsIDB4OTA5LCAybHUpIFwKLSAgICBtYWNybygo
eyAweGYzLCAweDg1LCAweDAyIH0pLCAwLCB0cnVlLCAweDgyZjMsIDNsdSkgXAotICAgIG1hY3Jv
KCh7IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4NzQgfSksIDAsIHRydWUsIDB4ZmU5ZmMyZjMsIDRsdSkg
XAotICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4ZjQsIDB4N2YgfSksIDAsIHRydWUs
IDB4ZmU5ZmMyZjMsIDVsdSkgXAotICAgIC8qIFRlc3Qgd2l0aCBleHRyYSB0cmFpbGluZyBudW1i
ZXJzICovIFwKLSAgICBtYWNybygoeyAweDA3LCAweDgwIH0pLCAwLCB0cnVlLCAweDcsIDFsdSkg
XAotICAgIG1hY3JvKCh7IDB4MDcsIDB4NzUgfSksIDAsIHRydWUsIDB4NywgMWx1KSBcCi0gICAg
bWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCwgMHg0MyB9KSwgMCwgdHJ1ZSwgMHhmZTlm
YzJmMywgNGx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCwgMHg4MCB9
KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywgNGx1KSBcCi0gICAgLyogVGVzdCB3aXRoIHByZWNlZWRp
bmcgbnVtYmVycyAqLyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3
LCAybHUpIFwKLSAgICBtYWNybygoeyAweDAzLCAweDA3IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkg
XAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4NjcsIDB4NzksIDB4NzcgfSksIDUs
IHRydWUsIC0weDksIDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4Zjcs
IDB4ODQsIDB4NzcgfSksIDUsIHRydWUsIC0weDksIDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIs
IDB4NTMsIDB4NDMsIDB4ZjMsIDB4ODUsIDB4MDIgfSksIDMsIHRydWUsIDB4ODJmMywgNmx1KSBc
Ci0gICAgLyogVGVzdCBpbiB0aGUgbWlkZGxlICovIFwKLSAgICBtYWNybygoeyAweGYzLCAweDA3
LCAweDg5IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkgXAotICAgIG1hY3JvKCh7IDB4MDMsIDB4MDcs
IDB4MjMgfSksIDEsIHRydWUsIDB4NywgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1Mywg
MHg0MywgMHg2NywgMHg3OSwgMHg3NywgMHg0MyB9KSwgNSwgdHJ1ZSwgLTB4OSwgNmx1KSBcCi0g
ICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NywgMHhmOSB9KSwg
NSwgdHJ1ZSwgLTB4OSwgNmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhm
MywgMHg4NSwgMHgwMiwgMHhhNCB9KSwgMywgdHJ1ZSwgMHg4MmYzLCA2bHUpIFwKLSAgICAvKiBU
ZXN0IGRlY29kZSB0b28gbG9uZyAqLyBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHg4MCwg
MHg4MCwgMHg4MCwgMHg4MH0pLCAwLCBmYWxzZSwgMHgwLCAwbHUpIFwKLSAgICBtYWNybygoeyAw
eDgwLCAweDgwLCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDEsIGZhbHNlLCAweDAs
IDBsdSkgXAotICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEsIDB4OWEsIDB4YTMs
IDB4ZmZ9KSwgMCwgZmFsc2UsIDB4MCwgMGx1KSBcCi0gICAgLyogVGVzdCBkZWNvZGUgb2ZmIGVu
ZCBvZiBhcnJheSAqLyBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5
YSwgMHhhMywgMHhmZn0pLCAyLCBmYWxzZSwgMHgwLCAwbHUpIFwKLQotCi0jZGVmaW5lIFRFU1Rf
U0lHTkVEX0xFQl9ERUNPREUoaW5pdCwgc3RhcnRPZmZzZXQsIGV4cGVjdGVkU3RhdHVzLCBleHBl
Y3RlZFJlc3VsdCwgZXhwZWN0ZWRPZmZzZXQpIFwKLSAgICB7IFwKLSAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBcCi0gICAgICAgIHNpemVfdCBv
ZmZzZXQgPSBzdGFydE9mZnNldDsgXAotICAgICAgICBpbnQzMl90IHJlc3VsdDsgXAotICAgICAg
ICBib29sIHN0YXR1cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50MzIodmVjdG9yLmRhdGEo
KSwgdmVjdG9yLnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCi0gICAgICAgIENIRUNLX0VRKHN0
YXR1cywgZXhwZWN0ZWRTdGF0dXMpOyBcCi0gICAgICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBc
Ci0gICAgICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0gZXhwZWN0ZWRSZXN1bHQ7IFwKLSAgICAg
ICAgICAgIENIRUNLX0VRKHJlc3VsdCwgZXhwZWN0ZWQpOyBcCi0gICAgICAgICAgICBDSEVDS19F
UShvZmZzZXQsIGV4cGVjdGVkT2Zmc2V0KTsgXAotICAgICAgICB9IFwKLSAgICB9OwotCi0KLXN0
YXRpYyB2b2lkIHJ1bkxFQlRlc3RzKCkKLXsKLSAgICBGT1JfRUFDSF9VTlNJR05FRF9MRUJfVEVT
VChURVNUX1VOU0lHTkVEX0xFQl9ERUNPREUpCi0gICAgRk9SX0VBQ0hfU0lHTkVEX0xFQl9URVNU
KFRFU1RfU0lHTkVEX0xFQl9ERUNPREUpCi19Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0K
LXN0YXRpYyBKU0M6OlZNKiB2bTsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVz
cGFjZSBXQVNNOwotdXNpbmcgbmFtZXNwYWNlIEIzOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
VCBpbnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0ciwgc3RkOjppbml0aWFsaXplcl9saXN0
PEpTVmFsdWU+IGFyZ3MpCi17Ci0gICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50OwotICAgIC8vIFNp
bmNlIHZtRW50cnlUb0phdmFTY3JpcHQgZXhwZWN0cyBhIHRoaXMgdmFsdWUgd2UgY2xhaW0gdGhl
cmUgaXMgb25lLi4uIHRoZXJlIGlzbid0LgotICAgIGludCBhcmdDb3VudCA9IDE7Ci0gICAgSlNW
YWx1ZSogcmVtYWluaW5nQXJndW1lbnRzID0gbnVsbHB0cjsKLSAgICBpZiAoYXJncy5zaXplKCkp
IHsKLSAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzID0gY29uc3RfY2FzdDxKU1ZhbHVlKj4oYXJn
cy5iZWdpbigpKTsKLSAgICAgICAgZmlyc3RBcmd1bWVudCA9ICpyZW1haW5pbmdBcmd1bWVudHM7
Ci0gICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50cysrOwotICAgICAgICBhcmdDb3VudCA9IGFyZ3Mu
c2l6ZSgpOwotICAgIH0KLQotICAgIFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwotICAg
IHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgbnVsbHB0ciwgZmlyc3RBcmd1bWVudCwgYXJn
Q291bnQsIHJlbWFpbmluZ0FyZ3VtZW50cyk7Ci0KLSAgICAvLyBUaGlzIHdvbid0IHdvcmsgZm9y
IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBidXQgd2UgZG9uJ3QgaGF2ZSB0aG9zZSB5ZXQuCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZtRW50cnlUb1dBU00ocHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIHZtLCAmcHJvdG9DYWxsRnJhbWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQg
aW52b2tlKGNvbnN0IENvbXBpbGF0aW9uJiBjb2RlLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNW
YWx1ZT4gYXJncykKLXsKLSAgICByZXR1cm4gaW52b2tlPFQ+KGNvZGUuY29kZSgpLCBhcmdzKTsK
LX0KLQotaW5saW5lIEpTVmFsdWUgYm94KHVpbnQ2NF90IHZhbHVlKQotewotICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUodmFsdWUpOwotfQotCi0vLyBGb3Igbm93IHdlIGlubGluZSB0aGUgdGVz
dCBmaWxlcy4KLXN0YXRpYyB2b2lkIHJ1bldBU01UZXN0cygpCi17Ci0gICAgewotICAgICAgICAv
LyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAg
KG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgJHN1bTEyIChwYXJhbSBpMzIpIChwYXJh
bSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChw
YXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIp
IChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgMCkg
KGkzMi5hZGQgKGdldF9sb2NhbCAxKSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDIpIChpMzIuYWRkIChn
ZXRfbG9jYWwgMykgKGkzMi5hZGQgKGdldF9sb2NhbCA0KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDUp
IChpMzIuYWRkIChnZXRfbG9jYWwgNikgKGkzMi5hZGQgKGdldF9sb2NhbCA3KSAoaTMyLmFkZCAo
Z2V0X2xvY2FsIDgpIChpMzIuYWRkIChnZXRfbG9jYWwgOSkgKGkzMi5hZGQgKGdldF9sb2NhbCAx
MCkgKGdldF9sb2NhbCAxMSkpKSkpKSkpKSkpKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhw
b3J0ICJtdWx0MTIiKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoY2FsbCAkc3Vt
MTIgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAw
KSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDAp
IChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkp
KSkKLSAgICAgICAgLy8gICAgICkKLQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
ewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMSwgMHg5NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg0MCwKLSAg
ICAgICAgICAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4NDAsCi0gICAgICAg
ICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgzLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4YSwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2ZCwgMHg3NSwKLSAgICAgICAgICAgIDB4NmMs
IDB4NzQsIDB4MzEsIDB4MzIsIDB4MDAsIDB4MDEsIDB4MGEsIDB4Y2UsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDIsIDB4YTYsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAw
LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAyLCAweDE0LCAweDAzLCAw
eDE0LCAweDA0LCAweDE0LCAweDA1LCAweDE0LAotICAgICAgICAgICAgMHgwNiwgMHgxNCwgMHgw
NywgMHgxNCwgMHgwOCwgMHgxNCwgMHgwOSwgMHgxNCwgMHgwYSwgMHgxNCwgMHgwYiwgMHg0MCwg
MHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwKLSAgICAgICAgICAgIDB4NDAsIDB4NDAsIDB4NDAsIDB4
NDAsIDB4NDAsIDB4NDAsIDB4MDksIDB4MGYsIDB4OWQsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDAsIDB4MTQsIDB4MDAsCi0gICAgICAgICAgICAweDE0LCAweDAwLCAweDE0LCAweDAwLCAw
eDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAw
LCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwg
MHgwMCwgMHgxNiwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4g
cGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8
fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMjAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94
KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJv
eCgxMikgfSksIDc4KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3go
NSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94
KDEwMCkgfSksIDE2Nik7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAg
ICAgICAvLyAgICAgKGZ1bmMgJGZhYyAoZXhwb3J0ICJmYWMiKSAocGFyYW0gaTY0KSAocmVzdWx0
IGk2NCkKLSAgICAgICAgLy8gICAgICAoaWYgKGk2NC5lcXogKGdldF9sb2NhbCAwKSkKLSAgICAg
ICAgLy8gICAgICAgKHJldHVybiAoaTY0LmNvbnN0IDEpKQotICAgICAgICAvLyAgICAgICApCi0g
ICAgICAgIC8vICAgICAgKHJldHVybiAoaTY0Lm11bCAoZ2V0X2xvY2FsIDApIChjYWxsICRmYWMg
KGk2NC5zdWIgKGdldF9sb2NhbCAwKSAoaTY0LmNvbnN0IDEpKSkpKQotICAgICAgICAvLyAgICAg
ICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsK
LSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAg
ICAgICAgICAweDAxLCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAotICAgICAgICAg
ICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4NywgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg2NiwgMHg2MSwgMHg2MywKLSAgICAgICAgICAgIDB4
MDAsIDB4MDAsIDB4MGEsIDB4OWUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OTgs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAwLCAw
eDExLCAweDAwLCAweDY4LCAweDAzLCAweDAwLCAweDExLCAweDAxLCAweDA5LCAweDBmLCAweDE0
LCAweDAwLCAweDE0LCAweDAwLCAweDExLCAweDAxLAotICAgICAgICAgICAgMHg1YywgMHgxNiwg
MHgwMCwgMHg1ZCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigq
dm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxh
bi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBj
b21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAxKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0p
LCAyNCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAg
ICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAg
ICAgKGZ1bmMgKGV4cG9ydCAiZG91YmxlIikgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQpIChyZXR1
cm4gKGNhbGwgMSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkpKSkKLSAgICAgICAgLy8gICAg
IChmdW5jICRzdW0gKHBhcmFtIGk2NCkgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQpIChyZXR1cm4g
KGk2NC5hZGQgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCi0gICAgICAgIC8vICAgICAp
Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAw
eDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMiwg
MHgwMSwgMHgwMiwgMHg0MCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMywgMHg4
MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MDEs
IDB4MDUsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4
MDcsIDB4OGEsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAwLCAweDAxLCAweDA2
LCAweDY0LCAweDZmLCAweDc1LCAweDYyLCAweDZjLCAweDY1LCAweDAwLCAweDAwLCAweDBhLCAw
eDljLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMiwgMHg4OSwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNiwg
MHgwMSwgMHgwOSwKLSAgICAgICAgICAgIDB4MGYsIDB4ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NWIsIDB4MDksIDB4MGYKLSAgICAg
ICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxh
bi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJlc3VsdFsx
XSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29y
cmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9KSwg
MTYpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpIH0pLCAyKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAobWVtb3J5IDEpCi0gICAg
ICAgIC8vICAgICAoZnVuYyAkaWQgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0
dXJuIChnZXRfbG9jYWwgJHZhbHVlKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJp
ZC1jYWxsIikgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChjYWxsICRp
ZCAoZ2V0X2xvY2FsICR2YWx1ZSkpKSkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQs
IDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAz
LCAweDgzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA1LCAw
eDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwNywgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNywgMHg2OSwg
MHg2NCwKLSAgICAgICAgICAgIDB4MmQsIDB4NjMsIDB4NjEsIDB4NmMsIDB4NmMsIDB4MDAsIDB4
MDEsIDB4MGEsIDB4OTcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODUsIDB4ODAs
Ci0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDA5LCAw
eDBmLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLAotICAg
ICAgICAgICAgMHgxNiwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBs
YW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0g
MiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7Ci0gICAgICAgICAgICBk
YXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAg
ICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwg
eyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwg
MTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAgICAgIC8vICAobWVtb3J5IDEp
Ci0gICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIp
IChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgKGk2NC5zdG9yZSAo
Z2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgIChyZXR1cm4gKGk2
NC5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAgICkKLSAgICAgICAgLy8gICkK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4
NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAyLCAw
eDAxLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYs
IDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4
ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAweDM0LCAweDAzLCAw
eDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYiwgMHgwMywgMHgwMCwgMHgwOSwgMHgw
ZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAg
IGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAg
ICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsK
LSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMg
ZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAg
fQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gKG1vZHVs
ZQotICAgICAgICAvLyAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgKGZ1bmMgKGV4cG9ydCAiaTMy
X2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTMyKQot
ICAgICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkK
LSAgICAgICAgLy8gICAocmV0dXJuIChpMzIubG9hZCAoZ2V0X2xvY2FsICRwdHIpKSkKLSAgICAg
ICAgLy8gICApCi0gICAgICAgIC8vICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3Ig
PSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAw
LCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAot
ICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAg
ICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsCi0gICAgICAgICAg
ICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAw
eDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgw
MCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwg
MHgxNCwgMHgwMCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxNCwKLSAgICAgICAgICAgIDB4MDEsIDB4
MmEsIDB4MDIsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBs
YW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwg
IXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQg
dG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94
KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVk
IGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkK
LSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIndyaXRlX2FycmF5IikgKHBhcmFtICR4IGkz
MikgKHBhcmFtICRwIGkzMikgKHBhcmFtICRsZW5ndGggaTMyKSAobG9jYWwgJGkgaTMyKQotICAg
ICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAg
ICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAgKGxvb3AKLSAgICAgICAgLy8gICAgICAgIChicl9p
ZiAxIChpMzIuZ2VfdSAoZ2V0X2xvY2FsICRpKSAoZ2V0X2xvY2FsICRsZW5ndGgpKSkKLSAgICAg
ICAgLy8gICAgICAgIChpMzIuc3RvcmUgKGkzMi5hZGQgKGdldF9sb2NhbCAkcCkgKGkzMi5tdWwg
KGdldF9sb2NhbCAkaSkgKGkzMi5jb25zdCA0KSkpIChnZXRfbG9jYWwgJHgpKQotICAgICAgICAv
LyAgICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChnZXRfbG9jYWwg
JGkpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgKQotICAg
ICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAgICAgLy8gICAg
ICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7
Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAw
eDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAg
ICAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4MiwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAg
ICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAgICAgICAgICAw
eDY5LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAweDc5LCAweDAw
LCAweDAwLCAweDBhLCAweGIyLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwg
MHgwMSwgMHhhYywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgx
MCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAs
IDB4MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDEsIDB4
MTQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDIsCi0gICAgICAgICAgICAweDQwLCAweDE0LCAweDAw
LCAweDMzLCAweDAyLCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAw
eDAzLCAweDA2LCAweDAwLCAweDBmLAotICAgICAgICAgICAgMHgwZiwgMHgwOSwgMHgwZgotICAg
ICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5z
aXplKCkpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSA1OwotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzaXplb2YodWlu
dDMyX3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Qq
PihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3Ro
KSB9KTsKLSAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIENIRUNL
X0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwotICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zm
c2V0ICsgbGVuZ3RoXSwgMHUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDEwMHUp
OwotCi0gICAgICAgIGxlbmd0aCA9IDEwOwotICAgICAgICBvZmZzZXQgPSA1ICogc2l6ZW9mKHVp
bnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwotICAgICAgICBvZmZz
ZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAt
IDFdLCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7Ci0gICAgfQotCi0gICAgewot
ICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAg
ICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAid3JpdGVf
YXJyYXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAgaTMyKSAocGFyYW0gJGxlbmd0aCBpMzIp
IChsb2NhbCAkaSBpMzIpCi0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0
IDApKQotICAgICAgICAvLyAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAobG9vcAotICAg
ICAgICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChnZXRfbG9jYWwgJGkpIChnZXRfbG9j
YWwgJGxlbmd0aCkpKQotICAgICAgICAvLyAgICAgICAgKGkzMi5zdG9yZTggKGkzMi5hZGQgKGdl
dF9sb2NhbCAkcCkgKGdldF9sb2NhbCAkaSkpIChnZXRfbG9jYWwgJHgpKQotICAgICAgICAvLyAg
ICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChnZXRfbG9jYWwgJGkp
KSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgKQotICAgICAg
ICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAgICAgLy8gICAgICAp
Ci0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0g
ICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAw
LCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAg
ICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4MiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAgICAg
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAgICAgICAgICAweDY5
LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAweDc5LCAweDAwLCAw
eDAwLCAweDBhLCAweGFmLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgw
MSwgMHhhOSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwg
MHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4
MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDEsIDB4MTQs
IDB4MDMsIDB4NDAsIDB4MTQsIDB4MDAsCi0gICAgICAgICAgICAweDJlLCAweDAwLCAweDAwLCAw
eDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAweDAzLCAweDA2LCAweDAwLCAweDBm
LCAweDBmLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwg
dmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJl
c3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBp
bGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAg
ICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7Ci0gICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3go
bGVuZ3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7Ci0g
ICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIENIRUNLX0VR
KG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7Ci0KLSAgICAgICAgbGVuZ3RoID0gMTA7Ci0gICAg
ICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZz
ZXRdLCA1dSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAg
ICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAv
LyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0g
JHB0ciBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgICAgIChpMzIuc3RvcmU4IChnZXRf
bG9jYWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoaTMy
LmxvYWQ4X3MgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAgICAv
LyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAg
MHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4
NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDBiLCAweDY5LCAweDMzLAotICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2
YywgMHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwg
MHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MmUs
IDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAweDIwLCAweDAwLCAweDAwLCAw
eDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsK
LSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkg
ewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQo
cGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikg
fSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAg
ICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImkzMl9s
b2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGkz
Mi5zdG9yZTggKGkzMi5jb25zdCA4KSAoZ2V0X2xvY2FsICRpKSkKLSAgICAgICAgLy8gICAgICAo
cmV0dXJuIChpMzIubG9hZDhfcyAoaTMyLmNvbnN0IDgpKSkKLSAgICAgICAgLy8gICAgICApCi0g
ICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAg
ICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAw
eDAxLCAweDg2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAg
ICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDVmLCAw
eDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBh
LCAweDk1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLAotICAgICAgICAgICAgMHgwMSwgMHg4Ziwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHgy
ZSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKLSAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MDAs
IDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBd
KSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3Jy
ZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAg
ICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vIChtb2R1bGUKLSAgICAgICAgLy8gICht
ZW1vcnkgMSkKLSAgICAgICAgLy8gIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBhcmFt
ICRpIGkzMikgKHBhcmFtICRwdHIgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAoaTMy
LnN0b3JlIChnZXRfbG9jYWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8vICAgKHJl
dHVybiAoaTMyLmxvYWQgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8vICAgKQotICAgICAg
ICAvLyAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAg
MHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4
NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIs
IDB4MDIsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDBiLCAweDY5LCAweDMzLAotICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2
YywgMHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwg
MHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MzQs
IDB4MDMsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAweDJiLCAweDAzLCAweDAwLCAw
eDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsK
LSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkg
ewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAx
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KC0xMiksIGJveChwbGFuLm1lbW9yeS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2
NF90KSkgfSksIC0xMik7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKLSAgICAgICAgLy8gKG1vZHVsZQotICAgICAgICAvLyAgKG1lbW9yeSAxKQotICAgICAgICAv
LyAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0
ciBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9sb2NhbCAk
cHRyKSAoZ2V0X2xvY2FsICRpKSkKLSAgICAgICAgLy8gICAocmV0dXJuIChpMzIubG9hZCAoZ2V0
X2xvY2FsICRwdHIpKSkKLSAgICAgICAgLy8gICApCi0gICAgICAgIC8vICApCi0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAw
eDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgw
NSwgMHg4MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4
NjksIDB4MzMsCi0gICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0
LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAw
eDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxNCwK
LSAgICAgICAgICAgIDB4MDEsIDB4MmEsIDB4MDIsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAg
fTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5y
ZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikg
fSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAg
ICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIndyaXRl
X2FycmF5IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICRwIGkzMikgKHBhcmFtICRsZW5ndGggaTMy
KSAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25z
dCAwKSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAgKGxvb3AKLSAg
ICAgICAgLy8gICAgICAgIChicl9pZiAxIChpMzIuZ2VfdSAoZ2V0X2xvY2FsICRpKSAoZ2V0X2xv
Y2FsICRsZW5ndGgpKSkKLSAgICAgICAgLy8gICAgICAgIChpMzIuc3RvcmUgKGkzMi5hZGQgKGdl
dF9sb2NhbCAkcCkgKGkzMi5tdWwgKGdldF9sb2NhbCAkaSkgKGkzMi5jb25zdCA0KSkpIChnZXRf
bG9jYWwgJHgpKQotICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMy
LmNvbnN0IDEpIChnZXRfbG9jYWwgJGkpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAg
ICAgICAvLyAgICAgICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJl
dHVybikKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZk
LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MCwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwg
MHg4MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4Nzcs
IDB4NzIsCi0gICAgICAgICAgICAweDY5LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAw
eDcyLCAweDYxLCAweDc5LCAweDAwLCAweDAwLCAweDBhLCAweGIyLCAweDgwLCAweDgwLCAweDgw
LAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHhhYywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAg
ICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcs
IDB4MDEsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDIsCi0gICAgICAg
ICAgICAweDQwLCAweDE0LCAweDAwLCAweDMzLCAweDAyLCAweDAwLCAweDEwLCAweDAxLCAweDE0
LCAweDAzLCAweDQwLCAweDE1LCAweDAzLCAweDA2LCAweDAwLCAweDBmLAotICAgICAgICAgICAg
MHgwZiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZl
Y3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1
bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxl
IGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKHBsYW4ubWVtb3J5LT5zaXplKCkpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vz
bid0IGNyYXNoLgotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwotICAgICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0g
c3RhdGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBp
bnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50
MzJfdCk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwotICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBDSEVDS19FUShtZW1v
cnlbaSArIG9mZnNldF0sIDEwMHUpOwotCi0gICAgICAgIGxlbmd0aCA9IDEwOwotICAgICAgICBv
ZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5n
dGgpIH0pOwotICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgQ0hF
Q0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5
W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1
dSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAg
Ly8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAg
KGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAgaTMy
KSAocGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBpMzIpCi0gICAgICAgIC8vICAgICAgKHNl
dF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgIChibG9jawotICAgICAg
ICAvLyAgICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChn
ZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkpKQotICAgICAgICAvLyAgICAgICAgKGkz
Mi5zdG9yZTggKGkzMi5hZGQgKGdldF9sb2NhbCAkcCkgKGdldF9sb2NhbCAkaSkpIChnZXRfbG9j
YWwgJHgpKQotICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNv
bnN0IDEpIChnZXRfbG9jYWwgJGkpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAg
ICAvLyAgICAgICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVy
bikKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4
MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4
NzIsCi0gICAgICAgICAgICAweDY5LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcy
LCAweDYxLCAweDc5LCAweDAwLCAweDAwLCAweDBhLCAweGFmLCAweDgwLCAweDgwLCAweDgwLAot
ICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHhhOSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAg
ICAgICAgIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4
MDEsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTQsIDB4MDAsCi0gICAgICAgICAg
ICAweDJlLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAw
eDAzLCAweDA2LCAweDAwLCAweDBmLCAweDBmLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAg
ICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNp
emUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJN
b2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0go
KTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDU7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1l
bW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAg
ICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5
W29mZnNldCAtIDFdLCAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5n
dGhdLCAwdSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7Ci0KLSAgICAg
ICAgbGVuZ3RoID0gMTA7Ci0gICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9rZTx2b2lk
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBi
b3gobGVuZ3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1
KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hF
Q0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAv
LyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAg
KG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAo
cGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAg
ICAgIChpMzIuc3RvcmU4IChnZXRfbG9jYWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAg
IC8vICAgICAgKHJldHVybiAoaTMyLmxvYWQ4X3MgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAg
IC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0
MCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0g
ICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDY5LCAweDMzLAotICAgICAg
ICAgICAgMHgzMiwgMHg1ZiwgMHg2YywgMHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3
MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAg
IDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4
MDEsIDB4MTQsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAx
LCAweDIwLCAweDAwLCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxh
biBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAx
IHx8ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFp
bGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgfQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSks
IDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAg
IC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAg
IChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHJlc3VsdCBpMzIp
Ci0gICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTggKGkzMi5jb25zdCA4KSAoZ2V0X2xvY2FsICRp
KSkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChpMzIubG9hZDhfcyAoaTMyLmNvbnN0IDgpKSkK
LSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50
OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBj
LCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4
MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwg
MHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4
OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsIDB4MzIs
Ci0gICAgICAgICAgICAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAw
eDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLAotICAg
ICAgICAgICAgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwg
MHgwOCwgMHgxNCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKLSAgICAgICAg
ICAgIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQ
bGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9
IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBm
YWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwot
ICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAg
IChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5jICJkdW1iLWVxIiAocGFyYW0gJHggaTMyKSAo
cGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaWYgKGkzMi5lcSAo
Z2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICAgKHRoZW4gKGJy
IDApKQotICAgICAgICAvLyAgICAgICAoZWxzZSAocmV0dXJuIChpMzIuY29uc3QgMSkpKSkKLSAg
ICAgICAgLy8gICAgICAocmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgKQot
ICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAg
ICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAg
ICAgIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGIsIDB4ODAsCi0gICAgICAgICAgICAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDA3LCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJk
LCAweDY1LCAweDcxLCAweDAwLCAweDAwLCAweDBhLCAweDk5LAotICAgICAgICAgICAgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg5MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDAs
IDB4MDYsIDB4MDAsIDB4MDQsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MTAsIDB4MDAsIDB4
MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwot
ICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0
bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCg2KSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1
bmMgKGV4cG9ydCAiZHVtYi1sZXNzLXRoYW4iKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMy
KSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAo
aWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAg
ICAgICh0aGVuIChyZXR1cm4gKGkzMi5jb25zdCAwKSkpCi0gICAgICAgIC8vICAgICAgICAoZWxz
ZSAoaWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAg
ICAgICAgICAgICAgIChyZXR1cm4gKGkzMi5jb25zdCAxKSkpKSkKLSAgICAgICAgLy8gICAgICAg
KHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAg
ICAgICAgLy8gICAgICAgKGJyIDApCi0gICAgICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAg
ICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7
Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAw
eDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAg
ICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAg
ICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIs
IDB4MmQsIDB4NmMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAw
eDY4LCAweDYxLCAweDZlLCAweDAwLCAweDAwLCAweDBhLCAweGFjLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweGE2LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwg
MHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwMywgMHgw
MCwgMHgxMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgxNCwKLSAgICAgICAgICAgIDB4MDAsIDB4MTAs
IDB4MDAsIDB4NGQsIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MGYsIDB4
MTQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDEsCi0gICAgICAgICAgICAweDE1LCAweDAwLCAweDA2
LCAweDAwLCAweDBmLCAweDAwLCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFu
KCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFw
bGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRv
IGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgx
KSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
MSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94
KDIpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJv
eCg2KSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwotICAgIH0KLQotCi0g
ICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJy
ZXR1cm4taTMyIikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGkzMi5jb25zdCA1KSkpICkKLSAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAw
eDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhl
LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3Miwg
MHg2NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgw
MCwgMHgwMCwgMHgwYSwKLSAgICAgICAgICAgIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4
MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwot
ICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0
bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IH0pLCA1KTsKLSAgICB9Ci0KLQotICAgIHsKLSAg
ICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1bmMgKGV4cG9ydCAicmV0dXJuLWkz
MiIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25z
dCA2KSkpKSApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDg1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgw
MCwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMCwgMHgwNywgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4
MDEsIDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4Njks
IDB4MzMsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAgICAgICAgICAweDhlLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDg4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAw
LCAweDEwLCAweDA1LCAweDEwLCAweDA2LAotICAgICAgICAgICAgMHg0MCwgMHgwOSwgMHgwZgot
ICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlm
IChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAg
ICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0
IGkzMikgKHJldHVybiAoaTMyLmFkZCAoaTMyLmFkZCAoaTMyLmNvbnN0IDUpIChpMzIuY29uc3Qg
MykpIChpMzIuY29uc3QgMykpKSkgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
ewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAg
ICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAg
ICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAweDZl
LCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBhLAotICAgICAgICAgICAg
MHg5MSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwMywKLSAgICAgICAgICAgIDB4NDAs
IDB4MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWls
ZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7
Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVu
YyAoZXhwb3J0ICJyZXR1cm4taTMyIikgKHJlc3VsdCBpMzIpIChibG9jayAocmV0dXJuIChpMzIu
YWRkIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCAzKSkgKGkzMi5jb25zdCAzKSkp
KSAodW5yZWFjaGFibGUpKSApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0g
ICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAw
LCAweDAxLCAweDg1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAg
ICAgICAgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAg
IDB4MDAsIDB4MDEsIDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4
MmQsIDB4NjksIDB4MzMsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAgICAgICAgICAweDk1
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAwLCAweDAxLCAweDAwLCAweDEwLCAweDA1LAotICAgICAgICAgICAgMHgxMCwgMHgw
MywgMHg0MCwgMHgxMCwgMHgwMywgMHg0MCwgMHgwOSwgMHgwZiwgMHgwMCwgMHgwZgotICAgICAg
ICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFu
LnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAg
ICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgfSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgImFkZCIpIChwYXJhbSAkeCBpMzIpIChwYXJh
bSAkeSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgJHgpIChn
ZXRfbG9jYWwgJHkpKSkpICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAg
ICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAg
ICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAweDgwLAotICAgICAgICAgICAg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg2MSwgMHg2NCwgMHg2NCwgMHgwMCwgMHgw
MCwgMHgwYSwgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwKLSAgICAgICAgICAgIDB4MDEs
IDB4ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4
MDEsIDB4NDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZt
LCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4u
cmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29t
cGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0p
LCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9KSwgMTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0xKSwgYm94
KDEpfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJv
eCgxKSB9KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgfQotCi0gICAg
ewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAg
ICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAibG9jYWxzIikgKHBhcmFtICR4IGkzMikgKHJlc3Vs
dCBpMzIpIChsb2NhbCAkbnVtIGkzMikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRudW0g
KGdldF9sb2NhbCAkeCkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0X2xvY2FsICRudW0p
KQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4
MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAw
eDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhhLCAweDgw
LCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2YywgMHg2Ziwg
MHg2MywgMHg2MSwgMHg2YywgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg4MCwgMHg4
MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MTQsCi0g
ICAgICAgICAgICAweDAxLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVk
IHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSks
IDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMTApIH0pLCAxMCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1
bmMgKGV4cG9ydCAic3VtIikgKHBhcmFtICR4IGkzMikgKHJlc3VsdCBpMzIpIChsb2NhbCAkeSBp
MzIpCi0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkeSAoaTMyLmNvbnN0IDApKQotICAgICAg
ICAvLyAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAg
ICAgKGJyX2lmIDAgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKSkKLSAgICAg
ICAgLy8gICAgICAgIChzZXRfbG9jYWwgJHkgKGkzMi5hZGQgKGdldF9sb2NhbCAkeCkgKGdldF9s
b2NhbCAkeSkpKQotICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0
X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAxKQotICAg
ICAgICAvLyAgICAgICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJl
dHVybiAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICAp
Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAw
eDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNywgMHg4NywgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDMsIDB4NzMsIDB4NzUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YWUsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsCi0gICAgICAgICAgICAweGE4LCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDAxLCAweDAyLCAw
eDAwLCAweDAxLCAweDAwLAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0
ZCwgMHgwNywgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgxNSwgMHgwMSwg
MHgxNCwgMHgwMCwKLSAgICAgICAgICAgIDB4MTAsIDB4MDEsIDB4NDEsIDB4MTUsIDB4MDAsIDB4
MDYsIDB4MDEsIDB4MGYsIDB4MGYsIDB4MTQsIDB4MDEsIDB4MDksIDB4MGYKLSAgICAgICAgfTsK
LQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1
bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
TG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0p
LCAzKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDUwNTApOwotICAgIH0KLQotICAgIHsKLSAgICAgICAg
Ly8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAg
IChmdW5jIChleHBvcnQgImR1bWItbXVsdCIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIp
IChyZXN1bHQgaTMyKSAobG9jYWwgJHRvdGFsIGkzMikgKGxvY2FsICRpIGkzMikgKGxvY2FsICRq
IGkzMikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICR0b3RhbCAoaTMyLmNvbnN0IDApKQot
ICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8g
ICAgICAoYmxvY2sgKGxvb3AKLSAgICAgICAgLy8gICAgICAgICAgICAgIChicl9pZiAxIChpMzIu
ZXEgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkeCkpKQotICAgICAgICAvLyAgICAgICAgICAg
ICAgKHNldF9sb2NhbCAkaiAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgICAgICAgICAg
KHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRpKSAoaTMyLmNvbnN0IDEpKSkKLSAg
ICAgICAgLy8gICAgICAgICAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAgICAgICAgICAgKGJy
X2lmIDEgKGkzMi5lcSAoZ2V0X2xvY2FsICRqKSAoZ2V0X2xvY2FsICR5KSkpCi0gICAgICAgIC8v
ICAgICAgICAgICAgICAgKHNldF9sb2NhbCAkdG90YWwgKGkzMi5hZGQgKGdldF9sb2NhbCAkdG90
YWwpIChpMzIuY29uc3QgMSkpKQotICAgICAgICAvLyAgICAgICAgICAgICAgIChzZXRfbG9jYWwg
JGogKGkzMi5hZGQgKGdldF9sb2NhbCAkaikgKGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAg
ICAgICAgICAgICAgKGJyIDApCi0gICAgICAgIC8vICAgICAgICAgICAgICAgKQotICAgICAgICAv
LyAgICAgICAgICAgICAgKSkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9jYWwgJHRv
dGFsKSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZk
LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywg
MHg4ZCwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDksIDB4
NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NmQsIDB4NzUsIDB4NmMsIDB4NzQsIDB4MDAs
IDB4MDAsCi0gICAgICAgICAgICAweDBhLCAweGM3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweGMxLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAzLCAweDAxLCAweDEw
LAotICAgICAgICAgICAgMHgwMCwgMHgxNSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywg
MHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMCwgMHg0ZCwKLSAg
ICAgICAgICAgIDB4MDcsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MTQsIDB4MDMs
IDB4MTAsIDB4MDEsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MTQsCi0gICAgICAg
ICAgICAweDA0LCAweDE0LCAweDAxLCAweDRkLCAweDA3LCAweDAxLCAweDE0LCAweDAyLCAweDEw
LCAweDAxLCAweDQwLCAweDE1LCAweDAyLCAweDE0LCAweDA0LCAweDEwLAotICAgICAgICAgICAg
MHgwMSwgMHg0MCwgMHgxNSwgMHgwNCwgMHgwNiwgMHgwMCwgMHgwZiwgMHgwZiwgMHgwZiwgMHgx
NCwgMHgwMiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0s
IHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5y
ZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21w
aWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSks
IDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0p
LCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9
KSwgNCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
NikgfSksIDYwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAwMDApOwotICAgIH0K
LQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1
bGUKLSAgICAgICAgLy8gICAgIChmdW5jICJkdW1iLWxlc3MtdGhhbiIgKHBhcmFtICR4IGkzMikg
KHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGxvb3AKLSAgICAg
ICAgLy8gICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgICAoYmxvY2sKLSAgICAgICAgLy8g
ICAgICAgICAoYnJfaWYgMCAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChnZXRfbG9jYWwgJHkpKSkK
LSAgICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAgICApCi0gICAgICAg
IC8vICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgICApCi0g
ICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGJsb2NrCi0gICAgICAg
IC8vICAgICAgICAgKGJyX2lmIDAgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDAp
KSkKLSAgICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAgICApCi0gICAg
ICAgIC8vICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMSkpCi0gICAgICAgIC8vICAgICAgICAp
Ci0gICAgICAgIC8vICAgICAgIChzZXRfbG9jYWwgJHggKGkzMi5zdWIgKGdldF9sb2NhbCAkeCkg
KGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAg
ICApCi0gICAgICAgIC8vICAgICAgICh1bnJlYWNoYWJsZSkKLSAgICAgICAgLy8gICAgICApCi0g
ICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAg
ICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAw
eDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAg
ICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAgICAgIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQs
IDB4NmMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAw
eDYxLCAweDZlLCAweDAwLCAweDAwLCAweDBhLCAweGI5LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweGIzLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMCwg
MHgwMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgw
MSwgMHg0ZCwgMHgwNywgMHgwMCwgMHgwNiwKLSAgICAgICAgICAgIDB4MDEsIDB4MGYsIDB4MTAs
IDB4MDAsIDB4MDksIDB4MGYsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4
MTAsIDB4MDAsIDB4NGQsIDB4MDcsCi0gICAgICAgICAgICAweDAwLCAweDA2LCAweDAxLCAweDBm
LCAweDEwLCAweDAxLCAweDA5LCAweDBmLCAweDE0LCAweDAwLCAweDEwLCAweDAxLCAweDQxLCAw
eDE1LCAweDAwLCAweDA2LAotICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZgotICAg
ICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KDYpIH0pLCAwKTsKLSAgICB9Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIENvbW1hbmRMaW5l
IG9wdGlvbnMoYXJnYywgYXJndik7Ci0KLSAgICBpZiAob3B0aW9ucy5tX3J1bkxFQlRlc3RzKQot
ICAgICAgICBydW5MRUJUZXN0cygpOwotCi0gICAgaWYgKG9wdGlvbnMubV9ydW5XQVNNVGVzdHMp
IHsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwotICAgICAgICB2bSA9ICZKU0M6OlZNOjpjcmVhdGUoSlNDOjpMYXJnZUhlYXApLmxl
YWtSZWYoKTsKLSAgICAgICAgcnVuV0FTTVRlc3RzKCk7Ci0jZWxzZQotICAgICAgICBkYXRhTG9n
TG4oIldBU00gaXMgbm90IGVuYWJsZWQhIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIH0KLQotICAgIHJldHVybiBFWElU
X1NVQ0NFU1M7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2Fz
bS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4
MTMyMDczOGQyZjA0NDQ4ZjI2Yzg3ZmFlNWZiMDFiNWYzMzRmOGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCkBAIC0wLDAgKzEsMTIwNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5jbHVkZSAiUHJvdG9D
YWxsRnJhbWUuaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNp
bmNsdWRlICJXYXNtUGxhbi5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRl
IDx3dGYvTEVCRGVjb2Rlci5oPgorCitjbGFzcyBDb21tYW5kTGluZSB7CitwdWJsaWM6CisgICAg
Q29tbWFuZExpbmUoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorICAgIHsKKyAgICAgICAgcGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndik7CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4gbV9hcmd1
bWVudHM7CisgICAgYm9vbCBtX3J1bkxFQlRlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcnVu
V2FzbVRlc3RzIHsgZmFsc2UgfTsKKworICAgIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50LCBjaGFy
KiopOworfTsKKworc3RhdGljIE5PX1JFVFVSTiB2b2lkIHByaW50VXNhZ2VTdGF0ZW1lbnQoYm9v
bCBoZWxwID0gZmFsc2UpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogdGVzdFdhc20g
W29wdGlvbnNdXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWh8LS1oZWxwICBQcmludHMg
dGhpcyBoZWxwIG1lc3NhZ2VcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAtbHwtLWxlYiAg
IFJ1bnMgdGhlIExFQiBkZWNvZGVyIHRlc3RzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAg
LXd8LS13ZWIgICBSdW4gdGhlIFdhc20gdGVzdHNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAi
XG4iKTsKKworICAgIGV4aXQoaGVscCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7Cit9
CisKK3ZvaWQgQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJn
dikKK3sKKyAgICBpbnQgaSA9IDE7CisKKyAgICBmb3IgKDsgaSA8IGFyZ2M7ICsraSkgeworICAg
ICAgICBjb25zdCBjaGFyKiBhcmcgPSBhcmd2W2ldOworICAgICAgICBpZiAoIXN0cmNtcChhcmcs
ICItaCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oZWxwIikpCisgICAgICAgICAgICBwcmludFVzYWdl
U3RhdGVtZW50KHRydWUpOworCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi1sIikgfHwgIXN0
cmNtcChhcmcsICItLWxlYiIpKQorICAgICAgICAgICAgbV9ydW5MRUJUZXN0cyA9IHRydWU7CisK
KyAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLXciKSB8fCAhc3RyY21wKGFyZywgIi0td2ViIikp
CisgICAgICAgICAgICBtX3J1bldhc21UZXN0cyA9IHRydWU7CisgICAgfQorCisgICAgZm9yICg7
IGkgPCBhcmdjOyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd2W2ldKTsKKwor
fQorCitTdGF0aWNMb2NrIGNyYXNoTG9jazsKKworI2RlZmluZSBDSEVDS19FUSh4LCB5KSBkbyB7
IFwKKyAgICAgICAgYXV0byBfX3ggPSAoeCk7IFwKKyAgICAgICAgYXV0byBfX3kgPSAoeSk7IFwK
KyAgICAgICAgaWYgKF9feCA9PSBfX3kpIFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgY3Jh
c2hMb2NrLmxvY2soKTsgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgdG9DU3RyaW5nKCN4ICIgPT0gIiAj
eSwgIiAoIiAjeCAiID09ICIsIF9feCwgIiwgIiAjeSAiID09ICIsIF9feSwgIikiKS5kYXRhKCkp
OyBcCisgICAgICAgIENSQVNIKCk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBG
T1JfRUFDSF9VTlNJR05FRF9MRUJfVEVTVChtYWNybykgXAorICAgIC8qIFNpbXBsZSB0ZXN0cyB0
aGF0IHVzZSBhbGwgdGhlIGJpdHMgaW4gdGhlIGFycmF5ICovIFwKKyAgICBtYWNybygoeyAweDA3
IH0pLCAwLCB0cnVlLCAweDdsdSwgMWx1KSBcCisgICAgbWFjcm8oKHsgMHg3NyB9KSwgMCwgdHJ1
ZSwgMHg3N2x1LCAxbHUpIFwKKyAgICBtYWNybygoeyAweDgwLCAweDA3IH0pLCAwLCB0cnVlLCAw
eDM4MGx1LCAybHUpIFwKKyAgICBtYWNybygoeyAweDg5LCAweDEyIH0pLCAwLCB0cnVlLCAweDkw
OWx1LCAybHUpIFwKKyAgICBtYWNybygoeyAweGYzLCAweDg1LCAweDAyIH0pLCAwLCB0cnVlLCAw
eDgyZjNsdSwgM2x1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCB9KSwg
MCwgdHJ1ZSwgMHhlOWZjMmYzbHUsIDRsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4
ZmYsIDB4ZjQsIDB4N2YgfSksIDAsIHRydWUsIDB4ZmU5ZmMyZjNsdSwgNWx1KSBcCisgICAgLyog
VGVzdCB3aXRoIGV4dHJhIHRyYWlsaW5nIG51bWJlcnMgKi8gXAorICAgIG1hY3JvKCh7IDB4MDcs
IDB4ODAgfSksIDAsIHRydWUsIDB4N2x1LCAxbHUpIFwKKyAgICBtYWNybygoeyAweDA3LCAweDc1
IH0pLCAwLCB0cnVlLCAweDdsdSwgMWx1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhm
ZiwgMHg3NCwgMHg0MyB9KSwgMCwgdHJ1ZSwgMHhlOWZjMmYzbHUsIDRsdSkgXAorICAgIG1hY3Jv
KCh7IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4NzQsIDB4ODAgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1
LCA0bHUpIFwKKyAgICAvKiBUZXN0IHdpdGggcHJlY2VlZGluZyBudW1iZXJzICovIFwKKyAgICBt
YWNybygoeyAweGYzLCAweDA3IH0pLCAxLCB0cnVlLCAweDdsdSwgMmx1KSBcCisgICAgbWFjcm8o
KHsgMHgwMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4
ZjIsIDB4NTMsIDB4NDMsIDB4NjcsIDB4NzksIDB4NzcgfSksIDUsIHRydWUsIDB4NzdsdSwgNmx1
KSBcCisgICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NyB9KSwg
NSwgdHJ1ZSwgMHg3N2x1LCA2dWwpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAw
eGYzLCAweDg1LCAweDAyIH0pLCAzLCB0cnVlLCAweDgyZjNsdSwgNmx1KSBcCisgICAgLyogVGVz
dCBpbiB0aGUgbWlkZGxlICovIFwKKyAgICBtYWNybygoeyAweGYzLCAweDA3LCAweDg5IH0pLCAx
LCB0cnVlLCAweDdsdSwgMmx1KSBcCisgICAgbWFjcm8oKHsgMHgwMywgMHgwNywgMHgyMyB9KSwg
MSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4
NjcsIDB4NzksIDB4NzcsIDB4NDMgfSksIDUsIHRydWUsIDB4NzdsdSwgNmx1KSBcCisgICAgbWFj
cm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NywgMHhmOSB9KSwgNSwgdHJ1
ZSwgMHg3N2x1LCA2bHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYzLCAw
eDg1LCAweDAyLCAweGE0IH0pLCAzLCB0cnVlLCAweDgyZjNsdSwgNmx1KSBcCisgICAgLyogVGVz
dCBkZWNvZGUgdG9vIGxvbmcgKi8gXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4ODB9KSwgMCwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKKyAgICBtYWNybygoeyAw
eDgwLCAweDgwLCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDEsIGZhbHNlLCAweDBs
dSwgMGx1KSBcCisgICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhh
MywgMHhmZn0pLCAwLCBmYWxzZSwgMHgwbHUsIDBsdSkgXAorICAgIC8qIFRlc3QgZGVjb2RlIG9m
ZiBlbmQgb2YgYXJyYXkgKi8gXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEs
IDB4OWEsIDB4YTMsIDB4ZmZ9KSwgMiwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKKworCisjZGVmaW5l
IFRFU1RfVU5TSUdORURfTEVCX0RFQ09ERShpbml0LCBzdGFydE9mZnNldCwgZXhwZWN0ZWRTdGF0
dXMsIGV4cGVjdGVkUmVzdWx0LCBleHBlY3RlZE9mZnNldCkgXAorICAgIHsgXAorICAgICAgICBW
ZWN0b3I8dWludDhfdD4gdmVjdG9yID0gVmVjdG9yPHVpbnQ4X3Q+IGluaXQ7IFwKKyAgICAgICAg
c2l6ZV90IG9mZnNldCA9IHN0YXJ0T2Zmc2V0OyBcCisgICAgICAgIHVpbnQzMl90IHJlc3VsdDsg
XAorICAgICAgICBib29sIHN0YXR1cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDMyKHZl
Y3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBD
SEVDS19FUShzdGF0dXMsIGV4cGVjdGVkU3RhdHVzKTsgXAorICAgICAgICBpZiAoZXhwZWN0ZWRT
dGF0dXMpIHsgXAorICAgICAgICAgICAgQ0hFQ0tfRVEocmVzdWx0LCBleHBlY3RlZFJlc3VsdCk7
IFwKKyAgICAgICAgICAgIENIRUNLX0VRKG9mZnNldCwgZXhwZWN0ZWRPZmZzZXQpOyBcCisgICAg
ICAgIH0gXAorICAgIH07CisKKworI2RlZmluZSBGT1JfRUFDSF9TSUdORURfTEVCX1RFU1QobWFj
cm8pIFwKKyAgICAvKiBTaW1wbGUgdGVzdHMgdGhhdCB1c2UgYWxsIHRoZSBiaXRzIGluIHRoZSBh
cnJheSAqLyBcCisgICAgbWFjcm8oKHsgMHgwNyB9KSwgMCwgdHJ1ZSwgMHg3LCAxbHUpIFwKKyAg
ICBtYWNybygoeyAweDc3IH0pLCAwLCB0cnVlLCAtMHg5LCAxbHUpIFwKKyAgICBtYWNybygoeyAw
eDgwLCAweDA3IH0pLCAwLCB0cnVlLCAweDM4MCwgMmx1KSBcCisgICAgbWFjcm8oKHsgMHg4OSwg
MHgxMiB9KSwgMCwgdHJ1ZSwgMHg5MDksIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUs
IDB4MDIgfSksIDAsIHRydWUsIDB4ODJmMywgM2x1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4
NSwgMHhmZiwgMHg3NCB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywgNGx1KSBcCisgICAgbWFjcm8o
KHsgMHhmMywgMHg4NSwgMHhmZiwgMHhmNCwgMHg3ZiB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywg
NWx1KSBcCisgICAgLyogVGVzdCB3aXRoIGV4dHJhIHRyYWlsaW5nIG51bWJlcnMgKi8gXAorICAg
IG1hY3JvKCh7IDB4MDcsIDB4ODAgfSksIDAsIHRydWUsIDB4NywgMWx1KSBcCisgICAgbWFjcm8o
KHsgMHgwNywgMHg3NSB9KSwgMCwgdHJ1ZSwgMHg3LCAxbHUpIFwKKyAgICBtYWNybygoeyAweGYz
LCAweDg1LCAweGZmLCAweDc0LCAweDQzIH0pLCAwLCB0cnVlLCAweGZlOWZjMmYzLCA0bHUpIFwK
KyAgICBtYWNybygoeyAweGYzLCAweDg1LCAweGZmLCAweDc0LCAweDgwIH0pLCAwLCB0cnVlLCAw
eGZlOWZjMmYzLCA0bHUpIFwKKyAgICAvKiBUZXN0IHdpdGggcHJlY2VlZGluZyBudW1iZXJzICov
IFwKKyAgICBtYWNybygoeyAweGYzLCAweDA3IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkgXAorICAg
IG1hY3JvKCh7IDB4MDMsIDB4MDcgfSksIDEsIHRydWUsIDB4NywgMmx1KSBcCisgICAgbWFjcm8o
KHsgMHhmMiwgMHg1MywgMHg0MywgMHg2NywgMHg3OSwgMHg3NyB9KSwgNSwgdHJ1ZSwgLTB4OSwg
Nmx1KSBcCisgICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NyB9
KSwgNSwgdHJ1ZSwgLTB4OSwgNmx1KSBcCisgICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0Mywg
MHhmMywgMHg4NSwgMHgwMiB9KSwgMywgdHJ1ZSwgMHg4MmYzLCA2bHUpIFwKKyAgICAvKiBUZXN0
IGluIHRoZSBtaWRkbGUgKi8gXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4MDcsIDB4ODkgfSksIDEs
IHRydWUsIDB4NywgMmx1KSBcCisgICAgbWFjcm8oKHsgMHgwMywgMHgwNywgMHgyMyB9KSwgMSwg
dHJ1ZSwgMHg3LCAybHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweDY3LCAw
eDc5LCAweDc3LCAweDQzIH0pLCA1LCB0cnVlLCAtMHg5LCA2bHUpIFwKKyAgICBtYWNybygoeyAw
eGYyLCAweDUzLCAweDQzLCAweGY3LCAweDg0LCAweDc3LCAweGY5IH0pLCA1LCB0cnVlLCAtMHg5
LCA2bHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYzLCAweDg1LCAweDAy
LCAweGE0IH0pLCAzLCB0cnVlLCAweDgyZjMsIDZsdSkgXAorICAgIC8qIFRlc3QgZGVjb2RlIHRv
byBsb25nICovIFwKKyAgICBtYWNybygoeyAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAw
eDgwfSksIDAsIGZhbHNlLCAweDAsIDBsdSkgXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4
YWIsIDB4OGEsIDB4OWEsIDB4YTMsIDB4ZmZ9KSwgMSwgZmFsc2UsIDB4MCwgMGx1KSBcCisgICAg
bWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhmZn0pLCAwLCBm
YWxzZSwgMHgwLCAwbHUpIFwKKyAgICAvKiBUZXN0IGRlY29kZSBvZmYgZW5kIG9mIGFycmF5ICov
IFwKKyAgICBtYWNybygoeyAweDgwLCAweDgwLCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZm
fSksIDIsIGZhbHNlLCAweDAsIDBsdSkgXAorCisKKyNkZWZpbmUgVEVTVF9TSUdORURfTEVCX0RF
Q09ERShpbml0LCBzdGFydE9mZnNldCwgZXhwZWN0ZWRTdGF0dXMsIGV4cGVjdGVkUmVzdWx0LCBl
eHBlY3RlZE9mZnNldCkgXAorICAgIHsgXAorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
ID0gVmVjdG9yPHVpbnQ4X3Q+IGluaXQ7IFwKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0YXJ0
T2Zmc2V0OyBcCisgICAgICAgIGludDMyX3QgcmVzdWx0OyBcCisgICAgICAgIGJvb2wgc3RhdHVz
ID0gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVJbnQzMih2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6
ZSgpLCBvZmZzZXQsIHJlc3VsdCk7IFwKKyAgICAgICAgQ0hFQ0tfRVEoc3RhdHVzLCBleHBlY3Rl
ZFN0YXR1cyk7IFwKKyAgICAgICAgaWYgKGV4cGVjdGVkU3RhdHVzKSB7IFwKKyAgICAgICAgICAg
IGludDMyX3QgZXhwZWN0ZWQgPSBleHBlY3RlZFJlc3VsdDsgXAorICAgICAgICAgICAgQ0hFQ0tf
RVEocmVzdWx0LCBleHBlY3RlZCk7IFwKKyAgICAgICAgICAgIENIRUNLX0VRKG9mZnNldCwgZXhw
ZWN0ZWRPZmZzZXQpOyBcCisgICAgICAgIH0gXAorICAgIH07CisKKworc3RhdGljIHZvaWQgcnVu
TEVCVGVzdHMoKQoreworICAgIEZPUl9FQUNIX1VOU0lHTkVEX0xFQl9URVNUKFRFU1RfVU5TSUdO
RURfTEVCX0RFQ09ERSkKKyAgICBGT1JfRUFDSF9TSUdORURfTEVCX1RFU1QoVEVTVF9TSUdORURf
TEVCX0RFQ09ERSkKK30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworc3RhdGljIEpTQzo6
Vk0qIHZtOworCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIFdhc207Cit1
c2luZyBuYW1lc3BhY2UgQjM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIGludm9rZShNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgcHRyLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJn
cykKK3sKKyAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQ7CisgICAgLy8gU2luY2Ugdm1FbnRyeVRv
SmF2YVNjcmlwdCBleHBlY3RzIGEgdGhpcyB2YWx1ZSB3ZSBjbGFpbSB0aGVyZSBpcyBvbmUuLi4g
dGhlcmUgaXNuJ3QuCisgICAgaW50IGFyZ0NvdW50ID0gMTsKKyAgICBKU1ZhbHVlKiByZW1haW5p
bmdBcmd1bWVudHMgPSBudWxscHRyOworICAgIGlmIChhcmdzLnNpemUoKSkgeworICAgICAgICBy
ZW1haW5pbmdBcmd1bWVudHMgPSBjb25zdF9jYXN0PEpTVmFsdWUqPihhcmdzLmJlZ2luKCkpOwor
ICAgICAgICBmaXJzdEFyZ3VtZW50ID0gKnJlbWFpbmluZ0FyZ3VtZW50czsKKyAgICAgICAgcmVt
YWluaW5nQXJndW1lbnRzKys7CisgICAgICAgIGFyZ0NvdW50ID0gYXJncy5zaXplKCk7CisgICAg
fQorCisgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CisgICAgcHJvdG9DYWxsRnJh
bWUuaW5pdChudWxscHRyLCBudWxscHRyLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWlu
aW5nQXJndW1lbnRzKTsKKworICAgIC8vIFRoaXMgd29uJ3Qgd29yayBmb3IgZmxvYXRpbmcgcG9p
bnQgdmFsdWVzIGJ1dCB3ZSBkb24ndCBoYXZlIHRob3NlIHlldC4KKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odm1FbnRyeVRvV2FzbShwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdm0sICZwcm90
b0NhbGxGcmFtZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBpbnZva2UoY29uc3Qg
Q29tcGlsYXRpb24mIGNvZGUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlPiBhcmdzKQor
eworICAgIHJldHVybiBpbnZva2U8VD4oY29kZS5jb2RlKCksIGFyZ3MpOworfQorCitpbmxpbmUg
SlNWYWx1ZSBib3godWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZSk7Cit9CisKKy8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVzLgorc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKK3sKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBm
cm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisg
ICAgICAgIC8vICAgICAoZnVuYyAkc3VtMTIgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFt
IGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBh
cmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikg
KHJlc3VsdCBpMzIpIChyZXR1cm4gKGkzMi5hZGQgKGdldF9sb2NhbCAwKSAoaTMyLmFkZCAoZ2V0
X2xvY2FsIDEpIChpMzIuYWRkIChnZXRfbG9jYWwgMikgKGkzMi5hZGQgKGdldF9sb2NhbCAzKSAo
aTMyLmFkZCAoZ2V0X2xvY2FsIDQpIChpMzIuYWRkIChnZXRfbG9jYWwgNSkgKGkzMi5hZGQgKGdl
dF9sb2NhbCA2KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDcpIChpMzIuYWRkIChnZXRfbG9jYWwgOCkg
KGkzMi5hZGQgKGdldF9sb2NhbCA5KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDEwKSAoZ2V0X2xvY2Fs
IDExKSkpKSkpKSkpKSkpKSkKKyAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIm11bHQxMiIp
IChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChjYWxsICRzdW0xMiAoZ2V0X2xvY2Fs
IDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwg
MCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAw
KSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSkpKQorICAgICAgICAv
LyAgICAgKQorCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDk2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDQwLAorICAgICAgICAgICAgMHgw
YywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIs
IDB4MDAsIDB4MDEsIDB4MDUsIDB4ODMsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAwLCAweDAxLCAweDA3LCAweDhhLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDA2LCAweDZkLCAweDc1LAorICAgICAgICAgICAgMHg2YywgMHg3NCwgMHgzMSwg
MHgzMiwgMHgwMCwgMHgwMSwgMHgwYSwgMHhjZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MiwgMHhhNiwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQs
IDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDQsIDB4
MTQsIDB4MDUsIDB4MTQsCisgICAgICAgICAgICAweDA2LCAweDE0LCAweDA3LCAweDE0LCAweDA4
LCAweDE0LCAweDA5LCAweDE0LCAweDBhLCAweDE0LCAweDBiLCAweDQwLCAweDQwLCAweDQwLCAw
eDQwLCAweDQwLAorICAgICAgICAgICAgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0
MCwgMHgwOSwgMHgwZiwgMHg5ZCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwg
MHgwMCwKKyAgICAgICAgICAgIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4
MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAs
CisgICAgICAgICAgICAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE2LCAw
eDAwLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVj
dG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3Vs
dFswXSB8fCAhcGxhbi5yZXN1bHRbMV0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxl
IGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEyMDApOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEy
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwg
Ym94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBi
b3goNyksIGJveCg4KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAv
LyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAo
ZnVuYyAkZmFjIChleHBvcnQgImZhYyIpIChwYXJhbSBpNjQpIChyZXN1bHQgaTY0KQorICAgICAg
ICAvLyAgICAgIChpZiAoaTY0LmVxeiAoZ2V0X2xvY2FsIDApKQorICAgICAgICAvLyAgICAgICAo
cmV0dXJuIChpNjQuY29uc3QgMSkpCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAg
ICAocmV0dXJuIChpNjQubXVsIChnZXRfbG9jYWwgMCkgKGNhbGwgJGZhYyAoaTY0LnN1YiAoZ2V0
X2xvY2FsIDApIChpNjQuY29uc3QgMSkpKSkpCisgICAgICAgIC8vICAgICAgKQorICAgICAgICAv
LyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAg
MHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4
NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDEs
IDB4MDIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDAxLCAweDA3LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDAzLCAweDY2LCAweDYxLCAweDYzLAorICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgw
YSwgMHg5ZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg5OCwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDAsIDB4MTEsIDB4MDAsIDB4
NjgsIDB4MDMsIDB4MDAsIDB4MTEsIDB4MDEsIDB4MDksIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTQs
IDB4MDAsIDB4MTEsIDB4MDEsCisgICAgICAgICAgICAweDVjLCAweDE2LCAweDAwLCAweDVkLCAw
eDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsK
KyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkg
eworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDEpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkg
fSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMikgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNCkgfSksIDI0KTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9k
dWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhw
b3J0ICJkb3VibGUiKSAocGFyYW0gaTY0KSAocmVzdWx0IGk2NCkgKHJldHVybiAoY2FsbCAxIChn
ZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSkpKQorICAgICAgICAvLyAgICAgKGZ1bmMgJHN1bSAo
cGFyYW0gaTY0KSAocGFyYW0gaTY0KSAocmVzdWx0IGk2NCkgKHJldHVybiAoaTY0LmFkZCAoZ2V0
X2xvY2FsIDApIChnZXRfbG9jYWwgMSkpKSkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4
NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDIsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAyLCAweDAxLCAweDAyLCAw
eDQwLCAweDAyLCAweDAyLCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgzLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgwMSwgMHgwNSwgMHg4Mywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4YSwgMHg4
MCwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4NjQsIDB4NmYs
IDB4NzUsIDB4NjIsIDB4NmMsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OWMsIDB4ODAsIDB4
ODAsCisgICAgICAgICAgICAweDgwLCAweDAwLCAweDAyLCAweDg5LCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE2LCAweDAxLCAweDA5LAor
ICAgICAgICAgICAgMHgwZiwgMHg4OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgx
NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1YiwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAg
ICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXpl
KCkgIT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7CisgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Cisg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsx
XS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCgwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTUpIH0pLCAxNik7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAyMDApOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206CisgICAgICAgIC8v
ICAgIChtb2R1bGUKKyAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKKyAgICAgICAgLy8gICAgIChm
dW5jICRpZCAocGFyYW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGdldF9sb2Nh
bCAkdmFsdWUpKSkKKyAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImlkLWNhbGwiKSAocGFy
YW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGNhbGwgJGlkIChnZXRfbG9jYWwg
JHZhbHVlKSkpKQorICAgICAgICAvLyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0
MCwKKyAgICAgICAgICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODMsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCisg
ICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhi
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDA3LCAweDY5LCAweDY0LAorICAgICAg
ICAgICAgMHgyZCwgMHg2MywgMHg2MSwgMHg2YywgMHg2YywgMHgwMCwgMHgwMSwgMHgwYSwgMHg5
NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg4NSwgMHg4MCwKKyAgICAgICAgICAg
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDksIDB4MGYsIDB4ODcsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsCisgICAgICAgICAgICAweDE2
LCAweDAwLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwg
dmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJl
c3VsdFswXSB8fCAhcGxhbi5yZXN1bHRbMV0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9k
dWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSkgfSksIDEpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206
CisgICAgICAgIC8vIChtb2R1bGUKKyAgICAgICAgLy8gIChtZW1vcnkgMSkKKyAgICAgICAgLy8g
IChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHBhcmFtICRwdHIg
aTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAoaTY0LnN0b3JlIChnZXRfbG9jYWwgJHB0
cikgKGdldF9sb2NhbCAkaSkpCisgICAgICAgIC8vICAgKHJldHVybiAoaTY0LmxvYWQgKGdldF9s
b2NhbCAkcHRyKSkpCisgICAgICAgIC8vICAgKQorICAgICAgICAvLyAgKQorICAgICAgICBWZWN0
b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2
ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4
MDIsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUs
IDB4ODMsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAw
eDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDY5
LCAweDMzLAorICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2YywgMHg2ZiwgMHg2MSwgMHg2NCwg
MHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHg4MCwgMHg4MCwgMHg4
MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MTQsCisg
ICAgICAgICAgICAweDAxLCAweDJiLCAweDAzLCAweDAwLCAweDA5LCAweDBmCisgICAgICAgIH07
CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVz
dWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxv
Z0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNo
LgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0p
LCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAobW9kdWxlCisgICAgICAgIC8v
ICAobWVtb3J5IDEpCisgICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChw
YXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAg
KGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAg
IChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQorICAgICAgICAvLyAgICkKKyAg
ICAgICAgLy8gICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAg
ICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEs
IDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAw
eDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKKyAgICAgICAgICAgIDB4MzIsIDB4NWYs
IDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4
MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAw
eDMzLCAweDAyLCAweDAwLCAweDE0LAorICAgICAgICAgICAgMHgwMSwgMHgyYSwgMHgwMiwgMHgw
MCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRb
MF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNv
cnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9
KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAg
ICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAgICAgICAvLyAg
ICAgKGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAg
aTMyKSAocGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBpMzIpCisgICAgICAgIC8vICAgICAg
KHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgIChibG9jaworICAg
ICAgICAvLyAgICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91
IChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkpKQorICAgICAgICAvLyAgICAgICAg
KGkzMi5zdG9yZSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAoaTMyLm11bCAoZ2V0X2xvY2FsICRp
KSAoaTMyLmNvbnN0IDQpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAgICAgICAoc2V0
X2xvY2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkpKQorICAgICAg
ICAvLyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAgIC8vICAgICAg
ICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAg
Ly8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAg
IDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4
ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAz
LCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4NjksIDB4NzQsIDB4
NjUsIDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MDAsIDB4MGEs
IDB4YjIsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweGFjLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1
LCAweDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywg
MHgxNCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMywgMHgx
MCwgMHgwNCwgMHg0MiwKKyAgICAgICAgICAgIDB4NDAsIDB4MTQsIDB4MDAsIDB4MzMsIDB4MDIs
IDB4MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4
MDAsIDB4MGYsCisgICAgICAgICAgICAweDBmLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAg
ICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNp
emUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJN
b2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7CisKKyAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDU7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7CisgICAg
ICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5
LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAg
ICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29m
ZnNldCAtIDFdLCAwdSk7CisgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhd
LCAwdSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7CisKKyAgICAgICAg
bGVuZ3RoID0gMTA7CisgICAgICAgIG9mZnNldCA9IDUgKiBzaXplb2YodWludDMyX3QpOworICAg
ICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUp
LCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIG9mZnNldCAvPSBzaXplb2Yo
dWludDMyX3QpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwor
ICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBDSEVDS19F
UShtZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVt
b3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJheSIpIChwYXJh
bSAkeCBpMzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxvY2FsICRpIGkz
MikKKyAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCisgICAgICAg
IC8vICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgIChsb29wCisgICAgICAgIC8vICAgICAg
ICAoYnJfaWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkbGVuZ3RoKSkp
CisgICAgICAgIC8vICAgICAgICAoaTMyLnN0b3JlOCAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAo
Z2V0X2xvY2FsICRpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAgICAgICAoc2V0X2xv
Y2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkpKQorICAgICAgICAv
LyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAgIC8vICAgICAgICkK
KyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8g
ICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAzLCAw
eDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4NjksIDB4NzQsIDB4NjUs
IDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MDAsIDB4MGEsIDB4
YWYsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweGE5LCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAw
eDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgx
NCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwg
MHgxNCwgMHgwMCwKKyAgICAgICAgICAgIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4
MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDks
IDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAg
ICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChwbGFu
Lm1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
MTsKKyAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4u
bWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwor
ICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKKyAgICAgICAgQ0hFQ0tf
RVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBv
ZmZzZXRdLCAxMDB1KTsKKworICAgICAgICBsZW5ndGggPSAxMDsKKyAgICAgICAgb2Zmc2V0ID0g
NTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBDSEVDS19FUSht
ZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0
ICsgbGVuZ3RoXSwgMHUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAo
bW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAo
ZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJl
c3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTggKGdldF9sb2NhbCAkcHRyKSAo
Z2V0X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChpMzIubG9hZDhfcyAoZ2V0
X2xvY2FsICRwdHIpKSkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAgICApCisgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAw
eDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNSwgMHg4MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MGIsIDB4NjksIDB4MzMsCisgICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYx
LCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAw
eDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwg
MHgxNCwKKyAgICAgICAgICAgIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGYKKyAg
ICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAo
cGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+
c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1l
bW9yeSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFy
YW0gJGkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAgICAoaTMyLnN0b3JlOCAoaTMy
LmNvbnN0IDgpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5s
b2FkOF9zIChpMzIuY29uc3QgOCkpKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAg
ICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAs
IDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAx
LCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwYiwgMHg2OSwgMHgzMywgMHgzMiwKKyAgICAgICAgICAgIDB4NWYsIDB4NmMsIDB4NmYsIDB4
NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsCisgICAgICAgICAgICAweDAxLCAweDhmLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAw
LCAweDEwLCAweDA4LAorICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgor
ICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlm
IChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0
ZWQgZnJvbToKKyAgICAgICAgLy8gKG1vZHVsZQorICAgICAgICAvLyAgKG1lbW9yeSAxKQorICAg
ICAgICAvLyAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFy
YW0gJHB0ciBpMzIpIChyZXN1bHQgaTMyKQorICAgICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9s
b2NhbCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAocmV0dXJuIChpMzIubG9h
ZCAoZ2V0X2xvY2FsICRwdHIpKSkKKyAgICAgICAgLy8gICApCisgICAgICAgIC8vICApCisgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAw
eDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMiwgMHgwMSwg
MHgwMSwgMHgwMiwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNSwgMHg4MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MGIsIDB4NjksIDB4MzMsCisgICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYx
LCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAw
eDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwg
MHgxNCwKKyAgICAgICAgICAgIDB4MDEsIDB4MmIsIDB4MDMsIDB4MDAsIDB4MDksIDB4MGYKKyAg
ICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAo
cGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBi
b3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
LTEyKSwgYm94KHBsYW4ubWVtb3J5LT5zaXplKCkgLSBzaXplb2YodWludDY0X3QpKSB9KSwgLTEy
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAv
LyAobW9kdWxlCisgICAgICAgIC8vICAobWVtb3J5IDEpCisgICAgICAgIC8vICAoZnVuYyAoZXhw
b3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3Vs
dCBpMzIpCisgICAgICAgIC8vICAgKGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9j
YWwgJGkpKQorICAgICAgICAvLyAgIChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikp
KQorICAgICAgICAvLyAgICkKKyAgICAgICAgLy8gICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAw
eDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgw
LAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywg
MHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKKyAg
ICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYs
IDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAg
ICAgICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0
LCAweDAxLCAweDE0LCAweDAwLCAweDMzLCAweDAyLCAweDAwLCAweDE0LAorICAgICAgICAgICAg
MHgwMSwgMHgyYSwgMHgwMiwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAg
IFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkg
IT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxl
IGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1l
bW9yeSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFy
YW0gJHggaTMyKSAocGFyYW0gJHAgaTMyKSAocGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBp
MzIpCisgICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAg
ICAvLyAgICAgIChibG9jaworICAgICAgICAvLyAgICAgICAobG9vcAorICAgICAgICAvLyAgICAg
ICAgKGJyX2lmIDEgKGkzMi5nZV91IChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkp
KQorICAgICAgICAvLyAgICAgICAgKGkzMi5zdG9yZSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAo
aTMyLm11bCAoZ2V0X2xvY2FsICRpKSAoaTMyLmNvbnN0IDQpKSkgKGdldF9sb2NhbCAkeCkpCisg
ICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdl
dF9sb2NhbCAkaSkpKQorICAgICAgICAvLyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAg
ICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAg
ICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
NDAsCisgICAgICAgICAgICAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgy
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAor
ICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4
ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAg
ICAgICAgIDB4NjksIDB4NzQsIDB4NjUsIDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4
NzksIDB4MDAsIDB4MDAsIDB4MGEsIDB4YjIsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAg
ICAweDAwLCAweDAxLCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAw
eDAxLCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgw
MiwgMHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwg
MHgwMSwgMHgxNCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0MiwKKyAgICAgICAgICAgIDB4NDAsIDB4
MTQsIDB4MDAsIDB4MzMsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAs
IDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAsIDB4MGYsCisgICAgICAgICAgICAweDBmLCAweDA5LCAw
eDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAg
ICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIp
OworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocGxhbi5t
ZW1vcnktPnNpemUoKSk7CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNp
emVvZih1aW50MzJfdCk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJv
eChsZW5ndGgpIH0pOworICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CisgICAgICAgIENIRUNLX0VRKG1l
bW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0
XSwgMTAwdSk7CisKKyAgICAgICAgbGVuZ3RoID0gMTA7CisgICAgICAgIG9mZnNldCA9IDUgKiBz
aXplb2YodWludDMyX3QpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAg
ICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBDSEVDS19FUShtZW1vcnlb
b2Zmc2V0IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVu
Z3RoXSwgMHUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxl
CisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0
ICJ3cml0ZV9hcnJheSIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVu
Z3RoIGkzMikgKGxvY2FsICRpIGkzMikKKyAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChp
MzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgIChs
b29wCisgICAgICAgIC8vICAgICAgICAoYnJfaWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkg
KGdldF9sb2NhbCAkbGVuZ3RoKSkpCisgICAgICAgIC8vICAgICAgICAoaTMyLnN0b3JlOCAoaTMy
LmFkZCAoZ2V0X2xvY2FsICRwKSAoZ2V0X2xvY2FsICRpKSkgKGdldF9sb2NhbCAkeCkpCisgICAg
ICAgIC8vICAgICAgICAoc2V0X2xvY2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9s
b2NhbCAkaSkpKQorICAgICAgICAvLyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICAp
CisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAv
LyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAs
CisgICAgICAgICAgICAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAg
ICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4Ziwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAg
ICAgIDB4NjksIDB4NzQsIDB4NjUsIDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4Nzks
IDB4MDAsIDB4MDAsIDB4MGEsIDB4YWYsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAw
eDAwLCAweDAxLCAweGE5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAx
LCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwg
MHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgw
MSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNCwgMHgwMCwKKyAgICAgICAgICAgIDB4MmUsIDB4MDAs
IDB4MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4
MDAsIDB4MGYsIDB4MGYsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBs
YW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwg
IXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQg
dG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2
b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNl
dCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0s
IDB1KTsKKyAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAg
Q0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCAxMDB1KTsKKworICAgICAgICBsZW5ndGggPSAx
MDsKKyAgICAgICAgb2Zmc2V0ID0gNTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0p
OworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOworICAgICAgICBD
SEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBDSEVDS19FUShtZW1vcnlb
aSArIG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBm
cm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisg
ICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIp
IChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGkzMi5zdG9y
ZTggKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAgICAocmV0
dXJuIChpMzIubG9hZDhfcyAoZ2V0X2xvY2FsICRwdHIpKSkKKyAgICAgICAgLy8gICAgICApCisg
ICAgICAgIC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAg
ICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAw
eDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAg
ICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKKyAgICAgICAgICAgIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsCisgICAgICAgICAgICAweDMyLCAw
eDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAw
LCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwg
MHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgw
MCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDEsIDB4MjAsIDB4MDAs
IDB4MDAsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2
ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVz
dWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGls
ZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgfQor
CisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVs
ZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9y
dCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8g
ICAgICAoaTMyLnN0b3JlOCAoaTMyLmNvbnN0IDgpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAv
LyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChpMzIuY29uc3QgOCkpKQorICAgICAgICAvLyAg
ICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9
IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisg
ICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAorICAgICAg
ICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywgMHgzMiwKKyAgICAgICAgICAg
IDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4
MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsCisgICAgICAgICAgICAweDAx
LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAw
eDAwLCAweDJlLCAweDAwLCAweDAwLCAweDEwLCAweDA4LAorICAgICAgICAgICAgMHgyMCwgMHgw
MCwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0s
IHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5y
ZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21w
aWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgfQorCisgICAg
eworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAg
ICAgICAvLyAgICAgKGZ1bmMgImR1bWItZXEiIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIp
IChyZXN1bHQgaTMyKQorICAgICAgICAvLyAgICAgIChpZiAoaTMyLmVxIChnZXRfbG9jYWwgJHgp
IChnZXRfbG9jYWwgJHkpKQorICAgICAgICAvLyAgICAgICAodGhlbiAoYnIgMCkpCisgICAgICAg
IC8vICAgICAgIChlbHNlIChyZXR1cm4gKGkzMi5jb25zdCAxKSkpKQorICAgICAgICAvLyAgICAg
IChyZXR1cm4gKGkzMi5jb25zdCAwKSkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAg
ICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAw
LCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwNywgMHg4YiwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDcsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NjUsIDB4NzEs
IDB4MDAsIDB4MDAsIDB4MGEsIDB4OTksCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDkzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAw
LCAweDE0LCAweDAxLCAweDRkLAorICAgICAgICAgICAgMHgwMywgMHgwMCwgMHgwNiwgMHgwMCwg
MHgwNCwgMHgxMCwgMHgwMSwgMHgwOSwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwOSwgMHgwZgorICAg
ICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgw
KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KDYpIH0pLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJk
dW1iLWxlc3MtdGhhbiIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChyZXN1bHQgaTMy
KQorICAgICAgICAvLyAgICAgIChsb29wCisgICAgICAgIC8vICAgICAgIChpZiAoaTMyLmVxIChn
ZXRfbG9jYWwgJHgpIChnZXRfbG9jYWwgJHkpKQorICAgICAgICAvLyAgICAgICAgKHRoZW4gKHJl
dHVybiAoaTMyLmNvbnN0IDApKSkKKyAgICAgICAgLy8gICAgICAgIChlbHNlIChpZiAoaTMyLmVx
IChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAgICAgICAg
KHJldHVybiAoaTMyLmNvbnN0IDEpKSkpKQorICAgICAgICAvLyAgICAgICAoc2V0X2xvY2FsICR4
IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkpKQorICAgICAgICAvLyAgICAg
ICAoYnIgMCkKKyAgICAgICAgLy8gICAgICAgKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAg
Ly8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAg
IDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4
ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAy
LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAwLCAweDA3LCAweDkyLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwZSwgMHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2Yywg
MHg2NSwgMHg3MywgMHg3MywgMHgyZCwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4NjEsIDB4
NmUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4YTYsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAw
eDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDRkLCAweDAzLCAweDAwLCAweDEwLCAweDAw
LCAweDA5LCAweDA0LCAweDE0LAorICAgICAgICAgICAgMHgwMCwgMHgxMCwgMHgwMCwgMHg0ZCwg
MHgwMywgMHgwMCwgMHgxMCwgMHgwMSwgMHgwOSwgMHgwZiwgMHgwZiwgMHgxNCwgMHgwMCwgMHgx
MCwgMHgwMSwgMHg0MSwKKyAgICAgICAgICAgIDB4MTUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGYs
IDB4MDAsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBd
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3Jy
ZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CisgICAgfQorCisKKyAgICB7CisgICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAo
cmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmNvbnN0IDUpKSkgKQorICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgw
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAs
IDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAw
eDc1LCAweDcyLCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBh
LAorICAgICAgICAgICAgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4NSwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwOSwgMHgwZgorICAg
ICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgfSksIDUpOworICAgIH0KKworCisgICAgeworICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJyZXR1cm4taTMyIikgKHJlc3VsdCBp
MzIpIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5jb25zdCA1KSAoaTMyLmNvbnN0IDYpKSkpICkKKyAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEs
IDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDAx
LCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAw
eDhlLCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3
MiwgMHg2NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwg
MHgwMCwgMHgwMCwgMHgwYSwKKyAgICAgICAgICAgIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUs
IDB4MTAsIDB4MDYsCisgICAgICAgICAgICAweDQwLCAweDA5LCAweDBmCisgICAgICAgIH07CisK
KyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0
LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xu
KCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyB9KSwgMTEpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206
IChtb2R1bGUgKGZ1bmMgKGV4cG9ydCAicmV0dXJuLWkzMiIpIChyZXN1bHQgaTMyKSAocmV0dXJu
IChpMzIuYWRkIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCAzKSkgKGkzMi5jb25z
dCAzKSkpKSApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDg1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgw
MCwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMCwgMHgwNywgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4
MDEsIDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4Njks
IDB4MzMsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsCisgICAgICAgICAgICAweDkxLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDhiLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAw
LCAweDEwLCAweDA1LCAweDEwLCAweDAzLAorICAgICAgICAgICAgMHg0MCwgMHgxMCwgMHgwMywg
MHg0MCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZl
Y3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1
bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxl
IGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJl
dHVybi1pMzIiKSAocmVzdWx0IGkzMikgKGJsb2NrIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5hZGQg
KGkzMi5jb25zdCA1KSAoaTMyLmNvbnN0IDMpKSAoaTMyLmNvbnN0IDMpKSkpICh1bnJlYWNoYWJs
ZSkpICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAwLCAw
eDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAw
LCAweDA3LCAweDhlLCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwg
MHgwYSwgMHg3MiwgMHg2NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgz
MywgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYSwKKyAgICAgICAgICAgIDB4OTUsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4
MDEsIDB4MDAsIDB4MTAsIDB4MDUsCisgICAgICAgICAgICAweDEwLCAweDAzLCAweDQwLCAweDEw
LCAweDAzLCAweDQwLCAweDA5LCAweDBmLCAweDAwLCAweDBmCisgICAgICAgIH07CisKKyAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUo
KSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1
bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyB9
KSwgMTEpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1
bGUgKGZ1bmMgKGV4cG9ydCAiYWRkIikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJl
c3VsdCBpMzIpIChyZXR1cm4gKGkzMi5hZGQgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkp
KSkgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgw
MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4Nywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDcsIDB4ODcsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDAzLCAweDYxLCAweDY0LCAweDY0LCAweDAwLCAweDAwLCAweDBhLCAweDhl
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLAorICAgICAgICAgICAgMHgwMSwgMHg4OCwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgw
OSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Cisg
ICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3Rs
eS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KDEpIH0pLCAxMDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goLTEpLCBib3goMSl9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwgYm94KDEpIH0pLCBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8v
IEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAo
ZnVuYyAoZXhwb3J0ICJsb2NhbHMiKSAocGFyYW0gJHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2Fs
ICRudW0gaTMyKQorICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJG51bSAoZ2V0X2xvY2FsICR4
KSkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9jYWwgJG51bSkpCisgICAgICAgIC8v
ICAgICAgKQorICAgICAgICAvLyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
ID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwK
KyAgICAgICAgICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGEsIDB4ODAsIDB4ODAsCisgICAg
ICAgICAgICAweDgwLCAweDAwLCAweDAxLCAweDA2LCAweDZjLCAweDZmLCAweDYzLCAweDYxLCAw
eDZjLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDkxLCAweDgwLCAweDgwLAorICAgICAgICAg
ICAgMHg4MCwgMHgwMCwgMHgwMSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgxNCwgMHgwMCwgMHgxNSwgMHgwMSwgMHgxNCwKKyAgICAgICAgICAgIDB4
MDEsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0
WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBj
b3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMCkgfSksIDEwKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJz
dW0iKSAocGFyYW0gJHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICR5IGkzMikKKyAgICAgICAg
Ly8gICAgICAoc2V0X2xvY2FsICR5IChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgKGxv
b3AKKyAgICAgICAgLy8gICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgICAoYnJfaWYgMCAo
aTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQorICAgICAgICAvLyAgICAgICAg
KHNldF9sb2NhbCAkeSAoaTMyLmFkZCAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkpCisg
ICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChp
MzIuY29uc3QgMSkpKQorICAgICAgICAvLyAgICAgICAgKGJyIDEpCisgICAgICAgIC8vICAgICAg
ICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9j
YWwgJHkpKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4
NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDg3
LCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg3Mywg
MHg3NSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwKKyAgICAgICAgICAgIDB4YTgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDEsIDB4
MDAsCisgICAgICAgICAgICAweDE0LCAweDAwLCAweDEwLCAweDAwLCAweDRkLCAweDA3LCAweDAw
LCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDE1LCAweDAxLCAweDE0LCAweDAwLAor
ICAgICAgICAgICAgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgw
ZiwgMHgwZiwgMHgxNCwgMHgwMSwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBs
YW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpfSksIDMpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSB9KSwgNTA1MCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9y
dCAiZHVtYi1tdWx0IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIp
IChsb2NhbCAkdG90YWwgaTMyKSAobG9jYWwgJGkgaTMyKSAobG9jYWwgJGogaTMyKQorICAgICAg
ICAvLyAgICAgIChzZXRfbG9jYWwgJHRvdGFsIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAg
ICAgKHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgIChibG9jayAo
bG9vcAorICAgICAgICAvLyAgICAgICAgICAgICAgKGJyX2lmIDEgKGkzMi5lcSAoZ2V0X2xvY2Fs
ICRpKSAoZ2V0X2xvY2FsICR4KSkpCisgICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2Fs
ICRqIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2FsICRp
IChpMzIuYWRkIChnZXRfbG9jYWwgJGkpIChpMzIuY29uc3QgMSkpKQorICAgICAgICAvLyAgICAg
ICAgICAgICAgKGxvb3AKKyAgICAgICAgLy8gICAgICAgICAgICAgICAoYnJfaWYgMSAoaTMyLmVx
IChnZXRfbG9jYWwgJGopIChnZXRfbG9jYWwgJHkpKSkKKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAoc2V0X2xvY2FsICR0b3RhbCAoaTMyLmFkZCAoZ2V0X2xvY2FsICR0b3RhbCkgKGkzMi5jb25z
dCAxKSkpCisgICAgICAgIC8vICAgICAgICAgICAgICAgKHNldF9sb2NhbCAkaiAoaTMyLmFkZCAo
Z2V0X2xvY2FsICRqKSAoaTMyLmNvbnN0IDEpKSkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAo
YnIgMCkKKyAgICAgICAgLy8gICAgICAgICAgICAgICApCisgICAgICAgIC8vICAgICAgICAgICAg
ICApKQorICAgICAgICAvLyAgICAgIChyZXR1cm4gKGdldF9sb2NhbCAkdG90YWwpKQorICAgICAg
ICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgy
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhkLCAweDgwLAor
ICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwOSwgMHg2NCwgMHg3NSwgMHg2
ZCwgMHg2MiwgMHgyZCwgMHg2ZCwgMHg3NSwgMHg2YywgMHg3NCwgMHgwMCwgMHgwMCwKKyAgICAg
ICAgICAgIDB4MGEsIDB4YzcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YzEsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4MDEsIDB4MTAsCisgICAgICAgICAg
ICAweDAwLCAweDE1LCAweDAyLCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLCAw
eDAyLCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAwLCAweDRkLAorICAgICAgICAgICAgMHgw
NywgMHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwMSwg
MHg0MCwgMHgxNSwgMHgwMywgMHgwMiwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDQsIDB4
MTQsIDB4MDEsIDB4NGQsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDEsIDB4NDAs
IDB4MTUsIDB4MDIsIDB4MTQsIDB4MDQsIDB4MTAsCisgICAgICAgICAgICAweDAxLCAweDQwLCAw
eDE1LCAweDA0LCAweDA2LCAweDAwLCAweDBmLCAweDBmLCAweDBmLCAweDE0LCAweDAyLCAweDA5
LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAg
ICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5
LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDIpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgyKSB9KSwgMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCA0KTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDIpLCBib3goNikgfSksIDEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgNjAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCksIGJveCgxMDApIH0pLCAxMDAwMCk7CisgICAgfQorCisgICAgeworICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAv
LyAgICAgKGZ1bmMgImR1bWItbGVzcy10aGFuIiAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMy
KSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAo
YmxvY2sKKyAgICAgICAgLy8gICAgICAgIChibG9jaworICAgICAgICAvLyAgICAgICAgIChicl9p
ZiAwIChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpKQorICAgICAgICAvLyAg
ICAgICAgIChiciAxKQorICAgICAgICAvLyAgICAgICAgICkKKyAgICAgICAgLy8gICAgICAgIChy
ZXR1cm4gKGkzMi5jb25zdCAwKSkKKyAgICAgICAgLy8gICAgICAgICkKKyAgICAgICAgLy8gICAg
ICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgICAoYmxvY2sKKyAgICAgICAgLy8gICAgICAgICAo
YnJfaWYgMCAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQorICAgICAgICAv
LyAgICAgICAgIChiciAxKQorICAgICAgICAvLyAgICAgICAgICkKKyAgICAgICAgLy8gICAgICAg
IChyZXR1cm4gKGkzMi5jb25zdCAxKSkKKyAgICAgICAgLy8gICAgICAgICkKKyAgICAgICAgLy8g
ICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEp
KSkKKyAgICAgICAgLy8gICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAg
Ly8gICAgICAgKHVucmVhY2hhYmxlKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAg
ICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAs
IDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAweDAx
LCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDAwLCAweDA3LCAweDkyLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwZSwgMHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2NSwg
MHg3MywgMHg3MywgMHgyZCwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4NjEsIDB4NmUsIDB4
MDAsIDB4MDAsIDB4MGEsIDB4YjksIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YjMs
IDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAweDAwLCAw
eDAxLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDRkLCAweDA3
LCAweDAwLCAweDA2LAorICAgICAgICAgICAgMHgwMSwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwOSwg
MHgwZiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0
ZCwgMHgwNywKKyAgICAgICAgICAgIDB4MDAsIDB4MDYsIDB4MDEsIDB4MGYsIDB4MTAsIDB4MDEs
IDB4MDksIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDEsIDB4MTUsIDB4MDAsIDB4
MDYsCisgICAgICAgICAgICAweDAwLCAweDBmLCAweDAwLCAweDBmCisgICAgICAgIH07CisKKyAg
ICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNp
emUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJN
b2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDIpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDAp
OworICAgIH0KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgQ29tbWFuZExpbmUgb3B0aW9ucyhhcmdj
LCBhcmd2KTsKKworICAgIGlmIChvcHRpb25zLm1fcnVuTEVCVGVzdHMpCisgICAgICAgIHJ1bkxF
QlRlc3RzKCk7CisKKyAgICBpZiAob3B0aW9ucy5tX3J1bldhc21UZXN0cykgeworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAg
ICAgIHZtID0gJkpTQzo6Vk06OmNyZWF0ZShKU0M6OkxhcmdlSGVhcCkubGVha1JlZigpOworICAg
ICAgICBydW5XYXNtVGVzdHMoKTsKKyNlbHNlCisgICAgICAgIGRhdGFMb2dMbigiV2FzbSBpcyBu
b3QgZW5hYmxlZCEiKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCisgICAgfQorCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkOTk2YWM5N2NhMTk4OTdjMjcyYmE3NTBiZWQ3NjEyMTQ2
NjQ0MGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCi0KLSNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5l
cy5oIgotI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jb25zdCBDbGFzc0luZm8gSlNXQVNNTW9kdWxlOjpzX2luZm8gPSB7ICJXQVNNTW9kdWxlIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dBU01Nb2R1bGUpIH07Ci0K
LUpTV0FTTU1vZHVsZTo6SlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQotICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQot
ewotICAgIGlmIChhcnJheUJ1ZmZlcikKLSAgICAgICAgbV9hcnJheUJ1ZmZlci5zZXQodm0sIHRo
aXMsIGFycmF5QnVmZmVyKTsKLX0KLQotdm9pZCBKU1dBU01Nb2R1bGU6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIEpTV0FTTU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dBU01N
b2R1bGUqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU1dBU01Nb2R1bGU6On5KU1dBU01Nb2R1
bGUoKTsKLX0KLQotdm9pZCBKU1dBU01Nb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU1dBU01Nb2R1bGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNXQVNNTW9kdWxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlC
dWZmZXIpOwotICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25z
KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOwotICAgIGZvciAoYXV0byBpbXBv
cnRlZEZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9pbXBvcnRlZEZ1bmN0aW9ucykKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJmltcG9ydGVkRnVuY3Rpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vSlNXQVNNTW9kdWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjZl
YjVmZDExYWM0ODIwNmRkZjM4YjAzZWM0YzQ1NDljZTgxNDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
QVNNTW9kdWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKLSNp
bmNsdWRlICJXQVNNRm9ybWF0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1dBU01N
b2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewotcHVibGljOgotICAgIHR5cGVk
ZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKLQotICAgIHVuaW9uIEdsb2JhbFZhcmlhYmxl
IHsKLSAgICAgICAgR2xvYmFsVmFyaWFibGUoaW50MzJfdCB2YWx1ZSkKLSAgICAgICAgICAgIDog
aW50VmFsdWUodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBHbG9iYWxWYXJp
YWJsZShmbG9hdCB2YWx1ZSkKLSAgICAgICAgICAgIDogZmxvYXRWYWx1ZSh2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgICAgIEdsb2JhbFZhcmlhYmxlKGRvdWJsZSB2YWx1ZSkKLSAg
ICAgICAgICAgIDogZG91YmxlVmFsdWUodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIGludDMyX3QgaW50VmFsdWU7Ci0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7Ci0gICAg
ICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICB9OwotCi0gICAgc3RhdGljIEpTV0FTTU1vZHVs
ZSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXIqIGFy
cmF5QnVmZmVyKQotICAgIHsKLSAgICAgICAgSlNXQVNNTW9kdWxlKiBtb2R1bGUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dBU01Nb2R1bGU+KHZtLmhlYXApKSBKU1dBU01Nb2R1bGUo
dm0sIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIpOwotICAgICAgICBtb2R1bGUtPmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIG1vZHVsZTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0KLSAgICBWZWN0b3I8dWludDMyX3Q+JiBpMzJDb25zdGFudHMoKSB7IHJl
dHVybiBtX2kzMkNvbnN0YW50czsgfQotICAgIFZlY3RvcjxmbG9hdD4mIGYzMkNvbnN0YW50cygp
IHsgcmV0dXJuIG1fZjMyQ29uc3RhbnRzOyB9Ci0gICAgVmVjdG9yPGRvdWJsZT4mIGY2NENvbnN0
YW50cygpIHsgcmV0dXJuIG1fZjY0Q29uc3RhbnRzOyB9Ci0gICAgVmVjdG9yPFdBU006OlNpZ25h
dHVyZT4mIHNpZ25hdHVyZXMoKSB7IHJldHVybiBtX3NpZ25hdHVyZXM7IH0KLSAgICBWZWN0b3I8
V0FTTTo6RnVuY3Rpb25JbXBvcnQ+JiBmdW5jdGlvbkltcG9ydHMoKSB7IHJldHVybiBtX2Z1bmN0
aW9uSW1wb3J0czsgfQotICAgIFZlY3RvcjxXQVNNOjpGdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4m
IGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRTaWdu
YXR1cmVzOyB9Ci0gICAgVmVjdG9yPFdBU006OlR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzKCkg
eyByZXR1cm4gbV9nbG9iYWxWYXJpYWJsZVR5cGVzOyB9Ci0gICAgVmVjdG9yPFdBU006OkZ1bmN0
aW9uRGVjbGFyYXRpb24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8V0FTTTo6RnVuY3Rpb25Qb2ludGVyVGFibGU+
JiBmdW5jdGlvblBvaW50ZXJUYWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxl
czsgfQotCi0gICAgY29uc3QgSlNBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2FycmF5QnVmZmVyLmdldCgpOyB9Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1
bmN0aW9uPj4mIGZ1bmN0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9Ci0gICAgVmVjdG9y
PHVuc2lnbmVkPiYgZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25TdGFydE9mZnNldHNJblNvdXJjZTsgfQotICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGZ1bmN0
aW9uU3RhY2tIZWlnaHRzKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNrSGVpZ2h0czsgfQotICAg
IFZlY3RvcjxHbG9iYWxWYXJpYWJsZT4mIGdsb2JhbFZhcmlhYmxlcygpIHsgcmV0dXJuIG1fZ2xv
YmFsVmFyaWFibGVzOyB9Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4mIGlt
cG9ydGVkRnVuY3Rpb25zKCkgeyByZXR1cm4gbV9pbXBvcnRlZEZ1bmN0aW9uczsgfQotCi1wcml2
YXRlOgotICAgIEpTV0FTTU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIEpTQXJyYXlCdWZmZXIqKTsK
LQotICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9pMzJDb25zdGFudHM7Ci0gICAgVmVjdG9yPGZsb2F0
PiBtX2YzMkNvbnN0YW50czsKLSAgICBWZWN0b3I8ZG91YmxlPiBtX2Y2NENvbnN0YW50czsKLSAg
ICBWZWN0b3I8V0FTTTo6U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7Ci0gICAgVmVjdG9yPFdBU006
OkZ1bmN0aW9uSW1wb3J0PiBtX2Z1bmN0aW9uSW1wb3J0czsKLSAgICBWZWN0b3I8V0FTTTo6RnVu
Y3Rpb25JbXBvcnRTaWduYXR1cmU+IG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOwotICAgIFZl
Y3RvcjxXQVNNOjpUeXBlPiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7Ci0gICAgVmVjdG9yPFdBU006
OkZ1bmN0aW9uRGVjbGFyYXRpb24+IG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7Ci0gICAgVmVjdG9y
PFdBU006OkZ1bmN0aW9uUG9pbnRlclRhYmxlPiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsKLQot
ICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyOwotICAgIFZlY3Rv
cjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwotICAgIFZlY3Rvcjx1bnNp
Z25lZD4gbV9mdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOwotICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gbV9mdW5jdGlvblN0YWNrSGVpZ2h0czsKLSAgICBWZWN0b3I8R2xvYmFsVmFyaWFibGU+IG1f
Z2xvYmFsVmFyaWFibGVzOwotICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1f
aW1wb3J0ZWRGdW5jdGlvbnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL0pTV2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dhc21N
b2R1bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmNjZhOWQ4Y2I4NzBkODZmMzEzMGZlZTQ0OGE2YjI2MjRm
ZWQ1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dh
c21Nb2R1bGUuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXYXNt
TW9kdWxlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBdXhpbGlh
cnlCYXJyaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXYXNtTW9kdWxlOjpzX2luZm8gPSB7
ICJXYXNtTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dh
c21Nb2R1bGUpIH07CisKK0pTV2FzbU1vZHVsZTo6SlNXYXNtTW9kdWxlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQorICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQoreworICAgIGlmIChhcnJheUJ1ZmZlcikKKyAgICAgICAgbV9hcnJheUJ1
ZmZlci5zZXQodm0sIHRoaXMsIGFycmF5QnVmZmVyKTsKK30KKwordm9pZCBKU1dhc21Nb2R1bGU6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEpTV2FzbU1vZHVsZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1dhc21Nb2R1bGUqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1dhc21Nb2R1
bGU6On5KU1dhc21Nb2R1bGUoKTsKK30KKwordm9pZCBKU1dhc21Nb2R1bGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1dhc21Nb2R1
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXYXNtTW9kdWxlKj4oY2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fYXJyYXlCdWZmZXIpOworICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb25zKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOworICAg
IGZvciAoYXV0byBpbXBvcnRlZEZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9pbXBvcnRlZEZ1bmN0
aW9ucykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmltcG9ydGVkRnVuY3Rpb24pOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2FzbU1vZHVsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JiMjM1MmY3
OTkwZmI2MGM2ZDk4NzgzOTczY2I5MDQxOTBkMWI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMTE1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9i
amVjdC5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTV2FzbU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgdW5pb24gR2xv
YmFsVmFyaWFibGUgeworICAgICAgICBHbG9iYWxWYXJpYWJsZShpbnQzMl90IHZhbHVlKQorICAg
ICAgICAgICAgOiBpbnRWYWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IEdsb2JhbFZhcmlhYmxlKGZsb2F0IHZhbHVlKQorICAgICAgICAgICAgOiBmbG9hdFZhbHVlKHZh
bHVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgR2xvYmFsVmFyaWFibGUoZG91Ymxl
IHZhbHVlKQorICAgICAgICAgICAgOiBkb3VibGVWYWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgaW50MzJfdCBpbnRWYWx1ZTsKKyAgICAgICAgZmxvYXQgZmxvYXRW
YWx1ZTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOworICAgIH07CisKKyAgICBzdGF0aWMg
SlNXYXNtTW9kdWxlKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJh
eUJ1ZmZlciogYXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICBKU1dhc21Nb2R1bGUqIG1vZHVs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2FzbU1vZHVsZT4odm0uaGVhcCkpIEpT
V2FzbU1vZHVsZSh2bSwgc3RydWN0dXJlLCBhcnJheUJ1ZmZlcik7CisgICAgICAgIG1vZHVsZS0+
ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gbW9kdWxlOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4mIGkzMkNvbnN0
YW50cygpIHsgcmV0dXJuIG1faTMyQ29uc3RhbnRzOyB9CisgICAgVmVjdG9yPGZsb2F0PiYgZjMy
Q29uc3RhbnRzKCkgeyByZXR1cm4gbV9mMzJDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8ZG91Ymxl
PiYgZjY0Q29uc3RhbnRzKCkgeyByZXR1cm4gbV9mNjRDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8
V2FzbTo6U2lnbmF0dXJlPiYgc2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fc2lnbmF0dXJlczsgfQor
ICAgIFZlY3RvcjxXYXNtOjpGdW5jdGlvbkltcG9ydD4mIGZ1bmN0aW9uSW1wb3J0cygpIHsgcmV0
dXJuIG1fZnVuY3Rpb25JbXBvcnRzOyB9CisgICAgVmVjdG9yPFdhc206OkZ1bmN0aW9uSW1wb3J0
U2lnbmF0dXJlPiYgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkgeyByZXR1cm4gbV9mdW5jdGlv
bkltcG9ydFNpZ25hdHVyZXM7IH0KKyAgICBWZWN0b3I8V2FzbTo6VHlwZT4mIGdsb2JhbFZhcmlh
YmxlVHlwZXMoKSB7IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7IH0KKyAgICBWZWN0b3I8
V2FzbTo6RnVuY3Rpb25EZWNsYXJhdGlvbj4mIGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1
cm4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxXYXNtOjpGdW5jdGlvblBv
aW50ZXJUYWJsZT4mIGZ1bmN0aW9uUG9pbnRlclRhYmxlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25Q
b2ludGVyVGFibGVzOyB9CisKKyAgICBjb25zdCBKU0FycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXIuZ2V0KCk7IH0KKyAgICBWZWN0b3I8V3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24+PiYgZnVuY3Rpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0K
KyAgICBWZWN0b3I8dW5zaWduZWQ+JiBmdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlKCkgeyBy
ZXR1cm4gbV9mdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOyB9CisgICAgVmVjdG9yPHVuc2ln
bmVkPiYgZnVuY3Rpb25TdGFja0hlaWdodHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uU3RhY2tIZWln
aHRzOyB9CisgICAgVmVjdG9yPEdsb2JhbFZhcmlhYmxlPiYgZ2xvYmFsVmFyaWFibGVzKCkgeyBy
ZXR1cm4gbV9nbG9iYWxWYXJpYWJsZXM7IH0KKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+PiYgaW1wb3J0ZWRGdW5jdGlvbnMoKSB7IHJldHVybiBtX2ltcG9ydGVkRnVuY3Rpb25z
OyB9CisKK3ByaXZhdGU6CisgICAgSlNXYXNtTW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgSlNBcnJh
eUJ1ZmZlciopOworCisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2kzMkNvbnN0YW50czsKKyAgICBW
ZWN0b3I8ZmxvYXQ+IG1fZjMyQ29uc3RhbnRzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fZjY0Q29u
c3RhbnRzOworICAgIFZlY3RvcjxXYXNtOjpTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKKyAgICBW
ZWN0b3I8V2FzbTo6RnVuY3Rpb25JbXBvcnQ+IG1fZnVuY3Rpb25JbXBvcnRzOworICAgIFZlY3Rv
cjxXYXNtOjpGdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZXM7CisgICAgVmVjdG9yPFdhc206OlR5cGU+IG1fZ2xvYmFsVmFyaWFibGVUeXBlczsKKyAgICBW
ZWN0b3I8V2FzbTo6RnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsK
KyAgICBWZWN0b3I8V2FzbTo6RnVuY3Rpb25Qb2ludGVyVGFibGU+IG1fZnVuY3Rpb25Qb2ludGVy
VGFibGVzOworCisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXI7
CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisgICAg
VmVjdG9yPHVuc2lnbmVkPiBtX2Z1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2U7CisgICAgVmVj
dG9yPHVuc2lnbmVkPiBtX2Z1bmN0aW9uU3RhY2tIZWlnaHRzOworICAgIFZlY3RvcjxHbG9iYWxW
YXJpYWJsZT4gbV9nbG9iYWxWYXJpYWJsZXM7CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1
bmN0aW9uPj4gbV9pbXBvcnRlZEZ1bmN0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiNGE4MDBjOGE0ZmZlOWY1M2VhODhiNDYyMmQxZmNjZjRhZWQ0ZTNhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01CM0lSR2VuZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldBU01CM0lSR2VuZXJhdG9yLmgiCi0KLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCi0jaW5jbHVkZSAiQjNGaXhTU0EuaCIKLSNpbmNsdWRl
ICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgotI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIK
LSNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKLSNp
bmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKLSNpbmNsdWRlICJCM1dhc21BZGRyZXNzVmFsdWUu
aCIKLSNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCi0jaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAiV0FTTUNhbGxpbmdDb252ZW50aW9uLmgiCi0jaW5jbHVk
ZSAiV0FTTUZ1bmN0aW9uUGFyc2VyLmgiCi0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotCi12b2lkIGR1bXBQcm9jZWR1cmUodm9pZCogcHRyKQotewot
ICAgIEpTQzo6QjM6OlByb2NlZHVyZSogcHJvYyA9IHN0YXRpY19jYXN0PEpTQzo6QjM6OlByb2Nl
ZHVyZSo+KHB0cik7Ci0gICAgcHJvYy0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotfQotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1uYW1lc3BhY2UgewotCi11c2luZyBuYW1l
c3BhY2UgQjM7Ci0KLWNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1pbmxpbmUgQjM6Ok9w
Y29kZSB0b0IzT3AoQmluYXJ5T3BUeXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSNkZWZp
bmUgQ1JFQVRFX0NBU0UobmFtZSwgb3AsIGIzb3ApIGNhc2UgQmluYXJ5T3BUeXBlOjpuYW1lOiBy
ZXR1cm4gYjNvcDsKLSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkKLSN1
bmRlZiBDUkVBVEVfQ0FTRQotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi1pbmxpbmUgQjM6Ok9wY29kZSB0b0IzT3AoVW5hcnlPcFR5cGUgb3ApCi17Ci0gICAg
c3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBvcCwgYjNvcCkgY2FzZSBV
bmFyeU9wVHlwZTo6bmFtZTogcmV0dXJuIGIzb3A7Ci0gICAgRk9SX0VBQ0hfV0FTTV9VTkFSWV9P
UChDUkVBVEVfQ0FTRSkKLSN1bmRlZiBDUkVBVEVfQ0FTRQotICAgIH0KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1jbGFzcyBCM0lSR2VuZXJhdG9yIHsKLXByaXZhdGU6
Ci0gICAgY2xhc3MgTGF6eUJsb2NrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExhenlCbG9jayhC
YXNpY0Jsb2NrKiBibG9jaykKLSAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuICEhbV9ibG9jazsgfQotCi0gICAgICAgIEJhc2ljQmxvY2sqIGdldChQcm9jZWR1cmUm
IHByb2MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9ibG9jaykKLSAgICAgICAgICAg
ICAgICBtX2Jsb2NrID0gcHJvYy5hZGRCbG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIG1fYmxv
Y2s7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fYmxvY2spCi0gICAgICAgICAgICAgICAg
b3V0LnByaW50KCptX2Jsb2NrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIlVuaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKLSAgICB9OwotCi1wdWJsaWM6
Ci0gICAgc3RydWN0IENvbnRyb2xEYXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJl
JiBwcm9jLCBUeXBlIHNpZ25hdHVyZSwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIsIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG51bGxwdHIpCi0gICAgICAgICAgICA6IGNvbnRpbnVh
dGlvbihjb250aW51YXRpb24pCi0gICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSAhPSBWb2lkKQotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQocHJvYy5hZGRWYXJpYWJsZSh0b0IzVHlwZShzaWduYXR1cmUpKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2Ug
QmxvY2tUeXBlOjpJZjoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAiKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoK
LSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkJsb2NrOiAiKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgotICAgICAgICAgICAgICAg
IG91dC5wcmludCgiTG9vcDogICIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsIGNvbnRpbnVhdGlv
biwgIiwgU3BlY2lhbDogIik7Ci0gICAgICAgICAgICBpZiAoc3BlY2lhbCkKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoKnNwZWNpYWwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiTm9uZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQmxvY2tUeXBlIHR5
cGUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNwZWNpYWwpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEJsb2NrVHlwZTo6QmxvY2s7Ci0gICAgICAgICAgICBpZiAoY29udGlu
dWF0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBCbG9ja1R5cGU6OklmOwotICAgICAgICAg
ICAgcmV0dXJuIEJsb2NrVHlwZTo6TG9vcDsKLSAgICAgICAgfQotCi0gICAgICAgIEJhc2ljQmxv
Y2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHNwZWNpYWw7Ci0gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uLmdldChwcm9j
KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIEIzSVJH
ZW5lcmF0b3I7Ci0gICAgICAgIC8vIFdlIHVzZSBhIExhenlCbG9jayBmb3IgdGhlIGNvbnRpbnVh
dGlvbiBzaW5jZSBCMzo6dmFsaWRhdGUgZG9lcyBub3QgbGlrZSBvcnBoYW5lZCBibG9ja3MuIE5v
dGUsCi0gICAgICAgIC8vIGl0J3MgcG9zc2libGUgdG8gY3JlYXRlIGFuIG9ycGhhbmVkIGJsb2Nr
IGJ5IGRvaW5nIHNvbWV0aGluZyBsaWtlIChibG9jayAocmV0dXJuICguLi4pKSkuIEluCi0gICAg
ICAgIC8vIHRoYXQgZXhhbXBsZSwgaWYgd2UgZWFnZXJseSBhbGxvY2F0ZSBhIEJhc2ljQmxvY2sg
Zm9yIHRoZSBjb250aW51YXRpb24gaXQgd2lsbCBuZXZlciBiZSByZWFjaGFibGUuCi0gICAgICAg
IExhenlCbG9jayBjb250aW51YXRpb247Ci0gICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0g
ICAgICAgIFZlY3RvcjxWYXJpYWJsZSosIDE+IHJlc3VsdDsKLSAgICB9OwotCi0gICAgdHlwZWRl
ZiBWYWx1ZSogRXhwcmVzc2lvblR5cGU7Ci0gICAgdHlwZWRlZiBDb250cm9sRGF0YSBDb250cm9s
VHlwZTsKLSAgICB0eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxp
c3Q7Ci0gICAgdHlwZWRlZiBWZWN0b3I8VmFyaWFibGUqLCAxPiBSZXN1bHRMaXN0OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsK
LQotICAgIEIzSVJHZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2Vk
Q2FsbD4mIHVubGlua2VkQ2FsbHMpOwotCi0gICAgdm9pZCBhZGRBcmd1bWVudHMoY29uc3QgVmVj
dG9yPFR5cGU+Jik7Ci0gICAgdm9pZCBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7Ci0gICAgRXhw
cmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwotCi0gICAgLy8gTG9jYWxz
Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7Ci0KLSAgICAvLyBNZW1v
cnkKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7
Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwot
Ci0gICAgLy8gQmFzaWMgb3BlcmF0b3JzCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYmlu
YXJ5T3AoQmluYXJ5T3BUeXBlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gdW5hcnlPcChVbmFyeU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKLQotICAgIC8vIENvbnRyb2wgZmxvdwotICAgIENvbnRyb2xEYXRhIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7Ci0gICAgQ29udHJvbERhdGEg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwotICAgIENvbnRyb2xE
YXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5
cGUgc2lnbmF0dXJlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRy
b2xEYXRhJik7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRCbG9jayhDb250cm9sRGF0YSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3Rh
Y2spOwotCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxs
ZWVJbmRleCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotCi0gICAgYm9vbCBpc0NvbnRpbnVh
dGlvblJlYWNoYWJsZShDb250cm9sRGF0YSYpOwotCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3Rv
cjxDb250cm9sVHlwZT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjayk7Ci0KLXByaXZhdGU6Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBzaXplT2ZPcCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BU
eXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0g
ICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLQotICAgIHZv
aWQgdW5pZnkoVmFyaWFibGUqIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsK
LSAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1
bHRTdGFjaywgUmVzdWx0TGlzdCYgc3RhY2spOwotCi0gICAgTWVtb3J5KiBtX21lbW9yeTsKLSAg
ICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKLSAg
ICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKLSAgICAvLyBtX3VubGlrZWRDYWxscyBpcyBs
aXN0IG9mIGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVz
cyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgotICAgIFZlY3RvcjxVbmxpbmtlZENhbGw+JiBt
X3VubGlua2VkQ2FsbHM7Ci0gICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUjsKLSAgICBHUFJSZWcg
bV9tZW1vcnlTaXplR1BSOwotfTsKLQotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1v
cnkqIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZENhbGw+JiB1
bmxpbmtlZENhbGxzKQotICAgIDogbV9tZW1vcnkobWVtb3J5KQotICAgICwgbV9wcm9jKHByb2Nl
ZHVyZSkKLSAgICAsIG1fdW5saW5rZWRDYWxscyh1bmxpbmtlZENhbGxzKQotewotICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0KLSAgICBpZiAobV9tZW1vcnkpIHsKLSAg
ICAgICAgbV9tZW1vcnlCYXNlR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VN
ZW1vcnlQb2ludGVyOwotICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BS
KTsKLSAgICAgICAgQVNTRVJUKCFtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lz
dGVyc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gbV9tZW1vcnkt
PnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOwotICAgICAg
ICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIGluZm8gOiBtX21lbW9yeS0+cGlu
bmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIG1fcHJvYy5waW5SZWdp
c3RlcihpbmZvLnNpemVSZWdpc3Rlcik7Ci0KLSAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHND
aGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1
bnNpZ25lZCkgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5
U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVud2luZCB0aGUgc3RhY2sgYW5kIHRocm93IGEgSlMgZXhjZXB0aW9uLiBTZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMzNTEKLSAgICAgICAgICAgIGppdC5i
cmVha3BvaW50KCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9pZCBCM0lSR2VuZXJhdG9y
OjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KQotewotICAgIG1fbG9jYWxzLnJl
c2VydmVDYXBhY2l0eShtX2xvY2Fscy5zaXplKCkgKyBjb3VudCk7Ci0gICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fbG9jYWxzLmFwcGVuZChtX3Byb2Mu
YWRkVmFyaWFibGUodG9CM1R5cGUodHlwZSkpKTsKLX0KLQotdm9pZCBCM0lSR2VuZXJhdG9yOjph
ZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiB0eXBlcykKLXsKLSAgICBBU1NFUlQoIW1f
bG9jYWxzLnNpemUoKSk7Ci0gICAgbV9sb2NhbHMuZ3Jvdyh0eXBlcy5zaXplKCkpOwotICAgIHdh
c21DYWxsaW5nQ29udmVudGlvbigpLmxvYWRBcmd1bWVudHModHlwZXMsIG1fcHJvYywgbV9jdXJy
ZW50QmxvY2ssIE9yaWdpbigpLAotICAgICAgICBbJl0gKEV4cHJlc3Npb25UeXBlIGFyZ3VtZW50
LCB1bnNpZ25lZCBpKSB7Ci0gICAgICAgICAgICBWYXJpYWJsZSogYXJndW1lbnRWYXJpYWJsZSA9
IG1fcHJvYy5hZGRWYXJpYWJsZShhcmd1bWVudC0+dHlwZSgpKTsKLSAgICAgICAgICAgIG1fbG9j
YWxzW2ldID0gYXJndW1lbnRWYXJpYWJsZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBhcmd1bWVudFZh
cmlhYmxlLCBhcmd1bWVudCk7Ci0gICAgICAgIH0pOwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6
OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAg
IEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgbV9sb2Nh
bHNbaW5kZXhdKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjpz
ZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpCi17Ci0gICAgQVNT
RVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0sIHZh
bHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9y
OjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKLXsKLSAgICBBU1NFUlQobV9t
ZW1vcnlCYXNlR1BSICYmIG1fbWVtb3J5U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJh
dGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxX
YXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlT
aXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsKLSAgICBwb2ludGVyID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBw
b2ludGVyKTsKLSAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQWRkcmVz
c1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeUJhc2VHUFIpOwotfQot
Ci1pbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCi17Ci0gICAgc3dp
dGNoIChvcCkgewotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgotICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STMyTG9hZDhVOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgotICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZT
OgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6Ci0gICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDMyVToKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgot
ICAgICAgICByZXR1cm4gODsKLSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6Ci0gICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9h
ZDoKLSAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgVmFsdWUqIEIz
SVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQotewotICAgIHN3aXRjaCAob3Ap
IHsKLSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewotICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIG9yaWdp
biwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQ4UzogewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBT
RXh0MzIsIG9yaWdpbiwgdmFsdWUpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDhVOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgIH0K
LQotICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDha
LCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7Ci0gICAg
fQotCi0gICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOiB7Ci0gICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9y
aWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICB9Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMTZTOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQp
OwotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKTsKLSAgICB9Ci0K
LSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJ
bnQzMiwgb3JpZ2luLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4sIHZhbHVlKTsKLSAgICB9Ci0K
LSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJ
bnQzMiwgb3JpZ2luLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKLSAgICB9Ci0K
LSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdp
biwgcG9pbnRlcik7Ci0gICAgfQotCi0gICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7Ci0g
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEZsb2F0LCBvcmlnaW4sIHBvaW50ZXIpOwotICAgIH0KLQotICAgIGNhc2UgTG9h
ZE9wVHlwZTo6RjY0TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlcik7
Ci0gICAgfQotCi0gICAgLy8gQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0LgotICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKLSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQx
NlU6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0
KQotewotICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwotCi0gICAgcmVzdWx0
ID0gZW1pdExvYWRPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBv
aW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWlubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQot
ewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6Ci0g
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgotICAgICAgICByZXR1cm4gMTsKLSAgICBj
YXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlMTY6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3Jl
OgotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6Ci0gICAgY2FzZSBTdG9yZU9wVHlw
ZTo6RjMyU3RvcmU6Ci0gICAgICAgIHJldHVybiA0OwotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2
NFN0b3JlOgotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgotICAgICAgICByZXR1cm4g
ODsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotCi1pbmxp
bmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgT3JpZ2lu
IG9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVp
bnQzMl90IG9mZnNldCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STY0U3RvcmU4OgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOwotICAgICAgICBGQUxMVEhST1VH
SDsKLQotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgU3RvcmVP
cFR5cGU6Okk2NFN0b3JlMTY6Ci0gICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7Ci0gICAgICAgIEZBTExU
SFJPVUdIOwotCi0gICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2LCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOwotICAgICAg
ICBGQUxMVEhST1VHSDsKLQotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgotICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlOgotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3Jl
OgotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4sIHZhbHVlLCBw
b2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCBvZmZzZXQpCi17Ci0gICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7
Ci0KLSAgICBlbWl0U3RvcmVPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2lu
dGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjp1bmFyeU9wKFVuYXJ5
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCB0
b0IzT3Aob3ApLCBPcmlnaW4oKSwgYXJnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBC
M0lSR2VuZXJhdG9yOjpiaW5hcnlPcChCaW5hcnlPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAg
IHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgdG9CM09w
KG9wKSwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQjNJ
UkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlw
ZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl
IEludDMyOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7Ci0g
ICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCB2YWx1ZSk7Ci0gICAgY2FzZSBGbG9hdDoK
LSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlKSkpOwotICAgIGNhc2UgRG91YmxlOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3
aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0K
LQotQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlw
ZSBzaWduYXR1cmUpCi17Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJl
KTsKLX0KLQotQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9v
cChUeXBlIHNpZ25hdHVyZSkKLXsKLSAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJs
b2NrKCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEp1bXAsIE9yaWdpbigpLCBib2R5KTsKLSAgICBib2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJl
bnRCbG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIHJldHVybiBDb250cm9s
RGF0YShtX3Byb2MsIHNpZ25hdHVyZSwgYm9keSk7Ci19Ci0KLUIzSVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlw
ZSBzaWduYXR1cmUpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZG8gc29tZSBraW5k
IG9mIHN0YWNrIHBhc3NpbmcuCi0KLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJvYy5hZGRC
bG9jaygpOwotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0g
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0KLSAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIE9yaWdp
bigpLCBjb25kaXRpb24pOwotICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1
ZW50ZWRCbG9jayh0YWtlbiksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOwotICAgIHRha2Vu
LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbm90VGFrZW4tPmFkZFByZWRl
Y2Vzc29yKG1fY3VycmVudEJsb2NrKTsKLQotICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Ci0g
ICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBub3RUYWtlbiwgY29udGlu
dWF0aW9uKTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBk
YXRhKQotewotICAgIEFTU0VSVChkYXRhLmNvbnRpbnVhdGlvbik7Ci0gICAgbV9jdXJyZW50Qmxv
Y2sgPSBkYXRhLnNwZWNpYWw7Ci0gICAgLy8gQ2xlYXIgdGhlIHNwZWNpYWwgcG9pbnRlciBzbyB0
aGF0IHdoZW4gd2UgcGFyc2UgdGhlIGVuZCB3ZSBkb24ndCB0aGluayB0aGF0IHRoaXMgYmxvY2sg
aXMgYW4gaWYgYmxvY2suCi0gICAgZGF0YS5zcGVjaWFsID0gbnVsbHB0cjsKLSAgICBBU1NFUlQo
ZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpCi17Ci0gICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7Ci0gICAg
aWYgKHJldHVyblZhbHVlcy5zaXplKCkpCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVz
WzBdKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMp
Ci17Ci0gICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCht
X3Byb2MpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1
bHQpOwotICAgIGlmIChjb25kaXRpb24pIHsKLSAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgT3JpZ2luKCksIGNvbmRpdGlvbik7Ci0gICAg
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQp
LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIHRhcmdldC0+YWRkUHJl
ZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwotICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRl
Y2Vzc29yKG1fY3VycmVudEJsb2NrKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51
YXRpb247Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0
KSk7Ci0gICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2Nr
KENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQotewot
ICAgIGlmICghZGF0YS5jb250aW51YXRpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7
Ci0gICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgQVNTRVJU
KCFkYXRhLnNwZWNpYWwtPnNpemUoKSAmJiAhZGF0YS5zcGVjaWFsLT5zdWNjZXNzb3JzKCkuc2l6
ZSgpKTsKLSAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWxzZSBibG9jayB3ZSBu
ZWVkIHRvIHBvaW50IHRoZSBub3RUYWtlbiBicmFuY2ggdG8gdGhlIGNvbnRpbnVhdGlvbi4KLSAg
ICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBP
cmlnaW4oKSk7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVk
QmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNz
b3IoZGF0YS5zcGVjaWFsKTsKLSAgICB9Ci0KLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHBy
ZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGNvbnRpbnVhdGlvbik7Ci0gICAg
Y29udGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJy
ZW50QmxvY2sgPSBjb250aW51YXRpb247Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBGdW5jdGlv
bkluZm9ybWF0aW9uJiBpbmZvLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KQotewotICAgIEFTU0VSVChpbmZvLnNpZ25hdHVyZS0+YXJndW1lbnRz
LnNpemUoKSA9PSBhcmdzLnNpemUoKSk7Ci0KLSAgICBUeXBlIHJldHVyblR5cGUgPSBpbmZvLnNp
Z25hdHVyZS0+cmV0dXJuVHlwZTsKLQotICAgIHNpemVfdCBjYWxsSW5kZXggPSBtX3VubGlua2Vk
Q2FsbHMuc2l6ZSgpOwotICAgIG1fdW5saW5rZWRDYWxscy5ncm93KGNhbGxJbmRleCArIDEpOwot
ICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1f
Y3VycmVudEJsb2NrLCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCi0gICAg
ICAgIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7Ci0gICAgICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Ci0gICAgICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotCi0gICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
ICAgICBtX3VubGlua2VkQ2FsbHNbY2FsbEluZGV4XSA9IHsgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGNhbGwpLCBmdW5jdGlvbkluZGV4IH07Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJUkdlbmVy
YXRvcjo6aXNDb250aW51YXRpb25SZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpCi17Ci0gICAg
Ly8gSWYgbm90aGluZyB0YXJnZXRzIHRoZSBjb250aW51YXRpb24gb2YgdGhlIGN1cnJlbnQgYmxv
Y2sgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGNyZWF0ZQotICAgIC8vIGFuIG9ycGhhbmVkIEJhc2lj
QmxvY2sgc2luY2UgaXQgY2FuJ3QgYmUgcmVhY2hlZCBieSBmYWxsdGhyb3VnaC4KLSAgICBpZiAo
IWRhdGEuY29udGludWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2N1cnJl
bnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uLmdldChtX3Byb2MpOwotICAgIGlmIChkYXRhLnR5
cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFkZFByZWRlY2Vzc29yKGRhdGEuc3BlY2lhbCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFy
aWFibGUqIHZhcmlhYmxlLCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCi17Ci0gICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZh
cmlhYmxlLCBzb3VyY2UpOwotfQotCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVz
dWx0KQotewotICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpID49IHJlc3VsdFN0YWNrLnNpemUoKSk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFN0YWNrLnNpemUoKTsgKytpKQot
ICAgICAgICB1bmlmeShyZXN1bHRbaV0sIHJlc3VsdFN0YWNrW2ldKTsKLX0KLQotdm9pZCBCM0lS
R2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mIGNvbnRyb2xTdGFjaywg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKLXsKLSAgICBkYXRhTG9nTG4o
IlByb2Nlc3NpbmcgR3JhcGg6Iik7Ci0gICAgZGF0YUxvZyhtX3Byb2MpOwotICAgIGRhdGFMb2dM
bigiV2l0aCBjdXJyZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7Ci0gICAgZGF0YUxvZ0xu
KCJDb250cm9sIHN0YWNrOiIpOwotICAgIGZvciAoY29uc3QgQ29udHJvbFR5cGUmIGRhdGEgOiBj
b250cm9sU3RhY2spCi0gICAgICAgIGRhdGFMb2dMbigiICAiLCBkYXRhKTsKLSAgICBkYXRhTG9n
TG4oIkV4cHJlc3Npb25TdGFjazoiKTsKLSAgICBmb3IgKGNvbnN0IEV4cHJlc3Npb25UeXBlJiBl
eHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgKmV4
cHJlc3Npb24pOwotICAgIGRhdGFMb2dMbigiXG4iKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCi0KLQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYXRlSlNX
cmFwcGVyKFZNJiB2bSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBtYWluRnVuY3Rpb24sIE1lbW9yeSogbWVtb3J5KQotewotICAgIFByb2NlZHVyZSBw
cm9jOwotICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygpOwotCi0gICAgLy8g
Q2hlY2sgYXJndW1lbnQgY291bnQgaXMgc2FuZS4KLSAgICBWYWx1ZSogZnJhbWVQb2ludGVyID0g
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdp
bigpKTsKLSAgICBWYWx1ZSogb2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgVmFsdWUqIGFyZ3VtZW50Q291bnQgPSBibG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCi0g
ICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGZyYW1l
UG9pbnRlciwgb2ZmU2V0T2ZBcmd1bWVudENvdW50KSk7Ci0KLSAgICBWYWx1ZSogZXhwZWN0ZWRB
cmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOwotCi0gICAgQ2hlY2tWYWx1ZSogYXJn
dW1lbnRDb3VudENoZWNrID0gYmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVj
aywgT3JpZ2luKCksCi0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3Zl
LCBPcmlnaW4oKSwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVudENvdW50KSk7Ci0gICAg
YXJndW1lbnRDb3VudENoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50
KCk7Ci0gICAgfSk7Ci0KLSAgICAvLyBNb3ZlIG1lbW9yeSB2YWx1ZXMgdG8gdGhlIGFwcHJvcmlh
dGUgcGxhY2VzLCBpZiBuZWVkZWQuCi0gICAgVmFsdWUqIGJhc2VNZW1vcnkgPSBudWxscHRyOwot
ICAgIFZlY3RvcjxWYWx1ZSo+IHNpemVzOwotICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgYmFz
ZU1lbW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IG1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBWYWx1ZSogc2l6ZSA9IGJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKLSAgICAgICAgICAg
IGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4obWVtb3J5KSArIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKLSAgICAgICAg
c2l6ZXMucmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lz
dGVycy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS0+cGlubmVkUmVn
aXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykgewotICAgICAgICAgICAgc2l6ZXMuYXBwZW5kKGJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIHNpemUsCi0gICAgICAgICAg
ICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpbmZv
LnNpemVPZmZzZXQpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgb3VyIGFyZ3Vt
ZW50cy4KLSAgICBWZWN0b3I8VmFsdWUqPiBhcmd1bWVudHM7Ci0gICAganNjQ2FsbGluZ0NvbnZl
bnRpb24oKS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZS0+YXJndW1lbnRzLCBwcm9jLCBibG9jaywg
T3JpZ2luKCksIFsmXSAoVmFsdWUqIGFyZ3VtZW50LCB1bnNpZ25lZCkgewotICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKLSAgICB9KTsKLQotICAgIC8vIE1vdmUgdGhlIGFyZ3Vt
ZW50cyBpbnRvIHBsYWNlLgotICAgIFZhbHVlKiByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5zZXR1cENhbGwocHJvYywgYmxvY2ssIE9yaWdpbigpLCBhcmd1bWVudHMsIHRvQjNUeXBl
KHNpZ25hdHVyZS0+cmV0dXJuVHlwZSksIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
KSB7Ci0gICAgICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzaXplcy5zaXpl
KCkgPT0gbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7Ci0g
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShiYXNlTWVtb3J5
LCBWYWx1ZVJlcDo6cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50
ZXIpKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFs
dWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXpl
UmVnaXN0ZXJzW2ldLnNpemVSZWdpc3RlcikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKG1haW5GdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAvLyBSZXR1
cm4gdGhlIHJlc3VsdCwgaWYgbmVlZGVkLgotICAgIGlmIChzaWduYXR1cmUtPnJldHVyblR5cGUg
IT0gVm9pZCkKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCMzo6
UmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICBlbHNlCi0gICAgICAgIGJsb2NrLT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCkpOwotCi0gICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jKTsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIFZl
Y3Rvcjx1aW50OF90PiYgc291cmNlLCBNZW1vcnkqIG1lbW9yeSwgRnVuY3Rpb25JbmZvcm1hdGlv
biBpbmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucywgdW5z
aWduZWQgb3B0TGV2ZWwpCi17Ci0gICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1
bmN0aW9uQ29tcGlsYXRpb24+KCk7Ci0KLSAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIz
SVJHZW5lcmF0b3IgY29udGV4dChtZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LT51bmxpbmtlZENh
bGxzKTsKLSAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwg
c291cmNlLCBpbmZvLCBmdW5jdGlvbnMpOwotICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBwcm9jZWR1cmUucmVzZXRS
ZWFjaGFiaWxpdHkoKTsKLSAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJBZnRlciBwYXJzaW5nOlxu
Iik7Ci0KLSAgICBmaXhTU0EocHJvY2VkdXJlKTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiUG9zdCBTU0E6ICIsIHByb2NlZHVyZSk7Ci0KLSAgICByZXN1bHQtPmNvZGUgPSBz
dGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7Ci0g
ICAgcmVzdWx0LT5qc0VudHJ5UG9pbnQgPSBjcmVhdGVKU1dyYXBwZXIodm0sIGluZm8uc2lnbmF0
dXJlLCByZXN1bHQtPmNvZGUtPmNvZGUoKSwgbWVtb3J5KTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJH
ZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM0lSR2VuZXJhdG9y
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYmM4M2YyMTI2ZjkyYzdiYjY5OTIz
YTllNzQ3NzQxM2NmNWU5NzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKLQotI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1
ZGUgIldBU01Gb3JtYXQuaCIKLQotZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCop
OwotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1jbGFzcyBNZW1vcnk7Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0m
LCBWZWN0b3I8dWludDhfdD4mLCBNZW1vcnkqLCBGdW5jdGlvbkluZm9ybWF0aW9uLCBjb25zdCBW
ZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwotCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdDb252
ZW50aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVu
dGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhY2JiYzI3ODBlNTU3NjEz
NmYxOTBkYTEzOTJjNGVmMzQ2NGQ1YWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdDb252
ZW50aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV0FTTUNhbGxpbmdDb252ZW50aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci0KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXQVNNIHsKLQotY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdD
b252ZW50aW9uKCkKLXsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdD
b252ZW50aW9uPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKLSAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOwotICAgIHN0ZDo6Y2FsbF9v
bmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgewotICAgICAgICBzdGF0
aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9yPFJl
Zz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgfSk7Ci0KLSAg
ICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Ci19Ci0KLWNvbnN0IFdBU01DYWxs
aW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkKLXsKLSAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNXQVNNQ2FsbGluZ0Nv
bnZlbnRpb247Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dBU01DYWxsaW5nQ29u
dmVudGlvbkZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV0FTTUNhbGxpbmdDb252ZW50
aW9uRmxhZywgW10gKCkgewotICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJlZ2lzdGVy
cyhHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkK
LSAgICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9Bcmd1bWVu
dFJlZ2lzdGVyKGkpOwotCi0gICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVnaXN0ZXJz
KEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQot
ICAgICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0FyZ3VtZW50
UmVnaXN0ZXIoaSk7Ci0KLSAgICAgICAgc3RhdGljV0FTTUNhbGxpbmdDb252ZW50aW9uLmNvbnN0
cnVjdChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1bWVudFJl
Z2lzdGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIH0pOwot
Ci0gICAgcmV0dXJuIHN0YXRpY1dBU01DYWxsaW5nQ29udmVudGlvbjsKLX0KLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OldBU00KLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmViNTQ4NzBkMmE1YmU4ZDVkMDNlZTZlZDU0YjJjYmVk
ZWU0ZWNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQot
I2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgotI2luY2x1ZGUgIkIz
QXJndW1lbnRSZWdWYWx1ZS5oIgotI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgotI2luY2x1ZGUg
IkIzQ29uc3Q2NFZhbHVlLmgiCi0jaW5jbHVkZSAiQjNDb25zdHJhaW5lZFZhbHVlLmgiCi0jaW5j
bHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgotI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCi0j
aW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
LSNpbmNsdWRlICJSZWdpc3RlclNldC5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXQVNNIHsKLQotdHlwZWRlZiB1bnNpZ25lZCAoKk5leHRP
ZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5cGUpOwotCi10ZW1wbGF0
ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KLWNsYXNzIENh
bGxpbmdDb252ZW50aW9uIHsKLXB1YmxpYzoKLSAgICBDYWxsaW5nQ29udmVudGlvbihWZWN0b3I8
UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxs
ZWVTYXZlUmVnaXN0ZXJzKQotICAgICAgICA6IG1fZ3ByQXJncyhncHJBcmdzKQotICAgICAgICAs
IG1fZnByQXJncyhmcHJBcmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhjYWxs
ZWVTYXZlUmVnaXN0ZXJzKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQjM6OlZhbHVl
UmVwIG1hcnNoYWxsQXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5
cGUsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBCMzo6
VmFsdWVSZXA6OnJlZyhyZWdBcmdzW2NvdW50KytdKTsKLQotICAgICAgICBjb3VudCsrOwotICAg
ICAgICBCMzo6VmFsdWVSZXAgcmVzdWx0ID0gQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0
YWNrT2Zmc2V0KTsKLSAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZz
ZXQsIHR5cGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEIzOjpWYWx1
ZVJlcCBtYXJzaGFsbEFyZ3VtZW50KEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgZ3BBcmd1bWVudENv
dW50LCBzaXplX3QmIGZwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEIzOjpJbnQzMjoK
LSAgICAgICAgY2FzZSBCMzo6SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1
bWVudEltcGwobV9ncHJBcmdzLCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsK
LSAgICAgICAgY2FzZSBCMzo6RmxvYXQ6Ci0gICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAg
ICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJn
dW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwotICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLQotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAg
dm9pZCBsb2FkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRUeXBlcywgQjM6
OlByb2NlZHVyZSYgcHJvYywgQjM6OkJhc2ljQmxvY2sqIGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdp
biwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEIzOjpWYWx1
ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpG
cmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0KLSAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9
IDA7Ci0gICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3Qg
c3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJndW1lbnRUeXBlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQjM6OlR5cGUgdHlw
ZSA9IHRvQjNUeXBlKGFyZ3VtZW50VHlwZXNbaV0pOwotICAgICAgICAgICAgQjM6OlZhbHVlKiBh
cmd1bWVudDsKLSAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXAgPSBtYXJzaGFsbEFyZ3VtZW50
KHR5cGUsIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAocmVwLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICBhcmd1bWVudCA9
IGJsb2NrLT5hcHBlbmROZXc8QjM6OkFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIG9yaWdpbiwgcmVw
LnJlZygpKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBCMzo6SW50MzIpCi0gICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2Ms
IEIzOjpUcnVuYywgb3JpZ2luLCBhcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IEhvdyBkbyBJIGdldCBhIGZsb2F0IGZyb20gYSBGUFI/IFdlIGRvbid0IHN1cHBvcnQgZmxvYXRp
bmcgcG9pbnRzIHlldCBzbyBpdCdzIG5vdCBhIGJpZyBkZWFsLi4uIHlldC4KLSAgICAgICAgICAg
ICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3
NzAKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlcC5pc1N0
YWNrQXJndW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgQjM6OlZhbHVlKiBhZGRyZXNzID0gYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpBZGQsIG9yaWdpbiwgZnJhbWVQb2lu
dGVyLAotICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFs
dWU+KHByb2MsIG9yaWdpbiwgcmVwLm9mZnNldEZyb21TUCgpKSk7Ci0gICAgICAgICAgICAgICAg
YXJndW1lbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6Okxv
YWQsIHR5cGUsIG9yaWdpbiwgYWRkcmVzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
dW5jdG9yKGFyZ3VtZW50LCBpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEl0J3MgZXhw
ZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRo
ZSBjYWxsIG9wZXJhdGlvbi4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIEIz
OjpWYWx1ZSogc2V0dXBDYWxsKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBi
bG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxCMzo6VmFsdWUqPiYgYXJndW1l
bnRzLCBCMzo6VHlwZSByZXR1cm5UeXBlLCBjb25zdCBGdW5jdG9yJiBwYXRjaHBvaW50RnVuY3Rv
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAg
ICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgc2l6ZV90IHN0YWNrT2Zm
c2V0ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLQotICAgICAgICBW
ZWN0b3I8QjM6OkNvbnN0cmFpbmVkVmFsdWU+IGNvbnN0cmFpbmVkQXJndW1lbnRzOwotICAgICAg
ICBmb3IgKEIzOjpWYWx1ZSogYXJndW1lbnQgOiBhcmd1bWVudHMpIHsKLSAgICAgICAgICAgIEIz
OjpWYWx1ZVJlcCByZXAgPSBtYXJzaGFsbEFyZ3VtZW50KGFyZ3VtZW50LT50eXBlKCksIGdwQXJn
dW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7Ci0gICAgICAgICAgICBj
b25zdHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJndW1lbnQs
IHJlcCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
SW5CeXRlcyhXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBz
dGFja09mZnNldCkpOwotCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIHJldHVyblR5cGUs
IG9yaWdpbik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6
bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0
ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7Ci0gICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZFZlY3Rvcihjb25zdHJhaW5lZEFyZ3VtZW50cyk7Ci0gICAgICAgIHBh
dGNocG9pbnRGdW5jdG9yKHBhdGNocG9pbnQpOwotCi0gICAgICAgIGlmIChyZXR1cm5UeXBlID09
IEIzOjpWb2lkKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcGF0Y2hw
b2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7Ci0gICAgfQotCi0gICAgY29u
c3QgVmVjdG9yPFJlZz4gbV9ncHJBcmdzOwotICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZnByQXJn
czsKLSAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgY29u
c3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJzOwotfTsKLQotaW5saW5lIHVuc2ln
bmVkIG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUpCi17Ci0g
ICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQgKyBzaXplb2YoUmVnaXN0ZXIpOwotfQotCi1jb25zdGV4
cHIgdW5zaWduZWQganNjSGVhZGVyU2l6ZSA9IEV4ZWNTdGF0ZTo6aGVhZGVyU2l6ZUluUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKTsKLXR5cGVkZWYgQ2FsbGluZ0NvbnZlbnRpb248anNjSGVh
ZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD4gSlNDQ2FsbGluZ0NvbnZlbnRpb247Ci0KLXR5cGVkZWYg
SlNDQ2FsbGluZ0NvbnZlbnRpb24gV0FTTUNhbGxpbmdDb252ZW50aW9uOwotCi1jb25zdCBKU0ND
YWxsaW5nQ29udmVudGlvbiYganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLWNvbnN0IFdBU01DYWxs
aW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFjNDZmZjM1YWRmYWIyMDZmYzhmMmQ3MDRhZTU0NzU5ZTBlZGFjZTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZvcm1hdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g
KgotICogQ29weXJpZ2h0IChjKSAyMDE1IGJ5IHRoZSByZXBvc2l0b3J5IGF1dGhvcnMgb2YKLSAq
IFdlYkFzc2VtYmx5L3BvbHlmaWxsLXByb3RvdHlwZS0xLgotICoKLSAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICog
ICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
LSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgot
I2luY2x1ZGUgIkIzVHlwZS5oIgotI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIEpTRnVuY3Rpb247Ci0KLW5hbWVzcGFjZSBXQVNNIHsKLQotZW51
bSBUeXBlIDogdWludDhfdCB7Ci0gICAgVm9pZCwKLSAgICBJMzIsCi0gICAgSTY0LAotICAgIEYz
MiwKLSAgICBGNjQsCi0gICAgTGFzdFZhbHVlVHlwZSA9IEY2NCwKLX07Ci0KLXN0YXRpY19hc3Nl
cnQoSTMyID09IDEsICJXQVNNIG5lZWRzIEkzMiB0byBoYXZlIHRoZSB2YWx1ZSAxIik7Ci1zdGF0
aWNfYXNzZXJ0KEk2NCA9PSAyLCAiV0FTTSBuZWVkcyBJNjQgdG8gaGF2ZSB0aGUgdmFsdWUgMiIp
Owotc3RhdGljX2Fzc2VydChGMzIgPT0gMywgIldBU00gbmVlZHMgRjMyIHRvIGhhdmUgdGhlIHZh
bHVlIDMiKTsKLXN0YXRpY19hc3NlcnQoRjY0ID09IDQsICJXQVNNIG5lZWRzIEY2NCB0byBoYXZl
IHRoZSB2YWx1ZSA0Iik7Ci0KLWlubGluZSBCMzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5cGUpCi17
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJMzI6IHJldHVybiBCMzo6SW50MzI7Ci0g
ICAgY2FzZSBJNjQ6IHJldHVybiBCMzo6SW50NjQ7Ci0gICAgY2FzZSBGMzI6IHJldHVybiBCMzo6
RmxvYXQ7Ci0gICAgY2FzZSBGNjQ6IHJldHVybiBCMzo6RG91YmxlOwotICAgIGNhc2UgVm9pZDog
cmV0dXJuIEIzOjpWb2lkOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJMzI6Ci0gICAgY2FzZSBJ
NjQ6Ci0gICAgY2FzZSBGMzI6Ci0gICAgY2FzZSBGNjQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLQotc3RydWN0IFNpZ25hdHVyZSB7Ci0gICAgVHlwZSByZXR1cm5UeXBlOwotICAgIFZlY3Rv
cjxUeXBlPiBhcmd1bWVudHM7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25JbXBvcnQgewotICAgIFN0
cmluZyBmdW5jdGlvbk5hbWU7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25JbXBvcnRTaWduYXR1cmUg
ewotICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OwotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1w
b3J0SW5kZXg7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAgdWludDMy
X3Qgc2lnbmF0dXJlSW5kZXg7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25Qb2ludGVyVGFibGUgewot
ICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gZnVuY3Rp
b25JbmRpY2VzOwotICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rpb25zOwotfTsKLQotc3Ry
dWN0IEZ1bmN0aW9uSW5mb3JtYXRpb24gewotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOwotICAg
IHNpemVfdCBzdGFydDsKLSAgICBzaXplX3QgZW5kOwotfTsKLQotc3RydWN0IFVubGlua2VkQ2Fs
bCB7Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsTG9jYXRpb247Ci0gICAgc2l6ZV90IGZ1bmN0
aW9uSW5kZXg7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25Db21waWxhdGlvbiB7Ci0gICAgVmVjdG9y
PFVubGlua2VkQ2FsbD4gdW5saW5rZWRDYWxsczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNv
bXBpbGF0aW9uPiBjb2RlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGpz
RW50cnlQb2ludDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01GdW5jdGlvblBhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTJlMjhi
NTY5OTJiNWRhYmM3NzA5NjNkNWFkODQ3NDAwNmM2Yjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvblBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIldBU01QYXJzZXIuaCIKLSNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1l
bnVtIGNsYXNzIEJsb2NrVHlwZSB7Ci0gICAgSWYsCi0gICAgQmxvY2ssCi0gICAgTG9vcAotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLWNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVi
bGljIFBhcnNlciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHBy
ZXNzaW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6
OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwotCi0gICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9y
bWF0aW9uJiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOwot
Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKLQotcHJpdmF0ZToKLSAgICBz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUJsb2NrKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VF
eHByZXNzaW9uKE9wVHlwZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJl
YWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1
bmlmeUNvbnRyb2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKLQot
ICAgIENvbnRleHQmIG1fY29udGV4dDsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1f
ZXhwcmVzc2lvblN0YWNrOwotICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7
Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKLSAgICBjb25zdCBWZWN0b3I8RnVu
Y3Rpb25JbmZvcm1hdGlvbj4mIG1fZnVuY3Rpb25zOwotICAgIHVuc2lnbmVkIG1fdW5yZWFjaGFi
bGVCbG9ja3MgeyAwIH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9u
JiBpbmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKLSAg
ICA6IFBhcnNlcihzb3VyY2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQotICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NpZ25hdHVyZSgqaW5mby5zaWduYXR1cmUpCi0gICAg
LCBtX2Z1bmN0aW9ucyhmdW5jdGlvbnMpCi17Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBl
bmRpbmcgYXQ6ICIsIGluZm8uZW5kKTsKLSAgICBtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2ln
bmF0dXJlLmFyZ3VtZW50cyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29s
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpCi17Ci0gICAgdWludDMyX3QgbG9jYWxD
b3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytp
KSB7Ci0gICAgICAgIHVpbnQzMl90IG51bWJlck9mTG9jYWxzOwotICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKG51bWJlck9mTG9jYWxzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBUeXBlIHR5cGVPZkxvY2FsOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5
cGVPZkxvY2FsKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRl
eHQuYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcGFyc2VCbG9jaygpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9v
bCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCi17Ci0gICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgdWludDhfdCBvcDsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSB8
fCAhaXNWYWxpZE9wVHlwZShvcCkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgICAgIFdURjo6ZGF0YUxvZ0xuKCJhdHRlbXB0ZWQgdG8gZGVjb2RlIGludmFsaWQgb3A6
ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6
ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyYm9zZSkg
ewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBtX3VucmVhY2hhYmxl
QmxvY2tzLCAiKTogIiwgIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwg
IiBhdCBvZmZzZXQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZz
ZXQpKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQuZHVtcChtX2NvbnRyb2xTdGFjaywgbV9leHBy
ZXNzaW9uU3RhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6RW5k
ICYmICFtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcykgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVh
Y2hhYmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQg
dG8gcHJvY2VzcyB1bnJlYWNoYWJsZSBvcDoiLCBvcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4cHJlc3Np
b24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgLy8g
SSdtIG5vdCBzdXJlIGlmIHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJl
Li4uCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBi
M29wKSBjYXNlIG5hbWU6Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQotewotICAgIHN3
aXRjaCAob3ApIHsKLSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkgewot
ICAgICAgICBFeHByZXNzaW9uVHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0
KCk7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtl
TGFzdCgpOwotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9j
b250ZXh0LmJpbmFyeU9wKHN0YXRpY19jYXN0PEJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdo
dCwgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIEZPUl9FQUNIX1dBU01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpIHsKLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgYXJnID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgRXhw
cmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4dC51bmFyeU9wKHN0YXRp
Y19jYXN0PFVuYXJ5T3BUeXBlPihvcCksIGFyZywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURf
T1AoQ1JFQVRFX0NBU0UpIHsKLSAgICAgICAgdWludDMyX3QgYWxpZ25tZW50OwotICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQubG9hZChzdGF0aWNf
Y2FzdDxMb2FkT3BUeXBlPihvcCksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZPUl9FQUNIX1dBU01fTUVN
T1JZX1NUT1JFX09QKENSRUFURV9DQVNFKSB7Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsK
LSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhbGlnbm1lbnQpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICAgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IEV4cHJlc3Npb25UeXBlIHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0
KCk7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5
cGU+KG9wKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5
cGU6OkkzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIs
IGNvbnN0YW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgT3BU
eXBlOjpJNjRDb25zdDogewotICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQ2NChjb25zdGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0
LCBjb25zdGFudCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE9w
VHlwZTo6R2V0TG9jYWw6IHsKLSAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAgIGlmICgh
cGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmdldExvY2Fs
KGluZGV4LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6U2V0TG9jYWw6IHsKLSAgICAgICAgdWludDMyX3QgaW5k
ZXg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG1fZXhwcmVzc2lvblN0
YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgs
IHZhbHVlKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6Q2FsbDogewotICAgICAgICB1aW50
MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9u
SW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChmdW5jdGlv
bkluZGV4ID49IG1fZnVuY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNb
ZnVuY3Rpb25JbmRleF07Ci0KLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNr
LnRha2VMYXN0KCkpOwotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6
OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5jdGlv
bkluZGV4LCBpbmZvLCBhcmdzLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQotICAgICAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7Ci0gICAgICAgIFR5cGUg
aW5saW5lU2lnbmF0dXJlOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25h
dHVyZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9jb250cm9sU3Rh
Y2suYXBwZW5kKG1fY29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKLSAgICAgICAg
VHlwZSBpbmxpbmVTaWduYXR1cmU7Ci0gICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5l
U2lnbmF0dXJlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRy
b2xTdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgT3BUeXBlOjpJZjogewotICAgICAg
ICBUeXBlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxp
bmVTaWduYXR1cmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAg
ICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxp
bmVTaWduYXR1cmUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBP
cFR5cGU6OkVsc2U6IHsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJv
bFN0YWNrLmxhc3QoKSk7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6OkJyOgotICAgIGNhc2Ug
T3BUeXBlOjpCcklmOiB7Ci0gICAgICAgIHVpbnQzMl90IHRhcmdldDsKLSAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMih0YXJnZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBpZiAob3AgPT0gT3BU
eXBlOjpCcklmKQotICAgICAgICAgICAgY29uZGl0aW9uID0gbV9leHByZXNzaW9uU3RhY2sudGFr
ZUxhc3QoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9
IDE7Ci0KLSAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRy
b2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XTsKLQotICAgICAgICByZXR1cm4gbV9jb250ZXh0
LmFkZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKLSAgICB9Ci0K
LSAgICBjYXNlIE9wVHlwZTo6UmV0dXJuOiB7Ci0gICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZSwgMT4gcmV0dXJuVmFsdWVzOwotICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSAh
PSBWb2lkKQotICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChtX2V4cHJlc3Npb25TdGFj
ay50YWtlTGFzdCgpKTsKLQotICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICAg
ICAgcmV0dXJuIG1fY29udGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKLSAgICB9Ci0KLSAg
ICBjYXNlIE9wVHlwZTo6RW5kOiB7Ci0gICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRy
b2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRh
dGEsIG1fZXhwcmVzc2lvblN0YWNrKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6VW5yZWFj
aGFibGU6Ci0gICAgY2FzZSBPcFR5cGU6OlNlbGVjdDoKLSAgICBjYXNlIE9wVHlwZTo6QnJUYWJs
ZToKLSAgICBjYXNlIE9wVHlwZTo6Tm9wOgotICAgIGNhc2UgT3BUeXBlOjpEcm9wOgotICAgIGNh
c2UgT3BUeXBlOjpGMzJDb25zdDoKLSAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6Ci0gICAgY2Fz
ZSBPcFR5cGU6OlRlZUxvY2FsOgotICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6Ci0gICAgY2Fz
ZSBPcFR5cGU6OlNldEdsb2JhbDoKLSAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OgotICAg
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNo
YWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQotewotICAgIEFTU0VSVChtX3VucmVhY2hhYmxlQmxv
Y2tzKTsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKLSAgICAg
ICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7Ci0g
ICAgICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKLSAgICAgICAgbV91
bnJlYWNoYWJsZUJsb2NrcyA9IDA7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShk
YXRhKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6RW5kOiB7Ci0gICAgICAgIGlmIChtX3Vu
cmVhY2hhYmxlQmxvY2tzID09IDEpIHsKLSAgICAgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBt
X2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXND
b250aW51YXRpb25SZWFjaGFibGUoZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6TG9vcDoKLSAgICBjYXNlIE9wVHlw
ZTo6SWY6Ci0gICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7Ci0gICAgICAgIG1fdW5yZWFjaGFibGVC
bG9ja3MrKzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gdHdvIGltbWVk
aWF0ZSBjYXNlcwotICAgIGNhc2UgT3BUeXBlOjpCcjoKLSAgICBjYXNlIE9wVHlwZTo6QnJJZjog
ewotICAgICAgICB1aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIo
dW51c2VkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNl
VmFyVUludDMyKHVudXNlZCk7Ci0gICAgfQotCi0gICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcwot
ICAgIGNhc2UgT3BUeXBlOjpSZXR1cm46Ci0gICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OgotICAg
IGNhc2UgT3BUeXBlOjpTZXRMb2NhbDoKLSAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKLSAg
ICAgICAgdWludDMyX3QgdW51c2VkOwotICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51
c2VkKTsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLSN1bmRlZiBDUkVBVEVfQ0FTRQotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNTWVtb3J5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmM4NTBkOWYzMjY5NjcwNGRiY2UzNWViNjU5YWQ3YjgyMjc5MmQwNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNTWVtb3J5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1NZW1vcnk6Ok1lbW9yeSh1aW50
MzJfdCBzdGFydGluZ1NpemUsIHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiBwaW5uZWRTaXplUmVnaXN0ZXJzKQotICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNr
aW5nKQotICAgICwgbV9zaXplKHN0YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNp
dHkpCi0gICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5n
IHRoZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KLSAgICAvLyBz
ZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICAs
IG1fbWFwcGVkQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFBhZ2VDb3VudCkgKiBz
dGF0aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpKQotewotICAgIEFTU0VSVChwaW5uZWRTaXpl
UmVnaXN0ZXJzLnNpemUoKSA+IDApOwotCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Ug
aWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0
ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAt
MSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIC8vIFRyeSBh
Z2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9
IG1fY2FwYWNpdHk7Ci0gICAgICAgIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBh
Y2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgICAg
IGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoc3RhcnRpbmdTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIGlmICht
cHJvdGVjdChyZXN1bHQsIHN0YXJ0aW5nU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsK
LSAgICAgICAgbXVubWFwKHJlc3VsdCwgbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5u
ZWRTaXplUmVnaXN0ZXJzLnNpemUoKSArIDE7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2NhbGxlZVNhdmVSZWdpc3RlcnMuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgR1BS
UmVnIGdwciA9IHJlZy5ncHIoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3Rl
cnMgfHwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkgewot
ICAgICAgICAgICAgbV9waW5uZWRSZWdpc3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7Ci0g
ICAgICAgICAgICByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMtLTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdwciwg
cGlubmVkU2l6ZVJlZ2lzdGVyc1stLXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0pOwot
ICAgIH0pOwotCi0gICAgQVNTRVJUKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOwotICAgIG1f
bWVtb3J5ID0gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotfSAvLyBuYW1lc3Bh
Y2UgV0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTU1lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGUy
NDg1MmYzODllMTYwNzQ0MTFiZDE2MDk4MDBkOGIxZDYyNjEzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01NZW1vcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIldBU01DYWxsaW5nQ29udmVudGlvbi5oIgotCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00g
ewotCi1zdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7Ci0gICAgR1BSUmVnIHNpemVSZWdp
c3RlcjsKLSAgICB1bnNpZ25lZCBzaXplT2Zmc2V0OwotfTsKLQotLy8gRklYTUU6IFdlIHNob3Vs
ZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIuIFJpZ2h0IG5vdyB3
ZSB0YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUKLS8vIGVudHJ5LiBTcGVjaWZpY2FsbHkgYW4g
ZW50cnkgd2hlcmUgdGhlIHNpemVPZmZzZXQgPT0gMC4gSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25l
IHNpemUgcmVnaXN0ZXIsCi0vLyB3ZSBjYW4gaGF2ZSBvbmUgZm9yIGVhY2ggbG9hZCBzaXplIGNs
YXNzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIK
LXN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewotICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwotICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlcjsKLX07
Ci0KLWNvbnN0ZXhwciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7Ci1jb25zdGV4cHIgdWlu
dDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxsIDw8IDMyKSAv
IHBhZ2VTaXplKTsKLQotY2xhc3MgTWVtb3J5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShN
ZW1vcnkpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICBlbnVtIGNsYXNzIE1vZGUgewot
ICAgICAgICBCb3VuZHNDaGVja2luZwotICAgIH07Ci0KLSAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7
Ci0gICAgTWVtb3J5KHVpbnQzMl90IHN0YXJ0aW5nU2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpOwotCi0gICAgfk1lbW9y
eSgpCi0gICAgewotICAgICAgICBpZiAobV9tZW1vcnkpCi0gICAgICAgICAgICBtdW5tYXAobV9t
ZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIH0KLQotICAgIHZvaWQqIG1lbW9yeSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVnaXN0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdpc3RlcnM7IH0KLQotICAgIE1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotCi0gICAgYm9vbCBncm93KHVpbnQzMl90IG5l
d1NpemUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9tZW1vcnkpOwotICAgICAgICBpZiAobmV3
U2l6ZSA+IG1fY2FwYWNpdHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
cmV0dXJuICFtcHJvdGVjdChtX21lbW9yeSwgbmV3U2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU
RSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9Ci0gICAgCi1wcml2YXRlOgotICAg
IHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bp
bm5lZFJlZ2lzdGVyczsKLSAgICBNb2RlIG1fbW9kZTsKLSAgICB1aW50MzJfdCBtX3NpemUgeyAw
IH07Ci0gICAgdWludDMyX3QgbV9jYXBhY2l0eSB7IDAgfTsKLSAgICB1aW50NjRfdCBtX21hcHBl
ZENhcGFjaXR5IHsgMCB9OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3
OTZiZjgzOWFlYWM2MWI2NWI3NmFhMjYyMmUzZDJlMTExMzQwZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldBU01Nb2R1bGVQYXJzZXIuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKLQotI2luY2x1ZGUgIkpTV0FTTU1vZHVsZS5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQu
aCIKLSNpbmNsdWRlICJXQVNNT3BzLmgiCi0jaW5jbHVkZSAiV0FTTVNlY3Rpb25zLmgiCi0KLSNp
bmNsdWRlIDxzeXMvbW1hbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewot
Ci1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLWJvb2wgTW9kdWxlUGFyc2Vy
OjpwYXJzZSgpCi17Ci0gICAgaWYgKG1fc291cmNlTGVuZ3RoIDwgOCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghY29uc3VtZUNoYXJhY3RlcigwKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghY29uc3VtZVN0cmluZygiYXNtIikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9u
J3QgZG8gYW55dGhpbmcgd2l0aCBpdC4KLSAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOwotICAg
IGlmICghcGFyc2VVSW50MzIodmVyc2lvbk51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBw
cm9jZXNzaW5nIGhlYWRlci4iKTsKLQotICAgIFNlY3Rpb25zOjpTZWN0aW9uIHByZXZpb3VzU2Vj
dGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOwotICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNl
TGVuZ3RoKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJT
dGFydGluZyB0byBwYXJzZSBuZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAiLCBtX29mZnNldCk7Ci0K
LSAgICAgICAgdWludDhfdCBzZWN0aW9uQnl0ZTsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNl
Y3Rpb25CeXRlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiU2VjdGlvbiBieXRlOiAiLCBzZWN0aW9uQnl0
ZSk7Ci0KLSAgICAgICAgU2VjdGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtu
b3duOwotICAgICAgICBpZiAoc2VjdGlvbkJ5dGUpIHsKLSAgICAgICAgICAgIGlmIChzZWN0aW9u
Qnl0ZSA8IFNlY3Rpb25zOjpVbmtub3duKQotICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0
aWNfY2FzdDxTZWN0aW9uczo6U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgdWludDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7Ci0gICAgICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0
byB0aGUgc2VjdGlvbidzIHNpemUuCi0gICAgICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9u
TmFtZUxlbmd0aCArIFdURjo6TEVCRGVjb2Rlcjo6bWF4MzJCaXRMRUJCeXRlTGVuZ3RoID49IG1f
c291cmNlTGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBhbnkgY3VzdG9tIHNlY3Rpb25zIHlldC4KLQotICAgICAg
ICAgICAgbV9vZmZzZXQgKz0gc2VjdGlvbk5hbWVMZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIVNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxl
bmd0aDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX29mZnNldCAr
IHNlY3Rpb25MZW5ndGg7Ci0KLSAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7Ci0KLSAgICAgICAg
Y2FzZSBTZWN0aW9uczo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgTWVtb3J5LiIpOwotICAgICAgICAgICAgaWYg
KCFwYXJzZU1lbW9yeSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6RnVuY3Rpb25U
eXBlczogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJQYXJzaW5nIHR5cGVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uVHlw
ZXMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgU2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKLSAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBm
dW5jdGlvbiBzaWduYXR1cmVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2ln
bmF0dXJlcygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsK
LSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFy
c2luZyBmdW5jdGlvbiBkZWZpbml0aW9ucy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5j
dGlvbkRlZmluaXRpb25zKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpVbmtub3du
OgotICAgICAgICAvLyBGSVhNRTogRGVsZXRlIHRoaXMgd2hlbiB3ZSBzdXBwb3J0IGFsbCB0aGUg
c2VjdGlvbnMuCi0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsK
LSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nTG4oIkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKLQotICAgICAgICBp
ZiAoZW5kICE9IG1fb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247Ci0gICAgfQotCi0gICAgLy8gVE9ETwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQotewotICAg
IHVpbnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNpemUgPiBtYXhQYWdl
Q291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVpbnQzMl90IGNhcGFjaXR5ID0g
bWF4UGFnZUNvdW50OwotICAgIGlmIChmbGFncykgewotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGNhcGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHNp
emUgPiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKLSAgICBzaXpl
ICo9IHBhZ2VTaXplOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9
OwotICAgIG1fbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5
LCBwaW5uZWRTaXplcyk7Ci0gICAgcmV0dXJuIG1fbWVtb3J5LT5tZW1vcnkoKTsKLX0KLQotYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcygpCi17Ci0gICAgdWludDMyX3QgY291
bnQ7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBjb3Vu
dCk7Ci0KLSAgICBtX3NpZ25hdHVyZXMucmVzaXplKGNvdW50KTsKLQotICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHVpbnQ4X3QgdHlwZTsKLSAgICAg
ICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAodHlwZSAhPSAweDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJHb3QgZnVuY3Rpb24gdHlwZS4iKTsKLQotICAgICAgICB1aW50MzJfdCBhcmd1
bWVudENvdW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJhcmd1bWVudENvdW50OiAiLCBhcmd1bWVudENvdW50KTsKLQotICAg
ICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLSAgICAgICAgYXJndW1lbnRUeXBlcy5y
ZXNpemUoYXJndW1lbnRDb3VudCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFyZ3VtZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUp
IHx8ICFpc1ZhbHVlVHlwZShzdGF0aWNfY2FzdDxUeXBlPih0eXBlKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19j
YXN0PFR5cGU+KHR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQx
KHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBUeXBlIHJldHVyblR5
cGU7Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7
Ci0KLSAgICAgICAgaWYgKHR5cGUpIHsKLSAgICAgICAgICAgIFR5cGUgdmFsdWU7Ci0gICAgICAg
ICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOwot
Ci0gICAgICAgIG1fc2lnbmF0dXJlc1tpXSA9IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVu
dFR5cGVzKSB9OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNb2R1bGVQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCkKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV9mdW5jdGlvbnMucmVzaXplKGNvdW50KTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIodHlwZU51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKHR5cGVOdW1iZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2Z1bmN0aW9uc1tpXS5zaWduYXR1
cmUgPSAmbV9zaWduYXR1cmVzW3R5cGVOdW1iZXJdOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkKLXsK
LSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNvdW50ICE9IG1fZnVuY3Rpb25zLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwotICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1fZnVuY3Rpb25zW2ld
OwotICAgICAgICBpbmZvLnN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIGluZm8uZW5kID0gbV9v
ZmZzZXQgKyBmdW5jdGlvblNpemU7Ci0gICAgICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1
ZTRkMTBhZGY2MDM0NzczODc3YzFlZjBhYmQ2MWM0ZmEyNDY0ZDYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTU1vZHVsZVBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotI2luY2x1
ZGUgIldBU01PcHMuaCIKLSNpbmNsdWRlICJXQVNNUGFyc2VyLmgiCi0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1jbGFzcyBNb2R1
bGVQYXJzZXIgOiBwdWJsaWMgUGFyc2VyIHsKLXB1YmxpYzoKLQotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtYWdpY051bWJlciA9IDB4YzsKLQotICAgIE1vZHVsZVBhcnNlcihjb25zdCBWZWN0
b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKLSAgICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVy
LCAwLCBzb3VyY2VCdWZmZXIuc2l6ZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZSgpOwotCi0gICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3Jt
YXRpb24+JiBmdW5jdGlvbkluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7
IH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1v
cnk7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9y
eSgpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25UeXBlcygpOwot
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCk7Ci0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odWludDMy
X3QgbnVtYmVyKTsKLQotICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9u
czsKLSAgICBWZWN0b3I8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPE1lbW9yeT4gbV9tZW1vcnk7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V0FTTQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU9wcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmY3Mjg5NGI1ZjhiYmIyMGY4
YjhlMDE3N2QxMjhkYzc3MWFiYzY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIHVzaW5nIHdhc20u
anNvbi4KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNs
dWRlIDxjc3RkaW50PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi0jZGVm
aW5lIEZPUl9FQUNIX1dBU01fU1BFQ0lBTF9PUChtYWNybykgXAotICAgIG1hY3JvKEkzMkNvbnN0
LCAweDEwLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0Q29uc3QsIDB4MTEsIE9vcHMpIFwKLSAgICBt
YWNybyhGNjRDb25zdCwgMHgxMiwgT29wcykgXAotICAgIG1hY3JvKEYzMkNvbnN0LCAweDEzLCBP
b3BzKSBcCi0gICAgbWFjcm8oR2V0TG9jYWwsIDB4MTQsIE9vcHMpIFwKLSAgICBtYWNybyhTZXRM
b2NhbCwgMHgxNSwgT29wcykgXAotICAgIG1hY3JvKFRlZUxvY2FsLCAweDE5LCBPb3BzKSBcCi0g
ICAgbWFjcm8oR2V0R2xvYmFsLCAweGJiLCBPb3BzKSBcCi0gICAgbWFjcm8oU2V0R2xvYmFsLCAw
eGJjLCBPb3BzKSBcCi0gICAgbWFjcm8oQ2FsbCwgMHgxNiwgT29wcykgXAotICAgIG1hY3JvKENh
bGxJbmRpcmVjdCwgMHgxNywgT29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX0NPTlRST0xf
RkxPV19PUChtYWNybykgXAotICAgIG1hY3JvKFVucmVhY2hhYmxlLCAweDAsIE9vcHMpIFwKLSAg
ICBtYWNybyhCbG9jaywgMHgxLCBPb3BzKSBcCi0gICAgbWFjcm8oTG9vcCwgMHgyLCBPb3BzKSBc
Ci0gICAgbWFjcm8oSWYsIDB4MywgT29wcykgXAotICAgIG1hY3JvKEVsc2UsIDB4NCwgT29wcykg
XAotICAgIG1hY3JvKFNlbGVjdCwgMHg1LCBPb3BzKSBcCi0gICAgbWFjcm8oQnIsIDB4NiwgT29w
cykgXAotICAgIG1hY3JvKEJySWYsIDB4NywgT29wcykgXAotICAgIG1hY3JvKEJyVGFibGUsIDB4
OCwgT29wcykgXAotICAgIG1hY3JvKFJldHVybiwgMHg5LCBPb3BzKSBcCi0gICAgbWFjcm8oRHJv
cCwgMHhiLCBPb3BzKSBcCi0gICAgbWFjcm8oTm9wLCAweGEsIE9vcHMpIFwKLSAgICBtYWNybyhF
bmQsIDB4ZiwgT29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKG1hY3JvKSBc
Ci0gICAgbWFjcm8oSTMyQ2x6LCAweDU3LCBDbHopIFwKLSAgICBtYWNybyhJMzJDdHosIDB4NTgs
IE9vcHMpIFwKLSAgICBtYWNybyhJMzJQb3BjbnQsIDB4NTksIE9vcHMpIFwKLSAgICBtYWNybyhJ
NjRDbHosIDB4NzIsIENseikgXAotICAgIG1hY3JvKEk2NEN0eiwgMHg3MywgT29wcykgXAotICAg
IG1hY3JvKEk2NFBvcGNudCwgMHg3NCwgT29wcykgXAotICAgIG1hY3JvKEYzMkFicywgMHg3Yiwg
T29wcykgXAotICAgIG1hY3JvKEYzMk5lZywgMHg3YywgT29wcykgXAotICAgIG1hY3JvKEYzMkNv
cHlzaWduLCAweDdkLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyQ2VpbCwgMHg3ZSwgT29wcykgXAot
ICAgIG1hY3JvKEYzMkZsb29yLCAweDdmLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyVHJ1bmMsIDB4
ODAsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJOZWFyZXN0LCAweDgxLCBPb3BzKSBcCi0gICAgbWFj
cm8oRjMyU3FydCwgMHg4MiwgT29wcykgXAotICAgIG1hY3JvKEY2NEFicywgMHg4ZiwgT29wcykg
XAotICAgIG1hY3JvKEY2NE5lZywgMHg5MCwgT29wcykgXAotICAgIG1hY3JvKEY2NENvcHlzaWdu
LCAweDkxLCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0Q2VpbCwgMHg5MiwgT29wcykgXAotICAgIG1h
Y3JvKEY2NEZsb29yLCAweDkzLCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0VHJ1bmMsIDB4OTQsIE9v
cHMpIFwKLSAgICBtYWNybyhGNjROZWFyZXN0LCAweDk1LCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0
U3FydCwgMHg5NiwgT29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNy
bykgXAotICAgIG1hY3JvKEkzMkFkZCwgMHg0MCwgQWRkKSBcCi0gICAgbWFjcm8oSTMyU3ViLCAw
eDQxLCBTdWIpIFwKLSAgICBtYWNybyhJMzJNdWwsIDB4NDIsIE11bCkgXAotICAgIG1hY3JvKEkz
MkRpdlMsIDB4NDMsIERpdikgXAotICAgIG1hY3JvKEkzMkRpdlUsIDB4NDQsIE9vcHMpIFwKLSAg
ICBtYWNybyhJMzJSZW1TLCAweDQ1LCBNb2QpIFwKLSAgICBtYWNybyhJMzJSZW1VLCAweDQ2LCBP
b3BzKSBcCi0gICAgbWFjcm8oSTMyQW5kLCAweDQ3LCBCaXRBbmQpIFwKLSAgICBtYWNybyhJMzJP
ciwgMHg0OCwgQml0T3IpIFwKLSAgICBtYWNybyhJMzJYb3IsIDB4NDksIEJpdFhvcikgXAotICAg
IG1hY3JvKEkzMlNobCwgMHg0YSwgU2hsKSBcCi0gICAgbWFjcm8oSTMyU2hyVSwgMHg0YiwgU1No
cikgXAotICAgIG1hY3JvKEkzMlNoclMsIDB4NGMsIFpTaHIpIFwKLSAgICBtYWNybyhJMzJSb3Ry
LCAweGI2LCBPb3BzKSBcCi0gICAgbWFjcm8oSTMyUm90bCwgMHhiNywgT29wcykgXAotICAgIG1h
Y3JvKEkzMkVxLCAweDRkLCBFcXVhbCkgXAotICAgIG1hY3JvKEkzMk5lLCAweDRlLCBOb3RFcXVh
bCkgXAotICAgIG1hY3JvKEkzMkx0UywgMHg0ZiwgTGVzc1RoYW4pIFwKLSAgICBtYWNybyhJMzJM
ZVMsIDB4NTAsIExlc3NFcXVhbCkgXAotICAgIG1hY3JvKEkzMkx0VSwgMHg1MSwgQmVsb3cpIFwK
LSAgICBtYWNybyhJMzJMZVUsIDB4NTIsIEJlbG93RXF1YWwpIFwKLSAgICBtYWNybyhJMzJHdFMs
IDB4NTMsIEdyZWF0ZXJUaGFuKSBcCi0gICAgbWFjcm8oSTMyR2VTLCAweDU0LCBHcmVhdGVyRXF1
YWwpIFwKLSAgICBtYWNybyhJMzJHdFUsIDB4NTUsIEFib3ZlKSBcCi0gICAgbWFjcm8oSTMyR2VV
LCAweDU2LCBBYm92ZUVxdWFsKSBcCi0gICAgbWFjcm8oSTY0QWRkLCAweDViLCBBZGQpIFwKLSAg
ICBtYWNybyhJNjRTdWIsIDB4NWMsIFN1YikgXAotICAgIG1hY3JvKEk2NE11bCwgMHg1ZCwgTXVs
KSBcCi0gICAgbWFjcm8oSTY0RGl2UywgMHg1ZSwgRGl2KSBcCi0gICAgbWFjcm8oSTY0RGl2VSwg
MHg1ZiwgT29wcykgXAotICAgIG1hY3JvKEk2NFJlbVMsIDB4NjAsIE1vZCkgXAotICAgIG1hY3Jv
KEk2NFJlbVUsIDB4NjEsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRBbmQsIDB4NjIsIEJpdEFuZCkg
XAotICAgIG1hY3JvKEk2NE9yLCAweDYzLCBCaXRPcikgXAotICAgIG1hY3JvKEk2NFhvciwgMHg2
NCwgQml0WG9yKSBcCi0gICAgbWFjcm8oSTY0U2hsLCAweDY1LCBTaGwpIFwKLSAgICBtYWNybyhJ
NjRTaHJVLCAweDY2LCBTU2hyKSBcCi0gICAgbWFjcm8oSTY0U2hyUywgMHg2NywgWlNocikgXAot
ICAgIG1hY3JvKEk2NFJvdHIsIDB4YjgsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRSb3RsLCAweGI5
LCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0RXEsIDB4NjgsIEVxdWFsKSBcCi0gICAgbWFjcm8oSTY0
TmUsIDB4NjksIE5vdEVxdWFsKSBcCi0gICAgbWFjcm8oSTY0THRTLCAweDZhLCBMZXNzVGhhbikg
XAotICAgIG1hY3JvKEk2NExlUywgMHg2YiwgTGVzc0VxdWFsKSBcCi0gICAgbWFjcm8oSTY0THRV
LCAweDZjLCBCZWxvdykgXAotICAgIG1hY3JvKEk2NExlVSwgMHg2ZCwgQmVsb3dFcXVhbCkgXAot
ICAgIG1hY3JvKEk2NEd0UywgMHg2ZSwgR3JlYXRlclRoYW4pIFwKLSAgICBtYWNybyhJNjRHZVMs
IDB4NmYsIEdyZWF0ZXJFcXVhbCkgXAotICAgIG1hY3JvKEk2NEd0VSwgMHg3MCwgQWJvdmUpIFwK
LSAgICBtYWNybyhJNjRHZVUsIDB4NzEsIEFib3ZlRXF1YWwpIFwKLSAgICBtYWNybyhGMzJBZGQs
IDB4NzUsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJTdWIsIDB4NzYsIE9vcHMpIFwKLSAgICBtYWNy
byhGMzJNdWwsIDB4NzcsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJEaXYsIDB4NzgsIE9vcHMpIFwK
LSAgICBtYWNybyhGMzJNaW4sIDB4NzksIE9vcHMpIFwKLSAgICBtYWNybyhGMzJNYXgsIDB4N2Es
IE9vcHMpIFwKLSAgICBtYWNybyhGMzJFcSwgMHg4MywgT29wcykgXAotICAgIG1hY3JvKEYzMk5l
LCAweDg0LCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyTHQsIDB4ODUsIE9vcHMpIFwKLSAgICBtYWNy
byhGMzJMZSwgMHg4NiwgT29wcykgXAotICAgIG1hY3JvKEYzMkd0LCAweDg3LCBPb3BzKSBcCi0g
ICAgbWFjcm8oRjMyR2UsIDB4ODgsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRBZGQsIDB4ODksIE9v
cHMpIFwKLSAgICBtYWNybyhGNjRTdWIsIDB4OGEsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRNdWws
IDB4OGIsIE9vcHMpIFwKLSAgICBtYWNybyhGNjREaXYsIDB4OGMsIE9vcHMpIFwKLSAgICBtYWNy
byhGNjRNaW4sIDB4OGQsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRNYXgsIDB4OGUsIE9vcHMpIFwK
LSAgICBtYWNybyhGNjRFcSwgMHg5NywgT29wcykgXAotICAgIG1hY3JvKEY2NE5lLCAweDk4LCBP
b3BzKSBcCi0gICAgbWFjcm8oRjY0THQsIDB4OTksIE9vcHMpIFwKLSAgICBtYWNybyhGNjRMZSwg
MHg5YSwgT29wcykgXAotICAgIG1hY3JvKEY2NEd0LCAweDliLCBPb3BzKSBcCi0gICAgbWFjcm8o
RjY0R2UsIDB4OWMsIE9vcHMpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9P
UChtYWNybykgXAotICAgIG1hY3JvKEkzMkxvYWQ4UywgMHgyMCwgT29wcykgXAotICAgIG1hY3Jv
KEkzMkxvYWQ4VSwgMHgyMSwgT29wcykgXAotICAgIG1hY3JvKEkzMkxvYWQxNlMsIDB4MjIsIE9v
cHMpIFwKLSAgICBtYWNybyhJMzJMb2FkMTZVLCAweDIzLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0
TG9hZDhTLCAweDI0LCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0TG9hZDhVLCAweDI1LCBPb3BzKSBc
Ci0gICAgbWFjcm8oSTY0TG9hZDE2UywgMHgyNiwgT29wcykgXAotICAgIG1hY3JvKEk2NExvYWQx
NlUsIDB4MjcsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRMb2FkMzJTLCAweDI4LCBPb3BzKSBcCi0g
ICAgbWFjcm8oSTY0TG9hZDMyVSwgMHgyOSwgT29wcykgXAotICAgIG1hY3JvKEkzMkxvYWQsIDB4
MmEsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRMb2FkLCAweDJiLCBPb3BzKSBcCi0gICAgbWFjcm8o
RjMyTG9hZCwgMHgyYywgT29wcykgXAotICAgIG1hY3JvKEY2NExvYWQsIDB4MmQsIE9vcHMpCi0K
LSNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AobWFjcm8pIFwKLSAgICBtYWNy
byhJMzJTdG9yZTgsIDB4MmUsIE9vcHMpIFwKLSAgICBtYWNybyhJMzJTdG9yZTE2LCAweDJmLCBP
b3BzKSBcCi0gICAgbWFjcm8oSTY0U3RvcmU4LCAweDMwLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0
U3RvcmUxNiwgMHgzMSwgT29wcykgXAotICAgIG1hY3JvKEk2NFN0b3JlMzIsIDB4MzIsIE9vcHMp
IFwKLSAgICBtYWNybyhJMzJTdG9yZSwgMHgzMywgT29wcykgXAotICAgIG1hY3JvKEk2NFN0b3Jl
LCAweDM0LCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyU3RvcmUsIDB4MzUsIE9vcHMpIFwKLSAgICBt
YWNybyhGNjRTdG9yZSwgMHgzNiwgT29wcykKLQotCi0KLSNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9P
UChtYWNybykgXAotICAgIEZPUl9FQUNIX1dBU01fU1BFQ0lBTF9PUChtYWNybykgXAotICAgIEZP
Ul9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKG1hY3JvKSBcCi0gICAgRk9SX0VBQ0hfV0FTTV9V
TkFSWV9PUChtYWNybykgXAotICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKG1hY3JvKSBcCi0g
ICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9PUChtYWNybykgXAotICAgIEZPUl9FQUNIX1dB
U01fTUVNT1JZX1NUT1JFX09QKG1hY3JvKQotCi0jZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5h
bWUsIGlkLCBiM29wKSBuYW1lID0gaWQsCi0KLWVudW0gT3BUeXBlIDogdWludDhfdCB7Ci0gICAg
Rk9SX0VBQ0hfV0FTTV9PUChDUkVBVEVfRU5VTV9WQUxVRSkKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEludD4KLWlubGluZSBib29sIGlzVmFsaWRPcFR5cGUoSW50IGkpCi17Ci0gICAgLy8gQml0
c2V0IG9mIHZhbGlkIG9wcy4KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCB2YWxpZFtdID0geyAw
eGZmLCAweDhmLCAweGZmLCAweDIsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4YSwgMHhmZiwgMHhmZiwg
MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhm
ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiB9OwotICAgIHJldHVybiAwIDw9IGkgJiYgaSA8PSAx
ODggJiYgKHZhbGlkW2kgLyA4XSAmICgxIDw8IChpICUgOCkpKTsKLX0KLQotZW51bSBjbGFzcyBC
aW5hcnlPcFR5cGUgOiB1aW50OF90IHsKLSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVB
VEVfRU5VTV9WQUxVRSkKLX07Ci0KLWVudW0gY2xhc3MgVW5hcnlPcFR5cGUgOiB1aW50OF90IHsK
LSAgICBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKENSRUFURV9FTlVNX1ZBTFVFKQotfTsKLQotZW51
bSBjbGFzcyBMb2FkT3BUeXBlIDogdWludDhfdCB7Ci0gICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllf
TE9BRF9PUChDUkVBVEVfRU5VTV9WQUxVRSkKLX07Ci0KLWVudW0gY2xhc3MgU3RvcmVPcFR5cGUg
OiB1aW50OF90IHsKLSAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfRU5V
TV9WQUxVRSkKLX07Ci0KLSN1bmRlZiBDUkVBVEVfRU5VTV9WQUxVRQotCi1pbmxpbmUgYm9vbCBp
c0NvbnRyb2xPcChPcFR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVB
VEVfQ0FTRShuYW1lLCBpZCwgYjNvcCkgY2FzZSBPcFR5cGU6Om5hbWU6Ci0gICAgRk9SX0VBQ0hf
V0FTTV9DT05UUk9MX0ZMT1dfT1AoQ1JFQVRFX0NBU0UpCi0gICAgICAgIHJldHVybiB0cnVlOwot
I3VuZGVmIENSRUFURV9DQVNFCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TVBhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjc5MTg2ZjVlZDdhNTlh
OTZkNjAyM2U1NWFjMDRjMGY1ZmVjMjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0KLSNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiQjNQcm9jZWR1cmUu
aCIKLSNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCi0jaW5jbHVkZSAiV0FTTU9wcy5oIgotI2luY2x1
ZGUgIldBU01TZWN0aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9MRUJEZWNvZGVyLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci0KLWNsYXNzIFBhcnNlciB7Ci1wcm90ZWN0ZWQ6
Ci0gICAgUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHNpemVfdCBzdGFydCwgc2l6ZV90
IGVuZCk7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1lQ2hhcmFjdGVyKGNo
YXIpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVTdHJpbmcoY29uc3QgY2hh
ciopOwotCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90
JiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDcodWludDhf
dCYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1aW50
MzJfdCYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQz
Mih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQz
MihtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQot
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1
bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLmRhdGEo
KSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9Ci0KLQotICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCk7Ci0KLSAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4mIG1fc291cmNlOwotICAgIHNpemVfdCBtX3NvdXJjZUxlbmd0aDsK
LSAgICBzaXplX3QgbV9vZmZzZXQ7Ci19OwotCi1BTFdBWVNfSU5MSU5FIFBhcnNlcjo6UGFyc2Vy
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVf
dCBlbmQpCi0gICAgOiBtX3NvdXJjZShzb3VyY2VCdWZmZXIpCi0gICAgLCBtX3NvdXJjZUxlbmd0
aChlbmQpCi0gICAgLCBtX29mZnNldChzdGFydCkKLXsKLSAgICBBU1NFUlQoZW5kIDw9IHNvdXJj
ZUJ1ZmZlci5zaXplKCkpOwotICAgIEFTU0VSVChzdGFydCA8IGVuZCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIoY2hhciBjKQotewotICAgIGlmICht
X29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChjID09IG1fc291cmNlW21fb2Zmc2V0XSkgewotICAgICAgICBtX29mZnNldCsrOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICB1
bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0OwotICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHN0
cltpXTsgaSsrKSB7Ci0gICAgICAgIGlmICghY29uc3VtZUNoYXJhY3RlcihzdHJbaV0pKSB7Ci0g
ICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1BTFdBWVNfSU5MSU5FIGJv
b2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQotewotICAgIGlmIChtX3Nv
dXJjZUxlbmd0aCA8IDQgfHwgbV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGggLSA0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7Ci0gICAgbV9vZmZzZXQgKz0gNDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VV
SW50Nyh1aW50OF90JiByZXN1bHQpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVu
Z3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gbV9zb3VyY2VbbV9vZmZz
ZXQrK107Ci0gICAgcmV0dXJuIHJlc3VsdCA8IDB4ODA7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9v
bCBQYXJzZXI6OnBhcnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0KQotewotICAgIHVpbnQzMl90
IHRlbXA7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMih0ZW1wKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRlbXApOwotICAgIHJldHVy
biB0ZW1wIDw9IDE7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVU
eXBlKFR5cGUmIHJlc3VsdCkKLXsKLSAgICB1aW50OF90IHZhbHVlOwotICAgIGlmICghcGFyc2VV
SW50Nyh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgPj0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oVHlwZTo6TGFzdFZhbHVlVHlwZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMjk4ZmY1NTExZmM1ZjdjYjA1YzdjM2NkODI1
YjYyMzY0MWM0OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXQVNNUGxhbi5oIgotCi0jaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1
ZGUgIldBU01CM0lSR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiV0FTTUNhbGxpbmdDb252ZW50aW9u
LmgiCi0jaW5jbHVkZSAiV0FTTU1vZHVsZVBhcnNlci5oIgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci0KLXN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKLQotUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90
PiBzb3VyY2UpCi17Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiU3RhcnRp
bmcgcGxhbi4iKTsKLSAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSk7Ci0gICAg
aWYgKCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgewotICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcg
bW9kdWxlIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhcnNlZCBtb2R1bGUuIik7Ci0KLSAgICBmb3IgKGNv
bnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8gOiBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZv
cm1hdGlvbigpKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xu
KCJQcm9jZXNzaW5nIGZ1bmNpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIgYW5kIGVu
ZGluZyBhdDogIiwgaW5mby5lbmQpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBhcnNlQW5kQ29t
cGlsZSh2bSwgc291cmNlLCBtb2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCksIGluZm8sIG1vZHVs
ZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBQYXRjaCB0
aGUgY2FsbCBzaXRlcyBmb3IgZWFjaCBmdW5jdGlvbi4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIgOiByZXN1bHQpIHsKLSAgICAgICAg
RnVuY3Rpb25Db21waWxhdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblB0ci5nZXQoKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBjYWxsIDogZnVuY3Rpb24tPnVubGlua2VkQ2FsbHMpCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKHJlc3VsdFtjYWxsLmZ1bmN0aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsKLSAg
ICB9Ci0KLSAgICBtZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7Ci19Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjg0NWVlMTQ4OTc4Zjk2MDEwNzY5MDY0MGE1ZDEwYjZmYzdmMzU1NS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNUGxhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1
bHQuaCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKLSNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci1jbGFzcyBNZW1vcnk7Ci0KLS8vIFRP
RE86IFRoaXMgc2hvdWxkIGNyZWF0ZSBhIFdBU00gTW9kdWxlIG5vdCBhIGxpc3Qgb2YgZnVuY3Rp
b25zLgotY2xhc3MgUGxhbiB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihW
TSYsIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UpOwotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvbXBpbGF0aW9uPj4gcmVzdWx0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1v
cnk+IG1lbW9yeTsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNU2VjdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0
aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2M3MmQ0MWQzYmVlZGNkMTcy
MzhhOGMyMDA0MjMyNzUxM2I0NmU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1zdHJ1Y3QgU2VjdGlvbnMg
ewotICAgIGVudW0gU2VjdGlvbiA6IHVpbnQ4X3QgewotICAgICAgICBGdW5jdGlvblR5cGVzID0g
MSwKLSAgICAgICAgU2lnbmF0dXJlcyA9IDMsCi0gICAgICAgIE1lbW9yeSA9IDUsCi0gICAgICAg
IERlZmluaXRpb25zID0gMTAsCi0gICAgICAgIFVua25vd24KLSAgICB9OwotICAgIHN0YXRpYyBi
b29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQotICAgIHsK
LSAgICAgICAgaWYgKHByZXZpb3VzID09IFVua25vd24pCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKLSAgICB9Ci19OwotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUzNTlkMzA4OThmMGViNTRkZGMyYWQwNWQ5Y2NlZWRhMmViOTU5ZWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKQEAgLTAsMCArMSw3MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0
b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Zp
eFNTQS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVk
ZSAiQjNWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
QjNWYXJpYWJsZS5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
V2FzbUFkZHJlc3NWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIK
KyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK3ZvaWQgZHVtcFByb2NlZHVy
ZSh2b2lkKiBwdHIpCit7CisgICAgSlNDOjpCMzo6UHJvY2VkdXJlKiBwcm9jID0gc3RhdGljX2Nh
c3Q8SlNDOjpCMzo6UHJvY2VkdXJlKj4ocHRyKTsKKyAgICBwcm9jLT5kdW1wKFdURjo6ZGF0YUZp
bGUoKSk7Cit9CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK25hbWVzcGFj
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CisKK2lubGluZSBCMzo6T3Bjb2RlIHRvQjNPcChCaW5hcnlPcFR5cGUgb3ApCit7CisgICAgc3dp
dGNoIChvcCkgeworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBvcCwgYjNvcCkgY2FzZSBCaW5h
cnlPcFR5cGU6Om5hbWU6IHJldHVybiBiM29wOworICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09Q
KENSRUFURV9DQVNFKQorI3VuZGVmIENSRUFURV9DQVNFCisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBCMzo6T3Bjb2RlIHRvQjNPcChVbmFyeU9w
VHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUs
IG9wLCBiM29wKSBjYXNlIFVuYXJ5T3BUeXBlOjpuYW1lOiByZXR1cm4gYjNvcDsKKyAgICBGT1Jf
RUFDSF9XQVNNX1VOQVJZX09QKENSRUFURV9DQVNFKQorI3VuZGVmIENSRUFURV9DQVNFCisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIEIzSVJHZW5l
cmF0b3IgeworcHJpdmF0ZToKKyAgICBjbGFzcyBMYXp5QmxvY2sgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgTGF6eUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2Nr
KGJsb2NrKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2Jsb2NrOyB9CisKKyAgICAgICAgQmFzaWNCbG9j
ayogZ2V0KFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2Js
b2NrKQorICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9ibG9jazsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9ibG9jaykK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQoKm1fYmxvY2spOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiVW5pbml0aWFsaXplZCIpOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9Owor
ICAgIH07CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250
cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIFR5cGUgc2lnbmF0dXJlLCBCYXNpY0Jsb2NrKiBzcGVj
aWFsID0gbnVsbHB0ciwgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbnVsbHB0cikKKyAgICAg
ICAgICAgIDogY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lh
bChzcGVjaWFsKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlICE9IFZvaWQp
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcm9jLmFkZFZhcmlhYmxlKHRvQjNUeXBl
KHNpZ25hdHVyZSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiSWY6ICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBC
bG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6Okxvb3A6
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgIik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlv
bjogIiwgY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKKyAgICAgICAgICAgIGlmIChzcGVj
aWFsKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3BlY2lhbCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25lIik7CisgICAgICAgIH0KKworICAg
ICAgICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
c3BlY2lhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpCbG9jazsKKyAgICAg
ICAgICAgIGlmIChjb250aW51YXRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIEJsb2NrVHlw
ZTo6SWY7CisgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpMb29wOworICAgICAgICB9CisK
KyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goUHJvY2VkdXJlJiBwcm9j
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAgIHJldHVybiBjb250
aW51YXRpb24uZ2V0KHByb2MpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBm
cmllbmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKKyAgICAgICAgLy8gV2UgdXNlIGEgTGF6eUJsb2Nr
IGZvciB0aGUgY29udGludWF0aW9uIHNpbmNlIEIzOjp2YWxpZGF0ZSBkb2VzIG5vdCBsaWtlIG9y
cGhhbmVkIGJsb2Nrcy4gTm90ZSwKKyAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0byBjcmVhdGUg
YW4gb3JwaGFuZWQgYmxvY2sgYnkgZG9pbmcgc29tZXRoaW5nIGxpa2UgKGJsb2NrIChyZXR1cm4g
KC4uLikpKS4gSW4KKyAgICAgICAgLy8gdGhhdCBleGFtcGxlLCBpZiB3ZSBlYWdlcmx5IGFsbG9j
YXRlIGEgQmFzaWNCbG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBpdCB3aWxsIG5ldmVyIGJlIHJl
YWNoYWJsZS4KKyAgICAgICAgTGF6eUJsb2NrIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNC
bG9jayogc3BlY2lhbDsKKyAgICAgICAgVmVjdG9yPFZhcmlhYmxlKiwgMT4gcmVzdWx0OworICAg
IH07CisKKyAgICB0eXBlZGVmIFZhbHVlKiBFeHByZXNzaW9uVHlwZTsKKyAgICB0eXBlZGVmIENv
bnRyb2xEYXRhIENvbnRyb2xUeXBlOworICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25UeXBl
LCAxPiBFeHByZXNzaW9uTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZSosIDE+IFJl
c3VsdExpc3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJl
c3Npb24gPSBudWxscHRyOworCisgICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUm
LCBWZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscyk7CisKKyAgICB2b2lkIGFkZEFy
Z3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKKyAgICB2b2lkIGFkZExvY2FsKFR5cGUsIHVp
bnQzMl90KTsKKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7
CisKKyAgICAvLyBMb2NhbHMKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1
aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVl
KTsKKworICAgIC8vIE1lbW9yeQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9h
ZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwg
dWludDMyX3Qgb2Zmc2V0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9y
ZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVp
bnQzMl90IG9mZnNldCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBiaW5hcnlPcChCaW5hcnlPcFR5cGUsIEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFyeU9wKFVuYXJ5T3BUeXBlLCBFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAg
Q29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsK
KyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVy
ZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEVsc2UoQ29udHJvbERhdGEmKTsKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjayk7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAg
ICBib29sIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICB2b2lk
IGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKworcHJpdmF0ZToKKyAgICBFeHByZXNzaW9u
VHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBFeHByZXNzaW9uVHlwZSBl
bWl0TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWlu
dDMyX3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBPcmlnaW4s
IEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBv
ZmZzZXQpOworCisgICAgdm9pZCB1bmlmeShWYXJpYWJsZSogdGFyZ2V0LCBjb25zdCBFeHByZXNz
aW9uVHlwZSBzb3VyY2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBSZXN1bHRMaXN0JiBzdGFjayk7CisKKyAgICBNZW1v
cnkqIG1fbWVtb3J5OworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIEJhc2ljQmxvY2sqIG1f
Y3VycmVudEJsb2NrOworICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOworICAgIC8vIG1f
dW5saWtlZENhbGxzIGlzIGxpc3Qgb2YgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBp
bmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9y
PFVubGlua2VkQ2FsbD4mIG1fdW5saW5rZWRDYWxsczsKKyAgICBHUFJSZWcgbV9tZW1vcnlCYXNl
R1BSOworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFI7Cit9OworCitCM0lSR2VuZXJhdG9yOjpC
M0lSR2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9y
PFVubGlua2VkQ2FsbD4mIHVubGlua2VkQ2FsbHMpCisgICAgOiBtX21lbW9yeShtZW1vcnkpCisg
ICAgLCBtX3Byb2MocHJvY2VkdXJlKQorICAgICwgbV91bmxpbmtlZENhbGxzKHVubGlua2VkQ2Fs
bHMpCit7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKworICAgIGlm
IChtX21lbW9yeSkgeworICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21lbW9yeS0+cGlubmVk
UmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rl
cihtX21lbW9yeUJhc2VHUFIpOworICAgICAgICBBU1NFUlQoIW1fbWVtb3J5LT5waW5uZWRSZWdp
c3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNp
emVHUFIgPSBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXpl
UmVnaXN0ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgaW5m
byA6IG1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQorICAgICAgICAg
ICAgbV9wcm9jLnBpblJlZ2lzdGVyKGluZm8uc2l6ZVJlZ2lzdGVyKTsKKworICAgICAgICBtX3By
b2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBp
bm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdW53aW5kIHRoZSBzdGFjayBhbmQgdGhyb3cgYSBKUyBleGNlcHRp
b24uIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM1MQor
ICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2
b2lkIEIzSVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpCit7
CisgICAgbV9sb2NhbHMucmVzZXJ2ZUNhcGFjaXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50KTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgbV9sb2Nh
bHMuYXBwZW5kKG1fcHJvYy5hZGRWYXJpYWJsZSh0b0IzVHlwZSh0eXBlKSkpOworfQorCit2b2lk
IEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKQor
eworICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBtX2xvY2Fscy5ncm93KHR5cGVz
LnNpemUoKSk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyh0eXBl
cywgbV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCksCisgICAgICAgIFsmXSAoRXhwcmVz
c2lvblR5cGUgYXJndW1lbnQsIHVuc2lnbmVkIGkpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlKiBh
cmd1bWVudFZhcmlhYmxlID0gbV9wcm9jLmFkZFZhcmlhYmxlKGFyZ3VtZW50LT50eXBlKCkpOwor
ICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBhcmd1bWVudFZhcmlhYmxlOworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3Jp
Z2luKCksIGFyZ3VtZW50VmFyaWFibGUsIGFyZ3VtZW50KTsKKyAgICAgICAgfSk7Cit9CisKK2Jv
b2wgQjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpCit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQs
IE9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEIzSVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKKyAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgT3JpZ2luKCksIG1f
bG9jYWxzW2luZGV4XSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgVmFs
dWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQor
eworICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIgJiYgbV9tZW1vcnlTaXplR1BSKTsKKyAgICBB
U1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBw
b2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOwor
ICAgIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpF
eHQzMiwgT3JpZ2luKCksIHBvaW50ZXIpOworICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVt
b3J5QmFzZUdQUik7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlw
ZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2Fk
OFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJl
dHVybiAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQ6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpGMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBP
cmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCit7
CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7Cisg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4sIHBv
aW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4sIHBvaW50ZXIs
IG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsKKyAg
ICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkOFosIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmln
aW4sIHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKyAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4s
IHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBv
aW50ZXIpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVTogeworICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIpOworICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwg
dmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIpOworICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwg
dmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDogeworICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBJbnQ2NCwgb3JpZ2luLCBwb2ludGVyKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlcik7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIERvdWJsZSwg
b3JpZ2luLCBwb2ludGVyKTsKKyAgICB9CisKKyAgICAvLyBCMyBkb2Vzbid0IHN1cHBvcnQgTG9h
ZDE2WiB5ZXQuCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6bG9hZChMb2Fk
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
LCB1aW50MzJfdCBvZmZzZXQpCit7CisgICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQz
Mik7CisKKyAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBPcmlnaW4oKSwgZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3Ao
U3RvcmVPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5
cGU6OkkzMlN0b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAg
IHJldHVybiAxOworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAg
ICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6
CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCisKK2lubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3Jl
T3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KQoreworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7Cisg
ICAgICAgIEZBTExUSFJPVUdIOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4Ogor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0
b3JlOCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgdmFsdWUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4sIHZhbHVl
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9y
ZTE2OgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIFN0b3JlMTYsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgICAgIHZhbHVl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2lu
LCB2YWx1ZSk7CisgICAgICAgIEZBTExUSFJPVUdIOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUs
IG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBCM0lSR2VuZXJh
dG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBBU1NFUlQocG9pbnRlci0+
dHlwZSgpID09IEludDMyKTsKKworICAgIGVtaXRTdG9yZU9wKG9wLCBPcmlnaW4oKSwgZW1pdENo
ZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSks
IHZhbHVlLCBvZmZzZXQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIzSVJHZW5lcmF0
b3I6OnVuYXJ5T3AoVW5hcnlPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIHRvQjNPcChvcCksIE9yaWdpbigpLCBhcmcpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEIzSVJHZW5lcmF0b3I6OmJpbmFyeU9wKEJpbmFyeU9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCB0b0IzT3Aob3ApLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biB0cnVlOworfQorCitCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9y
OjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4odmFsdWUpKTsKKyAgICBjYXNlIEludDY0OgorICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHZhbHVlKTsK
KyAgICBjYXNlIEZsb2F0OgorICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdEZsb2F0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxmbG9hdD4o
c3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSk7CisgICAgY2FzZSBEb3VibGU6CisgICAgICAg
IHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJh
dG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEo
bV9wcm9jLCBzaWduYXR1cmUpOworfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lS
R2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2ljQmxvY2sqIGJv
ZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGJvZHkpOworICAgIGJvZHktPmFkZFBy
ZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7Cisg
ICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBib2R5KTsKK30KKworQjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVk
cyB0byBkbyBzb21lIGtpbmQgb2Ygc3RhY2sgcGFzc2luZy4KKworICAgIEJhc2ljQmxvY2sqIHRh
a2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX3By
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRk
QmxvY2soKTsKKworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
QjM6OkJyYW5jaCwgT3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNl
dFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRh
a2VuKSk7CisgICAgdGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICBu
b3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworCisgICAgbV9jdXJyZW50
QmxvY2sgPSB0YWtlbjsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUs
IG5vdFRha2VuLCBjb250aW51YXRpb24pOworfQorCitib29sIEIzSVJHZW5lcmF0b3I6OmFkZEVs
c2UoQ29udHJvbERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGRhdGEuY29udGludWF0aW9uKTsK
KyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKKyAgICAvLyBDbGVhciB0aGUgc3Bl
Y2lhbCBwb2ludGVyIHNvIHRoYXQgd2hlbiB3ZSBwYXJzZSB0aGUgZW5kIHdlIGRvbid0IHRoaW5r
IHRoYXQgdGhpcyBibG9jayBpcyBhbiBpZiBibG9jay4KKyAgICBkYXRhLnNwZWNpYWwgPSBudWxs
cHRyOworICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNp
emUoKSA8PSAxKTsKKyAgICBpZiAocmV0dXJuVmFsdWVzLnNpemUoKSkKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIE9yaWdp
bigpLCByZXR1cm5WYWx1ZXNbMF0pOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJv
bERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcykKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdl
dEJsb2NrRm9yQnJhbmNoKG1fcHJvYyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJu
VmFsdWVzLCBkYXRhLnJlc3VsdCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4oKSwg
Y29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVl
bnRlZEJsb2NrKHRhcmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAg
ICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgICAgIGNvbnRp
bnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayh0YXJnZXQpKTsKKyAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1
cnJlbnRCbG9jayk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQjNJUkdl
bmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25MaXN0JiBleHBy
ZXNzaW9uU3RhY2spCit7CisgICAgaWYgKCFkYXRhLmNvbnRpbnVhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBkYXRhLmNvbnRpbnVh
dGlvbi5nZXQobV9wcm9jKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikg
eworICAgICAgICBBU1NFUlQoIWRhdGEuc3BlY2lhbC0+c2l6ZSgpICYmICFkYXRhLnNwZWNpYWwt
PnN1Y2Nlc3NvcnMoKS5zaXplKCkpOworICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGFu
eSBlbHNlIGJsb2NrIHdlIG5lZWQgdG8gcG9pbnQgdGhlIG5vdFRha2VuIGJyYW5jaCB0byB0aGUg
Y29udGludWF0aW9uLgorICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShtX3Byb2MsIEp1bXAsIE9yaWdpbigpKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNj
ZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAgICAgY29udGludWF0
aW9uLT5hZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNpYWwpOworICAgIH0KKworICAgIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1bHQpOworICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgY29u
dGludWF0aW9uKTsKKyAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJs
b2NrKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8sIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgQVNTRVJUKGluZm8uc2ln
bmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIFR5cGUgcmV0
dXJuVHlwZSA9IGluZm8uc2lnbmF0dXJlLT5yZXR1cm5UeXBlOworCisgICAgc2l6ZV90IGNhbGxJ
bmRleCA9IG1fdW5saW5rZWRDYWxscy5zaXplKCk7CisgICAgbV91bmxpbmtlZENhbGxzLmdyb3co
Y2FsbEluZGV4ICsgMSk7CisgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0
dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShy
ZXR1cm5UeXBlKSwKKyAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fdW5saW5rZWRDYWxsc1tjYWxsSW5kZXhdID0geyBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoY2FsbCksIGZ1bmN0aW9uSW5kZXggfTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBCM0lSR2VuZXJhdG9yOjppc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0
YSYgZGF0YSkKK3sKKyAgICAvLyBJZiBub3RoaW5nIHRhcmdldHMgdGhlIGNvbnRpbnVhdGlvbiBv
ZiB0aGUgY3VycmVudCBibG9jayB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCisgICAgLy8g
YW4gb3JwaGFuZWQgQmFzaWNCbG9jayBzaW5jZSBpdCBjYW4ndCBiZSByZWFjaGVkIGJ5IGZhbGx0
aHJvdWdoLgorICAgIGlmICghZGF0YS5jb250aW51YXRpb24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7
CisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgZGF0YS5z
cGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9j
dXJyZW50QmxvY2spOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0
YS5zcGVjaWFsKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCM0lSR2Vu
ZXJhdG9yOjp1bmlmeShWYXJpYWJsZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkK
K3sKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywg
U2V0LCBPcmlnaW4oKSwgdmFyaWFibGUsIHNvdXJjZSk7Cit9CisKK3ZvaWQgQjNJUkdlbmVyYXRv
cjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNr
LCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPj0gcmVz
dWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0U3Rh
Y2suc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5KHJlc3VsdFtpXSwgcmVzdWx0U3RhY2tbaV0p
OworfQorCit2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBl
PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQor
eworICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fcHJv
Yyk7CisgICAgZGF0YUxvZ0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2Nr
KTsKKyAgICBkYXRhTG9nTG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgZm9yIChjb25zdCBDb250
cm9sVHlwZSYgZGF0YSA6IGNvbnRyb2xTdGFjaykKKyAgICAgICAgZGF0YUxvZ0xuKCIgICIsIGRh
dGEpOworICAgIGRhdGFMb2dMbigiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZvciAoY29uc3Qg
RXhwcmVzc2lvblR5cGUmIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRh
dGFMb2dMbigiICAiLCAqZXhwcmVzc2lvbik7CisgICAgZGF0YUxvZ0xuKCJcbiIpOworfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVy
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICAvLyBDaGVjayBhcmd1bWVudCBjb3VudCBpcyBzYW5lLgorICAgIFZhbHVl
KiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkZy
YW1lUG9pbnRlciwgT3JpZ2luKCkpOworICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQg
PSBibG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBWYWx1ZSogYXJn
dW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKKworICAg
IFZhbHVlKiBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7CisKKyAg
ICBDaGVja1ZhbHVlKiBhcmd1bWVudENvdW50Q2hlY2sgPSBibG9jay0+YXBwZW5kTmV3PENoZWNr
VmFsdWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWJvdmUsIE9yaWdpbigpLCBleHBlY3RlZEFyZ3VtZW50Q291bnQsIGFyZ3Vt
ZW50Q291bnQpKTsKKyAgICBhcmd1bWVudENvdW50Q2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICB9KTsKKworICAgIC8vIE1vdmUgbWVtb3J5IHZhbHVl
cyB0byB0aGUgYXBwcm9yaWF0ZSBwbGFjZXMsIGlmIG5lZWRlZC4KKyAgICBWYWx1ZSogYmFzZU1l
bW9yeSA9IG51bGxwdHI7CisgICAgVmVjdG9yPFZhbHVlKj4gc2l6ZXM7CisgICAgaWYgKG1lbW9y
eSkgeworICAgICAgICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIFZhbHVlKiBzaXpl
ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdp
bigpLAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgYml0d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpvZmZzZXRPZlNp
emUoKSkpOworICAgICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5LT5waW5uZWRSZWdp
c3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDog
bWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBz
aXplcy5hcHBlbmQoYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwg
c2l6ZSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGluZm8uc2l6ZU9mZnNldCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEdldCBvdXIgYXJndW1lbnRzLgorICAgIFZlY3RvcjxWYWx1ZSo+IGFyZ3VtZW50czsKKyAg
ICBqc2NDYWxsaW5nQ29udmVudGlvbigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLT5hcmd1bWVu
dHMsIHByb2MsIGJsb2NrLCBPcmlnaW4oKSwgWyZdIChWYWx1ZSogYXJndW1lbnQsIHVuc2lnbmVk
KSB7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOworICAgIH0pOworCisgICAg
Ly8gTW92ZSB0aGUgYXJndW1lbnRzIGludG8gcGxhY2UuCisgICAgVmFsdWUqIHJlc3VsdCA9IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgT3JpZ2luKCksIGFy
Z3VtZW50cywgdG9CM1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKSwgWyZdIChQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQpIHsKKyAgICAgICAgaWYgKG1lbW9yeSkgeworICAgICAgICAgICAg
QVNTRVJUKHNpemVzLnNpemUoKSA9PSBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdp
c3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5l
ZFZhbHVlKGJhc2VNZW1vcnksIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMo
KS5iYXNlTWVtb3J5UG9pbnRlcikpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShzaXplc1tpXSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBpbm5l
ZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOworICAgICAgICB9
CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobWFpbkZ1bmN0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9
KTsKKworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0LCBpZiBuZWVkZWQuCisgICAgaWYgKHNpZ25h
dHVyZS0+cmV0dXJuVHlwZSAhPSBWb2lkKQorICAgICAgICBibG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKHByb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOworICAgIGVsc2UKKyAg
ICAgICAgYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBPcmln
aW4oKSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHBy
b2MpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRD
b21waWxlKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIE1lbW9yeSogbWVtb3J5LCBG
dW5jdGlvbkluZm9ybWF0aW9uIGluZm8sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9u
PiYgZnVuY3Rpb25zLCB1bnNpZ25lZCBvcHRMZXZlbCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0
ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKKworICAgIFByb2NlZHVyZSBw
cm9jZWR1cmU7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlLCBy
ZXN1bHQtPnVubGlua2VkQ2FsbHMpOworICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+
IHBhcnNlcihjb250ZXh0LCBzb3VyY2UsIGluZm8sIGZ1bmN0aW9ucyk7CisgICAgaWYgKCFwYXJz
ZXIucGFyc2UoKSkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
IHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2NlZHVyZSwg
IkFmdGVyIHBhcnNpbmc6XG4iKTsKKworICAgIGZpeFNTQShwcm9jZWR1cmUpOworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKKworICAg
IHJlc3VsdC0+Y29kZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jZWR1
cmUsIG9wdExldmVsKTsKKyAgICByZXN1bHQtPmpzRW50cnlQb2ludCA9IGNyZWF0ZUpTV3JhcHBl
cih2bSwgaW5mby5zaWduYXR1cmUsIHJlc3VsdC0+Y29kZS0+Y29kZSgpLCBtZW1vcnkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGQ4NDIwYWZmZTcwMTcxNWFhZDgxNjA1
MDU3Mzc2NjAzOTZmMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAi
Vk0uaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK2V4dGVybiAiQyIgdm9pZCBkdW1wUHJv
Y2VkdXJlKHZvaWQqKTsKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xh
c3MgTWVtb3J5OworCitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VB
bmRDb21waWxlKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiwgTWVtb3J5KiwgRnVuY3Rpb25JbmZvcm1h
dGlvbiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiwgdW5zaWduZWQgb3B0TGV2
ZWwgPSAxKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGluZ0NvbnZlbnRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNmFjNjcwYTljOGZlYTI2YjA1ZjA4
OGU0YjVhMTIwMDQ4NWZiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpz
Y0NhbGxpbmdDb252ZW50aW9uKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpT
Q0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0
ZDo6Y2FsbF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAg
ICAgICBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwg
VmVjdG9yPFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKK2NvbnN0
IFdhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkKK3sKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNXYXNt
Q2FsbGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dhc21D
YWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV2FzbUNhbGxp
bmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVu
dFJlZ2lzdGVycyhHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3Rl
cnM7ICsraSkKKyAgICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50
UmVnaXN0ZXJzKEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
czsgKytpKQorICAgICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0
b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50
aW9uLmNvbnN0cnVjdChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJB
cmd1bWVudFJlZ2lzdGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
ICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc0NDJlNzEyYWZiZjdjNzI3NmFiOTVmODQ5YTI5MTc5ZTMzZDljOWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVk
ZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0cmFpbmVkVmFsdWUuaCIK
KyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUu
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit0eXBlZGVmIHVuc2lnbmVkICgq
TmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUgdHlwZSk7CisKK3Rl
bXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xh
c3MgQ2FsbGluZ0NvbnZlbnRpb24geworcHVibGljOgorICAgIENhbGxpbmdDb252ZW50aW9uKFZl
Y3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYm
IGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKGdwckFyZ3MpCisgICAg
ICAgICwgbV9mcHJBcmdzKGZwckFyZ3MpCisgICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJz
KGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBCMzo6
VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoVmVjdG9yPFJlZz4gcmVnQXJncywgQjM6OlR5
cGUgdHlwZSwgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IEIzOjpWYWx1ZVJlcDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOworCisgICAgICAgIGNvdW50Kys7
CisgICAgICAgIEIzOjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1l
bnQoc3RhY2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFj
a09mZnNldCwgdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQjM6
OlZhbHVlUmVwIG1hcnNoYWxsQXJndW1lbnQoQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3Vt
ZW50Q291bnQsIHNpemVfdCYgZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQjM6Oklu
dDMyOgorICAgICAgICBjYXNlIEIzOjpJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFs
bEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZz
ZXQpOworICAgICAgICBjYXNlIEIzOjpGbG9hdDoKKyAgICAgICAgY2FzZSBCMzo6RG91YmxlOgor
ICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlwZSwg
ZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVz
LCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayogYmxvY2ssIEIzOjpPcmlnaW4g
b3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQjM6
OlZhbHVlKiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywg
QjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKTsKKworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENv
dW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNp
emVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmd1bWVudFR5cGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBCMzo6VHlw
ZSB0eXBlID0gdG9CM1R5cGUoYXJndW1lbnRUeXBlc1tpXSk7CisgICAgICAgICAgICBCMzo6VmFs
dWUqIGFyZ3VtZW50OworICAgICAgICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJn
dW1lbnQodHlwZSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmIChyZXAuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgb3JpZ2lu
LCByZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEIzOjpJbnQzMikKKyAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
cHJvYywgQjM6OlRydW5jLCBvcmlnaW4sIGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSG93IGRvIEkgZ2V0IGEgZmxvYXQgZnJvbSBhIEZQUj8gV2UgZG9uJ3Qgc3VwcG9ydCBm
bG9hdGluZyBwb2ludHMgeWV0IHNvIGl0J3Mgbm90IGEgYmlnIGRlYWwuLi4geWV0LgorICAgICAg
ICAgICAgICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2Mzc3MAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVw
LmlzU3RhY2tBcmd1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3Mg
PSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFt
ZVBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0
NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCByZXAub2Zmc2V0RnJvbVNQKCkpKTsKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBC
Mzo6TG9hZCwgdHlwZSwgb3JpZ2luLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZ1bmN0b3IoYXJndW1lbnQsIGkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSXQn
cyBleHBlY3RlZCB0aGF0IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdlbmVyYXRvciBm
b3IgdGhlIGNhbGwgb3BlcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgQjM6OlZhbHVlKiBzZXR1cENhbGwoQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6OkJhc2ljQmxv
Y2sqIGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgVmVjdG9yPEIzOjpWYWx1ZSo+JiBh
cmd1bWVudHMsIEIzOjpUeXBlIHJldHVyblR5cGUsIGNvbnN0IEZ1bmN0b3ImIHBhdGNocG9pbnRG
dW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7
CisgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3Rh
Y2tPZmZzZXQgPSBoZWFkZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAg
ICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRBcmd1bWVudHM7Cisg
ICAgICAgIGZvciAoQjM6OlZhbHVlKiBhcmd1bWVudCA6IGFyZ3VtZW50cykgeworICAgICAgICAg
ICAgQjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJndW1lbnQoYXJndW1lbnQtPnR5cGUoKSwg
Z3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAg
ICAgIGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShhcmd1
bWVudCwgcmVwKSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9jLnJlcXVlc3RDYWxsQXJnQXJl
YVNpemVJbkJ5dGVzKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIHN0YWNrT2Zmc2V0KSk7CisKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgcmV0dXJu
VHlwZSwgb3JpZ2luKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGNvbnN0cmFpbmVkQXJndW1lbnRzKTsKKyAgICAg
ICAgcGF0Y2hwb2ludEZ1bmN0b3IocGF0Y2hwb2ludCk7CisKKyAgICAgICAgaWYgKHJldHVyblR5
cGUgPT0gQjM6OlZvaWQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBw
YXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKKyAgICB9CisKKyAg
ICBjb25zdCBWZWN0b3I8UmVnPiBtX2dwckFyZ3M7CisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9m
cHJBcmdzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAg
ICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7Cit9OworCitpbmxpbmUg
dW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSkK
K3sKKyAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNpemVvZihSZWdpc3Rlcik7Cit9CisKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0YXRlOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwordHlwZWRlZiBDYWxsaW5nQ29udmVudGlvbjxq
c2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5nQ29udmVudGlvbjsKKwordHlw
ZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0NvbnZlbnRpb247CisKK2NvbnN0
IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlvbigpOworY29uc3QgV2Fz
bUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWI1YjFhZGQ5NzI4
ODc3NTg1ZjVkZWI3ZWRlZmNjYTBhMjNiYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0aGUgcmVwb3NpdG9yeSBhdXRob3JzIG9mCisg
KiBXZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUtMS4KKyAqCisgKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAq
ICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0Z1bmN0aW9uOworCituYW1lc3BhY2UgV2FzbSB7CisKK2Vu
dW0gVHlwZSA6IHVpbnQ4X3QgeworICAgIFZvaWQsCisgICAgSTMyLAorICAgIEk2NCwKKyAgICBG
MzIsCisgICAgRjY0LAorICAgIExhc3RWYWx1ZVR5cGUgPSBGNjQsCit9OworCitzdGF0aWNfYXNz
ZXJ0KEkzMiA9PSAxLCAiV2FzbSBuZWVkcyBJMzIgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOworc3Rh
dGljX2Fzc2VydChJNjQgPT0gMiwgIldhc20gbmVlZHMgSTY0IHRvIGhhdmUgdGhlIHZhbHVlIDIi
KTsKK3N0YXRpY19hc3NlcnQoRjMyID09IDMsICJXYXNtIG5lZWRzIEYzMiB0byBoYXZlIHRoZSB2
YWx1ZSAzIik7CitzdGF0aWNfYXNzZXJ0KEY2NCA9PSA0LCAiV2FzbSBuZWVkcyBGNjQgdG8gaGF2
ZSB0aGUgdmFsdWUgNCIpOworCitpbmxpbmUgQjM6OlR5cGUgdG9CM1R5cGUoVHlwZSB0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSTMyOiByZXR1cm4gQjM6OkludDMyOwor
ICAgIGNhc2UgSTY0OiByZXR1cm4gQjM6OkludDY0OworICAgIGNhc2UgRjMyOiByZXR1cm4gQjM6
OkZsb2F0OworICAgIGNhc2UgRjY0OiByZXR1cm4gQjM6OkRvdWJsZTsKKyAgICBjYXNlIFZvaWQ6
IHJldHVybiBCMzo6Vm9pZDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIGJvb2wgaXNWYWx1ZVR5cGUoVHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSTMyOgorICAgIGNhc2Ug
STY0OgorICAgIGNhc2UgRjMyOgorICAgIGNhc2UgRjY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisKK3N0cnVjdCBTaWduYXR1cmUgeworICAgIFR5cGUgcmV0dXJuVHlwZTsKKyAgICBWZWN0
b3I8VHlwZT4gYXJndW1lbnRzOworfTsKKworc3RydWN0IEZ1bmN0aW9uSW1wb3J0IHsKKyAgICBT
dHJpbmcgZnVuY3Rpb25OYW1lOworfTsKKworc3RydWN0IEZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
IHsKKyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICB1aW50MzJfdCBmdW5jdGlvbklt
cG9ydEluZGV4OworfTsKKworc3RydWN0IEZ1bmN0aW9uRGVjbGFyYXRpb24geworICAgIHVpbnQz
Ml90IHNpZ25hdHVyZUluZGV4OworfTsKKworc3RydWN0IEZ1bmN0aW9uUG9pbnRlclRhYmxlIHsK
KyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmN0
aW9uSW5kaWNlczsKKyAgICBWZWN0b3I8SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKK307CisKK3N0
cnVjdCBGdW5jdGlvbkluZm9ybWF0aW9uIHsKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZTsKKyAg
ICBzaXplX3Qgc3RhcnQ7CisgICAgc2l6ZV90IGVuZDsKK307CisKK3N0cnVjdCBVbmxpbmtlZENh
bGwgeworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbExvY2F0aW9uOworICAgIHNpemVfdCBmdW5j
dGlvbkluZGV4OworfTsKKworc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb24geworICAgIFZlY3Rv
cjxVbmxpbmtlZENhbGw+IHVubGlua2VkQ2FsbHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpD
b21waWxhdGlvbj4gY29kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBq
c0VudHJ5UG9pbnQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmNlN2UzOWJjZjhkNzY1Y2IyYmRhZjYx
MzhmMGIzYWJhMjEzZThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitlbnVt
IGNsYXNzIEJsb2NrVHlwZSB7CisgICAgSWYsCisgICAgQmxvY2ssCisgICAgTG9vcAorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2NsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGlj
IFBhcnNlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNz
aW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNv
bnRyb2xUeXBlIENvbnRyb2xUeXBlOworCisgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0
aW9uJiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOworCisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUJsb2NrKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHBy
ZXNzaW9uKE9wVHlwZSk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNo
YWJsZUV4cHJlc3Npb24oT3BUeXBlKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlm
eUNvbnRyb2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKKworICAg
IENvbnRleHQmIG1fY29udGV4dDsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhw
cmVzc2lvblN0YWNrOworICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7Cisg
ICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKKyAgICBjb25zdCBWZWN0b3I8RnVuY3Rp
b25JbmZvcm1hdGlvbj4mIG1fZnVuY3Rpb25zOworICAgIHVuc2lnbmVkIG1fdW5yZWFjaGFibGVC
bG9ja3MgeyAwIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBp
bmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKKyAgICA6
IFBhcnNlcihzb3VyY2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQorICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCisgICAgLCBtX3NpZ25hdHVyZSgqaW5mby5zaWduYXR1cmUpCisgICAgLCBt
X2Z1bmN0aW9ucyhmdW5jdGlvbnMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2dMbigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBlbmRp
bmcgYXQ6ICIsIGluZm8uZW5kKTsKKyAgICBtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0
dXJlLmFyZ3VtZW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpCit7CisgICAgdWludDMyX3QgbG9jYWxDb3Vu
dDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7
CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mTG9jYWxzOworICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKG51bWJlck9mTG9jYWxzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBUeXBlIHR5cGVPZkxvY2FsOworICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVP
ZkxvY2FsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2NvbnRleHQu
YWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcGFyc2VCbG9jaygpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCit7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgdWludDhfdCBvcDsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSB8fCAh
aXNWYWxpZE9wVHlwZShvcCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIFdURjo6ZGF0YUxvZ0xuKCJhdHRlbXB0ZWQgdG8gZGVjb2RlIGludmFsaWQgb3A6ICIs
IFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIs
IFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBtX3VucmVhY2hhYmxlQmxv
Y2tzLCAiKTogIiwgIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBh
dCBvZmZzZXQ6ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQp
KSk7CisgICAgICAgICAgICBtX2NvbnRleHQuZHVtcChtX2NvbnRyb2xTdGFjaywgbV9leHByZXNz
aW9uU3RhY2spOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6RW5kICYm
ICFtX2NvbnRyb2xTdGFjay5zaXplKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
ZiAobV91bnJlYWNoYWJsZUJsb2NrcykgeworICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVhY2hh
YmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8g
cHJvY2VzcyB1bnJlYWNoYWJsZSBvcDoiLCBvcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4cHJlc3Npb24o
c3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgLy8gSSdt
IG5vdCBzdXJlIGlmIHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJlLi4u
CisgICAgcmV0dXJuIHRydWU7Cit9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29w
KSBjYXNlIG5hbWU6CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQoreworICAgIHN3aXRj
aCAob3ApIHsKKyAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkgeworICAg
ICAgICBFeHByZXNzaW9uVHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7
CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFz
dCgpOworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250
ZXh0LmJpbmFyeU9wKHN0YXRpY19jYXN0PEJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdodCwg
cmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IEZPUl9FQUNIX1dBU01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpIHsKKyAgICAgICAgRXhwcmVzc2lv
blR5cGUgYXJnID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgRXhwcmVz
c2lvblR5cGUgcmVzdWx0OworICAgICAgICBpZiAoIW1fY29udGV4dC51bmFyeU9wKHN0YXRpY19j
YXN0PFVuYXJ5T3BUeXBlPihvcCksIGFyZywgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1Ao
Q1JFQVRFX0NBU0UpIHsKKyAgICAgICAgdWludDMyX3QgYWxpZ25tZW50OworICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGFsaWdubWVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgdWludDMyX3Qgb2Zmc2V0OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9m
ZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdDsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQubG9hZChzdGF0aWNfY2Fz
dDxMb2FkT3BUeXBlPihvcCksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZ
X1NUT1JFX09QKENSRUFURV9DQVNFKSB7CisgICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKKyAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhbGlnbm1lbnQpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEV4
cHJlc3Npb25UeXBlIHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7
CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+
KG9wKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6
OkkzMkNvbnN0OiB7CisgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OworICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGNvbnN0YW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIsIGNv
bnN0YW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgT3BUeXBl
OjpJNjRDb25zdDogeworICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKKyAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQ2NChjb25zdGFudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0LCBj
b25zdGFudCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlw
ZTo6R2V0TG9jYWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250ZXh0LmdldExvY2FsKGlu
ZGV4LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBjYXNlIE9wVHlwZTo6U2V0TG9jYWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7
CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG1fZXhwcmVzc2lvblN0YWNr
LnRha2VMYXN0KCk7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZh
bHVlKTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6Q2FsbDogeworICAgICAgICB1aW50MzJf
dCBmdW5jdGlvbkluZGV4OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5k
ZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChmdW5jdGlvbklu
ZGV4ID49IG1fZnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbZnVu
Y3Rpb25JbmRleF07CisKKyAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRh
a2VMYXN0KCkpOworCisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVt
cHR5RXhwcmVzc2lvbjsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5jdGlvbklu
ZGV4LCBpbmZvLCBhcmdzLCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQorICAgICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CisgICAgICAgIFR5cGUgaW5s
aW5lU2lnbmF0dXJlOworICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25hdHVy
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9jb250cm9sU3RhY2su
YXBwZW5kKG1fY29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKKyAgICAgICAgVHlw
ZSBpbmxpbmVTaWduYXR1cmU7CisgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2ln
bmF0dXJlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2NvbnRyb2xT
dGFjay5hcHBlbmQobV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgT3BUeXBlOjpJZjogeworICAgICAgICBU
eXBlIGlubGluZVNpZ25hdHVyZTsKKyAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxpbmVT
aWduYXR1cmUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAg
IG1fY29udHJvbFN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxpbmVT
aWduYXR1cmUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBPcFR5
cGU6OkVsc2U6IHsKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0
YWNrLmxhc3QoKSk7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OkJyOgorICAgIGNhc2UgT3BU
eXBlOjpCcklmOiB7CisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMih0YXJnZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOworICAgICAgICBpZiAob3AgPT0gT3BUeXBl
OjpCcklmKQorICAgICAgICAgICAgY29uZGl0aW9uID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxh
c3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7
CisKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xT
dGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XTsKKworICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFk
ZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICB9CisKKyAg
ICBjYXNlIE9wVHlwZTo6UmV0dXJuOiB7CisgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwg
MT4gcmV0dXJuVmFsdWVzOworICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSAhPSBW
b2lkKQorICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChtX2V4cHJlc3Npb25TdGFjay50
YWtlTGFzdCgpKTsKKworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAg
cmV0dXJuIG1fY29udGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKKyAgICB9CisKKyAgICBj
YXNlIE9wVHlwZTo6RW5kOiB7CisgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xT
dGFjay50YWtlTGFzdCgpOworICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEs
IG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFi
bGU6CisgICAgY2FzZSBPcFR5cGU6OlNlbGVjdDoKKyAgICBjYXNlIE9wVHlwZTo6QnJUYWJsZToK
KyAgICBjYXNlIE9wVHlwZTo6Tm9wOgorICAgIGNhc2UgT3BUeXBlOjpEcm9wOgorICAgIGNhc2Ug
T3BUeXBlOjpGMzJDb25zdDoKKyAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6CisgICAgY2FzZSBP
cFR5cGU6OlRlZUxvY2FsOgorICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6CisgICAgY2FzZSBP
cFR5cGU6OlNldEdsb2JhbDoKKyAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OgorICAgICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250ZXh0PgorYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJs
ZUV4cHJlc3Npb24oT3BUeXBlIG9wKQoreworICAgIEFTU0VSVChtX3VucmVhY2hhYmxlQmxvY2tz
KTsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKKyAgICAgICAg
aWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAg
ICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgbV91bnJl
YWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShkYXRh
KTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6RW5kOiB7CisgICAgICAgIGlmIChtX3VucmVh
Y2hhYmxlQmxvY2tzID09IDEpIHsKKyAgICAgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2Nv
bnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXNDb250
aW51YXRpb25SZWFjaGFibGUoZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6TG9vcDoKKyAgICBjYXNlIE9wVHlwZTo6
SWY6CisgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9j
a3MrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gdHdvIGltbWVkaWF0
ZSBjYXNlcworICAgIGNhc2UgT3BUeXBlOjpCcjoKKyAgICBjYXNlIE9wVHlwZTo6QnJJZjogewor
ICAgICAgICB1aW50MzJfdCB1bnVzZWQ7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodW51
c2VkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHBhcnNlVmFy
VUludDMyKHVudXNlZCk7CisgICAgfQorCisgICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcworICAg
IGNhc2UgT3BUeXBlOjpSZXR1cm46CisgICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OgorICAgIGNh
c2UgT3BUeXBlOjpTZXRMb2NhbDoKKyAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKKyAgICAg
ICAgdWludDMyX3QgdW51c2VkOworICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51c2Vk
KTsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKyN1bmRlZiBDUkVBVEVfQ0FTRQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2QxMzNhN2UyMDU1Y2VjOWQy
MWZhZGEwMDA4NzEwODg4MWRmMjMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK01lbW9yeTo6TWVtb3J5KHVpbnQzMl90IHN0
YXJ0aW5nU2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBp
bm5lZFNpemVSZWdpc3RlcnMpCisgICAgOiBtX21vZGUoTW9kZTo6Qm91bmRzQ2hlY2tpbmcpCisg
ICAgLCBtX3NpemUoc3RhcnRpbmdTaXplKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKKyAg
ICAvLyBGSVhNRTogSWYgd2UgYWRkIHNpZ25hbCBiYXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3
ZSBuZWVkIGV4dHJhIHNwYWNlIGZvciBvdmVyZmxvdyBvbiBsb2FkLgorICAgIC8vIHNlZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworICAgICwgbV9tYXBw
ZWRDYXBhY2l0eShzdGF0aWNfY2FzdDx1aW50NjRfdD4obWF4UGFnZUNvdW50KSAqIHN0YXRpY19j
YXN0PHVpbnQ2NF90PihwYWdlU2l6ZSkpCit7CisgICAgQVNTRVJUKHBpbm5lZFNpemVSZWdpc3Rl
cnMuc2l6ZSgpID4gMCk7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBo
YWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzNjAwCisgICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21h
cHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsK
KyAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgLy8gVHJ5IGFnYWluIHdp
dGggYSBkaWZmZXJlbnQgbnVtYmVyLgorICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gbV9jYXBh
Y2l0eTsKKyAgICAgICAgcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQ
Uk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICAgICAgaWYgKHJl
c3VsdCA9PSBNQVBfRkFJTEVEKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFT
U0VSVChzdGFydGluZ1NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgaWYgKG1wcm90ZWN0
KHJlc3VsdCwgc3RhcnRpbmdTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAg
ICBtdW5tYXAocmVzdWx0LCBtX21hcHBlZENhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHVuc2lnbmVkIHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyA9IHBpbm5lZFNpemVS
ZWdpc3RlcnMuc2l6ZSgpICsgMTsKKyAgICBqc2NDYWxsaW5nQ29udmVudGlvbigpLm1fY2FsbGVl
U2F2ZVJlZ2lzdGVycy5mb3JFYWNoKFsmXSAoUmVnIHJlZykgeworICAgICAgICBHUFJSZWcgZ3By
ID0gcmVnLmdwcigpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyB8fCBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyA9PSAxKSB7CisgICAgICAg
ICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5iYXNlTWVtb3J5UG9pbnRlciA9IGdwcjsKKyAgICAgICAg
ICAgIHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycy0tOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fcGlubmVkUmVnaXN0ZXJzLnNpemVSZWdpc3RlcnMuYXBwZW5kKHsgZ3ByLCBwaW5uZWRT
aXplUmVnaXN0ZXJzWy0tcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIC0gMV0gfSk7CisgICAgfSk7
CisKKyAgICBBU1NFUlQoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyk7CisgICAgbV9tZW1vcnkg
PSByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCit9IC8vIG5hbWVzcGFjZSBXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2IyMGEwNGMwNmQ2MWFhMGY4YzcyN2U0Y2QxYmZh
NDNiYzk0ZDVkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RydWN0
IFBpbm5lZFNpemVSZWdpc3RlckluZm8geworICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7CisgICAg
dW5zaWduZWQgc2l6ZU9mZnNldDsKK307CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBt
b3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLiBSaWdodCBub3cgd2UgdGFrZSBhIHZl
Y3RvciB3aXRoIG9ubHkgb25lCisvLyBlbnRyeS4gU3BlY2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJl
IHRoZSBzaXplT2Zmc2V0ID09IDAuIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lz
dGVyLAorLy8gd2UgY2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCitzdHJ1Y3QgUGlu
bmVkUmVnaXN0ZXJJbmZvIHsKKyAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6
ZVJlZ2lzdGVyczsKKyAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Cit9OworCitjb25zdGV4
cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOworY29uc3RleHByIHVpbnQzMl90IG1heFBh
Z2VDb3VudCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigoMXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7
CisKK2NsYXNzIE1lbW9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCisgICAgZW51bSBjbGFzcyBNb2RlIHsKKyAgICAgICAgQm91
bmRzQ2hlY2tpbmcKKyAgICB9OworCisgICAgTWVtb3J5KCkgPSBkZWZhdWx0OworICAgIE1lbW9y
eSh1aW50MzJfdCBzdGFydGluZ1NpemUsIHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8
dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVnaXN0ZXJzKTsKKworICAgIH5NZW1vcnkoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fbWVtb3J5KQorICAgICAgICAgICAgbXVubWFwKG1fbWVtb3J5LCBtX21h
cHBlZENhcGFjaXR5KTsKKyAgICB9CisKKyAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVy
biBtX21lbW9yeTsgfQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcGlubmVkUmVnaXN0ZXJzOyB9CisKKyAgICBNb2RlIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KKworICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fbWVtb3J5KTsKKyAgICAgICAgaWYgKG5ld1NpemUgPiBtX2Nh
cGFjaXR5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAhbXBy
b3RlY3QobV9tZW1vcnksIG5ld1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgIH0K
KworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBtX21l
bW9yeSB7IG51bGxwdHIgfTsKKyAgICBQaW5uZWRSZWdpc3RlckluZm8gbV9waW5uZWRSZWdpc3Rl
cnM7CisgICAgTW9kZSBtX21vZGU7CisgICAgdWludDMyX3QgbV9zaXplIHsgMCB9OworICAgIHVp
bnQzMl90IG1fY2FwYWNpdHkgeyAwIH07CisgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7
IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1MWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VlMDFiMGFhNTMzMDQ4OWNiZWNlODk4Y2M4MGRiNjEx
ZmExNDIwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ildhc21Nb2R1bGVQYXJzZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkpTV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJX
YXNtT3BzLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKKyNpbmNsdWRlIDxzeXMvbW1h
bi5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCit7Cisg
ICAgaWYgKG1fc291cmNlTGVuZ3RoIDwgOCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghY29uc3VtZUNoYXJhY3RlcigwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
Y29uc3VtZVN0cmluZygiYXNtIikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNr
aXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3QgZG8gYW55dGhpbmcg
d2l0aCBpdC4KKyAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOworICAgIGlmICghcGFyc2VVSW50
MzIodmVyc2lvbk51bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJz
aW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9jZXNzaW5nIGhlYWRl
ci4iKTsKKworICAgIFNlY3Rpb25zOjpTZWN0aW9uIHByZXZpb3VzU2VjdGlvbiA9IFNlY3Rpb25z
OjpVbmtub3duOworICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNlTGVuZ3RoKSB7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyB0byBwYXJz
ZSBuZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAiLCBtX29mZnNldCk7CisKKyAgICAgICAgdWludDhf
dCBzZWN0aW9uQnl0ZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2dMbigiU2VjdGlvbiBieXRlOiAiLCBzZWN0aW9uQnl0ZSk7CisKKyAgICAgICAg
U2VjdGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOworICAgICAgICBp
ZiAoc2VjdGlvbkJ5dGUpIHsKKyAgICAgICAgICAgIGlmIChzZWN0aW9uQnl0ZSA8IFNlY3Rpb25z
OjpVbmtub3duKQorICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0aW9u
czo6U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dWludDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUgc2VjdGlvbidz
IHNpemUuCisgICAgICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCArIFdU
Rjo6TEVCRGVjb2Rlcjo6bWF4MzJCaXRMRUJCeXRlTGVuZ3RoID49IG1fc291cmNlTGVuZ3RoKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
c3VwcG9ydCBhbnkgY3VzdG9tIHNlY3Rpb25zIHlldC4KKworICAgICAgICAgICAgbV9vZmZzZXQg
Kz0gc2VjdGlvbk5hbWVMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIVNlY3Rpb25z
Ojp2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25MZW5ndGg7
CisKKyAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CisKKyAgICAgICAgY2FzZSBTZWN0aW9uczo6
TWVtb3J5OiB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIlBhcnNpbmcgTWVtb3J5LiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBTZWN0aW9uczo6RnVuY3Rpb25UeXBlczogeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIHR5
cGVzLiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uVHlwZXMoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgU2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzaWduYXR1
cmVzLiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBTZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBk
ZWZpbml0aW9ucy4iKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25z
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIFNlY3Rpb25zOjpVbmtub3duOgorICAgICAgICAvLyBG
SVhNRTogRGVsZXRlIHRoaXMgd2hlbiB3ZSBzdXBwb3J0IGFsbCB0aGUgc2VjdGlvbnMuCisgICAg
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsKKyAgICAgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4o
IkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKKworICAgICAgICBpZiAoZW5kICE9IG1fb2Zm
c2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHByZXZpb3VzU2VjdGlv
biA9IHNlY3Rpb247CisgICAgfQorCisgICAgLy8gVE9ETworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQoreworICAgIHVpbnQ4X3QgZmxhZ3M7
CisgICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNpemUgPiBtYXhQYWdlQ291bnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50Owor
ICAgIGlmIChmbGFncykgeworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSB8
fCBjYXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKKyAgICBzaXplICo9IHBhZ2VTaXplOwor
CisgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OworICAgIG1fbWVtb3J5
ID0gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7
CisgICAgcmV0dXJuIG1fbWVtb3J5LT5tZW1vcnkoKTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlRnVuY3Rpb25UeXBlcygpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBjb3VudCk7CisKKyAgICBtX3Np
Z25hdHVyZXMucmVzaXplKGNvdW50KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgIHVpbnQ4X3QgdHlwZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJ
bnQ3KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZSAh
PSAweDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJHb3Qg
ZnVuY3Rpb24gdHlwZS4iKTsKKworICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50OworICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xu
KCJhcmd1bWVudENvdW50OiAiLCBhcmd1bWVudENvdW50KTsKKworICAgICAgICBWZWN0b3I8VHlw
ZT4gYXJndW1lbnRUeXBlczsKKyAgICAgICAgYXJndW1lbnRUeXBlcy5yZXNpemUoYXJndW1lbnRD
b3VudCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8ICFpc1ZhbHVlVHlw
ZShzdGF0aWNfY2FzdDxUeXBlPih0eXBlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19jYXN0PFR5cGU+KHR5cGUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHR5cGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBUeXBlIHJldHVyblR5cGU7CisKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7CisKKyAgICAgICAgaWYg
KHR5cGUpIHsKKyAgICAgICAgICAgIFR5cGUgdmFsdWU7CisgICAgICAgICAgICBpZiAoIXBhcnNl
VmFsdWVUeXBlKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworCisgICAgICAgIG1fc2ln
bmF0dXJlc1tpXSA9IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9OworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25TaWduYXR1cmVzKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFy
VUludDMyKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9mdW5jdGlvbnMu
cmVzaXplKGNvdW50KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CisgICAgICAgIGlmICghcGFyc2VWYXJV
SW50MzIodHlwZU51bWJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKHR5cGVOdW1iZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBtX2Z1bmN0aW9uc1tpXS5zaWduYXR1cmUgPSAmbV9zaWduYXR1
cmVzW3R5cGVOdW1iZXJdOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkKK3sKKyAgICB1aW50MzJfdCBj
b3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGNvdW50ICE9IG1fZnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGZ1bmN0aW9uU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
RnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1fZnVuY3Rpb25zW2ldOworICAgICAgICBpbmZv
LnN0YXJ0ID0gbV9vZmZzZXQ7CisgICAgICAgIGluZm8uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlv
blNpemU7CisgICAgICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQwZDVhNjNiNGJlODBkMTFlMGM0ZTk4YTk1ZmE0ZmZjMjc5
NDcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2lu
Y2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQ
YXJzZXIgeworcHVibGljOgorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hZ2ljTnVtYmVy
ID0gMHhjOworCisgICAgTW9kdWxlUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNl
QnVmZmVyKQorICAgICAgICA6IFBhcnNlcihzb3VyY2VCdWZmZXIsIDAsIHNvdXJjZUJ1ZmZlci5z
aXplKCkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
KCk7CisKKyAgICBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9uSW5m
b3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZW1vcnk+JiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeTsgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5KCk7CisgICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvblR5cGVzKCk7CisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VGdW5jdGlvblNpZ25hdHVyZXMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbih1aW50MzJfdCBudW1iZXIpOworCisgICAg
VmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+IG1fZnVuY3Rpb25zOworICAgIFZlY3RvcjxTaWdu
YXR1cmU+IG1fc2lnbmF0dXJlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX21lbW9y
eTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3BzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2NkOWVlNzBjYWU1M2Q3NWZkZWI5MTkzMGQ4OWQzYzA3OGM3N2ZhZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcHMuaApAQCAtMCwwICsxLDI0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMg
ZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCB1c2luZyB3YXNtLmpzb24uCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSA8Y3N0ZGludD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NQRUNJ
QUxfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJDb25zdCwgMHgxMCwgT29wcykgXAorICAgIG1h
Y3JvKEk2NENvbnN0LCAweDExLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0Q29uc3QsIDB4MTIsIE9v
cHMpIFwKKyAgICBtYWNybyhGMzJDb25zdCwgMHgxMywgT29wcykgXAorICAgIG1hY3JvKEdldExv
Y2FsLCAweDE0LCBPb3BzKSBcCisgICAgbWFjcm8oU2V0TG9jYWwsIDB4MTUsIE9vcHMpIFwKKyAg
ICBtYWNybyhUZWVMb2NhbCwgMHgxOSwgT29wcykgXAorICAgIG1hY3JvKEdldEdsb2JhbCwgMHhi
YiwgT29wcykgXAorICAgIG1hY3JvKFNldEdsb2JhbCwgMHhiYywgT29wcykgXAorICAgIG1hY3Jv
KENhbGwsIDB4MTYsIE9vcHMpIFwKKyAgICBtYWNybyhDYWxsSW5kaXJlY3QsIDB4MTcsIE9vcHMp
CisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AobWFjcm8pIFwKKyAgICBt
YWNybyhVbnJlYWNoYWJsZSwgMHgwLCBPb3BzKSBcCisgICAgbWFjcm8oQmxvY2ssIDB4MSwgT29w
cykgXAorICAgIG1hY3JvKExvb3AsIDB4MiwgT29wcykgXAorICAgIG1hY3JvKElmLCAweDMsIE9v
cHMpIFwKKyAgICBtYWNybyhFbHNlLCAweDQsIE9vcHMpIFwKKyAgICBtYWNybyhTZWxlY3QsIDB4
NSwgT29wcykgXAorICAgIG1hY3JvKEJyLCAweDYsIE9vcHMpIFwKKyAgICBtYWNybyhCcklmLCAw
eDcsIE9vcHMpIFwKKyAgICBtYWNybyhCclRhYmxlLCAweDgsIE9vcHMpIFwKKyAgICBtYWNybyhS
ZXR1cm4sIDB4OSwgT29wcykgXAorICAgIG1hY3JvKERyb3AsIDB4YiwgT29wcykgXAorICAgIG1h
Y3JvKE5vcCwgMHhhLCBPb3BzKSBcCisgICAgbWFjcm8oRW5kLCAweGYsIE9vcHMpCisKKyNkZWZp
bmUgRk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChtYWNybykgXAorICAgIG1hY3JvKEkzMkNseiwgMHg1
NywgQ2x6KSBcCisgICAgbWFjcm8oSTMyQ3R6LCAweDU4LCBPb3BzKSBcCisgICAgbWFjcm8oSTMy
UG9wY250LCAweDU5LCBPb3BzKSBcCisgICAgbWFjcm8oSTY0Q2x6LCAweDcyLCBDbHopIFwKKyAg
ICBtYWNybyhJNjRDdHosIDB4NzMsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRQb3BjbnQsIDB4NzQs
IE9vcHMpIFwKKyAgICBtYWNybyhGMzJBYnMsIDB4N2IsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJO
ZWcsIDB4N2MsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJDb3B5c2lnbiwgMHg3ZCwgT29wcykgXAor
ICAgIG1hY3JvKEYzMkNlaWwsIDB4N2UsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJGbG9vciwgMHg3
ZiwgT29wcykgXAorICAgIG1hY3JvKEYzMlRydW5jLCAweDgwLCBPb3BzKSBcCisgICAgbWFjcm8o
RjMyTmVhcmVzdCwgMHg4MSwgT29wcykgXAorICAgIG1hY3JvKEYzMlNxcnQsIDB4ODIsIE9vcHMp
IFwKKyAgICBtYWNybyhGNjRBYnMsIDB4OGYsIE9vcHMpIFwKKyAgICBtYWNybyhGNjROZWcsIDB4
OTAsIE9vcHMpIFwKKyAgICBtYWNybyhGNjRDb3B5c2lnbiwgMHg5MSwgT29wcykgXAorICAgIG1h
Y3JvKEY2NENlaWwsIDB4OTIsIE9vcHMpIFwKKyAgICBtYWNybyhGNjRGbG9vciwgMHg5MywgT29w
cykgXAorICAgIG1hY3JvKEY2NFRydW5jLCAweDk0LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TmVh
cmVzdCwgMHg5NSwgT29wcykgXAorICAgIG1hY3JvKEY2NFNxcnQsIDB4OTYsIE9vcHMpCisKKyNk
ZWZpbmUgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJBZGQs
IDB4NDAsIEFkZCkgXAorICAgIG1hY3JvKEkzMlN1YiwgMHg0MSwgU3ViKSBcCisgICAgbWFjcm8o
STMyTXVsLCAweDQyLCBNdWwpIFwKKyAgICBtYWNybyhJMzJEaXZTLCAweDQzLCBEaXYpIFwKKyAg
ICBtYWNybyhJMzJEaXZVLCAweDQ0LCBPb3BzKSBcCisgICAgbWFjcm8oSTMyUmVtUywgMHg0NSwg
TW9kKSBcCisgICAgbWFjcm8oSTMyUmVtVSwgMHg0NiwgT29wcykgXAorICAgIG1hY3JvKEkzMkFu
ZCwgMHg0NywgQml0QW5kKSBcCisgICAgbWFjcm8oSTMyT3IsIDB4NDgsIEJpdE9yKSBcCisgICAg
bWFjcm8oSTMyWG9yLCAweDQ5LCBCaXRYb3IpIFwKKyAgICBtYWNybyhJMzJTaGwsIDB4NGEsIFNo
bCkgXAorICAgIG1hY3JvKEkzMlNoclUsIDB4NGIsIFNTaHIpIFwKKyAgICBtYWNybyhJMzJTaHJT
LCAweDRjLCBaU2hyKSBcCisgICAgbWFjcm8oSTMyUm90ciwgMHhiNiwgT29wcykgXAorICAgIG1h
Y3JvKEkzMlJvdGwsIDB4YjcsIE9vcHMpIFwKKyAgICBtYWNybyhJMzJFcSwgMHg0ZCwgRXF1YWwp
IFwKKyAgICBtYWNybyhJMzJOZSwgMHg0ZSwgTm90RXF1YWwpIFwKKyAgICBtYWNybyhJMzJMdFMs
IDB4NGYsIExlc3NUaGFuKSBcCisgICAgbWFjcm8oSTMyTGVTLCAweDUwLCBMZXNzRXF1YWwpIFwK
KyAgICBtYWNybyhJMzJMdFUsIDB4NTEsIEJlbG93KSBcCisgICAgbWFjcm8oSTMyTGVVLCAweDUy
LCBCZWxvd0VxdWFsKSBcCisgICAgbWFjcm8oSTMyR3RTLCAweDUzLCBHcmVhdGVyVGhhbikgXAor
ICAgIG1hY3JvKEkzMkdlUywgMHg1NCwgR3JlYXRlckVxdWFsKSBcCisgICAgbWFjcm8oSTMyR3RV
LCAweDU1LCBBYm92ZSkgXAorICAgIG1hY3JvKEkzMkdlVSwgMHg1NiwgQWJvdmVFcXVhbCkgXAor
ICAgIG1hY3JvKEk2NEFkZCwgMHg1YiwgQWRkKSBcCisgICAgbWFjcm8oSTY0U3ViLCAweDVjLCBT
dWIpIFwKKyAgICBtYWNybyhJNjRNdWwsIDB4NWQsIE11bCkgXAorICAgIG1hY3JvKEk2NERpdlMs
IDB4NWUsIERpdikgXAorICAgIG1hY3JvKEk2NERpdlUsIDB4NWYsIE9vcHMpIFwKKyAgICBtYWNy
byhJNjRSZW1TLCAweDYwLCBNb2QpIFwKKyAgICBtYWNybyhJNjRSZW1VLCAweDYxLCBPb3BzKSBc
CisgICAgbWFjcm8oSTY0QW5kLCAweDYyLCBCaXRBbmQpIFwKKyAgICBtYWNybyhJNjRPciwgMHg2
MywgQml0T3IpIFwKKyAgICBtYWNybyhJNjRYb3IsIDB4NjQsIEJpdFhvcikgXAorICAgIG1hY3Jv
KEk2NFNobCwgMHg2NSwgU2hsKSBcCisgICAgbWFjcm8oSTY0U2hyVSwgMHg2NiwgU1NocikgXAor
ICAgIG1hY3JvKEk2NFNoclMsIDB4NjcsIFpTaHIpIFwKKyAgICBtYWNybyhJNjRSb3RyLCAweGI4
LCBPb3BzKSBcCisgICAgbWFjcm8oSTY0Um90bCwgMHhiOSwgT29wcykgXAorICAgIG1hY3JvKEk2
NEVxLCAweDY4LCBFcXVhbCkgXAorICAgIG1hY3JvKEk2NE5lLCAweDY5LCBOb3RFcXVhbCkgXAor
ICAgIG1hY3JvKEk2NEx0UywgMHg2YSwgTGVzc1RoYW4pIFwKKyAgICBtYWNybyhJNjRMZVMsIDB4
NmIsIExlc3NFcXVhbCkgXAorICAgIG1hY3JvKEk2NEx0VSwgMHg2YywgQmVsb3cpIFwKKyAgICBt
YWNybyhJNjRMZVUsIDB4NmQsIEJlbG93RXF1YWwpIFwKKyAgICBtYWNybyhJNjRHdFMsIDB4NmUs
IEdyZWF0ZXJUaGFuKSBcCisgICAgbWFjcm8oSTY0R2VTLCAweDZmLCBHcmVhdGVyRXF1YWwpIFwK
KyAgICBtYWNybyhJNjRHdFUsIDB4NzAsIEFib3ZlKSBcCisgICAgbWFjcm8oSTY0R2VVLCAweDcx
LCBBYm92ZUVxdWFsKSBcCisgICAgbWFjcm8oRjMyQWRkLCAweDc1LCBPb3BzKSBcCisgICAgbWFj
cm8oRjMyU3ViLCAweDc2LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTXVsLCAweDc3LCBPb3BzKSBc
CisgICAgbWFjcm8oRjMyRGl2LCAweDc4LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTWluLCAweDc5
LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTWF4LCAweDdhLCBPb3BzKSBcCisgICAgbWFjcm8oRjMy
RXEsIDB4ODMsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJOZSwgMHg4NCwgT29wcykgXAorICAgIG1h
Y3JvKEYzMkx0LCAweDg1LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTGUsIDB4ODYsIE9vcHMpIFwK
KyAgICBtYWNybyhGMzJHdCwgMHg4NywgT29wcykgXAorICAgIG1hY3JvKEYzMkdlLCAweDg4LCBP
b3BzKSBcCisgICAgbWFjcm8oRjY0QWRkLCAweDg5LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0U3Vi
LCAweDhhLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TXVsLCAweDhiLCBPb3BzKSBcCisgICAgbWFj
cm8oRjY0RGl2LCAweDhjLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TWluLCAweDhkLCBPb3BzKSBc
CisgICAgbWFjcm8oRjY0TWF4LCAweDhlLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0RXEsIDB4OTcs
IE9vcHMpIFwKKyAgICBtYWNybyhGNjROZSwgMHg5OCwgT29wcykgXAorICAgIG1hY3JvKEY2NEx0
LCAweDk5LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TGUsIDB4OWEsIE9vcHMpIFwKKyAgICBtYWNy
byhGNjRHdCwgMHg5YiwgT29wcykgXAorICAgIG1hY3JvKEY2NEdlLCAweDljLCBPb3BzKQorCisj
ZGVmaW5lIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJ
MzJMb2FkOFMsIDB4MjAsIE9vcHMpIFwKKyAgICBtYWNybyhJMzJMb2FkOFUsIDB4MjEsIE9vcHMp
IFwKKyAgICBtYWNybyhJMzJMb2FkMTZTLCAweDIyLCBPb3BzKSBcCisgICAgbWFjcm8oSTMyTG9h
ZDE2VSwgMHgyMywgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQ4UywgMHgyNCwgT29wcykgXAor
ICAgIG1hY3JvKEk2NExvYWQ4VSwgMHgyNSwgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQxNlMs
IDB4MjYsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRMb2FkMTZVLCAweDI3LCBPb3BzKSBcCisgICAg
bWFjcm8oSTY0TG9hZDMyUywgMHgyOCwgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQzMlUsIDB4
MjksIE9vcHMpIFwKKyAgICBtYWNybyhJMzJMb2FkLCAweDJhLCBPb3BzKSBcCisgICAgbWFjcm8o
STY0TG9hZCwgMHgyYiwgT29wcykgXAorICAgIG1hY3JvKEYzMkxvYWQsIDB4MmMsIE9vcHMpIFwK
KyAgICBtYWNybyhGNjRMb2FkLCAweDJkLCBPb3BzKQorCisjZGVmaW5lIEZPUl9FQUNIX1dBU01f
TUVNT1JZX1NUT1JFX09QKG1hY3JvKSBcCisgICAgbWFjcm8oSTMyU3RvcmU4LCAweDJlLCBPb3Bz
KSBcCisgICAgbWFjcm8oSTMyU3RvcmUxNiwgMHgyZiwgT29wcykgXAorICAgIG1hY3JvKEk2NFN0
b3JlOCwgMHgzMCwgT29wcykgXAorICAgIG1hY3JvKEk2NFN0b3JlMTYsIDB4MzEsIE9vcHMpIFwK
KyAgICBtYWNybyhJNjRTdG9yZTMyLCAweDMyLCBPb3BzKSBcCisgICAgbWFjcm8oSTMyU3RvcmUs
IDB4MzMsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRTdG9yZSwgMHgzNCwgT29wcykgXAorICAgIG1h
Y3JvKEYzMlN0b3JlLCAweDM1LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0U3RvcmUsIDB4MzYsIE9v
cHMpCisKKworCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fT1AobWFjcm8pIFwKKyAgICBGT1JfRUFD
SF9XQVNNX1NQRUNJQUxfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxP
V19PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fVU5BUllfT1AobWFjcm8pIFwKKyAgICBG
T1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZ
X0xPQURfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChtYWNy
bykKKworI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgYjNvcCkgbmFtZSA9IGlk
LAorCitlbnVtIE9wVHlwZSA6IHVpbnQ4X3QgeworICAgIEZPUl9FQUNIX1dBU01fT1AoQ1JFQVRF
X0VOVU1fVkFMVUUpCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CitpbmxpbmUgYm9vbCBp
c1ZhbGlkT3BUeXBlKEludCBpKQoreworICAgIC8vIEJpdHNldCBvZiB2YWxpZCBvcHMuCisgICAg
c3RhdGljIGNvbnN0IHVpbnQ4X3QgdmFsaWRbXSA9IHsgMHhmZiwgMHg4ZiwgMHhmZiwgMHgyLCAw
eGZmLCAweGZmLCAweDdmLCAweGEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYs
IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4
MWYgfTsKKyAgICByZXR1cm4gMCA8PSBpICYmIGkgPD0gMTg4ICYmICh2YWxpZFtpIC8gOF0gJiAo
MSA8PCAoaSAlIDgpKSk7Cit9CisKK2VudW0gY2xhc3MgQmluYXJ5T3BUeXBlIDogdWludDhfdCB7
CisgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0VOVU1fVkFMVUUpCit9OworCitl
bnVtIGNsYXNzIFVuYXJ5T3BUeXBlIDogdWludDhfdCB7CisgICAgRk9SX0VBQ0hfV0FTTV9VTkFS
WV9PUChDUkVBVEVfRU5VTV9WQUxVRSkKK307CisKK2VudW0gY2xhc3MgTG9hZE9wVHlwZSA6IHVp
bnQ4X3QgeworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0VOVU1fVkFM
VUUpCit9OworCitlbnVtIGNsYXNzIFN0b3JlT3BUeXBlIDogdWludDhfdCB7CisgICAgRk9SX0VB
Q0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0VOVU1fVkFMVUUpCit9OworCisjdW5kZWYg
Q1JFQVRFX0VOVU1fVkFMVUUKKworaW5saW5lIGJvb2wgaXNDb250cm9sT3AoT3BUeXBlIG9wKQor
eworICAgIHN3aXRjaCAob3ApIHsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3Ap
IGNhc2UgT3BUeXBlOjpuYW1lOgorICAgIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKENS
RUFURV9DQVNFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyN1bmRlZiBDUkVBVEVfQ0FTRQorICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
NDgxMzRkNjYxNmNhNzllNzE5N2RlOTY1YzNjYjE3MTBhZjIyNTIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC0wLDAgKzEsMTMz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgorI2luY2x1
ZGUgPHd0Zi9MRUJEZWNvZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK2NsYXNzIFBhcnNlciB7Citwcm90ZWN0ZWQ6CisgICAgUGFyc2VyKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCk7CisKKyAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBjb25zdW1lQ2hhcmFjdGVyKGNoYXIpOworICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciopOworCisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVy
biBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3NvdXJjZS5kYXRhKCksIG1fc291cmNl
TGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rl
cjo6ZGVjb2RlVUludDY0KG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0
LCByZXN1bHQpOyB9CisKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVU
eXBlKFR5cGUmIHJlc3VsdCk7CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1fc291cmNl
OworICAgIHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKKyAgICBzaXplX3QgbV9vZmZzZXQ7Cit9Owor
CitBTFdBWVNfSU5MSU5FIFBhcnNlcjo6UGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291
cmNlQnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCisgICAgOiBtX3NvdXJjZShzb3Vy
Y2VCdWZmZXIpCisgICAgLCBtX3NvdXJjZUxlbmd0aChlbmQpCisgICAgLCBtX29mZnNldChzdGFy
dCkKK3sKKyAgICBBU1NFUlQoZW5kIDw9IHNvdXJjZUJ1ZmZlci5zaXplKCkpOworICAgIEFTU0VS
VChzdGFydCA8IGVuZCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVD
aGFyYWN0ZXIoY2hhciBjKQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjID09IG1fc291cmNlW21fb2Zmc2V0XSkg
eworICAgICAgICBtX29mZnNldCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3Ry
aW5nKGNvbnN0IGNoYXIqIHN0cikKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0Owor
ICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHN0cltpXTsgaSsrKSB7CisgICAgICAgIGlmICgh
Y29uc3VtZUNoYXJhY3RlcihzdHJbaV0pKSB7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50
MzJfdCYgcmVzdWx0KQoreworICAgIGlmIChtX3NvdXJjZUxlbmd0aCA8IDQgfHwgbV9vZmZzZXQg
Pj0gbV9zb3VyY2VMZW5ndGggLSA0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihtX3NvdXJjZS5kYXRhKCkgKyBt
X29mZnNldCk7CisgICAgbV9vZmZzZXQgKz0gNDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpCit7Cisg
ICAgaWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmVzdWx0ID0gbV9zb3VyY2VbbV9vZmZzZXQrK107CisgICAgcmV0dXJuIHJlc3VsdCA8
IDB4ODA7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDEodWlu
dDhfdCYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IHRlbXA7CisgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMih0ZW1wKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHRlbXApOworICAgIHJldHVybiB0ZW1wIDw9IDE7Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCkKK3sKKyAgICB1
aW50OF90IHZhbHVlOworICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVHlwZTo6TGFz
dFZhbHVlVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxUeXBlPih2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmEwZmEzZmY0NDExNGM1YTdi
ZDZhNjc3YjU1ZGQ1MTVjNzJiOGJmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21QbGFuLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNs
dWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2Vy
LmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitQbGFuOjpQ
bGFuKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKK3sKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOworICAgIE1vZHVsZVBhcnNlciBt
b2R1bGVQYXJzZXIoc291cmNlKTsKKyAgICBpZiAoIW1vZHVsZVBhcnNlci5wYXJzZSgpKSB7Cisg
ICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkLiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigiUGFyc2Vk
IG1vZHVsZS4iKTsKKworICAgIGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6
IG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpIHsKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgZnVuY2lvbiBzdGFydGluZyBh
dDogIiwgaW5mby5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBpbmZvLmVuZCk7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQocGFyc2VBbmRDb21waWxlKHZtLCBzb3VyY2UsIG1vZHVsZVBhcnNlci5t
ZW1vcnkoKS5nZXQoKSwgaW5mbywgbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkp
OworICAgIH0KKworICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9u
LgorICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlv
blB0ciA6IHJlc3VsdCkgeworICAgICAgICBGdW5jdGlvbkNvbXBpbGF0aW9uKiBmdW5jdGlvbiA9
IGZ1bmN0aW9uUHRyLmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBmdW5jdGlvbi0+
dW5saW5rZWRDYWxscykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChj
YWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0W2NhbGwuZnVuY3Rpb25J
bmRleF0tPmNvZGUtPmNvZGUoKSkpOworICAgIH0KKworICAgIG1lbW9yeSA9IFdURk1vdmUobW9k
dWxlUGFyc2VyLm1lbW9yeSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZlZDEzNmFiMWJlMzU1ZjgyZjk3OTIxMGY3YjlmZmM3N2E4MzAy
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewor
Y2xhc3MgTWVtb3J5OworCisvLyBUT0RPOiBUaGlzIHNob3VsZCBjcmVhdGUgYSBXYXNtIE1vZHVs
ZSBub3QgYSBsaXN0IG9mIGZ1bmN0aW9ucy4KK2NsYXNzIFBsYW4geworcHVibGljOgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4gc291cmNlKTsKKworICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4+IHJlc3VsdDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtZW1vcnk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjU3ODY3MjEwYTEwYmY2
OTIyMzQxYzBhNzZjM2MyNTAxOWE4NGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewor
CitzdHJ1Y3QgU2VjdGlvbnMgeworICAgIGVudW0gU2VjdGlvbiA6IHVpbnQ4X3QgeworICAgICAg
ICBGdW5jdGlvblR5cGVzID0gMSwKKyAgICAgICAgU2lnbmF0dXJlcyA9IDMsCisgICAgICAgIE1l
bW9yeSA9IDUsCisgICAgICAgIERlZmluaXRpb25zID0gMTAsCisgICAgICAgIFVua25vd24KKyAg
ICB9OworICAgIHN0YXRpYyBib29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2Vj
dGlvbiBuZXh0KQorICAgIHsKKyAgICAgICAgaWYgKHByZXZpb3VzID09IFVua25vd24pCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKKyAg
ICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292377</attachid>
            <date>2016-10-21 10:59:42 -0700</date>
            <delta_ts>2016-10-21 12:17:07 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-163796-20161021105602.patch</filename>
            <type>text/plain</type>
            <size>376658</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YzExNjRmNDQxNmRlYTNiYTFjNGQzZTcwMWY1MWQ0ZWQxNWU5OGIxLi4zZTFjM2E1MjUwNGYyMzAy
M2ZlOWRiM2E3MTg3MDIxNTNjYTcwNGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTggQEAKKzIwMTYtMTAtMjEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFdBU00gdG8gV2FzbQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNzk2CisKKyAgICAgICAgUnViYmVyIHN0
YW1wZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9Ub29sRXhlY3V0YWJsZS54Y2NvbmZpZzoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxsaW50
L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6dm1FbnRyeVRvV2FzbSk6CisgICAgICAg
IChKU0M6OnZtRW50cnlUb1dBU00pOiBEZWxldGVkLgorICAgICAgICAqIGxsaW50L0xMSW50VGh1
bmtzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAq
IHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHNoZWxsL0NNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIHRlc3RXQVNNLmNwcDoKKyAgICAgICAgKHJ1bldBU01UZXN0cyk6IERlbGV0ZWQu
CisgICAgICAgICogdGVzdFdhc20uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RXQVNNLmNwcC4KKyAgICAgICAgKENvbW1hbmRMaW5lOjpDb21tYW5kTGluZSk6Cisg
ICAgICAgIChwcmludFVzYWdlU3RhdGVtZW50KToKKyAgICAgICAgKENvbW1hbmRMaW5lOjpwYXJz
ZUFyZ3VtZW50cyk6CisgICAgICAgIChydW5MRUJUZXN0cyk6CisgICAgICAgIChpbnZva2UpOgor
ICAgICAgICAoYm94KToKKyAgICAgICAgKHJ1bldhc21UZXN0cyk6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV0FTTU1v
ZHVsZTo6SlNXQVNNTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxl
OjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjp2aXNpdENo
aWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5oOgorICAgICAg
ICAoSlNDOjpKU1dBU01Nb2R1bGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
V0FTTU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
QVNNTW9kdWxlOjppMzJDb25zdGFudHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dBU01N
b2R1bGU6OmYzMkNvbnN0YW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVs
ZTo6ZjY0Q29uc3RhbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpz
aWduYXR1cmVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlv
bkltcG9ydHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9u
SW1wb3J0U2lnbmF0dXJlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6
Z2xvYmFsVmFyaWFibGVUeXBlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVs
ZTo6ZnVuY3Rpb25EZWNsYXJhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dBU01N
b2R1bGU6OmZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
V0FTTU1vZHVsZTo6YXJyYXlCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dBU01N
b2R1bGU6OmZ1bmN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6
ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
V0FTTU1vZHVsZTo6ZnVuY3Rpb25TdGFja0hlaWdodHMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU1dBU01Nb2R1bGU6Omdsb2JhbFZhcmlhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTV0FTTU1vZHVsZTo6aW1wb3J0ZWRGdW5jdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIHdh
c20vSlNXYXNtTW9kdWxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL0pTV0FTTU1vZHVsZS5jcHAuCisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6SlNXYXNt
TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpkZXN0cm95KToKKyAgICAgICAg
KEpTQzo6SlNXYXNtTW9kdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL0pTV2Fz
bU1vZHVsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNN
TW9kdWxlLmguCisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNXYXNtTW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU1dh
c21Nb2R1bGU6OmkzMkNvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6ZjMy
Q29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpmNjRDb25zdGFudHMpOgor
ICAgICAgICAoSlNDOjpKU1dhc21Nb2R1bGU6OnNpZ25hdHVyZXMpOgorICAgICAgICAoSlNDOjpK
U1dhc21Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0cyk6CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVs
ZTo6ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxl
OjpnbG9iYWxWYXJpYWJsZVR5cGVzKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjpmdW5j
dGlvbkRlY2xhcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6ZnVuY3Rpb25Q
b2ludGVyVGFibGVzKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxlOjphcnJheUJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkpTV2FzbU1vZHVsZTo6ZnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
SlNXYXNtTW9kdWxlOjpmdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlKToKKyAgICAgICAgKEpT
Qzo6SlNXYXNtTW9kdWxlOjpmdW5jdGlvblN0YWNrSGVpZ2h0cyk6CisgICAgICAgIChKU0M6OkpT
V2FzbU1vZHVsZTo6Z2xvYmFsVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6SlNXYXNtTW9kdWxl
OjppbXBvcnRlZEZ1bmN0aW9ucyk6CisgICAgICAgICogd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OldBU006OmNyZWF0ZUpTV3JhcHBlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU006OnBhcnNlQW5kQ29tcGlsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwOgorICAgICAgICAoSlNDOjpXQVNNOjpqc2NDYWxs
aW5nQ29udmVudGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006Ondhc21DYWxsaW5n
Q29udmVudGlvbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRp
b24uaDoKKyAgICAgICAgKEpTQzo6V0FTTTo6Q2FsbGluZ0NvbnZlbnRpb246OkNhbGxpbmdDb252
ZW50aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6Q2FsbGluZ0NvbnZlbnRpb246
Om1hcnNoYWxsQXJndW1lbnRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6Q2Fs
bGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNOjpDYWxsaW5nQ29udmVudGlvbjo6bG9hZEFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU006OkNhbGxpbmdDb252ZW50aW9uOjpzZXR1cENhbGwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXQVNNOjpuZXh0SlNDT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3
YXNtL1dBU01Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V0FTTTo6dG9CM1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNOjppc1ZhbHVlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQmxvY2spOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHBy
ZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
YXNtL1dBU01NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6Ok1lbW9yeSk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNTWVtb3J5Lmg6CisgICAgICAgIChKU0M6OldB
U006Ok1lbW9yeTo6fk1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006Ok1lbW9y
eTo6bWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6TWVtb3J5OjpzaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6TWVtb3J5OjpwaW5uZWRSZWdpc3RlcnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6Om1vZGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNOjpNZW1vcnk6Omdyb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
QVNNOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxlUGFyc2VyOjpwYXJz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006Ok1vZHVsZVBhcnNlcjo6cGFyc2VNZW1v
cnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVu
Y3Rpb25UeXBlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006Ok1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvblNpZ25hdHVyZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpN
b2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6CisgICAgICAgIChKU0M6OldBU006Ok1vZHVsZVBh
cnNlcjo6TW9kdWxlUGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxl
UGFyc2VyOjpmdW5jdGlvbkluZm9ybWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TTo6TW9kdWxlUGFyc2VyOjptZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTU9w
cy5oOgorICAgICAgICAoSlNDOjpXQVNNOjppc1ZhbGlkT3BUeXBlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTTo6aXNDb250cm9sT3ApOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV0FT
TVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXQVNNOjpQYXJzZXI6OnBhcnNlVmFyVUludDMyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpwYXJzZVZhclVJbnQ2NCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6UGFyc2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpjb25zdW1lQ2hhcmFjdGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpjb25zdW1lU3RyaW5nKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpwYXJzZVVJbnQzMik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU006OlBhcnNlcjo6cGFyc2VVSW50Nyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldB
U006OlBhcnNlcjo6cGFyc2VWYXJVSW50MSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU006
OlBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTVBs
YW4uY3BwOgorICAgICAgICAoSlNDOjpXQVNNOjpQbGFuOjpQbGFuKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL1dBU01TZWN0aW9ucy5oOgorICAgICAgICAoSlNDOjpXQVNNOjpTZWN0aW9uczo6
dmFsaWRhdGVPcmRlcik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdl
bmVyYXRvci5jcHAuCisgICAgICAgIChkdW1wUHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxl
KToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5oLgorICAgICAgICAqIHdh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5jcHAuCisgICAgICAgIChKU0M6Oldh
c206OmpzY0NhbGxpbmdDb252ZW50aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbUNhbGxp
bmdDb252ZW50aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdDb252ZW50
aW9uLmguCisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjpDYWxsaW5nQ29u
dmVudGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjptYXJzaGFs
bEFyZ3VtZW50SW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjpt
YXJzaGFsbEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246
OmxvYWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbjo6
c2V0dXBDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6bmV4dEpTQ09mZnNldCk6CisgICAgICAg
ICogd2FzbS9XYXNtRm9ybWF0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRm9ybWF0LmguCisgICAgICAgIChKU0M6Oldhc206OnRvQjNUeXBlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6aXNWYWx1ZVR5cGUpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVu
Y3Rpb25QYXJzZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OkZ1bmN0aW9uUGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKToKKyAgICAgICAgKiB3
YXNtL1dhc21NZW1vcnkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTU1lbW9yeS5jcHAuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVtb3J5KToK
KyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01NZW1vcnkuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+
TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptZW1vcnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNZW1vcnk6OnNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OnBp
bm5lZFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6bW9kZSk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9y
eTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5j
cHAuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uVHlwZXMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMpOgorICAgICAgICAq
IHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQ
YXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6
ZnVuY3Rpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6
bWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21PcHMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6aXNWYWxp
ZE9wVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OmlzQ29udHJvbE9wKToKKyAgICAgICAgKiB3
YXNtL1dhc21QYXJzZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01QYXJzZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVZhclVJbnQz
Mik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VWYXJVSW50NjQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQYXJzZXI6OlBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjo6Y29uc3VtZUNoYXJhY3Rlcik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6Y29uc3Vt
ZVN0cmluZyk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VVSW50MzIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVUludDcpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQYXJzZXI6OnBhcnNlVmFyVUludDEpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBh
cnNlVmFsdWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QbGFuLmNwcC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uaC4KKyAgICAgICAgKiB3YXNt
L1dhc21TZWN0aW9ucy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTVNlY3Rpb25zLmguCisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25zOjp2YWxpZGF0ZU9y
ZGVyKToKKwogMjAxNi0xMC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgV0FTTSBjYWxscwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CmluZGV4IDM5NWZlMmNhNTVmNDhlNTZmYzUyZGU1NDMxZjZmMWRmYzA2
NWM1OTAuLjAxY2IyOTQ3MzdiMjQ0ZjIxZGI3YTk1Mzk3OWU0OTJiNzMwMDQyZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg2MSwxMyArODYxLDEzIEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAKICAgICB0b29scy9K
U0RvbGxhclZNUHJvdG90eXBlLmNwcAogCi0gICAgd2FzbS9KU1dBU01Nb2R1bGUuY3BwCisgICAg
d2FzbS9KU1dhc21Nb2R1bGUuY3BwCiAgICAgd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAotICAgIHdh
c20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwCi0gICAgd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwCi0gICAgd2FzbS9XQVNNTWVtb3J5LmNwcAotICAgIHdhc20vV0FTTU1vZHVsZVBhcnNlci5j
cHAKLSAgICB3YXNtL1dBU01QbGFuLmNwcAorICAgIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CisgICAgd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCisgICAgd2FzbS9XYXNtTWVtb3J5
LmNwcAorICAgIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKyAgICB3YXNtL1dhc21QbGFuLmNw
cAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAogICAgIHdhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVjdXRhYmxlLnhjY29uZmlnIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL1Rvb2xFeGVjdXRhYmxlLnhjY29uZmlnCmluZGV4
IDcxNzE4MzM0MTIyODVhNGQ3ZGI2YjRhMmJmOGQ3NzFiNmI5MjE2OWMuLmExYTkwYmFhMjIyZDMy
NDA3MTYwNmY4YmFmMTFjYWUzNDVmYWIyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Db25maWd1cmF0aW9ucy9Ub29sRXhlY3V0YWJsZS54Y2NvbmZpZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvVG9vbEV4ZWN1dGFibGUueGNjb25maWcKQEAg
LTMxLDcgKzMxLDcgQEAgQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfbWluaWRvbSA9IGVudGl0
bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRp
dGxlbWVudHMucGxpc3Q7CiBDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0YXBpID0gZW50
aXRsZW1lbnRzLnBsaXN0OwogQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGIzID0gZW50
aXRsZW1lbnRzLnBsaXN0OwotQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdFdBU00gPSBl
bnRpdGxlbWVudHMucGxpc3Q7CitDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0V2FzbSA9
IGVudGl0bGVtZW50cy5wbGlzdDsKIENPREVfU0lHTl9FTlRJVExFTUVOVFNfaW9zX3Rlc3RSZWdF
eHAgPSBlbnRpdGxlbWVudHMucGxpc3Q7CiAKIFNLSVBfSU5TVEFMTCA9ICQoU0tJUF9JTlNUQUxM
XyQoRk9SQ0VfVE9PTF9JTlNUQUxMKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGZkNDJiOWM3NWRlNGRhZGU3ODI2MTkwNzg5YzA3ODI2OTNjYzI4NmIuLjg2YWEwODRlODExZGEz
MTRkYTZjZmI0NzAxYTMzMzhmYjMwYzMzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMjA5LDggKzEyMDksOCBAQAogCQk1MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVu
dGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5
QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJC
OTE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBU
eXBlUHJvZmlsZXIuY3BwICovOyB9OwotCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV0FT
TVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXQVNNUGxhbi5oICovOyB9OwotCQk1MzEzNzRCRjFE
NUNFOTUwMDBBRjdBMEIgLyogV0FTTVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdBU01QbGFu
LmNwcCAqLzsgfTsKKwkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCQzFENUNF
Njc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKKwkJNTMxMzc0QkYxRDVDRTk1MDAwQUY3
QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi87IH07
CiAJCTUzNDFGQzcwMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzZG
MURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCAqLzsgfTsKIAkJ
NTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0
M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi87IH07CiAJCTUzNDg2QkI3
MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5
cGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07
CkBAIC0xMjE5LDMwICsxMjE5LDMwIEBACiAJCTUzNEM0NTdDMUJDNzI0MTEwMDc0NzZBNyAvKiBK
U1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEM0NTdCMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgfTsKIAkJNTM0QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8q
IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJNTM1MjlBNEMxQzQ1N0I3NTAwMEI0
OUM2IC8qIEFQSVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYgLyogQVBJVXRpbHMuaCAqLzsgfTsKLQkJ
NTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAv
KiBXQVNNTWVtb3J5LmggKi87IH07Ci0JCTUzNTU1NzE2MUQ5REZBMzIwMDZENTgzQiAvKiBXQVNN
TWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmNwcCAqLzsgfTsKKwkJNTM1
NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBX
YXNtTWVtb3J5LmggKi87IH07CisJCTUzNTU1NzE2MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVt
b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
NTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLzsgfTsKIAkJNTM3MEI0
RjUxQkYyNjIwMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM3MEI0RjMxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludEJhc2UuY3BwICovOyB9OwogCQk1MzcwQjRGNjFCRjI2MjA1MDA1QzQwRkMg
LyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjQxQkYyNUVBMjAw
NUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAq
LzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJNTM5RUIwNzkxRDU1NjA3MDAw
QzgyRUY3IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5k
YXRpb24uZnJhbWV3b3JrICovOyB9OwogCQk1MzlFQjA3QTFENTU2MDcwMDBDODJFRjcgLyogSmF2
YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayAqLzsgfTsKLQkJNTM5RUIwODExRDU1NjA4QTAwQzgyRUY3IC8qIHRlc3RXQVNN
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVC
MDcxMUQ1NTNERjgwMEM4MkVGNyAvKiB0ZXN0V0FTTS5jcHAgKi87IH07CisJCTUzOUVCMDgxMUQ1
NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVzdFdhc20u
Y3BwICovOyB9OwogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5
MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9OwogCQk1M0Q0NDREQzFE
QUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDREQjFEQUYwOEFCMDBCOTI3ODQgLyog
QjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CiAJCTUzRDQ0NERFMURBRjA5QTAwMEI5Mjc4NCAv
KiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNENDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NW
YWx1ZS5jcHAgKi87IH07Ci0JCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQw
RTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLzsgfTsKLQkJNTNGNDBFOEIx
RDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8q
IFdBU01GdW5jdGlvblBhcnNlci5oICovOyB9OwotCQk1M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYg
LyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdBU01QYXJzZXIuaCAqLzsgfTsKLQkJ
NTNGNDBFOEYxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThFMUQ1OTAyODIw
MDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi87IH07Ci0JCTUzRjQwRTkxMUQ1OTAz
MDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9wcy5oICovOyB9
OwotCQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkyMUQ1QTRB
QjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovOyB9OwotCQk1M0Y0MEU5NTFENUE3
QUVGMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01N
b2R1bGVQYXJzZXIuaCAqLzsgfTsKLQkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01N
b2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICov
OyB9OworCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3
MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CisJCTUzRjQwRThCMUQ1OTAxQkIwMDk5
QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rp
b25QYXJzZXIuaCAqLzsgfTsKKwkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQw
RThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi87IH07CisJCTUzRjQwRThGMUQ1
OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyog
V2FzbUIzSVJHZW5lcmF0b3IuY3BwICovOyB9OworCQk1M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYg
LyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdhc21PcHMuaCAqLzsgfTsKKwkJNTNGNDBF
OTMxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYg
LyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLzsgfTsKKwkJNTNGNDBFOTUxRDVBN0FFRjAwOTlBMUI2
IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2Vy
LmggKi87IH07CisJCTUzRjQwRTk3MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQw
RTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLzsgfTsKIAkJNTNG
NkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNkJG
NkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkEy
QUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMzFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9Owot
CQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV0FTTUNhbGxpbmdDb252ZW50aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQxMUQ3
QUIxODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9OwotCQk1M0ZE
MDRENDFEN0FCMjkxMDAzMjg3RDMgLyogV0FTTUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAz
Mjg3RDMgLyogV0FTTUNhbGxpbmdDb252ZW50aW9uLmggKi87IH07CisJCTUzRkQwNEQzMUQ3QUIy
NzcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8q
IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi87IH07CisJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMy
ODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLzsgfTsKIAkJNUQ1RDhBRDEwRTBEMEVCRTAwRjlDNjkyIC8qIGxp
YmVkaXQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5keWxpYiAqLzsgfTsKIAkJ
NURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNj
cmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ4NTc3NDBBNDY5NkM4
MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURCQjE1MjUxMzFEMEJENzAwNTZBRDM2
IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAq
LzsgfTsKQEAgLTEzNjUsOSArMTM2NSw5IEBACiAJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAv
KiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9u
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUY4
RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3Bw
ICovOyB9OwogCQk3OUY4RkMxRjFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZS5oICovOyB9OwotCQk3Qjk4RDEzNjFCNjBDRDVGMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOThE
MTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwICovOyB9OwotCQk3Qjk4RDEz
NzFCNjBDRDYyMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNX
QVNNTW9kdWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1
OUI1OCAvKiBXQVNNRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk4RDEz
NDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXYXNtTW9kdWxlLmNwcCAqLzsgfTsKKwkJN0I5OEQxMzcx
QjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV2FzbU1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV2Fz
bU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXYXNtRm9ybWF0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkM1NDdEMjFCNjk1OTlCMDA5NTlC
NTggLyogV2FzbUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJl
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAw
OENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovOyB9OwogCQk3
QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Q5MTg3MTI0QkIwMDk1
NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rh
c2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4
Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUxMCw4ICszNTEwLDggQEAKIAkJNTJDMDYx
MUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZVByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzk1MkI4
MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHlwZVByb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTMxMzc0QkMx
RDVDRTY3NjAwQUY3QTBCIC8qIFdBU01QbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdBU01QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzMTM3NEJF
MUQ1Q0U5NTAwMEFGN0EwQiAvKiBXQVNNUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXQVNNUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21Cb3Vu
ZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyog
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2
RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTIyLDMyICsz
NTIyLDMyIEBACiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0
NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1MjlBNEIxQzQ1N0I3
NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFQSVV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzNTU1NzEzMUQ5RDlF
QTUwMDZENTgzQiAvKiBXQVNNTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdBU01NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTM1NTU3MTUx
RDlERkEzMjAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0FTTU1lbW9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1lbW9yeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNzBCNEYzMUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzcwQjRGNDFCRjI1
RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3
OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1
aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKLQkJNTM5RUIwNzExRDU1M0RGODAwQzgyRUY3IC8qIHRlc3RXQVNNLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RXQVNNLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTM5RUIwNzExRDU1M0RGODAwQzgyRUY3IC8qIHRlc3RXYXNtLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RXYXNtLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwODAxRDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RX
QVNNICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29t
cGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0
V0FTTTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTM5RkI4QjkxQzk5
REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzRDQ0NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmg7IHBhdGggPSBi
My9CM1dhc21BZGRyZXNzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNE
NDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21BZGRyZXNzVmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzRjQwRTg0MUQ1
OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTVNlY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUz
RjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01QYXJzZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01C
M0lSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
U01CM0lSR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGNDBF
OTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0Y0MEU5
MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU1vZHVsZVBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyog
V0FTTU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXQVNNTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNG
NDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtU2VjdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRnVuY3Rpb25QYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdh
c21QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYg
LyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbUIzSVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQjNJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5
QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRp
b25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzRkQwNEQxMUQ3QUIx
ODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdBU01DYWxs
aW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNQ2Fs
bGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGRDA0RDEx
RDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21DYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDVE
OEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBu
YW1lID0gbGliZWRpdC5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmVkaXQuZHlsaWI7IHNvdXJj
ZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBK
U0MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSlNDLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1RERERjQ0NjE0RkVFNzIyMDBCNEZCNEQgLyogTExJbnREZXNpcmVkT2Zm
c2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludERlc2lyZWRPZmZz
ZXRzLmg7IHBhdGggPSBMTEludE9mZnNldHMvTExJbnREZXNpcmVkT2Zmc2V0cy5oOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMzcwNiw5ICszNzA2LDkgQEAKIAkJNzlF
RTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1h
bEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01heGltYWxGbHVzaElu
c2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0
IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Qjk4RDEz
NTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dhc21Nb2R1bGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXYXNtTW9kdWxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV2Fz
bU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dhc21Nb2R1bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4
IC8qIFdhc21Gb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZv
cm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEODE4NzEyNEJCMDA5
NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1p
Y3JvdGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaWNyb3Rhc2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTUsNyArNTI5NSw3IEBACiAJCQkJRkVD
QjhCMjkxRDI1Q0FCQjAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzICov
LAogCQkJCTg2RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBpLm1tICovLAogCQkJCTY1
MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLywKLQkJCQk1MzlFQjA3
MTFENTUzREY4MDBDODJFRjcgLyogdGVzdFdBU00uY3BwICovLAorCQkJCTUzOUVCMDcxMUQ1NTNE
RjgwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IHRlc3RzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU4MTksMjMgKzU4MTksMjMgQEAKIAkJCQlB
RDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8sCiAJCQkJQUQy
RkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQlBRDJGQ0I4
QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8sCi0JCQkJN0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0
IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8sCi0JCQkJN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8q
IEpTV0FTTU1vZHVsZS5oICovLAotCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNN
QjNJUkdlbmVyYXRvci5jcHAgKi8sCi0JCQkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdB
U01CM0lSR2VuZXJhdG9yLmggKi8sCi0JCQkJNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdB
U01DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCi0JCQkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0Qz
IC8qIFdBU01DYWxsaW5nQ29udmVudGlvbi5oICovLAotCQkJCTUzRjQwRTkwMUQ1OTAzMDIwMDk5
QTFCNiAvKiBXQVNNT3BzLmggKi8sCi0JCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdB
U01Gb3JtYXQuaCAqLywKLQkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmggKi8sCi0JCQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdBU01NZW1v
cnkuY3BwICovLAotCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXQVNNTWVtb3J5Lmgg
Ki8sCi0JCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3Bw
ICovLAotCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmgg
Ki8sCi0JCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNwcCAqLywKLQkJ
CQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV0FTTVBsYW4uaCAqLywKLQkJCQk1M0Y0MEU4
QzFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oICovLAotCQkJCTUzRjQwRTg0MUQ1OEY5
NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLywKKwkJCQk3Qjk4RDEzNDFCNjBDRDVBMDAy
M0IxQTQgLyogSlNXYXNtTW9kdWxlLmNwcCAqLywKKwkJCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0Ix
QTQgLyogSlNXYXNtTW9kdWxlLmggKi8sCisJCQkJNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8q
IFdhc21CM0lSR2VuZXJhdG9yLmNwcCAqLywKKwkJCQk1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYg
LyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKKwkJCQk1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMg
LyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQk1M0ZEMDREMjFEN0FCMTg3MDAz
Mjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8sCisJCQkJNTNGNDBFOTAxRDU5MDMw
MjAwOTlBMUI2IC8qIFdhc21PcHMuaCAqLywKKwkJCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTgg
LyogV2FzbUZvcm1hdC5oICovLAorCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNt
RnVuY3Rpb25QYXJzZXIuaCAqLywKKwkJCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2Fz
bU1lbW9yeS5jcHAgKi8sCisJCQkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1v
cnkuaCAqLywKKwkJCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNl
ci5jcHAgKi8sCisJCQkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJz
ZXIuaCAqLywKKwkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICov
LAorCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJCTUz
RjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCisJCQkJNTNGNDBFODQx
RDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3
YXNtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc2MDMsNyArNzYwMyw3IEBACiAJ
CQkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzRjQw
RTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNl
RGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlW
YWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTc2ODMsNyArNzY4Myw3IEBACiAJCQkJQkMxOEMz
RkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJp
bWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8q
IFdBU01TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFODUxRDU4Rjk3NzAwOTlB
MUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREM5QTBDMUYxRDJEOUNC
MTAwODUxMjRFIC8qIEIzQ2FzZUNvbGxlY3Rpb25JbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzg0Myw3ICs3ODQzLDcgQEAKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4
QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBB
aXJPcGNvZGVHZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhFNzMw
MDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLApAQCAtODAwOSw3ICs4MDA5LDcgQEAKIAkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBB
N0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzMTM3NEJEMUQ1Q0U2
NzYwMEFGN0EwQiAvKiBXQVNNUGxhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMzc0QkQxRDVD
RTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4
RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5
ODFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0
RThFQjAxOEJGRkJCQjAwNTU2RDI4IC8qIEdDU2VnbWVudGVkQXJyYXkuaCBpbiBIZWFkZXJzICov
LApAQCAtODA2Myw3ICs4MDYzLDcgQEAKIAkJCQkxNDJFMzEzODEzNEZGMEE2MDBBRkFEQjUgLyog
SGFuZGxlU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzgyOTdCMTM3OUU4QTgwMEE3QzJB
MyAvKiBIYW5kbGVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMEYxQTMxQzQyMEJGMDAw
MUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTM1NTU3MTQxRDlEOUVB
NTAwNkQ1ODNCIC8qIFdBU01NZW1vcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNTU1NzE0MUQ5
RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJBN0E5
ODEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMkJEMTEx
QkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkRBNzc4MzE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJzICovLApA
QCAtODIzNyw3ICs4MjM3LDcgQEAKIAkJCQkwRjJCNjZGNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2Jh
bE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8q
IFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFOEIxRDU5MDFC
QjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2
QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyog
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgzMDUsNyAr
ODMwNSw3IEBACiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxMjIwMjcxQkU3RjU4QzAwMzlFNkYyIC8qIEpJ
VEFkZEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0
RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTUz
RjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTcyOTlEOUUxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJz
ICovLApAQCAtODM0MSw3ICs4MzQxLDcgQEAKIAkJCQlCQzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3
NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjFEMTY3
QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAotCQkJCTdCOThEMTM3MUI2MENENjIwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdCOThEMTM3MUI2MENENjIwMDIzQjFBNCAvKiBKU1dhc21Nb2R1bGUuaCBp
biBIZWFkZXJzICovLAogCQkJCURDNjA1QjVFMUNFMjZFQTIwMDU5MzcxOCAvKiBQcm9maWxlckV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFFMDA2NTM4QUYgLyogSlNX
ZWFrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtODM1Nyw3ICs4
MzU3LDcgQEAKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEIwMUJENTk5NEUwMEY0NTc1QyAv
KiBsYXp5d3JpdGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzEwRTE2RjVDRDAwQjM0
NDYwIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1M0Y0MEU5MzFENUE0QUIzMDA5OUEx
QjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRTkzMUQ1
QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM1MkUwRTE2RkNFMTAwQjM0NDYwIC8qIExleGVyLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRENGM0Q1NkIxQ0QyOTQ3MjAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTg3QTAyMUJGQkU1NjEwMDM4QkJDQSAvKiBKSVRNdWxH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODYwNyw3ICs4NjA3LDcgQEAKIAkJCQk3MDVC
NDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzJGRjFFQTFEQTc1NzFDMDBBOEJGMjEgLyogRE9NSklUU2xvd1BhdGhDYWxscy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGRDA0RDQxRDdBQjI5MTAwMzI4N0QzIC8qIFdBU01DYWxs
aW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGRDA0RDQxRDdBQjI5MTAwMzI4
N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQx
QjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
ci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI4MUJEQTA4RUYwMDMzMUI4NCAvKiBT
eW1ib2xQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTg2NjgsNyArODY2OCw3IEBA
CiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXYXNtRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FD
YWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5QTFDNUZGM0Y1MDAyM0VGMjMg
LyogQjNWYXJpYWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQ5NEYyRjE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLApAQCAtOTIxMSw3ICs5MjExLDcg
QEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0g
MjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTUzOUVCMDgxMUQ1NTYwOEEwMEM4MkVGNyAv
KiB0ZXN0V0FTTS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzlFQjA4MTFENTU2MDhBMDBDODJF
RjcgLyogdGVzdFdhc20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC05NDI3LDcgKzk0MjcsNyBAQAog
CQkJCTBGNUExMjczMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk1MzU1NTcxNjFEOURGQTMyMDA2RDU4M0IgLyogV0FTTU1lbW9yeS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzU1NTcxNjFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1l
bW9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMTQzMzFBREYwOTAxMDBFRDc5MkMgLyog
REZHRXBvY2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkRE
IC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5Nzc0MTc5NzM4
QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05
NDU0LDcgKzk0NTQsNyBAQAogCQkJCTBGQzk3RjNGMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1w
UmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVBMEM0MDIxQ0REN0QxRDAwNDgx
OTkxIC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0E1MzVB
MTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV0FTTUNhbGxpbmdDb252ZW50aW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUzRkQwNEQzMUQ3QUIyNzcwMDMyODdEMyAvKiBXYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJGMkFBMzcxQjBCRURFMzAwNjEw
QzdBIC8qIERGR0xhenlOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDlBMjk3MTdBMEJD
NzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlDNEIx
NUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjQyLDcgKzk2NDIsNyBAQAogCQkJCTlFNzI5NDA3
MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUzMTM3NEJGMUQ1Q0U5NTAwMEFGN0EwQiAv
KiBXQVNNUGxhbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzEzNzRCRjFENUNFOTUwMDBBRjdB
MEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAw
MUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEz
RTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1v
ZHVsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk4MjEsNyArOTgyMSw3IEBACiAJCQkJODZFM0M2
MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNEJE
NUEzMjBBM0U5MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTdCOThEMTM2MUI2MENENUYwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8qIEpTV2FzbU1v
ZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBM0FFNzE3REE0MUFFMDA2NTM4QUYgLyog
SlNXZWFrTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcx
MiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcw
OUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xMDA0Myw3ICsxMDA0Myw3IEBACiAJCQkJQUQyRkNDMDIxREI1OERBRDAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNTkzMkE3
MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkUxODdBMDExQkZCRTU1RTAwMzhCQkNBIC8qIEpJVE11bEdlbmVyYXRvci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk1M0Y0MEU4RjFENTkwMjgyMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNGNDBFOEYxRDU5MDI4MjAwOTlBMUI2IC8qIFdhc21C
M0lSR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2NzE4QkE0MUJFOTlGNzgwMDUy
MDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xMDA1NCw3ICsxMDA1NCw3IEBACiAJCQkJQTdDQTNBRTMxN0RBNDFBRTAw
NjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMz
OERGOTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1v
ZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBM0FFNTE3REE0MUFFMDA2NTM4
QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU4NEZBMDE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2
OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKaW5kZXggZmVm
NDQ4ODQ4M2Y1YTg3Mjg3ZGRiNzNjYWQ3M2M1NzEwY2Y4YjM2MS4uYTlmYTdkZDY1ZTUxZGZlNzI5
ZDNkODZhYjZiYmUzNmUwNDQ5YzM2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1F
bmNvZGVkSlNWYWx1ZSBKU19FWFBPUlRfUFJJVkFURSB2bUVudHJ5VG9XQVNNKHZvaWQqIGNvZGUs
IFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIGZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JU
X1BSSVZBVEUgdm1FbnRyeVRvV2FzbSh2b2lkKiBjb2RlLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1l
KiBmcmFtZSkKIHsKICAgICByZXR1cm4gdm1FbnRyeVRvSmF2YVNjcmlwdChjb2RlLCB2bSwgZnJh
bWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCA3
ZThlNGVhODVlZTcyMDMwYTNkOTU3OWU3MGJhY2UzYzVmYWUxNGQ3Li5mYzk3NDJjNDJhYTU4NDJl
NDRiN2QxZDJiMzQ0ZDQ4OGQ5N2YzODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuaApAQCAtMzgsNyArMzgsNyBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVk
SlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUodm9pZCosIFZNKiwgUHJvdG9DYWxsRnJhbWUqKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeVRvV0FTTSh2b2lkKiwg
Vk0qLCBQcm90b0NhbGxGcmFtZSopOworRW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUg
dm1FbnRyeVRvV2FzbSh2b2lkKiwgVk0qLCBQcm90b0NhbGxGcmFtZSopOwogCiBuYW1lc3BhY2Ug
TExJbnQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
CmluZGV4IDM0N2NmZGVlODIyZDYwN2RhMmJlOTE0MjA3NTRmYTZjZmM3ZDNjNTcuLmI0OTk4NjZh
ODBiM2M1YjNiMzI2ZWMzYmQ5ZTJlOWM2ZjljNmJlOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAi
RGVidWdnZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCisjaW5jbHVkZSAiSlNXYXNtTW9kdWxlLmgiCiAjaW5j
bHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyLmgiCkBAIC03NDcsNyArNzQ3LDcgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIldl
YkFzc2VtYmx5RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSkgfTsKIAotV2ViQXNzZW1ibHlFeGVj
dXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIEpTV2FzbU1vZHVsZSogbW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4KQogICAgIDogRXhlY3V0YWJsZUJhc2Uodm0sIHZtLndlYkFzc2VtYmx5RXhlY3V0YWJs
ZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVELCBOb0ludHJpbnNp
YykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fbW9kdWxlKHZtLCB0aGlzLCBtb2R1
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKaW5kZXggOWMz
NTU5NjA1ZTcyMWI3YWE2YmZjMWRlMzE2ZDcyMzNjZDQ5NmY1OS4uMWQyM2IxNTlhNDU4MTVjMjUw
MjU3ODI0Njk0MmYwMWY4YTY5MmI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBF
dmFsQ29kZUJsb2NrOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU1Njb3BlOwot
Y2xhc3MgSlNXQVNNTW9kdWxlOworY2xhc3MgSlNXYXNtTW9kdWxlOwogY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogY2xhc3MgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKIGNsYXNzIFByb2dy
YW1Db2RlQmxvY2s7CkBAIC03MTksNyArNzE5LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgRXhl
Y3V0YWJsZUJhc2UgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBz
dGF0aWMgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
KQorICAgIHN0YXRpYyBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNXYXNtTW9kdWxlKiBtb2R1bGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4ZWN1dGFibGU+KHZt
LmhlYXApKSBXZWJBc3NlbWJseUV4ZWN1dGFibGUodm0sIHNvdXJjZSwgbW9kdWxlLCBmdW5jdGlv
bkluZGV4KTsKICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtNzQ0
LDEyICs3NDQsMTIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVj
dXRhYmxlQmFzZTsKLSAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUoVk0mLCBjb25zdCBTb3VyY2VD
b2RlJiwgSlNXQVNNTW9kdWxlKiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCk7CisgICAgV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIEpTV2FzbU1vZHVsZSosIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKLSAgICBX
cml0ZUJhcnJpZXI8SlNXQVNNTW9kdWxlPiBtX21vZHVsZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNX
YXNtTW9kdWxlPiBtX21vZHVsZTsKICAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXg7CiAKICAg
ICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9zaGVsbC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNTVjNzk3
NjQ0NDYzZjBlNDg2ZjI5YWFlMWJlYjE5Mzg0ZTUyOGEzLi44N2Q5YWVkODNkYjMxMzQzMzQ0OTEz
NTBlMmU0OWM2YjkzZWZlMjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvc2hl
bGwvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3NoZWxsL0NNYWtl
TGlzdHMudHh0CkBAIC01MCw3ICs1MCw3IEBAIGlmIChOT1QgV0lOMzIpCiAgICAgKQogCiAgICAg
c2V0KFRFU1RXQVNNX1NPVVJDRVMKLSAgICAgICAgLi4vdGVzdFdBU00uY3BwCisgICAgICAgIC4u
L3Rlc3RXYXNtLmNwcAogICAgICkKIAogICAgIGFkZF9leGVjdXRhYmxlKHRlc3RiMyAke1RFU1RC
M19TT1VSQ0VTfSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdBU00uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwNTc2ZWM0YTVhZTU2ODExZmVlMDdkOWJjYTM0ZDZhNDIyMjY5YTkyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjA1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSW5pdGlh
bGl6ZVRocmVhZGluZy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJMTEludFRodW5rcy5oIgotI2luY2x1ZGUgIlByb3Rv
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiVk0uaCIKLSNpbmNsdWRlICJXQVNNTWVtb3J5LmgiCi0j
aW5jbHVkZSAiV0FTTVBsYW4uaCIKLQotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVk
ZSA8d3RmL0xFQkRlY29kZXIuaD4KLQotY2xhc3MgQ29tbWFuZExpbmUgewotcHVibGljOgotICAg
IENvbW1hbmRMaW5lKGludCBhcmdjLCBjaGFyKiogYXJndikKLSAgICB7Ci0gICAgICAgIHBhcnNl
QXJndW1lbnRzKGFyZ2MsIGFyZ3YpOwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IG1fYXJn
dW1lbnRzOwotICAgIGJvb2wgbV9ydW5MRUJUZXN0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3J1
bldBU01UZXN0cyB7IGZhbHNlIH07Ci0KLSAgICB2b2lkIHBhcnNlQXJndW1lbnRzKGludCwgY2hh
cioqKTsKLX07Ci0KLXN0YXRpYyBOT19SRVRVUk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW50KGJv
b2wgaGVscCA9IGZhbHNlKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IHRlc3RXQVNN
IFtvcHRpb25zXVxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIC1ofC0taGVscCAgUHJpbnRz
IHRoaXMgaGVscCBtZXNzYWdlXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWx8LS1sZWIg
ICBSdW5zIHRoZSBMRUIgZGVjb2RlciB0ZXN0c1xuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIg
IC13fC0td2ViICAgUnVuIHRoZSBXQVNNIHRlc3RzXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuIik7Ci0KLSAgICBleGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkUpOwot
fQotCi12b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCi17Ci0gICAgaW50IGkgPSAxOwotCi0gICAgZm9yICg7IGkgPCBhcmdjOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgY2hhciogYXJnID0gYXJndltpXTsKLSAgICAgICAgaWYgKCFzdHJjbXAoYXJn
LCAiLWgiKSB8fCAhc3RyY21wKGFyZywgIi0taGVscCIpKQotICAgICAgICAgICAgcHJpbnRVc2Fn
ZVN0YXRlbWVudCh0cnVlKTsKLQotICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItbCIpIHx8ICFz
dHJjbXAoYXJnLCAiLS1sZWIiKSkKLSAgICAgICAgICAgIG1fcnVuTEVCVGVzdHMgPSB0cnVlOwot
Ci0gICAgICAgIGlmICghc3RyY21wKGFyZywgIi13IikgfHwgIXN0cmNtcChhcmcsICItLXdlYiIp
KQotICAgICAgICAgICAgbV9ydW5XQVNNVGVzdHMgPSB0cnVlOwotICAgIH0KLQotICAgIGZvciAo
OyBpIDwgYXJnYzsgKytpKQotICAgICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndltpXSk7Ci0K
LX0KLQotU3RhdGljTG9jayBjcmFzaExvY2s7Ci0KLSNkZWZpbmUgQ0hFQ0tfRVEoeCwgeSkgZG8g
eyBcCi0gICAgICAgIGF1dG8gX194ID0gKHgpOyBcCi0gICAgICAgIGF1dG8gX195ID0gKHkpOyBc
Ci0gICAgICAgIGlmIChfX3ggPT0gX195KSBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgICAgIGNy
YXNoTG9jay5sb2NrKCk7IFwKLSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJ
TEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIHRvQ1N0cmluZygjeCAiID09ICIg
I3ksICIgKCIgI3ggIiA9PSAiLCBfX3gsICIsICIgI3kgIiA9PSAiLCBfX3ksICIpIikuZGF0YSgp
KTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUg
Rk9SX0VBQ0hfVU5TSUdORURfTEVCX1RFU1QobWFjcm8pIFwKLSAgICAvKiBTaW1wbGUgdGVzdHMg
dGhhdCB1c2UgYWxsIHRoZSBiaXRzIGluIHRoZSBhcnJheSAqLyBcCi0gICAgbWFjcm8oKHsgMHgw
NyB9KSwgMCwgdHJ1ZSwgMHg3bHUsIDFsdSkgXAotICAgIG1hY3JvKCh7IDB4NzcgfSksIDAsIHRy
dWUsIDB4NzdsdSwgMWx1KSBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHgwNyB9KSwgMCwgdHJ1ZSwg
MHgzODBsdSwgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHg4OSwgMHgxMiB9KSwgMCwgdHJ1ZSwgMHg5
MDlsdSwgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHgwMiB9KSwgMCwgdHJ1ZSwg
MHg4MmYzbHUsIDNsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4NzQgfSks
IDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0bHUpIFwKLSAgICBtYWNybygoeyAweGYzLCAweDg1LCAw
eGZmLCAweGY0LCAweDdmIH0pLCAwLCB0cnVlLCAweGZlOWZjMmYzbHUsIDVsdSkgXAotICAgIC8q
IFRlc3Qgd2l0aCBleHRyYSB0cmFpbGluZyBudW1iZXJzICovIFwKLSAgICBtYWNybygoeyAweDA3
LCAweDgwIH0pLCAwLCB0cnVlLCAweDdsdSwgMWx1KSBcCi0gICAgbWFjcm8oKHsgMHgwNywgMHg3
NSB9KSwgMCwgdHJ1ZSwgMHg3bHUsIDFsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4
ZmYsIDB4NzQsIDB4NDMgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0bHUpIFwKLSAgICBtYWNy
bygoeyAweGYzLCAweDg1LCAweGZmLCAweDc0LCAweDgwIH0pLCAwLCB0cnVlLCAweGU5ZmMyZjNs
dSwgNGx1KSBcCi0gICAgLyogVGVzdCB3aXRoIHByZWNlZWRpbmcgbnVtYmVycyAqLyBcCi0gICAg
bWFjcm8oKHsgMHhmMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAotICAgIG1hY3Jv
KCh7IDB4MDMsIDB4MDcgfSksIDEsIHRydWUsIDB4N2x1LCAybHUpIFwKLSAgICBtYWNybygoeyAw
eGYyLCAweDUzLCAweDQzLCAweDY3LCAweDc5LCAweDc3IH0pLCA1LCB0cnVlLCAweDc3bHUsIDZs
dSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4ODQsIDB4NzcgfSks
IDUsIHRydWUsIDB4NzdsdSwgNnVsKSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0Mywg
MHhmMywgMHg4NSwgMHgwMiB9KSwgMywgdHJ1ZSwgMHg4MmYzbHUsIDZsdSkgXAotICAgIC8qIFRl
c3QgaW4gdGhlIG1pZGRsZSAqLyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgwNywgMHg4OSB9KSwg
MSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAotICAgIG1hY3JvKCh7IDB4MDMsIDB4MDcsIDB4MjMgfSks
IDEsIHRydWUsIDB4N2x1LCAybHUpIFwKLSAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAw
eDY3LCAweDc5LCAweDc3LCAweDQzIH0pLCA1LCB0cnVlLCAweDc3bHUsIDZsdSkgXAotICAgIG1h
Y3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4ODQsIDB4NzcsIDB4ZjkgfSksIDUsIHRy
dWUsIDB4NzdsdSwgNmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmMywg
MHg4NSwgMHgwMiwgMHhhNCB9KSwgMywgdHJ1ZSwgMHg4MmYzbHUsIDZsdSkgXAotICAgIC8qIFRl
c3QgZGVjb2RlIHRvbyBsb25nICovIFwKLSAgICBtYWNybygoeyAweDgwLCAweDgwLCAweDgwLCAw
eDgwLCAweDgwLCAweDgwfSksIDAsIGZhbHNlLCAweDBsdSwgMGx1KSBcCi0gICAgbWFjcm8oKHsg
MHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhmZn0pLCAxLCBmYWxzZSwgMHgw
bHUsIDBsdSkgXAotICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEsIDB4OWEsIDB4
YTMsIDB4ZmZ9KSwgMCwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKLSAgICAvKiBUZXN0IGRlY29kZSBv
ZmYgZW5kIG9mIGFycmF5ICovIFwKLSAgICBtYWNybygoeyAweDgwLCAweDgwLCAweGFiLCAweDhh
LCAweDlhLCAweGEzLCAweGZmfSksIDIsIGZhbHNlLCAweDBsdSwgMGx1KSBcCi0KLQotI2RlZmlu
ZSBURVNUX1VOU0lHTkVEX0xFQl9ERUNPREUoaW5pdCwgc3RhcnRPZmZzZXQsIGV4cGVjdGVkU3Rh
dHVzLCBleHBlY3RlZFJlc3VsdCwgZXhwZWN0ZWRPZmZzZXQpIFwKLSAgICB7IFwKLSAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBcCi0gICAgICAg
IHNpemVfdCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAotICAgICAgICB1aW50MzJfdCByZXN1bHQ7
IFwKLSAgICAgICAgYm9vbCBzdGF0dXMgPSBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMih2
ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpLCBvZmZzZXQsIHJlc3VsdCk7IFwKLSAgICAgICAg
Q0hFQ0tfRVEoc3RhdHVzLCBleHBlY3RlZFN0YXR1cyk7IFwKLSAgICAgICAgaWYgKGV4cGVjdGVk
U3RhdHVzKSB7IFwKLSAgICAgICAgICAgIENIRUNLX0VRKHJlc3VsdCwgZXhwZWN0ZWRSZXN1bHQp
OyBcCi0gICAgICAgICAgICBDSEVDS19FUShvZmZzZXQsIGV4cGVjdGVkT2Zmc2V0KTsgXAotICAg
ICAgICB9IFwKLSAgICB9OwotCi0KLSNkZWZpbmUgRk9SX0VBQ0hfU0lHTkVEX0xFQl9URVNUKG1h
Y3JvKSBcCi0gICAgLyogU2ltcGxlIHRlc3RzIHRoYXQgdXNlIGFsbCB0aGUgYml0cyBpbiB0aGUg
YXJyYXkgKi8gXAotICAgIG1hY3JvKCh7IDB4MDcgfSksIDAsIHRydWUsIDB4NywgMWx1KSBcCi0g
ICAgbWFjcm8oKHsgMHg3NyB9KSwgMCwgdHJ1ZSwgLTB4OSwgMWx1KSBcCi0gICAgbWFjcm8oKHsg
MHg4MCwgMHgwNyB9KSwgMCwgdHJ1ZSwgMHgzODAsIDJsdSkgXAotICAgIG1hY3JvKCh7IDB4ODks
IDB4MTIgfSksIDAsIHRydWUsIDB4OTA5LCAybHUpIFwKLSAgICBtYWNybygoeyAweGYzLCAweDg1
LCAweDAyIH0pLCAwLCB0cnVlLCAweDgyZjMsIDNsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjMsIDB4
ODUsIDB4ZmYsIDB4NzQgfSksIDAsIHRydWUsIDB4ZmU5ZmMyZjMsIDRsdSkgXAotICAgIG1hY3Jv
KCh7IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4ZjQsIDB4N2YgfSksIDAsIHRydWUsIDB4ZmU5ZmMyZjMs
IDVsdSkgXAotICAgIC8qIFRlc3Qgd2l0aCBleHRyYSB0cmFpbGluZyBudW1iZXJzICovIFwKLSAg
ICBtYWNybygoeyAweDA3LCAweDgwIH0pLCAwLCB0cnVlLCAweDcsIDFsdSkgXAotICAgIG1hY3Jv
KCh7IDB4MDcsIDB4NzUgfSksIDAsIHRydWUsIDB4NywgMWx1KSBcCi0gICAgbWFjcm8oKHsgMHhm
MywgMHg4NSwgMHhmZiwgMHg3NCwgMHg0MyB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywgNGx1KSBc
Ci0gICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCwgMHg4MCB9KSwgMCwgdHJ1ZSwg
MHhmZTlmYzJmMywgNGx1KSBcCi0gICAgLyogVGVzdCB3aXRoIHByZWNlZWRpbmcgbnVtYmVycyAq
LyBcCi0gICAgbWFjcm8oKHsgMHhmMywgMHgwNyB9KSwgMSwgdHJ1ZSwgMHg3LCAybHUpIFwKLSAg
ICBtYWNybygoeyAweDAzLCAweDA3IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkgXAotICAgIG1hY3Jv
KCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4NjcsIDB4NzksIDB4NzcgfSksIDUsIHRydWUsIC0weDks
IDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4ZjcsIDB4ODQsIDB4Nzcg
fSksIDUsIHRydWUsIC0weDksIDZsdSkgXAotICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMs
IDB4ZjMsIDB4ODUsIDB4MDIgfSksIDMsIHRydWUsIDB4ODJmMywgNmx1KSBcCi0gICAgLyogVGVz
dCBpbiB0aGUgbWlkZGxlICovIFwKLSAgICBtYWNybygoeyAweGYzLCAweDA3LCAweDg5IH0pLCAx
LCB0cnVlLCAweDcsIDJsdSkgXAotICAgIG1hY3JvKCh7IDB4MDMsIDB4MDcsIDB4MjMgfSksIDEs
IHRydWUsIDB4NywgMmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHg2Nywg
MHg3OSwgMHg3NywgMHg0MyB9KSwgNSwgdHJ1ZSwgLTB4OSwgNmx1KSBcCi0gICAgbWFjcm8oKHsg
MHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NywgMHhmOSB9KSwgNSwgdHJ1ZSwgLTB4
OSwgNmx1KSBcCi0gICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmMywgMHg4NSwgMHgw
MiwgMHhhNCB9KSwgMywgdHJ1ZSwgMHg4MmYzLCA2bHUpIFwKLSAgICAvKiBUZXN0IGRlY29kZSB0
b28gbG9uZyAqLyBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwg
MHg4MH0pLCAwLCBmYWxzZSwgMHgwLCAwbHUpIFwKLSAgICBtYWNybygoeyAweDgwLCAweDgwLCAw
eGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDEsIGZhbHNlLCAweDAsIDBsdSkgXAotICAg
IG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEsIDB4OWEsIDB4YTMsIDB4ZmZ9KSwgMCwg
ZmFsc2UsIDB4MCwgMGx1KSBcCi0gICAgLyogVGVzdCBkZWNvZGUgb2ZmIGVuZCBvZiBhcnJheSAq
LyBcCi0gICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhm
Zn0pLCAyLCBmYWxzZSwgMHgwLCAwbHUpIFwKLQotCi0jZGVmaW5lIFRFU1RfU0lHTkVEX0xFQl9E
RUNPREUoaW5pdCwgc3RhcnRPZmZzZXQsIGV4cGVjdGVkU3RhdHVzLCBleHBlY3RlZFJlc3VsdCwg
ZXhwZWN0ZWRPZmZzZXQpIFwKLSAgICB7IFwKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBcCi0gICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGFy
dE9mZnNldDsgXAotICAgICAgICBpbnQzMl90IHJlc3VsdDsgXAotICAgICAgICBib29sIHN0YXR1
cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50MzIodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNp
emUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCi0gICAgICAgIENIRUNLX0VRKHN0YXR1cywgZXhwZWN0
ZWRTdGF0dXMpOyBcCi0gICAgICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBcCi0gICAgICAgICAg
ICBpbnQzMl90IGV4cGVjdGVkID0gZXhwZWN0ZWRSZXN1bHQ7IFwKLSAgICAgICAgICAgIENIRUNL
X0VRKHJlc3VsdCwgZXhwZWN0ZWQpOyBcCi0gICAgICAgICAgICBDSEVDS19FUShvZmZzZXQsIGV4
cGVjdGVkT2Zmc2V0KTsgXAotICAgICAgICB9IFwKLSAgICB9OwotCi0KLXN0YXRpYyB2b2lkIHJ1
bkxFQlRlc3RzKCkKLXsKLSAgICBGT1JfRUFDSF9VTlNJR05FRF9MRUJfVEVTVChURVNUX1VOU0lH
TkVEX0xFQl9ERUNPREUpCi0gICAgRk9SX0VBQ0hfU0lHTkVEX0xFQl9URVNUKFRFU1RfU0lHTkVE
X0xFQl9ERUNPREUpCi19Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLXN0YXRpYyBKU0M6
OlZNKiB2bTsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBXQVNNOwot
dXNpbmcgbmFtZXNwYWNlIEIzOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBpbnZva2UoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHB0ciwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWU+IGFy
Z3MpCi17Ci0gICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50OwotICAgIC8vIFNpbmNlIHZtRW50cnlU
b0phdmFTY3JpcHQgZXhwZWN0cyBhIHRoaXMgdmFsdWUgd2UgY2xhaW0gdGhlcmUgaXMgb25lLi4u
IHRoZXJlIGlzbid0LgotICAgIGludCBhcmdDb3VudCA9IDE7Ci0gICAgSlNWYWx1ZSogcmVtYWlu
aW5nQXJndW1lbnRzID0gbnVsbHB0cjsKLSAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAg
cmVtYWluaW5nQXJndW1lbnRzID0gY29uc3RfY2FzdDxKU1ZhbHVlKj4oYXJncy5iZWdpbigpKTsK
LSAgICAgICAgZmlyc3RBcmd1bWVudCA9ICpyZW1haW5pbmdBcmd1bWVudHM7Ci0gICAgICAgIHJl
bWFpbmluZ0FyZ3VtZW50cysrOwotICAgICAgICBhcmdDb3VudCA9IGFyZ3Muc2l6ZSgpOwotICAg
IH0KLQotICAgIFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwotICAgIHByb3RvQ2FsbEZy
YW1lLmluaXQobnVsbHB0ciwgbnVsbHB0ciwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFp
bmluZ0FyZ3VtZW50cyk7Ci0KLSAgICAvLyBUaGlzIHdvbid0IHdvcmsgZm9yIGZsb2F0aW5nIHBv
aW50IHZhbHVlcyBidXQgd2UgZG9uJ3QgaGF2ZSB0aG9zZSB5ZXQuCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KHZtRW50cnlUb1dBU00ocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHZtLCAmcHJv
dG9DYWxsRnJhbWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgaW52b2tlKGNvbnN0
IENvbXBpbGF0aW9uJiBjb2RlLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJncykK
LXsKLSAgICByZXR1cm4gaW52b2tlPFQ+KGNvZGUuY29kZSgpLCBhcmdzKTsKLX0KLQotaW5saW5l
IEpTVmFsdWUgYm94KHVpbnQ2NF90IHZhbHVlKQotewotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUodmFsdWUpOwotfQotCi0vLyBGb3Igbm93IHdlIGlubGluZSB0aGUgdGVzdCBmaWxlcy4KLXN0
YXRpYyB2b2lkIHJ1bldBU01UZXN0cygpCi17Ci0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQot
ICAgICAgICAvLyAgICAgKGZ1bmMgJHN1bTEyIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJh
bSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChw
YXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIp
IChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgMCkgKGkzMi5hZGQgKGdl
dF9sb2NhbCAxKSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDIpIChpMzIuYWRkIChnZXRfbG9jYWwgMykg
KGkzMi5hZGQgKGdldF9sb2NhbCA0KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDUpIChpMzIuYWRkIChn
ZXRfbG9jYWwgNikgKGkzMi5hZGQgKGdldF9sb2NhbCA3KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDgp
IChpMzIuYWRkIChnZXRfbG9jYWwgOSkgKGkzMi5hZGQgKGdldF9sb2NhbCAxMCkgKGdldF9sb2Nh
bCAxMSkpKSkpKSkpKSkpKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJtdWx0MTIi
KSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoY2FsbCAkc3VtMTIgKGdldF9sb2Nh
bCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2Fs
IDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwg
MCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkpKSkKLSAgICAgICAg
Ly8gICAgICkKLQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAg
ICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwg
MHg5NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg0MCwKLSAgICAgICAgICAgIDB4
MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAw
eDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAy
LCAweDAwLCAweDAxLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4YSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwNiwgMHg2ZCwgMHg3NSwKLSAgICAgICAgICAgIDB4NmMsIDB4NzQsIDB4MzEs
IDB4MzIsIDB4MDAsIDB4MDEsIDB4MGEsIDB4Y2UsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDIsIDB4YTYsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAwLCAweDAwLCAweDE0
LCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAyLCAweDE0LCAweDAzLCAweDE0LCAweDA0LCAw
eDE0LCAweDA1LCAweDE0LAotICAgICAgICAgICAgMHgwNiwgMHgxNCwgMHgwNywgMHgxNCwgMHgw
OCwgMHgxNCwgMHgwOSwgMHgxNCwgMHgwYSwgMHgxNCwgMHgwYiwgMHg0MCwgMHg0MCwgMHg0MCwg
MHg0MCwgMHg0MCwKLSAgICAgICAgICAgIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4
NDAsIDB4MDksIDB4MGYsIDB4OWQsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQs
IDB4MDAsCi0gICAgICAgICAgICAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAw
eDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAw
LAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNiwg
MHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZl
Y3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1
bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVs
ZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsx
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAx
Mik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUpLCBib3goNiks
IGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJveCgxMikgfSksIDc4
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwg
Ym94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEwMCkgfSksIDE2
Nik7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAg
Ly8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAg
KGZ1bmMgJGZhYyAoZXhwb3J0ICJmYWMiKSAocGFyYW0gaTY0KSAocmVzdWx0IGk2NCkKLSAgICAg
ICAgLy8gICAgICAoaWYgKGk2NC5lcXogKGdldF9sb2NhbCAwKSkKLSAgICAgICAgLy8gICAgICAg
KHJldHVybiAoaTY0LmNvbnN0IDEpKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAg
ICAgKHJldHVybiAoaTY0Lm11bCAoZ2V0X2xvY2FsIDApIChjYWxsICRmYWMgKGk2NC5zdWIgKGdl
dF9sb2NhbCAwKSAoaTY0LmNvbnN0IDEpKSkpKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAg
Ly8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAg
IDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4
ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAx
LCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMywgMHg2NiwgMHg2MSwgMHg2MywKLSAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4
MGEsIDB4OWUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OTgsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAwLCAweDExLCAweDAwLCAw
eDY4LCAweDAzLCAweDAwLCAweDExLCAweDAxLCAweDA5LCAweDBmLCAweDE0LCAweDAwLCAweDE0
LCAweDAwLCAweDExLCAweDAxLAotICAgICAgICAgICAgMHg1YywgMHgxNiwgMHgwMCwgMHg1ZCwg
MHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7
Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0p
IHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJl
Y3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBU
ZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAxKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
IH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0pLCAyNCk7Ci0gICAg
fQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1v
ZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4
cG9ydCAiZG91YmxlIikgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQpIChyZXR1cm4gKGNhbGwgMSAo
Z2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkpKSkKLSAgICAgICAgLy8gICAgIChmdW5jICRzdW0g
KHBhcmFtIGk2NCkgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQpIChyZXR1cm4gKGk2NC5hZGQgKGdl
dF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAw
eDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAyLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMiwgMHgwMSwgMHgwMiwg
MHg0MCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMiwgMHgwMywgMHg4MywgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDUsIDB4ODMs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDcsIDB4OGEsIDB4
ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAwLCAweDAxLCAweDA2LCAweDY0LCAweDZm
LCAweDc1LCAweDYyLCAweDZjLCAweDY1LCAweDAwLCAweDAwLCAweDBhLCAweDljLCAweDgwLCAw
eDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMiwgMHg4OSwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNiwgMHgwMSwgMHgwOSwK
LSAgICAgICAgICAgIDB4MGYsIDB4ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4
MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NWIsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAg
ICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6
ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJlc3VsdFsxXSkgewotICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwot
ICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MV0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9KSwgMTYpOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAy
KTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAv
LyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAgICAo
ZnVuYyAkaWQgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChnZXRfbG9j
YWwgJHZhbHVlKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpZC1jYWxsIikgKHBh
cmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChjYWxsICRpZCAoZ2V0X2xvY2Fs
ICR2YWx1ZSkpKSkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgzLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAot
ICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4
YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNywgMHg2OSwgMHg2NCwKLSAgICAg
ICAgICAgIDB4MmQsIDB4NjMsIDB4NjEsIDB4NmMsIDB4NmMsIDB4MDAsIDB4MDEsIDB4MGEsIDB4
OTcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODUsIDB4ODAsCi0gICAgICAgICAg
ICAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDA5LCAweDBmLCAweDg3LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgx
NiwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0s
IHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8fCAhcGxhbi5y
ZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1v
ZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7
IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSks
IDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgotICAgICAgICAvLyAobW9kdWxlCi0gICAgICAgIC8vICAobWVtb3J5IDEpCi0gICAgICAgIC8v
ICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRy
IGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgKGk2NC5zdG9yZSAoZ2V0X2xvY2FsICRw
dHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgIChyZXR1cm4gKGk2NC5sb2FkIChnZXRf
bG9jYWwgJHB0cikpKQotICAgICAgICAvLyAgICkKLSAgICAgICAgLy8gICkKLSAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4
NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAyLCAweDAxLCAweDAxLCAw
eDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1
LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2
OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQs
IDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4
ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDE0LAot
ICAgICAgICAgICAgMHgwMSwgMHgyYiwgMHgwMywgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9
OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJl
c3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFM
b2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAg
IENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFz
aC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9
KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewot
ICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gKG1vZHVsZQotICAgICAgICAv
LyAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAo
cGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAg
IChpMzIuc3RvcmUgKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkKLSAgICAgICAgLy8g
ICAocmV0dXJuIChpMzIubG9hZCAoZ2V0X2xvY2FsICRwdHIpKSkKLSAgICAgICAgLy8gICApCi0g
ICAgICAgIC8vICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAx
LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAg
MHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsCi0gICAgICAgICAgICAweDMyLCAweDVm
LCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAw
eDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4
ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwg
MHgzMywgMHgwMiwgMHgwMCwgMHgxNCwKLSAgICAgICAgICAgIDB4MDEsIDB4MmEsIDB4MDIsIDB4
MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0
WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBj
b3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkg
fSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAg
ICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8g
ICAgIChmdW5jIChleHBvcnQgIndyaXRlX2FycmF5IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICRw
IGkzMikgKHBhcmFtICRsZW5ndGggaTMyKSAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAg
IChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sKLSAg
ICAgICAgLy8gICAgICAgKGxvb3AKLSAgICAgICAgLy8gICAgICAgIChicl9pZiAxIChpMzIuZ2Vf
dSAoZ2V0X2xvY2FsICRpKSAoZ2V0X2xvY2FsICRsZW5ndGgpKSkKLSAgICAgICAgLy8gICAgICAg
IChpMzIuc3RvcmUgKGkzMi5hZGQgKGdldF9sb2NhbCAkcCkgKGkzMi5tdWwgKGdldF9sb2NhbCAk
aSkgKGkzMi5jb25zdCA0KSkpIChnZXRfbG9jYWwgJHgpKQotICAgICAgICAvLyAgICAgICAgKHNl
dF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChnZXRfbG9jYWwgJGkpKSkKLSAgICAg
ICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgKQotICAgICAgICAvLyAgICAg
ICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAgICAgLy8gICAgICApCi0gICAgICAg
IC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgw
MywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAgICAgICAgICAweDY5LCAweDc0LCAw
eDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAweDc5LCAweDAwLCAweDAwLCAweDBh
LCAweGIyLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHhhYywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwgMHgwMCwgMHgx
NSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMs
IDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDMsIDB4
MTAsIDB4MDQsIDB4NDIsCi0gICAgICAgICAgICAweDQwLCAweDE0LCAweDAwLCAweDMzLCAweDAy
LCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAweDAzLCAweDA2LCAw
eDAwLCAweDBmLAotICAgICAgICAgICAgMHgwZiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0g
ICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5z
aXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigi
TW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNI
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5zaXplKCkpOwotCi0g
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSA1OwotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzaXplb2YodWludDMyX3QpOwotICAg
ICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9y
eS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAg
ICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtv
ZmZzZXQgLSAxXSwgMHUpOwotICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3Ro
XSwgMHUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDEwMHUpOwotCi0gICAgICAg
IGxlbmd0aCA9IDEwOwotICAgICAgICBvZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAg
ICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCg1
KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwotICAgICAgICBvZmZzZXQgLz0gc2l6ZW9m
KHVpbnQzMl90KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsK
LSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tf
RVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1l
bW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFy
YW0gJHggaTMyKSAocGFyYW0gJHAgaTMyKSAocGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBp
MzIpCi0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQotICAgICAg
ICAvLyAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAobG9vcAotICAgICAgICAvLyAgICAg
ICAgKGJyX2lmIDEgKGkzMi5nZV91IChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkp
KQotICAgICAgICAvLyAgICAgICAgKGkzMi5zdG9yZTggKGkzMi5hZGQgKGdldF9sb2NhbCAkcCkg
KGdldF9sb2NhbCAkaSkpIChnZXRfbG9jYWwgJHgpKQotICAgICAgICAvLyAgICAgICAgKHNldF9s
b2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChnZXRfbG9jYWwgJGkpKSkKLSAgICAgICAg
Ly8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgKQotICAgICAgICAvLyAgICAgICAp
Ci0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8v
ICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMywg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAgICAgICAgICAweDY5LCAweDc0LCAweDY1
LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAweDc5LCAweDAwLCAweDAwLCAweDBhLCAw
eGFmLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHhhOSwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwg
MHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4
MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAs
IDB4MTQsIDB4MDAsCi0gICAgICAgICAgICAweDJlLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAw
eDE0LCAweDAzLCAweDQwLCAweDE1LCAweDAzLCAweDA2LCAweDAwLCAweDBmLCAweDBmLCAweDA5
LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAg
ICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5
LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQocGxh
bi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFu
Lm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsK
LSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7Ci0gICAgICAgIENIRUNL
X0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsg
b2Zmc2V0XSwgMTAwdSk7Ci0KLSAgICAgICAgbGVuZ3RoID0gMTA7Ci0gICAgICAgIG9mZnNldCA9
IDU7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNl
dCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7Ci0g
ICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAg
KG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMg
KGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIpIChy
ZXN1bHQgaTMyKQotICAgICAgICAvLyAgICAgIChpMzIuc3RvcmU4IChnZXRfbG9jYWwgJHB0cikg
KGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoaTMyLmxvYWQ4X3MgKGdl
dF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwg
MHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDBiLCAweDY5LCAweDMzLAotICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2YywgMHg2ZiwgMHg2
MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHg4MCwg
MHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAs
IDB4MTQsCi0gICAgICAgICAgICAweDAxLCAweDIwLCAweDAwLCAweDAwLCAweDA5LCAweDBmCi0g
ICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYg
KHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkt
PnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8g
R2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgICht
ZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBh
cmFtICRpIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTggKGkz
Mi5jb25zdCA4KSAoZ2V0X2xvY2FsICRpKSkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChpMzIu
bG9hZDhfcyAoaTMyLmNvbnN0IDgpKSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAg
ICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAw
LCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMCwgMHgwNSwgMHg4MywgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MGIsIDB4NjksIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDVmLCAweDZjLCAweDZmLCAw
eDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgw
LCAweDgwLCAweDgwLCAweDAwLAotICAgICAgICAgICAgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgw
MCwgMHgxMCwgMHgwOCwKLSAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGYK
LSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBp
ZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAg
ICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0g
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMSkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJh
dGVkIGZyb206Ci0gICAgICAgIC8vIChtb2R1bGUKLSAgICAgICAgLy8gIChtZW1vcnkgMSkKLSAg
ICAgICAgLy8gIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHBh
cmFtICRwdHIgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAoaTMyLnN0b3JlIChnZXRf
bG9jYWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8vICAgKHJldHVybiAoaTMyLmxv
YWQgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8vICAgKQotICAgICAgICAvLyAgKQotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwg
MHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDIsIDB4MDEs
IDB4MDEsIDB4MDIsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDBiLCAweDY5LCAweDMzLAotICAgICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2YywgMHg2ZiwgMHg2
MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHg4MCwg
MHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAs
IDB4MTQsCi0gICAgICAgICAgICAweDAxLCAweDJiLCAweDAzLCAweDAwLCAweDA5LCAweDBmCi0g
ICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYg
KHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vz
bid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KC0xMiksIGJveChwbGFuLm1lbW9yeS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSksIC0x
Mik7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAg
Ly8gKG1vZHVsZQotICAgICAgICAvLyAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgKGZ1bmMgKGV4
cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIpIChyZXN1
bHQgaTMyKQotICAgICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xv
Y2FsICRpKSkKLSAgICAgICAgLy8gICAocmV0dXJuIChpMzIubG9hZCAoZ2V0X2xvY2FsICRwdHIp
KSkKLSAgICAgICAgLy8gICApCi0gICAgICAgIC8vICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywg
MHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4
MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcs
IDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsCi0g
ICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVm
LCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAotICAgICAg
ICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgx
NCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxNCwKLSAgICAgICAgICAg
IDB4MDEsIDB4MmEsIDB4MDIsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAg
ICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgp
ICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVs
ZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8g
R2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgICht
ZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIndyaXRlX2FycmF5IikgKHBh
cmFtICR4IGkzMikgKHBhcmFtICRwIGkzMikgKHBhcmFtICRsZW5ndGggaTMyKSAobG9jYWwgJGkg
aTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAg
ICAgLy8gICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAgKGxvb3AKLSAgICAgICAgLy8gICAg
ICAgIChicl9pZiAxIChpMzIuZ2VfdSAoZ2V0X2xvY2FsICRpKSAoZ2V0X2xvY2FsICRsZW5ndGgp
KSkKLSAgICAgICAgLy8gICAgICAgIChpMzIuc3RvcmUgKGkzMi5hZGQgKGdldF9sb2NhbCAkcCkg
KGkzMi5tdWwgKGdldF9sb2NhbCAkaSkgKGkzMi5jb25zdCA0KSkpIChnZXRfbG9jYWwgJHgpKQot
ICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChn
ZXRfbG9jYWwgJGkpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAg
ICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAg
ICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2
ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAw
LCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDQwLAotICAgICAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4
MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwK
LSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4
OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAg
ICAgICAgICAweDY5LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAw
eDc5LCAweDAwLCAweDAwLCAweDBhLCAweGIyLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAg
ICAgMHgwMCwgMHgwMSwgMHhhYywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4
MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQs
IDB4MDEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDIsCi0gICAgICAgICAgICAweDQwLCAw
eDE0LCAweDAwLCAweDMzLCAweDAyLCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQw
LCAweDE1LCAweDAzLCAweDA2LCAweDAwLCAweDBmLAotICAgICAgICAgICAgMHgwZiwgMHgwOSwg
MHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAg
ICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAg
ICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4i
KTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4u
bWVtb3J5LT5zaXplKCkpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBz
aXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8
dWludDMyX3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBi
b3gobGVuZ3RoKSB9KTsKLSAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAg
ICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwotICAgICAgICBDSEVDS19FUSht
ZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNl
dF0sIDEwMHUpOwotCi0gICAgICAgIGxlbmd0aCA9IDEwOwotICAgICAgICBvZmZzZXQgPSA1ICog
c2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwotICAg
ICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5
W29mZnNldCAtIDFdLCAxMDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxl
bmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCA1dSk7Ci0gICAgfQot
Ci0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVs
ZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9y
dCAid3JpdGVfYXJyYXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAgaTMyKSAocGFyYW0gJGxl
bmd0aCBpMzIpIChsb2NhbCAkaSBpMzIpCi0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkaSAo
aTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAo
bG9vcAotICAgICAgICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChnZXRfbG9jYWwgJGkp
IChnZXRfbG9jYWwgJGxlbmd0aCkpKQotICAgICAgICAvLyAgICAgICAgKGkzMi5zdG9yZTggKGkz
Mi5hZGQgKGdldF9sb2NhbCAkcCkgKGdldF9sb2NhbCAkaSkpIChnZXRfbG9jYWwgJHgpKQotICAg
ICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmFkZCAoaTMyLmNvbnN0IDEpIChnZXRf
bG9jYWwgJGkpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAg
KQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybikKLSAgICAgICAg
Ly8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAw
eDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQw
LAotICAgICAgICAgICAgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4Miwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKLSAg
ICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NzcsIDB4NzIsCi0gICAgICAg
ICAgICAweDY5LCAweDc0LCAweDY1LCAweDVmLCAweDYxLCAweDcyLCAweDcyLCAweDYxLCAweDc5
LCAweDAwLCAweDAwLCAweDBhLCAweGFmLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAg
MHgwMCwgMHgwMSwgMHhhOSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwKLSAgICAgICAgICAgIDB4MDIs
IDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTYsIDB4MDcsIDB4MDEsIDB4MTQsIDB4
MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTQsIDB4MDAsCi0gICAgICAgICAgICAweDJlLCAweDAw
LCAweDAwLCAweDEwLCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE1LCAweDAzLCAweDA2LCAw
eDAwLCAweDBmLCAweDBmLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVk
IHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
fQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7Ci0gICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8
dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZz
ZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFd
LCAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7Ci0KLSAgICAgICAgbGVuZ3RoID0g
MTA7Ci0gICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9
KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKLSAgICAgICAg
Q0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5
W2kgKyBvZmZzZXRdLCA1dSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQot
ICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMy
KSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgICAgIChpMzIuc3Rv
cmU4IChnZXRfbG9jYWwgJHB0cikgKGdldF9sb2NhbCAkaSkpCi0gICAgICAgIC8vICAgICAgKHJl
dHVybiAoaTMyLmxvYWQ4X3MgKGdldF9sb2NhbCAkcHRyKSkpCi0gICAgICAgIC8vICAgICAgKQot
ICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAg
ICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAg
ICAgIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDY5LCAweDMzLAotICAgICAgICAgICAgMHgzMiwg
MHg1ZiwgMHg2YywgMHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1ZiwgMHg3MywgMHgwMCwgMHgw
MCwgMHgwYSwgMHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEs
IDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4
MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAweDIwLCAweDAw
LCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwg
dmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJl
c3VsdFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBp
bGUgY29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotICAgICAg
ICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgIH0K
LQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1
bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBv
cnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8v
ICAgICAgKGkzMi5zdG9yZTggKGkzMi5jb25zdCA4KSAoZ2V0X2xvY2FsICRpKSkKLSAgICAgICAg
Ly8gICAgICAocmV0dXJuIChpMzIubG9hZDhfcyAoaTMyLmNvbnN0IDgpKSkKLSAgICAgICAgLy8g
ICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3Ig
PSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAw
LCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAot
ICAgICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwgMHg4MCwKLSAgICAg
ICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsIDB4MzIsCi0gICAgICAgICAg
ICAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAw
eDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLAotICAgICAgICAgICAgMHgw
MSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxNCwg
MHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKLSAgICAgICAgICAgIDB4MjAsIDB4
MDAsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZt
LCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4u
cmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29t
cGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwotICAgIH0KLQotICAg
IHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAg
ICAgICAgLy8gICAgIChmdW5jICJkdW1iLWVxIiAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMy
KSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4
KSAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICAgKHRoZW4gKGJyIDApKQotICAgICAg
ICAvLyAgICAgICAoZWxzZSAocmV0dXJuIChpMzIuY29uc3QgMSkpKSkKLSAgICAgICAgLy8gICAg
ICAocmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAg
ICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgw
MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4Nywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDcsIDB4OGIsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDA3LCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJkLCAweDY1LCAweDcx
LCAweDAwLCAweDAwLCAweDBhLCAweDk5LAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHg5MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNCwgMHgwMSwgMHg0ZCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDAsIDB4MDYsIDB4MDAs
IDB4MDQsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MTAsIDB4MDAsIDB4MDksIDB4MGYKLSAg
ICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAo
cGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCg2KSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAi
ZHVtYi1sZXNzLXRoYW4iKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkz
MikKLSAgICAgICAgLy8gICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAoaWYgKGkzMi5lcSAo
Z2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICAgICh0aGVuIChy
ZXR1cm4gKGkzMi5jb25zdCAwKSkpCi0gICAgICAgIC8vICAgICAgICAoZWxzZSAoaWYgKGkzMi5l
cSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgICAgICAgICAg
IChyZXR1cm4gKGkzMi5jb25zdCAxKSkpKSkKLSAgICAgICAgLy8gICAgICAgKHNldF9sb2NhbCAk
eCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAg
ICAgKGJyIDApCi0gICAgICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAg
IC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgw
MiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NmMs
IDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDYxLCAw
eDZlLCAweDAwLCAweDAwLCAweDBhLCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweGE2LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMiwg
MHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwMywgMHgwMCwgMHgxMCwgMHgw
MCwgMHgwOSwgMHgwNCwgMHgxNCwKLSAgICAgICAgICAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGQs
IDB4MDMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MGYsIDB4MTQsIDB4MDAsIDB4
MTAsIDB4MDEsIDB4NDEsCi0gICAgICAgICAgICAweDE1LCAweDAwLCAweDA2LCAweDAwLCAweDBm
LCAweDAwLCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9y
KTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFsw
XSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29y
cmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwotICAgIH0KLQotCi0gICAgewotICAgICAg
ICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJyZXR1cm4taTMyIikg
KHJlc3VsdCBpMzIpIChyZXR1cm4gKGkzMi5jb25zdCA1KSkpICkKLSAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4
MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDgwLCAweDgw
LCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3MiwgMHg2NSwgMHg3NCwg
MHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgwMCwgMHgwMCwgMHgw
YSwKLSAgICAgICAgICAgIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4ODUs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4MDksIDB4MGYKLSAg
ICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAo
cGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IH0pLCA1KTsKLSAgICB9Ci0KLQotICAgIHsKLSAgICAgICAgLy8gR2Vu
ZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1bmMgKGV4cG9ydCAicmV0dXJuLWkzMiIpIChyZXN1bHQg
aTMyKSAocmV0dXJuIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCA2KSkpKSApCi0g
ICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYx
LCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg1LCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgw
MSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywg
MHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MGEsIDB4
NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4NjksIDB4MzMsIDB4MzIs
IDB4MDAsIDB4MDAsIDB4MGEsCi0gICAgICAgICAgICAweDhlLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDg4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA1
LCAweDEwLCAweDA2LAotICAgICAgICAgICAgMHg0MCwgMHgwOSwgMHgwZgotICAgICAgICB9Owot
Ci0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3Vs
dC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dM
bigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgfSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikgKHJldHVy
biAoaTMyLmFkZCAoaTMyLmFkZCAoaTMyLmNvbnN0IDUpIChpMzIuY29uc3QgMykpIChpMzIuY29u
c3QgMykpKSkgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAg
ICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwg
MHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4
MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAw
eDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAweDZlLCAweDJkLCAweDY5
LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBhLAotICAgICAgICAgICAgMHg5MSwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwMywKLSAgICAgICAgICAgIDB4NDAsIDB4MTAsIDB4MDMs
IDB4NDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2
ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVz
dWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGls
ZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7Ci0gICAgfQotCi0g
ICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJy
ZXR1cm4taTMyIikgKHJlc3VsdCBpMzIpIChibG9jayAocmV0dXJuIChpMzIuYWRkIChpMzIuYWRk
IChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCAzKSkgKGkzMi5jb25zdCAzKSkpKSAodW5yZWFjaGFi
bGUpKSApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg1
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMCwg
MHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNywgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEs
IDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4NjksIDB4
MzMsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAgICAgICAgICAweDk1LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAw
eDAxLCAweDAwLCAweDEwLCAweDA1LAotICAgICAgICAgICAgMHgxMCwgMHgwMywgMHg0MCwgMHgx
MCwgMHgwMywgMHg0MCwgMHgwOSwgMHgwZiwgMHgwMCwgMHgwZgotICAgICAgICB9OwotCi0gICAg
ICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXpl
KCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9k
dWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
fSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9k
dWxlIChmdW5jIChleHBvcnQgImFkZCIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChy
ZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgJHgpIChnZXRfbG9jYWwgJHkp
KSkpICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMywgMHg2MSwgMHg2NCwgMHg2NCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4
ZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwKLSAgICAgICAgICAgIDB4MDEsIDB4ODgsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NDAsIDB4
MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwot
ICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0
bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCksIGJveCgxKSB9KSwgMTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0xKSwgYm94KDEpfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAv
LyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAg
KGZ1bmMgKGV4cG9ydCAibG9jYWxzIikgKHBhcmFtICR4IGkzMikgKHJlc3VsdCBpMzIpIChsb2Nh
bCAkbnVtIGkzMikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRudW0gKGdldF9sb2NhbCAk
eCkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0X2xvY2FsICRudW0pKQotICAgICAgICAv
LyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAs
Ci0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhhLCAweDgwLCAweDgwLAotICAg
ICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2YywgMHg2ZiwgMHg2MywgMHg2MSwg
MHg2YywgMHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg4MCwgMHg4MCwKLSAgICAgICAg
ICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MTQsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MTQsCi0gICAgICAgICAgICAw
eDAxLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVj
dG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3Vs
dFswXSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUg
Y29ycmVjdGx5LiIpOwotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMTApIH0pLCAxMCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAi
c3VtIikgKHBhcmFtICR4IGkzMikgKHJlc3VsdCBpMzIpIChsb2NhbCAkeSBpMzIpCi0gICAgICAg
IC8vICAgICAgKHNldF9sb2NhbCAkeSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgIChs
b29wCi0gICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGJyX2lmIDAg
KGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKSkKLSAgICAgICAgLy8gICAgICAg
IChzZXRfbG9jYWwgJHkgKGkzMi5hZGQgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpKQot
ICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAo
aTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgIChiciAxKQotICAgICAgICAvLyAgICAg
ICAgKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0X2xv
Y2FsICR5KSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAw
eDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4
NywgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4NzMs
IDB4NzUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YWUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsCi0gICAgICAgICAgICAweGE4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDAxLCAweDAyLCAweDAwLCAweDAxLCAw
eDAwLAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0ZCwgMHgwNywgMHgw
MCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgxNSwgMHgwMSwgMHgxNCwgMHgwMCwK
LSAgICAgICAgICAgIDB4MTAsIDB4MDEsIDB4NDEsIDB4MTUsIDB4MDAsIDB4MDYsIDB4MDEsIDB4
MGYsIDB4MGYsIDB4MTQsIDB4MDEsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQ
bGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9
IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBm
YWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAzKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCkgfSksIDUwNTApOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVk
IGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBv
cnQgImR1bWItbXVsdCIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChyZXN1bHQgaTMy
KSAobG9jYWwgJHRvdGFsIGkzMikgKGxvY2FsICRpIGkzMikgKGxvY2FsICRqIGkzMikKLSAgICAg
ICAgLy8gICAgICAoc2V0X2xvY2FsICR0b3RhbCAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAg
ICAgIChzZXRfbG9jYWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sg
KGxvb3AKLSAgICAgICAgLy8gICAgICAgICAgICAgIChicl9pZiAxIChpMzIuZXEgKGdldF9sb2Nh
bCAkaSkgKGdldF9sb2NhbCAkeCkpKQotICAgICAgICAvLyAgICAgICAgICAgICAgKHNldF9sb2Nh
bCAkaiAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgICAgICAgICAgKHNldF9sb2NhbCAk
aSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRpKSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAg
ICAgICAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAgICAgICAgICAgKGJyX2lmIDEgKGkzMi5l
cSAoZ2V0X2xvY2FsICRqKSAoZ2V0X2xvY2FsICR5KSkpCi0gICAgICAgIC8vICAgICAgICAgICAg
ICAgKHNldF9sb2NhbCAkdG90YWwgKGkzMi5hZGQgKGdldF9sb2NhbCAkdG90YWwpIChpMzIuY29u
c3QgMSkpKQotICAgICAgICAvLyAgICAgICAgICAgICAgIChzZXRfbG9jYWwgJGogKGkzMi5hZGQg
KGdldF9sb2NhbCAkaikgKGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAgICAgICAgICAg
KGJyIDApCi0gICAgICAgIC8vICAgICAgICAgICAgICAgKQotICAgICAgICAvLyAgICAgICAgICAg
ICAgKSkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9jYWwgJHRvdGFsKSkKLSAgICAg
ICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2
ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAw
LCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4
MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4ZCwgMHg4MCwK
LSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDksIDB4NjQsIDB4NzUsIDB4
NmQsIDB4NjIsIDB4MmQsIDB4NmQsIDB4NzUsIDB4NmMsIDB4NzQsIDB4MDAsIDB4MDAsCi0gICAg
ICAgICAgICAweDBhLCAweGM3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweGMxLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAzLCAweDAxLCAweDEwLAotICAgICAgICAg
ICAgMHgwMCwgMHgxNSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMSwgMHgwMCwg
MHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMCwgMHg0ZCwKLSAgICAgICAgICAgIDB4
MDcsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDEs
IDB4NDAsIDB4MTUsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDA0LCAw
eDE0LCAweDAxLCAweDRkLCAweDA3LCAweDAxLCAweDE0LCAweDAyLCAweDEwLCAweDAxLCAweDQw
LCAweDE1LCAweDAyLCAweDE0LCAweDA0LCAweDEwLAotICAgICAgICAgICAgMHgwMSwgMHg0MCwg
MHgxNSwgMHgwNCwgMHgwNiwgMHgwMCwgMHgwZiwgMHgwZiwgMHgwZiwgMHgxNCwgMHgwMiwgMHgw
OSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0g
ICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsK
LSAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3Rs
eS4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAyKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgNCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDYwMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAwMDApOwotICAgIH0KLQotICAgIHsKLSAg
ICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAg
Ly8gICAgIChmdW5jICJkdW1iLWxlc3MtdGhhbiIgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkz
MikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGxvb3AKLSAgICAgICAgLy8gICAgICAg
KGJsb2NrCi0gICAgICAgIC8vICAgICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAgICAoYnJf
aWYgMCAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChnZXRfbG9jYWwgJHkpKSkKLSAgICAgICAgLy8g
ICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAgICApCi0gICAgICAgIC8vICAgICAgICAo
cmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgICApCi0gICAgICAgIC8vICAg
ICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgICAg
KGJyX2lmIDAgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKSkKLSAgICAgICAg
Ly8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAgICApCi0gICAgICAgIC8vICAgICAg
ICAocmV0dXJuIChpMzIuY29uc3QgMSkpCi0gICAgICAgIC8vICAgICAgICApCi0gICAgICAgIC8v
ICAgICAgIChzZXRfbG9jYWwgJHggKGkzMi5zdWIgKGdldF9sb2NhbCAkeCkgKGkzMi5jb25zdCAx
KSkpCi0gICAgICAgIC8vICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICApCi0gICAgICAg
IC8vICAgICAgICh1bnJlYWNoYWJsZSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAg
ICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAw
LCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NmMsIDB4NjUs
IDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDYxLCAweDZlLCAw
eDAwLCAweDAwLCAweDBhLCAweGI5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweGIz
LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgw
NywgMHgwMCwgMHgwNiwKLSAgICAgICAgICAgIDB4MDEsIDB4MGYsIDB4MTAsIDB4MDAsIDB4MDks
IDB4MGYsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4
NGQsIDB4MDcsCi0gICAgICAgICAgICAweDAwLCAweDA2LCAweDAxLCAweDBmLCAweDEwLCAweDAx
LCAweDA5LCAweDBmLCAweDE0LCAweDAwLCAweDEwLCAweDAxLCAweDQxLCAweDE1LCAweDAwLCAw
eDA2LAotICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZgotICAgICAgICB9OwotCi0g
ICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5z
aXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbigi
TW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKLSAgICAgICAgICAgIENSQVNI
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAw
KTsKLSAgICB9Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIENvbW1hbmRMaW5lIG9wdGlvbnMoYXJn
YywgYXJndik7Ci0KLSAgICBpZiAob3B0aW9ucy5tX3J1bkxFQlRlc3RzKQotICAgICAgICBydW5M
RUJUZXN0cygpOwotCi0gICAgaWYgKG9wdGlvbnMubV9ydW5XQVNNVGVzdHMpIHsKLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAg
ICAgICB2bSA9ICZKU0M6OlZNOjpjcmVhdGUoSlNDOjpMYXJnZUhlYXApLmxlYWtSZWYoKTsKLSAg
ICAgICAgcnVuV0FTTVRlc3RzKCk7Ci0jZWxzZQotICAgICAgICBkYXRhTG9nTG4oIldBU00gaXMg
bm90IGVuYWJsZWQhIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0jZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIH0KLQotICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4MTMyMDczOGQyZjA0
NDQ4ZjI2Yzg3ZmFlNWZiMDFiNWYzMzRmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCkBAIC0wLDAgKzEsMTIwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5n
LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5o
IgorI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIK
KyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNt
UGxhbi5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTEVCRGVj
b2Rlci5oPgorCitjbGFzcyBDb21tYW5kTGluZSB7CitwdWJsaWM6CisgICAgQ29tbWFuZExpbmUo
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorICAgIHsKKyAgICAgICAgcGFyc2VBcmd1bWVudHMoYXJn
YywgYXJndik7CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4gbV9hcmd1bWVudHM7CisgICAg
Ym9vbCBtX3J1bkxFQlRlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcnVuV2FzbVRlc3RzIHsg
ZmFsc2UgfTsKKworICAgIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50LCBjaGFyKiopOworfTsKKwor
c3RhdGljIE5PX1JFVFVSTiB2b2lkIHByaW50VXNhZ2VTdGF0ZW1lbnQoYm9vbCBoZWxwID0gZmFs
c2UpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogdGVzdFdhc20gW29wdGlvbnNdXG4i
KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWh8LS1oZWxwICBQcmludHMgdGhpcyBoZWxwIG1l
c3NhZ2VcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAtbHwtLWxlYiAgIFJ1bnMgdGhlIExF
QiBkZWNvZGVyIHRlc3RzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXd8LS13ZWIgICBS
dW4gdGhlIFdhc20gdGVzdHNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworICAg
IGV4aXQoaGVscCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7Cit9CisKK3ZvaWQgQ29t
bWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBp
bnQgaSA9IDE7CisKKyAgICBmb3IgKDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBjb25zdCBj
aGFyKiBhcmcgPSBhcmd2W2ldOworICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItaCIpIHx8ICFz
dHJjbXAoYXJnLCAiLS1oZWxwIikpCisgICAgICAgICAgICBwcmludFVzYWdlU3RhdGVtZW50KHRy
dWUpOworCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi1sIikgfHwgIXN0cmNtcChhcmcsICIt
LWxlYiIpKQorICAgICAgICAgICAgbV9ydW5MRUJUZXN0cyA9IHRydWU7CisKKyAgICAgICAgaWYg
KCFzdHJjbXAoYXJnLCAiLXciKSB8fCAhc3RyY21wKGFyZywgIi0td2ViIikpCisgICAgICAgICAg
ICBtX3J1bldhc21UZXN0cyA9IHRydWU7CisgICAgfQorCisgICAgZm9yICg7IGkgPCBhcmdjOyAr
K2kpCisgICAgICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd2W2ldKTsKKworfQorCitTdGF0aWNM
b2NrIGNyYXNoTG9jazsKKworI2RlZmluZSBDSEVDS19FUSh4LCB5KSBkbyB7IFwKKyAgICAgICAg
YXV0byBfX3ggPSAoeCk7IFwKKyAgICAgICAgYXV0byBfX3kgPSAoeSk7IFwKKyAgICAgICAgaWYg
KF9feCA9PSBfX3kpIFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgY3Jhc2hMb2NrLmxvY2so
KTsgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVf
XywgV1RGX1BSRVRUWV9GVU5DVElPTiwgdG9DU3RyaW5nKCN4ICIgPT0gIiAjeSwgIiAoIiAjeCAi
ID09ICIsIF9feCwgIiwgIiAjeSAiID09ICIsIF9feSwgIikiKS5kYXRhKCkpOyBcCisgICAgICAg
IENSQVNIKCk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBGT1JfRUFDSF9VTlNJ
R05FRF9MRUJfVEVTVChtYWNybykgXAorICAgIC8qIFNpbXBsZSB0ZXN0cyB0aGF0IHVzZSBhbGwg
dGhlIGJpdHMgaW4gdGhlIGFycmF5ICovIFwKKyAgICBtYWNybygoeyAweDA3IH0pLCAwLCB0cnVl
LCAweDdsdSwgMWx1KSBcCisgICAgbWFjcm8oKHsgMHg3NyB9KSwgMCwgdHJ1ZSwgMHg3N2x1LCAx
bHUpIFwKKyAgICBtYWNybygoeyAweDgwLCAweDA3IH0pLCAwLCB0cnVlLCAweDM4MGx1LCAybHUp
IFwKKyAgICBtYWNybygoeyAweDg5LCAweDEyIH0pLCAwLCB0cnVlLCAweDkwOWx1LCAybHUpIFwK
KyAgICBtYWNybygoeyAweGYzLCAweDg1LCAweDAyIH0pLCAwLCB0cnVlLCAweDgyZjNsdSwgM2x1
KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCB9KSwgMCwgdHJ1ZSwgMHhl
OWZjMmYzbHUsIDRsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4ZmYsIDB4ZjQsIDB4
N2YgfSksIDAsIHRydWUsIDB4ZmU5ZmMyZjNsdSwgNWx1KSBcCisgICAgLyogVGVzdCB3aXRoIGV4
dHJhIHRyYWlsaW5nIG51bWJlcnMgKi8gXAorICAgIG1hY3JvKCh7IDB4MDcsIDB4ODAgfSksIDAs
IHRydWUsIDB4N2x1LCAxbHUpIFwKKyAgICBtYWNybygoeyAweDA3LCAweDc1IH0pLCAwLCB0cnVl
LCAweDdsdSwgMWx1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3NCwgMHg0
MyB9KSwgMCwgdHJ1ZSwgMHhlOWZjMmYzbHUsIDRsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4
ODUsIDB4ZmYsIDB4NzQsIDB4ODAgfSksIDAsIHRydWUsIDB4ZTlmYzJmM2x1LCA0bHUpIFwKKyAg
ICAvKiBUZXN0IHdpdGggcHJlY2VlZGluZyBudW1iZXJzICovIFwKKyAgICBtYWNybygoeyAweGYz
LCAweDA3IH0pLCAxLCB0cnVlLCAweDdsdSwgMmx1KSBcCisgICAgbWFjcm8oKHsgMHgwMywgMHgw
NyB9KSwgMSwgdHJ1ZSwgMHg3bHUsIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4
NDMsIDB4NjcsIDB4NzksIDB4NzcgfSksIDUsIHRydWUsIDB4NzdsdSwgNmx1KSBcCisgICAgbWFj
cm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NyB9KSwgNSwgdHJ1ZSwgMHg3
N2x1LCA2dWwpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYzLCAweDg1LCAw
eDAyIH0pLCAzLCB0cnVlLCAweDgyZjNsdSwgNmx1KSBcCisgICAgLyogVGVzdCBpbiB0aGUgbWlk
ZGxlICovIFwKKyAgICBtYWNybygoeyAweGYzLCAweDA3LCAweDg5IH0pLCAxLCB0cnVlLCAweDds
dSwgMmx1KSBcCisgICAgbWFjcm8oKHsgMHgwMywgMHgwNywgMHgyMyB9KSwgMSwgdHJ1ZSwgMHg3
bHUsIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjIsIDB4NTMsIDB4NDMsIDB4NjcsIDB4NzksIDB4
NzcsIDB4NDMgfSksIDUsIHRydWUsIDB4NzdsdSwgNmx1KSBcCisgICAgbWFjcm8oKHsgMHhmMiwg
MHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NywgMHhmOSB9KSwgNSwgdHJ1ZSwgMHg3N2x1LCA2
bHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYzLCAweDg1LCAweDAyLCAw
eGE0IH0pLCAzLCB0cnVlLCAweDgyZjNsdSwgNmx1KSBcCisgICAgLyogVGVzdCBkZWNvZGUgdG9v
IGxvbmcgKi8gXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
ODB9KSwgMCwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKKyAgICBtYWNybygoeyAweDgwLCAweDgwLCAw
eGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDEsIGZhbHNlLCAweDBsdSwgMGx1KSBcCisg
ICAgbWFjcm8oKHsgMHg4MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhmZn0pLCAw
LCBmYWxzZSwgMHgwbHUsIDBsdSkgXAorICAgIC8qIFRlc3QgZGVjb2RlIG9mZiBlbmQgb2YgYXJy
YXkgKi8gXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEsIDB4OWEsIDB4YTMs
IDB4ZmZ9KSwgMiwgZmFsc2UsIDB4MGx1LCAwbHUpIFwKKworCisjZGVmaW5lIFRFU1RfVU5TSUdO
RURfTEVCX0RFQ09ERShpbml0LCBzdGFydE9mZnNldCwgZXhwZWN0ZWRTdGF0dXMsIGV4cGVjdGVk
UmVzdWx0LCBleHBlY3RlZE9mZnNldCkgXAorICAgIHsgXAorICAgICAgICBWZWN0b3I8dWludDhf
dD4gdmVjdG9yID0gVmVjdG9yPHVpbnQ4X3Q+IGluaXQ7IFwKKyAgICAgICAgc2l6ZV90IG9mZnNl
dCA9IHN0YXJ0T2Zmc2V0OyBcCisgICAgICAgIHVpbnQzMl90IHJlc3VsdDsgXAorICAgICAgICBi
b29sIHN0YXR1cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDMyKHZlY3Rvci5kYXRhKCks
IHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBDSEVDS19FUShzdGF0
dXMsIGV4cGVjdGVkU3RhdHVzKTsgXAorICAgICAgICBpZiAoZXhwZWN0ZWRTdGF0dXMpIHsgXAor
ICAgICAgICAgICAgQ0hFQ0tfRVEocmVzdWx0LCBleHBlY3RlZFJlc3VsdCk7IFwKKyAgICAgICAg
ICAgIENIRUNLX0VRKG9mZnNldCwgZXhwZWN0ZWRPZmZzZXQpOyBcCisgICAgICAgIH0gXAorICAg
IH07CisKKworI2RlZmluZSBGT1JfRUFDSF9TSUdORURfTEVCX1RFU1QobWFjcm8pIFwKKyAgICAv
KiBTaW1wbGUgdGVzdHMgdGhhdCB1c2UgYWxsIHRoZSBiaXRzIGluIHRoZSBhcnJheSAqLyBcCisg
ICAgbWFjcm8oKHsgMHgwNyB9KSwgMCwgdHJ1ZSwgMHg3LCAxbHUpIFwKKyAgICBtYWNybygoeyAw
eDc3IH0pLCAwLCB0cnVlLCAtMHg5LCAxbHUpIFwKKyAgICBtYWNybygoeyAweDgwLCAweDA3IH0p
LCAwLCB0cnVlLCAweDM4MCwgMmx1KSBcCisgICAgbWFjcm8oKHsgMHg4OSwgMHgxMiB9KSwgMCwg
dHJ1ZSwgMHg5MDksIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4ODUsIDB4MDIgfSksIDAs
IHRydWUsIDB4ODJmMywgM2x1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4NSwgMHhmZiwgMHg3
NCB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywgNGx1KSBcCisgICAgbWFjcm8oKHsgMHhmMywgMHg4
NSwgMHhmZiwgMHhmNCwgMHg3ZiB9KSwgMCwgdHJ1ZSwgMHhmZTlmYzJmMywgNWx1KSBcCisgICAg
LyogVGVzdCB3aXRoIGV4dHJhIHRyYWlsaW5nIG51bWJlcnMgKi8gXAorICAgIG1hY3JvKCh7IDB4
MDcsIDB4ODAgfSksIDAsIHRydWUsIDB4NywgMWx1KSBcCisgICAgbWFjcm8oKHsgMHgwNywgMHg3
NSB9KSwgMCwgdHJ1ZSwgMHg3LCAxbHUpIFwKKyAgICBtYWNybygoeyAweGYzLCAweDg1LCAweGZm
LCAweDc0LCAweDQzIH0pLCAwLCB0cnVlLCAweGZlOWZjMmYzLCA0bHUpIFwKKyAgICBtYWNybygo
eyAweGYzLCAweDg1LCAweGZmLCAweDc0LCAweDgwIH0pLCAwLCB0cnVlLCAweGZlOWZjMmYzLCA0
bHUpIFwKKyAgICAvKiBUZXN0IHdpdGggcHJlY2VlZGluZyBudW1iZXJzICovIFwKKyAgICBtYWNy
bygoeyAweGYzLCAweDA3IH0pLCAxLCB0cnVlLCAweDcsIDJsdSkgXAorICAgIG1hY3JvKCh7IDB4
MDMsIDB4MDcgfSksIDEsIHRydWUsIDB4NywgMmx1KSBcCisgICAgbWFjcm8oKHsgMHhmMiwgMHg1
MywgMHg0MywgMHg2NywgMHg3OSwgMHg3NyB9KSwgNSwgdHJ1ZSwgLTB4OSwgNmx1KSBcCisgICAg
bWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmNywgMHg4NCwgMHg3NyB9KSwgNSwgdHJ1ZSwg
LTB4OSwgNmx1KSBcCisgICAgbWFjcm8oKHsgMHhmMiwgMHg1MywgMHg0MywgMHhmMywgMHg4NSwg
MHgwMiB9KSwgMywgdHJ1ZSwgMHg4MmYzLCA2bHUpIFwKKyAgICAvKiBUZXN0IGluIHRoZSBtaWRk
bGUgKi8gXAorICAgIG1hY3JvKCh7IDB4ZjMsIDB4MDcsIDB4ODkgfSksIDEsIHRydWUsIDB4Nywg
Mmx1KSBcCisgICAgbWFjcm8oKHsgMHgwMywgMHgwNywgMHgyMyB9KSwgMSwgdHJ1ZSwgMHg3LCAy
bHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweDY3LCAweDc5LCAweDc3LCAw
eDQzIH0pLCA1LCB0cnVlLCAtMHg5LCA2bHUpIFwKKyAgICBtYWNybygoeyAweGYyLCAweDUzLCAw
eDQzLCAweGY3LCAweDg0LCAweDc3LCAweGY5IH0pLCA1LCB0cnVlLCAtMHg5LCA2bHUpIFwKKyAg
ICBtYWNybygoeyAweGYyLCAweDUzLCAweDQzLCAweGYzLCAweDg1LCAweDAyLCAweGE0IH0pLCAz
LCB0cnVlLCAweDgyZjMsIDZsdSkgXAorICAgIC8qIFRlc3QgZGVjb2RlIHRvbyBsb25nICovIFwK
KyAgICBtYWNybygoeyAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfSksIDAsIGZh
bHNlLCAweDAsIDBsdSkgXAorICAgIG1hY3JvKCh7IDB4ODAsIDB4ODAsIDB4YWIsIDB4OGEsIDB4
OWEsIDB4YTMsIDB4ZmZ9KSwgMSwgZmFsc2UsIDB4MCwgMGx1KSBcCisgICAgbWFjcm8oKHsgMHg4
MCwgMHg4MCwgMHhhYiwgMHg4YSwgMHg5YSwgMHhhMywgMHhmZn0pLCAwLCBmYWxzZSwgMHgwLCAw
bHUpIFwKKyAgICAvKiBUZXN0IGRlY29kZSBvZmYgZW5kIG9mIGFycmF5ICovIFwKKyAgICBtYWNy
bygoeyAweDgwLCAweDgwLCAweGFiLCAweDhhLCAweDlhLCAweGEzLCAweGZmfSksIDIsIGZhbHNl
LCAweDAsIDBsdSkgXAorCisKKyNkZWZpbmUgVEVTVF9TSUdORURfTEVCX0RFQ09ERShpbml0LCBz
dGFydE9mZnNldCwgZXhwZWN0ZWRTdGF0dXMsIGV4cGVjdGVkUmVzdWx0LCBleHBlY3RlZE9mZnNl
dCkgXAorICAgIHsgXAorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gVmVjdG9yPHVp
bnQ4X3Q+IGluaXQ7IFwKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0YXJ0T2Zmc2V0OyBcCisg
ICAgICAgIGludDMyX3QgcmVzdWx0OyBcCisgICAgICAgIGJvb2wgc3RhdHVzID0gV1RGOjpMRUJE
ZWNvZGVyOjpkZWNvZGVJbnQzMih2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpLCBvZmZzZXQs
IHJlc3VsdCk7IFwKKyAgICAgICAgQ0hFQ0tfRVEoc3RhdHVzLCBleHBlY3RlZFN0YXR1cyk7IFwK
KyAgICAgICAgaWYgKGV4cGVjdGVkU3RhdHVzKSB7IFwKKyAgICAgICAgICAgIGludDMyX3QgZXhw
ZWN0ZWQgPSBleHBlY3RlZFJlc3VsdDsgXAorICAgICAgICAgICAgQ0hFQ0tfRVEocmVzdWx0LCBl
eHBlY3RlZCk7IFwKKyAgICAgICAgICAgIENIRUNLX0VRKG9mZnNldCwgZXhwZWN0ZWRPZmZzZXQp
OyBcCisgICAgICAgIH0gXAorICAgIH07CisKKworc3RhdGljIHZvaWQgcnVuTEVCVGVzdHMoKQor
eworICAgIEZPUl9FQUNIX1VOU0lHTkVEX0xFQl9URVNUKFRFU1RfVU5TSUdORURfTEVCX0RFQ09E
RSkKKyAgICBGT1JfRUFDSF9TSUdORURfTEVCX1RFU1QoVEVTVF9TSUdORURfTEVCX0RFQ09ERSkK
K30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworc3RhdGljIEpTQzo6Vk0qIHZtOworCit1
c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIFdhc207Cit1c2luZyBuYW1lc3Bh
Y2UgQjM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIGludm9rZShNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcHRyLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJncykKK3sKKyAgICBK
U1ZhbHVlIGZpcnN0QXJndW1lbnQ7CisgICAgLy8gU2luY2Ugdm1FbnRyeVRvSmF2YVNjcmlwdCBl
eHBlY3RzIGEgdGhpcyB2YWx1ZSB3ZSBjbGFpbSB0aGVyZSBpcyBvbmUuLi4gdGhlcmUgaXNuJ3Qu
CisgICAgaW50IGFyZ0NvdW50ID0gMTsKKyAgICBKU1ZhbHVlKiByZW1haW5pbmdBcmd1bWVudHMg
PSBudWxscHRyOworICAgIGlmIChhcmdzLnNpemUoKSkgeworICAgICAgICByZW1haW5pbmdBcmd1
bWVudHMgPSBjb25zdF9jYXN0PEpTVmFsdWUqPihhcmdzLmJlZ2luKCkpOworICAgICAgICBmaXJz
dEFyZ3VtZW50ID0gKnJlbWFpbmluZ0FyZ3VtZW50czsKKyAgICAgICAgcmVtYWluaW5nQXJndW1l
bnRzKys7CisgICAgICAgIGFyZ0NvdW50ID0gYXJncy5zaXplKCk7CisgICAgfQorCisgICAgUHJv
dG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CisgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxs
cHRyLCBudWxscHRyLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJndW1lbnRz
KTsKKworICAgIC8vIFRoaXMgd29uJ3Qgd29yayBmb3IgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGJ1
dCB3ZSBkb24ndCBoYXZlIHRob3NlIHlldC4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odm1F
bnRyeVRvV2FzbShwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdm0sICZwcm90b0NhbGxGcmFtZSkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBpbnZva2UoY29uc3QgQ29tcGlsYXRpb24m
IGNvZGUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlPiBhcmdzKQoreworICAgIHJldHVy
biBpbnZva2U8VD4oY29kZS5jb2RlKCksIGFyZ3MpOworfQorCitpbmxpbmUgSlNWYWx1ZSBib3go
dWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSk7Cit9
CisKKy8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVzLgorc3RhdGljIHZvaWQgcnVu
V2FzbVRlc3RzKCkKK3sKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAg
ICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAg
ICAoZnVuYyAkc3VtMTIgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFt
IGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBh
cmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIp
IChyZXR1cm4gKGkzMi5hZGQgKGdldF9sb2NhbCAwKSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDEpIChp
MzIuYWRkIChnZXRfbG9jYWwgMikgKGkzMi5hZGQgKGdldF9sb2NhbCAzKSAoaTMyLmFkZCAoZ2V0
X2xvY2FsIDQpIChpMzIuYWRkIChnZXRfbG9jYWwgNSkgKGkzMi5hZGQgKGdldF9sb2NhbCA2KSAo
aTMyLmFkZCAoZ2V0X2xvY2FsIDcpIChpMzIuYWRkIChnZXRfbG9jYWwgOCkgKGkzMi5hZGQgKGdl
dF9sb2NhbCA5KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDEwKSAoZ2V0X2xvY2FsIDExKSkpKSkpKSkp
KSkpKSkKKyAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgIm11bHQxMiIpIChwYXJhbSBpMzIp
IChyZXN1bHQgaTMyKSAocmV0dXJuIChjYWxsICRzdW0xMiAoZ2V0X2xvY2FsIDApIChnZXRfbG9j
YWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2Nh
bCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2Fs
IDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSkpKQorICAgICAgICAvLyAgICAgKQorCisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYx
LCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDk2LCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAyLCAweDQwLAorICAgICAgICAgICAgMHgwYywgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDEs
IDB4MDUsIDB4ODMsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDAwLCAweDAxLCAweDA3LCAweDhhLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDA2
LCAweDZkLCAweDc1LAorICAgICAgICAgICAgMHg2YywgMHg3NCwgMHgzMSwgMHgzMiwgMHgwMCwg
MHgwMSwgMHgwYSwgMHhjZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHhhNiwgMHg4
MCwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQs
IDB4MDEsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDQsIDB4MTQsIDB4MDUsIDB4
MTQsCisgICAgICAgICAgICAweDA2LCAweDE0LCAweDA3LCAweDE0LCAweDA4LCAweDE0LCAweDA5
LCAweDE0LCAweDBhLCAweDE0LCAweDBiLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLAor
ICAgICAgICAgICAgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHgwOSwgMHgw
ZiwgMHg5ZCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwKKyAgICAg
ICAgICAgIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4
MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsCisgICAgICAgICAg
ICAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE2LCAweDAwLCAweDA5LCAw
eDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAg
ICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3VsdFswXSB8fCAhcGxh
bi5yZXN1bHRbMV0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBj
b21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCkgfSksIDEyMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEyKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3go
OCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4
KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxl
CisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAkZmFjIChl
eHBvcnQgImZhYyIpIChwYXJhbSBpNjQpIChyZXN1bHQgaTY0KQorICAgICAgICAvLyAgICAgIChp
ZiAoaTY0LmVxeiAoZ2V0X2xvY2FsIDApKQorICAgICAgICAvLyAgICAgICAocmV0dXJuIChpNjQu
Y29uc3QgMSkpCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChp
NjQubXVsIChnZXRfbG9jYWwgMCkgKGNhbGwgJGZhYyAoaTY0LnN1YiAoZ2V0X2xvY2FsIDApIChp
NjQuY29uc3QgMSkpKSkpCisgICAgICAgIC8vICAgICAgKQorICAgICAgICAvLyAgICAgKQorICAg
ICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwg
MHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDEs
IDB4MDIsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MDUsIDB4ODMsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDAwLCAweDAxLCAweDAw
LCAweDAxLCAweDA3LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAzLCAw
eDY2LCAweDYxLCAweDYzLAorICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwYSwgMHg5ZSwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg5OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjgsIDB4MDMsIDB4
MDAsIDB4MTEsIDB4MDEsIDB4MDksIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTEs
IDB4MDEsCisgICAgICAgICAgICAweDVjLCAweDE2LCAweDAwLCAweDVkLCAweDA5LCAweDBmCisg
ICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYg
KHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vz
bid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMikgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNCkgfSksIDI0KTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAg
IC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJkb3VibGUi
KSAocGFyYW0gaTY0KSAocmVzdWx0IGk2NCkgKHJldHVybiAoY2FsbCAxIChnZXRfbG9jYWwgMCkg
KGdldF9sb2NhbCAwKSkpKQorICAgICAgICAvLyAgICAgKGZ1bmMgJHN1bSAocGFyYW0gaTY0KSAo
cGFyYW0gaTY0KSAocmVzdWx0IGk2NCkgKHJldHVybiAoaTY0LmFkZCAoZ2V0X2xvY2FsIDApIChn
ZXRfbG9jYWwgMSkpKSkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIs
IDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAyLCAweDAxLCAweDAyLCAweDQwLCAweDAyLCAw
eDAyLCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgzLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgwMSwgMHgwNSwgMHg4MywgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4YSwgMHg4MCwgMHg4MCwKKyAg
ICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4NjQsIDB4NmYsIDB4NzUsIDB4NjIs
IDB4NmMsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OWMsIDB4ODAsIDB4ODAsCisgICAgICAg
ICAgICAweDgwLCAweDAwLCAweDAyLCAweDg5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAw
LCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE2LCAweDAxLCAweDA5LAorICAgICAgICAgICAg
MHgwZiwgMHg4OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgx
NCwgMHgwMSwgMHg1YiwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxh
bigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8fCAh
cGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7CisgICAgICAgICAgICBkYXRhTG9n
TG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgwKSB9KSwg
MTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTUpIH0pLCAxNik7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApIH0pLCAyMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206CisgICAgICAgIC8vICAgIChtb2R1bGUK
KyAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKKyAgICAgICAgLy8gICAgIChmdW5jICRpZCAocGFy
YW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGdldF9sb2NhbCAkdmFsdWUpKSkK
KyAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImlkLWNhbGwiKSAocGFyYW0gJHZhbHVlIGkz
MikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGNhbGwgJGlkIChnZXRfbG9jYWwgJHZhbHVlKSkpKQor
ICAgICAgICAvLyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAg
ICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAg
ICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCisgICAgICAgICAgICAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhiLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDA3LCAweDY5LCAweDY0LAorICAgICAgICAgICAgMHgyZCwg
MHg2MywgMHg2MSwgMHg2YywgMHg2YywgMHgwMCwgMHgwMSwgMHgwYSwgMHg5NywgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg4NSwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDksIDB4MGYsIDB4ODcsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsCisgICAgICAgICAgICAweDE2LCAweDAwLCAweDA5
LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAg
ICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3VsdFswXSB8fCAh
cGxhbi5yZXN1bHRbMV0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0
byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206CisgICAgICAgIC8v
IChtb2R1bGUKKyAgICAgICAgLy8gIChtZW1vcnkgMSkKKyAgICAgICAgLy8gIChmdW5jIChleHBv
cnQgImkzMl9sb2FkOF9zIikgKHBhcmFtICRpIGkzMikgKHBhcmFtICRwdHIgaTMyKSAocmVzdWx0
IGkzMikKKyAgICAgICAgLy8gICAoaTY0LnN0b3JlIChnZXRfbG9jYWwgJHB0cikgKGdldF9sb2Nh
bCAkaSkpCisgICAgICAgIC8vICAgKHJldHVybiAoaTY0LmxvYWQgKGdldF9sb2NhbCAkcHRyKSkp
CisgICAgICAgIC8vICAgKQorICAgICAgICAvLyAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4g
dmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAs
CisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAw
eDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDY5LCAweDMzLAorICAg
ICAgICAgICAgMHgzMiwgMHg1ZiwgMHg2YywgMHg2ZiwgMHg2MSwgMHg2NCwgMHgzOCwgMHg1Ziwg
MHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgICAgICAg
ICAgIDB4MDAsIDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQs
IDB4MDEsIDB4MTQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MTQsCisgICAgICAgICAgICAw
eDAxLCAweDJiLCAweDAzLCAweDAwLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAg
UGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAh
PSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUg
ZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAobW9kdWxlCisgICAgICAgIC8vICAobWVtb3J5IDEp
CisgICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIp
IChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgKGkzMi5zdG9yZSAo
Z2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAgIChyZXR1cm4gKGkz
Mi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQorICAgICAgICAvLyAgICkKKyAgICAgICAgLy8gICkK
KyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4
NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAw
eDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwYiwgMHg2OSwgMHgzMywKKyAgICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYs
IDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4
ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAweDMzLCAweDAyLCAw
eDAwLCAweDE0LAorICAgICAgICAgICAgMHgwMSwgMHgyYSwgMHgwMiwgMHgwMCwgMHgwOSwgMHgw
ZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAg
IGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAg
ICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMg
ZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAg
fQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1v
ZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4
cG9ydCAid3JpdGVfYXJyYXkiKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHAgaTMyKSAocGFyYW0g
JGxlbmd0aCBpMzIpIChsb2NhbCAkaSBpMzIpCisgICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAk
aSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgIChibG9jaworICAgICAgICAvLyAgICAg
ICAobG9vcAorICAgICAgICAvLyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChnZXRfbG9jYWwg
JGkpIChnZXRfbG9jYWwgJGxlbmd0aCkpKQorICAgICAgICAvLyAgICAgICAgKGkzMi5zdG9yZSAo
aTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAoaTMyLm11bCAoZ2V0X2xvY2FsICRpKSAoaTMyLmNvbnN0
IDQpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICRpIChp
MzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkpKQorICAgICAgICAvLyAgICAgICAg
KGJyIDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAg
Ly8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEs
IDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAzLCAweDAxLCAweDAx
LCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4NjksIDB4NzQsIDB4NjUsIDB4NWYsIDB4
NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MDAsIDB4MGEsIDB4YjIsIDB4ODAs
IDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweGFjLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAx
LCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMiwg
MHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0
MiwKKyAgICAgICAgICAgIDB4NDAsIDB4MTQsIDB4MDAsIDB4MzMsIDB4MDIsIDB4MDAsIDB4MTAs
IDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAsIDB4MGYsCisg
ICAgICAgICAgICAweDBmLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVk
IHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7CisKKyAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CisgICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgIHVpbnQzMl90
KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7
CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBvZmZzZXQgLz0g
c2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAw
dSk7CisgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIENI
RUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7CisKKyAgICAgICAgbGVuZ3RoID0gMTA7
CisgICAgICAgIG9mZnNldCA9IDUgKiBzaXplb2YodWludDMyX3QpOworICAgICAgICBpbnZva2U8
dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0
KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwor
ICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVD
S19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSAr
IG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAg
ICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJheSIpIChwYXJhbSAkeCBpMzIpIChw
YXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxvY2FsICRpIGkzMikKKyAgICAgICAg
Ly8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgKGJs
b2NrCisgICAgICAgIC8vICAgICAgIChsb29wCisgICAgICAgIC8vICAgICAgICAoYnJfaWYgMSAo
aTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkbGVuZ3RoKSkpCisgICAgICAgIC8v
ICAgICAgICAoaTMyLnN0b3JlOCAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAoZ2V0X2xvY2FsICRp
KSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICRpIChpMzIu
YWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkpKQorICAgICAgICAvLyAgICAgICAgKGJy
IDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8g
ICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAzLCAweDAxLCAweDAxLCAw
eDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAw
LCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
YiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4NjksIDB4NzQsIDB4NjUsIDB4NWYsIDB4NjEs
IDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MDAsIDB4MGEsIDB4YWYsIDB4ODAsIDB4
ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweGE5LCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAw
eDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMywgMHgxNCwgMHgwMiwgMHg1
NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNCwgMHgwMCwK
KyAgICAgICAgICAgIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4
NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDksIDB4MGYKKyAgICAg
ICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxh
bi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBk
YXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6
ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gNTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAgICAgICAg
dWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5LT5tZW1v
cnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBDSEVD
S19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKKyAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29m
ZnNldCArIGxlbmd0aF0sIDB1KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQorICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCAxMDB1
KTsKKworICAgICAgICBsZW5ndGggPSAxMDsKKyAgICAgICAgb2Zmc2V0ID0gNTsKKyAgICAgICAg
aW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94
KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0
IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwg
MHUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAg
ICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpMzJf
bG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCisg
ICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTggKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2FsICRp
KSkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChpMzIubG9hZDhfcyAoZ2V0X2xvY2FsICRwdHIp
KSkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4
MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4
MzMsCisgICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4
LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAor
ICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgxNCwKKyAgICAg
ICAgICAgIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKwor
ICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQu
c2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4o
Ik1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKwor
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTAp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMTAwKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAg
ICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAo
cmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAgICAoaTMyLnN0b3JlOCAoaTMyLmNvbnN0IDgpIChn
ZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChpMzIu
Y29uc3QgOCkpKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMs
IDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAx
LCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAw
eDgzLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwg
MHgzMywgMHgzMiwKKyAgICAgICAgICAgIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4
MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsCisgICAgICAgICAgICAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDEwLCAweDA4
LAorICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9Owor
CisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3Vs
dC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dM
bigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAg
ICAgICAgLy8gKG1vZHVsZQorICAgICAgICAvLyAgKG1lbW9yeSAxKQorICAgICAgICAvLyAgKGZ1
bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMyKSAocGFyYW0gJHB0ciBpMzIp
IChyZXN1bHQgaTMyKQorICAgICAgICAvLyAgIChpMzIuc3RvcmUgKGdldF9sb2NhbCAkcHRyKSAo
Z2V0X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAocmV0dXJuIChpMzIubG9hZCAoZ2V0X2xvY2Fs
ICRwdHIpKSkKKyAgICAgICAgLy8gICApCisgICAgICAgIC8vICApCisgICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMiwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4
MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGIsIDB4NjksIDB4
MzMsCisgICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAweDZmLCAweDYxLCAweDY0LCAweDM4
LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgwLCAweDgwLAor
ICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgxNCwKKyAgICAg
ICAgICAgIDB4MDEsIDB4MmIsIDB4MDMsIDB4MDAsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKwor
ICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQu
c2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4o
Ik1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEw
MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goLTEyKSwgYm94KHBs
YW4ubWVtb3J5LT5zaXplKCkgLSBzaXplb2YodWludDY0X3QpKSB9KSwgLTEyKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAobW9kdWxlCisg
ICAgICAgIC8vICAobWVtb3J5IDEpCisgICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9h
ZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCisgICAg
ICAgIC8vICAgKGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQorICAg
ICAgICAvLyAgIChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQorICAgICAgICAv
LyAgICkKKyAgICAgICAgLy8gICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsK
KyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAg
ICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAg
ICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKKyAgICAgICAgICAgIDB4
MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAs
IDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAw
eDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0
LCAweDAwLCAweDMzLCAweDAyLCAweDAwLCAweDE0LAorICAgICAgICAgICAgMHgwMSwgMHgyYSwg
MHgwMiwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigq
dm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxh
bi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBj
b21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTAp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMTAwKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAg
ICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAid3JpdGVfYXJyYXkiKSAocGFyYW0gJHggaTMyKSAo
cGFyYW0gJHAgaTMyKSAocGFyYW0gJGxlbmd0aCBpMzIpIChsb2NhbCAkaSBpMzIpCisgICAgICAg
IC8vICAgICAgKHNldF9sb2NhbCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgIChi
bG9jaworICAgICAgICAvLyAgICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAgKGJyX2lmIDEg
KGkzMi5nZV91IChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJGxlbmd0aCkpKQorICAgICAgICAv
LyAgICAgICAgKGkzMi5zdG9yZSAoaTMyLmFkZCAoZ2V0X2xvY2FsICRwKSAoaTMyLm11bCAoZ2V0
X2xvY2FsICRpKSAoaTMyLmNvbnN0IDQpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAg
ICAgICAoc2V0X2xvY2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkp
KQorICAgICAgICAvLyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAg
IC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkK
KyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAg
ICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAg
ICAgICAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4Njks
IDB4NzQsIDB4NjUsIDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4
MDAsIDB4MGEsIDB4YjIsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAx
LCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAw
eDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgx
NCwgMHgwMywgMHgxNCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwg
MHgwMywgMHgxMCwgMHgwNCwgMHg0MiwKKyAgICAgICAgICAgIDB4NDAsIDB4MTQsIDB4MDAsIDB4
MzMsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMs
IDB4MDYsIDB4MDAsIDB4MGYsCisgICAgICAgICAgICAweDBmLCAweDA5LCAweDBmCisgICAgICAg
IH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4u
cmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0
YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUo
KSk7CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IDU7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJf
dCk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBs
YW4ubWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0p
OworICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CisgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQg
KyBsZW5ndGhdLCAwdSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgMTAwdSk7CisK
KyAgICAgICAgbGVuZ3RoID0gMTA7CisgICAgICAgIG9mZnNldCA9IDUgKiBzaXplb2YodWludDMy
X3QpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIG9mZnNldCAv
PSBzaXplb2YodWludDMyX3QpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0s
IDEwMHUpOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDV1KTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8v
ICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJh
eSIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxv
Y2FsICRpIGkzMikKKyAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkp
CisgICAgICAgIC8vICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgIChsb29wCisgICAgICAg
IC8vICAgICAgICAoYnJfaWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAk
bGVuZ3RoKSkpCisgICAgICAgIC8vICAgICAgICAoaTMyLnN0b3JlOCAoaTMyLmFkZCAoZ2V0X2xv
Y2FsICRwKSAoZ2V0X2xvY2FsICRpKSkgKGdldF9sb2NhbCAkeCkpCisgICAgICAgIC8vICAgICAg
ICAoc2V0X2xvY2FsICRpIChpMzIuYWRkIChpMzIuY29uc3QgMSkgKGdldF9sb2NhbCAkaSkpKQor
ICAgICAgICAvLyAgICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICApCisgICAgICAgIC8v
ICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuKQorICAgICAgICAvLyAgICAgICkKKyAg
ICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAg
ICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAg
ICAweDAzLCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg3NywgMHg3MiwKKyAgICAgICAgICAgIDB4NjksIDB4
NzQsIDB4NjUsIDB4NWYsIDB4NjEsIDB4NzIsIDB4NzIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MDAs
IDB4MGEsIDB4YWYsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAw
eGE5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDEwLCAweDAw
LCAweDE1LCAweDAzLCAweDAxLCAweDAwLAorICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxNCwg
MHgwMywgMHgxNCwgMHgwMiwgMHg1NiwgMHgwNywgMHgwMSwgMHgxNCwgMHgwMSwgMHgxNCwgMHgw
MywgMHg0MCwgMHgxNCwgMHgwMCwKKyAgICAgICAgICAgIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTAs
IDB4MDEsIDB4MTQsIDB4MDMsIDB4NDAsIDB4MTUsIDB4MDMsIDB4MDYsIDB4MDAsIDB4MGYsIDB4
MGYsIDB4MDksIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0
WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBj
b3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKKyAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gMTsKKyAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5n
dGgpIH0pOworICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKKyAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W2kgKyBvZmZzZXRdLCAxMDB1KTsKKworICAgICAgICBsZW5ndGggPSAxMDsKKyAgICAgICAg
b2Zmc2V0ID0gNTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBD
SEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOworICAgICAgICBDSEVDS19FUShtZW1v
cnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0s
IDV1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAg
ICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEpCisgICAgICAgIC8vICAg
ICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRy
IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGkzMi5zdG9yZTggKGdldF9sb2Nh
bCAkcHRyKSAoZ2V0X2xvY2FsICRpKSkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChpMzIubG9h
ZDhfcyAoZ2V0X2xvY2FsICRwdHIpKSkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAg
ICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAw
LCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDcsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MGIsIDB4NjksIDB4MzMsCisgICAgICAgICAgICAweDMyLCAweDVmLCAweDZjLCAw
eDZmLCAweDYxLCAweDY0LCAweDM4LCAweDVmLCAweDczLCAweDAwLCAweDAwLCAweDBhLCAweDk1
LCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgyZSwgMHgw
MCwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDks
IDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAg
ICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChwbGFu
Lm1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwg
MTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAv
LyAgICAgKG1lbW9yeSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4
X3MiKSAocGFyYW0gJGkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAgICAoaTMyLnN0
b3JlOCAoaTMyLmNvbnN0IDgpIChnZXRfbG9jYWwgJGkpKQorICAgICAgICAvLyAgICAgIChyZXR1
cm4gKGkzMi5sb2FkOF9zIChpMzIuY29uc3QgOCkpKQorICAgICAgICAvLyAgICAgICkKKyAgICAg
ICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAg
ICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEs
IDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywgMHgzMiwKKyAgICAgICAgICAgIDB4NWYsIDB4NmMs
IDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4
OTUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsCisgICAgICAgICAgICAweDAxLCAweDhmLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAw
eDAwLCAweDAwLCAweDEwLCAweDA4LAorICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgw
OSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Cisg
ICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3Rs
eS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkg
fSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICAv
LyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAg
KGZ1bmMgImR1bWItZXEiIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChyZXN1bHQgaTMy
KQorICAgICAgICAvLyAgICAgIChpZiAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChnZXRfbG9jYWwg
JHkpKQorICAgICAgICAvLyAgICAgICAodGhlbiAoYnIgMCkpCisgICAgICAgIC8vICAgICAgIChl
bHNlIChyZXR1cm4gKGkzMi5jb25zdCAxKSkpKQorICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkz
Mi5jb25zdCAwKSkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAgICApCisgICAgICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDcz
LCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwg
MHgwNywgMHg4YiwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDcsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NjUsIDB4NzEsIDB4MDAsIDB4MDAs
IDB4MGEsIDB4OTksCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDkzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAx
LCAweDRkLAorICAgICAgICAgICAgMHgwMywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwNCwgMHgxMCwg
MHgwMSwgMHgwOSwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisg
ICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5z
aXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigi
TW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMSk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgyKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAx
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAv
LyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJkdW1iLWxlc3MtdGhh
biIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChyZXN1bHQgaTMyKQorICAgICAgICAv
LyAgICAgIChsb29wCisgICAgICAgIC8vICAgICAgIChpZiAoaTMyLmVxIChnZXRfbG9jYWwgJHgp
IChnZXRfbG9jYWwgJHkpKQorICAgICAgICAvLyAgICAgICAgKHRoZW4gKHJldHVybiAoaTMyLmNv
bnN0IDApKSkKKyAgICAgICAgLy8gICAgICAgIChlbHNlIChpZiAoaTMyLmVxIChnZXRfbG9jYWwg
JHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAgICAgICAgKHJldHVybiAoaTMy
LmNvbnN0IDEpKSkpKQorICAgICAgICAvLyAgICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChn
ZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkpKQorICAgICAgICAvLyAgICAgICAoYnIgMCkKKyAg
ICAgICAgLy8gICAgICAgKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEs
IDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAweDAx
LCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDAwLCAweDA3LCAweDkyLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHgwZSwgMHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2NSwgMHg3Mywg
MHg3MywgMHgyZCwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4NjEsIDB4NmUsIDB4MDAsIDB4
MDAsIDB4MGEsIDB4YWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YTYsIDB4ODAs
IDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDE0LCAw
eDAwLCAweDE0LCAweDAxLCAweDRkLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDA5LCAweDA0
LCAweDE0LAorICAgICAgICAgICAgMHgwMCwgMHgxMCwgMHgwMCwgMHg0ZCwgMHgwMywgMHgwMCwg
MHgxMCwgMHgwMSwgMHgwOSwgMHgwZiwgMHgwZiwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0
MSwKKyAgICAgICAgICAgIDB4MTUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGYK
KyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBp
ZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Cisg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCg2KSB9KSwgMCk7CisgICAgfQorCisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikg
KHJldHVybiAoaTMyLmNvbnN0IDUpKSkgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
ID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwK
KyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsCisgICAg
ICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAw
eDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBhLAorICAgICAgICAg
ICAgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisg
ICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5z
aXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigi
TW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgfSksIDUpOworICAgIH0KKworCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTog
KG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJyZXR1cm4taTMyIikgKHJlc3VsdCBpMzIpIChyZXR1cm4g
KGkzMi5hZGQgKGkzMi5jb25zdCA1KSAoaTMyLmNvbnN0IDYpKSkpICkKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQs
IDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAweDAzLCAweDgy
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDgwLCAw
eDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3MiwgMHg2NSwgMHg3
NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgwMCwgMHgwMCwg
MHgwYSwKKyAgICAgICAgICAgIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
ODgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4MTAsIDB4MDYs
CisgICAgICAgICAgICAweDQwLCAweDA5LCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxh
biBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAx
IHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFp
bGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyB9KSwgMTEp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1
bmMgKGV4cG9ydCAicmV0dXJuLWkzMiIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChp
MzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCAzKSkgKGkzMi5jb25zdCAzKSkpKSApCisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYx
LCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg1LCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgw
MSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywg
MHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MGEsIDB4
NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4NjksIDB4MzMsIDB4MzIs
IDB4MDAsIDB4MDAsIDB4MGEsCisgICAgICAgICAgICAweDkxLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDhiLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA1
LCAweDEwLCAweDAzLAorICAgICAgICAgICAgMHg0MCwgMHgxMCwgMHgwMywgMHg0MCwgMHgwOSwg
MHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAg
ICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4i
KTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAo
cmVzdWx0IGkzMikgKGJsb2NrIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5hZGQgKGkzMi5jb25zdCA1
KSAoaTMyLmNvbnN0IDMpKSAoaTMyLmNvbnN0IDMpKSkpICh1bnJlYWNoYWJsZSkpICkKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAw
eDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhl
LCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3Miwg
MHg2NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgw
MCwgMHgwMCwgMHgwYSwKKyAgICAgICAgICAgIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4OGYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MTAsIDB4MDUsCisgICAgICAgICAgICAweDEwLCAweDAzLCAweDQwLCAweDEwLCAweDAzLCAweDQw
LCAweDA5LCAweDBmLCAweDAwLCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFu
KCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFw
bGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRv
IGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1bmMgKGV4
cG9ydCAiYWRkIikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpIChy
ZXR1cm4gKGkzMi5hZGQgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpKSkgKQorICAgICAg
ICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3
MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAs
IDB4MDcsIDB4ODcsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eDAzLCAweDYxLCAweDY0LCAweDY0LCAweDAwLCAweDAwLCAweDBhLCAweDhlLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLAorICAgICAgICAgICAgMHgwMSwgMHg4OCwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgwOSwgMHgwZgorICAg
ICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KDEpIH0pLCAxMDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goLTEpLCBib3goMSl9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveChzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwgYm94KDEpIH0pLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBm
cm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0
ICJsb2NhbHMiKSAocGFyYW0gJHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICRudW0gaTMyKQor
ICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJG51bSAoZ2V0X2xvY2FsICR4KSkKKyAgICAgICAg
Ly8gICAgICAocmV0dXJuIChnZXRfbG9jYWwgJG51bSkpCisgICAgICAgIC8vICAgICAgKQorICAg
ICAgICAvLyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAg
ICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAg
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGEsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDgw
LCAweDAwLCAweDAxLCAweDA2LCAweDZjLCAweDZmLCAweDYzLCAweDYxLCAweDZjLCAweDczLCAw
eDAwLCAweDAwLCAweDBhLCAweDkxLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgw
MCwgMHgwMSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgxNCwgMHgwMCwgMHgxNSwgMHgwMSwgMHgxNCwKKyAgICAgICAgICAgIDB4MDEsIDB4MDksIDB4
MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAg
ICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAg
ICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlz
IGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMCkgfSksIDEw
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAv
LyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJzdW0iKSAocGFyYW0g
JHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICR5IGkzMikKKyAgICAgICAgLy8gICAgICAoc2V0
X2xvY2FsICR5IChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgKGxvb3AKKyAgICAgICAg
Ly8gICAgICAgKGJsb2NrCisgICAgICAgIC8vICAgICAgICAoYnJfaWYgMCAoaTMyLmVxIChnZXRf
bG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQorICAgICAgICAvLyAgICAgICAgKHNldF9sb2NhbCAk
eSAoaTMyLmFkZCAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkpCisgICAgICAgIC8vICAg
ICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkp
KQorICAgICAgICAvLyAgICAgICAgKGJyIDEpCisgICAgICAgIC8vICAgICAgICApCisgICAgICAg
IC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9jYWwgJHkpKQorICAg
ICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAweDgwLCAweDgw
LAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg3MywgMHg3NSwgMHg2ZCwg
MHgwMCwgMHgwMCwgMHgwYSwgMHhhZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwKKyAg
ICAgICAgICAgIDB4YTgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MTAsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsCisgICAgICAg
ICAgICAweDE0LCAweDAwLCAweDEwLCAweDAwLCAweDRkLCAweDA3LCAweDAwLCAweDE0LCAweDAw
LCAweDE0LCAweDAxLCAweDQwLCAweDE1LCAweDAxLCAweDE0LCAweDAwLAorICAgICAgICAgICAg
MHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgwZiwgMHgwZiwgMHgx
NCwgMHgwMSwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0s
IHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5y
ZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21w
aWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpfSksIDMpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwg
NTA1MCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAg
ICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZHVtYi1tdWx0
IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpIChsb2NhbCAkdG90
YWwgaTMyKSAobG9jYWwgJGkgaTMyKSAobG9jYWwgJGogaTMyKQorICAgICAgICAvLyAgICAgIChz
ZXRfbG9jYWwgJHRvdGFsIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgKHNldF9sb2Nh
bCAkaSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgIChibG9jayAobG9vcAorICAgICAg
ICAvLyAgICAgICAgICAgICAgKGJyX2lmIDEgKGkzMi5lcSAoZ2V0X2xvY2FsICRpKSAoZ2V0X2xv
Y2FsICR4KSkpCisgICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2FsICRqIChpMzIuY29u
c3QgMCkpCisgICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2FsICRpIChpMzIuYWRkIChn
ZXRfbG9jYWwgJGkpIChpMzIuY29uc3QgMSkpKQorICAgICAgICAvLyAgICAgICAgICAgICAgKGxv
b3AKKyAgICAgICAgLy8gICAgICAgICAgICAgICAoYnJfaWYgMSAoaTMyLmVxIChnZXRfbG9jYWwg
JGopIChnZXRfbG9jYWwgJHkpKSkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAoc2V0X2xvY2Fs
ICR0b3RhbCAoaTMyLmFkZCAoZ2V0X2xvY2FsICR0b3RhbCkgKGkzMi5jb25zdCAxKSkpCisgICAg
ICAgIC8vICAgICAgICAgICAgICAgKHNldF9sb2NhbCAkaiAoaTMyLmFkZCAoZ2V0X2xvY2FsICRq
KSAoaTMyLmNvbnN0IDEpKSkKKyAgICAgICAgLy8gICAgICAgICAgICAgICAoYnIgMCkKKyAgICAg
ICAgLy8gICAgICAgICAgICAgICApCisgICAgICAgIC8vICAgICAgICAgICAgICApKQorICAgICAg
ICAvLyAgICAgIChyZXR1cm4gKGdldF9sb2NhbCAkdG90YWwpKQorICAgICAgICAvLyAgICAgICkK
KyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAg
ICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAg
ICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhkLCAweDgwLAorICAgICAgICAgICAg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwOSwgMHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgy
ZCwgMHg2ZCwgMHg3NSwgMHg2YywgMHg3NCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgIDB4MGEs
IDB4YzcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YzEsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4MDEsIDB4MTAsCisgICAgICAgICAgICAweDAwLCAweDE1
LCAweDAyLCAweDEwLCAweDAwLCAweDE1LCAweDAzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAw
eDE0LCAweDAzLCAweDE0LCAweDAwLCAweDRkLAorICAgICAgICAgICAgMHgwNywgMHgwMSwgMHgx
MCwgMHgwMCwgMHgxNSwgMHgwNCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwgMHgxNSwg
MHgwMywgMHgwMiwgMHgwMCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDQsIDB4MTQsIDB4MDEsIDB4
NGQsIDB4MDcsIDB4MDEsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MTUsIDB4MDIs
IDB4MTQsIDB4MDQsIDB4MTAsCisgICAgICAgICAgICAweDAxLCAweDQwLCAweDE1LCAweDA0LCAw
eDA2LCAweDAwLCAweDBmLCAweDBmLCAweDBmLCAweDE0LCAweDAyLCAweDA5LCAweDBmCisgICAg
ICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBs
YW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDAp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDIpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgy
KSB9KSwgMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCA0KTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
NikgfSksIDEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgNjAwKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCgxMDApIH0pLCAxMDAwMCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMg
ImR1bWItbGVzcy10aGFuIiAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkz
MikKKyAgICAgICAgLy8gICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAoYmxvY2sKKyAgICAg
ICAgLy8gICAgICAgIChibG9jaworICAgICAgICAvLyAgICAgICAgIChicl9pZiAwIChpMzIuZXEg
KGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpKQorICAgICAgICAvLyAgICAgICAgIChiciAx
KQorICAgICAgICAvLyAgICAgICAgICkKKyAgICAgICAgLy8gICAgICAgIChyZXR1cm4gKGkzMi5j
b25zdCAwKSkKKyAgICAgICAgLy8gICAgICAgICkKKyAgICAgICAgLy8gICAgICAgKGJsb2NrCisg
ICAgICAgIC8vICAgICAgICAoYmxvY2sKKyAgICAgICAgLy8gICAgICAgICAoYnJfaWYgMCAoaTMy
LmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQorICAgICAgICAvLyAgICAgICAgIChi
ciAxKQorICAgICAgICAvLyAgICAgICAgICkKKyAgICAgICAgLy8gICAgICAgIChyZXR1cm4gKGkz
Mi5jb25zdCAxKSkKKyAgICAgICAgLy8gICAgICAgICkKKyAgICAgICAgLy8gICAgICAgKHNldF9s
b2NhbCAkeCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKKyAgICAgICAg
Ly8gICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICAgKHVu
cmVhY2hhYmxlKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMs
IDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAx
LCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAw
eDA3LCAweDkyLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
ZSwgMHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2NSwgMHg3MywgMHg3Mywg
MHgyZCwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4NjEsIDB4NmUsIDB4MDAsIDB4MDAsIDB4
MGEsIDB4YjksIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YjMsIDB4ODAsIDB4ODAs
IDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAw
eDAxLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDRkLCAweDA3LCAweDAwLCAweDA2
LAorICAgICAgICAgICAgMHgwMSwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwOSwgMHgwZiwgMHgwMSwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0ZCwgMHgwNywKKyAg
ICAgICAgICAgIDB4MDAsIDB4MDYsIDB4MDEsIDB4MGYsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYs
IDB4MTQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDEsIDB4MTUsIDB4MDAsIDB4MDYsCisgICAgICAg
ICAgICAweDAwLCAweDBmLCAweDAwLCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVk
IHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJv
eCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBi
b3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwg
Ym94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiks
IGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOworICAgIH0KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCitpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCit7CisgICAgQ29tbWFuZExpbmUgb3B0aW9ucyhhcmdjLCBhcmd2KTsKKwor
ICAgIGlmIChvcHRpb25zLm1fcnVuTEVCVGVzdHMpCisgICAgICAgIHJ1bkxFQlRlc3RzKCk7CisK
KyAgICBpZiAob3B0aW9ucy5tX3J1bldhc21UZXN0cykgeworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgICAgIHZtID0gJkpT
Qzo6Vk06OmNyZWF0ZShKU0M6OkxhcmdlSGVhcCkubGVha1JlZigpOworICAgICAgICBydW5XYXNt
VGVzdHMoKTsKKyNlbHNlCisgICAgICAgIGRhdGFMb2dMbigiV2FzbSBpcyBub3QgZW5hYmxlZCEi
KTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgfQorCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNkOTk2YWM5N2NhMTk4OTdjMjcyYmE3NTBiZWQ3NjEyMTQ2NjQ0MGMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCi0KLSNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCi0KLSNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgotI2luY2x1
ZGUgIkhlYXBJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFz
c0luZm8gSlNXQVNNTW9kdWxlOjpzX2luZm8gPSB7ICJXQVNNTW9kdWxlIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dBU01Nb2R1bGUpIH07Ci0KLUpTV0FTTU1vZHVs
ZTo6SlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyKQotICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotewotICAgIGlmIChh
cnJheUJ1ZmZlcikKLSAgICAgICAgbV9hcnJheUJ1ZmZlci5zZXQodm0sIHRoaXMsIGFycmF5QnVm
ZmVyKTsKLX0KLQotdm9pZCBKU1dBU01Nb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewot
ICAgIEpTV0FTTU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dBU01Nb2R1bGUqPihjZWxs
KTsKLSAgICB0aGlzT2JqZWN0LT5KU1dBU01Nb2R1bGU6On5KU1dBU01Nb2R1bGUoKTsKLX0KLQot
dm9pZCBKU1dBU01Nb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKLXsKLSAgICBKU1dBU01Nb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
QVNNTW9kdWxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXIpOwotICAg
IGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25zKQotICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOwotICAgIGZvciAoYXV0byBpbXBvcnRlZEZ1bmN0aW9u
IDogdGhpc09iamVjdC0+bV9pbXBvcnRlZEZ1bmN0aW9ucykKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmltcG9ydGVkRnVuY3Rpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNN
TW9kdWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjZlYjVmZDExYWM0ODIw
NmRkZjM4YjAzZWM0YzQ1NDljZTgxNDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQotCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKLSNpbmNsdWRlICJXQVNN
Rm9ybWF0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1dBU01Nb2R1bGUgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVj
dGlibGVPYmplY3QgQmFzZTsKLQotICAgIHVuaW9uIEdsb2JhbFZhcmlhYmxlIHsKLSAgICAgICAg
R2xvYmFsVmFyaWFibGUoaW50MzJfdCB2YWx1ZSkKLSAgICAgICAgICAgIDogaW50VmFsdWUodmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBHbG9iYWxWYXJpYWJsZShmbG9hdCB2
YWx1ZSkKLSAgICAgICAgICAgIDogZmxvYXRWYWx1ZSh2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0gICAgICAgIEdsb2JhbFZhcmlhYmxlKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgICAgIDog
ZG91YmxlVmFsdWUodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGludDMy
X3QgaW50VmFsdWU7Ci0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7Ci0gICAgICAgIGRvdWJsZSBk
b3VibGVWYWx1ZTsKLSAgICB9OwotCi0gICAgc3RhdGljIEpTV0FTTU1vZHVsZSogY3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQot
ICAgIHsKLSAgICAgICAgSlNXQVNNTW9kdWxlKiBtb2R1bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU1dBU01Nb2R1bGU+KHZtLmhlYXApKSBKU1dBU01Nb2R1bGUodm0sIHN0cnVjdHVy
ZSwgYXJyYXlCdWZmZXIpOwotICAgICAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAg
ICAgICAgcmV0dXJuIG1vZHVsZTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0KLSAgICBWZWN0b3I8dWludDMyX3Q+JiBpMzJDb25zdGFudHMoKSB7IHJldHVybiBtX2kzMkNv
bnN0YW50czsgfQotICAgIFZlY3RvcjxmbG9hdD4mIGYzMkNvbnN0YW50cygpIHsgcmV0dXJuIG1f
ZjMyQ29uc3RhbnRzOyB9Ci0gICAgVmVjdG9yPGRvdWJsZT4mIGY2NENvbnN0YW50cygpIHsgcmV0
dXJuIG1fZjY0Q29uc3RhbnRzOyB9Ci0gICAgVmVjdG9yPFdBU006OlNpZ25hdHVyZT4mIHNpZ25h
dHVyZXMoKSB7IHJldHVybiBtX3NpZ25hdHVyZXM7IH0KLSAgICBWZWN0b3I8V0FTTTo6RnVuY3Rp
b25JbXBvcnQ+JiBmdW5jdGlvbkltcG9ydHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uSW1wb3J0czsg
fQotICAgIFZlY3RvcjxXQVNNOjpGdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4mIGZ1bmN0aW9uSW1w
b3J0U2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOyB9Ci0g
ICAgVmVjdG9yPFdBU006OlR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzKCkgeyByZXR1cm4gbV9n
bG9iYWxWYXJpYWJsZVR5cGVzOyB9Ci0gICAgVmVjdG9yPFdBU006OkZ1bmN0aW9uRGVjbGFyYXRp
b24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsYXJhdGlv
bnM7IH0KLSAgICBWZWN0b3I8V0FTTTo6RnVuY3Rpb25Qb2ludGVyVGFibGU+JiBmdW5jdGlvblBv
aW50ZXJUYWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsgfQotCi0gICAg
Y29uc3QgSlNBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2FycmF5
QnVmZmVyLmdldCgpOyB9Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4mIGZ1
bmN0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiYg
ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpIHsgcmV0dXJuIG1fZnVuY3Rpb25TdGFydE9m
ZnNldHNJblNvdXJjZTsgfQotICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGZ1bmN0aW9uU3RhY2tIZWln
aHRzKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNrSGVpZ2h0czsgfQotICAgIFZlY3RvcjxHbG9i
YWxWYXJpYWJsZT4mIGdsb2JhbFZhcmlhYmxlcygpIHsgcmV0dXJuIG1fZ2xvYmFsVmFyaWFibGVz
OyB9Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4mIGltcG9ydGVkRnVuY3Rp
b25zKCkgeyByZXR1cm4gbV9pbXBvcnRlZEZ1bmN0aW9uczsgfQotCi1wcml2YXRlOgotICAgIEpT
V0FTTU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIEpTQXJyYXlCdWZmZXIqKTsKLQotICAgIFZlY3Rv
cjx1aW50MzJfdD4gbV9pMzJDb25zdGFudHM7Ci0gICAgVmVjdG9yPGZsb2F0PiBtX2YzMkNvbnN0
YW50czsKLSAgICBWZWN0b3I8ZG91YmxlPiBtX2Y2NENvbnN0YW50czsKLSAgICBWZWN0b3I8V0FT
TTo6U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7Ci0gICAgVmVjdG9yPFdBU006OkZ1bmN0aW9uSW1w
b3J0PiBtX2Z1bmN0aW9uSW1wb3J0czsKLSAgICBWZWN0b3I8V0FTTTo6RnVuY3Rpb25JbXBvcnRT
aWduYXR1cmU+IG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOwotICAgIFZlY3RvcjxXQVNNOjpU
eXBlPiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7Ci0gICAgVmVjdG9yPFdBU006OkZ1bmN0aW9uRGVj
bGFyYXRpb24+IG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7Ci0gICAgVmVjdG9yPFdBU006OkZ1bmN0
aW9uUG9pbnRlclRhYmxlPiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsKLQotICAgIFdyaXRlQmFy
cmllcjxKU0FycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyOwotICAgIFZlY3RvcjxXcml0ZUJhcnJp
ZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mdW5j
dGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mdW5jdGlv
blN0YWNrSGVpZ2h0czsKLSAgICBWZWN0b3I8R2xvYmFsVmFyaWFibGU+IG1fZ2xvYmFsVmFyaWFi
bGVzOwotICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1faW1wb3J0ZWRGdW5j
dGlvbnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2FzbU1v
ZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dhc21Nb2R1bGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFmNjZhOWQ4Y2I4NzBkODZmMzEzMGZlZTQ0OGE2YjI2MjRmZWQ1ZTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dhc21Nb2R1bGUuY3Bw
CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXYXNtTW9kdWxlLmgiCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklu
bGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBDbGFzc0luZm8gSlNXYXNtTW9kdWxlOjpzX2luZm8gPSB7ICJXYXNtTW9kdWxl
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dhc21Nb2R1bGUpIH07
CisKK0pTV2FzbU1vZHVsZTo6SlNXYXNtTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
KQoreworICAgIGlmIChhcnJheUJ1ZmZlcikKKyAgICAgICAgbV9hcnJheUJ1ZmZlci5zZXQodm0s
IHRoaXMsIGFycmF5QnVmZmVyKTsKK30KKwordm9pZCBKU1dhc21Nb2R1bGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQoreworICAgIEpTV2FzbU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dh
c21Nb2R1bGUqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1dhc21Nb2R1bGU6On5KU1dhc21N
b2R1bGUoKTsKK30KKwordm9pZCBKU1dhc21Nb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1dhc21Nb2R1bGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNXYXNtTW9kdWxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJy
YXlCdWZmZXIpOworICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmplY3QtPm1fZnVuY3Rp
b25zKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOworICAgIGZvciAoYXV0byBp
bXBvcnRlZEZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9pbXBvcnRlZEZ1bmN0aW9ucykKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJmltcG9ydGVkRnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2FzbU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vSlNXYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JiMjM1MmY3OTkwZmI2MGM2ZDk4
NzgzOTczY2I5MDQxOTBkMWI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL0pTV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2FzbU1v
ZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgdW5pb24gR2xvYmFsVmFyaWFibGUg
eworICAgICAgICBHbG9iYWxWYXJpYWJsZShpbnQzMl90IHZhbHVlKQorICAgICAgICAgICAgOiBp
bnRWYWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIEdsb2JhbFZhcmlh
YmxlKGZsb2F0IHZhbHVlKQorICAgICAgICAgICAgOiBmbG9hdFZhbHVlKHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgR2xvYmFsVmFyaWFibGUoZG91YmxlIHZhbHVlKQorICAg
ICAgICAgICAgOiBkb3VibGVWYWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgaW50MzJfdCBpbnRWYWx1ZTsKKyAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKKyAgICAg
ICAgZG91YmxlIGRvdWJsZVZhbHVlOworICAgIH07CisKKyAgICBzdGF0aWMgSlNXYXNtTW9kdWxl
KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZlciogYXJy
YXlCdWZmZXIpCisgICAgeworICAgICAgICBKU1dhc21Nb2R1bGUqIG1vZHVsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2FzbU1vZHVsZT4odm0uaGVhcCkpIEpTV2FzbU1vZHVsZSh2
bSwgc3RydWN0dXJlLCBhcnJheUJ1ZmZlcik7CisgICAgICAgIG1vZHVsZS0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgICAgICByZXR1cm4gbW9kdWxlOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4mIGkzMkNvbnN0YW50cygpIHsgcmV0
dXJuIG1faTMyQ29uc3RhbnRzOyB9CisgICAgVmVjdG9yPGZsb2F0PiYgZjMyQ29uc3RhbnRzKCkg
eyByZXR1cm4gbV9mMzJDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8ZG91YmxlPiYgZjY0Q29uc3Rh
bnRzKCkgeyByZXR1cm4gbV9mNjRDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8V2FzbTo6U2lnbmF0
dXJlPiYgc2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fc2lnbmF0dXJlczsgfQorICAgIFZlY3RvcjxX
YXNtOjpGdW5jdGlvbkltcG9ydD4mIGZ1bmN0aW9uSW1wb3J0cygpIHsgcmV0dXJuIG1fZnVuY3Rp
b25JbXBvcnRzOyB9CisgICAgVmVjdG9yPFdhc206OkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlPiYg
ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydFNpZ25h
dHVyZXM7IH0KKyAgICBWZWN0b3I8V2FzbTo6VHlwZT4mIGdsb2JhbFZhcmlhYmxlVHlwZXMoKSB7
IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7IH0KKyAgICBWZWN0b3I8V2FzbTo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4mIGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlv
bkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxXYXNtOjpGdW5jdGlvblBvaW50ZXJUYWJsZT4m
IGZ1bmN0aW9uUG9pbnRlclRhYmxlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25Qb2ludGVyVGFibGVz
OyB9CisKKyAgICBjb25zdCBKU0FycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYXJyYXlCdWZmZXIuZ2V0KCk7IH0KKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+PiYgZnVuY3Rpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKyAgICBWZWN0b3I8
dW5zaWduZWQ+JiBmdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlKCkgeyByZXR1cm4gbV9mdW5j
dGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOyB9CisgICAgVmVjdG9yPHVuc2lnbmVkPiYgZnVuY3Rp
b25TdGFja0hlaWdodHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uU3RhY2tIZWlnaHRzOyB9CisgICAg
VmVjdG9yPEdsb2JhbFZhcmlhYmxlPiYgZ2xvYmFsVmFyaWFibGVzKCkgeyByZXR1cm4gbV9nbG9i
YWxWYXJpYWJsZXM7IH0KKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+PiYgaW1w
b3J0ZWRGdW5jdGlvbnMoKSB7IHJldHVybiBtX2ltcG9ydGVkRnVuY3Rpb25zOyB9CisKK3ByaXZh
dGU6CisgICAgSlNXYXNtTW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgSlNBcnJheUJ1ZmZlciopOwor
CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2kzMkNvbnN0YW50czsKKyAgICBWZWN0b3I8ZmxvYXQ+
IG1fZjMyQ29uc3RhbnRzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fZjY0Q29uc3RhbnRzOworICAg
IFZlY3RvcjxXYXNtOjpTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKKyAgICBWZWN0b3I8V2FzbTo6
RnVuY3Rpb25JbXBvcnQ+IG1fZnVuY3Rpb25JbXBvcnRzOworICAgIFZlY3RvcjxXYXNtOjpGdW5j
dGlvbkltcG9ydFNpZ25hdHVyZT4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7CisgICAgVmVj
dG9yPFdhc206OlR5cGU+IG1fZ2xvYmFsVmFyaWFibGVUeXBlczsKKyAgICBWZWN0b3I8V2FzbTo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8
V2FzbTo6RnVuY3Rpb25Qb2ludGVyVGFibGU+IG1fZnVuY3Rpb25Qb2ludGVyVGFibGVzOworCisg
ICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXI7CisgICAgVmVjdG9y
PFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisgICAgVmVjdG9yPHVuc2ln
bmVkPiBtX2Z1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2U7CisgICAgVmVjdG9yPHVuc2lnbmVk
PiBtX2Z1bmN0aW9uU3RhY2tIZWlnaHRzOworICAgIFZlY3RvcjxHbG9iYWxWYXJpYWJsZT4gbV9n
bG9iYWxWYXJpYWJsZXM7CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4gbV9p
bXBvcnRlZEZ1bmN0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUIzSVJHZW5lcmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGE4MDBj
OGE0ZmZlOWY1M2VhODhiNDYyMmQxZmNjZjRhZWQ0ZTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01C
M0lSR2VuZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldBU01CM0lSR2VuZXJhdG9yLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0KLSNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQjNDb25z
dFB0clZhbHVlLmgiCi0jaW5jbHVkZSAiQjNGaXhTU0EuaCIKLSNpbmNsdWRlICJCM1N0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcy5oIgotI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKLSNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKLSNpbmNsdWRlICJCM1Zh
cmlhYmxlVmFsdWUuaCIKLSNpbmNsdWRlICJCM1dhc21BZGRyZXNzVmFsdWUuaCIKLSNpbmNsdWRl
ICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCi0jaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgi
Ci0jaW5jbHVkZSAiV0FTTUNhbGxpbmdDb252ZW50aW9uLmgiCi0jaW5jbHVkZSAiV0FTTUZ1bmN0
aW9uUGFyc2VyLmgiCi0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotCi12b2lkIGR1bXBQcm9jZWR1cmUodm9pZCogcHRyKQotewotICAgIEpTQzo6QjM6
OlByb2NlZHVyZSogcHJvYyA9IHN0YXRpY19jYXN0PEpTQzo6QjM6OlByb2NlZHVyZSo+KHB0cik7
Ci0gICAgcHJvYy0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotfQotCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdBU00gewotCi1uYW1lc3BhY2UgewotCi11c2luZyBuYW1lc3BhY2UgQjM7Ci0K
LWNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1pbmxpbmUgQjM6Ok9wY29kZSB0b0IzT3Ao
QmluYXJ5T3BUeXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSNkZWZpbmUgQ1JFQVRFX0NB
U0UobmFtZSwgb3AsIGIzb3ApIGNhc2UgQmluYXJ5T3BUeXBlOjpuYW1lOiByZXR1cm4gYjNvcDsK
LSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkKLSN1bmRlZiBDUkVBVEVf
Q0FTRQotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxp
bmUgQjM6Ok9wY29kZSB0b0IzT3AoVW5hcnlPcFR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkg
ewotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBvcCwgYjNvcCkgY2FzZSBVbmFyeU9wVHlwZTo6
bmFtZTogcmV0dXJuIGIzb3A7Ci0gICAgRk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChDUkVBVEVfQ0FT
RSkKLSN1bmRlZiBDUkVBVEVfQ0FTRQotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi1jbGFzcyBCM0lSR2VuZXJhdG9yIHsKLXByaXZhdGU6Ci0gICAgY2xhc3Mg
TGF6eUJsb2NrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExhenlCbG9jayhCYXNpY0Jsb2NrKiBi
bG9jaykKLSAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9i
bG9jazsgfQotCi0gICAgICAgIEJhc2ljQmxvY2sqIGdldChQcm9jZWR1cmUmIHByb2MpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghbV9ibG9jaykKLSAgICAgICAgICAgICAgICBtX2Jsb2Nr
ID0gcHJvYy5hZGRCbG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2s7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1fYmxvY2spCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCpt
X2Jsb2NrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlVu
aW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQmFzaWNC
bG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgc3RydWN0
IENvbnRyb2xEYXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBUeXBl
IHNpZ25hdHVyZSwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIsIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG51bGxwdHIpCi0gICAgICAgICAgICA6IGNvbnRpbnVhdGlvbihjb250aW51
YXRpb24pCi0gICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHNpZ25hdHVyZSAhPSBWb2lkKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocHJvYy5hZGRWYXJpYWJsZSh0b0IzVHlwZShzaWduYXR1cmUpKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJ
ZjoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAiKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIkJsb2NrOiAiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgotICAgICAgICAgICAgICAgIG91dC5wcmludCgi
TG9vcDogICIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsIGNvbnRpbnVhdGlvbiwgIiwgU3BlY2lh
bDogIik7Ci0gICAgICAgICAgICBpZiAoc3BlY2lhbCkKLSAgICAgICAgICAgICAgICBvdXQucHJp
bnQoKnNwZWNpYWwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiTm9uZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNwZWNpYWwpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEJsb2NrVHlwZTo6QmxvY2s7Ci0gICAgICAgICAgICBpZiAoY29udGludWF0aW9uKQotICAg
ICAgICAgICAgICAgIHJldHVybiBCbG9ja1R5cGU6OklmOwotICAgICAgICAgICAgcmV0dXJuIEJs
b2NrVHlwZTo6TG9vcDsKLSAgICAgICAgfQotCi0gICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNp
YWw7Ci0gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uLmdldChwcm9jKTsKLSAgICAgICAg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIEIzSVJHZW5lcmF0b3I7Ci0g
ICAgICAgIC8vIFdlIHVzZSBhIExhenlCbG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBzaW5jZSBC
Mzo6dmFsaWRhdGUgZG9lcyBub3QgbGlrZSBvcnBoYW5lZCBibG9ja3MuIE5vdGUsCi0gICAgICAg
IC8vIGl0J3MgcG9zc2libGUgdG8gY3JlYXRlIGFuIG9ycGhhbmVkIGJsb2NrIGJ5IGRvaW5nIHNv
bWV0aGluZyBsaWtlIChibG9jayAocmV0dXJuICguLi4pKSkuIEluCi0gICAgICAgIC8vIHRoYXQg
ZXhhbXBsZSwgaWYgd2UgZWFnZXJseSBhbGxvY2F0ZSBhIEJhc2ljQmxvY2sgZm9yIHRoZSBjb250
aW51YXRpb24gaXQgd2lsbCBuZXZlciBiZSByZWFjaGFibGUuCi0gICAgICAgIExhenlCbG9jayBj
b250aW51YXRpb247Ci0gICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0gICAgICAgIFZlY3Rv
cjxWYXJpYWJsZSosIDE+IHJlc3VsdDsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBWYWx1ZSogRXhw
cmVzc2lvblR5cGU7Ci0gICAgdHlwZWRlZiBDb250cm9sRGF0YSBDb250cm9sVHlwZTsKLSAgICB0
eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7Ci0gICAgdHlw
ZWRlZiBWZWN0b3I8VmFyaWFibGUqLCAxPiBSZXN1bHRMaXN0OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsKLQotICAgIEIzSVJH
ZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2VkQ2FsbD4mIHVubGlu
a2VkQ2FsbHMpOwotCi0gICAgdm9pZCBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7
Ci0gICAgdm9pZCBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUg
YWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwotCi0gICAgLy8gTG9jYWxzCi0gICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7Ci0KLSAgICAvLyBNZW1vcnkKLSAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwotCi0gICAgLy8gQmFz
aWMgb3BlcmF0b3JzCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5T3AoQmluYXJ5
T3BUeXBlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5hcnlPcChV
bmFyeU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
LQotICAgIC8vIENvbnRyb2wgZmxvdwotICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7Ci0gICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwotICAgIENvbnRyb2xEYXRhIFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJl
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJik7Ci0K
LSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNo
KENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9j
ayhDb250cm9sRGF0YSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwotCi0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29u
c3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwotCi0gICAgYm9vbCBpc0NvbnRpbnVhdGlvblJlYWNoYWJs
ZShDb250cm9sRGF0YSYpOwotCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlw
ZT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7
Ci0KLXByaXZhdGU6Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50
ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXpl
T2ZPcCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBPcmlnaW4s
IEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0
U3RvcmVPcChTdG9yZU9wVHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLQotICAgIHZvaWQgdW5pZnkoVmFy
aWFibGUqIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsKLSAgICB2b2lkIHVu
aWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVz
dWx0TGlzdCYgc3RhY2spOwotCi0gICAgTWVtb3J5KiBtX21lbW9yeTsKLSAgICBQcm9jZWR1cmUm
IG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKLSAgICBWZWN0b3I8VmFy
aWFibGUqPiBtX2xvY2FsczsKLSAgICAvLyBtX3VubGlrZWRDYWxscyBpcyBsaXN0IG9mIGVhY2gg
Y2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQg
YmUgcGF0Y2hlZCB3aXRoLgotICAgIFZlY3RvcjxVbmxpbmtlZENhbGw+JiBtX3VubGlua2VkQ2Fs
bHM7Ci0gICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUjsKLSAgICBHUFJSZWcgbV9tZW1vcnlTaXpl
R1BSOwotfTsKLQotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1vcnkqIG1lbW9yeSwg
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZENhbGw+JiB1bmxpbmtlZENhbGxz
KQotICAgIDogbV9tZW1vcnkobWVtb3J5KQotICAgICwgbV9wcm9jKHByb2NlZHVyZSkKLSAgICAs
IG1fdW5saW5rZWRDYWxscyh1bmxpbmtlZENhbGxzKQotewotICAgIG1fY3VycmVudEJsb2NrID0g
bV9wcm9jLmFkZEJsb2NrKCk7Ci0KLSAgICBpZiAobV9tZW1vcnkpIHsKLSAgICAgICAgbV9tZW1v
cnlCYXNlR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVy
OwotICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BSKTsKLSAgICAgICAg
QVNTRVJUKCFtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXpl
T2Zmc2V0KTsKLSAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lz
dGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOwotICAgICAgICBmb3IgKGNvbnN0
IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIGluZm8gOiBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJz
KCkuc2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihpbmZvLnNp
emVSZWdpc3Rlcik7Ci0KLSAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgewot
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBw
aW5uZWRHUFIpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVud2luZCB0aGUg
c3RhY2sgYW5kIHRocm93IGEgSlMgZXhjZXB0aW9uLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMzNTEKLSAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7
Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9pZCBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChU
eXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KQotewotICAgIG1fbG9jYWxzLnJlc2VydmVDYXBhY2l0
eShtX2xvY2Fscy5zaXplKCkgKyBjb3VudCk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIG1fbG9jYWxzLmFwcGVuZChtX3Byb2MuYWRkVmFyaWFibGUo
dG9CM1R5cGUodHlwZSkpKTsKLX0KLQotdm9pZCBCM0lSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMo
Y29uc3QgVmVjdG9yPFR5cGU+JiB0eXBlcykKLXsKLSAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUo
KSk7Ci0gICAgbV9sb2NhbHMuZ3Jvdyh0eXBlcy5zaXplKCkpOwotICAgIHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLmxvYWRBcmd1bWVudHModHlwZXMsIG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIE9y
aWdpbigpLAotICAgICAgICBbJl0gKEV4cHJlc3Npb25UeXBlIGFyZ3VtZW50LCB1bnNpZ25lZCBp
KSB7Ci0gICAgICAgICAgICBWYXJpYWJsZSogYXJndW1lbnRWYXJpYWJsZSA9IG1fcHJvYy5hZGRW
YXJpYWJsZShhcmd1bWVudC0+dHlwZSgpKTsKLSAgICAgICAgICAgIG1fbG9jYWxzW2ldID0gYXJn
dW1lbnRWYXJpYWJsZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBhcmd1bWVudFZhcmlhYmxlLCBhcmd1
bWVudCk7Ci0gICAgICAgIH0pOwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6OmdldExvY2FsKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIEFTU0VSVChtX2xv
Y2Fsc1tpbmRleF0pOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBPcmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fbG9jYWxz
W2luZGV4XSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPiht
X3Byb2MsIEIzOjpTZXQsIE9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tB
bmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKLXsKLSAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BS
ICYmIG1fbWVtb3J5U2l6ZUdQUik7Ci0gICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNl
dCA+IG9mZnNldCk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hl
Y2tWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXpl
T2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsKLSAgICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBwb2ludGVyKTsKLSAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3By
b2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeUJhc2VHUFIpOwotfQotCi1pbmxpbmUgdWlu
dDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewot
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDhVOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgotICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDhVOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQxNlM6Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgotICAgICAgICBy
ZXR1cm4gMjsKLSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6Ci0gICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkMzJTOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKLSAgICAg
ICAgcmV0dXJuIDQ7Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgotICAgICAgICByZXR1
cm4gODsKLSAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6Ci0gICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkMTZVOgotICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKLSAgICBjYXNl
IExvYWRPcFR5cGU6OkY2NExvYWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzogewotICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQ4Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdp
biwgdmFsdWUpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOiB7Ci0g
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQ4Wiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgIH0KLQotICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4sIHBv
aW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOiB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlMsIG9yaWdpbiwgcG9pbnRl
ciwgb2Zmc2V0KTsKLSAgICB9Ci0gICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOiB7Ci0g
ICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9y
aWdpbiwgdmFsdWUpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDogewot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKTsKLSAgICB9Ci0KLSAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2lu
LCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4sIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlM6IHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2lu
LCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4sIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQ6IHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbiwgcG9pbnRlcik7
Ci0gICAgfQotCi0gICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7Ci0gICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEZs
b2F0LCBvcmlnaW4sIHBvaW50ZXIpOwotICAgIH0KLQotICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0
TG9hZDogewotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBEb3VibGUsIG9yaWdpbiwgcG9pbnRlcik7Ci0gICAgfQotCi0g
ICAgLy8gQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlogeWV0LgotICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STMyTG9hZDE2VToKLSAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1i
b29sIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KQotewotICAgIEFT
U0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwotCi0gICAgcmVzdWx0ID0gZW1pdExvYWRP
cChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNl
dCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlu
bGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQotewotICAgIHN3aXRj
aCAob3ApIHsKLSAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6Ci0gICAgY2FzZSBTdG9y
ZU9wVHlwZTo6STY0U3RvcmU4OgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJMzJTdG9yZTE2OgotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6Ci0gICAg
ICAgIHJldHVybiAyOwotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlOgotICAgIGNhc2Ug
U3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6Ci0gICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6
Ci0gICAgICAgIHJldHVybiA0OwotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgotICAg
IGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotCi1pbmxpbmUgdm9pZCBCM0lS
R2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgT3JpZ2luIG9yaWdpbiwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNl
dCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4
OgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOwotICAgICAgICBGQUxMVEhST1VHSDsKLQotICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIs
IG9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlMTY6Ci0gICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7Ci0gICAgICAgIEZBTExUSFJPVUdIOwotCi0g
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2LCBvcmlnaW4sIHZhbHVlLCBw
b2ludGVyLCBvZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFN0b3JlT3BUeXBl
OjpJNjRTdG9yZTMyOgotICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbiwgdmFsdWUpOwotICAgICAgICBGQUxMVEhST1VH
SDsKLQotICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgotICAgIGNhc2UgU3RvcmVPcFR5
cGU6OkkzMlN0b3JlOgotICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgotICAgIGNhc2Ug
U3RvcmVPcFR5cGU6OkY2NFN0b3JlOgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyLCBvZmZz
ZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLWJvb2wgQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZz
ZXQpCi17Ci0gICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7Ci0KLSAgICBlbWl0
U3RvcmVPcChvcCwgT3JpZ2luKCksIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIs
IG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9yOjp1bmFyeU9wKFVuYXJ5T3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCB0b0IzT3Aob3ApLCBP
cmlnaW4oKSwgYXJnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCM0lSR2VuZXJhdG9y
OjpiaW5hcnlPcChCaW5hcnlPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgdG9CM09wKG9wKSwgT3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQjNJUkdlbmVyYXRvcjo6
RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50
NjRfdCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEludDMyOgotICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7Ci0gICAgY2FzZSBJbnQ2
NDoKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCB2YWx1ZSk7Ci0gICAgY2FzZSBGbG9hdDoKLSAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSkp
OwotICAgIGNhc2UgRG91YmxlOgotICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8ZG91
YmxlPih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0KLQotQjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUp
Ci17Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlKTsKLX0KLQotQjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25h
dHVyZSkKLXsKLSAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIE9yaWdp
bigpLCBib2R5KTsKLSAgICBib2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0g
ICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2Ms
IHNpZ25hdHVyZSwgYm9keSk7Ci19Ci0KLUIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJH
ZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUp
Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZG8gc29tZSBraW5kIG9mIHN0YWNrIHBh
c3NpbmcuCi0KLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0KLSAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIE9yaWdpbigpLCBjb25kaXRp
b24pOwotICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0
YWtlbiksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOwotICAgIHRha2VuLT5hZGRQcmVkZWNl
c3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbm90VGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3Vy
cmVudEJsb2NrKTsKLQotICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Ci0gICAgcmV0dXJuIENv
bnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBub3RUYWtlbiwgY29udGludWF0aW9uKTsKLX0K
LQotYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhKQotewotICAg
IEFTU0VSVChkYXRhLmNvbnRpbnVhdGlvbik7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNw
ZWNpYWw7Ci0gICAgLy8gQ2xlYXIgdGhlIHNwZWNpYWwgcG9pbnRlciBzbyB0aGF0IHdoZW4gd2Ug
cGFyc2UgdGhlIGVuZCB3ZSBkb24ndCB0aGluayB0aGF0IHRoaXMgYmxvY2sgaXMgYW4gaWYgYmxv
Y2suCi0gICAgZGF0YS5zcGVjaWFsID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoZGF0YS50eXBlKCkg
PT0gQmxvY2tUeXBlOjpCbG9jayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpCi17
Ci0gICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7Ci0gICAgaWYgKHJldHVyblZh
bHVlcy5zaXplKCkpCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBCMzo6UmV0dXJuLCBPcmlnaW4oKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJ
UkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpCi17Ci0gICAgQmFz
aWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaChtX3Byb2MpOwotICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHQpOwotICAgIGlm
IChjb25kaXRpb24pIHsKLSAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9j
LmFkZEJsb2NrKCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQjM6OkJyYW5jaCwgT3JpZ2luKCksIGNvbmRpdGlvbik7Ci0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBGcmVxdWVudGVk
QmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9j
dXJyZW50QmxvY2spOwotICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3Vy
cmVudEJsb2NrKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7Ci0gICAgICAg
IHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xEYXRh
JiBkYXRhLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQotewotICAgIGlmICghZGF0
YS5jb250aW51YXRpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7Ci0gICAgaWYgKGRh
dGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgQVNTRVJUKCFkYXRhLnNwZWNp
YWwtPnNpemUoKSAmJiAhZGF0YS5zcGVjaWFsLT5zdWNjZXNzb3JzKCkuc2l6ZSgpKTsKLSAgICAg
ICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWxzZSBibG9jayB3ZSBuZWVkIHRvIHBvaW50
IHRoZSBub3RUYWtlbiBicmFuY2ggdG8gdGhlIGNvbnRpbnVhdGlvbi4KLSAgICAgICAgZGF0YS5z
cGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSk7Ci0g
ICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2soY29udGlu
dWF0aW9uKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVj
aWFsKTsKLSAgICB9Ci0KLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ss
IGRhdGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGNvbnRpbnVhdGlvbik7Ci0gICAgY29udGludWF0aW9u
LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBj
b250aW51YXRpb247Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbCh1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9u
JiBpbmZvLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KQotewotICAgIEFTU0VSVChpbmZvLnNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSA9PSBh
cmdzLnNpemUoKSk7Ci0KLSAgICBUeXBlIHJldHVyblR5cGUgPSBpbmZvLnNpZ25hdHVyZS0+cmV0
dXJuVHlwZTsKLQotICAgIHNpemVfdCBjYWxsSW5kZXggPSBtX3VubGlua2VkQ2FsbHMuc2l6ZSgp
OwotICAgIG1fdW5saW5rZWRDYWxscy5ncm93KGNhbGxJbmRleCArIDEpOwotICAgIHJlc3VsdCA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2Nr
LCBPcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCi0gICAgICAgIFsmXSAoUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
LnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQuY2FsbCgpOwotCi0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICBtX3VubGlu
a2VkQ2FsbHNbY2FsbEluZGV4XSA9IHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGwpLCBmdW5j
dGlvbkluZGV4IH07Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQjNJUkdlbmVyYXRvcjo6aXNDb250
aW51YXRpb25SZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpCi17Ci0gICAgLy8gSWYgbm90aGlu
ZyB0YXJnZXRzIHRoZSBjb250aW51YXRpb24gb2YgdGhlIGN1cnJlbnQgYmxvY2sgdGhlbiB3ZSBk
b24ndCB3YW50IHRvIGNyZWF0ZQotICAgIC8vIGFuIG9ycGhhbmVkIEJhc2ljQmxvY2sgc2luY2Ug
aXQgY2FuJ3QgYmUgcmVhY2hlZCBieSBmYWxsdGhyb3VnaC4KLSAgICBpZiAoIWRhdGEuY29udGlu
dWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2N1cnJlbnRCbG9jayA9IGRh
dGEuY29udGludWF0aW9uLmdldChtX3Byb2MpOwotICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKSB7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFkZFByZWRlY2Vzc29yKGRhdGEuc3BlY2lhbCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFyaWFibGUqIHZhcmlh
YmxlLCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCi17Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZhcmlhYmxlLCBzb3Vy
Y2UpOwotfQotCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0
IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVzdWx0KQotewotICAg
IEFTU0VSVChyZXN1bHQuc2l6ZSgpID49IHJlc3VsdFN0YWNrLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFN0YWNrLnNpemUoKTsgKytpKQotICAgICAgICB1bmlm
eShyZXN1bHRbaV0sIHJlc3VsdFN0YWNrW2ldKTsKLX0KLQotdm9pZCBCM0lSR2VuZXJhdG9yOjpk
dW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKLXsKLSAgICBkYXRhTG9nTG4oIlByb2Nlc3Npbmcg
R3JhcGg6Iik7Ci0gICAgZGF0YUxvZyhtX3Byb2MpOwotICAgIGRhdGFMb2dMbigiV2l0aCBjdXJy
ZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7Ci0gICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0
YWNrOiIpOwotICAgIGZvciAoY29uc3QgQ29udHJvbFR5cGUmIGRhdGEgOiBjb250cm9sU3RhY2sp
Ci0gICAgICAgIGRhdGFMb2dMbigiICAiLCBkYXRhKTsKLSAgICBkYXRhTG9nTG4oIkV4cHJlc3Np
b25TdGFjazoiKTsKLSAgICBmb3IgKGNvbnN0IEV4cHJlc3Npb25UeXBlJiBleHByZXNzaW9uIDog
ZXhwcmVzc2lvblN0YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgKmV4cHJlc3Npb24pOwot
ICAgIGRhdGFMb2dMbigiXG4iKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLQot
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYXRlSlNXcmFwcGVyKFZNJiB2
bSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtYWlu
RnVuY3Rpb24sIE1lbW9yeSogbWVtb3J5KQotewotICAgIFByb2NlZHVyZSBwcm9jOwotICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygpOwotCi0gICAgLy8gQ2hlY2sgYXJndW1l
bnQgY291bnQgaXMgc2FuZS4KLSAgICBWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKTsKLSAgICBW
YWx1ZSogb2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KHByb2MsIE9yaWdpbigpLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc2l6ZW9m
KFJlZ2lzdGVyKSk7Ci0gICAgVmFsdWUqIGFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCi0gICAgICAgIGJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGZyYW1lUG9pbnRlciwgb2Zm
U2V0T2ZBcmd1bWVudENvdW50KSk7Ci0KLSAgICBWYWx1ZSogZXhwZWN0ZWRBcmd1bWVudENvdW50
ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBzaWduYXR1
cmUtPmFyZ3VtZW50cy5zaXplKCkpOwotCi0gICAgQ2hlY2tWYWx1ZSogYXJndW1lbnRDb3VudENo
ZWNrID0gYmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVjaywgT3JpZ2luKCks
Ci0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlLCBPcmlnaW4oKSwg
ZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVudENvdW50KSk7Ci0gICAgYXJndW1lbnRDb3Vu
dENoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgfSk7
Ci0KLSAgICAvLyBNb3ZlIG1lbW9yeSB2YWx1ZXMgdG8gdGhlIGFwcHJvcmlhdGUgcGxhY2VzLCBp
ZiBuZWVkZWQuCi0gICAgVmFsdWUqIGJhc2VNZW1vcnkgPSBudWxscHRyOwotICAgIFZlY3RvcjxW
YWx1ZSo+IHNpemVzOwotICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgYmFzZU1lbW9yeSA9IGJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1lbW9yeS0+bWVt
b3J5KCkpOwotICAgICAgICBWYWx1ZSogc2l6ZSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIGJsb2NrLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxjaGFyKj4o
bWVtb3J5KSArIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKLSAgICAgICAgc2l6ZXMucmVzZXJ2
ZUNhcGFjaXR5KG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkp
OwotICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6
ZVJlZ2lzdGVycykgewotICAgICAgICAgICAgc2l6ZXMuYXBwZW5kKGJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIHNpemUsCi0gICAgICAgICAgICAgICAgYmxvY2st
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpbmZvLnNpemVPZmZzZXQp
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgb3VyIGFyZ3VtZW50cy4KLSAgICBW
ZWN0b3I8VmFsdWUqPiBhcmd1bWVudHM7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5sb2Fk
QXJndW1lbnRzKHNpZ25hdHVyZS0+YXJndW1lbnRzLCBwcm9jLCBibG9jaywgT3JpZ2luKCksIFsm
XSAoVmFsdWUqIGFyZ3VtZW50LCB1bnNpZ25lZCkgewotICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KGFyZ3VtZW50KTsKLSAgICB9KTsKLQotICAgIC8vIE1vdmUgdGhlIGFyZ3VtZW50cyBpbnRvIHBs
YWNlLgotICAgIFZhbHVlKiByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENh
bGwocHJvYywgYmxvY2ssIE9yaWdpbigpLCBhcmd1bWVudHMsIHRvQjNUeXBlKHNpZ25hdHVyZS0+
cmV0dXJuVHlwZSksIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7Ci0gICAgICAg
IGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzaXplcy5zaXplKCkgPT0gbWVtb3J5
LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShiYXNlTWVtb3J5LCBWYWx1ZVJlcDo6
cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXIpKSk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc2l6ZXNbaV0s
IFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzW2ld
LnNpemVSZWdpc3RlcikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGws
IEZ1bmN0aW9uUHRyKG1haW5GdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHJlc3Vs
dCwgaWYgbmVlZGVkLgotICAgIGlmIChzaWduYXR1cmUtPnJldHVyblR5cGUgIT0gVm9pZCkKLSAg
ICAgICAgYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBPcmln
aW4oKSwgcmVzdWx0KTsKLSAgICBlbHNlCi0gICAgICAgIGJsb2NrLT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCkpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIFZlY3Rvcjx1aW50OF90
PiYgc291cmNlLCBNZW1vcnkqIG1lbW9yeSwgRnVuY3Rpb25JbmZvcm1hdGlvbiBpbmZvLCBjb25z
dCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucywgdW5zaWduZWQgb3B0TGV2
ZWwpCi17Ci0gICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uQ29tcGls
YXRpb24+KCk7Ci0KLSAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIzSVJHZW5lcmF0b3Ig
Y29udGV4dChtZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LT51bmxpbmtlZENhbGxzKTsKLSAgICBG
dW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgc291cmNlLCBpbmZv
LCBmdW5jdGlvbnMpOwotICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBwcm9jZWR1cmUucmVzZXRSZWFjaGFiaWxpdHko
KTsKLSAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJBZnRlciBwYXJzaW5nOlxuIik7Ci0KLSAgICBm
aXhTU0EocHJvY2VkdXJlKTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUG9z
dCBTU0E6ICIsIHByb2NlZHVyZSk7Ci0KLSAgICByZXN1bHQtPmNvZGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbXBpbGF0aW9uPih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7Ci0gICAgcmVzdWx0LT5q
c0VudHJ5UG9pbnQgPSBjcmVhdGVKU1dyYXBwZXIodm0sIGluZm8uc2lnbmF0dXJlLCByZXN1bHQt
PmNvZGUtPmNvZGUoKSwgbWVtb3J5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM0lSR2VuZXJhdG9yLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYmM4M2YyMTI2ZjkyYzdiYjY5OTIzYTllNzQ3NzQxM2Nm
NWU5NzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1
ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldBU01Gb3Jt
YXQuaCIKLQotZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwotCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1jbGFzcyBNZW1vcnk7Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBWZWN0b3I8dWlu
dDhfdD4mLCBNZW1vcnkqLCBGdW5jdGlvbkluZm9ybWF0aW9uLCBjb25zdCBWZWN0b3I8RnVuY3Rp
b25JbmZvcm1hdGlvbj4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdDb252ZW50aW9uLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhY2JiYzI3ODBlNTU3NjEzNmYxOTBkYTEzOTJj
NGVmMzQ2NGQ1YWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdDb252ZW50aW9uLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV0FTTUNh
bGxpbmdDb252ZW50aW9uLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXQVNN
IHsKLQotY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdDb252ZW50aW9uKCkK
LXsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBz
dGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3Rh
dGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY0pT
Q0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgewotICAgICAgICBzdGF0aWNKU0NDYWxsaW5n
Q29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9yPFJlZz4oKSwgUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gc3Rh
dGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Ci19Ci0KLWNvbnN0IFdBU01DYWxsaW5nQ29udmVudGlv
biYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkKLXsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNXQVNNQ2FsbGluZ0NvbnZlbnRpb247Ci0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dBU01DYWxsaW5nQ29udmVudGlvbkZsYWc7
Ci0gICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV0FTTUNhbGxpbmdDb252ZW50aW9uRmxhZywgW10g
KCkgewotICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJlZ2lzdGVycyhHUFJJbmZvOjpu
dW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgICAg
IGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkp
OwotCi0gICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVnaXN0ZXJzKEZQUkluZm86Om51
bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQotICAgICAgICAgICAg
ZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7
Ci0KLSAgICAgICAgc3RhdGljV0FTTUNhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVjdChXVEZNb3Zl
KGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1bWVudFJlZ2lzdGVycyksIFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIH0pOwotCi0gICAgcmV0dXJu
IHN0YXRpY1dBU01DYWxsaW5nQ29udmVudGlvbjsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OldBU00KLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxNmViNTQ4NzBkMmE1YmU4ZDVkMDNlZTZlZDU0YjJjYmVkZWU0ZWNmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgotI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdW
YWx1ZS5oIgotI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgotI2luY2x1ZGUgIkIzQ29uc3Q2NFZh
bHVlLmgiCi0jaW5jbHVkZSAiQjNDb25zdHJhaW5lZFZhbHVlLmgiCi0jaW5jbHVkZSAiQjNNZW1v
cnlWYWx1ZS5oIgotI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCi0jaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKLSNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgotI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJS
ZWdpc3RlclNldC5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXQVNNIHsKLQotdHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2ln
bmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5cGUpOwotCi10ZW1wbGF0ZTx1bnNpZ25lZCBo
ZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KLWNsYXNzIENhbGxpbmdDb252ZW50
aW9uIHsKLXB1YmxpYzoKLSAgICBDYWxsaW5nQ29udmVudGlvbihWZWN0b3I8UmVnPiYmIGdwckFy
Z3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0
ZXJzKQotICAgICAgICA6IG1fZ3ByQXJncyhncHJBcmdzKQotICAgICAgICAsIG1fZnByQXJncyhm
cHJBcmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhjYWxsZWVTYXZlUmVnaXN0
ZXJzKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxs
QXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5cGUsIHNpemVfdCYg
Y291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoY291
bnQgPCByZWdBcmdzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBCMzo6VmFsdWVSZXA6OnJl
ZyhyZWdBcmdzW2NvdW50KytdKTsKLQotICAgICAgICBjb3VudCsrOwotICAgICAgICBCMzo6VmFs
dWVSZXAgcmVzdWx0ID0gQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KTsK
LSAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQsIHR5cGUpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFs
bEFyZ3VtZW50KEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgZ3BBcmd1bWVudENvdW50LCBzaXplX3Qm
IGZwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEIzOjpJbnQzMjoKLSAgICAgICAgY2Fz
ZSBCMzo6SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9n
cHJBcmdzLCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKLSAgICAgICAgY2Fz
ZSBCMzo6RmxvYXQ6Ci0gICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAgICAgICAgIHJldHVy
biBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRDb3VudCwg
c3RhY2tPZmZzZXQpOwotICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQot
cHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBsb2FkQXJn
dW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRUeXBlcywgQjM6OlByb2NlZHVyZSYg
cHJvYywgQjM6OkJhc2ljQmxvY2sqIGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2lu
dGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIs
IG9yaWdpbik7Ci0KLSAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7Ci0gICAgICAg
IHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3Qgc3RhY2tPZmZzZXQg
PSBoZWFkZXJTaXplOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRU
eXBlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQjM6OlR5cGUgdHlwZSA9IHRvQjNUeXBl
KGFyZ3VtZW50VHlwZXNbaV0pOwotICAgICAgICAgICAgQjM6OlZhbHVlKiBhcmd1bWVudDsKLSAg
ICAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXAgPSBtYXJzaGFsbEFyZ3VtZW50KHR5cGUsIGdwQXJn
dW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7Ci0gICAgICAgICAgICBp
ZiAocmVwLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICBhcmd1bWVudCA9IGJsb2NrLT5hcHBl
bmROZXc8QjM6OkFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIG9yaWdpbiwgcmVwLnJlZygpKTsKLSAg
ICAgICAgICAgICAgICBpZiAodHlwZSA9PSBCMzo6SW50MzIpCi0gICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpUcnVuYywg
b3JpZ2luLCBhcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhvdyBkbyBJIGdl
dCBhIGZsb2F0IGZyb20gYSBGUFI/IFdlIGRvbid0IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnRzIHll
dCBzbyBpdCdzIG5vdCBhIGJpZyBkZWFsLi4uIHlldC4KLSAgICAgICAgICAgICAgICAvLyBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3NzAKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlcC5pc1N0YWNrQXJndW1lbnQo
KSk7Ci0gICAgICAgICAgICAgICAgQjM6OlZhbHVlKiBhZGRyZXNzID0gYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KHByb2MsIEIzOjpBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLAotICAgICAg
ICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9y
aWdpbiwgcmVwLm9mZnNldEZyb21TUCgpKSk7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBi
bG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6OkxvYWQsIHR5cGUsIG9y
aWdpbiwgYWRkcmVzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmdW5jdG9yKGFyZ3Vt
ZW50LCBpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0
aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJh
dGlvbi4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIEIzOjpWYWx1ZSogc2V0
dXBDYWxsKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9y
aWdpbiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxCMzo6VmFsdWUqPiYgYXJndW1lbnRzLCBCMzo6VHlw
ZSByZXR1cm5UeXBlLCBjb25zdCBGdW5jdG9yJiBwYXRjaHBvaW50RnVuY3RvcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3Qg
ZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVy
U2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLQotICAgICAgICBWZWN0b3I8QjM6OkNv
bnN0cmFpbmVkVmFsdWU+IGNvbnN0cmFpbmVkQXJndW1lbnRzOwotICAgICAgICBmb3IgKEIzOjpW
YWx1ZSogYXJndW1lbnQgOiBhcmd1bWVudHMpIHsKLSAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCBy
ZXAgPSBtYXJzaGFsbEFyZ3VtZW50KGFyZ3VtZW50LT50eXBlKCksIGdwQXJndW1lbnRDb3VudCwg
ZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7Ci0gICAgICAgICAgICBjb25zdHJhaW5lZEFy
Z3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJndW1lbnQsIHJlcCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkp
OwotCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIHJldHVyblR5cGUsIG9yaWdpbik7Ci0g
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNo
UmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNl
dDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZFZlY3Rvcihjb25zdHJhaW5lZEFyZ3VtZW50cyk7Ci0gICAgICAgIHBhdGNocG9pbnRGdW5j
dG9yKHBhdGNocG9pbnQpOwotCi0gICAgICAgIGlmIChyZXR1cm5UeXBlID09IEIzOjpWb2lkKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0
Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
LSAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPFJl
Zz4gbV9ncHJBcmdzOwotICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZnByQXJnczsKLSAgICBjb25z
dCBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgY29uc3QgUmVnaXN0ZXJT
ZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJzOwotfTsKLQotaW5saW5lIHVuc2lnbmVkIG5leHRKU0NP
ZmZzZXQodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUpCi17Ci0gICAgcmV0dXJuIGN1
cnJlbnRPZmZzZXQgKyBzaXplb2YoUmVnaXN0ZXIpOwotfQotCi1jb25zdGV4cHIgdW5zaWduZWQg
anNjSGVhZGVyU2l6ZSA9IEV4ZWNTdGF0ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9m
KFJlZ2lzdGVyKTsKLXR5cGVkZWYgQ2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4
dEpTQ09mZnNldD4gSlNDQ2FsbGluZ0NvbnZlbnRpb247Ci0KLXR5cGVkZWYgSlNDQ2FsbGluZ0Nv
bnZlbnRpb24gV0FTTUNhbGxpbmdDb252ZW50aW9uOwotCi1jb25zdCBKU0NDYWxsaW5nQ29udmVu
dGlvbiYganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLWNvbnN0IFdBU01DYWxsaW5nQ29udmVudGlv
biYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNN
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRm9ybWF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNDZmZjM1YWRm
YWIyMDZmYzhmMmQ3MDRhZTU0NzU5ZTBlZGFjZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1h
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogQ29weXJp
Z2h0IChjKSAyMDE1IGJ5IHRoZSByZXBvc2l0b3J5IGF1dGhvcnMgb2YKLSAqIFdlYkFzc2VtYmx5
L3BvbHlmaWxsLXByb3RvdHlwZS0xLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIkIz
VHlwZS5oIgotI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIEpTRnVuY3Rpb247Ci0KLW5hbWVzcGFjZSBXQVNNIHsKLQotZW51bSBUeXBlIDogdWlu
dDhfdCB7Ci0gICAgVm9pZCwKLSAgICBJMzIsCi0gICAgSTY0LAotICAgIEYzMiwKLSAgICBGNjQs
Ci0gICAgTGFzdFZhbHVlVHlwZSA9IEY2NCwKLX07Ci0KLXN0YXRpY19hc3NlcnQoSTMyID09IDEs
ICJXQVNNIG5lZWRzIEkzMiB0byBoYXZlIHRoZSB2YWx1ZSAxIik7Ci1zdGF0aWNfYXNzZXJ0KEk2
NCA9PSAyLCAiV0FTTSBuZWVkcyBJNjQgdG8gaGF2ZSB0aGUgdmFsdWUgMiIpOwotc3RhdGljX2Fz
c2VydChGMzIgPT0gMywgIldBU00gbmVlZHMgRjMyIHRvIGhhdmUgdGhlIHZhbHVlIDMiKTsKLXN0
YXRpY19hc3NlcnQoRjY0ID09IDQsICJXQVNNIG5lZWRzIEY2NCB0byBoYXZlIHRoZSB2YWx1ZSA0
Iik7Ci0KLWlubGluZSBCMzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBJMzI6IHJldHVybiBCMzo6SW50MzI7Ci0gICAgY2FzZSBJNjQ6
IHJldHVybiBCMzo6SW50NjQ7Ci0gICAgY2FzZSBGMzI6IHJldHVybiBCMzo6RmxvYXQ7Ci0gICAg
Y2FzZSBGNjQ6IHJldHVybiBCMzo6RG91YmxlOwotICAgIGNhc2UgVm9pZDogcmV0dXJuIEIzOjpW
b2lkOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJMzI6Ci0gICAgY2FzZSBJNjQ6Ci0gICAgY2Fz
ZSBGMzI6Ci0gICAgY2FzZSBGNjQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQotc3RydWN0
IFNpZ25hdHVyZSB7Ci0gICAgVHlwZSByZXR1cm5UeXBlOwotICAgIFZlY3RvcjxUeXBlPiBhcmd1
bWVudHM7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25JbXBvcnQgewotICAgIFN0cmluZyBmdW5jdGlv
bk5hbWU7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgewotICAgIHVpbnQz
Ml90IHNpZ25hdHVyZUluZGV4OwotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXg7Ci19
OwotCi1zdHJ1Y3QgRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAgdWludDMyX3Qgc2lnbmF0dXJl
SW5kZXg7Ci19OwotCi1zdHJ1Y3QgRnVuY3Rpb25Qb2ludGVyVGFibGUgewotICAgIHVpbnQzMl90
IHNpZ25hdHVyZUluZGV4OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gZnVuY3Rpb25JbmRpY2VzOwot
ICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rpb25zOwotfTsKLQotc3RydWN0IEZ1bmN0aW9u
SW5mb3JtYXRpb24gewotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOwotICAgIHNpemVfdCBzdGFy
dDsKLSAgICBzaXplX3QgZW5kOwotfTsKLQotc3RydWN0IFVubGlua2VkQ2FsbCB7Ci0gICAgQ29k
ZUxvY2F0aW9uQ2FsbCBjYWxsTG9jYXRpb247Ci0gICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXg7Ci19
OwotCi1zdHJ1Y3QgRnVuY3Rpb25Db21waWxhdGlvbiB7Ci0gICAgVmVjdG9yPFVubGlua2VkQ2Fs
bD4gdW5saW5rZWRDYWxsczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBj
b2RlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGpzRW50cnlQb2ludDsK
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVu
Y3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBh
cnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTJlMjhiNTY5OTJiNWRhYmM3
NzA5NjNkNWFkODQ3NDAwNmM2Yjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKLQotI2luY2x1ZGUgIldBU01QYXJzZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1lbnVtIGNsYXNzIEJs
b2NrVHlwZSB7Ci0gICAgSWYsCi0gICAgQmxvY2ssCi0gICAgTG9vcAotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ29udGV4dD4KLWNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlciB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBF
eHByZXNzaW9uVHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBl
IENvbnRyb2xUeXBlOwotCi0gICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgY29u
c3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOwotCi0gICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUJsb2NrKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKE9w
VHlwZSk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJsZUV4cHJl
c3Npb24oT3BUeXBlKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2wo
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKLQotICAgIENvbnRleHQm
IG1fY29udGV4dDsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhwcmVzc2lvblN0
YWNrOwotICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7Ci0gICAgY29uc3Qg
U2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKLSAgICBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1h
dGlvbj4mIG1fZnVuY3Rpb25zOwotICAgIHVuc2lnbmVkIG1fdW5yZWFjaGFibGVCbG9ja3MgeyAw
IH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvLCBjb25z
dCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKLSAgICA6IFBhcnNlcihz
b3VyY2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQotICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCi0gICAgLCBtX3NpZ25hdHVyZSgqaW5mby5zaWduYXR1cmUpCi0gICAgLCBtX2Z1bmN0aW9u
cyhmdW5jdGlvbnMpCi17Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiUGFy
c2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBlbmRpbmcgYXQ6ICIs
IGluZm8uZW5kKTsKLSAgICBtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJlLmFyZ3Vt
ZW50cyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZSgpCi17Ci0gICAgdWludDMyX3QgbG9jYWxDb3VudDsKLSAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7Ci0gICAgICAg
IHVpbnQzMl90IG51bWJlck9mTG9jYWxzOwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG51
bWJlck9mTG9jYWxzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBUeXBl
IHR5cGVPZkxvY2FsOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRleHQuYWRkTG9jYWwo
dHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VC
bG9jaygpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotYm9vbCBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCi17Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgdWludDhfdCBvcDsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSB8fCAhaXNWYWxpZE9w
VHlwZShvcCkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIFdU
Rjo6ZGF0YUxvZ0xuKCJhdHRlbXB0ZWQgdG8gZGVjb2RlIGludmFsaWQgb3A6ICIsIFJhd1BvaW50
ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIsIFJhd1BvaW50
ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBtX3VucmVhY2hhYmxlQmxvY2tzLCAiKTog
IiwgIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6
ICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQuZHVtcChtX2NvbnRyb2xTdGFjaywgbV9leHByZXNzaW9uU3RhY2sp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6RW5kICYmICFtX2NvbnRy
b2xTdGFjay5zaXplKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobV91bnJl
YWNoYWJsZUJsb2NrcykgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVhY2hhYmxlRXhwcmVz
c2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcHJvY2VzcyB1
bnJlYWNoYWJsZSBvcDoiLCBvcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4cHJlc3Npb24oc3RhdGljX2Nh
c3Q8T3BUeXBlPihvcCkpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgLy8gSSdtIG5vdCBzdXJl
IGlmIHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJlLi4uCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wKSBjYXNlIG5h
bWU6Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1ib29sIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsK
LSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkgewotICAgICAgICBFeHBy
ZXNzaW9uVHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAg
IEV4cHJlc3Npb25UeXBlIGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOwotICAg
ICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmJpbmFy
eU9wKHN0YXRpY19jYXN0PEJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdodCwgcmVzdWx0KSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBw
ZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZPUl9FQUNI
X1dBU01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgYXJn
ID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUg
cmVzdWx0OwotICAgICAgICBpZiAoIW1fY29udGV4dC51bmFyeU9wKHN0YXRpY19jYXN0PFVuYXJ5
T3BUeXBlPihvcCksIGFyZywgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NB
U0UpIHsKLSAgICAgICAgdWludDMyX3QgYWxpZ25tZW50OwotICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKGFsaWdubWVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
dWludDMyX3Qgb2Zmc2V0OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBl
IHJlc3VsdDsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQubG9hZChzdGF0aWNfY2FzdDxMb2FkT3BU
eXBlPihvcCksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09Q
KENSRUFURV9DQVNFKSB7Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMihhbGlnbm1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihv
ZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEV4cHJlc3Npb25U
eXBlIHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAg
IHJldHVybiBtX2NvbnRleHQuc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+KG9wKSwgcG9p
bnRlciwgdmFsdWUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0
OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGNvbnN0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIsIGNvbnN0YW50KSk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgT3BUeXBlOjpJNjRDb25z
dDogewotICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQ2NChjb25zdGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0LCBjb25zdGFudCkp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6R2V0TG9j
YWw6IHsKLSAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50
MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBFeHByZXNzaW9u
VHlwZSByZXN1bHQ7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LmdldExvY2FsKGluZGV4LCByZXN1
bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fZXhwcmVzc2lvblN0
YWNrLmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBj
YXNlIE9wVHlwZTo6U2V0TG9jYWw6IHsKLSAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0
KCk7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZhbHVlKTsKLSAg
ICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6Q2FsbDogewotICAgICAgICB1aW50MzJfdCBmdW5jdGlv
bkluZGV4OwotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChmdW5jdGlvbkluZGV4ID49IG1f
ZnVuY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBj
b25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRl
eF07Ci0KLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCkp
OwotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVz
c2lvbjsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBpbmZv
LCBhcmdzLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlm
IChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQotICAgICAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7Ci0gICAgICAgIFR5cGUgaW5saW5lU2lnbmF0
dXJlOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25hdHVyZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKG1f
Y29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKLSAgICAgICAgVHlwZSBpbmxpbmVT
aWduYXR1cmU7Ci0gICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2lnbmF0dXJlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBl
bmQobV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGNhc2UgT3BUeXBlOjpJZjogewotICAgICAgICBUeXBlIGlubGlu
ZVNpZ25hdHVyZTsKLSAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxpbmVTaWduYXR1cmUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIG1fY29udHJv
bFN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxpbmVTaWduYXR1cmUp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6OkVsc2U6
IHsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3Qo
KSk7Ci0gICAgfQotCi0gICAgY2FzZSBPcFR5cGU6OkJyOgotICAgIGNhc2UgT3BUeXBlOjpCcklm
OiB7Ci0gICAgICAgIHVpbnQzMl90IHRhcmdldDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQz
Mih0YXJnZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uID0gQ29u
dGV4dDo6ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBpZiAob3AgPT0gT3BUeXBlOjpCcklmKQot
ICAgICAgICAgICAgY29uZGl0aW9uID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0KLSAgICAg
ICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXpl
KCkgLSAxIC0gdGFyZ2V0XTsKLQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFkZEJyYW5jaChk
YXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9w
VHlwZTo6UmV0dXJuOiB7Ci0gICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gcmV0dXJu
VmFsdWVzOwotICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSAhPSBWb2lkKQotICAg
ICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgp
KTsKLQotICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKLSAgICAgICAgcmV0dXJuIG1f
Y29udGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlw
ZTo6RW5kOiB7Ci0gICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtl
TGFzdCgpOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1fZXhwcmVz
c2lvblN0YWNrKTsKLSAgICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6Ci0gICAg
Y2FzZSBPcFR5cGU6OlNlbGVjdDoKLSAgICBjYXNlIE9wVHlwZTo6QnJUYWJsZToKLSAgICBjYXNl
IE9wVHlwZTo6Tm9wOgotICAgIGNhc2UgT3BUeXBlOjpEcm9wOgotICAgIGNhc2UgT3BUeXBlOjpG
MzJDb25zdDoKLSAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6Ci0gICAgY2FzZSBPcFR5cGU6OlRl
ZUxvY2FsOgotICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6Ci0gICAgY2FzZSBPcFR5cGU6OlNl
dEdsb2JhbDoKLSAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OgotICAgICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0
PgotYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Np
b24oT3BUeXBlIG9wKQotewotICAgIEFTU0VSVChtX3VucmVhY2hhYmxlQmxvY2tzKTsKLSAgICBz
d2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKLSAgICAgICAgaWYgKG1fdW5y
ZWFjaGFibGVCbG9ja3MgPiAxKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
Q29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7Ci0gICAgICAgIEFTU0VS
VChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKLSAgICAgICAgbV91bnJlYWNoYWJsZUJs
b2NrcyA9IDA7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShkYXRhKTsKLSAgICB9
Ci0KLSAgICBjYXNlIE9wVHlwZTo6RW5kOiB7Ci0gICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxv
Y2tzID09IDEpIHsKLSAgICAgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFj
ay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXNDb250aW51YXRpb25S
ZWFjaGFibGUoZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBjYXNlIE9wVHlwZTo6TG9vcDoKLSAgICBjYXNlIE9wVHlwZTo6SWY6Ci0gICAg
Y2FzZSBPcFR5cGU6OkJsb2NrOiB7Ci0gICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MrKzsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gdHdvIGltbWVkaWF0ZSBjYXNlcwot
ICAgIGNhc2UgT3BUeXBlOjpCcjoKLSAgICBjYXNlIE9wVHlwZTo6QnJJZjogewotICAgICAgICB1
aW50MzJfdCB1bnVzZWQ7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodW51c2VkKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlVmFyVUludDMyKHVu
dXNlZCk7Ci0gICAgfQotCi0gICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcwotICAgIGNhc2UgT3BU
eXBlOjpSZXR1cm46Ci0gICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OgotICAgIGNhc2UgT3BUeXBl
OjpTZXRMb2NhbDoKLSAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKLSAgICAgICAgdWludDMy
X3QgdW51c2VkOwotICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51c2VkKTsKLSAgICB9
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLSN1bmRlZiBDUkVBVEVfQ0FTRQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V0FTTQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTWVtb3J5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4NTBkOWYz
MjY5NjcwNGRiY2UzNWViNjU5YWQ3YjgyMjc5MmQwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTWVt
b3J5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV0FTTU1lbW9yeS5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1NZW1vcnk6Ok1lbW9yeSh1aW50MzJfdCBzdGFydGlu
Z1NpemUsIHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRT
aXplUmVnaXN0ZXJzKQotICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAgICwg
bV9zaXplKHN0YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCi0gICAgLy8g
RklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5nIHRoZW4gd2UgbmVl
ZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KLSAgICAvLyBzZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICAsIG1fbWFwcGVkQ2Fw
YWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFBhZ2VDb3VudCkgKiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4ocGFnZVNpemUpKQotewotICAgIEFTU0VSVChwaW5uZWRTaXplUmVnaXN0ZXJzLnNp
emUoKSA+IDApOwotCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEg
Vk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRD
YXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAg
aWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEg
ZGlmZmVyZW50IG51bWJlci4KLSAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fY2FwYWNpdHk7
Ci0gICAgICAgIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9O
T05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQg
PT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
c3RhcnRpbmdTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIGlmIChtcHJvdGVjdChyZXN1
bHQsIHN0YXJ0aW5nU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAgICAgbXVu
bWFwKHJlc3VsdCwgbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplUmVnaXN0
ZXJzLnNpemUoKSArIDE7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2NhbGxlZVNhdmVS
ZWdpc3RlcnMuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJl
Zy5ncHIoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0
ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkgewotICAgICAgICAgICAg
bV9waW5uZWRSZWdpc3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7Ci0gICAgICAgICAgICBy
ZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMtLTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X3Bpbm5lZFJlZ2lzdGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlubmVkU2l6ZVJl
Z2lzdGVyc1stLXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0pOwotICAgIH0pOwotCi0g
ICAgQVNTRVJUKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOwotICAgIG1fbWVtb3J5ID0gcmVz
dWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotfSAvLyBuYW1lc3BhY2UgV0FTTQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU1lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGUyNDg1MmYzODllMTYw
NzQ0MTFiZDE2MDk4MDBkOGIxZDYyNjEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01NZW1vcnkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKLQotI2luY2x1ZGUgIldBU01DYWxsaW5nQ29udmVudGlvbi5oIgotCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1zdHJ1Y3Qg
UGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7Ci0gICAgR1BSUmVnIHNpemVSZWdpc3RlcjsKLSAgICB1
bnNpZ25lZCBzaXplT2Zmc2V0OwotfTsKLQotLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1v
cmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEgdmVj
dG9yIHdpdGggb25seSBvbmUKLS8vIGVudHJ5LiBTcGVjaWZpY2FsbHkgYW4gZW50cnkgd2hlcmUg
dGhlIHNpemVPZmZzZXQgPT0gMC4gSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHNpemUgcmVnaXN0
ZXIsCi0vLyB3ZSBjYW4gaGF2ZSBvbmUgZm9yIGVhY2ggbG9hZCBzaXplIGNsYXNzLiBzZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKLXN0cnVjdCBQaW5u
ZWRSZWdpc3RlckluZm8gewotICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiBzaXpl
UmVnaXN0ZXJzOwotICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlcjsKLX07Ci0KLWNvbnN0ZXhw
ciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7Ci1jb25zdGV4cHIgdWludDMyX3QgbWF4UGFn
ZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxsIDw8IDMyKSAvIHBhZ2VTaXplKTsK
LQotY2xhc3MgTWVtb3J5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1vcnkpOwotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotCi0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICBlbnVtIGNsYXNzIE1vZGUgewotICAgICAgICBCb3Vu
ZHNDaGVja2luZwotICAgIH07Ci0KLSAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7Ci0gICAgTWVtb3J5
KHVpbnQzMl90IHN0YXJ0aW5nU2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpOwotCi0gICAgfk1lbW9yeSgpCi0gICAgewot
ICAgICAgICBpZiAobV9tZW1vcnkpCi0gICAgICAgICAgICBtdW5tYXAobV9tZW1vcnksIG1fbWFw
cGVkQ2FwYWNpdHkpOwotICAgIH0KLQotICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVtb3J5OyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVnaXN0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9waW5uZWRSZWdpc3RlcnM7IH0KLQotICAgIE1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZTsgfQotCi0gICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpCi0gICAg
ewotICAgICAgICBBU1NFUlQobV9tZW1vcnkpOwotICAgICAgICBpZiAobmV3U2l6ZSA+IG1fY2Fw
YWNpdHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuICFtcHJv
dGVjdChtX21lbW9yeSwgbmV3U2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQqIG1fbWVt
b3J5IHsgbnVsbHB0ciB9OwotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVy
czsKLSAgICBNb2RlIG1fbW9kZTsKLSAgICB1aW50MzJfdCBtX3NpemUgeyAwIH07Ci0gICAgdWlu
dDMyX3QgbV9jYXBhY2l0eSB7IDAgfTsKLSAgICB1aW50NjRfdCBtX21hcHBlZENhcGFjaXR5IHsg
MCB9OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxl
UGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3OTZiZjgzOWFlYWM2
MWI2NWI3NmFhMjYyMmUzZDJlMTExMzQwZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFy
c2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldBU01Nb2R1bGVQYXJzZXIuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2lu
Y2x1ZGUgIkpTV0FTTU1vZHVsZS5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKLSNpbmNsdWRl
ICJXQVNNT3BzLmgiCi0jaW5jbHVkZSAiV0FTTVNlY3Rpb25zLmgiCi0KLSNpbmNsdWRlIDxzeXMv
bW1hbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1zdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCi17
Ci0gICAgaWYgKG1fc291cmNlTGVuZ3RoIDwgOCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghY29uc3VtZUNoYXJhY3RlcigwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghY29uc3VtZVN0cmluZygiYXNtIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3QgZG8gYW55dGhp
bmcgd2l0aCBpdC4KLSAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOwotICAgIGlmICghcGFyc2VV
SW50MzIodmVyc2lvbk51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2
ZXJzaW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLQot
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9jZXNzaW5nIGhl
YWRlci4iKTsKLQotICAgIFNlY3Rpb25zOjpTZWN0aW9uIHByZXZpb3VzU2VjdGlvbiA9IFNlY3Rp
b25zOjpVbmtub3duOwotICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNlTGVuZ3RoKSB7Ci0g
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyB0byBw
YXJzZSBuZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAiLCBtX29mZnNldCk7Ci0KLSAgICAgICAgdWlu
dDhfdCBzZWN0aW9uQnl0ZTsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgIGRhdGFMb2dMbigiU2VjdGlvbiBieXRlOiAiLCBzZWN0aW9uQnl0ZSk7Ci0KLSAgICAg
ICAgU2VjdGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOwotICAgICAg
ICBpZiAoc2VjdGlvbkJ5dGUpIHsKLSAgICAgICAgICAgIGlmIChzZWN0aW9uQnl0ZSA8IFNlY3Rp
b25zOjpVbmtub3duKQotICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0
aW9uczo6U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdWludDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUgc2VjdGlv
bidzIHNpemUuCi0gICAgICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCAr
IFdURjo6TEVCRGVjb2Rlcjo6bWF4MzJCaXRMRUJCeXRlTGVuZ3RoID49IG1fc291cmNlTGVuZ3Ro
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCBhbnkgY3VzdG9tIHNlY3Rpb25zIHlldC4KLQotICAgICAgICAgICAgbV9vZmZz
ZXQgKz0gc2VjdGlvbk5hbWVMZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIVNlY3Rp
b25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKLSAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25MZW5n
dGg7Ci0KLSAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9u
czo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIlBhcnNpbmcgTWVtb3J5LiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9y
eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6RnVuY3Rpb25UeXBlczogewotICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5n
IHR5cGVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uVHlwZXMoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgU2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzaWdu
YXR1cmVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsKLSAgICAgICAgICAg
IGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlv
biBkZWZpbml0aW9ucy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRp
b25zKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpVbmtub3duOgotICAgICAgICAv
LyBGSVhNRTogRGVsZXRlIHRoaXMgd2hlbiB3ZSBzdXBwb3J0IGFsbCB0aGUgc2VjdGlvbnMuCi0g
ICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsKLSAgICAgICAgICAg
IG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
TG4oIkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKLQotICAgICAgICBpZiAoZW5kICE9IG1f
b2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHByZXZpb3VzU2Vj
dGlvbiA9IHNlY3Rpb247Ci0gICAgfQotCi0gICAgLy8gVE9ETwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQotewotICAgIHVpbnQ4X3QgZmxh
Z3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNpemUgPiBtYXhQYWdlQ291bnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50
OwotICAgIGlmIChmbGFncykgewotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0
eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKLSAgICBzaXplICo9IHBhZ2VTaXpl
OwotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwotICAgIG1fbWVt
b3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXpl
cyk7Ci0gICAgcmV0dXJuIG1fbWVtb3J5LT5tZW1vcnkoKTsKLX0KLQotYm9vbCBNb2R1bGVQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25UeXBlcygpCi17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgaWYg
KCFwYXJzZVZhclVJbnQzMihjb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBjb3VudCk7Ci0KLSAgICBt
X3NpZ25hdHVyZXMucmVzaXplKGNvdW50KTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHVpbnQ4X3QgdHlwZTsKLSAgICAgICAgaWYgKCFwYXJz
ZVVJbnQ3KHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodHlw
ZSAhPSAweDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJH
b3QgZnVuY3Rpb24gdHlwZS4iKTsKLQotICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50Owot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxv
Z0xuKCJhcmd1bWVudENvdW50OiAiLCBhcmd1bWVudENvdW50KTsKLQotICAgICAgICBWZWN0b3I8
VHlwZT4gYXJndW1lbnRUeXBlczsKLSAgICAgICAgYXJndW1lbnRUeXBlcy5yZXNpemUoYXJndW1l
bnRDb3VudCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291
bnQ7ICsraSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8ICFpc1ZhbHVl
VHlwZShzdGF0aWNfY2FzdDxUeXBlPih0eXBlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19jYXN0PFR5cGU+KHR5
cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHR5cGUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0KLSAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7Ci0KLSAgICAgICAg
aWYgKHR5cGUpIHsKLSAgICAgICAgICAgIFR5cGUgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXBh
cnNlVmFsdWVUeXBlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOwotCi0gICAgICAgIG1f
c2lnbmF0dXJlc1tpXSA9IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9Owot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVu
Y3Rpb25TaWduYXR1cmVzKCkKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9mdW5jdGlv
bnMucmVzaXplKGNvdW50KTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7Ci0gICAgICAgIGlmICghcGFyc2VW
YXJVSW50MzIodHlwZU51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKHR5cGVOdW1iZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBtX2Z1bmN0aW9uc1tpXS5zaWduYXR1cmUgPSAmbV9zaWdu
YXR1cmVzW3R5cGVOdW1iZXJdOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkKLXsKLSAgICB1aW50MzJf
dCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGNvdW50ICE9IG1fZnVuY3Rpb25zLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwotICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKGZ1bmN0aW9uU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1fZnVuY3Rpb25zW2ldOwotICAgICAgICBp
bmZvLnN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIGluZm8uZW5kID0gbV9vZmZzZXQgKyBmdW5j
dGlvblNpemU7Ci0gICAgICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9k
dWxlUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZTRkMTBhZGY2MDM0
NzczODc3YzFlZjBhYmQ2MWM0ZmEyNDY0ZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBh
cnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiV0FTTU1lbW9yeS5oIgotI2luY2x1ZGUgIldBU01PcHMu
aCIKLSNpbmNsdWRlICJXQVNNUGFyc2VyLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1jbGFzcyBNb2R1bGVQYXJzZXIgOiBw
dWJsaWMgUGFyc2VyIHsKLXB1YmxpYzoKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYWdp
Y051bWJlciA9IDB4YzsKLQotICAgIE1vZHVsZVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4m
IHNvdXJjZUJ1ZmZlcikKLSAgICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCAwLCBzb3VyY2VC
dWZmZXIuc2l6ZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZSgpOwotCi0gICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5j
dGlvbkluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWVtb3J5PiYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnk7IH0KLQotcHJp
dmF0ZToKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeSgpOwotICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25UeXBlcygpOwotICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCk7Ci0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCk7Ci0gICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odWludDMyX3QgbnVtYmVyKTsK
LQotICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9uczsKLSAgICBWZWN0
b3I8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4g
bV9tZW1vcnk7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V0FTTQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTU9wcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmY3Mjg5NGI1ZjhiYmIyMGY4YjhlMDE3N2QxMjhk
Yzc3MWFiYzY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDI0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIHVzaW5nIHdhc20uanNvbi4KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlIDxjc3RkaW50
PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi0jZGVmaW5lIEZPUl9FQUNI
X1dBU01fU1BFQ0lBTF9PUChtYWNybykgXAotICAgIG1hY3JvKEkzMkNvbnN0LCAweDEwLCBPb3Bz
KSBcCi0gICAgbWFjcm8oSTY0Q29uc3QsIDB4MTEsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRDb25z
dCwgMHgxMiwgT29wcykgXAotICAgIG1hY3JvKEYzMkNvbnN0LCAweDEzLCBPb3BzKSBcCi0gICAg
bWFjcm8oR2V0TG9jYWwsIDB4MTQsIE9vcHMpIFwKLSAgICBtYWNybyhTZXRMb2NhbCwgMHgxNSwg
T29wcykgXAotICAgIG1hY3JvKFRlZUxvY2FsLCAweDE5LCBPb3BzKSBcCi0gICAgbWFjcm8oR2V0
R2xvYmFsLCAweGJiLCBPb3BzKSBcCi0gICAgbWFjcm8oU2V0R2xvYmFsLCAweGJjLCBPb3BzKSBc
Ci0gICAgbWFjcm8oQ2FsbCwgMHgxNiwgT29wcykgXAotICAgIG1hY3JvKENhbGxJbmRpcmVjdCwg
MHgxNywgT29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxPV19PUChtYWNy
bykgXAotICAgIG1hY3JvKFVucmVhY2hhYmxlLCAweDAsIE9vcHMpIFwKLSAgICBtYWNybyhCbG9j
aywgMHgxLCBPb3BzKSBcCi0gICAgbWFjcm8oTG9vcCwgMHgyLCBPb3BzKSBcCi0gICAgbWFjcm8o
SWYsIDB4MywgT29wcykgXAotICAgIG1hY3JvKEVsc2UsIDB4NCwgT29wcykgXAotICAgIG1hY3Jv
KFNlbGVjdCwgMHg1LCBPb3BzKSBcCi0gICAgbWFjcm8oQnIsIDB4NiwgT29wcykgXAotICAgIG1h
Y3JvKEJySWYsIDB4NywgT29wcykgXAotICAgIG1hY3JvKEJyVGFibGUsIDB4OCwgT29wcykgXAot
ICAgIG1hY3JvKFJldHVybiwgMHg5LCBPb3BzKSBcCi0gICAgbWFjcm8oRHJvcCwgMHhiLCBPb3Bz
KSBcCi0gICAgbWFjcm8oTm9wLCAweGEsIE9vcHMpIFwKLSAgICBtYWNybyhFbmQsIDB4ZiwgT29w
cykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKG1hY3JvKSBcCi0gICAgbWFjcm8o
STMyQ2x6LCAweDU3LCBDbHopIFwKLSAgICBtYWNybyhJMzJDdHosIDB4NTgsIE9vcHMpIFwKLSAg
ICBtYWNybyhJMzJQb3BjbnQsIDB4NTksIE9vcHMpIFwKLSAgICBtYWNybyhJNjRDbHosIDB4NzIs
IENseikgXAotICAgIG1hY3JvKEk2NEN0eiwgMHg3MywgT29wcykgXAotICAgIG1hY3JvKEk2NFBv
cGNudCwgMHg3NCwgT29wcykgXAotICAgIG1hY3JvKEYzMkFicywgMHg3YiwgT29wcykgXAotICAg
IG1hY3JvKEYzMk5lZywgMHg3YywgT29wcykgXAotICAgIG1hY3JvKEYzMkNvcHlzaWduLCAweDdk
LCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyQ2VpbCwgMHg3ZSwgT29wcykgXAotICAgIG1hY3JvKEYz
MkZsb29yLCAweDdmLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyVHJ1bmMsIDB4ODAsIE9vcHMpIFwK
LSAgICBtYWNybyhGMzJOZWFyZXN0LCAweDgxLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyU3FydCwg
MHg4MiwgT29wcykgXAotICAgIG1hY3JvKEY2NEFicywgMHg4ZiwgT29wcykgXAotICAgIG1hY3Jv
KEY2NE5lZywgMHg5MCwgT29wcykgXAotICAgIG1hY3JvKEY2NENvcHlzaWduLCAweDkxLCBPb3Bz
KSBcCi0gICAgbWFjcm8oRjY0Q2VpbCwgMHg5MiwgT29wcykgXAotICAgIG1hY3JvKEY2NEZsb29y
LCAweDkzLCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0VHJ1bmMsIDB4OTQsIE9vcHMpIFwKLSAgICBt
YWNybyhGNjROZWFyZXN0LCAweDk1LCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0U3FydCwgMHg5Niwg
T29wcykKLQotI2RlZmluZSBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNybykgXAotICAgIG1h
Y3JvKEkzMkFkZCwgMHg0MCwgQWRkKSBcCi0gICAgbWFjcm8oSTMyU3ViLCAweDQxLCBTdWIpIFwK
LSAgICBtYWNybyhJMzJNdWwsIDB4NDIsIE11bCkgXAotICAgIG1hY3JvKEkzMkRpdlMsIDB4NDMs
IERpdikgXAotICAgIG1hY3JvKEkzMkRpdlUsIDB4NDQsIE9vcHMpIFwKLSAgICBtYWNybyhJMzJS
ZW1TLCAweDQ1LCBNb2QpIFwKLSAgICBtYWNybyhJMzJSZW1VLCAweDQ2LCBPb3BzKSBcCi0gICAg
bWFjcm8oSTMyQW5kLCAweDQ3LCBCaXRBbmQpIFwKLSAgICBtYWNybyhJMzJPciwgMHg0OCwgQml0
T3IpIFwKLSAgICBtYWNybyhJMzJYb3IsIDB4NDksIEJpdFhvcikgXAotICAgIG1hY3JvKEkzMlNo
bCwgMHg0YSwgU2hsKSBcCi0gICAgbWFjcm8oSTMyU2hyVSwgMHg0YiwgU1NocikgXAotICAgIG1h
Y3JvKEkzMlNoclMsIDB4NGMsIFpTaHIpIFwKLSAgICBtYWNybyhJMzJSb3RyLCAweGI2LCBPb3Bz
KSBcCi0gICAgbWFjcm8oSTMyUm90bCwgMHhiNywgT29wcykgXAotICAgIG1hY3JvKEkzMkVxLCAw
eDRkLCBFcXVhbCkgXAotICAgIG1hY3JvKEkzMk5lLCAweDRlLCBOb3RFcXVhbCkgXAotICAgIG1h
Y3JvKEkzMkx0UywgMHg0ZiwgTGVzc1RoYW4pIFwKLSAgICBtYWNybyhJMzJMZVMsIDB4NTAsIExl
c3NFcXVhbCkgXAotICAgIG1hY3JvKEkzMkx0VSwgMHg1MSwgQmVsb3cpIFwKLSAgICBtYWNybyhJ
MzJMZVUsIDB4NTIsIEJlbG93RXF1YWwpIFwKLSAgICBtYWNybyhJMzJHdFMsIDB4NTMsIEdyZWF0
ZXJUaGFuKSBcCi0gICAgbWFjcm8oSTMyR2VTLCAweDU0LCBHcmVhdGVyRXF1YWwpIFwKLSAgICBt
YWNybyhJMzJHdFUsIDB4NTUsIEFib3ZlKSBcCi0gICAgbWFjcm8oSTMyR2VVLCAweDU2LCBBYm92
ZUVxdWFsKSBcCi0gICAgbWFjcm8oSTY0QWRkLCAweDViLCBBZGQpIFwKLSAgICBtYWNybyhJNjRT
dWIsIDB4NWMsIFN1YikgXAotICAgIG1hY3JvKEk2NE11bCwgMHg1ZCwgTXVsKSBcCi0gICAgbWFj
cm8oSTY0RGl2UywgMHg1ZSwgRGl2KSBcCi0gICAgbWFjcm8oSTY0RGl2VSwgMHg1ZiwgT29wcykg
XAotICAgIG1hY3JvKEk2NFJlbVMsIDB4NjAsIE1vZCkgXAotICAgIG1hY3JvKEk2NFJlbVUsIDB4
NjEsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRBbmQsIDB4NjIsIEJpdEFuZCkgXAotICAgIG1hY3Jv
KEk2NE9yLCAweDYzLCBCaXRPcikgXAotICAgIG1hY3JvKEk2NFhvciwgMHg2NCwgQml0WG9yKSBc
Ci0gICAgbWFjcm8oSTY0U2hsLCAweDY1LCBTaGwpIFwKLSAgICBtYWNybyhJNjRTaHJVLCAweDY2
LCBTU2hyKSBcCi0gICAgbWFjcm8oSTY0U2hyUywgMHg2NywgWlNocikgXAotICAgIG1hY3JvKEk2
NFJvdHIsIDB4YjgsIE9vcHMpIFwKLSAgICBtYWNybyhJNjRSb3RsLCAweGI5LCBPb3BzKSBcCi0g
ICAgbWFjcm8oSTY0RXEsIDB4NjgsIEVxdWFsKSBcCi0gICAgbWFjcm8oSTY0TmUsIDB4NjksIE5v
dEVxdWFsKSBcCi0gICAgbWFjcm8oSTY0THRTLCAweDZhLCBMZXNzVGhhbikgXAotICAgIG1hY3Jv
KEk2NExlUywgMHg2YiwgTGVzc0VxdWFsKSBcCi0gICAgbWFjcm8oSTY0THRVLCAweDZjLCBCZWxv
dykgXAotICAgIG1hY3JvKEk2NExlVSwgMHg2ZCwgQmVsb3dFcXVhbCkgXAotICAgIG1hY3JvKEk2
NEd0UywgMHg2ZSwgR3JlYXRlclRoYW4pIFwKLSAgICBtYWNybyhJNjRHZVMsIDB4NmYsIEdyZWF0
ZXJFcXVhbCkgXAotICAgIG1hY3JvKEk2NEd0VSwgMHg3MCwgQWJvdmUpIFwKLSAgICBtYWNybyhJ
NjRHZVUsIDB4NzEsIEFib3ZlRXF1YWwpIFwKLSAgICBtYWNybyhGMzJBZGQsIDB4NzUsIE9vcHMp
IFwKLSAgICBtYWNybyhGMzJTdWIsIDB4NzYsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJNdWwsIDB4
NzcsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJEaXYsIDB4NzgsIE9vcHMpIFwKLSAgICBtYWNybyhG
MzJNaW4sIDB4NzksIE9vcHMpIFwKLSAgICBtYWNybyhGMzJNYXgsIDB4N2EsIE9vcHMpIFwKLSAg
ICBtYWNybyhGMzJFcSwgMHg4MywgT29wcykgXAotICAgIG1hY3JvKEYzMk5lLCAweDg0LCBPb3Bz
KSBcCi0gICAgbWFjcm8oRjMyTHQsIDB4ODUsIE9vcHMpIFwKLSAgICBtYWNybyhGMzJMZSwgMHg4
NiwgT29wcykgXAotICAgIG1hY3JvKEYzMkd0LCAweDg3LCBPb3BzKSBcCi0gICAgbWFjcm8oRjMy
R2UsIDB4ODgsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRBZGQsIDB4ODksIE9vcHMpIFwKLSAgICBt
YWNybyhGNjRTdWIsIDB4OGEsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRNdWwsIDB4OGIsIE9vcHMp
IFwKLSAgICBtYWNybyhGNjREaXYsIDB4OGMsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRNaW4sIDB4
OGQsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRNYXgsIDB4OGUsIE9vcHMpIFwKLSAgICBtYWNybyhG
NjRFcSwgMHg5NywgT29wcykgXAotICAgIG1hY3JvKEY2NE5lLCAweDk4LCBPb3BzKSBcCi0gICAg
bWFjcm8oRjY0THQsIDB4OTksIE9vcHMpIFwKLSAgICBtYWNybyhGNjRMZSwgMHg5YSwgT29wcykg
XAotICAgIG1hY3JvKEY2NEd0LCAweDliLCBPb3BzKSBcCi0gICAgbWFjcm8oRjY0R2UsIDB4OWMs
IE9vcHMpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9PUChtYWNybykgXAot
ICAgIG1hY3JvKEkzMkxvYWQ4UywgMHgyMCwgT29wcykgXAotICAgIG1hY3JvKEkzMkxvYWQ4VSwg
MHgyMSwgT29wcykgXAotICAgIG1hY3JvKEkzMkxvYWQxNlMsIDB4MjIsIE9vcHMpIFwKLSAgICBt
YWNybyhJMzJMb2FkMTZVLCAweDIzLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0TG9hZDhTLCAweDI0
LCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0TG9hZDhVLCAweDI1LCBPb3BzKSBcCi0gICAgbWFjcm8o
STY0TG9hZDE2UywgMHgyNiwgT29wcykgXAotICAgIG1hY3JvKEk2NExvYWQxNlUsIDB4MjcsIE9v
cHMpIFwKLSAgICBtYWNybyhJNjRMb2FkMzJTLCAweDI4LCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0
TG9hZDMyVSwgMHgyOSwgT29wcykgXAotICAgIG1hY3JvKEkzMkxvYWQsIDB4MmEsIE9vcHMpIFwK
LSAgICBtYWNybyhJNjRMb2FkLCAweDJiLCBPb3BzKSBcCi0gICAgbWFjcm8oRjMyTG9hZCwgMHgy
YywgT29wcykgXAotICAgIG1hY3JvKEY2NExvYWQsIDB4MmQsIE9vcHMpCi0KLSNkZWZpbmUgRk9S
X0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AobWFjcm8pIFwKLSAgICBtYWNybyhJMzJTdG9yZTgs
IDB4MmUsIE9vcHMpIFwKLSAgICBtYWNybyhJMzJTdG9yZTE2LCAweDJmLCBPb3BzKSBcCi0gICAg
bWFjcm8oSTY0U3RvcmU4LCAweDMwLCBPb3BzKSBcCi0gICAgbWFjcm8oSTY0U3RvcmUxNiwgMHgz
MSwgT29wcykgXAotICAgIG1hY3JvKEk2NFN0b3JlMzIsIDB4MzIsIE9vcHMpIFwKLSAgICBtYWNy
byhJMzJTdG9yZSwgMHgzMywgT29wcykgXAotICAgIG1hY3JvKEk2NFN0b3JlLCAweDM0LCBPb3Bz
KSBcCi0gICAgbWFjcm8oRjMyU3RvcmUsIDB4MzUsIE9vcHMpIFwKLSAgICBtYWNybyhGNjRTdG9y
ZSwgMHgzNiwgT29wcykKLQotCi0KLSNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9PUChtYWNybykgXAot
ICAgIEZPUl9FQUNIX1dBU01fU1BFQ0lBTF9PUChtYWNybykgXAotICAgIEZPUl9FQUNIX1dBU01f
Q09OVFJPTF9GTE9XX09QKG1hY3JvKSBcCi0gICAgRk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChtYWNy
bykgXAotICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKG1hY3JvKSBcCi0gICAgRk9SX0VBQ0hf
V0FTTV9NRU1PUllfTE9BRF9PUChtYWNybykgXAotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NU
T1JFX09QKG1hY3JvKQotCi0jZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkLCBiM29w
KSBuYW1lID0gaWQsCi0KLWVudW0gT3BUeXBlIDogdWludDhfdCB7Ci0gICAgRk9SX0VBQ0hfV0FT
TV9PUChDUkVBVEVfRU5VTV9WQUxVRSkKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEludD4KLWlu
bGluZSBib29sIGlzVmFsaWRPcFR5cGUoSW50IGkpCi17Ci0gICAgLy8gQml0c2V0IG9mIHZhbGlk
IG9wcy4KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCB2YWxpZFtdID0geyAweGZmLCAweDhmLCAw
eGZmLCAweDIsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4YSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwg
MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhm
ZiwgMHhmZiwgMHgxZiB9OwotICAgIHJldHVybiAwIDw9IGkgJiYgaSA8PSAxODggJiYgKHZhbGlk
W2kgLyA4XSAmICgxIDw8IChpICUgOCkpKTsKLX0KLQotZW51bSBjbGFzcyBCaW5hcnlPcFR5cGUg
OiB1aW50OF90IHsKLSAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfRU5VTV9WQUxV
RSkKLX07Ci0KLWVudW0gY2xhc3MgVW5hcnlPcFR5cGUgOiB1aW50OF90IHsKLSAgICBGT1JfRUFD
SF9XQVNNX1VOQVJZX09QKENSRUFURV9FTlVNX1ZBTFVFKQotfTsKLQotZW51bSBjbGFzcyBMb2Fk
T3BUeXBlIDogdWludDhfdCB7Ci0gICAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfTE9BRF9PUChDUkVB
VEVfRU5VTV9WQUxVRSkKLX07Ci0KLWVudW0gY2xhc3MgU3RvcmVPcFR5cGUgOiB1aW50OF90IHsK
LSAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfRU5VTV9WQUxVRSkKLX07
Ci0KLSN1bmRlZiBDUkVBVEVfRU5VTV9WQUxVRQotCi1pbmxpbmUgYm9vbCBpc0NvbnRyb2xPcChP
cFR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1l
LCBpZCwgYjNvcCkgY2FzZSBPcFR5cGU6Om5hbWU6Ci0gICAgRk9SX0VBQ0hfV0FTTV9DT05UUk9M
X0ZMT1dfT1AoQ1JFQVRFX0NBU0UpCi0gICAgICAgIHJldHVybiB0cnVlOwotI3VuZGVmIENSRUFU
RV9DQVNFCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBhcnNlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjc5MTg2ZjVlZDdhNTlhOTZkNjAyM2U1NWFj
MDRjMGY1ZmVjMjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNs
dWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNsdWRl
ICJXQVNNRm9ybWF0LmgiCi0jaW5jbHVkZSAiV0FTTU9wcy5oIgotI2luY2x1ZGUgIldBU01TZWN0
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9MRUJEZWNvZGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV0FTTSB7Ci0KLWNsYXNzIFBhcnNlciB7Ci1wcm90ZWN0ZWQ6Ci0gICAgUGFyc2Vy
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCk7Ci0KLSAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1lQ2hhcmFjdGVyKGNoYXIpOwotICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciopOwotCi0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpOwot
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KTsK
LSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYg
cmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3NvdXJjZS5k
YXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQotICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJu
IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2VM
ZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9Ci0KLQotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIG1fc291cmNlOwotICAgIHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKLSAgICBzaXplX3Qg
bV9vZmZzZXQ7Ci19OwotCi1BTFdBWVNfSU5MSU5FIFBhcnNlcjo6UGFyc2VyKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCi0gICAg
OiBtX3NvdXJjZShzb3VyY2VCdWZmZXIpCi0gICAgLCBtX3NvdXJjZUxlbmd0aChlbmQpCi0gICAg
LCBtX29mZnNldChzdGFydCkKLXsKLSAgICBBU1NFUlQoZW5kIDw9IHNvdXJjZUJ1ZmZlci5zaXpl
KCkpOwotICAgIEFTU0VSVChzdGFydCA8IGVuZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIoY2hhciBjKQotewotICAgIGlmIChtX29mZnNldCA+PSBt
X3NvdXJjZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjID09IG1fc291
cmNlW21fb2Zmc2V0XSkgewotICAgICAgICBtX29mZnNldCsrOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFy
c2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICB1bnNpZ25lZCBzdGFy
dCA9IG1fb2Zmc2V0OwotICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHN0cltpXTsgaSsrKSB7
Ci0gICAgICAgIGlmICghY29uc3VtZUNoYXJhY3RlcihzdHJbaV0pKSB7Ci0gICAgICAgICAgICBt
X29mZnNldCA9IHN0YXJ0OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpw
YXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQotewotICAgIGlmIChtX3NvdXJjZUxlbmd0aCA8
IDQgfHwgbV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGggLSA0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihtX3Nv
dXJjZS5kYXRhKCkgKyBtX29mZnNldCk7Ci0gICAgbV9vZmZzZXQgKz0gNDsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50Nyh1aW50OF90
JiByZXN1bHQpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVuZ3RoKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gbV9zb3VyY2VbbV9vZmZzZXQrK107Ci0gICAg
cmV0dXJuIHJlc3VsdCA8IDB4ODA7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBh
cnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0KQotewotICAgIHVpbnQzMl90IHRlbXA7Ci0gICAg
aWYgKCFwYXJzZVZhclVJbnQzMih0ZW1wKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
c3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRlbXApOwotICAgIHJldHVybiB0ZW1wIDw9IDE7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJl
c3VsdCkKLXsKLSAgICB1aW50OF90IHZhbHVlOwotICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oVHlwZTo6TGFzdFZhbHVlVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJhMjk4ZmY1NTExZmM1ZjdjYjA1YzdjM2NkODI1YjYyMzY0MWM0OTku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXQVNNUGxhbi5oIgotCi0jaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQotCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIldBU01CM0lS
R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiV0FTTUNhbGxpbmdDb252ZW50aW9uLmgiCi0jaW5jbHVk
ZSAiV0FTTU1vZHVsZVBhcnNlci5oIgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci0KLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKLQotUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UpCi17
Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dMbigiU3RhcnRpbmcgcGxhbi4iKTsK
LSAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSk7Ci0gICAgaWYgKCFtb2R1bGVQ
YXJzZXIucGFyc2UoKSkgewotICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxl
ZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICBkYXRhTG9nTG4oIlBhcnNlZCBtb2R1bGUuIik7Ci0KLSAgICBmb3IgKGNvbnN0IEZ1bmN0aW9u
SW5mb3JtYXRpb24mIGluZm8gOiBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1hdGlvbigpKSB7
Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5n
IGZ1bmNpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwg
aW5mby5lbmQpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBhcnNlQW5kQ29tcGlsZSh2bSwgc291
cmNlLCBtb2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCksIGluZm8sIG1vZHVsZVBhcnNlci5mdW5j
dGlvbkluZm9ybWF0aW9uKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBQYXRjaCB0aGUgY2FsbCBzaXRl
cyBmb3IgZWFjaCBmdW5jdGlvbi4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
bXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIgOiByZXN1bHQpIHsKLSAgICAgICAgRnVuY3Rpb25Db21w
aWxhdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblB0ci5nZXQoKTsKLSAgICAgICAgZm9yIChhdXRv
JiBjYWxsIDogZnVuY3Rpb24tPnVubGlua2VkQ2FsbHMpCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHJl
c3VsdFtjYWxsLmZ1bmN0aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsKLSAgICB9Ci0KLSAgICBt
ZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7Ci19Ci0KLX0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Yjg0NWVlMTQ4OTc4Zjk2MDEwNzY5MDY0MGE1ZDEwYjZmYzdmMzU1NS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNUGxhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKLSNpbmNs
dWRlICJWTS5oIgotI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV0FTTSB7Ci1jbGFzcyBNZW1vcnk7Ci0KLS8vIFRPRE86IFRoaXMgc2hv
dWxkIGNyZWF0ZSBhIFdBU00gTW9kdWxlIG5vdCBhIGxpc3Qgb2YgZnVuY3Rpb25zLgotY2xhc3Mg
UGxhbiB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1
aW50OF90PiBzb3VyY2UpOwotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
bXBpbGF0aW9uPj4gcmVzdWx0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1lbW9yeTsK
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNU2Vj
dGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2M3MmQ0MWQzYmVlZGNkMTcyMzhhOGMyMDA0MjMy
NzUxM2I0NmU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdBU00gewotCi1zdHJ1Y3QgU2VjdGlvbnMgewotICAgIGVudW0g
U2VjdGlvbiA6IHVpbnQ4X3QgewotICAgICAgICBGdW5jdGlvblR5cGVzID0gMSwKLSAgICAgICAg
U2lnbmF0dXJlcyA9IDMsCi0gICAgICAgIE1lbW9yeSA9IDUsCi0gICAgICAgIERlZmluaXRpb25z
ID0gMTAsCi0gICAgICAgIFVua25vd24KLSAgICB9OwotICAgIHN0YXRpYyBib29sIHZhbGlkYXRl
T3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQotICAgIHsKLSAgICAgICAgaWYg
KHByZXZpb3VzID09IFVua25vd24pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKLSAgICB9Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V0FTTQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNTlk
MzA4OThmMGViNTRkZGMyYWQwNWQ5Y2NlZWRhMmViOTU5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTAsMCAr
MSw3MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIK
KyNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0ZpeFNTQS5oIgorI2lu
Y2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0
ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5o
IgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzV2FzbUFkZHJlc3NW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNp
bmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK3ZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKiBwdHIp
Cit7CisgICAgSlNDOjpCMzo6UHJvY2VkdXJlKiBwcm9jID0gc3RhdGljX2Nhc3Q8SlNDOjpCMzo6
UHJvY2VkdXJlKj4ocHRyKTsKKyAgICBwcm9jLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Cit9CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK25hbWVzcGFjZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBCMzsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2lubGluZSBC
Mzo6T3Bjb2RlIHRvQjNPcChCaW5hcnlPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgewor
I2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBvcCwgYjNvcCkgY2FzZSBCaW5hcnlPcFR5cGU6Om5h
bWU6IHJldHVybiBiM29wOworICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENSRUFURV9DQVNF
KQorI3VuZGVmIENSRUFURV9DQVNFCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK2lubGluZSBCMzo6T3Bjb2RlIHRvQjNPcChVbmFyeU9wVHlwZSBvcCkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIG9wLCBiM29wKSBj
YXNlIFVuYXJ5T3BUeXBlOjpuYW1lOiByZXR1cm4gYjNvcDsKKyAgICBGT1JfRUFDSF9XQVNNX1VO
QVJZX09QKENSRUFURV9DQVNFKQorI3VuZGVmIENSRUFURV9DQVNFCisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIEIzSVJHZW5lcmF0b3IgeworcHJp
dmF0ZToKKyAgICBjbGFzcyBMYXp5QmxvY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGF6eUJs
b2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX2Jsb2NrOyB9CisKKyAgICAgICAgQmFzaWNCbG9jayogZ2V0KFByb2Nl
ZHVyZSYgcHJvYykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2Jsb2NrKQorICAgICAg
ICAgICAgICAgIG1fYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgICAgICByZXR1cm4g
bV9ibG9jazsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoKm1fYmxvY2spOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiVW5pbml0aWFsaXplZCIpOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIH07CisKK3B1
YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9sRGF0YShQcm9j
ZWR1cmUmIHByb2MsIFR5cGUgc2lnbmF0dXJlLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0
ciwgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogY29u
dGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChzcGVjaWFsKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlICE9IFZvaWQpCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChwcm9jLmFkZFZhcmlhYmxlKHRvQjNUeXBlKHNpZ25hdHVyZSkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiSWY6ICAgICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkJs
b2NrOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6Okxvb3A6CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJMb29wOiAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgY29udGlu
dWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFsKQorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgqc3BlY2lhbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCJOb25lIik7CisgICAgICAgIH0KKworICAgICAgICBCbG9ja1R5
cGUgdHlwZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghc3BlY2lhbCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpCbG9jazsKKyAgICAgICAgICAgIGlmIChj
b250aW51YXRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIEJsb2NrVHlwZTo6SWY7CisgICAg
ICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpMb29wOworICAgICAgICB9CisKKyAgICAgICAgQmFz
aWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24uZ2V0
KHByb2MpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3Mg
QjNJUkdlbmVyYXRvcjsKKyAgICAgICAgLy8gV2UgdXNlIGEgTGF6eUJsb2NrIGZvciB0aGUgY29u
dGludWF0aW9uIHNpbmNlIEIzOjp2YWxpZGF0ZSBkb2VzIG5vdCBsaWtlIG9ycGhhbmVkIGJsb2Nr
cy4gTm90ZSwKKyAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYW4gb3JwaGFuZWQg
YmxvY2sgYnkgZG9pbmcgc29tZXRoaW5nIGxpa2UgKGJsb2NrIChyZXR1cm4gKC4uLikpKS4gSW4K
KyAgICAgICAgLy8gdGhhdCBleGFtcGxlLCBpZiB3ZSBlYWdlcmx5IGFsbG9jYXRlIGEgQmFzaWNC
bG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBpdCB3aWxsIG5ldmVyIGJlIHJlYWNoYWJsZS4KKyAg
ICAgICAgTGF6eUJsb2NrIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNCbG9jayogc3BlY2lh
bDsKKyAgICAgICAgVmVjdG9yPFZhcmlhYmxlKiwgMT4gcmVzdWx0OworICAgIH07CisKKyAgICB0
eXBlZGVmIFZhbHVlKiBFeHByZXNzaW9uVHlwZTsKKyAgICB0eXBlZGVmIENvbnRyb2xEYXRhIENv
bnRyb2xUeXBlOworICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiBFeHByZXNz
aW9uTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZSosIDE+IFJlc3VsdExpc3Q7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxs
cHRyOworCisgICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBWZWN0b3I8VW5s
aW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscyk7CisKKyAgICB2b2lkIGFkZEFyZ3VtZW50cyhjb25z
dCBWZWN0b3I8VHlwZT4mKTsKKyAgICB2b2lkIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKKyAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CisKKyAgICAvLyBM
b2NhbHMKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAgIC8v
IE1lbW9yeQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zm
c2V0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNl
dCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBiaW5hcnlPcChCaW5hcnlPcFR5cGUsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiB1bmFyeU9wKFVuYXJ5T3BUeXBlLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9s
RGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29u
dHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgVHlwZSBzaWduYXR1cmUpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2Uo
Q29udHJvbERhdGEmKTsKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihj
b25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Np
b25TdGFjayk7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVk
IGNhbGxlZUluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICBib29sIGlzQ29u
dGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICB2b2lkIGR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYg
ZXhwcmVzc2lvblN0YWNrKTsKKworcHJpdmF0ZToKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZz
ZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExv
YWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0
KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworCisg
ICAgdm9pZCB1bmlmeShWYXJpYWJsZSogdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3Vy
Y2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IHJlc3VsdFN0YWNrLCBSZXN1bHRMaXN0JiBzdGFjayk7CisKKyAgICBNZW1vcnkqIG1fbWVtb3J5
OworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2Nr
OworICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOworICAgIC8vIG1fdW5saWtlZENhbGxz
IGlzIGxpc3Qgb2YgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBh
ZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9yPFVubGlua2VkQ2Fs
bD4mIG1fdW5saW5rZWRDYWxsczsKKyAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSOworICAgIEdQ
UlJlZyBtX21lbW9yeVNpemVHUFI7Cit9OworCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9y
KE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkQ2Fs
bD4mIHVubGlua2VkQ2FsbHMpCisgICAgOiBtX21lbW9yeShtZW1vcnkpCisgICAgLCBtX3Byb2Mo
cHJvY2VkdXJlKQorICAgICwgbV91bmxpbmtlZENhbGxzKHVubGlua2VkQ2FsbHMpCit7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKworICAgIGlmIChtX21lbW9yeSkg
eworICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCku
YmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJh
c2VHUFIpOworICAgICAgICBBU1NFUlQoIW1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXpl
UmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBtX21l
bW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7Cisg
ICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgaW5mbyA6IG1fbWVtb3J5
LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9wcm9jLnBp
blJlZ2lzdGVyKGluZm8uc2l6ZVJlZ2lzdGVyKTsKKworICAgICAgICBtX3Byb2Muc2V0V2FzbUJv
dW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRH
UFIsIHVuc2lnbmVkKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgbV9t
ZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgdW53aW5kIHRoZSBzdGFjayBhbmQgdGhyb3cgYSBKUyBleGNlcHRpb24uIFNlZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM1MQorICAgICAgICAgICAg
aml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIEIzSVJHZW5l
cmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpCit7CisgICAgbV9sb2Nh
bHMucmVzZXJ2ZUNhcGFjaXR5KG1fbG9jYWxzLnNpemUoKSArIGNvdW50KTsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgbV9sb2NhbHMuYXBwZW5kKG1f
cHJvYy5hZGRWYXJpYWJsZSh0b0IzVHlwZSh0eXBlKSkpOworfQorCit2b2lkIEIzSVJHZW5lcmF0
b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIHR5cGVzKQoreworICAgIEFTU0VS
VCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBtX2xvY2Fscy5ncm93KHR5cGVzLnNpemUoKSk7Cisg
ICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyh0eXBlcywgbV9wcm9jLCBt
X2N1cnJlbnRCbG9jaywgT3JpZ2luKCksCisgICAgICAgIFsmXSAoRXhwcmVzc2lvblR5cGUgYXJn
dW1lbnQsIHVuc2lnbmVkIGkpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlKiBhcmd1bWVudFZhcmlh
YmxlID0gbV9wcm9jLmFkZFZhcmlhYmxlKGFyZ3VtZW50LT50eXBlKCkpOworICAgICAgICAgICAg
bV9sb2NhbHNbaV0gPSBhcmd1bWVudFZhcmlhYmxlOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGFyZ3Vt
ZW50VmFyaWFibGUsIGFyZ3VtZW50KTsKKyAgICAgICAgfSk7Cit9CisKK2Jvb2wgQjNJUkdlbmVy
YXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7
CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBt
X2xvY2Fsc1tpbmRleF0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIzSVJHZW5lcmF0
b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgT3JpZ2luKCksIG1fbG9jYWxzW2luZGV4
XSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5l
cmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQoreworICAgIEFTU0VS
VChtX21lbW9yeUJhc2VHUFIgJiYgbV9tZW1vcnlTaXplR1BSKTsKKyAgICBBU1NFUlQoc2l6ZU9m
T3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21l
bW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAgIHBvaW50ZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2lu
KCksIHBvaW50ZXIpOworICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21B
ZGRyZXNzVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7
Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKK3sKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJldHVybiAxOworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQxNlM6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoK
KyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMzJVOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQ6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToK
KyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpG
MzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBWYWx1
ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBPcmlnaW4gb3JpZ2lu
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCit7CisgICAgc3dpdGNo
IChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Uywg
b3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDhTOiB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7Cisg
ICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsKKyAgICAgICAgVmFsdWUq
IHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkOFosIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4sIHZhbHVlKTsK
KyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2
Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKyAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQxNlM6IHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIFNFeHQzMiwgb3JpZ2luLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJMzJMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIpOworICAg
IH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVTogeworICAgICAgICBWYWx1ZSog
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAg
IH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICBWYWx1ZSog
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbiwgdmFsdWUpOworICAg
IH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDogeworICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwg
b3JpZ2luLCBwb2ludGVyKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6
IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgRmxvYXQsIG9yaWdpbiwgcG9pbnRlcik7CisgICAgfQorCisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpGNjRMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIERvdWJsZSwgb3JpZ2luLCBwb2lu
dGVyKTsKKyAgICB9CisKKyAgICAvLyBCMyBkb2Vzbid0IHN1cHBvcnQgTG9hZDE2WiB5ZXQuCisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0
TG9hZDE2VToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBv
ZmZzZXQpCit7CisgICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7CisKKyAgICBy
ZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBPcmlnaW4oKSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50
ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUg
b3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3Jl
ODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHJldHVybiAxOwor
ICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
STY0U3RvcmUxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMy
U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJl
dHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisK
K2lubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBP
cmlnaW4gb3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgdWludDMyX3Qgb2Zmc2V0KQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIEZBTExU
SFJPVUdIOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2lu
LCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4sIHZhbHVlKTsKKyAgICAgICAg
RkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlMTYs
IG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luLCB2YWx1ZSk7Cisg
ICAgICAgIEZBTExUSFJPVUdIOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMy
U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjpzdG9yZShT
dG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFs
dWUsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IElu
dDMyKTsKKworICAgIGVtaXRTdG9yZU9wKG9wLCBPcmlnaW4oKSwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZz
ZXQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIzSVJHZW5lcmF0b3I6OnVuYXJ5T3Ao
VW5hcnlPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIHRvQjNPcChvcCksIE9yaWdpbigpLCBhcmcpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEIzSVJHZW5lcmF0b3I6OmJpbmFyeU9wKEJpbmFyeU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7
CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCB0
b0IzT3Aob3ApLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB0cnVlOworfQor
CitCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFu
dChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUp
KTsKKyAgICBjYXNlIEludDY0OgorICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHZhbHVlKTsKKyAgICBjYXNlIEZs
b2F0OgorICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0
VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8
aW50MzJfdD4odmFsdWUpKSk7CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRCbG9j
ayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWdu
YXR1cmUpOworfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjph
ZGRMb29wKFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2Mu
YWRkQmxvY2soKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1f
cHJvYywgSnVtcCwgT3JpZ2luKCksIGJvZHkpOworICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1f
Y3VycmVudEJsb2NrKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7CisgICAgcmV0dXJuIENv
bnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBib2R5KTsKK30KKworQjNJUkdlbmVyYXRvcjo6
Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBkbyBzb21l
IGtpbmQgb2Ygc3RhY2sgcGFzc2luZy4KKworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbV9wcm9j
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX3Byb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwg
T3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
RnJlcXVlbnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuKSk7CisgICAg
dGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICBub3RUYWtlbi0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtl
bjsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIG5vdFRha2VuLCBj
b250aW51YXRpb24pOworfQorCitib29sIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERh
dGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGRhdGEuY29udGludWF0aW9uKTsKKyAgICBtX2N1cnJl
bnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKKyAgICAvLyBDbGVhciB0aGUgc3BlY2lhbCBwb2ludGVy
IHNvIHRoYXQgd2hlbiB3ZSBwYXJzZSB0aGUgZW5kIHdlIGRvbid0IHRoaW5rIHRoYXQgdGhpcyBi
bG9jayBpcyBhbiBpZiBibG9jay4KKyAgICBkYXRhLnNwZWNpYWwgPSBudWxscHRyOworICAgIEFT
U0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IHJldHVyblZhbHVlcykKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUoKSA8PSAxKTsK
KyAgICBpZiAocmV0dXJuVmFsdWVzLnNpemUoKSkKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigpLCByZXR1cm5W
YWx1ZXNbMF0pOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIE9yaWdpbigpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEs
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcykKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJh
bmNoKG1fcHJvYyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRh
LnJlc3VsdCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4oKSwgY29uZGl0aW9uKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRh
cmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAgICAgdGFyZ2V0LT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgICAgIGNvbnRpbnVhdGlvbi0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNv
bnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayh0
YXJnZXQpKTsKKyAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6ZW5k
QmxvY2soQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sp
Cit7CisgICAgaWYgKCFkYXRhLmNvbnRpbnVhdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBkYXRhLmNvbnRpbnVhdGlvbi5nZXQobV9w
cm9jKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgeworICAgICAgICBB
U1NFUlQoIWRhdGEuc3BlY2lhbC0+c2l6ZSgpICYmICFkYXRhLnNwZWNpYWwtPnN1Y2Nlc3NvcnMo
KS5zaXplKCkpOworICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGFueSBlbHNlIGJsb2Nr
IHdlIG5lZWQgdG8gcG9pbnQgdGhlIG5vdFRha2VuIGJyYW5jaCB0byB0aGUgY29udGludWF0aW9u
LgorICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIE9yaWdpbigpKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKEZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKyAgICAgICAgY29udGludWF0aW9uLT5hZGRQcmVk
ZWNlc3NvcihkYXRhLnNwZWNpYWwpOworICAgIH0KKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1bHQpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgY29udGludWF0aW9uKTsK
KyAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IEZ1
bmN0aW9uSW5mb3JtYXRpb24mIGluZm8sIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgQVNTRVJUKGluZm8uc2lnbmF0dXJlLT5hcmd1
bWVudHMuc2l6ZSgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIFR5cGUgcmV0dXJuVHlwZSA9IGlu
Zm8uc2lnbmF0dXJlLT5yZXR1cm5UeXBlOworCisgICAgc2l6ZV90IGNhbGxJbmRleCA9IG1fdW5s
aW5rZWRDYWxscy5zaXplKCk7CisgICAgbV91bmxpbmtlZENhbGxzLmdyb3coY2FsbEluZGV4ICsg
MSk7CisgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJv
YywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwK
KyAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKKyAgICAgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisKKyAgICAgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1fdW5saW5rZWRDYWxsc1tjYWxsSW5kZXhdID0geyBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoY2FsbCksIGZ1bmN0aW9uSW5kZXggfTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCM0lS
R2VuZXJhdG9yOjppc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkKK3sK
KyAgICAvLyBJZiBub3RoaW5nIHRhcmdldHMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgY3VycmVu
dCBibG9jayB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCisgICAgLy8gYW4gb3JwaGFuZWQg
QmFzaWNCbG9jayBzaW5jZSBpdCBjYW4ndCBiZSByZWFjaGVkIGJ5IGZhbGx0aHJvdWdoLgorICAg
IGlmICghZGF0YS5jb250aW51YXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
Y3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7CisgICAgaWYgKGRh
dGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2sp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlm
eShWYXJpYWJsZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKK3sKKyAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4o
KSwgdmFyaWFibGUsIHNvdXJjZSk7Cit9CisKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1
ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBSZXN1bHRMaXN0
JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPj0gcmVzdWx0U3RhY2suc2l6
ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0U3RhY2suc2l6ZSgpOyAr
K2kpCisgICAgICAgIHVuaWZ5KHJlc3VsdFtpXSwgcmVzdWx0U3RhY2tbaV0pOworfQorCit2b2lk
IEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0
YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQoreworICAgIGRhdGFM
b2dMbigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fcHJvYyk7CisgICAgZGF0
YUxvZ0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRh
TG9nTG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgZm9yIChjb25zdCBDb250cm9sVHlwZSYgZGF0
YSA6IGNvbnRyb2xTdGFjaykKKyAgICAgICAgZGF0YUxvZ0xuKCIgICIsIGRhdGEpOworICAgIGRh
dGFMb2dMbigiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZvciAoY29uc3QgRXhwcmVzc2lvblR5
cGUmIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2dMbigiICAi
LCAqZXhwcmVzc2lvbik7CisgICAgZGF0YUxvZ0xuKCJcbiIpOworfQorCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVh
dGVKU1dyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAvLyBDaGVjayBhcmd1bWVudCBjb3VudCBpcyBzYW5lLgorICAgIFZhbHVlKiBmcmFtZVBvaW50
ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkZyYW1lUG9pbnRlciwg
T3JpZ2luKCkpOworICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBWYWx1ZSogYXJndW1lbnRDb3VudCA9
IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4o
KSwKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwg
ZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKKworICAgIFZhbHVlKiBleHBl
Y3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSk7CisKKyAgICBDaGVja1ZhbHVl
KiBhcmd1bWVudENvdW50Q2hlY2sgPSBibG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2Ms
IENoZWNrLCBPcmlnaW4oKSwKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWJvdmUsIE9yaWdpbigpLCBleHBlY3RlZEFyZ3VtZW50Q291bnQsIGFyZ3VtZW50Q291bnQpKTsK
KyAgICBhcmd1bWVudENvdW50Q2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgaml0LmJyZWFr
cG9pbnQoKTsKKyAgICB9KTsKKworICAgIC8vIE1vdmUgbWVtb3J5IHZhbHVlcyB0byB0aGUgYXBw
cm9yaWF0ZSBwbGFjZXMsIGlmIG5lZWRlZC4KKyAgICBWYWx1ZSogYmFzZU1lbW9yeSA9IG51bGxw
dHI7CisgICAgVmVjdG9yPFZhbHVlKj4gc2l6ZXM7CisgICAgaWYgKG1lbW9yeSkgeworICAgICAg
ICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbWVtb3J5LT5tZW1vcnkoKSk7CisgICAgICAgIFZhbHVlKiBzaXplID0gYmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAg
ICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0
d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOworICAg
ICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXpl
UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LT5waW5u
ZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBzaXplcy5hcHBlbmQo
YmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgc2l6ZSwKKyAgICAg
ICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGluZm8uc2l6ZU9mZnNldCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEdldCBvdXIg
YXJndW1lbnRzLgorICAgIFZlY3RvcjxWYWx1ZSo+IGFyZ3VtZW50czsKKyAgICBqc2NDYWxsaW5n
Q29udmVudGlvbigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLT5hcmd1bWVudHMsIHByb2MsIGJs
b2NrLCBPcmlnaW4oKSwgWyZdIChWYWx1ZSogYXJndW1lbnQsIHVuc2lnbmVkKSB7CisgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOworICAgIH0pOworCisgICAgLy8gTW92ZSB0aGUg
YXJndW1lbnRzIGludG8gcGxhY2UuCisgICAgVmFsdWUqIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgT3JpZ2luKCksIGFyZ3VtZW50cywgdG9C
M1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKSwgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQpIHsKKyAgICAgICAgaWYgKG1lbW9yeSkgeworICAgICAgICAgICAgQVNTRVJUKHNpemVz
LnNpemUoKSA9PSBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgp
KTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VN
ZW1vcnksIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5
UG9pbnRlcikpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplcy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZShzaXplc1tpXSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygp
LnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOworICAgICAgICB9CisKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobWFpbkZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIC8v
IFJldHVybiB0aGUgcmVzdWx0LCBpZiBuZWVkZWQuCisgICAgaWYgKHNpZ25hdHVyZS0+cmV0dXJu
VHlwZSAhPSBWb2lkKQorICAgICAgICBibG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IEIzOjpSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgYmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSk7CisKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2MpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2
bSwgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIE1lbW9yeSogbWVtb3J5LCBGdW5jdGlvbkluZm9y
bWF0aW9uIGluZm8sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25z
LCB1bnNpZ25lZCBvcHRMZXZlbCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlx
dWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKKworICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7Cisg
ICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQtPnVubGlu
a2VkQ2FsbHMpOworICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250
ZXh0LCBzb3VyY2UsIGluZm8sIGZ1bmN0aW9ucyk7CisgICAgaWYgKCFwYXJzZXIucGFyc2UoKSkK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHByb2NlZHVyZS5y
ZXNldFJlYWNoYWJpbGl0eSgpOworICAgIHZhbGlkYXRlKHByb2NlZHVyZSwgIkFmdGVyIHBhcnNp
bmc6XG4iKTsKKworICAgIGZpeFNTQShwcm9jZWR1cmUpOworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKKworICAgIHJlc3VsdC0+Y29k
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jZWR1cmUsIG9wdExldmVs
KTsKKyAgICByZXN1bHQtPmpzRW50cnlQb2ludCA9IGNyZWF0ZUpTV3JhcHBlcih2bSwgaW5mby5z
aWduYXR1cmUsIHJlc3VsdC0+Y29kZS0+Y29kZSgpLCBtZW1vcnkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mOGQ4NDIwYWZmZTcwMTcxNWFhZDgxNjA1MDU3Mzc2NjAzOTZm
MzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCisKK2V4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQq
KTsKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgTWVtb3J5Owor
CitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZN
JiwgVmVjdG9yPHVpbnQ4X3Q+JiwgTWVtb3J5KiwgRnVuY3Rpb25JbmZvcm1hdGlvbiwgY29uc3Qg
VmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNmFjNjcwYTljOGZlYTI2YjA1ZjA4OGU0YjVhMTIwMDQ4
NWZiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGluZ0NvbnZlbnRpb24uY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKKworY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdDb252
ZW50aW9uKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252
ZW50aW9uPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNl
KHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9yPFJlZz4o
KSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKK2NvbnN0IFdhc21DYWxsaW5n
Q29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZl
bnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dhc21DYWxsaW5nQ29udmVu
dGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9u
RmxhZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJlZ2lzdGVycyhH
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAg
ICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJl
Z2lzdGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVnaXN0ZXJzKEZQ
UkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAg
ICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVj
dChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1bWVudFJlZ2lz
dGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisg
ICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc0NDJlNzEyYWZiZjdjNzI3NmFiOTVmODQ5YTI5MTc5ZTMzZDljOWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApA
QCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVu
dFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb25z
dDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0cmFpbmVkVmFsdWUuaCIKKyNpbmNsdWRlICJC
M01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgi
CisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCit0eXBlZGVmIHVuc2lnbmVkICgqTmV4dE9mZnNldCko
dW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUgdHlwZSk7CisKK3RlbXBsYXRlPHVuc2ln
bmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xhc3MgQ2FsbGluZ0Nv
bnZlbnRpb24geworcHVibGljOgorICAgIENhbGxpbmdDb252ZW50aW9uKFZlY3RvcjxSZWc+JiYg
Z3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNhbGxlZVNhdmVS
ZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKGdwckFyZ3MpCisgICAgICAgICwgbV9mcHJB
cmdzKGZwckFyZ3MpCisgICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKGNhbGxlZVNhdmVS
ZWdpc3RlcnMpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBCMzo6VmFsdWVSZXAgbWFy
c2hhbGxBcmd1bWVudEltcGwoVmVjdG9yPFJlZz4gcmVnQXJncywgQjM6OlR5cGUgdHlwZSwgc2l6
ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEIzOjpWYWx1ZVJl
cDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOworCisgICAgICAgIGNvdW50Kys7CisgICAgICAgIEIz
OjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoc3RhY2tPZmZz
ZXQpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCwgdHlw
ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQjM6OlZhbHVlUmVwIG1h
cnNoYWxsQXJndW1lbnQoQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQsIHNp
emVfdCYgZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQjM6OkludDMyOgorICAgICAg
ICBjYXNlIEIzOjpJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1w
bChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOworICAgICAg
ICBjYXNlIEIzOjpGbG9hdDoKKyAgICAgICAgY2FzZSBCMzo6RG91YmxlOgorICAgICAgICAgICAg
cmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlwZSwgZnBBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCk7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxv
YWRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVzLCBCMzo6UHJvY2Vk
dXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayogYmxvY2ssIEIzOjpPcmlnaW4gb3JpZ2luLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQjM6OlZhbHVlKiBmcmFt
ZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkZyYW1lUG9p
bnRlciwgb3JpZ2luKTsKKworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAg
ICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09m
ZnNldCA9IGhlYWRlclNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1
bWVudFR5cGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBCMzo6VHlwZSB0eXBlID0gdG9C
M1R5cGUoYXJndW1lbnRUeXBlc1tpXSk7CisgICAgICAgICAgICBCMzo6VmFsdWUqIGFyZ3VtZW50
OworICAgICAgICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJndW1lbnQodHlwZSwg
Z3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAg
ICAgIGlmIChyZXAuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYmxvY2st
PmFwcGVuZE5ldzxCMzo6QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgb3JpZ2luLCByZXAucmVnKCkp
OworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEIzOjpJbnQzMikKKyAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OlRy
dW5jLCBvcmlnaW4sIGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSG93IGRv
IEkgZ2V0IGEgZmxvYXQgZnJvbSBhIEZQUj8gV2UgZG9uJ3Qgc3VwcG9ydCBmbG9hdGluZyBwb2lu
dHMgeWV0IHNvIGl0J3Mgbm90IGEgYmlnIGRlYWwuLi4geWV0LgorICAgICAgICAgICAgICAgIC8v
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzc3MAorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVwLmlzU3RhY2tBcmd1
bWVudCgpKTsKKyAgICAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3MgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsCisg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJv
Yywgb3JpZ2luLCByZXAub2Zmc2V0RnJvbVNQKCkpKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6TG9hZCwgdHlw
ZSwgb3JpZ2luLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZ1bmN0b3Io
YXJndW1lbnQsIGkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSXQncyBleHBlY3RlZCB0
aGF0IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdlbmVyYXRvciBmb3IgdGhlIGNhbGwg
b3BlcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgQjM6OlZhbHVl
KiBzZXR1cENhbGwoQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6OkJhc2ljQmxvY2sqIGJsb2NrLCBC
Mzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgVmVjdG9yPEIzOjpWYWx1ZSo+JiBhcmd1bWVudHMsIEIz
OjpUeXBlIHJldHVyblR5cGUsIGNvbnN0IEZ1bmN0b3ImIHBhdGNocG9pbnRGdW5jdG9yKSBjb25z
dAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNp
emVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3RhY2tPZmZzZXQgPSBo
ZWFkZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAgICAgIFZlY3RvcjxC
Mzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRBcmd1bWVudHM7CisgICAgICAgIGZvciAo
QjM6OlZhbHVlKiBhcmd1bWVudCA6IGFyZ3VtZW50cykgeworICAgICAgICAgICAgQjM6OlZhbHVl
UmVwIHJlcCA9IG1hcnNoYWxsQXJndW1lbnQoYXJndW1lbnQtPnR5cGUoKSwgZ3BBcmd1bWVudENv
dW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIGNvbnN0cmFp
bmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShhcmd1bWVudCwgcmVwKSk7
CisgICAgICAgIH0KKworICAgICAgICBwcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVz
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zm
c2V0KSk7CisKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2Nr
LT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgcmV0dXJuVHlwZSwgb3JpZ2lu
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lz
dGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kVmVjdG9yKGNvbnN0cmFpbmVkQXJndW1lbnRzKTsKKyAgICAgICAgcGF0Y2hwb2lu
dEZ1bmN0b3IocGF0Y2hwb2ludCk7CisKKyAgICAgICAgaWYgKHJldHVyblR5cGUgPT0gQjM6OlZv
aWQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwYXRjaHBvaW50LT5y
ZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0
b3I8UmVnPiBtX2dwckFyZ3M7CisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9mcHJBcmdzOworICAg
IGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBSZWdp
c3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7Cit9OworCitpbmxpbmUgdW5zaWduZWQgbmV4
dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSkKK3sKKyAgICByZXR1
cm4gY3VycmVudE9mZnNldCArIHNpemVvZihSZWdpc3Rlcik7Cit9CisKK2NvbnN0ZXhwciB1bnNp
Z25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBz
aXplb2YoUmVnaXN0ZXIpOwordHlwZWRlZiBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXpl
LCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5nQ29udmVudGlvbjsKKwordHlwZWRlZiBKU0NDYWxs
aW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0NvbnZlbnRpb247CisKK2NvbnN0IEpTQ0NhbGxpbmdD
b252ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlvbigpOworY29uc3QgV2FzbUNhbGxpbmdDb252
ZW50aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWI1YjFhZGQ5NzI4ODc3NTg1ZjVkZWI3
ZWRlZmNjYTBhMjNiYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIENvcHly
aWdodCAoYykgMjAxNSBieSB0aGUgcmVwb3NpdG9yeSBhdXRob3JzIG9mCisgKiBXZWJBc3NlbWJs
eS9wb2x5ZmlsbC1wcm90b3R5cGUtMS4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisg
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJC
M1R5cGUuaCIKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBKU0Z1bmN0aW9uOworCituYW1lc3BhY2UgV2FzbSB7CisKK2VudW0gVHlwZSA6IHVp
bnQ4X3QgeworICAgIFZvaWQsCisgICAgSTMyLAorICAgIEk2NCwKKyAgICBGMzIsCisgICAgRjY0
LAorICAgIExhc3RWYWx1ZVR5cGUgPSBGNjQsCit9OworCitzdGF0aWNfYXNzZXJ0KEkzMiA9PSAx
LCAiV2FzbSBuZWVkcyBJMzIgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOworc3RhdGljX2Fzc2VydChJ
NjQgPT0gMiwgIldhc20gbmVlZHMgSTY0IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKK3N0YXRpY19h
c3NlcnQoRjMyID09IDMsICJXYXNtIG5lZWRzIEYzMiB0byBoYXZlIHRoZSB2YWx1ZSAzIik7Citz
dGF0aWNfYXNzZXJ0KEY2NCA9PSA0LCAiV2FzbSBuZWVkcyBGNjQgdG8gaGF2ZSB0aGUgdmFsdWUg
NCIpOworCitpbmxpbmUgQjM6OlR5cGUgdG9CM1R5cGUoVHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgSTMyOiByZXR1cm4gQjM6OkludDMyOworICAgIGNhc2UgSTY0
OiByZXR1cm4gQjM6OkludDY0OworICAgIGNhc2UgRjMyOiByZXR1cm4gQjM6OkZsb2F0OworICAg
IGNhc2UgRjY0OiByZXR1cm4gQjM6OkRvdWJsZTsKKyAgICBjYXNlIFZvaWQ6IHJldHVybiBCMzo6
Vm9pZDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworaW5saW5lIGJvb2wgaXNWYWx1ZVR5cGUoVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSTMyOgorICAgIGNhc2UgSTY0OgorICAgIGNh
c2UgRjMyOgorICAgIGNhc2UgRjY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3N0cnVj
dCBTaWduYXR1cmUgeworICAgIFR5cGUgcmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8VHlwZT4gYXJn
dW1lbnRzOworfTsKKworc3RydWN0IEZ1bmN0aW9uSW1wb3J0IHsKKyAgICBTdHJpbmcgZnVuY3Rp
b25OYW1lOworfTsKKworc3RydWN0IEZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIHsKKyAgICB1aW50
MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICB1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4Owor
fTsKKworc3RydWN0IEZ1bmN0aW9uRGVjbGFyYXRpb24geworICAgIHVpbnQzMl90IHNpZ25hdHVy
ZUluZGV4OworfTsKKworc3RydWN0IEZ1bmN0aW9uUG9pbnRlclRhYmxlIHsKKyAgICB1aW50MzJf
dCBzaWduYXR1cmVJbmRleDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmN0aW9uSW5kaWNlczsK
KyAgICBWZWN0b3I8SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKK307CisKK3N0cnVjdCBGdW5jdGlv
bkluZm9ybWF0aW9uIHsKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZTsKKyAgICBzaXplX3Qgc3Rh
cnQ7CisgICAgc2l6ZV90IGVuZDsKK307CisKK3N0cnVjdCBVbmxpbmtlZENhbGwgeworICAgIENv
ZGVMb2NhdGlvbkNhbGwgY2FsbExvY2F0aW9uOworICAgIHNpemVfdCBmdW5jdGlvbkluZGV4Owor
fTsKKworc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb24geworICAgIFZlY3RvcjxVbmxpbmtlZENh
bGw+IHVubGlua2VkQ2FsbHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4g
Y29kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBqc0VudHJ5UG9pbnQ7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wYmNlN2UzOWJjZjhkNzY1Y2IyYmRhZjYxMzhmMGIzYWJhMjEz
ZThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitlbnVtIGNsYXNzIEJsb2Nr
VHlwZSB7CisgICAgSWYsCisgICAgQmxvY2ssCisgICAgTG9vcAorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGV4dD4KK2NsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlciB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHBy
ZXNzaW9uVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENv
bnRyb2xUeXBlOworCisgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgY29uc3Qg
VmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOworCisgICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJs
b2NrKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKE9wVHlw
ZSk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Np
b24oT3BUeXBlKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKKworICAgIENvbnRleHQmIG1f
Y29udGV4dDsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhwcmVzc2lvblN0YWNr
OworICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7CisgICAgY29uc3QgU2ln
bmF0dXJlJiBtX3NpZ25hdHVyZTsKKyAgICBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlv
bj4mIG1fZnVuY3Rpb25zOworICAgIHVuc2lnbmVkIG1fdW5yZWFjaGFibGVCbG9ja3MgeyAwIH07
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBW
ZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKKyAgICA6IFBhcnNlcihzb3Vy
Y2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQp
CisgICAgLCBtX3NpZ25hdHVyZSgqaW5mby5zaWduYXR1cmUpCisgICAgLCBtX2Z1bmN0aW9ucyhm
dW5jdGlvbnMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigiUGFyc2lu
ZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBlbmRpbmcgYXQ6ICIsIGlu
Zm8uZW5kKTsKKyAgICBtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJlLmFyZ3VtZW50
cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZSgpCit7CisgICAgdWludDMyX3QgbG9jYWxDb3VudDsKKyAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGxvY2FsQ291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7CisgICAgICAgIHVp
bnQzMl90IG51bWJlck9mTG9jYWxzOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG51bWJl
ck9mTG9jYWxzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBUeXBlIHR5
cGVPZkxvY2FsOworICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2NvbnRleHQuYWRkTG9jYWwodHlw
ZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyc2VCbG9j
aygpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
dWludDhfdCBvcDsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSB8fCAhaXNWYWxpZE9wVHlw
ZShvcCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIFdURjo6
ZGF0YUxvZ0xuKCJhdHRlbXB0ZWQgdG8gZGVjb2RlIGludmFsaWQgb3A6ICIsIFJhd1BvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIsIFJhd1BvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJwcm9jZXNzaW5nIG9wICgiLCBtX3VucmVhY2hhYmxlQmxvY2tzLCAiKTogIiwg
IFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3ApKSwgIiBhdCBvZmZzZXQ6ICIs
IFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9vZmZzZXQpKSk7CisgICAgICAg
ICAgICBtX2NvbnRleHQuZHVtcChtX2NvbnRyb2xTdGFjaywgbV9leHByZXNzaW9uU3RhY2spOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wID09IE9wVHlwZTo6RW5kICYmICFtX2NvbnRyb2xT
dGFjay5zaXplKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobV91bnJlYWNo
YWJsZUJsb2NrcykgeworICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lv
bihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcHJvY2VzcyB1bnJl
YWNoYWJsZSBvcDoiLCBvcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFwYXJzZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8
T3BUeXBlPihvcCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgLy8gSSdtIG5vdCBzdXJlIGlm
IHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJlLi4uCisgICAgcmV0dXJu
IHRydWU7Cit9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wKSBjYXNlIG5hbWU6
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkgeworICAgICAgICBFeHByZXNz
aW9uVHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEV4
cHJlc3Npb25UeXBlIGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOworICAgICAg
ICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250ZXh0LmJpbmFyeU9w
KHN0YXRpY19jYXN0PEJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdodCwgcmVzdWx0KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5k
KHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZPUl9FQUNIX1dB
U01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpIHsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgYXJnID0g
bV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVz
dWx0OworICAgICAgICBpZiAoIW1fY29udGV4dC51bmFyeU9wKHN0YXRpY19jYXN0PFVuYXJ5T3BU
eXBlPihvcCksIGFyZywgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NBU0Up
IHsKKyAgICAgICAgdWludDMyX3QgYWxpZ25tZW50OworICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGFsaWdubWVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdWlu
dDMyX3Qgb2Zmc2V0OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG9mZnNldCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcG9pbnRlciA9
IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJl
c3VsdDsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQubG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBl
PihvcCksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENS
RUFURV9DQVNFKSB7CisgICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKKyAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihhbGlnbm1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihvZmZz
ZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEV4cHJlc3Npb25UeXBl
IHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHJl
dHVybiBtX2NvbnRleHQuc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+KG9wKSwgcG9pbnRl
ciwgdmFsdWUsIG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OiB7
CisgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNvbnN0YW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIsIGNvbnN0YW50KSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgT3BUeXBlOjpJNjRDb25zdDog
eworICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQ2
NChjb25zdGFudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoSTY0LCBjb25zdGFudCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6
IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIo
aW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBFeHByZXNzaW9uVHlw
ZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250ZXh0LmdldExvY2FsKGluZGV4LCByZXN1bHQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNl
IE9wVHlwZTo6U2V0TG9jYWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7
CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZhbHVlKTsKKyAgICB9
CisKKyAgICBjYXNlIE9wVHlwZTo6Q2FsbDogeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChmdW5jdGlvbkluZGV4ID49IG1fZnVu
Y3Rpb25zLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjb25z
dCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF07
CisKKyAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCkpOwor
CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lv
bjsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBpbmZvLCBh
cmdzLCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChy
ZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQorICAgICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgY2FzZSBPcFR5cGU6OkJsb2NrOiB7CisgICAgICAgIFR5cGUgaW5saW5lU2lnbmF0dXJl
OworICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25hdHVyZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKG1fY29u
dGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgY2FzZSBPcFR5cGU6Okxvb3A6IHsKKyAgICAgICAgVHlwZSBpbmxpbmVTaWdu
YXR1cmU7CisgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2lnbmF0dXJlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQo
bV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGNhc2UgT3BUeXBlOjpJZjogeworICAgICAgICBUeXBlIGlubGluZVNp
Z25hdHVyZTsKKyAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxpbmVTaWduYXR1cmUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIG1fY29udHJvbFN0
YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxpbmVTaWduYXR1cmUpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsK
KyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3QoKSk7
CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OkJyOgorICAgIGNhc2UgT3BUeXBlOjpCcklmOiB7
CisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0
YXJnZXQpIHx8IHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uID0gQ29udGV4
dDo6ZW1wdHlFeHByZXNzaW9uOworICAgICAgICBpZiAob3AgPT0gT3BUeXBlOjpCcklmKQorICAg
ICAgICAgICAgY29uZGl0aW9uID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CisKKyAgICAgICAg
Q29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkg
LSAxIC0gdGFyZ2V0XTsKKworICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFkZEJyYW5jaChkYXRh
LCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlw
ZTo6UmV0dXJuOiB7CisgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gcmV0dXJuVmFs
dWVzOworICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSAhPSBWb2lkKQorICAgICAg
ICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpKTsK
KworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIG1fY29u
dGV4dC5hZGRSZXR1cm4ocmV0dXJuVmFsdWVzKTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6
RW5kOiB7CisgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFz
dCgpOworICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lv
blN0YWNrKTsKKyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6CisgICAgY2Fz
ZSBPcFR5cGU6OlNlbGVjdDoKKyAgICBjYXNlIE9wVHlwZTo6QnJUYWJsZToKKyAgICBjYXNlIE9w
VHlwZTo6Tm9wOgorICAgIGNhc2UgT3BUeXBlOjpEcm9wOgorICAgIGNhc2UgT3BUeXBlOjpGMzJD
b25zdDoKKyAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6CisgICAgY2FzZSBPcFR5cGU6OlRlZUxv
Y2FsOgorICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6CisgICAgY2FzZSBPcFR5cGU6OlNldEds
b2JhbDoKKyAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OgorICAgICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0Pgor
Ym9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24o
T3BUeXBlIG9wKQoreworICAgIEFTU0VSVChtX3VucmVhY2hhYmxlQmxvY2tzKTsKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgY2FzZSBPcFR5cGU6OkVsc2U6IHsKKyAgICAgICAgaWYgKG1fdW5yZWFj
aGFibGVCbG9ja3MgPiAxKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgQ29u
dHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIEFTU0VSVChk
YXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2Nr
cyA9IDA7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShkYXRhKTsKKyAgICB9CisK
KyAgICBjYXNlIE9wVHlwZTo6RW5kOiB7CisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tz
ID09IDEpIHsKKyAgICAgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFjay50
YWtlTGFzdCgpOworICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXNDb250aW51YXRpb25SZWFj
aGFibGUoZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgbV91bnJlYWNoYWJsZUJsb2Nrcy0tOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBjYXNlIE9wVHlwZTo6TG9vcDoKKyAgICBjYXNlIE9wVHlwZTo6SWY6CisgICAgY2Fz
ZSBPcFR5cGU6OkJsb2NrOiB7CisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MrKzsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gdHdvIGltbWVkaWF0ZSBjYXNlcworICAg
IGNhc2UgT3BUeXBlOjpCcjoKKyAgICBjYXNlIE9wVHlwZTo6QnJJZjogeworICAgICAgICB1aW50
MzJfdCB1bnVzZWQ7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodW51c2VkKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHBhcnNlVmFyVUludDMyKHVudXNl
ZCk7CisgICAgfQorCisgICAgLy8gb25lIGltbWVkaWF0ZSBjYXNlcworICAgIGNhc2UgT3BUeXBl
OjpSZXR1cm46CisgICAgY2FzZSBPcFR5cGU6OkkzMkNvbnN0OgorICAgIGNhc2UgT3BUeXBlOjpT
ZXRMb2NhbDoKKyAgICBjYXNlIE9wVHlwZTo6R2V0TG9jYWw6IHsKKyAgICAgICAgdWludDMyX3Qg
dW51c2VkOworICAgICAgICByZXR1cm4gcGFyc2VWYXJVSW50MzIodW51c2VkKTsKKyAgICB9CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKyN1bmRlZiBDUkVBVEVfQ0FTRQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2QxMzNhN2UyMDU1Y2VjOWQyMWZhZGEwMDA4NzEw
ODg4MWRmMjMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK01lbW9yeTo6TWVtb3J5KHVpbnQzMl90IHN0YXJ0aW5nU2l6ZSwg
dWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdp
c3RlcnMpCisgICAgOiBtX21vZGUoTW9kZTo6Qm91bmRzQ2hlY2tpbmcpCisgICAgLCBtX3NpemUo
c3RhcnRpbmdTaXplKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKKyAgICAvLyBGSVhNRTog
SWYgd2UgYWRkIHNpZ25hbCBiYXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBuZWVkIGV4dHJh
IHNwYWNlIGZvciBvdmVyZmxvdyBvbiBsb2FkLgorICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworICAgICwgbV9tYXBwZWRDYXBhY2l0eShz
dGF0aWNfY2FzdDx1aW50NjRfdD4obWF4UGFnZUNvdW50KSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihwYWdlU2l6ZSkpCit7CisgICAgQVNTRVJUKHBpbm5lZFNpemVSZWdpc3RlcnMuc2l6ZSgpID4g
MCk7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcg
Zm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzNjAwCisgICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5
LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICBpZiAocmVz
dWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBkaWZmZXJl
bnQgbnVtYmVyLgorICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gbV9jYXBhY2l0eTsKKyAgICAg
ICAgcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1B
UF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBNQVBf
RkFJTEVEKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChzdGFydGlu
Z1NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgaWYgKG1wcm90ZWN0KHJlc3VsdCwgc3Rh
cnRpbmdTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICBtdW5tYXAocmVz
dWx0LCBtX21hcHBlZENhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVu
c2lnbmVkIHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyA9IHBpbm5lZFNpemVSZWdpc3RlcnMuc2l6
ZSgpICsgMTsKKyAgICBqc2NDYWxsaW5nQ29udmVudGlvbigpLm1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cy5mb3JFYWNoKFsmXSAoUmVnIHJlZykgeworICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigp
OworICAgICAgICBpZiAoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyB8fCBSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyA9PSAxKSB7CisgICAgICAgICAgICBtX3Bpbm5l
ZFJlZ2lzdGVycy5iYXNlTWVtb3J5UG9pbnRlciA9IGdwcjsKKyAgICAgICAgICAgIHJlbWFpbmlu
Z1Bpbm5lZFJlZ2lzdGVycy0tOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fcGlubmVk
UmVnaXN0ZXJzLnNpemVSZWdpc3RlcnMuYXBwZW5kKHsgZ3ByLCBwaW5uZWRTaXplUmVnaXN0ZXJz
Wy0tcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIC0gMV0gfSk7CisgICAgfSk7CisKKyAgICBBU1NF
UlQoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyk7CisgICAgbV9tZW1vcnkgPSByZXN1bHQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCit9IC8vIG5hbWVzcGFjZSBXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2IyMGEwNGMwNmQ2MWFhMGY4YzcyN2U0Y2QxYmZhNDNiYzk0ZDVkZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
aApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RydWN0IFBpbm5lZFNpemVS
ZWdpc3RlckluZm8geworICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7CisgICAgdW5zaWduZWQgc2l6
ZU9mZnNldDsKK307CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25l
IG1lbW9yeSBzaXplIHJlZ2lzdGVyLiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3RvciB3aXRoIG9u
bHkgb25lCisvLyBlbnRyeS4gU3BlY2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRoZSBzaXplT2Zm
c2V0ID09IDAuIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLAorLy8gd2Ug
Y2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCitzdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJ
bmZvIHsKKyAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsK
KyAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Cit9OworCitjb25zdGV4cHIgdWludDMyX3Qg
cGFnZVNpemUgPSA2NCAqIEtCOworY29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VDb3VudCA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PigoMXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7CisKK2NsYXNzIE1l
bW9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9y
dCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyNjkzCisgICAgZW51bSBjbGFzcyBNb2RlIHsKKyAgICAgICAgQm91bmRzQ2hlY2tpbmcK
KyAgICB9OworCisgICAgTWVtb3J5KCkgPSBkZWZhdWx0OworICAgIE1lbW9yeSh1aW50MzJfdCBz
dGFydGluZ1NpemUsIHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBw
aW5uZWRTaXplUmVnaXN0ZXJzKTsKKworICAgIH5NZW1vcnkoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fbWVtb3J5KQorICAgICAgICAgICAgbXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5
KTsKKyAgICB9CisKKyAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsg
fQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25z
dCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
cGlubmVkUmVnaXN0ZXJzOyB9CisKKyAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KKworICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fbWVtb3J5KTsKKyAgICAgICAgaWYgKG5ld1NpemUgPiBtX2NhcGFjaXR5KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAhbXByb3RlY3QobV9tZW1v
cnksIG5ld1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgIH0KKworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9y
eSwgbV9zaXplKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxw
dHIgfTsKKyAgICBQaW5uZWRSZWdpc3RlckluZm8gbV9waW5uZWRSZWdpc3RlcnM7CisgICAgTW9k
ZSBtX21vZGU7CisgICAgdWludDMyX3QgbV9zaXplIHsgMCB9OworICAgIHVpbnQzMl90IG1fY2Fw
YWNpdHkgeyAwIH07CisgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1M
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2VlMDFiMGFhNTMzMDQ4OWNiZWNlODk4Y2M4MGRiNjExZmExNDIwNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuY3BwCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVQ
YXJzZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTV2FzbU1v
ZHVsZS5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisj
aW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCit7CisgICAgaWYgKG1fc291
cmNlTGVuZ3RoIDwgOCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY29uc3VtZUNo
YXJhY3RlcigwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY29uc3VtZVN0cmlu
ZygiYXNtIikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNraXAgdGhlIHZlcnNp
b24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAg
ICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOworICAgIGlmICghcGFyc2VVSW50MzIodmVyc2lvbk51
bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9
IG1hZ2ljTnVtYmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9jZXNzaW5nIGhlYWRlci4iKTsKKworICAg
IFNlY3Rpb25zOjpTZWN0aW9uIHByZXZpb3VzU2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOwor
ICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNlTGVuZ3RoKSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyB0byBwYXJzZSBuZXh0IHNlY3Rp
b24gYXQgb2Zmc2V0OiAiLCBtX29mZnNldCk7CisKKyAgICAgICAgdWludDhfdCBzZWN0aW9uQnl0
ZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dM
bigiU2VjdGlvbiBieXRlOiAiLCBzZWN0aW9uQnl0ZSk7CisKKyAgICAgICAgU2VjdGlvbnM6OlNl
Y3Rpb24gc2VjdGlvbiA9IFNlY3Rpb25zOjpVbmtub3duOworICAgICAgICBpZiAoc2VjdGlvbkJ5
dGUpIHsKKyAgICAgICAgICAgIGlmIChzZWN0aW9uQnl0ZSA8IFNlY3Rpb25zOjpVbmtub3duKQor
ICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0aW9uczo6U2VjdGlvbj4o
c2VjdGlvbkJ5dGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdWludDMyX3Qgc2Vj
dGlvbk5hbWVMZW5ndGg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25O
YW1lTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUgc2VjdGlvbidzIHNpemUuCisgICAg
ICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCArIFdURjo6TEVCRGVjb2Rl
cjo6bWF4MzJCaXRMRUJCeXRlTGVuZ3RoID49IG1fc291cmNlTGVuZ3RoKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBhbnkg
Y3VzdG9tIHNlY3Rpb25zIHlldC4KKworICAgICAgICAgICAgbV9vZmZzZXQgKz0gc2VjdGlvbk5h
bWVMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIVNlY3Rpb25zOjp2YWxpZGF0ZU9y
ZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihzZWN0aW9uTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICB1bnNpZ25lZCBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25MZW5ndGg7CisKKyAgICAgICAg
c3dpdGNoIChzZWN0aW9uKSB7CisKKyAgICAgICAgY2FzZSBTZWN0aW9uczo6TWVtb3J5OiB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNp
bmcgTWVtb3J5LiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBTZWN0aW9uczo6RnVuY3Rpb25UeXBlczogeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIHR5cGVzLiIpOworICAg
ICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uVHlwZXMoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
U2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzaWduYXR1cmVzLiIpOworICAg
ICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBTZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBkZWZpbml0aW9ucy4i
KTsKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFNlY3Rpb25zOjpVbmtub3duOgorICAgICAgICAvLyBGSVhNRTogRGVsZXRl
IHRoaXMgd2hlbiB3ZSBzdXBwb3J0IGFsbCB0aGUgc2VjdGlvbnMuCisgICAgICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
VW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHNl
Y3Rpb25MZW5ndGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4oIkZpbmlzaGVkIHBh
cnNpbmcgc2VjdGlvbi4iKTsKKworICAgICAgICBpZiAoZW5kICE9IG1fb2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247
CisgICAgfQorCisgICAgLy8gVE9ETworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQoreworICAgIHVpbnQ4X3QgZmxhZ3M7CisgICAgaWYgKCFw
YXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDMy
X3Qgc2l6ZTsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKHNpemUgPiBtYXhQYWdlQ291bnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OworICAgIGlmIChmbGFn
cykgeworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+
IG1heFBhZ2VDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBj
YXBhY2l0eSAqPSBwYWdlU2l6ZTsKKyAgICBzaXplICo9IHBhZ2VTaXplOworCisgICAgVmVjdG9y
PHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OworICAgIG1fbWVtb3J5ID0gc3RkOjptYWtl
X3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7CisgICAgcmV0dXJu
IG1fbWVtb3J5LT5tZW1vcnkoKTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25UeXBlcygpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQz
Mihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBjb3VudCk7CisKKyAgICBtX3NpZ25hdHVyZXMucmVz
aXplKGNvdW50KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgIHVpbnQ4X3QgdHlwZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZSAhPSAweDQwKSAvLyBG
dW5jdGlvbiB0eXBlIGNvbnN0YW50LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJHb3QgZnVuY3Rpb24gdHlw
ZS4iKTsKKworICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50OworICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJhcmd1bWVudENv
dW50OiAiLCBhcmd1bWVudENvdW50KTsKKworICAgICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRU
eXBlczsKKyAgICAgICAgYXJndW1lbnRUeXBlcy5yZXNpemUoYXJndW1lbnRDb3VudCk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8ICFpc1ZhbHVlVHlwZShzdGF0aWNfY2Fz
dDxUeXBlPih0eXBlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19jYXN0PFR5cGU+KHR5cGUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBUeXBlIHJldHVyblR5cGU7CisKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7CisKKyAgICAgICAgaWYgKHR5cGUpIHsKKyAg
ICAgICAgICAgIFR5cGUgdmFsdWU7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZh
bHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm5U
eXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworCisgICAgICAgIG1fc2lnbmF0dXJlc1tpXSA9
IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9OworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVz
KCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9mdW5jdGlvbnMucmVzaXplKGNvdW50
KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
IHVpbnQzMl90IHR5cGVOdW1iZXI7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodHlwZU51
bWJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHR5cGVOdW1i
ZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBtX2Z1bmN0aW9uc1tpXS5zaWduYXR1cmUgPSAmbV9zaWduYXR1cmVzW3R5cGVOdW1i
ZXJdOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGNvdW50ICE9IG1fZnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWlu
dDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9u
U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRnVuY3Rpb25JbmZv
cm1hdGlvbiYgaW5mbyA9IG1fZnVuY3Rpb25zW2ldOworICAgICAgICBpbmZvLnN0YXJ0ID0gbV9v
ZmZzZXQ7CisgICAgICAgIGluZm8uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNpemU7CisgICAg
ICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTQwZDVhNjNiNGJlODBkMTFlMGM0ZTk4YTk1ZmE0ZmZjMjc5NDcyYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21Q
YXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKK2NsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXIgeworcHVi
bGljOgorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hZ2ljTnVtYmVyID0gMHhjOworCisg
ICAgTW9kdWxlUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyKQorICAg
ICAgICA6IFBhcnNlcihzb3VyY2VCdWZmZXIsIDAsIHNvdXJjZUJ1ZmZlci5zaXplKCkpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CisKKyAgICBj
b25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9uSW5mb3JtYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+
JiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5KCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VGdW5jdGlvblR5cGVzKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VGdW5jdGlvblNpZ25hdHVyZXMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUZ1bmN0aW9uRGVmaW5pdGlvbih1aW50MzJfdCBudW1iZXIpOworCisgICAgVmVjdG9yPEZ1bmN0
aW9uSW5mb3JtYXRpb24+IG1fZnVuY3Rpb25zOworICAgIFZlY3RvcjxTaWduYXR1cmU+IG1fc2ln
bmF0dXJlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX21lbW9yeTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NkOWVlNzBjYWU1
M2Q3NWZkZWI5MTkzMGQ4OWQzYzA3OGM3N2ZhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcHMuaApAQCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCB1c2luZyB3YXNtLmpzb24uCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSA8Y3N0ZGludD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1AobWFjcm8p
IFwKKyAgICBtYWNybyhJMzJDb25zdCwgMHgxMCwgT29wcykgXAorICAgIG1hY3JvKEk2NENvbnN0
LCAweDExLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0Q29uc3QsIDB4MTIsIE9vcHMpIFwKKyAgICBt
YWNybyhGMzJDb25zdCwgMHgxMywgT29wcykgXAorICAgIG1hY3JvKEdldExvY2FsLCAweDE0LCBP
b3BzKSBcCisgICAgbWFjcm8oU2V0TG9jYWwsIDB4MTUsIE9vcHMpIFwKKyAgICBtYWNybyhUZWVM
b2NhbCwgMHgxOSwgT29wcykgXAorICAgIG1hY3JvKEdldEdsb2JhbCwgMHhiYiwgT29wcykgXAor
ICAgIG1hY3JvKFNldEdsb2JhbCwgMHhiYywgT29wcykgXAorICAgIG1hY3JvKENhbGwsIDB4MTYs
IE9vcHMpIFwKKyAgICBtYWNybyhDYWxsSW5kaXJlY3QsIDB4MTcsIE9vcHMpCisKKyNkZWZpbmUg
Rk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AobWFjcm8pIFwKKyAgICBtYWNybyhVbnJlYWNo
YWJsZSwgMHgwLCBPb3BzKSBcCisgICAgbWFjcm8oQmxvY2ssIDB4MSwgT29wcykgXAorICAgIG1h
Y3JvKExvb3AsIDB4MiwgT29wcykgXAorICAgIG1hY3JvKElmLCAweDMsIE9vcHMpIFwKKyAgICBt
YWNybyhFbHNlLCAweDQsIE9vcHMpIFwKKyAgICBtYWNybyhTZWxlY3QsIDB4NSwgT29wcykgXAor
ICAgIG1hY3JvKEJyLCAweDYsIE9vcHMpIFwKKyAgICBtYWNybyhCcklmLCAweDcsIE9vcHMpIFwK
KyAgICBtYWNybyhCclRhYmxlLCAweDgsIE9vcHMpIFwKKyAgICBtYWNybyhSZXR1cm4sIDB4OSwg
T29wcykgXAorICAgIG1hY3JvKERyb3AsIDB4YiwgT29wcykgXAorICAgIG1hY3JvKE5vcCwgMHhh
LCBPb3BzKSBcCisgICAgbWFjcm8oRW5kLCAweGYsIE9vcHMpCisKKyNkZWZpbmUgRk9SX0VBQ0hf
V0FTTV9VTkFSWV9PUChtYWNybykgXAorICAgIG1hY3JvKEkzMkNseiwgMHg1NywgQ2x6KSBcCisg
ICAgbWFjcm8oSTMyQ3R6LCAweDU4LCBPb3BzKSBcCisgICAgbWFjcm8oSTMyUG9wY250LCAweDU5
LCBPb3BzKSBcCisgICAgbWFjcm8oSTY0Q2x6LCAweDcyLCBDbHopIFwKKyAgICBtYWNybyhJNjRD
dHosIDB4NzMsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRQb3BjbnQsIDB4NzQsIE9vcHMpIFwKKyAg
ICBtYWNybyhGMzJBYnMsIDB4N2IsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJOZWcsIDB4N2MsIE9v
cHMpIFwKKyAgICBtYWNybyhGMzJDb3B5c2lnbiwgMHg3ZCwgT29wcykgXAorICAgIG1hY3JvKEYz
MkNlaWwsIDB4N2UsIE9vcHMpIFwKKyAgICBtYWNybyhGMzJGbG9vciwgMHg3ZiwgT29wcykgXAor
ICAgIG1hY3JvKEYzMlRydW5jLCAweDgwLCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTmVhcmVzdCwg
MHg4MSwgT29wcykgXAorICAgIG1hY3JvKEYzMlNxcnQsIDB4ODIsIE9vcHMpIFwKKyAgICBtYWNy
byhGNjRBYnMsIDB4OGYsIE9vcHMpIFwKKyAgICBtYWNybyhGNjROZWcsIDB4OTAsIE9vcHMpIFwK
KyAgICBtYWNybyhGNjRDb3B5c2lnbiwgMHg5MSwgT29wcykgXAorICAgIG1hY3JvKEY2NENlaWws
IDB4OTIsIE9vcHMpIFwKKyAgICBtYWNybyhGNjRGbG9vciwgMHg5MywgT29wcykgXAorICAgIG1h
Y3JvKEY2NFRydW5jLCAweDk0LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TmVhcmVzdCwgMHg5NSwg
T29wcykgXAorICAgIG1hY3JvKEY2NFNxcnQsIDB4OTYsIE9vcHMpCisKKyNkZWZpbmUgRk9SX0VB
Q0hfV0FTTV9CSU5BUllfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJBZGQsIDB4NDAsIEFkZCkg
XAorICAgIG1hY3JvKEkzMlN1YiwgMHg0MSwgU3ViKSBcCisgICAgbWFjcm8oSTMyTXVsLCAweDQy
LCBNdWwpIFwKKyAgICBtYWNybyhJMzJEaXZTLCAweDQzLCBEaXYpIFwKKyAgICBtYWNybyhJMzJE
aXZVLCAweDQ0LCBPb3BzKSBcCisgICAgbWFjcm8oSTMyUmVtUywgMHg0NSwgTW9kKSBcCisgICAg
bWFjcm8oSTMyUmVtVSwgMHg0NiwgT29wcykgXAorICAgIG1hY3JvKEkzMkFuZCwgMHg0NywgQml0
QW5kKSBcCisgICAgbWFjcm8oSTMyT3IsIDB4NDgsIEJpdE9yKSBcCisgICAgbWFjcm8oSTMyWG9y
LCAweDQ5LCBCaXRYb3IpIFwKKyAgICBtYWNybyhJMzJTaGwsIDB4NGEsIFNobCkgXAorICAgIG1h
Y3JvKEkzMlNoclUsIDB4NGIsIFNTaHIpIFwKKyAgICBtYWNybyhJMzJTaHJTLCAweDRjLCBaU2hy
KSBcCisgICAgbWFjcm8oSTMyUm90ciwgMHhiNiwgT29wcykgXAorICAgIG1hY3JvKEkzMlJvdGws
IDB4YjcsIE9vcHMpIFwKKyAgICBtYWNybyhJMzJFcSwgMHg0ZCwgRXF1YWwpIFwKKyAgICBtYWNy
byhJMzJOZSwgMHg0ZSwgTm90RXF1YWwpIFwKKyAgICBtYWNybyhJMzJMdFMsIDB4NGYsIExlc3NU
aGFuKSBcCisgICAgbWFjcm8oSTMyTGVTLCAweDUwLCBMZXNzRXF1YWwpIFwKKyAgICBtYWNybyhJ
MzJMdFUsIDB4NTEsIEJlbG93KSBcCisgICAgbWFjcm8oSTMyTGVVLCAweDUyLCBCZWxvd0VxdWFs
KSBcCisgICAgbWFjcm8oSTMyR3RTLCAweDUzLCBHcmVhdGVyVGhhbikgXAorICAgIG1hY3JvKEkz
MkdlUywgMHg1NCwgR3JlYXRlckVxdWFsKSBcCisgICAgbWFjcm8oSTMyR3RVLCAweDU1LCBBYm92
ZSkgXAorICAgIG1hY3JvKEkzMkdlVSwgMHg1NiwgQWJvdmVFcXVhbCkgXAorICAgIG1hY3JvKEk2
NEFkZCwgMHg1YiwgQWRkKSBcCisgICAgbWFjcm8oSTY0U3ViLCAweDVjLCBTdWIpIFwKKyAgICBt
YWNybyhJNjRNdWwsIDB4NWQsIE11bCkgXAorICAgIG1hY3JvKEk2NERpdlMsIDB4NWUsIERpdikg
XAorICAgIG1hY3JvKEk2NERpdlUsIDB4NWYsIE9vcHMpIFwKKyAgICBtYWNybyhJNjRSZW1TLCAw
eDYwLCBNb2QpIFwKKyAgICBtYWNybyhJNjRSZW1VLCAweDYxLCBPb3BzKSBcCisgICAgbWFjcm8o
STY0QW5kLCAweDYyLCBCaXRBbmQpIFwKKyAgICBtYWNybyhJNjRPciwgMHg2MywgQml0T3IpIFwK
KyAgICBtYWNybyhJNjRYb3IsIDB4NjQsIEJpdFhvcikgXAorICAgIG1hY3JvKEk2NFNobCwgMHg2
NSwgU2hsKSBcCisgICAgbWFjcm8oSTY0U2hyVSwgMHg2NiwgU1NocikgXAorICAgIG1hY3JvKEk2
NFNoclMsIDB4NjcsIFpTaHIpIFwKKyAgICBtYWNybyhJNjRSb3RyLCAweGI4LCBPb3BzKSBcCisg
ICAgbWFjcm8oSTY0Um90bCwgMHhiOSwgT29wcykgXAorICAgIG1hY3JvKEk2NEVxLCAweDY4LCBF
cXVhbCkgXAorICAgIG1hY3JvKEk2NE5lLCAweDY5LCBOb3RFcXVhbCkgXAorICAgIG1hY3JvKEk2
NEx0UywgMHg2YSwgTGVzc1RoYW4pIFwKKyAgICBtYWNybyhJNjRMZVMsIDB4NmIsIExlc3NFcXVh
bCkgXAorICAgIG1hY3JvKEk2NEx0VSwgMHg2YywgQmVsb3cpIFwKKyAgICBtYWNybyhJNjRMZVUs
IDB4NmQsIEJlbG93RXF1YWwpIFwKKyAgICBtYWNybyhJNjRHdFMsIDB4NmUsIEdyZWF0ZXJUaGFu
KSBcCisgICAgbWFjcm8oSTY0R2VTLCAweDZmLCBHcmVhdGVyRXF1YWwpIFwKKyAgICBtYWNybyhJ
NjRHdFUsIDB4NzAsIEFib3ZlKSBcCisgICAgbWFjcm8oSTY0R2VVLCAweDcxLCBBYm92ZUVxdWFs
KSBcCisgICAgbWFjcm8oRjMyQWRkLCAweDc1LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyU3ViLCAw
eDc2LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTXVsLCAweDc3LCBPb3BzKSBcCisgICAgbWFjcm8o
RjMyRGl2LCAweDc4LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTWluLCAweDc5LCBPb3BzKSBcCisg
ICAgbWFjcm8oRjMyTWF4LCAweDdhLCBPb3BzKSBcCisgICAgbWFjcm8oRjMyRXEsIDB4ODMsIE9v
cHMpIFwKKyAgICBtYWNybyhGMzJOZSwgMHg4NCwgT29wcykgXAorICAgIG1hY3JvKEYzMkx0LCAw
eDg1LCBPb3BzKSBcCisgICAgbWFjcm8oRjMyTGUsIDB4ODYsIE9vcHMpIFwKKyAgICBtYWNybyhG
MzJHdCwgMHg4NywgT29wcykgXAorICAgIG1hY3JvKEYzMkdlLCAweDg4LCBPb3BzKSBcCisgICAg
bWFjcm8oRjY0QWRkLCAweDg5LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0U3ViLCAweDhhLCBPb3Bz
KSBcCisgICAgbWFjcm8oRjY0TXVsLCAweDhiLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0RGl2LCAw
eDhjLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0TWluLCAweDhkLCBPb3BzKSBcCisgICAgbWFjcm8o
RjY0TWF4LCAweDhlLCBPb3BzKSBcCisgICAgbWFjcm8oRjY0RXEsIDB4OTcsIE9vcHMpIFwKKyAg
ICBtYWNybyhGNjROZSwgMHg5OCwgT29wcykgXAorICAgIG1hY3JvKEY2NEx0LCAweDk5LCBPb3Bz
KSBcCisgICAgbWFjcm8oRjY0TGUsIDB4OWEsIE9vcHMpIFwKKyAgICBtYWNybyhGNjRHdCwgMHg5
YiwgT29wcykgXAorICAgIG1hY3JvKEY2NEdlLCAweDljLCBPb3BzKQorCisjZGVmaW5lIEZPUl9F
QUNIX1dBU01fTUVNT1JZX0xPQURfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJMb2FkOFMsIDB4
MjAsIE9vcHMpIFwKKyAgICBtYWNybyhJMzJMb2FkOFUsIDB4MjEsIE9vcHMpIFwKKyAgICBtYWNy
byhJMzJMb2FkMTZTLCAweDIyLCBPb3BzKSBcCisgICAgbWFjcm8oSTMyTG9hZDE2VSwgMHgyMywg
T29wcykgXAorICAgIG1hY3JvKEk2NExvYWQ4UywgMHgyNCwgT29wcykgXAorICAgIG1hY3JvKEk2
NExvYWQ4VSwgMHgyNSwgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQxNlMsIDB4MjYsIE9vcHMp
IFwKKyAgICBtYWNybyhJNjRMb2FkMTZVLCAweDI3LCBPb3BzKSBcCisgICAgbWFjcm8oSTY0TG9h
ZDMyUywgMHgyOCwgT29wcykgXAorICAgIG1hY3JvKEk2NExvYWQzMlUsIDB4MjksIE9vcHMpIFwK
KyAgICBtYWNybyhJMzJMb2FkLCAweDJhLCBPb3BzKSBcCisgICAgbWFjcm8oSTY0TG9hZCwgMHgy
YiwgT29wcykgXAorICAgIG1hY3JvKEYzMkxvYWQsIDB4MmMsIE9vcHMpIFwKKyAgICBtYWNybyhG
NjRMb2FkLCAweDJkLCBPb3BzKQorCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JF
X09QKG1hY3JvKSBcCisgICAgbWFjcm8oSTMyU3RvcmU4LCAweDJlLCBPb3BzKSBcCisgICAgbWFj
cm8oSTMyU3RvcmUxNiwgMHgyZiwgT29wcykgXAorICAgIG1hY3JvKEk2NFN0b3JlOCwgMHgzMCwg
T29wcykgXAorICAgIG1hY3JvKEk2NFN0b3JlMTYsIDB4MzEsIE9vcHMpIFwKKyAgICBtYWNybyhJ
NjRTdG9yZTMyLCAweDMyLCBPb3BzKSBcCisgICAgbWFjcm8oSTMyU3RvcmUsIDB4MzMsIE9vcHMp
IFwKKyAgICBtYWNybyhJNjRTdG9yZSwgMHgzNCwgT29wcykgXAorICAgIG1hY3JvKEYzMlN0b3Jl
LCAweDM1LCBPb3BzKSBcCisgICAgbWFjcm8oRjY0U3RvcmUsIDB4MzYsIE9vcHMpCisKKworCisj
ZGVmaW5lIEZPUl9FQUNIX1dBU01fT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX1NQRUNJ
QUxfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxPV19PUChtYWNybykg
XAorICAgIEZPUl9FQUNIX1dBU01fVU5BUllfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNN
X0JJTkFSWV9PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AobWFj
cm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChtYWNybykKKworI2RlZmlu
ZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgYjNvcCkgbmFtZSA9IGlkLAorCitlbnVtIE9w
VHlwZSA6IHVpbnQ4X3QgeworICAgIEZPUl9FQUNIX1dBU01fT1AoQ1JFQVRFX0VOVU1fVkFMVUUp
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CitpbmxpbmUgYm9vbCBpc1ZhbGlkT3BUeXBl
KEludCBpKQoreworICAgIC8vIEJpdHNldCBvZiB2YWxpZCBvcHMuCisgICAgc3RhdGljIGNvbnN0
IHVpbnQ4X3QgdmFsaWRbXSA9IHsgMHhmZiwgMHg4ZiwgMHhmZiwgMHgyLCAweGZmLCAweGZmLCAw
eDdmLCAweGEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYs
IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYgfTsKKyAgICBy
ZXR1cm4gMCA8PSBpICYmIGkgPD0gMTg4ICYmICh2YWxpZFtpIC8gOF0gJiAoMSA8PCAoaSAlIDgp
KSk7Cit9CisKK2VudW0gY2xhc3MgQmluYXJ5T3BUeXBlIDogdWludDhfdCB7CisgICAgRk9SX0VB
Q0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0VOVU1fVkFMVUUpCit9OworCitlbnVtIGNsYXNzIFVu
YXJ5T3BUeXBlIDogdWludDhfdCB7CisgICAgRk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChDUkVBVEVf
RU5VTV9WQUxVRSkKK307CisKK2VudW0gY2xhc3MgTG9hZE9wVHlwZSA6IHVpbnQ4X3QgeworICAg
IEZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0VOVU1fVkFMVUUpCit9OworCitl
bnVtIGNsYXNzIFN0b3JlT3BUeXBlIDogdWludDhfdCB7CisgICAgRk9SX0VBQ0hfV0FTTV9NRU1P
UllfU1RPUkVfT1AoQ1JFQVRFX0VOVU1fVkFMVUUpCit9OworCisjdW5kZWYgQ1JFQVRFX0VOVU1f
VkFMVUUKKworaW5saW5lIGJvb2wgaXNDb250cm9sT3AoT3BUeXBlIG9wKQoreworICAgIHN3aXRj
aCAob3ApIHsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3ApIGNhc2UgT3BUeXBl
OjpuYW1lOgorICAgIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKENSRUFURV9DQVNFKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyN1bmRlZiBDUkVBVEVfQ0FTRQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDgxMzRkNjYxNmNh
NzllNzE5N2RlOTY1YzNjYjE3MTBhZjIyNTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAi
V2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9MRUJE
ZWNvZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFBh
cnNlciB7Citwcm90ZWN0ZWQ6CisgICAgUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHNp
emVfdCBzdGFydCwgc2l6ZV90IGVuZCk7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBj
b25zdW1lQ2hhcmFjdGVyKGNoYXIpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1
bWVTdHJpbmcoY29uc3QgY2hhciopOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRl
Y29kZXI6OmRlY29kZVVJbnQzMihtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29m
ZnNldCwgcmVzdWx0KTsgfQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUlu
dDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUlu
dDY0KG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9
CisKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJl
c3VsdCk7CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1fc291cmNlOworICAgIHNpemVf
dCBtX3NvdXJjZUxlbmd0aDsKKyAgICBzaXplX3QgbV9vZmZzZXQ7Cit9OworCitBTFdBWVNfSU5M
SU5FIFBhcnNlcjo6UGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBz
aXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCisgICAgOiBtX3NvdXJjZShzb3VyY2VCdWZmZXIpCisg
ICAgLCBtX3NvdXJjZUxlbmd0aChlbmQpCisgICAgLCBtX29mZnNldChzdGFydCkKK3sKKyAgICBB
U1NFUlQoZW5kIDw9IHNvdXJjZUJ1ZmZlci5zaXplKCkpOworICAgIEFTU0VSVChzdGFydCA8IGVu
ZCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIoY2hh
ciBjKQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChjID09IG1fc291cmNlW21fb2Zmc2V0XSkgeworICAgICAgICBt
X29mZnNldCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNo
YXIqIHN0cikKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0OworICAgIGlmIChtX29m
ZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IHN0cltpXTsgaSsrKSB7CisgICAgICAgIGlmICghY29uc3VtZUNoYXJh
Y3RlcihzdHJbaV0pKSB7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0OworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0
KQoreworICAgIGlmIChtX3NvdXJjZUxlbmd0aCA8IDQgfHwgbV9vZmZzZXQgPj0gbV9zb3VyY2VM
ZW5ndGggLSA0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7Cisg
ICAgbV9vZmZzZXQgKz0gNDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lOTElORSBi
b29sIFBhcnNlcjo6cGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpCit7CisgICAgaWYgKG1fb2Zm
c2V0ID49IG1fc291cmNlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0
ID0gbV9zb3VyY2VbbV9vZmZzZXQrK107CisgICAgcmV0dXJuIHJlc3VsdCA8IDB4ODA7Cit9CisK
K0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0
KQoreworICAgIHVpbnQzMl90IHRlbXA7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0ZW1wKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHRlbXApOworICAgIHJldHVybiB0ZW1wIDw9IDE7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI6OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCkKK3sKKyAgICB1aW50OF90IHZhbHVl
OworICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVHlwZTo6TGFzdFZhbHVlVHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUeXBlPih2
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmEwZmEzZmY0NDExNGM1YTdiZDZhNjc3YjU1ZGQ1
MTVjNzJiOGJmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Q
bGFuLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2VyLmgiCisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwor
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitQbGFuOjpQbGFuKFZNJiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOworICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIo
c291cmNlKTsKKyAgICBpZiAoIW1vZHVsZVBhcnNlci5wYXJzZSgpKSB7CisgICAgICAgIGRhdGFM
b2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigiUGFyc2VkIG1vZHVsZS4iKTsK
KworICAgIGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6IG1vZHVsZVBhcnNl
ci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgZnVuY2lvbiBzdGFydGluZyBhdDogIiwgaW5mby5z
dGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBpbmZvLmVuZCk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQocGFyc2VBbmRDb21waWxlKHZtLCBzb3VyY2UsIG1vZHVsZVBhcnNlci5tZW1vcnkoKS5nZXQo
KSwgaW5mbywgbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkpOworICAgIH0KKwor
ICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgorICAgIGZvciAo
c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlvblB0ciA6IHJlc3Vs
dCkgeworICAgICAgICBGdW5jdGlvbkNvbXBpbGF0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUHRy
LmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBmdW5jdGlvbi0+dW5saW5rZWRDYWxs
cykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0W2NhbGwuZnVuY3Rpb25JbmRleF0tPmNvZGUt
PmNvZGUoKSkpOworICAgIH0KKworICAgIG1lbW9yeSA9IFdURk1vdmUobW9kdWxlUGFyc2VyLm1l
bW9yeSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZlZDEzNmFiMWJlMzU1ZjgyZjk3OTIxMGY3YjlmZmM3N2E4MzAyNTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkNvbXBp
bGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworY2xhc3MgTWVtb3J5
OworCisvLyBUT0RPOiBUaGlzIHNob3VsZCBjcmVhdGUgYSBXYXNtIE1vZHVsZSBub3QgYSBsaXN0
IG9mIGZ1bmN0aW9ucy4KK2NsYXNzIFBsYW4geworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4gc291cmNlKTsKKworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4+IHJlc3VsdDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWVtb3J5PiBtZW1vcnk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjU3ODY3MjEwYTEwYmY2OTIyMzQxYzBhNzZj
M2MyNTAxOWE4NGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNlY3Rpb25zLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdHJ1Y3QgU2Vj
dGlvbnMgeworICAgIGVudW0gU2VjdGlvbiA6IHVpbnQ4X3QgeworICAgICAgICBGdW5jdGlvblR5
cGVzID0gMSwKKyAgICAgICAgU2lnbmF0dXJlcyA9IDMsCisgICAgICAgIE1lbW9yeSA9IDUsCisg
ICAgICAgIERlZmluaXRpb25zID0gMTAsCisgICAgICAgIFVua25vd24KKyAgICB9OworICAgIHN0
YXRpYyBib29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQor
ICAgIHsKKyAgICAgICAgaWYgKHByZXZpb3VzID09IFVua25vd24pCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKKyAgICB9Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>