<?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>149118</bug_id>
          
          <creation_ts>2015-09-14 10:16:09 -0700</creation_ts>
          <short_desc>Rename current concrete IDB implementation to &quot;Legacy&quot;</short_desc>
          <delta_ts>2015-09-14 14:02:24 -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>WebCore Misc.</component>
          <version>Safari 9</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>
          
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1125608</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-09-14 10:16:09 -0700</bug_when>
    <thetext>Rename current concrete IDB implementation to &quot;Legacy&quot;

By virtualization the DOM binding classes and making the current concrete implementations be legacy implementations, the current implementation can live side-by-side with the new implementation tracked by https://bugs.webkit.org/show_bug.cgi?id=149117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125690</commentid>
    <comment_count>1</comment_count>
      <attachid>261116</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-09-14 11:28:30 -0700</bug_when>
    <thetext>Created attachment 261116
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125693</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-14 11:30:54 -0700</bug_when>
    <thetext>Attachment 261116 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/IDBObjectStore.h:92:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBObjectStore.h:92:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/CMakeLists.txt:866:  There should be exactly one empty line instead of 0 between &quot;Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp&quot; and &quot;Modules/indexeddb/legacy/IDBCursorBackend.cpp&quot;.  [list/emptyline] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBCursor.h:72:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:59:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:59:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:60:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:60:  The parameter name &quot;keyRange&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:60:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:61:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:61:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:65:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:65:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:69:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:69:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:70:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:70:  The parameter name &quot;keyRange&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:70:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:71:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:71:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBPendingTransactionMonitor.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBPendingTransactionMonitor.cpp:46:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:177:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:193:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:211:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/LegacyTransaction.cpp:202:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/LegacyTransaction.cpp:203:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/indexeddb/legacy/LegacyAny.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/LegacyAny.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBCursorBackendOperations.cpp:43:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBCursorBackendOperations.cpp:68:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/LegacyCursor.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 34 in 78 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>1125710</commentid>
    <comment_count>3</comment_count>
      <attachid>261125</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-09-14 13:11:20 -0700</bug_when>
    <thetext>Created attachment 261125
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125712</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-14 13:14:02 -0700</bug_when>
    <thetext>Attachment 261125 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:60:  The parameter name &quot;keyRange&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:70:  The parameter name &quot;keyRange&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:177:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:193:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:211:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBCursorBackendOperations.cpp:42:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBCursorBackendOperations.cpp:67:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 9 in 79 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>1125719</commentid>
    <comment_count>5</comment_count>
      <attachid>261128</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-09-14 13:40:11 -0700</bug_when>
    <thetext>Created attachment 261128
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125720</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-14 13:43:16 -0700</bug_when>
    <thetext>Attachment 261128 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:60:  The parameter name &quot;keyRange&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/IDBIndex.h:70:  The parameter name &quot;keyRange&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:177:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:193:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:211:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:247:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBCursorBackendOperations.cpp:42:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/legacy/IDBCursorBackendOperations.cpp:67:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 9 in 81 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>1125726</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-09-14 14:02:24 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/189746</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261116</attachid>
            <date>2015-09-14 11:28:30 -0700</date>
            <delta_ts>2015-09-14 13:11:20 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>802688</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGYzMTQ1MWYuLjgwMzgwYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMCw2ICsxMCw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01v
ZHVsZXMvaW5kZXhlZGRiIgorICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvaW5kaWV1aSIKICAgICAiJHtXRUJD
T1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNvbnRyb2xzLyIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9k
dWxlcy9tZWRpYXNlc3Npb24iCkBAIC04NDQsMTIgKzg0NSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCiAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAot
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcAogICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmQuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAog
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtODYyLDE0ICs4NTksMzEgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlRGF0
YS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAK
LSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCi0gICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAKLSAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHAKKyAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZC5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCisgICAgTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcAorICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisgICAgTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCisgICAg
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisg
ICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHAKKyAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeURhdGFiYXNlLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lGYWN0b3J5LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5j
cHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuY3BwCisg
ICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCisgICAg
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCisgICAgTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCisKKwogCiAgICAgTW9kdWxl
cy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNj
ZmFhYi4uOTU4NzI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyNiBAQAorMjAxNS0wOS0xNCAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIGN1cnJl
bnQgY29uY3JldGUgSURCIGltcGxlbWVudGF0aW9uIHRvICJMZWdhY3kiLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MTE4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChObyBjaGFu
Z2UgaW4gYmVoYXZpb3IpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgSURMIGJpbmRpbmdz
IGFic3RyYWN0LgorICAgICAgICBJdCB0aGVuIHJlbmFtZXMgdGhlIGN1cnJlbnQgY29uY3JldGUg
aW1wbGVtZW50YXRpb25zIG9mIHRoZSBiaW5kaW5ncyB0byAiTGVnYWN5IgorICAgICAgICBGaW5h
bGx5IGl0IG1vdmVzIHRob3NlIGZpbGVzIGFuZCBhbGwgc3VwcG9ydCBjbGFzc2VzIHRvIGEgImxl
Z2FjeSIgc3ViZm9sZGVyLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVdpbmRvd0luZGV4ZWREYXRhYmFzZTo6aW5kZXhlZERCKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55
OjpJREJBbnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjpjcmVhdGVJbnZhbGlkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6Y3JlYXRlTnVsbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmNyZWF0ZVN0cmluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJREJBbnk6On5JREJBbnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCQW55Ojpkb21TdHJpbmdMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkFu
eTo6aWRiQ3Vyc29yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aWRiQ3Vy
c29yV2l0aFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aWRiRGF0
YWJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjppZGJGYWN0b3J5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aWRiSW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCQW55OjppZGJPYmplY3RTdG9yZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJBbnk6OmlkYlRyYW5zYWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQkFueTo6c2NyaXB0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCQW55OjpzdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQW55Ojpp
bnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6fklEQkFueSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJBbnk6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OnR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjprZXlQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yOjpJREJDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp+SURCQ3Vy
c29yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZGlyZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6a2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cHJpbWFyeUtleSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvcjo6c291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNv
cjo6dXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6YWR2YW5j
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpkZWxldGVGdW5jdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnBvc3RTdWNjZXNzSGFu
ZGxlckNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y2xv
c2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZWZmZWN0aXZlT2JqZWN0
U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp+SURCQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6aXNLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yOjpjb250aW51ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvcjo6aWRiUHJpbWFyeUtleSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JX
aXRoVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVlOjpJREJD
dXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVlOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVlOjpm
cm9tQ3Vyc29yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcldpdGhWYWx1
ZTo6fklEQkN1cnNvcldpdGhWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JX
aXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OklEQkRhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6bmV4dFRyYW5zYWN0aW9uSWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ3JlYXRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb25GaW5pc2hl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b25BYm9ydCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b25Db21wbGV0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dmVyc2lvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Zm9yY2VDbG9zZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Y2xvc2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b25WZXJzaW9uQ2hhbmdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmZpbmRPYmplY3RTdG9yZUlkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnN0b3ApOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmFjdGl2ZURPTU9iamVjdE5hbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNhblN1c3BlbmRGb3JQYWdlQ2Fj
aGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5OjpJ
REJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6On5JREJGYWN0b3J5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQ29udGV4dFZhbGlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6b3Blbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5OjpvcGVuSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeTo6Y21wKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5Ojp+SURCRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5OjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6fklEQkluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuQ3Vyc29yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpjb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6b3BlbktleUN1cnNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleDo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
OjpnZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmJhY2tlbmRE
Qik6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojp+SURCSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b2JqZWN0U3RvcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmtleVBhdGhBbnkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmtleVBhdGgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OnVuaXF1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleDo6bXVsdGlFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJJbmRleDo6aWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5D
dXJzb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmNvdW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjptYXJrRGVsZXRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjpJREJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6aW5kZXhOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjph
ZGQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjb3VudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZmluZEluZGV4SWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmJhY2tlbmREQik6IERl
bGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjp+SURCT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6Om5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmtleVBhdGhBbnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmtleVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OnRyYW5zYWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjphdXRvSW5jcmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjpjcmVhdGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6Y291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6Om1hcmtEZWxldGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjptZXRhZGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6c2V0TWV0YWRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNvbnRhaW5zSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
cGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OklE
Qk9wZW5EQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6On5JREJP
cGVuREJSZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVl
c3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9wZW5EQlJlcXVlc3Q6Om9uQmxvY2tlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OnNob3VsZEVucXVldWVFdmVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGw6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp+SURCUmVxdWVzdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZXJyb3IpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZXJyb3JDb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJSZXF1ZXN0Ojp0cmFuc2FjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpyZWFkeVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6Om1hcmtFYXJseURlYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6OmFib3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldEN1
cnNvckRldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0
UGVuZGluZ0N1cnNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpn
ZXRSZXN1bHRDdXJzb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6
c2V0UmVzdWx0Q3Vyc29yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6
OmZpbmlzaEN1cnNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpz
aG91bGRFbnF1ZXVlRXZlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6b25FcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTdWNjZXNzRXZl
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdGl2ZU9iamVjdFN0b3JlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzc0ludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzdG9wKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6YWN0aXZlRE9NT2JqZWN0TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpldmVudFRhcmdldElu
dGVyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaXNwYXRj
aEV2ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnVuY2F1Z2h0
RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNwYXRjaCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQpOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnBy
ZXZlbnRQcm9wYWdhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
Ojp0YXNrVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1
ZXN0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om1vZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnNldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVDcmVhdGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnNldEFjdGl2ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWJvcnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6T3Bl
bkN1cnNvck5vdGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpPcGVuQ3Vyc29yTm90aWZpZXI6On5PcGVuQ3Vyc29yTm90aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6Y3Vy
c29yRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OnJlZ2lzdGVyT3BlbkN1cnNvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJzb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmNsb3NlT3BlbkN1cnNvcnMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlZ2lzdGVyUmVxdWVzdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3RlclJlcXVlc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQWJvcnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Omhhc1BlbmRpbmdBY3Rpdml0eSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZEZv
clBhZ2VDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
c3RvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWN0aXZl
RE9NT2JqZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bjo6ZW5xdWV1ZUV2ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpiYWNrZW5kREIpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6fklEQlRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5p
ZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlZlcnNpb25DaGFuZ2VFdmVudDo6SURCVmVyc2lvbkNo
YW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlZlcnNpb25DaGFuZ2VFdmVudDo6fklE
QlZlcnNpb25DaGFuZ2VFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlZlcnNpb25DaGFuZ2VFdmVudDo6fklEQlZlcnNpb25DaGFuZ2VFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6Om9sZFZlcnNpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpuZXdWZXJzaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ2FsbGJhY2tz
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxs
YmFja3MuaC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6fklEQkNhbGxiYWNrcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDYWxsYmFja3M6Om9uQmxvY2tlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDYWxsYmFja3M6Om9uVXBncmFkZU5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDYWxsYmFja3M6Om9uU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmQ6On5JREJDdXJzb3JCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmQ6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ3Vyc29yQmFja2VuZDo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNr
ZW5kOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjp1cGRhdGVD
dXJzb3JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmQ6OmNsZWFyKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZC5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZC5oLgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmQ6OnBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmQ6OmtleSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpwcmltYXJ5S2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkN1cnNvckJhY2tlbmQ6OnZhbHVlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvckJhY2tlbmQ6OmN1cnNvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
QmFja2VuZDo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6dHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZDo6c2V0U2F2ZWRDdXJz
b3JJRCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tl
bmRPcGVyYXRpb25zLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
c29ySXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25z
LmguCisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmN1cnNvcklEKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6a2V5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6Q3Vyc29ySXRlcmF0aW9uT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjdXJzb3JJRCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpDdXJzb3JBZHZhbmNlT3BlcmF0
aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNr
ZW5kLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OklEQkRh
dGFiYXNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OmFk
ZE9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6cmVt
b3ZlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjph
ZGRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJlbW92ZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkludGVybmFs
QXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpkaWRPcGVuSW50
ZXJuYWxBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6On5JREJE
YXRhYmFzZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpj
cmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6
OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpk
ZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OmNvbW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OmFib3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZDo6c2V0SW5kZXhlc1JlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6
OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpjbGVhck9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rpb25T
dGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rp
b25GaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnRyYW5z
YWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpjb25uZWN0aW9uQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpwcm9jZXNzUGVuZGluZ0NhbGxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6cHJvY2Vzc1BlbmRpbmdPcGVuQ2Fs
bHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVUcmFuc2Fj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkNvbm5lY3Rp
b25JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZDo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kOjpkZWxldGVEYXRhYmFzZUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9JREJEYXRhYmFzZUJhY2tlbmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oLgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpzZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZDo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kOjp0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kOjpzZXRDdXJyZW50VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmQ6Omhhc1BlbmRpbmdTZWNvbmRIYWxmT3Blbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmQ6OnNldFBlbmRpbmdTZWNvbmRIYWxmT3Blbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OmZhY3RvcnlCYWNrZW5kKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3MuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJh
Y2tzLmguCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrczo6fklEQkRhdGFi
YXNlQ2FsbGJhY2tzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5JREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
OjpvbkZvcmNlZENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbDo6b25WZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGw6Om9uQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsOjpvbkNvbXBsZXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmguCisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTo6fklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdEZWxldGVDYWxsLmguCisgICAg
ICAgIChXZWJDb3JlOjpJREJQZW5kaW5nRGVsZXRlQ2FsbDo6SURCUGVuZGluZ0RlbGV0ZUNhbGwp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUGVuZGluZ0RlbGV0ZUNhbGw6OmNhbGxiYWNrcyk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdPcGVuQ2FsbC5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ09w
ZW5DYWxsLmguCisgICAgICAgIChXZWJDb3JlOjpJREJQZW5kaW5nT3BlbkNhbGw6OklEQlBlbmRp
bmdPcGVuQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJQZW5kaW5nT3BlbkNhbGw6OmNhbGxi
YWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJQZW5kaW5nT3BlbkNhbGw6OmRhdGFiYXNlQ2Fs
bGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlBlbmRpbmdPcGVuQ2FsbDo6dmVyc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJQZW5kaW5nT3BlbkNhbGw6OnRyYW5zYWN0aW9uSWQpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwLgorICAgICAgICAoV2ViQ29yZTo6dHJh
bnNhY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3I6OmFkZE5ld1RyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3I6OmRlYWN0aXZhdGVOZXdUcmFuc2FjdGlvbnMpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJh
bnNhY3Rpb25Nb25pdG9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjppc1Rhc2tRdWV1ZUVtcHR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6aGFzUGVuZGluZ1Rhc2tzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6cmVnaXN0ZXJPcGVuQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dW5yZWdpc3Rlck9w
ZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpydW4p
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y2xvc2VPcGVuQ3Vyc29ycyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ3JlYXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDcmVhdGVJ
bmRleE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OnNjaGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUdldE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlUHV0T3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVTZXRJbmRleGVzUmVhZHlP
cGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hl
ZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZUNvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ2xlYXJPYmplY3RT
dG9yZU9wZXJhdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRy
YW5zYWN0aW9uQmFja2VuZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmguCisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6Om1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnNjaGVkdWxlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OmFkZFByZWVtcHRpdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OmRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6ZGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kOjppZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0
aW9ucy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVh
ZHlPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJh
dGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9wZXJhdGlvbjo6cGVyZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlv
bjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3Bl
cmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmguCisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmplY3RT
dG9yZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uOjpvYmplY3RTdG9yZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNy
ZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjp0cmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6b2JqZWN0U3Rv
cmVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
bjo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjp0cmFu
c2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25D
aGFuZ2VPcGVyYXRpb246OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpkYXRhYmFzZUNhbGxiYWNrcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246
OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246
OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbjo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRl
SW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3JlSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRl
SW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3JlSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0YWRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUluZGV4T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpEZWxldGVJbmRl
eEFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHZXRPcGVyYXRpb246OmluZGV4SUQpOgorICAgICAgICAoV2ViQ29yZTo6
R2V0T3BlcmF0aW9uOjpjdXJzb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlv
bjo6a2V5UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjphdXRvSW5jcmVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6a2V5UGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpHZXRPcGVyYXRpb246OkdldE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQdXRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246
OnB1dE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjpvYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246OmtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpQdXRPcGVyYXRpb246OmluZGV4SURzKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlv
bjo6aW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6dmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjpQdXRPcGVyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OnRyYW5zYWN0aW9uSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJRCk6CisgICAgICAg
IChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpP
cGVuQ3Vyc29yT3BlcmF0aW9uOjpjdXJzb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5D
dXJzb3JPcGVyYXRpb246OnRhc2tUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JP
cGVyYXRpb246OmtleVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRp
b246OmN1cnNvckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0
aW9uOjpPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246Om9iamVjdFN0
b3JlSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OmluZGV4SUQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OmtleVJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvdW50T3BlcmF0aW9uOjpDb3VudE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJh
bmdlT3BlcmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJh
bmdlT3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5nZU9w
ZXJhdGlvbjo6RGVsZXRlUmFuZ2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJP
YmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT2Jq
ZWN0U3RvcmVPcGVyYXRpb246OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFy
T2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0b3JlSUQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbik6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZENy
ZWF0ZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OmRpZFN0YXJ0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6Y2FuUnVuVHJh
bnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmguCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lB
bnk6OmNyZWF0ZUludmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5QW55OjpjcmVhdGVO
dWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUFueTo6Y3JlYXRlU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUFueTo6TGVnYWN5QW55KToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUFueTo6fkxlZ2FjeUFueSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lBbnk6OmRvbVN0
cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5QW55OjppZGJDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5QW55OjppZGJDdXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5QW55OjppZGJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lBbnk6OmlkYkZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5QW55OjppZGJJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lBbnk6OmlkYk9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUFueTo6aWRiVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGVnYWN5QW55OjpzY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lBbnk6
OnN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lBbnk6OmludGVnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5QW55OjpsZWdhY3lDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5QW55OjpsZWdhY3lDdXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5QW55OjpsZWdhY3lEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lBbnk6Omxl
Z2FjeUZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5QW55OjpsZWdhY3lJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lBbnk6OmxlZ2FjeU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUFueTo6bGVnYWN5VHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lBbnkuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lBbnk6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUN1cnNvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3I6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3I6OkxlZ2FjeUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3I6On5MZWdhY3lDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yOjpkaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5Q3Vyc29yOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yOjpwcmlt
YXJ5S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUN1cnNvcjo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yOjpzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5Q3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yOjphZHZh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUN1cnNvcjo6Y29udGludWVGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUN1cnNvcjo6cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lDdXJzb3I6OnNldFZhbHVlUmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
Q3Vyc29yOjplZmZlY3RpdmVPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeUN1cnNvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUN1cnNv
cjo6Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3I6Omlk
YlByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yOjppc0tleUN1cnNv
cik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhW
YWx1ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3JXaXRo
VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3JXaXRoVmFsdWU6
OmZyb21DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yV2l0aFZhbHVlOjpM
ZWdhY3lDdXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Q3Vyc29yV2l0
aFZhbHVlOjp+TGVnYWN5Q3Vyc29yV2l0aFZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeURhdGFiYXNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5RGF0YWJhc2U6OkxlZ2FjeURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eURhdGFiYXNlOjp+TGVnYWN5RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0
YWJhc2U6Om5leHRUcmFuc2FjdGlvbklkKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeURhdGFi
YXNlOjp0cmFuc2FjdGlvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0YWJh
c2U6OnRyYW5zYWN0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0YWJh
c2U6Om9uQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0YWJhc2U6Om9uQ29tcGxl
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0YWJhc2U6OnZlcnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeURhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5RGF0YWJhc2U6OmZvcmNlQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0YWJh
c2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeURhdGFiYXNlOjpjbG9zZUNvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lEYXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeURhdGFiYXNlOjpmaW5kT2JqZWN0U3RvcmVJZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeURhdGFiYXNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeURh
dGFiYXNlOjphY3RpdmVET01PYmplY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeURh
dGFiYXNlOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5RmFjdG9yeS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5RmFjdG9yeTo6TGVnYWN5RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lGYWN0
b3J5Ojp+TGVnYWN5RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjppc0NvbnRleHRWYWxpZCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUZhY3Rvcnk6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5RmFjdG9yeTo6b3BlbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUZh
Y3Rvcnk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUZhY3Rvcnk6
OmNtcCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3Rvcnku
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5oLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RmFjdG9yeTo6Y3JlYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5SW5kZXguY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lJbmRleDo6TGVnYWN5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5SW5kZXg6On5MZWdhY3lJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmRleDo6
b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmRleDo6Y291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmRleDo6
Z2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUluZGV4OjpiYWNrZW5kREIpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUluZGV4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SW5kZXg6OmxlZ2FjeU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUluZGV4OjptYXJrRGVsZXRlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeU9iamVjdFN0b3JlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
T2JqZWN0U3RvcmU6OkxlZ2FjeU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eU9iamVjdFN0b3JlOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0U3RvcmU6OmFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVj
dFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6ZGVs
ZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0U3RvcmU6Om9wZW5DdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0U3RvcmU6OmNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjpmaW5kSW5kZXhJZCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6YmFja2VuZERCKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5T2JqZWN0U3RvcmU6On5MZWdhY3lPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lPYmplY3RTdG9yZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0
U3RvcmU6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0U3RvcmU6OmtleVBh
dGhBbnkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0U3RvcmU6OmtleVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
T2JqZWN0U3RvcmU6Om1hcmtEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVj
dFN0b3JlOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6
c2V0TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T2JqZWN0U3RvcmU6OmNvbnRh
aW5zSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVu
REJSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPcGVuREJS
ZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T3BlbkRCUmVxdWVzdDo6
TGVnYWN5T3BlbkRCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPcGVuREJSZXF1
ZXN0Ojp+TGVnYWN5T3BlbkRCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPcGVu
REJSZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lPcGVuREJSZXF1ZXN0OjpvbkJsb2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T3Bl
bkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeU9w
ZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPcGVuREJS
ZXF1ZXN0OjpzaG91bGRFbnF1ZXVlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5T3Bl
bkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lSZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVxdWVz
dDo6TGVnYWN5UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0Ojp+TGVn
YWN5UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0OjpyZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVxdWVzdDo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6TGVnYWN5UmVxdWVzdDo6ZXJyb3JDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJl
cXVlc3Q6OnNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0Ojp0cmFuc2Fj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0OjpyZWFkeVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlcXVlc3Q6Om1hcmtFYXJseURlYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeVJlcXVlc3Q6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eVJlcXVlc3Q6OnNldEN1cnNvckRldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVx
dWVzdDo6c2V0UGVuZGluZ0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0
OjpnZXRSZXN1bHRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVxdWVzdDo6c2V0
UmVzdWx0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlcXVlc3Q6OmZpbmlzaEN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0OjpzaG91bGRFbnF1ZXVlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVxdWVzdDo6b25FcnJvcik6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVTdWNjZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
UmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdGl2ZU9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2Vzc0ludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlcXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0OjpzdG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeVJlcXVlc3Q6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5UmVxdWVzdDo6YWN0aXZlRE9NT2JqZWN0TmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lSZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNwYXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0Lmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeVJlcXVlc3Q6OnByZXZlbnRQcm9wYWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lSZXF1ZXN0Ojp0YXNrVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lSZXF1ZXN0OjpyZXF1ZXN0U3RhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVRyYW5zYWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VHJhbnNh
Y3Rpb246OkxlZ2FjeVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVRyYW5z
YWN0aW9uOjp+TGVnYWN5VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VHJh
bnNhY3Rpb246Om1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VHJhbnNhY3Rpb246OmRi
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVRyYW5zYWN0aW9uOjpzZXRFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeVRyYW5zYWN0aW9uOjpzZXRBY3RpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5VHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eVRyYW5zYWN0aW9uOjpPcGVuQ3Vyc29yTm90aWZpZXI6Ok9wZW5DdXJzb3JOb3RpZmllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyOjp+
T3BlbkN1cnNvck5vdGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVRyYW5zYWN0aW9u
OjpPcGVuQ3Vyc29yTm90aWZpZXI6OmN1cnNvckZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeVRyYW5zYWN0aW9uOjpyZWdpc3Rlck9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6TGVnYWN5VHJhbnNhY3Rpb246OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVRyYW5zYWN0aW9uOjpjbG9zZU9wZW5DdXJzb3JzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5VHJhbnNhY3Rpb246OnVucmVnaXN0ZXJSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVRyYW5zYWN0aW9uOjpvbkFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVRy
YW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VHJh
bnNhY3Rpb246OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5VHJhbnNhY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VHJhbnNhY3Rp
b246OmFjdGl2ZURPTU9iamVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VHJhbnNh
Y3Rpb246OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUcmFuc2FjdGlv
bjo6YmFja2VuZERCKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
VHJhbnNhY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6fkxlZ2FjeVZl
cnNpb25DaGFuZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lWZXJzaW9uQ2hhbmdl
RXZlbnQ6OmV2ZW50SW50ZXJmYWNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oLgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUpOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNS0wOS0xNCAgR3l1eW91bmcgS2lt
ICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF0gUmVtb3ZlIGNyZWF0
ZSgpIGZhY3RvcnkgZnVuY3Rpb24gaW4gRXZhc0dMQ29udGV4dCBhbmQgRXZhc0dMU3VyZmFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0RPTVdp
bmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKaW5kZXggMmExYWUzYy4uZDA1ZDIyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRE9NV2luZG93
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorI2luY2x1ZGUgIkxlZ2FjeUZhY3RvcnkuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIApAQCAtMTEyLDcg
KzExMiw3IEBAIElEQkZhY3RvcnkqIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZTo6aW5kZXhlZERC
KCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIW1faWRiRmFjdG9yeSkKLSAg
ICAgICAgbV9pZGJGYWN0b3J5ID0gSURCRmFjdG9yeTo6Y3JlYXRlKHBhZ2UtPmRhdGFiYXNlUHJv
dmlkZXIoKS5pZGJGYWN0b3J5QmFja2VuZCgpKTsKKyAgICAgICAgbV9pZGJGYWN0b3J5ID0gTGVn
YWN5RmFjdG9yeTo6Y3JlYXRlKHBhZ2UtPmRhdGFiYXNlUHJvdmlkZXIoKS5pZGJGYWN0b3J5QmFj
a2VuZCgpKTsKIAogICAgIHJldHVybiBtX2lkYkZhY3RvcnkuZ2V0KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAppbmRleCA4MjdhNGNkLi40YjI4NmI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKQEAgLTEs
MjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgs
MTkxICsyOCwxMiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRl
ICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1
ZGUgIklEQkZhY3RvcnkuaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklEQktl
eVBhdGguaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIkRPTVN0cmlu
Z0xpc3QuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPElEQkFueT4gSURC
QW55OjpjcmVhdGVJbnZhbGlkKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShV
bmRlZmluZWRUeXBlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZU51
bGwoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KE51bGxUeXBlKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7Ci19Ci0KLUlE
QkFueTo6SURCQW55KFR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9pbnRl
Z2VyKDApCi17Ci0gICAgQVNTRVJUKHR5cGUgPT0gVW5kZWZpbmVkVHlwZSB8fCB0eXBlID09IE51
bGxUeXBlKTsKLX0KLQotSURCQW55Ojp+SURCQW55KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBJREJBbnk6OmRvbVN0cmluZ0xpc3QoKQotewotICAgIEFTU0VSVChtX3R5cGUg
PT0gRE9NU3RyaW5nTGlzdFR5cGUpOwotICAgIHJldHVybiBtX2RvbVN0cmluZ0xpc3Q7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCQ3Vyc29yPiBJREJBbnk6OmlkYkN1cnNvcigpCi17Ci0gICAgQVNTRVJU
KG1fdHlwZSA9PSBJREJDdXJzb3JUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJDdXJzb3I7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJBbnk6OmlkYkN1cnNvcldpdGhWYWx1
ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JXaXRoVmFsdWVUeXBlKTsKLSAg
ICByZXR1cm4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7Ci19Ci0KLVBhc3NSZWZQdHI8SURCRGF0YWJh
c2U+IElEQkFueTo6aWRiRGF0YWJhc2UoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCRGF0
YWJhc2VUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJEYXRhYmFzZTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJGYWN0b3J5PiBJREJBbnk6OmlkYkZhY3RvcnkoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0g
SURCRmFjdG9yeVR5cGUpOwotICAgIHJldHVybiBtX2lkYkZhY3Rvcnk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SURCSW5kZXg+IElEQkFueTo6aWRiSW5kZXgoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0g
SURCSW5kZXhUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJJbmRleDsKLX0KLQotUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZT4gSURCQW55OjppZGJPYmplY3RTdG9yZSgpCi17Ci0gICAgQVNTRVJUKG1f
dHlwZSA9PSBJREJPYmplY3RTdG9yZVR5cGUpOwotICAgIHJldHVybiBtX2lkYk9iamVjdFN0b3Jl
OwotfQotCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5zYWN0aW9u
KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQlRyYW5zYWN0aW9uVHlwZSk7Ci0gICAgcmV0
dXJuIG1faWRiVHJhbnNhY3Rpb247Ci19Ci0KLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBJREJBbnk6OnNjcmlwdFZhbHVlKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFNjcmlwdFZh
bHVlVHlwZSk7Ci0gICAgcmV0dXJuIG1fc2NyaXB0VmFsdWU7Ci19Ci0KLWNvbnN0IFN0cmluZyYg
SURCQW55OjpzdHJpbmcoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVHlwZSk7Ci0g
ICAgcmV0dXJuIG1fc3RyaW5nOwotfQotCi1pbnQ2NF90IElEQkFueTo6aW50ZWdlcigpCi17Ci0g
ICAgQVNTRVJUKG1fdHlwZSA9PSBJbnRlZ2VyVHlwZSk7Ci0gICAgcmV0dXJuIG1faW50ZWdlcjsK
LX0KLQotSURCQW55OjpJREJBbnkoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB2YWx1ZSkKLSAg
ICA6IG1fdHlwZShET01TdHJpbmdMaXN0VHlwZSkKLSAgICAsIG1fZG9tU3RyaW5nTGlzdCh2YWx1
ZSkKLSAgICAsIG1faW50ZWdlcigwKQotewotfQotCi1JREJBbnk6OklEQkFueShQYXNzUmVmUHRy
PElEQkN1cnNvcldpdGhWYWx1ZT4gdmFsdWUpCi0gICAgOiBtX3R5cGUoSURCQ3Vyc29yV2l0aFZh
bHVlVHlwZSkKLSAgICAsIG1faWRiQ3Vyc29yV2l0aFZhbHVlKHZhbHVlKQotICAgICwgbV9pbnRl
Z2VyKDApCi17Ci19Ci0KLUlEQkFueTo6SURCQW55KFBhc3NSZWZQdHI8SURCQ3Vyc29yPiB2YWx1
ZSkKLSAgICA6IG1fdHlwZShJREJDdXJzb3JUeXBlKQotICAgICwgbV9pZGJDdXJzb3IodmFsdWUp
Ci0gICAgLCBtX2ludGVnZXIoMCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZT4gdmFsdWUpCi0gICAgOiBtX3R5cGUoSURCRGF0YWJhc2VUeXBlKQotICAgICwg
bV9pZGJEYXRhYmFzZSh2YWx1ZSkKLSAgICAsIG1faW50ZWdlcigwKQotewotfQotCi1JREJBbnk6
OklEQkFueShQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IHZhbHVlKQotICAgIDogbV90eXBlKElEQkZh
Y3RvcnlUeXBlKQotICAgICwgbV9pZGJGYWN0b3J5KHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDAp
Ci17Ci19Ci0KLUlEQkFueTo6SURCQW55KFBhc3NSZWZQdHI8SURCSW5kZXg+IHZhbHVlKQotICAg
IDogbV90eXBlKElEQkluZGV4VHlwZSkKLSAgICAsIG1faWRiSW5kZXgodmFsdWUpCi0gICAgLCBt
X2ludGVnZXIoMCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gdmFsdWUpCi0gICAgOiBtX3R5cGUoSURCVHJhbnNhY3Rpb25UeXBlKQotICAgICwgbV9p
ZGJUcmFuc2FjdGlvbih2YWx1ZSkKLSAgICAsIG1faW50ZWdlcigwKQotewotfQotCi1JREJBbnk6
OklEQkFueShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJ
REJPYmplY3RTdG9yZVR5cGUpCi0gICAgLCBtX2lkYk9iamVjdFN0b3JlKHZhbHVlKQotICAgICwg
bV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFueTo6SURCQW55KGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShTY3JpcHRWYWx1ZVR5cGUpCi0gICAgLCBt
X3NjcmlwdFZhbHVlKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFueTo6
SURCQW55KGNvbnN0IElEQktleVBhdGgmIHZhbHVlKQotICAgIDogbV90eXBlKEtleVBhdGhUeXBl
KQotICAgICwgbV9pZGJLZXlQYXRoKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0K
LUlEQkFueTo6SURCQW55KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgOiBtX3R5cGUoU3RyaW5n
VHlwZSkKLSAgICAsIG1fc3RyaW5nKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0K
LUlEQkFueTo6SURCQW55KGludDY0X3QgdmFsdWUpCi0gICAgOiBtX3R5cGUoSW50ZWdlclR5cGUp
Ci0gICAgLCBtX2ludGVnZXIodmFsdWUpCitJREJBbnk6OklEQkFueSgpCiB7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJB
bnkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCmluZGV4IGQ3
Mjg0NTYuLmE1NzU3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5oCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSURCQW55X2gK
QEAgLTUwLDI5ICs1MCw3IEBAIGNsYXNzIElEQlRyYW5zYWN0aW9uOwogCiBjbGFzcyBJREJBbnkg
OiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJBbnk+IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZUludmFsaWQoKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZU51bGwoKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJBbnk+IGNyZWF0ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlKFQqIGlk
Yk9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KGlkYk9i
amVjdCkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQkFueT4gY3JlYXRlKGNvbnN0IFQmIGlkYk9iamVjdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KGlkYk9iamVjdCkpOwotICAgIH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlKFBh
c3NSZWZQdHI8VD4gaWRiT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJBbnkoaWRiT2JqZWN0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFu
eT4gY3JlYXRlKGludDY0X3QgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkFueSh2YWx1ZSkpOwotICAgIH0KLSAgICB+SURCQW55KCk7CisgICAgdmlydHVhbCB+
SURCQW55KCkgeyB9CiAKICAgICBlbnVtIFR5cGUgewogICAgICAgICBVbmRlZmluZWRUeXBlID0g
MCwKQEAgLTkxLDUxICs2OSwyMiBAQCBwdWJsaWM6CiAgICAgICAgIEtleVBhdGhUeXBlLAogICAg
IH07CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAvLyBV
c2UgdHlwZSgpIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZXNlIHlvdSdyZSBhbGxvd2Vk
IHRvIGNhbGwuCi0gICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCk7
Ci0gICAgUGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNvcigpOwotICAgIFBhc3NSZWZQdHI8
SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUoKTsKLSAgICBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpOwotICAgIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4g
aWRiRmFjdG9yeSgpOwotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGlkYkluZGV4KCk7Ci0gICAg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUoKTsKLSAgICBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbigpOwotICAgIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSgpOwotICAgIGludDY0X3QgaW50ZWdlcigpOwot
ICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCk7Ci0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCgpIHsgcmV0dXJuIG1faWRiS2V5UGF0aDsgfTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBJ
REJBbnkoVHlwZSk7Ci0gICAgZXhwbGljaXQgSURCQW55KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4pOwotICAgIGV4cGxpY2l0IElEQkFueShQYXNzUmVmUHRyPElEQkN1cnNvcj4pOwotICAgIGV4
cGxpY2l0IElEQkFueShQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4pOwotICAgIGV4cGxp
Y2l0IElEQkFueShQYXNzUmVmUHRyPElEQkRhdGFiYXNlPik7Ci0gICAgZXhwbGljaXQgSURCQW55
KFBhc3NSZWZQdHI8SURCRmFjdG9yeT4pOwotICAgIGV4cGxpY2l0IElEQkFueShQYXNzUmVmUHRy
PElEQkluZGV4Pik7Ci0gICAgZXhwbGljaXQgSURCQW55KFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+KTsKLSAgICBleHBsaWNpdCBJREJBbnkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4pOwot
ICAgIGV4cGxpY2l0IElEQkFueShjb25zdCBJREJLZXlQYXRoJik7Ci0gICAgZXhwbGljaXQgSURC
QW55KGNvbnN0IFN0cmluZyYpOwotICAgIGV4cGxpY2l0IElEQkFueShjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYpOwotICAgIGV4cGxpY2l0IElEQkFueShpbnQ2NF90KTsKLQotICAgIGNv
bnN0IFR5cGUgbV90eXBlOworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCkgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNvcigpID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUo
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgp
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXg+IGlkYkluZGV4KCkgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUoKSA9IDA7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbigp
ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRW
YWx1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgaW50ZWdlcigpID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCgpID0gMDsKIAotICAgIC8vIE9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcg
c2hvdWxkIGV2ZXIgYmUgaW4gdXNlIGF0IGFueSBnaXZlbiB0aW1lLgotICAgIGNvbnN0IFJlZlB0
cjxET01TdHJpbmdMaXN0PiBtX2RvbVN0cmluZ0xpc3Q7Ci0gICAgY29uc3QgUmVmUHRyPElEQkN1
cnNvcj4gbV9pZGJDdXJzb3I7Ci0gICAgY29uc3QgUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4g
bV9pZGJDdXJzb3JXaXRoVmFsdWU7Ci0gICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2lk
YkRhdGFiYXNlOwotICAgIGNvbnN0IFJlZlB0cjxJREJGYWN0b3J5PiBtX2lkYkZhY3Rvcnk7Ci0g
ICAgY29uc3QgUmVmUHRyPElEQkluZGV4PiBtX2lkYkluZGV4OwotICAgIGNvbnN0IFJlZlB0cjxJ
REJPYmplY3RTdG9yZT4gbV9pZGJPYmplY3RTdG9yZTsKLSAgICBjb25zdCBSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IG1faWRiVHJhbnNhY3Rpb247Ci0gICAgY29uc3QgSURCS2V5UGF0aCBtX2lkYktl
eVBhdGg7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsK
LSAgICBjb25zdCBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgY29uc3QgaW50NjRfdCBtX2ludGVnZXI7
Citwcm90ZWN0ZWQ6CisgICAgSURCQW55KCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFj
a3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjU3MmYxLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisrKyAvZGV2L251bGwK
QEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBJREJDYWxsYmFja3NfaAotI2RlZmluZSBJREJDYWxsYmFja3NfaAot
Ci0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2lu
Y2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIERP
TVN0cmluZ0xpc3Q7Ci1jbGFzcyBJREJDdXJzb3JCYWNrZW5kOwotY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1zdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0
YTsKLQotY2xhc3MgSURCQ2FsbGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tz
PiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSA9IDA7Ci0gICAg
Ly8gRnJvbSBJREJGYWN0b3J5LndlYmtpdEdldERhdGFiYXNlTmFtZXMoKQotICAgIHZpcnR1YWwg
dm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PikgPSAwOwotICAgIC8vIEZy
b20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXgub3BlbkN1cnNvcigpLCBJREJJbmRleC5vcGVuS2V5
Q3Vyc29yKCkKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZD4pID0gMDsKLSAgICAvLyBGcm9tIElEQk9iamVjdFN0b3JlLmFkZCgpL3B1dCgpLCBJ
REJJbmRleC5nZXRLZXkoKQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJLZXk+KSA9IDA7Ci0gICAgLy8gRnJvbSBJREJPYmplY3RTdG9yZS9JREJJbmRleC5nZXQoKS9j
b3VudCgpLCBhbmQgdmFyaW91cyBtZXRob2RzIHRoYXQgeWllbGQgbnVsbC91bmRlZmluZWQuCi0g
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pID0gMDsK
LSAgICAvLyBGcm9tIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmdldCgpICh3aXRoIGtleSBpbmpl
Y3Rpb24pCi0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4sIFBhc3NSZWZQdHI8SURCS2V5PiwgY29uc3QgSURCS2V5UGF0aCYpID0gMDsKLSAgICAvLyBG
cm9tIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmNvdW50KCkKLSAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKGludDY0X3QgdmFsdWUpID0gMDsKLQotICAgIC8vIEZyb20gSURCRmFjdG9yLmRlbGV0
ZURhdGFiYXNlKCksIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmdldCgpLCBJREJPYmplY3RTdG9y
ZS5kZWxldGUoKSwgSURCT2JqZWN0U3RvcmUuY2xlYXIoKQotICAgIHZpcnR1YWwgdm9pZCBvblN1
Y2Nlc3MoKSA9IDA7Ci0KLSAgICAvLyBGcm9tIElEQkN1cnNvci5hZHZhbmNlKCkvY29udGludWUo
KQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KSA9IDA7Ci0K
LSAgICAvLyBGcm9tIElEQkZhY3Rvcnkub3BlbigpL2RlbGV0ZURhdGFiYXNlKCkKLSAgICB2aXJ0
dWFsIHZvaWQgb25CbG9ja2VkKHVpbnQ2NF90IC8qIGV4aXN0aW5nVmVyc2lvbiAqLykgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIC8vIEZyb20gSURCRmFjdG9yeS5vcGVuKCkKLSAgICB2
aXJ0dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKHVpbnQ2NF90IC8qIG9sZFZlcnNpb24gKi8sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJDYWxsYmFja3NfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggYzQwMTFkYy4uODYzODBlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCkBA
IC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAg
LTI4LDI0ICsyOCwxMiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNs
dWRlICJJREJBbnkuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgotI2luY2x1
ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURC
UmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8SURCQ3Vyc29yPiBJ
REJDdXJzb3I6OmNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSURCUmVxdWVzdCogcmVxdWVzdCwg
SURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lEQkN1cnNvcjo6
SURCQ3Vyc29yKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJDdXJzb3IoYmFja2Vu
ZCwgZGlyZWN0aW9uLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7CiB9CiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCkKQEAgLTcyLDIzMSArNjAs
NiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uUHJldlVuaXF1ZSgp
CiAgICAgcmV0dXJuIHByZXZ1bmlxdWU7CiB9CiAKLQotSURCQ3Vyc29yOjpJREJDdXJzb3IoUGFz
c1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kLCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbiBkaXJlY3Rpb24sIElEQlJlcXVlc3QqIHJlcXVlc3QsIElEQkFueSogc291cmNlLCBJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX2JhY2tlbmQoYmFja2VuZCkKLSAgICAs
IG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICwg
bV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAs
IG1fdHJhbnNhY3Rpb25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKLSAgICAsIG1fZ290VmFs
dWUoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7Ci0gICAgQVNTRVJUKG1fcmVxdWVz
dCk7Ci0gICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9y
ZVR5cGUgfHwgbV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQkluZGV4VHlwZSk7Ci0gICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24pOwotfQotCi1JREJDdXJzb3I6On5JREJDdXJzb3IoKQotewot
fQotCi1jb25zdCBTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uKCkgY29uc3QKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIklEQkN1cnNvcjo6ZGlyZWN0aW9uIik7Ci0gICAgcmV0dXJuIGRpcmVj
dGlvblRvU3RyaW5nKG1fZGlyZWN0aW9uKTsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIElEQkN1cnNvcjo6a2V5KCkgY29uc3QKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklE
QkN1cnNvcjo6a2V5Iik7Ci0gICAgcmV0dXJuIG1fY3VycmVudEtleVZhbHVlOwotfQotCi1jb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQ3Vyc29yOjpwcmltYXJ5S2V5KCkgY29uc3QK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNvcjo6cHJpbWFyeUtleSIpOwotICAgIHJl
dHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5VmFsdWU7Ci19Ci0KLWNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBJREJDdXJzb3I6OnZhbHVlKCkgY29uc3QKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkN1cnNvcjo6dmFsdWUiKTsKLSAgICByZXR1cm4gbV9jdXJyZW50VmFsdWU7Ci19Ci0K
LUlEQkFueSogSURCQ3Vyc29yOjpzb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3NvdXJj
ZS5nZXQoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3I6OnVwZGF0
ZSIpOwotCi0gICAgaWYgKCFtX2dvdFZhbHVlIHx8IGlzS2V5Q3Vyc29yKCkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9y
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVh
ZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVy
cm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLSAgICBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aDsKLSAgICBj
b25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxsKCk7Ci0gICAgaWYgKHVz
ZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKG1fcmVxdWVzdC0+cmVxdWVzdFN0YXRl
KCktPmV4ZWMoKSwgdmFsdWUsIGtleVBhdGgpOwotICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwg
IWtleVBhdGhLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKLSAgICAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG9iamVjdFN0b3JlLT5w
dXQoSURCRGF0YWJhc2VCYWNrZW5kOjpDdXJzb3JVcGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBzdGF0ZSwgdmFsdWUsIG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKLX0KLQotdm9pZCBJREJD
dXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZWMgPSAwOwotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yOjphZHZhbmNlIik7
Ci0gICAgaWYgKCFtX2dvdFZhbHVlKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghY291bnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3JlcXVlc3QtPnNldFBlbmRpbmdDdXJzb3IodGhpcyk7
Ci0gICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwotICAgIG1fYmFja2VuZC0+YWR2YW5jZShjb3VudCwg
bV9yZXF1ZXN0LCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpj
b250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKLSAgICBSZWZQdHI8SURC
S2V5PiBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsK
LSAgICBjb250aW51ZUZ1bmN0aW9uKGtleS5yZWxlYXNlKCksIGVjKTsKLX0KLQotdm9pZCBJREJD
dXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29y
Ojpjb250aW51ZSIpOwotICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZ290VmFsdWUpIHsKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5KSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRLZXkp
OwotICAgICAgICBpZiAobV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246
Ok5leHQgfHwgbV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHRO
b0R1cGxpY2F0ZSkgewotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRLZXktPmlzTGVzc1RoYW4o
a2V5LmdldCgpKSkgewotICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWtleS0+aXNMZXNzVGhhbihtX2N1cnJlbnRL
ZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
RGF0YUVycm9yOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRleHQg
ZnJvbSB3aGVuIGNvbnRpbnVlIHdhcyBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFjawot
ICAgIC8vICAgICAgICB3aWxsIGJlIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJzb3Ig
d2FzIGNhbGxlZCBvbi4gSXMgdGhpcyByaWdodD8KLSAgICBtX3JlcXVlc3QtPnNldFBlbmRpbmdD
dXJzb3IodGhpcyk7Ci0gICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwotICAgIG1fYmFja2VuZC0+Y29u
dGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOwotICAgIEFTU0VSVCghZWMpOwotfQot
Ci1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMg
PSAwOwotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yOjpkZWxldGUiKTsKLSAgICBpZiAo
IW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9uKHJlcXVlc3QsIGVjKTsKLSAg
ICBBU1NFUlQoIWVjKTsKLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
SURCQ3Vyc29yOjpwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpCi17Ci0gICAgbV9iYWNrZW5k
LT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwotfQotCi12b2lkIElEQkN1cnNvcjo6Y2xv
c2UoKQotewotICAgIG1fdHJhbnNhY3Rpb25Ob3RpZmllci5jdXJzb3JGaW5pc2hlZCgpOwotICAg
IGlmIChtX3JlcXVlc3QpIHsKLSAgICAgICAgbV9yZXF1ZXN0LT5maW5pc2hDdXJzb3IoKTsKLSAg
ICAgICAgbV9yZXF1ZXN0ID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpz
ZXRWYWx1ZVJlYWR5KERPTVJlcXVlc3RTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgdmFsdWUpCi17Ci0gICAgbV9jdXJyZW50S2V5ID0ga2V5OwotICAgIG1fY3VycmVudEtleVZh
bHVlID0gaWRiS2V5VG9TY3JpcHRWYWx1ZShzdGF0ZSwgbV9jdXJyZW50S2V5KTsKLQotICAgIG1f
Y3VycmVudFByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OwotICAgIG1fY3VycmVudFByaW1hcnlLZXlW
YWx1ZSA9IGlkYktleVRvU2NyaXB0VmFsdWUoc3RhdGUsIG1fY3VycmVudFByaW1hcnlLZXkpOwot
Ci0gICAgaWYgKCFpc0tleUN1cnNvcigpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotICAgICAgICBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7
Ci0gICAgICAgIGlmIChtZXRhZGF0YS5hdXRvSW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRo
LmlzTnVsbCgpKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgUmVmUHRyPElEQktleT4g
ZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKG1fcmVx
dWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOwot
ICAgICAgICAgICAgQVNTRVJUKCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbCht
X2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJvb2wgaW5q
ZWN0ZWQgPSBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUobV9yZXF1ZXN0LT5yZXF1ZXN0U3Rh
dGUoKSwgbV9jdXJyZW50UHJpbWFyeUtleSwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOwotICAg
ICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgZXJyb3JzIGhlcmUu
IE1vdmUgdGhpcyBpbnRvIG9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24gc28gdGhhdCB3ZSBjYW4g
YWJvcnQgdGhlIHRyYW5zYWN0aW9uIHRoZXJlLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MjI3OAotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpbmplY3Rl
ZCwgaW5qZWN0ZWQpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fY3VycmVudFZhbHVlID0gdmFs
dWU7Ci0KLSAgICBtX2dvdFZhbHVlID0gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gSURCQ3Vyc29yOjplZmZlY3RpdmVPYmplY3RTdG9yZSgpCi17Ci0gICAgaWYgKG1fc291
cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9yZVR5cGUpCi0gICAgICAgIHJldHVy
biBtX3NvdXJjZS0+aWRiT2JqZWN0U3RvcmUoKTsKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4
ID0gbV9zb3VyY2UtPmlkYkluZGV4KCk7Ci0gICAgcmV0dXJuIGluZGV4LT5vYmplY3RTdG9yZSgp
OwotfQotCiBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBJREJDdXJzb3I6OnN0cmluZ1RvRGly
ZWN0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBpZiAoZGlyZWN0aW9uU3RyaW5nID09IElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCA3
ZGRkY2FiLi5jM2FiYTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuaApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIElE
QkN1cnNvcl9oCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERP
TVJlcXVlc3RTdGF0ZTsKIGNsYXNzIElEQkFueTsKIGNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNz
IElEQkN1cnNvckJhY2tlbmQ7CiBjbGFzcyBJREJSZXF1ZXN0OwogY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIApAQCAtNTgsNTAgKzU3LDI2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gc3RyaW5nVG9EaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBt
b2RlU3RyaW5nLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZGlyZWN0aW9uVG9TdHJpbmcoSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbW9kZSk7CiAK
LSAgICBzdGF0aWMgUmVmPElEQkN1cnNvcj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZD4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJREJSZXF1ZXN0KiwgSURCQW55KiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yKCk7CisgICAg
dmlydHVhbCB+SURCQ3Vyc29yKCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElETAotICAg
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleSgpIGNvbnN0OwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBwcmltYXJ5S2V5KCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIHZhbHVlKCkgY29uc3Q7Ci0gICAgSURCQW55KiBzb3VyY2UoKSBjb25zdDsKLQotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gdXBkYXRlKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVk
IGxvbmcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBwcmltYXJ5S2V5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSURCQW55
KiBzb3VyY2UoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gdXBkYXRlKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNl
cHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNv
ZGUgZ2VuZXJhdG9yIHNvIHRoaXMgb3ZlcmxvYWQgaXMgdW5uZWVkZWQuCi0gICAgdm9pZCBjb250
aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJiBlYykg
eyBjb250aW51ZUZ1bmN0aW9uKHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7IH0K
LSAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0
cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJD
YWxsYmFjaygpOwotICAgIHZvaWQgY2xvc2UoKTsKLSAgICB2b2lkIHNldFZhbHVlUmVhZHkoRE9N
UmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKLSAgICBQYXNzUmVmUHRyPElEQktl
eT4gaWRiUHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhj
ZXB0aW9uQ29kZSYgZWMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIElEQlJlcXVlc3QqLCBJREJBbnkq
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3Io
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgSURCQ3Vyc29yKCk7CiAKLXByaXZhdGU6Ci0g
ICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLQot
ICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBtX2JhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQlJl
cXVlc3Q+IG1fcmVxdWVzdDsKLSAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBt
X2RpcmVjdGlvbjsKLSAgICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0gICAgSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJz
b3JOb3RpZmllciBtX3RyYW5zYWN0aW9uTm90aWZpZXI7Ci0gICAgYm9vbCBtX2dvdFZhbHVlOwot
ICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgaGVsZCBiZWNhdXNlIG1fYmFja2VuZCBtYXkgYWR2YW5j
ZSB3aGlsZSB0aGV5Ci0gICAgLy8gYXJlIHN0aWxsIHZhbGlkIGZvciB0aGUgY3VycmVudCBzdWNj
ZXNzIGhhbmRsZXJzLgotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudEtleVZh
bHVlOwotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudFByaW1hcnlLZXlWYWx1
ZTsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7Ci0gICAgUmVmUHRyPElEQktleT4g
bV9jdXJyZW50UHJpbWFyeUtleTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2N1cnJl
bnRWYWx1ZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3IoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAppbmRleCBhNTA3MTIxLi42NGIyOTFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAg
LTI2LDYgKzI2LDcgQEAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAg
IEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAog
XSBpbnRlcmZhY2UgSURCQ3Vyc29yIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHNv
dXJjZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRpcmVjdGlvbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MDFjN2UuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9y
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNv
bm5lY3Rpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCQ3Vyc29yQmFja2VuZDo6SURCQ3Vyc29y
QmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQotICAgIDogbV90YXNr
VHlwZSh0YXNrVHlwZSkKLSAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICwgbV90
cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24pCi0gICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3Rv
cmVJRCkKLSAgICAsIG1fY3Vyc29ySUQoY3Vyc29ySUQpCi0gICAgLCBtX3NhdmVkQ3Vyc29ySUQo
MCkKLSAgICAsIG1fY2xvc2VkKGZhbHNlKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVy
T3BlbkN1cnNvcih0aGlzKTsKLX0KLQotSURCQ3Vyc29yQmFja2VuZDo6fklEQkN1cnNvckJhY2tl
bmQoKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwot
fQotCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0
aW9uQ29kZSYpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjpjb250
aW51ZSIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNr
czsKLSAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2sobV90YXNrVHlwZSwgQ3Vyc29ySXRl
cmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5LCBjYWxsYmFja3MpKTsKLX0KLQotdm9p
ZCBJREJDdXJzb3JCYWNrZW5kOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6YWR2YW5jZSIpOwotICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBtX3RyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGNvdW50
LCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kOjpkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNvckJhY2tlbmQ6OmRlbGV0ZSIpOwotICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGU6OlJlYWRPbmx5KTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5
UmFuZ2U6OmNyZWF0ZShwcmltYXJ5S2V5KCkpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuZGVsZXRlUmFuZ2UobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZUlELCBrZXlS
YW5nZS5yZWxlYXNlKCksIHBycENhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2Vu
ZDo6Y2xvc2UoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6Y2xv
c2UiKTsKLSAgICBjbGVhcigpOwotICAgIG1fY2xvc2VkID0gdHJ1ZTsKLSAgICBtX3NhdmVkQ3Vy
c29ySUQgPSAwOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OnVwZGF0ZUN1cnNvckRhdGEo
SURCS2V5KiBrZXksIElEQktleSogcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVyKiB2YWx1ZUJ1ZmZl
cikKLXsKLSAgICBtX2N1cnJlbnRLZXkgPSBrZXk7Ci0gICAgbV9jdXJyZW50UHJpbWFyeUtleSA9
IHByaW1hcnlLZXk7Ci0gICAgbV9jdXJyZW50VmFsdWVCdWZmZXIgPSB2YWx1ZUJ1ZmZlcjsKLX0K
LQotdm9pZCBJREJDdXJzb3JCYWNrZW5kOjpjbGVhcigpCi17Ci0gICAgbV9jdXJzb3JJRCA9IDA7
Ci0gICAgbV9jdXJyZW50S2V5ID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0g
bnVsbHB0cjsKLSAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlciA9IG51bGxwdHI7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2Vu
ZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjRkMWY5Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgSURCQ3Vyc29yQmFj
a2VuZF9oCi0jZGVmaW5lIElEQkN1cnNvckJhY2tlbmRfaAotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7
Ci0KLWNsYXNzIElEQkN1cnNvckJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDdXJzb3JC
YWNrZW5kPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJDdXJzb3JCYWNrZW5kPiBjcmVh
dGUoaW50NjRfdCBjdXJzb3JJRCwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJRCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkN1cnNvckJhY2tlbmQoY3Vy
c29ySUQsIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlSUQpKTsKLSAgICB9Ci0gICAgc3RhdGljIFJlZjxJREJDdXJzb3JC
YWNrZW5kPiBjcmVhdGUoaW50NjRfdCBjdXJzb3JJRCwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1
cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJRCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkN1cnNvckJhY2tlbmQoY3Vyc29ySUQs
IGN1cnNvclR5cGUsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJRCkpOwotICAg
IH0KLSAgICB+SURCQ3Vyc29yQmFja2VuZCgpOwotCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVk
IGxvbmcsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgY29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwb3N0U3VjY2Vz
c0hhbmRsZXJDYWxsYmFjaygpIHsgfQotCi0gICAgSURCS2V5KiBrZXkoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRLZXkuZ2V0KCk7IH0KLSAgICBJREJLZXkqIHByaW1hcnlLZXkoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpOyB9Ci0gICAgU2hhcmVkQnVmZmVyKiB2
YWx1ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpD
dXJzb3JUeXBlOjpLZXlPbmx5KSA/IG51bGxwdHIgOiBtX2N1cnJlbnRWYWx1ZUJ1ZmZlci5nZXQo
KTsgfQotICAgIHZvaWQgdXBkYXRlQ3Vyc29yRGF0YShJREJLZXkqLCBJREJLZXkqIHByaW1hcnlL
ZXksIFNoYXJlZEJ1ZmZlciogdmFsdWVCdWZmZXIpOwotCi0gICAgdm9pZCBjbG9zZSgpOwotCi0g
ICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1
cnNvclR5cGU7IH0KLQotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvcklE
OyB9Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uKCkgeyByZXR1cm4g
Km1fdHJhbnNhY3Rpb247IH0KLQotICAgIHZvaWQgY2xlYXIoKTsKLSAgICB2b2lkIHNldFNhdmVk
Q3Vyc29ySUQoaW50NjRfdCBjdXJzb3JJRCkgeyBtX3NhdmVkQ3Vyc29ySUQgPSBjdXJzb3JJRDsg
fQotCi1wcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmQoaW50NjRfdCBjdXJzb3JJRCwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmQmLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpOwotCi0gICAgSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOwotICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFu
c2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLQotICAgIGludDY0
X3QgbV9jdXJzb3JJRDsKLSAgICBpbnQ2NF90IG1fc2F2ZWRDdXJzb3JJRDsKLQotICAgIFJlZlB0
cjxJREJLZXk+IG1fY3VycmVudEtleTsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRQcmlt
YXJ5S2V5OwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fY3VycmVudFZhbHVlQnVmZmVyOwot
Ci0gICAgYm9vbCBtX2Nsb3NlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCQ3Vyc29yQmFj
a2VuZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNkYTE2OTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCQ3Vy
c29yQmFja2VuZE9wZXJhdGlvbnMuaCIKLQotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24u
aCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRy
PEN1cnNvckFkdmFuY2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLSAgICBhdXRvIGNhbGxi
YWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9y
KSB7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgbV9jdXJzb3ItPmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIWtleSkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBlcnJvciBidXQgYWxz
byBubyBrZXksIHRoZW4gdGhlIGN1cnNvciByZWFjaGVkIHRoZSBlbmQuCi0gICAgICAgICAgICBt
X2N1cnNvci0+Y2xlYXIoKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3Rh
dGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4obnVsbHB0cikpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbV9jdXJzb3ItPnVwZGF0ZUN1cnNvckRhdGEoa2V5LmdldCgpLCBwcmltYXJ5S2V5
LmdldCgpLCB2YWx1ZUJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKGtleSwgcHJpbWFyeUtleSwgdmFsdWVCdWZmZXIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gRklYTUU6IEN1cnNvciBvcGVyYXRpb25zIHNob3VsZCBiZSBhYmxlIHRvIHBhc3MgYWxv
bmcgYW4gZXJyb3IgaW5zdGVhZCBvZiBzdWNjZXNzCi0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFj
aygpOwotICAgIH07Ci0KLSAgICBtX2N1cnNvci0+dHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLnNl
cnZlckNvbm5lY3Rpb24oKS5jdXJzb3JBZHZhbmNlKCptX2N1cnNvciwgKnRoaXMsIGNhbGxiYWNr
KTsKLX0KLQotdm9pZCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPEN1cnNvckl0ZXJhdGlv
bk9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywg
b3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFs
dWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsKLSAgICAgICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBtX2N1cnNvci0+Y2xlYXIoKTsKLSAgICAgICAgICAg
IG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgfSBlbHNlIGlmICgha2V5KSB7
Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNvIG5vIGtleSwgdGhl
biB0aGUgY3Vyc29yIHJlYWNoZWQgdGhlIGVuZC4KLSAgICAgICAgICAgIG1fY3Vyc29yLT5jbGVh
cigpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFy
ZWRCdWZmZXIqPihudWxscHRyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2N1
cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShrZXkuZ2V0KCksIHByaW1hcnlLZXkuZ2V0KCksIHZhbHVl
QnVmZmVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LCBw
cmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTog
Q3Vyc29yIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gcGFzcyBhbG9uZyBhbiBlcnJvciBp
bnN0ZWFkIG9mIHN1Y2Nlc3MKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAgfTsK
LQotICAgIG1fY3Vyc29yLT50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlv
bigpLmN1cnNvckl0ZXJhdGUoKm1fY3Vyc29yLCAqdGhpcywgY2FsbGJhY2spOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEVEKElOREVYRURfREFUQUJBU0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JC
YWNrZW5kT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjI3OTc3Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zX2gKLSNkZWZpbmUgSURC
Q3Vyc29yQmFja2VuZE9wZXJhdGlvbnNfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCT3BlcmF0aW9u
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0
aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEN1cnNvckl0ZXJhdGlvbk9wZXJh
dGlvbihjdXJzb3IsIGtleSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRl
IGZpbmFsOwotCi0gICAgaW50NjRfdCBjdXJzb3JJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29y
LT5pZCgpOyB9Ci0gICAgSURCS2V5KiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleS5nZXQoKTsg
fQotCi1wcml2YXRlOgotICAgIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2N1cnNvcihjdXJzb3IpCi0g
ICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IG1fY3Vyc29yOwotICAg
IFJlZlB0cjxJREJLZXk+IG1fa2V5OwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwotfTsKLQotY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVy
YXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3IsIHVuc2lnbmVkIGxvbmcgY291bnQsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKGN1cnNvciwgY291bnQsIGNhbGxi
YWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIGludDY0X3Qg
Y3Vyc29ySUQoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvci0+aWQoKTsgfQotICAgIHVuc2lnbmVk
IGxvbmcgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50OyB9Ci0KLXByaXZhdGU6Ci0gICAg
Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNv
ciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLSAgICAgICAgOiBtX2N1cnNvcihjdXJzb3IpCi0gICAgICAgICwgbV9jb3VudChjb3VudCkK
LSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBtX2N1cnNvcjsKLSAgICB1bnNpZ25lZCBsb25nIG1fY291
bnQ7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNl
bmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9uc19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAppbmRleCA5
MGVjNTdhLi41Y2U0NzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgsMjggKzI4LDkgQEAKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5o
IgotI2luY2x1ZGUgIklEQktleS5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQ
dHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShQYXNzUmVm
UHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
IGRpcmVjdGlvbiwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNv
cldpdGhWYWx1ZShiYWNrZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rp
b24pKTsKLX0KLQotUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhW
YWx1ZTo6ZnJvbUN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4gcHJwQ3Vyc29yKQotewotICAg
IFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGN1cnNvcldpdGhWYWx1ZShzdGF0aWNfY2FzdDxJ
REJDdXJzb3JXaXRoVmFsdWUqPihwcnBDdXJzb3IuZ2V0KCkpKTsKLSAgICByZXR1cm4gY3Vyc29y
V2l0aFZhbHVlLnJlbGVhc2UoKTsKLX0KLQotSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJDdXJzb3JX
aXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIElEQlJlcXVlc3QqIHJlcXVlc3QsIElEQkFueSog
c291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBJREJDdXJzb3IoYmFj
a2VuZCwgZGlyZWN0aW9uLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKQotewotfQotCi1J
REJDdXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUoKQorSURCQ3Vyc29yV2l0aFZh
bHVlOjpJREJDdXJzb3JXaXRoVmFsdWUoKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCmluZGV4IDk2Zjk2YjAu
LmM1MzE5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5oCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
ICNpZm5kZWYgSURCQ3Vyc29yV2l0aFZhbHVlX2gKQEAgLTM0LDIyICszNCwxNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZSA6IHB1YmxpYyBJREJDdXJz
b3IgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4g
Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4sIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uLCBJREJSZXF1ZXN0KiwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKik7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBmcm9tQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yPik7Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0aFZhbHVlKCk7Ci0K
LSAgICAvLyBUaGUgdmFsdWUgYXR0cmlidXRlIGRlZmluZWQgaW4gdGhlIElETCBpcyBzaW1wbHkg
aW1wbGVtZW50ZWQgaW4gSURCQ3Vyc29yIChidXQgbm90IGV4cG9zZWQgdmlhCi0gICAgLy8gaXRz
IElETCkuIFRoaXMgaXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gbW9yZSBzaW1wbGUgd2hp
bGUgbWF0Y2hpbmcgd2hhdCB0aGUgc3BlYyBzYXlzLgorICAgIHZpcnR1YWwgfklEQkN1cnNvcldp
dGhWYWx1ZSgpIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGlzS2V5Q3Vyc29y
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBJREJDdXJzb3JXaXRoVmFs
dWUoKTsKIAotcHJpdmF0ZToKLSAgICBJREJDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIElEQlJlcXVlc3QqLCBJ
REJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlD
dXJzb3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKIAotI2VuZGlmIC8vIElEQkN1cnNvcldpdGhWYWx1ZV9o
CisjZW5kaWYgLy8gTGVnYWN5Q3Vyc29yV2l0aFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCmluZGV4IDI0
NmRjMDYuLjM0NzFhMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbApAQCAtMjYsNiArMjYsNyBAQAogWwogICAg
IENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgRW5hYmxlZEF0UnVudGltZT1JbmRl
eGVkREIsCisgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCiBdIGludGVyZmFjZSBJREJDdXJzb3JX
aXRoVmFsdWUgOiBJREJDdXJzb3IgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgdmFsdWU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwCmluZGV4IDllZWY5YWYuLjJkNjQ3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgsMzcxICsyOCwxMSBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0j
aW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJJREJBbnkuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQkluZGV4Lmgi
Ci0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0j
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrLmg+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPElEQkRhdGFiYXNlPiBJREJEYXRhYmFzZTo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIFJlZjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UoYWRvcHRSZWYoKm5l
dyBJREJEYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSwgY2FsbGJhY2tzKSkpOwotICAgIGlkYkRh
dGFiYXNlLT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gaWRiRGF0YWJhc2U7Ci19Ci0K
LUlEQkRhdGFiYXNlOjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQorSURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29u
dGV4dCkKLSAgICAsIG1fYmFja2VuZChiYWNrZW5kKQotICAgICwgbV9jbG9zZVBlbmRpbmcoZmFs
c2UpCi0gICAgLCBtX2lzQ2xvc2VkKGZhbHNlKQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxz
ZSkKLSAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoY2FsbGJhY2tzKQotewotICAgIC8vIFdlIHBh
c3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgot
ICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotfQotCi1JREJEYXRhYmFzZTo6fklEQkRh
dGFiYXNlKCkKLXsKLSAgICAvLyBUaGlzIGRvZXMgd2hhdCBJREJEYXRhYmFzZTo6Y2xvc2UgZG9l
cywgYnV0IHdpdGhvdXQgYW55IHJlZi9kZXJlZiBvZiB0aGUKLSAgICAvLyBkYXRhYmFzZSBzaW5j
ZSBpdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlbGV0ZWQuIFRoZSBsb2dp
YyBoZXJlCi0gICAgLy8gaXMgYWxzbyBzaW1wbGVyIHNpbmNlIHdlIGtub3cgdGhlcmUgYXJlIG5v
IHRyYW5zYWN0aW9ucyAoc2luY2UgdGhleSByZWYgdGhlCi0gICAgLy8gZGF0YWJhc2Ugd2hlbiB0
aGV5IGFyZSBhbGl2ZSkuCi0KLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsK
LQotICAgIGlmICghbV9jbG9zZVBlbmRpbmcpIHsKLSAgICAgICAgbV9jbG9zZVBlbmRpbmcgPSB0
cnVlOwotICAgICAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOwotICAg
IH0KLQotICAgIGlmIChhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7
Ci0gICAgICAgIC8vIFJlbW92ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hl
ZHVsZWQgdG8gZmlyZSBvbiB0aGlzCi0gICAgICAgIC8vIGNvbm5lY3Rpb24uIFRoZXkgd291bGQg
aGF2ZSBiZWVuIHNjaGVkdWxlZCBieSB0aGUgYmFja2VuZCB3aGVuIGFub3RoZXIKLSAgICAgICAg
Ly8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVuZCBjb25uZWN0
aW9uIGlzIGJlaW5nCi0gICAgICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJlLgot
ICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykKLSAgICAgICAgICAg
IGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudCgqZXZlbnQpOwotICAgIH0KLX0KLQot
aW50NjRfdCBJREJEYXRhYmFzZTo6bmV4dFRyYW5zYWN0aW9uSWQoKQotewotICAgIC8vIE9ubHkg
a2VlcCBhIDMyLWJpdCBjb3VudGVyIHRvIGFsbG93IHBvcnRzIHRvIHVzZSB0aGUgb3RoZXIgMzIK
LSAgICAvLyBiaXRzIG9mIHRoZSBpZC4KLSAgICBzdGF0aWMgc3RkOjphdG9taWM8dWludDMyX3Q+
IGN1cnJlbnRUcmFuc2FjdGlvbklkOwotCi0gICAgcmV0dXJuICsrY3VycmVudFRyYW5zYWN0aW9u
SWQ7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ3JlYXRlZChJREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKLSAgICBBU1NF
UlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT5pZCgpKSk7Ci0gICAgbV90
cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLT5pZCgpLCB0cmFuc2FjdGlvbik7Ci0KLSAgICBp
ZiAodHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbiA9IHRyYW5zYWN0aW9uOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6dHJhbnNh
Y3Rpb25GaW5pc2hlZChJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJU
KHRyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb24tPmlkKCkpKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
LT5pZCgpKSA9PSB0cmFuc2FjdGlvbik7Ci0gICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5z
YWN0aW9uLT5pZCgpKTsKLQotICAgIGlmICh0cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkp
IHsKLSAgICAgICAgQVNTRVJUKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID09IHRyYW5zYWN0
aW9uKTsKLSAgICAgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSBudWxscHRyOwotICAg
IH0KLQotICAgIGlmIChtX2Nsb3NlUGVuZGluZyAmJiBtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkp
Ci0gICAgICAgIGNsb3NlQ29ubmVjdGlvbigpOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpvbkFi
b3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBl
cnJvcikKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25J
ZCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+b25BYm9ydChlcnJv
cik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6Om9uQ29tcGxldGUoaW50NjRfdCB0cmFuc2FjdGlv
bklkKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklk
KSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5vbkNvbXBsZXRlKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3Jl
TmFtZXMoKSBjb25zdAotewotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5h
bWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9y
ZSA6IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnZhbHVlcygpKQotICAgICAgICBvYmplY3RTdG9y
ZU5hbWVzLT5hcHBlbmQob2JqZWN0U3RvcmUubmFtZSk7Ci0gICAgb2JqZWN0U3RvcmVOYW1lcy0+
c29ydCgpOwotICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKLX0KLQotdWlu
dDY0X3QgSURCRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAotewotICAgIC8vIE5vSW50VmVyc2lv
biBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBzaG91bGRuJ3Qg
YmUgZXhwb3NlZCB0byBzY3JpcHQuCi0gICAgLy8gRGVmYXVsdEludFZlcnNpb24gc2hvdWxkIGJl
IGV4cG9zZWQgaW5zdGVhZC4KLSAgICByZXR1cm4gbV9tZXRhZGF0YS52ZXJzaW9uICE9IElEQkRh
dGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbiA/IG1fbWV0YWRhdGEudmVyc2lvbiA6IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbik7
Ci19Ci0KLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQktleVBhdGgga2V5UGF0aDsKLSAgICBib29sIGF1
dG9JbmNyZW1lbnQgPSBmYWxzZTsKLSAgICBpZiAoIW9wdGlvbnMuaXNVbmRlZmluZWRPck51bGwo
KSkgewotICAgICAgICBTdHJpbmcga2V5UGF0aFN0cmluZzsKLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4ga2V5UGF0aEFycmF5OwotICAgICAgICBpZiAob3B0aW9ucy5nZXQoImtleVBhdGgiLCBrZXlQ
YXRoQXJyYXkpKQotICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aEFycmF5
KTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5nZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2so
ImtleVBhdGgiLCBrZXlQYXRoU3RyaW5nKSkKLSAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQ
YXRoKGtleVBhdGhTdHJpbmcpOwotCi0gICAgICAgIG9wdGlvbnMuZ2V0KCJhdXRvSW5jcmVtZW50
IiwgYXV0b0luY3JlbWVudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNyZWF0ZU9iamVjdFN0b3Jl
KG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZSIpOwotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRy
YW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
aWYgKGNvbnRhaW5zT2JqZWN0U3RvcmUobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBpZiAoIWtleVBhdGguaXNOdWxsKCkgJiYgIWtleVBhdGguaXNWYWxpZCgpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlN5bnRheEVycm9yOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAoKGtleVBhdGgudHlwZSgp
ID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUgJiYga2V5UGF0aC5zdHJpbmcoKS5pc0VtcHR5KCkp
IHx8IGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OkFycmF5VHlwZSkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtX21ldGFkYXRh
Lm1heE9iamVjdFN0b3JlSWQgKyAxOwotICAgIG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUo
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3JlSWQsIG5hbWUsIGtl
eVBhdGgsIGF1dG9JbmNyZW1lbnQpOwotCi0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRh
ZGF0YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRh
YmFzZUJhY2tlbmQ6Ok1pbmltdW1JbmRleElkKTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwgbV92ZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNl
dChtZXRhZGF0YS5pZCwgbWV0YWRhdGEpOwotICAgICsrbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9y
ZUlkOwotCi0gICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3JlYXRl
ZChuYW1lLCBvYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFi
YXNlOjpkZWxldGVPYmplY3RTdG9yZSIpOwotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24pIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRl
RXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBmaW5kT2JqZWN0U3RvcmVJZChuYW1lKTsKLSAg
ICBpZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQp
IHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUo
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3JlSWQpOwotICAgIG1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQobmFtZSk7Ci0gICAg
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwotfQotCi1QYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNjb3BlLCBjb25z
dCBTdHJpbmcmIG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uIik7Ci0gICAgaWYgKCFzY29wZS5zaXpl
KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vy
cm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBJbmRleGVkREI6OlRyYW5zYWN0
aW9uTW9kZSBtb2RlID0gSURCVHJhbnNhY3Rpb246OnN0cmluZ1RvTW9kZShtb2RlU3RyaW5nLCBl
Yyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX3ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCBtX2Nsb3NlUGVuZGluZykgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwotICAgIGZvciAoYXV0
byYgbmFtZSA6IHNjb3BlKSB7Ci0gICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRP
YmplY3RTdG9yZUlkKG5hbWUpOwotICAgICAgICBpZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfQotICAgICAgICBvYmplY3RTdG9yZUlkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7Ci0gICAg
fQotCi0gICAgaW50NjRfdCB0cmFuc2FjdGlvbklkID0gbmV4dFRyYW5zYWN0aW9uSWQoKTsKLSAg
ICBtX2JhY2tlbmQtPmNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIG1fZGF0YWJhc2VD
YWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBtb2RlKTsKLQotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5z
YWN0aW9uSWQsIHNjb3BlLCBtb2RlLCB0aGlzKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVs
ZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJh
bnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBz
dG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKLSAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1lKTsKLSAgICByZXR1cm4gdHJhbnNh
Y3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlOjpmb3JjZUNsb3NlKCkKLXsKLSAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogbV90cmFu
c2FjdGlvbnMudmFsdWVzKCkpCi0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJR05PUkVfRVhD
RVBUSU9OKTsKLSAgICB0aGlzLT5jbG9zZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpjbG9z
ZSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZTo6Y2xvc2UiKTsKLSAgICBp
ZiAobV9jbG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xvc2VQZW5kaW5n
ID0gdHJ1ZTsKLQotICAgIGlmIChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIGNs
b3NlQ29ubmVjdGlvbigpOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpjbG9zZUNvbm5lY3Rpb24o
KQotewotICAgIEFTU0VSVChtX2Nsb3NlUGVuZGluZyk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b25zLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBDbG9zaW5nIG1heSByZXN1bHQgaW4gZGVhbGxvY2F0
aW5nIHRoZSBsYXN0IHRyYW5zYWN0aW9uLCB3aGljaCBjb3VsZCByZXN1bHQgaW4gZGVsZXRpbmcK
LSAgICAvLyB0aGlzIElEQkRhdGFiYXNlLiBXZSBuZWVkIHRoZSBkZWFsbG9jYXRpb24gdG8gaGFw
cGVuIGFmdGVyIHdlIGFyZSB0aHJvdWdoLgotICAgIFJlZjxJREJEYXRhYmFzZT4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOwotCi0g
ICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIC8vIFJlbW92ZSBhbnkgcGVuZGluZyB2
ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0aGlzCi0gICAgLy8gY29u
bmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRoZSBiYWNrZW5kIHdo
ZW4gYW5vdGhlcgotICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUg
ZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZwotICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgotICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0g
ICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci0KLSAgICBtX2lz
Q2xvc2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6b25WZXJzaW9uQ2hhbmdlKHVp
bnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJJREJEYXRhYmFzZTo6b25WZXJzaW9uQ2hhbmdlIik7Ci0gICAgaWYgKG1fY29udGV4
dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fY2xvc2VQZW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bmV3VmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOwotICAgIGVu
cXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdW
ZXJzaW9uLCBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KSk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2U6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBB
U1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7Ci0gICAg
QVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0
aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVl
RXZlbnQoZXZlbnQuZ2V0KCkpOwotICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsK
LX0KLQotYm9vbCBJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50
Iik7Ci0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFu
Z2VFdmVudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2
ZW50LmdldCgpKQotICAgICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7Ci0gICAg
fQotICAgIHJldHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Ci19
Ci0KLWludDY0X3QgSURCRGF0YWJhc2U6OmZpbmRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMpIHsKLSAgICAgICAgaWYgKG9iamVjdFN0b3JlLnZhbHVlLm5hbWUgPT0gbmFt
ZSkgewotICAgICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLmtleSAhPSBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhOjpJbnZhbGlkSWQpOwotICAgICAgICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLmtl
eTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW52YWxpZElkOwotfQotCi1ib29sIElEQkRhdGFiYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBj
b25zdAotewotICAgIC8vIFRoZSBzY3JpcHQgd3JhcHBlciBtdXN0IG5vdCBiZSBjb2xsZWN0ZWQg
YmVmb3JlIHRoZSBvYmplY3QgaXMgY2xvc2VkIG9yCi0gICAgLy8gd2UgY2FuJ3QgZmlyZSBhICJ2
ZXJzaW9uY2hhbmdlIiBldmVudCB0byBsZXQgc2NyaXB0IG1hbnVhbGx5IGNsb3NlIHRoZSBjb25u
ZWN0aW9uLgotICAgIHJldHVybiAhbV9jbG9zZVBlbmRpbmcgJiYgaGFzRXZlbnRMaXN0ZW5lcnMo
KSAmJiAhbV9jb250ZXh0U3RvcHBlZDsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6c3RvcCgpCi17
Ci0gICAgLy8gU3RvcCBmaXJlcyBhdCBhIGRldGVybWluaXN0aWMgdGltZSwgc28gd2UgbmVlZCB0
byBjYWxsIGNsb3NlIGluIGl0LgotICAgIGNsb3NlKCk7Ci0KLSAgICBtX2NvbnRleHRTdG9wcGVk
ID0gdHJ1ZTsKLX0KLQotY29uc3QgY2hhciogSURCRGF0YWJhc2U6OmFjdGl2ZURPTU9iamVjdE5h
bWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURCRGF0YWJhc2UiOwotfQotCi1ib29sIElEQkRh
dGFiYXNlOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9p
c0Nsb3NlZDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggNDg5OTc2My4uYTVhOTYxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBA
IC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSURCRGF0YWJhc2VfaApA
QCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxs
YmFja3MuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgpAQCAtNDksOTAgKzQ4
LDI5IEBAIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7CiAKLWNsYXNzIElEQkRhdGFiYXNlIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8
SURCRGF0YWJhc2U+LCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgRXZlbnRUYXJnZXRX
aXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitjbGFzcyBJREJEYXRhYmFz
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPiwgcHVibGljIFNjcmlwdFdyYXBwYWJs
ZSwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmpl
Y3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCRGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0gICAgfklEQkRhdGFiYXNlKCk7Ci0KLSAgICB2
b2lkIHNldE1ldGFkYXRhKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKSB7IG1f
bWV0YWRhdGEgPSBtZXRhZGF0YTsgfQotICAgIHZvaWQgdHJhbnNhY3Rpb25DcmVhdGVkKElEQlRy
YW5zYWN0aW9uKik7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9u
Kik7CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2UoKSB7IH0KIAogICAgIC8vIEltcGxlbWVudCB0
aGUgSURMCi0gICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRh
Lm5hbWU7IH0KLSAgICB1aW50NjRfdCB2ZXJzaW9uKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzKCkgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBzY29wZSwgY29uc3QgU3RyaW5nJiBt
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgKnNj
b3BlLCBtb2RlLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25z
dCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGNsb3NlKCk7Ci0KLSAgICAvLyBJREJEYXRhYmFzZUNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9p
ZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lv
bik7Ci0gICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoaW50NjRfdCwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPik7Ci0gICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoaW50NjRfdCk7Ci0KLSAg
ICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBJREJEYXRhYmFz
ZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsg
cmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Ci0KLSAg
ICBib29sIGlzQ2xvc2VQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZVBlbmRpbmc7IH0K
LSAgICB2b2lkIGZvcmNlQ2xvc2UoKTsKLSAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhIG1l
dGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQotICAgIHZvaWQgZW5xdWV1ZUV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLQotICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKLQotICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbmRPYmplY3RTdG9yZUlkKG5h
bWUpICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKLSAgICB9CisgICAgdmly
dHVhbCBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVpbnQ2NF90
IHZlcnNpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdCA9IDA7CiAKLSAgICBJREJEYXRhYmFzZUJhY2tl
bmQqIGJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2Rl
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAw
OwogCi0gICAgc3RhdGljIGludDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKKyAgICB2aXJ0dWFs
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCA9IDA7CiAKICAgICB1
c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCRGF0YWJhc2U+OjpkZXJlZjsKIAotICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCi0gICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAg
ICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0KLSAgICAv
LyBBY3RpdmVET01PYmplY3QgQVBJLgotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGNv
bnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIEV2ZW50
VGFyZ2V0Ci0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwg
eyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUg
ZmluYWwgeyBkZXJlZigpOyB9Ci0KLSAgICB2b2lkIGNsb3NlQ29ubmVjdGlvbigpOwotCi0gICAg
SURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmQ+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uOwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2Fj
dGlvbio+IFRyYW5zYWN0aW9uTWFwOwotICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNhY3Rpb25z
OwotCi0gICAgYm9vbCBtX2Nsb3NlUGVuZGluZzsKLSAgICBib29sIG1faXNDbG9zZWQ7Ci0gICAg
Ym9vbCBtX2NvbnRleHRTdG9wcGVkOwotCi0gICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgdmVyc2lv
bmNoYW5nZSBldmVudHMgd2FpdGluZyB0byBiZSBmaXJlZCBvbiB0aGlzCi0gICAgLy8gZGF0YWJh
c2Ugc28gdGhhdCB3ZSBjYW4gY2FuY2VsIHRoZW0gaWYgdGhlIGRhdGFiYXNlIGNsb3Nlcy4KLSAg
ICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9lbnF1ZXVlZEV2ZW50czsKLQotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK3Byb3RlY3RlZDoKKyAg
ICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5pZGwKaW5kZXggZWQ5OGZlZC4uYTVkZWY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbApAQCAtMzEsNiArMzEsNyBAQAog
ICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0LAogICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwK
ICAgICBFbmFibGVkQXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlv
biwKIF0gaW50ZXJmYWNlIElEQkRhdGFiYXNlIDogRXZlbnRUYXJnZXQgewogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBsb25nIHZlcnNpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDllNGUyNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjIyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VC
YWNrZW5kLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklE
QkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJl
Y29yZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCi0jaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBJREJTZXJ2ZXJDb25uZWN0aW9uJiBz
ZXJ2ZXJDb25uZWN0aW9uKQotewotICAgIFJlZjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQg
PSBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlQmFja2VuZChuYW1lLCB1bmlxdWVJZGVudGlmaWVy
LCBmYWN0b3J5LCBzZXJ2ZXJDb25uZWN0aW9uKSk7Ci0gICAgYmFja2VuZC0+b3BlbkludGVybmFs
QXN5bmMoKTsKLSAgICAKLSAgICByZXR1cm4gYmFja2VuZDsKLX0KLQotSURCRGF0YWJhc2VCYWNr
ZW5kOjpJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBJ
REJTZXJ2ZXJDb25uZWN0aW9uJiBzZXJ2ZXJDb25uZWN0aW9uKQotICAgIDogbV9tZXRhZGF0YShu
YW1lLCBJbnZhbGlkSWQsIDAsIEludmFsaWRJZCkKLSAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJ
ZGVudGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0gICAgLCBtX3NlcnZlckNvbm5l
Y3Rpb24oc2VydmVyQ29ubmVjdGlvbikKLSAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihz
dGQ6Om1ha2VfdW5pcXVlPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+KCkpCi0gICAgLCBtX2Ns
b3NpbmdDb25uZWN0aW9uKGZhbHNlKQotICAgICwgbV9kaWRPcGVuSW50ZXJuYWwoZmFsc2UpCi17
Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOwotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NF
UlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlkKSk7Ci0g
ICAgaWYgKG5ld01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52
YWxpZElkKSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPCBu
ZXdNYXhPYmplY3RTdG9yZUlkKTsKLSAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlk
ID0gbmV3TWF4T2JqZWN0U3RvcmVJZDsKLSAgICB9Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpyZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0g
ICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQp
Ci17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0
b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKCFvYmpl
Y3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5k
ZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKLSAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJ
bmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1h
eEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKLSAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJ
ZCA9IG5ld01heEluZGV4SWQ7Ci0gICAgfQotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNl
dChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kOjpyZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkK
LXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0
U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5kZXhl
cy5yZW1vdmUoaW5kZXhJZCk7Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVj
dFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9w
ZW5JbnRlcm5hbEFzeW5jKCkKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBzZWxm
ID0gdGhpczsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24tPmdldE9yRXN0YWJsaXNoSURCRGF0YWJh
c2VNZXRhZGF0YShbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJv
b2wgc3VjY2VzcykgewotICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJuYWxBc3luYyhtZXRhZGF0
YSwgc3VjY2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkaWRP
cGVuSW50ZXJuYWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9v
bCBzdWNjZXNzKQotewotICAgIG1fZGlkT3BlbkludGVybmFsID0gdHJ1ZTsKLQotICAgIGlmICgh
c3VjY2VzcykgewotICAgICAgICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyhmYWxzZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX21ldGFkYXRhID0gbWV0YWRhdGE7Ci0KLSAgICBw
cm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZDo6fklEQkRhdGFi
YXNlQmFja2VuZCgpCi17Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQo
bV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRl
T2JqZWN0U3RvcmUiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQoIW1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJ
ZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgSURCRGF0YWJhc2VCYWNrZW5kOjpNaW5pbXVtSW5k
ZXhJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbihvYmplY3RTdG9yZU1ldGFkYXRhKTsKLSAgICBhZGRPYmplY3RTdG9yZShvYmplY3RTdG9y
ZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6
OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxl
dGVPYmplY3RTdG9yZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlv
bikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVCht
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5z
Y2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEpOwot
ICAgIHJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVJbmRleCIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlOjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9y
ZUlkKTsKLQotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElk
KSk7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4
SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsK
LQotICAgIGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgiKTsKLSAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZTo6VmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7
Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3Jl
LmluZGV4ZXMuZ2V0KGluZGV4SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRl
SW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7Ci0KLSAgICByZW1v
dmVJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmQ6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gVGhlIGZyb250
ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBp
bml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlv
bi4gb25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBz
byBpdCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKG1f
dHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQotewotICAgIC8vIElmIHRoZSB0
cmFuc2FjdGlvbiBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBi
eSB0aGUgYmFja2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0
LgotICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAg
ICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOwotfQotCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAgIC8vIElmIHRoZSB0cmFuc2FjdGlv
biBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFj
a2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgotICAgIGlm
IChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAgICAgbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsK
LSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Z2V0Iik7Ci0gICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVHZXRPcGVyYXRpb24obV9tZXRhZGF0YSwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGtleU9ubHkgPyBJbmRleGVkREI6OkN1cnNvclR5cGU6
OktleU9ubHkgOiBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCBjYWxsYmFja3Mp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZDo6cHV0Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKLQotICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmplY3RT
dG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKLQotICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50
NjRfdCBvYmplY3RTdG9yZUlELCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgVmVjdG9yPGludDY0X3QsIDE+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cywg
MT4mIGluZGV4S2V5cykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2Vu
ZDo6c2V0SW5kZXhLZXlzIik7Ci0gICAgQVNTRVJUKHBycFByaW1hcnlLZXkpOwotICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7Ci0KLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklEKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSA9IHBycFByaW1hcnlLZXk7Ci0gICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5zZXRJbmRleEtl
eXModHJhbnNhY3Rpb25JRCwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJRCwgbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSUQpLCAqcHJpbWFyeUtleSwgaW5kZXhJRHMs
IGluZGV4S2V5cywgW3RyYW5zYWN0aW9uXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yKSB7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9y
dChlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRl
eGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50
NjRfdCwgMT4mIGluZGV4SWRzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VC
YWNrZW5kOjpzZXRJbmRleGVzUmVhZHkiKTsKLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYg
KCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVk
dWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKGluZGV4SWRzLnNpemUoKSk7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wg
a2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5D
dXJzb3IiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRp
b24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6
S2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpOwotfQotCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZDo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEks
ICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNvdW50Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBp
ZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdl
LCBjYWxsYmFja3MpOwotfQotCi0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVSYW5n
ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJh
bmdlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZURl
bGV0ZVJhbmdlT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2Vu
ZDo6Y2xlYXJPYmplY3RTdG9yZSAlbGxpIGluIHRyYW5zYWN0aW9uICVsbGkiLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KG9iamVjdFN0b3JlSWQpLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHRyYW5z
YWN0aW9uSWQpKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVk
dWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgICAgICBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICB9Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKLSAgICBBU1NFUlQobV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKLSAgICBBU1NFUlQobV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLT5pZCgpKSA9PSB0cmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLT5pZCgpKTsKLSAgICBpZiAo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lv
bkNoYW5nZSkgewotICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5n
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgbV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHJhd1RyYW5zYWN0aW9uKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247Ci0gICAgaWYgKHRyYW5zYWN0aW9u
LT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsK
LSAgICAgICAgLy8gSWYgdGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUg
d2lsbCBiZSBhICJzZWNvbmQKLSAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9y
IHVzIGluIHByb2Nlc3NQZW5kaW5nQ2FsbHMuCi0gICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5v
IGxvbmdlciBzdXBwb3J0IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCi0gICAgICAg
IGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgewotICAgICAgICAgICAgbV9wZW5kaW5nU2Vj
b25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uIHdhcyBhYm9ydGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7Ci0g
ICAgICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51bGxwdHI7Ci0gICAgICAgIH0K
LSAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNh
Y3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5n
ZSkKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi1zaXplX3QgSURCRGF0YWJh
c2VCYWNrZW5kOjpjb25uZWN0aW9uQ291bnQoKQotewotICAgIC8vIFRoaXMgZG9lcyBub3QgaW5j
bHVkZSBwZW5kaW5nIG9wZW4gY2FsbHMsIGFzIHRob3NlIHNob3VsZCBub3QgYmxvY2sgdmVyc2lv
biBjaGFuZ2VzIGFuZCBkZWxldGVzLgotICAgIHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LnNpemUoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnByb2Nlc3NQZW5kaW5nQ2Fs
bHMoKQotewotICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKSB3aWxsIGJlIGNhbGxlZCBhZ2Fp
biBhZnRlciBvcGVuSW50ZXJuYWxBc3luYygpIGNvbXBsZXRlcy4KLSAgICBpZiAoIW1fZGlkT3Bl
bkludGVybmFsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFs
Zk9wZW4pIHsKLSAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT52ZXJzaW9u
KCkgPT0gbV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQg
IT0gSW52YWxpZElkKTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNr
cygpLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci0gICAgICAgIG1fcGVuZGlu
Z1NlY29uZEhhbGZPcGVuID0gbnVsbHB0cjsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHdoZW4g
Y29tcGxldGUsIGFzIHBlbmRpbmcgZGVsZXRlcyBtYXkgYmUgKHBhcnRpYWxseSkgdW5ibG9ja2Vk
LgotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzIG9ubHkgYW4gb3B0aW1p
emF0aW9uIHRvIHJlZHVjZSBxdWV1ZS1jaHVybiBhbmQKLSAgICAvLyBub3QgbmVjZXNzYXJ5IGZv
ciBjb3JyZWN0bmVzczsgZGVsZXRlRGF0YWJhc2UgYW5kIG9wZW5Db25uZWN0aW9uIHdpbGwKLSAg
ICAvLyByZXF1ZXVlIHRoZWlyIGNhbGxzIGlmIHRoaXMgY29uZGl0aW9uIGlzIHRydWUuCi0gICAg
aWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkgJiYgaXNEZWxldGVEYXRh
YmFzZUJsb2NrZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdoaWxlICghbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5n
RGVsZXRlQ2FsbD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBtX3BlbmRpbmdEZWxldGVDYWxscy50YWtl
Rmlyc3QoKTsKLSAgICAgICAgbV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5hZGQo
cGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKLSAgICAgICAgZGVsZXRlRGF0YWJhc2VB
c3luYyhwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOwotICAgIH0KLQotICAgIC8vIGRl
bGV0ZURhdGFiYXNlQXN5bmMgc2hvdWxkIG5ldmVyIHJlLXF1ZXVlIGNhbGxzLgotICAgIEFTU0VS
VChtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJl
IGFueSBkYXRhYmFzZSBkZWxldGlvbnMgd2FpdGluZyBmb3IgY29tcGxldGlvbiwgd2UncmUgZG9u
ZSBmb3Igbm93LgotICAgIC8vIEZ1cnRoZXIgY2FsbGJhY2tzIHdpbGwgYmUgaGFuZGxlZCBpbiBh
IGZ1dHVyZSBjYWxsIHRvIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKS4KLSAgICBpZiAoIW1fZGVsZXRl
Q2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyh0cnVlKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmQ6OnByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGJvb2wgc3VjY2VzcykKLXsK
LSAgICAvLyBPcGVuIGNhbGxzIGNhbiBiZSByZXF1ZXVlZCBpZiBhbiBvcGVuIGNhbGwgc3RhcnRl
ZCBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIG9yIGRlbGV0ZXMgdGhlIGRhdGFiYXNlLgot
ICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBwZW5kaW5nT3Bl
bkNhbGxzOwotICAgIG1fcGVuZGluZ09wZW5DYWxscy5zd2FwKHBlbmRpbmdPcGVuQ2FsbHMpOwot
Ci0gICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SURCUGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5n
T3BlbkNhbGxzLnRha2VGaXJzdCgpOwotICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAg
ICAgaWYgKG1fbWV0YWRhdGEuaWQgPT0gSW52YWxpZElkKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyBkYXRhYmFzZSB3YXMgZGVsZXRlZCB0aGVuIHF1aWNrbHkgcmUtb3BlbmVkLgotICAgICAg
ICAgICAgICAgIC8vIG9wZW5JbnRlcm5hbEFzeW5jKCkgd2lsbCByZWNyZWF0ZSBpdCBpbiB0aGUg
YmFja2luZyBzdG9yZSBhbmQgdGhlbiByZXN1bWUgcHJvY2Vzc2luZyBwZW5kaW5nIGNhbGxiYWNr
cy4KLSAgICAgICAgICAgICAgICBwZW5kaW5nT3BlbkNhbGxzLnByZXBlbmQoV1RGOjptb3ZlKHBl
bmRpbmdPcGVuQ2FsbCkpOwotICAgICAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbHMuc3dhcCht
X3BlbmRpbmdPcGVuQ2FsbHMpOwotCi0gICAgICAgICAgICAgICAgb3BlbkludGVybmFsQXN5bmMo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBv
cGVuQ29ubmVjdGlvbkludGVybmFsKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRp
bmdPcGVuQ2FsbC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2Fj
dGlvbklkKCksIHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwotICAgICAgICAgICAgaWYgKHBlbmRpbmdPcGVu
Q2FsbC0+dmVyc2lvbigpID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKLSAg
ICAgICAgICAgICAgICBtZXNzYWdlID0gIkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ug
d2l0aCBubyB2ZXJzaW9uIHNwZWNpZmllZC4iOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBk
YXRhYmFzZSB3aXRoIHZlcnNpb24gJWxsdSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4ocGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkpKTsKLSAgICAgICAgICAgIHBlbmRpbmdPcGVu
Q2FsbC0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0
X3QgdHJhbnNhY3Rpb25JRCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSURzLCBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSBtb2RlKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUodGhpcywgdHJhbnNh
Y3Rpb25JRCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUlEcywgbW9kZSk7Ci0KLSAgICBBU1NFUlQo
IW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSUQpKTsKLSAgICBtX3RyYW5zYWN0
aW9ucy5hZGQodHJhbnNhY3Rpb25JRCwgdHJhbnNhY3Rpb24uZ2V0KCkpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJh
c2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbikKLXsK
LSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAg
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFi
YXNlQ2FsbGJhY2tzOwotCi0gICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPElEQlBlbmRpbmdPcGVuQ2FsbD4oKmNhbGxiYWNrcywgKmRhdGFiYXNlQ2FsbGJhY2tz
LCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7Ci0KLSAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVjdGlvbkludGVybmFsKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IHVpbnQ2NF90IHZlcnNpb24pCi17Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
OwotCi0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwot
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBE
YXRhYmFzZUNhbGxiYWNrczsKLQotICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRhdGFiYXNlIGRp
ZG4ndCBleGlzdCBmcm9tIGl0cyBsYWNrIG9mIHZlcnNpb24uCi0gICAgYm9vbCBpc05ld0RhdGFi
YXNlID0gbV9tZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbjsKLQotICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJ
bnRWZXJzaW9uICYmICFpc05ld0RhdGFiYXNlKSB7Ci0gICAgICAgIG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoaXNOZXdEYXRhYmFzZSAmJiB2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRl
ZmF1bHRJbnRWZXJzaW9uKSB7Ci0gICAgICAgIC8vIFNwZWMgc2F5czogSWYgbm8gdmVyc2lvbiBp
cyBzcGVjaWZpZWQgYW5kIG5vIGRhdGFiYXNlIGV4aXN0cywgc2V0IGRhdGFiYXNlIHZlcnNpb24g
dG8gMS4KLSAgICAgICAgdmVyc2lvbiA9IDE7Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24gPiBt
X21ldGFkYXRhLnZlcnNpb24gfHwgbV9tZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbikgewotICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmVyc2lvbiA8IG1fbWV0YWRh
dGEudmVyc2lvbiAmJiBtX21ldGFkYXRhLnZlcnNpb24gIT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6
Tm9JbnRWZXJzaW9uKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpm
b3JtYXQoIlRoZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJWxsdSkgaXMgbGVzcyB0aGFuIHRoZSBleGlz
dGluZyB2ZXJzaW9uICglbGx1KS4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHZl
cnNpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fbWV0YWRhdGEudmVyc2lv
bikpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQodmVyc2lvbiA9PSBt
X21ldGFkYXRhLnZlcnNpb24pOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFi
YXNlQ2FsbGJhY2tzKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRh
ZGF0YSgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCi17Ci0gICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNr
czsKLSAgICBBU1NFUlQoY2FsbGJhY2tzKTsKLSAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9k
YXRhYmFzZUNhbGxiYWNrc1NldCkgewotICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUg
ZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcg
c2V0LgotICAgICAgICBpZiAoY2FsbGJhY2sgIT0gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAg
ICAgICBjYWxsYmFjay0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEudmVyc2lvbiwgcmVxdWVz
dGVkVmVyc2lvbik7Ci0gICAgfQotICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50
aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCi0gICAgLy8gZGVsaXZlcmVkIGFu
ZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGlu
ZwotICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3Vs
ZCBiZSBjb25zaXN0ZW50IHdpdGggaG93Ci0gICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNv
cnJlY3RseSkgZGlkIGl0LgotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNhbGwgdG8gb25CbG9j
a2VkIGFuZCBpbnN0ZWFkIHdhaXQgdW50aWwgdGhlIGZyb250ZW5kCi0gICAgLy8gdGVsbHMgdXMg
dGhhdCBhbGwgdGhlIGJsb2NrZWQgZXZlbnRzIGhhdmUgYmVlbiBkZWxpdmVyZWQuIFNlZQotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAotICAgIGlm
IChjb25uZWN0aW9uQ291bnQoKSkKLSAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRh
ZGF0YS52ZXJzaW9uKTsKLSAgICAvLyBGSVhNRTogQWRkIHRlc3QgZm9yIG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi4KLSAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uIHx8IGNvbm5lY3Rpb25Db3VudCgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ09wZW5DYWxs
cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nT3BlbkNhbGw+KCpjYWxsYmFja3Ms
ICpkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3Jl
SWRzOwotICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJh
Y2tzLCBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25D
aGFuZ2UpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihyZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3Ms
IGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKLQotICAgIEFTU0VSVCghbV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW4pOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNl
Q2FsbGJhY2tzKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNl
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCi17Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIGlmIChpc0RlbGV0ZURh
dGFiYXNlQmxvY2tlZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2RhdGFi
YXNlQ2FsbGJhY2tzU2V0KSB7Ci0gICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUg
ZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcg
c2V0LgotICAgICAgICAgICAgY2FsbGJhY2stPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZl
cnNpb24sIDApOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9j
a2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQotICAgICAgICAvLyBW
ZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUu
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEz
MAotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLnZlcnNpb24pOwotICAg
ICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJREJQZW5k
aW5nRGVsZXRlQ2FsbD4oY2FsbGJhY2tzLnJlbGVhc2UoKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGRlbGV0ZURhdGFiYXNlQXN5bmMoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci19Ci0K
LWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kOjppc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpCi17Ci0g
ICAgcmV0dXJuIGNvbm5lY3Rpb25Db3VudCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZDo6ZGVsZXRlRGF0YWJhc2VBc3luYyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzKQotewotICAgIEFTU0VSVCghaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSk7Ci0KLSAgICBS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBzZWxmKHRoaXMpOwotICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24t
PmRlbGV0ZURhdGFiYXNlKG1fbWV0YWRhdGEubmFtZSwgW3NlbGYsIGNhbGxiYWNrc10oYm9vbCBz
dWNjZXNzKSB7Ci0gICAgICAgIHNlbGYtPm1fZGVsZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRp
b24ucmVtb3ZlKGNhbGxiYWNrcyk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBJREJEYXRhYmFzZUJh
Y2tlbmQgd2FzIGNsb3NlZCB3aGlsZSB3YWl0aW5nIGZvciBkZWxldGVEYXRhYmFzZSB0byBjb21w
bGV0ZSwgbm8gcG9pbnQgaW4gcGVyZm9ybWluZyBhbnkgY2FsbGJhY2tzLgotICAgICAgICBpZiAo
IXNlbGYtPm1fc2VydmVyQ29ubmVjdGlvbi0+aXNDbG9zZWQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0
YS5pZCA9IEludmFsaWRJZDsKLSAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEudmVyc2lvbiA9
IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKLSAgICAgICAgICAgIHNlbGYtPm1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNsZWFyKCk7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIGRlbGV0aW5nIGRhdGFiYXNlLiIpKTsKLQotICAgICAgICBz
ZWxmLT5wcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MpCi17Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBw
cnBDYWxsYmFja3M7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuY29udGFpbnMo
Y2FsbGJhY2tzKSk7Ci0KLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShjYWxsYmFj
a3MpOwotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiAmJiBtX3BlbmRpbmdTZWNvbmRI
YWxmT3Blbi0+ZGF0YWJhc2VDYWxsYmFja3MoKSA9PSBjYWxsYmFja3MpIHsKLSAgICAgICAgbV9w
ZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlRoZSBjb25uZWN0
aW9uIHdhcyBjbG9zZWQuIikpOwotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51
bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpID4gMSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gcHJvY2Vzc1BlbmRpbmdDYWxscyBhbGxvd3MgdGhlIGluc3BlY3Rv
ciB0byBwcm9jZXNzIGEgcGVuZGluZyBvcGVuIGNhbGwKLSAgICAvLyBhbmQgY2FsbCBjbG9zZSwg
cmVlbnRlcmluZyBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlLiBUaGVuIHRoZQotICAgIC8vIGJh
Y2tlbmQgd291bGQgYmUgcmVtb3ZlZCBib3RoIGJ5IHRoZSBpbnNwZWN0b3IgY2xvc2luZyBpdHMg
Y29ubmVjdGlvbiwgYW5kCi0gICAgLy8gYnkgdGhlIGNvbm5lY3Rpb24gdGhhdCBmaXJzdCBjYWxs
ZWQgY2xvc2UuCi0gICAgLy8gVG8gYXZvaWQgdGhhdCBzaXR1YXRpb24sIGRvbid0IHByb2NlZWQg
aW4gY2FzZSBvZiByZWVudHJhbmN5LgotICAgIGlmIChtX2Nsb3NpbmdDb25uZWN0aW9uKQotICAg
ICAgICByZXR1cm47Ci0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNsb3NpbmdDb25uZWN0aW9u
KG1fY2xvc2luZ0Nvbm5lY3Rpb24sIHRydWUpOwotICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsK
LQotICAgIC8vIEZJWE1FOiBBZGQgYSB0ZXN0IGZvciB0aGUgbV9wZW5kaW5nT3BlbkNhbGxzIGNh
c2VzIGJlbG93LgotICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5D
YWxscy5zaXplKCkgJiYgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgewotICAgICAgICBU
cmFuc2FjdGlvbk1hcCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwotICAgICAgICBSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4i
KTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6IHRyYW5zYWN0aW9ucy52YWx1ZXMo
KSkKLSAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0KLSAgICAgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgbV9zZXJ2ZXJDb25uZWN0
aW9uLT5jbG9zZSgpOwotCi0gICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFs
c2UgaW4gdW5pdCB0ZXN0cy4KLSAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7Ci0gICAgICAgIGlm
IChtX2ZhY3RvcnkpCi0gICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFj
a2VuZChtX2lkZW50aWZpZXIpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzODE5OTI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZF9oCi0jZGVm
aW5lIElEQkRhdGFiYXNlQmFja2VuZF9oCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNr
cy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQlBlbmRpbmdEZWxldGVDYWxsLmgiCi0jaW5jbHVkZSAiSURC
UGVuZGluZ09wZW5DYWxsLmgiCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFz
aFNldC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTsKLWNsYXNzIElEQktleTsKLWNsYXNzIElEQktleVBhdGg7Ci1jbGFzcyBJREJTZXJ2ZXJD
b25uZWN0aW9uOwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOwotY2xhc3MgSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotc3RydWN0IElEQkRhdGFi
YXNlTWV0YWRhdGE7Ci1zdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YTsKLXN0cnVjdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gSW5kZXhLZXlz
OwotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kPiB7Ci1wdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJEYXRhYmFzZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwgSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UqLCBJREJTZXJ2ZXJDb25uZWN0aW9uJik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgfklEQkRhdGFiYXNlQmFja2VuZCgpOwotCi0gICAgSURCU2VydmVyQ29ubmVjdGlvbiYg
c2VydmVyQ29ubmVjdGlvbigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKTsgfQot
Ci0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKLSAgICBpbnQ2NF90IGlk
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQotICAgIHZvaWQgYWRkT2JqZWN0U3Rv
cmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3Rv
cmVJZCk7Ci0gICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQp
OwotICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKLSAgICB2b2lkIHJlbW92ZUluZGV4
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50
NjRfdCB2ZXJzaW9uKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZURhdGFiYXNlKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmQKLSAg
ICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IGF1dG9JbmNyZW1lbnQpOwotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZvaWQgY3JlYXRlVHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUpOwotICAgIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4pOwotCi0gICAgdm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKLSAg
ICB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdm9pZCBhYm9ydChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotCi0gICAg
dm9pZCBjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBh
dGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQpOwotCi0gICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsg
fQotICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwot
ICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKLSAg
ICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9u
QmFja2VuZCopOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0KLSAgICBlbnVtIFRhc2tUeXBlIHsKLSAgICAgICAgTm9y
bWFsVGFzayA9IDAsCi0gICAgICAgIFByZWVtcHRpdmVUYXNrCi0gICAgfTsKLQotICAgIGVudW0g
UHV0TW9kZSB7Ci0gICAgICAgIEFkZE9yVXBkYXRlLAotICAgICAgICBBZGRPbmx5LAotICAgICAg
ICBDdXJzb3JVcGRhdGUKLSAgICB9OwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgTWluaW11
bUluZGV4SWQgPSAzMDsKLQotICAgIHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBw
dXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+Jik7Ci0gICAgdm9pZCBzZXRJbmRleEtleXMoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdCwgMT4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8SW5kZXhLZXlzLCAxPiYpOwotICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8aW50NjRf
dCwgMT4mIGluZGV4SWRzKTsKLSAgICB2b2lkIG9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRh
c2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgY291bnQoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAg
dm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRh
OyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VmVyc2lvbih1aW50NjRfdCB2ZXJzaW9uKSB7IG1fbWV0
YWRhdGEudmVyc2lvbiA9IHZlcnNpb247IH0KLQotICAgIGJvb2wgaGFzUGVuZGluZ1NlY29uZEhh
bGZPcGVuKCkgeyByZXR1cm4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4uZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihzdGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ09w
ZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwpIHsgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gPSBXVEY6
Om1vdmUocGVuZGluZ09wZW5DYWxsKTsgfQotCi0gICAgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UmIGZhY3RvcnlCYWNrZW5kKCkgeyByZXR1cm4gKm1fZmFjdG9yeTsgfQotCi0gICAgY2xhc3Mg
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjsKLSAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVy
YXRpb247Ci0KLXByaXZhdGU6Ci0gICAgSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZSosIElEQlNlcnZlckNvbm5lY3Rpb24mKTsKLQotICAgIHZvaWQgb3BlbkNvbm5lY3Rp
b25JbnRlcm5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pOwot
Ci0gICAgdm9pZCBvcGVuSW50ZXJuYWxBc3luYygpOwotICAgIHZvaWQgZGlkT3BlbkludGVybmFs
QXN5bmMoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vzcyk7Ci0KLSAgICB2
b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7Ci0gICAgc2l6ZV90IGNvbm5lY3Rpb25Db3Vu
dCgpOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotICAgIHZvaWQgcHJvY2Vzc1Bl
bmRpbmdPcGVuQ2FsbHMoYm9vbCBzdWNjZXNzKTsKLQotICAgIGJvb2wgaXNEZWxldGVEYXRhYmFz
ZUJsb2NrZWQoKTsKLSAgICB2b2lkIGRlbGV0ZURhdGFiYXNlQXN5bmMoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKLQotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsKLQotICAg
IFN0cmluZyBtX2lkZW50aWZpZXI7Ci0KLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2U+IG1fZmFjdG9yeTsKLSAgICBSZWY8SURCU2VydmVyQ29ubmVjdGlvbj4gbV9zZXJ2ZXJD
b25uZWN0aW9uOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kPiBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247Ci0KLSAgICB0eXBlZGVm
IEhhc2hNYXA8aW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kKj4gVHJhbnNhY3Rpb25NYXA7
Ci0gICAgVHJhbnNhY3Rpb25NYXAgbV90cmFuc2FjdGlvbnM7Ci0KLSAgICBEZXF1ZTxzdGQ6OnVu
aXF1ZV9wdHI8SURCUGVuZGluZ09wZW5DYWxsPj4gbV9wZW5kaW5nT3BlbkNhbGxzOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVu
OwotCi0gICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdEZWxldGVDYWxsPj4gbV9w
ZW5kaW5nRGVsZXRlQ2FsbHM7Ci0gICAgSGFzaFNldDxSZWZQdHI8SURCQ2FsbGJhY2tzPj4gbV9k
ZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbjsKLQotICAgIHR5cGVkZWYgTGlzdEhhc2hT
ZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPj4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7Ci0g
ICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKLQotICAgIGJv
b2wgbV9jbG9zaW5nQ29ubmVjdGlvbjsKLSAgICBib29sIG1fZGlkT3BlbkludGVybmFsOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZTkxYzIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VDYWxsYmFja3NfaAotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSAi
SW5kZXhlZERCLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRh
YmFzZTsKLQotY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3MgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gewotcHVibGljOgotICAgIHZpcnR1YWwgfklEQkRhdGFiYXNl
Q2FsbGJhY2tzKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25Gb3JjZWRDbG9zZSgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVp
bnQ2NF90IG5ld1ZlcnNpb24pID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBvbkFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoSURCRGF0YWJhc2UqKSA9IDA7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VDYWxsYmFj
a3NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRiNDM4NTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgIklEQkRhdGFiYXNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPElEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbD4gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpjcmVhdGUoKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpKTsKLX0K
LQotSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKQot
ICAgIDogbV9kYXRhYmFzZShudWxscHRyKQotewotfQotCi1JREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGw6On5JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKQotewotfQotCi12b2lkIElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbDo6b25Gb3JjZWRDbG9zZSgpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2UpCi0g
ICAgICAgIG1fZGF0YWJhc2UtPmZvcmNlQ2xvc2UoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGw6Om9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRf
dCBuZXdWZXJzaW9uKQotewotICAgIGlmIChtX2RhdGFiYXNlKQotICAgICAgICBtX2RhdGFiYXNl
LT5vblZlcnNpb25DaGFuZ2Uob2xkVmVyc2lvbiwgbmV3VmVyc2lvbik7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsOjpjb25uZWN0KElEQkRhdGFiYXNlKiBkYXRhYmFzZSkKLXsK
LSAgICBBU1NFUlQoIW1fZGF0YWJhc2UpOwotICAgIEFTU0VSVChkYXRhYmFzZSk7Ci0gICAgbV9k
YXRhYmFzZSA9IGRhdGFiYXNlOwotfQotCi12b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6
b25BYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gZXJyb3IpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2UpCi0gICAgICAgIG1fZGF0YWJhc2UtPm9u
QWJvcnQodHJhbnNhY3Rpb25JZCwgZXJyb3IpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbDo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgaWYgKG1f
ZGF0YWJhc2UpCi0gICAgICAgIG1fZGF0YWJhc2UtPm9uQ29tcGxldGUodHJhbnNhY3Rpb25JZCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmM4MDJiLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsX2gK
LQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkRhdGFi
YXNlOwotCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwgZmluYWwgOiBwdWJsaWMgSURC
RGF0YWJhc2VDYWxsYmFja3MgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwoKSBvdmVycmlkZTsKLQotICAgIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzCi0gICAgdmly
dHVhbCB2b2lkIG9uRm9yY2VkQ2xvc2UoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25W
ZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgb25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQpIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCB2b2lkIGNvbm5lY3QoSURCRGF0YWJhc2UqKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAg
ICBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKTsKLQotICAgIC8vIFRoZSBpbml0aWFsIElEQk9w
ZW5EQlJlcXVlc3Qgb3IgZmluYWwgSURCRGF0YWJhc2UgbWFpbnRhaW5zIGEgUmVmUHRyIHRvIHRo
aXMKLSAgICBJREJEYXRhYmFzZSogbV9kYXRhYmFzZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRl
eCBkNTA3ZTZiLi43YTlmOTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5LmNwcApAQCAtMSwyOSArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKQEAgLTMxLDEzNSArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIK
LSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRl
ICJTY2hlbWVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVk
ZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKLSNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgot
I2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkZh
Y3Rvcnk6OklEQkZhY3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCi0g
ICAgOiBtX2JhY2tlbmQoZmFjdG9yeSkKLXsKLSAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRv
IHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KLSAgICByZWxheEFkb3B0aW9u
UmVxdWlyZW1lbnQoKTsKLX0KLQotSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQotewotfQotCi1z
dGF0aWMgYm9vbCBpc0NvbnRleHRWYWxpZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQotewotICAgIEFTU0VSVChpczxEb2N1bWVudD4oKmNvbnRleHQpIHx8IGNvbnRleHQtPmlzV29y
a2VyR2xvYmFsU2NvcGUoKSk7Ci0gICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpIHsKLSAg
ICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
LSAgICAgICAgcmV0dXJuIGRvY3VtZW50LmZyYW1lKCkgJiYgZG9jdW1lbnQucGFnZSgpICYmICgh
ZG9jdW1lbnQucGFnZSgpLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpIHx8IFNjaGVtZVJlZ2lzdHJ5
OjphbGxvd3NEYXRhYmFzZUFjY2Vzc0luUHJpdmF0ZUJyb3dzaW5nKGRvY3VtZW50LnNlY3VyaXR5
T3JpZ2luKCktPnByb3RvY29sKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMiKTsKLSAgICBpZiAoIWlz
Q29udGV4dFZhbGlkKGNvbnRleHQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWNvbnRl
eHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdp
bigpKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwotICAgIG1fYmFja2VuZC0+Z2V0
RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCAqKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpLCAqKGNv
bnRleHQtPnRvcE9yaWdpbigpKSwgY29udGV4dCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRmFjdG9yeTo6b3BlbiIpOwotICAgIHJl
dHVybiBvcGVuSW50ZXJuYWwoY29udGV4dCwgbmFtZSwgMCwgSW5kZXhlZERCOjpWZXJzaW9uTnVs
bG5lc3M6Ok51bGwsIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJG
YWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRmFjdG9yeTo6b3BlbiIpOwotICAgIGlmICghdmVy
c2lvbikgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIHJldHVybiBvcGVuSW50ZXJuYWwoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwgSW5kZXhl
ZERCOjpWZXJzaW9uTnVsbG5lc3M6Ok5vbk51bGwsIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJP
cGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uLCBJbmRl
eGVkREI6OlZlcnNpb25OdWxsbmVzcyB2ZXJzaW9uTnVsbG5lc3MsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIEFTU0VSVCh2ZXJzaW9uID49IDEgfHwgdmVyc2lvbk51bGxuZXNzID09IEluZGV4
ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOdWxsKTsKLSAgICBpZiAobmFtZS5pc051bGwoKSkgewot
ICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
ICghaXNDb250ZXh0VmFsaWQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICgh
Y29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9w
T3JpZ2luKCkpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2Fs
bGJhY2tzID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpjcmVhdGUoKTsKLSAgICBpbnQ2NF90
IHRyYW5zYWN0aW9uSWQgPSBJREJEYXRhYmFzZTo6bmV4dFRyYW5zYWN0aW9uSWQoKTsKLSAgICBS
ZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gcmVxdWVzdCA9IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbiwgdmVy
c2lvbk51bGxuZXNzKTsKLSAgICBtX2JhY2tlbmQtPm9wZW4obmFtZSwgdmVyc2lvbiwgdHJhbnNh
Y3Rpb25JZCwgcmVxdWVzdCwgZGF0YWJhc2VDYWxsYmFja3MsICooY29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKSksICooY29udGV4dC0+dG9wT3JpZ2luKCkpKTsKLSAgICByZXR1cm4gcmVxdWVzdDsK
LX0KLQotUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpkZWxldGVEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRmFjdG9yeTo6
ZGVsZXRlRGF0YWJhc2UiKTsKLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAgICAgICBlYyA9
IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghaXNDb250ZXh0
VmFsaWQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3JpZ2luKCkpKSB7
Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gcmVxdWVzdCA9IElEQk9wZW5EQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCAwLCAwLCAwLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVs
bCk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCAqY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKSwgKmNvbnRleHQtPnRvcE9yaWdpbigpLCByZXF1ZXN0LCBjb250ZXh0KTsKLSAg
ICByZXR1cm4gcmVxdWVzdDsKLX0KLQotc2hvcnQgSURCRmFjdG9yeTo6Y21wKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJz
dFZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2Vjb25kVmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorSURCRmFjdG9yeTo6SURCRmFjdG9yeSgpCiB7Ci0gICAgRE9NUmVxdWVz
dFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBmaXJzdCA9
IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgZmlyc3RWYWx1ZSk7Ci0gICAgUmVm
UHRyPElEQktleT4gc2Vjb25kID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBz
ZWNvbmRWYWx1ZSk7Ci0KLSAgICBBU1NFUlQoZmlyc3QpOwotICAgIEFTU0VSVChzZWNvbmQpOwot
Ci0gICAgaWYgKCFmaXJzdC0+aXNWYWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBh
cmUoc2Vjb25kLmdldCgpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaAppbmRleCA4NjdlMzFlLi40
NDZlMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5oCkBAIC0xLDMwICsxLDI4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBJREJGYWN0b3J5X2gKICNkZWZpbmUgSURC
RmFjdG9yeV9oCiAKQEAgLTQ2LDM4ICs0NCwyNyBAQCBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJREJGYWN0b3J5IDog
cHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewor
Y2xhc3MgSURCRmFjdG9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBjcmVhdGUoSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogV2hpbGUg
dGhlIGZlYXR1cmUgaXMgdW5kZXIgZGV2ZWxvcG1lbnQgd2UnbGwgaGFuZGxlIGEgbnVsbCBmYWN0
b3J5IGJhY2tlbmQgaGVyZSwKLSAgICAgICAgLy8gcmV0dXJuaW5nIG51bGwsIHNvIGphdmFzY3Jp
cHQgY2FuJ3QgdHJ5IHRvIHVzZSB0aGUgZmVhdHVyZS4KLSAgICAgICAgLy8gT25jZSB0aGUgZmVh
dHVyZSBpcyBmdWxseSBmdW5jdGlvbmFsIHdlIHNob3VsZCByZW1vdmUgdGhlIG51bGwgZmFjdG9y
eSBiYWNrZW5kLgotICAgICAgICByZXR1cm4gZmFjdG9yeSA/IGFkb3B0UmVmKG5ldyBJREJGYWN0
b3J5KGZhY3RvcnkpKSA6IG51bGxwdHI7Ci0gICAgfQotICAgIH5JREJGYWN0b3J5KCk7CisgICAg
dmlydHVhbCB+SURCRmFjdG9yeSgpIHsgfQogCiAgICAgLy8gRklYTUU6IGdldERhdGFiYXNlTmFt
ZXMgaXMgbm8gbG9uZ2VyIGEgd2ViLWZhY2luZyBBUEksIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBm
cm9tIElEQkZhY3RvcnkuCiAgICAgLy8gVGhlIFdlYiBJbnNwZWN0b3IgY3VycmVudGx5IHVzZXMg
dGhpcyB0byBlbnVtZXJhdGUgdGhlIGxpc3Qgb2YgZGF0YWJhc2VzLCBidXQgaXMgbW9yZSBjb21w
bGljYXRlZCBhcyBhIHJlc3VsdC4KICAgICAvLyBXZSBzaG91bGQgcHJvdmlkZSBhIHNpbXBsZXIg
QVBJIHRvIHRoZSBXZWIgSW5zcGVjdG9yIHRoZW4gcmVtb3ZlIGdldERhdGFiYXNlTmFtZXMuCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQk9wZW5EQlJl
cXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25n
IGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCT3BlbkRC
UmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgc2hvcnQgY21wKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgZmlyc3QsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAotcHJpdmF0ZToKLSAgICBJREJG
YWN0b3J5KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gZGVsZXRlRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKIAotICAgIFBhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gb3Blbklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2
NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBzaG9ydCBjbXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAotICAgIFJlZlB0cjxJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOworcHJvdGVjdGVkOgorICAgIElEQkZhY3Rvcnko
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCiAKLSNlbmRpZiAvLyBJ
REJGYWN0b3J5X2gKKyNlbmRpZiAvLyBMZWdhY3lGYWN0b3J5X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKaW5kZXggODUyNzMyMi4uYzg3Y2Ux
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5p
ZGwKQEAgLTI1LDggKzI1LDggQEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UsCi0gICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBFbmFibGVkQXRSdW50aW1l
PUluZGV4ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIElEQkZh
Y3RvcnkgewogICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBSYWlzZXNFeGNl
cHRpb25dIElEQk9wZW5EQlJlcXVlc3Qgb3BlbihET01TdHJpbmcgbmFtZSwgW0VuZm9yY2VSYW5n
ZV0gb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBsb25nIHZlcnNpb24pOwogICAgIFtDYWxsV2l0aD1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBSYWlzZXNFeGNlcHRpb25dIElEQk9wZW5EQlJlcXVlc3Qg
ZGVsZXRlRGF0YWJhc2UoRE9NU3RyaW5nIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOTkwMTkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
aAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
X2gKLSNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCi0KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJREJDdXJz
b3JCYWNrZW5kOwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7
Ci1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQg
YnkgSURCRmFjdG9yeSAoYXN5bmMpIGFuZCBJREJGYWN0b3J5U3luYyAoc3luYykuCi0vLyBUaGlz
IGlzIGltcGxlbWVudGVkIGJ5IElEQkZhY3RvcnlCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBv
dGhlcnMgKGluIG9yZGVyIHRvIHByb3h5Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVy
cykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5k
Ci0vLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1j
bGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5h
bWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9wZW5p
bmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4sIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5n
JiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0
IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFp
bkZyYW1lT3JpZ2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0
IFNlY3VyaXR5T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKSA9IDA7
Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlX2gKLQotI2VuZGlmIC8vIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAppbmRl
eCBlNmZkZjVjLi5hMmI0ZTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguY3BwCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKQEAgLTI4LDE4MSArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRl
ICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJJbmRleDo6SURCSW5kZXgoY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9y
ZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogbV9tZXRhZGF0YShtZXRhZGF0
YSkKLSAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgLCBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQotICAgICwgbV9kZWxldGVkKGZhbHNlKQotewotICAgIEFTU0VSVChtX29i
amVjdFN0b3JlKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgQVNTRVJUKG1fbWV0
YWRhdGEuaWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKLX0KLQotSURCSW5kZXg6
On5JREJJbmRleCgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9w
ZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkluZGV4OjpvcGVuQ3Vyc29y
Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJDdXJz
b3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMpOwotICAgIGlmIChlYykK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJbmRleGVkREI6OkN1
cnNvclR5cGU6OktleUFuZFZhbHVlLCBkaXJlY3Rpb24pOwotICAgIGJhY2tlbmREQigpLT5vcGVu
Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRh
dGEuaWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGZhbHNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5v
cm1hbFRhc2ssIHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkluZGV4OjpvcGVuQ3Vyc29yIik7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOwotICAgIGlmIChlYykKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2Uu
cmVsZWFzZSgpLCBkaXJlY3Rpb24sIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhT
dG9yYWdlQVBJLCAiSURCSW5kZXg6OmNvdW50Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZl
RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmNvdW50KG1fdHJhbnNh
Y3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdl
LCByZXF1ZXN0KTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgTE9HKFN0b3JhZ2VBUEksICJJREJJbmRleDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7Ci0g
ICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY291bnQoY29udGV4dCwg
a2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
SW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3Ry
aW5nLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkluZGV4
OjpvcGVuS2V5Q3Vyc29yIik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBJREJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMp
OwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWls
cyhJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHksIGRpcmVjdGlvbik7Ci0gICAgYmFja2Vu
ZERCKCktPm9wZW5DdXJzb3IobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQo
KSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgdHJ1ZSwgSURCRGF0YWJhc2VC
YWNrZW5kOjpOb3JtYWxUYXNrLCByZXF1ZXN0KTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOwotICAgIFJlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBvcGVuS2V5Q3Vyc29y
KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZGlyZWN0aW9uLCBlYyk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkluZGV4OjpnZXQiKTsKLSAgICBSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5
LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2V0KGNv
bnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCSW5kZXg6OmdldCIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
IHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFrZXlSYW5nZSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2Jq
ZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBmYWxzZSwgcmVxdWVzdCk7
Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5k
ZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3Rv
cmFnZUFQSSwgIklEQkluZGV4OjpnZXRLZXkiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7Ci0gICAgaWYgKGVj
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBnZXRLZXkoY29udGV4dCwga2V5UmFu
Z2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6
OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJJREJJbmRleDo6Z2V0S2V5Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWtleVJhbmdlKSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
OwotICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9y
ZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIHRydWUsIHJlcXVlc3QpOwotICAgIHJl
dHVybiByZXF1ZXN0OwotfQotCi1JREJEYXRhYmFzZUJhY2tlbmQqIElEQkluZGV4OjpiYWNrZW5k
REIoKSBjb25zdAorSURCSW5kZXg6OklEQkluZGV4KCkKIHsKLSAgICByZXR1cm4gbV90cmFuc2Fj
dGlvbi0+YmFja2VuZERCKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4IDFhOWU0NzYuLjg0NTcx
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaApAQCAt
MSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIElEQkluZGV4X2gKQEAgLTQz
LDU1ICs0Myw0MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQk9iamVjdFN0b3Jl
OwogCi1jbGFzcyBJREJJbmRleCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZD
b3VudGVkPElEQkluZGV4PiB7CitjbGFzcyBJREJJbmRleCA6IHB1YmxpYyBSZWZDb3VudGVkPElE
QkluZGV4PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJJbmRleD4gY3JlYXRlKGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUs
IElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElEQkluZGV4KG1ldGFkYXRhLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsK
LSAgICB9Ci0gICAgfklEQkluZGV4KCk7CisgICAgdmlydHVhbCB+SURCSW5kZXgoKSB7IH0KIAog
ICAgIC8vIEltcGxlbWVudCB0aGUgSURMCi0gICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBvYmplY3RTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KLSAgICBQYXNz
UmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0IHsgcmV0dXJuIElEQkFueTo6Y3JlYXRl
KG1fbWV0YWRhdGEua2V5UGF0aCk7IH0KLSAgICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBib29sIHVuaXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEudW5pcXVlOyB9Ci0gICAgYm9vbCBtdWx0aUVudHJ5KCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9Ci0gICAgaW50NjRfdCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KLQotICAgIC8vIEZJWE1FOiBUcnkgdG8g
bW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgotICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0
aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQo
KSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwg
SURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVj
dGlvbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIGNvdW50KGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVj
KTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRl
eHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQotICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6
ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5L
ZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlD
dXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9Ci0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIG1hcmtEZWxldGVkKCkgeyBtX2RlbGV0ZWQg
PSB0cnVlOyB9Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmQqIGJhY2tlbmREQigpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIElEQkluZGV4KGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBJREJPYmpl
Y3RTdG9yZSosIElEQlRyYW5zYWN0aW9uKik7Ci0KLSAgICBJREJJbmRleE1ldGFkYXRhIG1fbWV0
YWRhdGE7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBtX29iamVjdFN0b3JlOwotICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKLSAgICBib29sIG1fZGVsZXRlZDsK
KyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgdW5pcXVlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBpZCgpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBj
b25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMp
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJikg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBJREJJbmRleCgpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXguaWRsCmluZGV4IGM3NWJlNzAuLjk1YTEwNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwKQEAgLTI1LDggKzI1LDggQEAKIAogWwog
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgSW1wbGVtZW50YXRpb25MYWNr
c1ZUYWJsZSwKICAgICBFbmFibGVkQXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRhYmxl
VmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIElEQkluZGV4IHsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0b3Jl
IG9iamVjdFN0b3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGE2ZDI4MTQuLjRhMDY0MTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEs
MjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgs
NTQ1ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCQmlu
ZGluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktl
eURhdGEuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAg
OiBtX21ldGFkYXRhKG1ldGFkYXRhKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
LSAgICAsIG1fZGVsZXRlZChmYWxzZSkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0g
ICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJl
IGFkb3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKLSAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgp
OwotICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpCi0g
ICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpbmRleC5uYW1lKTsKLSAgICBpbmRleE5hbWVzLT5z
b3J0KCk7Ci0gICAgcmV0dXJuIGluZGV4TmFtZXMucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmdldCIpOwotICAg
IGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52
YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWtleVJh
bmdlKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUo
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0
aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmdldChtX3RyYW5z
YWN0aW9uLT5pZCgpLCBpZCgpLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIGtleVJhbmdl
LCBmYWxzZSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1Q
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElE
QktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVj
KTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjphZGQiKTsKLSAgICByZXR1cm4gcHV0KElE
QkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2
YWx1ZSwga2V5LCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmpl
Y3RTdG9yZTo6YWRkIik7Ci0gICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9u
bHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIHN0YXRpY19jYXN0PElEQktl
eSo+KG51bGxwdHIpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiB2YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6cHV0Iik7Ci0g
ICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNy
ZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBrZXksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICByZXR1cm4gcHV0KElEQkRh
dGFiYXNlQmFja2VuZDo6QWRkT3JVcGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwg
dmFsdWUsIHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1
dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhl
Y1N0YXRlKHN0YXRlKTsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQp
OwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RT
dGF0ZSwga2V5VmFsdWUpOwotICAgIHJldHVybiBwdXQocHV0TW9kZSwgc291cmNlLCBzdGF0ZSwg
dmFsdWUsIGtleS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIGlm
IChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxp
ZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUu
anNWYWx1ZSgpLCBudWxscHRyLCBudWxscHRyKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChzZXJpYWxpemVkVmFsdWUt
Pmhhc0Jsb2JVUkxzKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxp
c3Qgc3VwcG9ydAotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCA9IG1fbWV0YWRhdGEua2V5UGF0aDsKLSAgICBjb25zdCBib29sIHVzZXNJ
bkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxsKCk7Ci0gICAgY29uc3QgYm9vbCBoYXNLZXlHZW5l
cmF0b3IgPSBhdXRvSW5jcmVtZW50KCk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoc3RhdGUpOwotICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7Ci0KLSAgICBpZiAocHV0TW9k
ZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiB1c2VzSW5MaW5lS2V5cyAm
JiBrZXkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKCF1c2VzSW5MaW5lS2V5cyAm
JiAhaGFzS2V5R2VuZXJhdG9yICYmICFrZXkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAg
aWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkg
PSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHJlcXVlc3RTdGF0ZS5leGVj
KCksIHZhbHVlLCBrZXlQYXRoKTsKLSAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhL
ZXktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
RGF0YUVycm9yOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCFoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBh
dGhLZXkpIHsKLSAgICAgICAgICAgIGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVl
KCZyZXF1ZXN0U3RhdGUsIHZhbHVlLCBrZXlQYXRoKSkgewotICAgICAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoa2V5UGF0aEtl
eSkKLSAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7Ci0gICAgfQotICAgIGlmIChrZXkgJiYg
IWtleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRh
dGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgVmVjdG9yPGlu
dDY0X3Q+IGluZGV4SWRzOwotICAgIFZlY3RvcjxJbmRleEtleXM+IGluZGV4S2V5czsKLSAgICBm
b3IgKGF1dG8mIGluZGV4IDogbV9tZXRhZGF0YS5pbmRleGVzKSB7Ci0gICAgICAgIFZlY3RvcjxJ
REJLZXlEYXRhPiBrZXlEYXRhczsKLSAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShy
ZXF1ZXN0U3RhdGUuZXhlYygpLCBpbmRleC52YWx1ZSwgdmFsdWUsIGtleURhdGFzKTsKLSAgICAg
ICAgaW5kZXhJZHMuYXBwZW5kKGluZGV4LmtleSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IE11Y2gg
b2YgdGhlIEluZGV4ZWQgREIgY29kZSBuZWVkcyB0byB1c2UgSURCS2V5RGF0YSBkaXJlY3RseSB0
byBhdm9pZCB3YXN0ZWZ1bCBjb252ZXJzaW9ucyBsaWtlIHRoaXMuCi0gICAgICAgIFZlY3RvcjxS
ZWZQdHI8SURCS2V5Pj4ga2V5czsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDoga2V5RGF0
YXMpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVh
dGVJREJLZXkoKTsKLSAgICAgICAgICAgIGlmIChrZXkpCi0gICAgICAgICAgICAgICAga2V5cy5h
cHBlbmQoa2V5LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5kZXhLZXlzLmFwcGVu
ZChrZXlzKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ5dGVzID0gc2VyaWFsaXplZFZhbHVlLT50b1dpcmVCeXRl
cygpOwotICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIGFjY291bnQgZm9yIGRpc2FncmVlbWVudHMg
YWJvdXQgd2hldGhlciBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2hvdWxkIGRlYWwgaW4gVmVjdG9y
PHVpbnQ4X3Q+IG9yIFZlY3RvcjxjaGFyPi4KLSAgICAvLyBTZWUgaHR0cHM6Ly9saXN0cy53ZWJr
aXQub3JnL3BpcGVybWFpbC93ZWJraXQtZGV2LzIwMTMtRmVicnVhcnkvMDIzNjgyLmh0bWwKLSAg
ICBWZWN0b3I8Y2hhcj4qIHZhbHVlQnl0ZXNTaWduZWQgPSByZWludGVycHJldF9jYXN0PFZlY3Rv
cjxjaGFyPio+KCZ2YWx1ZUJ5dGVzKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1
ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoKnZhbHVlQnl0ZXNTaWduZWQpOwotICAg
IGJhY2tlbmREQigpLT5wdXQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZmZXIs
IGtleS5yZWxlYXNlKCksIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZT4o
cHV0TW9kZSksIHJlcXVlc3QsIGluZGV4SWRzLCBpbmRleEtleXMpOwotICAgIHJldHVybiByZXF1
ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZSIpOwotICAgIGlmIChtX2RlbGV0
ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rp
b25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHJh
bnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFr
ZXlSYW5nZSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+ZGVsZXRlUmFuZ2UobV90cmFu
c2FjdGlvbi0+aWQoKSwgaWQoKSwga2V5UmFuZ2UsIHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1
ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQs
IGtleSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRl
bGV0ZUZ1bmN0aW9uKGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwotfQotCi1QYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQk9iamVjdFN0b3JlOjpjbGVhciIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVy
cm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlz
UmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25s
eUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmNsZWFyT2JqZWN0
U3RvcmUobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJl
cXVlc3QucmVsZWFzZSgpOwotfQotCi1uYW1lc3BhY2UgewotLy8gVGhpcyBjbGFzcyBjcmVhdGVz
IHRoZSBpbmRleCBrZXlzIGZvciBhIGdpdmVuIGluZGV4IGJ5IGV4dHJhY3RpbmcKLS8vIHRoZW0g
ZnJvbSB0aGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBmb3IgYWxsIHRoZSBleGlzdGluZyB2YWx1
ZXMgaW4KLS8vIHRoZSBvYmplY3RTdG9yZS4gSXQgb25seSBuZWVkcyB0byBiZSBrZXB0IGFsaXZl
IGJ5IHZpcnR1ZSBvZiBiZWluZwotLy8gYSBsaXN0ZW5lciBvbiBhbiBJREJSZXF1ZXN0IG9iamVj
dCwgaW4gdGhlIHNhbWUgd2F5IHRoYXQgSmF2YVNjcmlwdAotLy8gY3Vyc29yIHN1Y2Nlc3MgaGFu
ZGxlcnMgYXJlIGtlcHQgYWxpdmUuCi1jbGFzcyBJbmRleFBvcHVsYXRvciA6IHB1YmxpYyBFdmVu
dExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluZGV4UG9wdWxhdG9yPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQsIGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
bmRleE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5kZXhQ
b3B1bGF0b3IoYmFja2VuZCwgdHJhbnNhY3Rpb25JZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRh
ZGF0YSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50
TGlzdGVuZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMgPT0gJm90aGVyOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBJbmRleFBvcHVsYXRvcihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZD4gYmFja2VuZCwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAg
IDogRXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgLCBtX2RhdGFi
YXNlQmFja2VuZChiYWNrZW5kKQotICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlv
bklkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAs
IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVu
dCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5z
dWNjZXNzRXZlbnQpOwotICAgICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPnRhcmdl
dCgpOwotICAgICAgICBJREJSZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8SURCUmVxdWVz
dCo+KHRhcmdldCk7Ci0KLSAgICAgICAgUmVmUHRyPElEQkFueT4gY3Vyc29yQW55ID0gcmVxdWVz
dC0+cmVzdWx0KEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBSZWZQdHI8SURCQ3Vyc29y
V2l0aFZhbHVlPiBjdXJzb3I7Ci0gICAgICAgIGlmIChjdXJzb3JBbnktPnR5cGUoKSA9PSBJREJB
bnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCi0gICAgICAgICAgICBjdXJzb3IgPSBjdXJzb3JB
bnktPmlkYkN1cnNvcldpdGhWYWx1ZSgpOwotCi0gICAgICAgIFZlY3RvcjxpbnQ2NF90LCAxPiBp
bmRleElkczsKLSAgICAgICAgaW5kZXhJZHMuYXBwZW5kKG1faW5kZXhNZXRhZGF0YS5pZCk7Ci0g
ICAgICAgIGlmIChjdXJzb3IpIHsKLSAgICAgICAgICAgIGN1cnNvci0+Y29udGludWVGdW5jdGlv
bihzdGF0aWNfY2FzdDxJREJLZXkqPihudWxscHRyKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0K
LSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBjdXJzb3ItPmlkYlByaW1h
cnlLZXkoKTsKLSAgICAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gY3Vy
c29yLT52YWx1ZSgpOwotCi0gICAgICAgICAgICBWZWN0b3I8SURCS2V5RGF0YT4gaW5kZXhLZXlE
YXRhczsKLSAgICAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUocmVxdWVzdC0+cmVx
dWVzdFN0YXRlKCktPmV4ZWMoKSwgbV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwgaW5kZXhLZXlEYXRh
cyk7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gaW5kZXhLZXlzOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiBpbmRleEtleURhdGEgOiBpbmRleEtleURhdGFzKSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gaW5kZXhLZXlEYXRhLm1heWJlQ3JlYXRl
SURCS2V5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGtleSkKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXhLZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNMaXN0Owot
ICAgICAgICAgICAgaW5kZXhLZXlzTGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKLQotICAgICAgICAg
ICAgbV9kYXRhYmFzZUJhY2tlbmQtPnNldEluZGV4S2V5cyhtX3RyYW5zYWN0aW9uSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgcHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5c0xpc3QpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5kZXhpbmcs
IHRlbGwgdGhlIGJhY2tlbmQgdG8gZ28KLSAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJvY2Vzc2lu
ZyB0YXNrcyBvZiB0eXBlIE5vcm1hbFRhc2suCi0gICAgICAgICAgICBtX2RhdGFiYXNlQmFja2Vu
ZC0+c2V0SW5kZXhlc1JlYWR5KG1fdHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBpbmRl
eElkcyk7Ci0gICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZCA9IG51bGxwdHI7Ci0gICAgICAg
IH0KLQotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2VC
YWNrZW5kOwotICAgIGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOwotICAgIGNvbnN0IGlu
dDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRl
eE1ldGFkYXRhOwotfTsKLX0KLQotUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6
OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0
aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKLSAg
ICBvcHRpb25zLmdldCgidW5pcXVlIiwgdW5pcXVlKTsKLQotICAgIGJvb2wgbXVsdGlFbnRyeSA9
IGZhbHNlOwotICAgIG9wdGlvbnMuZ2V0KCJtdWx0aUVudHJ5IiwgbXVsdGlFbnRyeSk7Ci0KLSAg
ICByZXR1cm4gY3JlYXRlSW5kZXgoY29udGV4dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0
aUVudHJ5LCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpj
cmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2Jq
ZWN0U3RvcmU6OmNyZWF0ZUluZGV4Iik7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNp
b25DaGFuZ2UoKSB8fCBtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgaWYgKCFrZXlQYXRoLmlzVmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpTeW50YXhFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKGNvbnRhaW5zSW5kZXgobmFtZSkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6
QXJyYXlUeXBlICYmIG11bHRpRW50cnkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBpbnQ2NF90IGluZGV4SWQgPSBtX21ldGFkYXRhLm1heEluZGV4SWQgKyAxOwotICAgIGJhY2tl
bmREQigpLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRleElkLCBu
YW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpOwotCi0gICAgKyttX21ldGFkYXRhLm1h
eEluZGV4SWQ7Ci0KLSAgICBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRl
eCA9IElEQkluZGV4OjpjcmVhdGUobWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
OwotICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKLSAgICBtX21ldGFkYXRhLmluZGV4
ZXMuc2V0KGluZGV4SWQsIG1ldGFkYXRhKTsKLQotICAgIEFTU0VSVCghZWMpOwotICAgIGlmIChl
YykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRl
eHQpOwotICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5k
ZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmluZGV4Iik7
Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICht
X3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKLSAg
ICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsK
LQotICAgIGludDY0X3QgaW5kZXhJZCA9IGZpbmRJbmRleElkKG5hbWUpOwotICAgIGlmIChpbmRl
eElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhKiBpbmRleE1ldGFkYXRhKG51bGxwdHIpOwot
ICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpIHsKLSAg
ICAgICAgaWYgKGluZGV4Lm5hbWUgPT0gbmFtZSkgewotICAgICAgICAgICAgaW5kZXhNZXRhZGF0
YSA9ICZpbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFT
U0VSVChpbmRleE1ldGFkYXRhKTsKLSAgICBBU1NFUlQoaW5kZXhNZXRhZGF0YS0+aWQgIT0gSURC
SW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKLQotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXgg
PSBJREJJbmRleDo6Y3JlYXRlKCppbmRleE1ldGFkYXRhLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKLSAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4
LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCIpOwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+
aXNWZXJzaW9uQ2hhbmdlKCkgfHwgbV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaW50NjRfdCBpbmRleElkID0gZmluZEluZGV4SWQobmFtZSk7Ci0gICAg
aWYgKGluZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBiYWNrZW5kREIoKS0+ZGVsZXRlSW5kZXgobV90cmFuc2FjdGlvbi0+aWQo
KSwgaWQoKSwgaW5kZXhJZCk7Ci0KLSAgICBtX21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKGluZGV4
SWQpOwotICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1l
KTsKLSAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkgewotICAgICAgICBpdC0+dmFsdWUt
Pm1hcmtEZWxldGVkKCk7Ci0gICAgICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwotICAgIH0K
LX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51
bGxwdHIpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBv
cGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwg
ZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwg
Y29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVy
biBvcGVuQ3Vyc29yKGNvbnRleHQsIHJhbmdlLCBkaXJlY3Rpb24sIElEQkRhdGFiYXNlQmFja2Vu
ZDo6Tm9ybWFsVGFzaywgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywg
SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwot
ICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpz
dHJpbmdUb0RpcmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjKTsKLSAgICBpZiAoZWMpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNvckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JU
eXBlOjpLZXlBbmRWYWx1ZSwgZGlyZWN0aW9uKTsKLQotICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vy
c29yKG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZCwgcmFuZ2UsIGRpcmVjdGlvbiwgZmFsc2UsIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2Vu
ZDo6VGFza1R5cGU+KHRhc2tUeXBlKSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVs
ZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6
Om9ubHkoY29udGV4dCwga2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGRpcmVj
dGlvbiwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpj
b3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJPYmplY3RTdG9yZTo6Y291bnQiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+
aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7
Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHko
Y29udGV4dCwga2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLXZvaWQg
SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uRmluaXNoZWQoKQotewotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpOwotCi0gICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xl
cy4KLSAgICBtX2luZGV4TWFwLmNsZWFyKCk7Ci19Ci0KLWludDY0X3QgSURCT2JqZWN0U3RvcmU6
OmZpbmRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8m
IGluZGV4IDogbV9tZXRhZGF0YS5pbmRleGVzKSB7Ci0gICAgICAgIGlmIChpbmRleC52YWx1ZS5u
YW1lID09IG5hbWUpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleC5rZXkgIT0gSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkKTsKLSAgICAgICAgICAgIHJldHVybiBpbmRleC5rZXk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKLX0K
LQotSURCRGF0YWJhc2VCYWNrZW5kKiBJREJPYmplY3RTdG9yZTo6YmFja2VuZERCKCkgY29uc3QK
K0lEQk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9yZSgpCiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmREQigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA1
NzY2YmUwLi5hMDA5YjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTEsNDEgKzEsMzQgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAog
I2lmbmRlZiBJREJPYmplY3RTdG9yZV9oCiAjZGVmaW5lIElEQk9iamVjdFN0b3JlX2gKIAogI2lu
Y2x1ZGUgIkRpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJ
REJEYXRhYmFzZU1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3Qu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsODUgKzM2LDY1IEBA
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorbmFtZXNwYWNlIERlcHJlY2F0ZWQg
eworY2xhc3MgU2NyaXB0VmFsdWU7Cit9CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhlY1N0
YXRlOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiBj
bGFzcyBJREJBbnk7Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlIDogcHVibGljIFNjcmlwdFdyYXBw
YWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmU+IHsKK2NsYXNzIElEQkluZGV4
OworY2xhc3MgSURCS2V5UGF0aDsKK2NsYXNzIElEQktleVJhbmdlOworY2xhc3MgSURCUmVxdWVz
dDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
KworY2xhc3MgSURCT2JqZWN0U3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJPYmplY3RTdG9y
ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCT2JqZWN0U3Rv
cmUobWV0YWRhdGEsIHRyYW5zYWN0aW9uKSk7Ci0gICAgfQotICAgIH5JREJPYmplY3RTdG9yZSgp
IHsgfQorICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3JlKCkgeyB9CiAKICAgICAvLyBJbXBsZW1l
bnQgdGhlIElEQk9iamVjdFN0b3JlIElETAotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVy
biBtX21ldGFkYXRhLmlkOyB9Ci0gICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX21ldGFkYXRhLm5hbWU7IH0KLSAgICBQYXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgp
IGNvbnN0IHsgcmV0dXJuIElEQkFueTo6Y3JlYXRlKG1fbWV0YWRhdGEua2V5UGF0aCk7IH0KLSAg
ICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtl
eVBhdGg7IH0KLSAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25z
dDsKLSAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhbnNhY3Rpb247IH0KLSAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX21ldGFkYXRhLmF1dG9JbmNyZW1lbnQ7IH0KLQotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVj
U3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlw
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBhZGQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0
ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRlSW5kZXgoY29udGV4dCwgbmFtZSwgSURCS2V5
UGF0aChrZXlQYXRoKSwgb3B0aW9ucywgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJJbmRleD4g
Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYg
b3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUluZGV4KGNvbnRleHQs
IG5hbWUsIElEQktleVBhdGgoa2V5UGF0aCksIG9wdGlvbnMsIGVjKTsgfQotICAgIFBhc3NSZWZQ
dHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNz
UmVmUHRyPElEQkluZGV4PiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOwotCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4
dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYXJr
RGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5p
c2hlZCgpOwotCi0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YWRhdGE7IH0KLSAgICB2b2lkIHNldE1ldGFkYXRhKGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhKSB7IG1fbWV0YWRhdGEgPSBtZXRhZGF0YTsgfQotCi0g
ICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4+IEluZGV4S2V5czsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBJbmRleEtleXM+IEluZGV4S2V5TWFwOwotCi0gICAgSURCRGF0YWJh
c2VCYWNrZW5kKiBiYWNrZW5kREIoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBJREJPYmplY3RT
dG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgSURCVHJhbnNhY3Rpb24qKTsKLQot
ICAgIGludDY0X3QgZmluZEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBi
b29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZpbmRJbmRleElkKG5hbWUpICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZDsKLSAgICB9Ci0KLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIGJvb2wgbV9kZWxldGVk
OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4Pj4gSURCSW5k
ZXhNYXA7Ci0gICAgSURCSW5kZXhNYXAgbV9pbmRleE1hcDsKKyAgICB2aXJ0dWFsIGludDY0X3Qg
aWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCA9IDA7CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBF
eGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNs
ZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlx
dWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJJbmRleD4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29k
ZSYgZWMpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25D
b2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKKworcHJvdGVjdGVkOgorICAgIElEQk9iamVjdFN0b3JlKCk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKaW5kZXggZmRmY2E4YS4uYWYwMjBk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmlkbApAQCAtMjUsOCArMjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRSwKLSAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlLAogICAgIEVuYWJsZWRB
dFJ1bnRpbWU9SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZh
Y2UgSURCT2JqZWN0U3RvcmUgewogICAgIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICBbSW1wbGVtZW50ZWRBcz1r
ZXlQYXRoQW55XSByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IGtleVBhdGg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCmlu
ZGV4IDcxNTc5YjAuLmFkZjhhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC0xLDI2ICsxLDI2IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTI4LDEyOCArMjgsMTMgQEAKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIKLSNpbmNsdWRlICJJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0jaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8SURCT3BlbkRCUmVxdWVzdD4gSURC
T3BlbkRCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyB2ZXJz
aW9uTnVsbG5lc3MpCi17Ci0gICAgUmVmPElEQk9wZW5EQlJlcXVlc3Q+IHJlcXVlc3QoYWRvcHRS
ZWYoKm5ldyBJREJPcGVuREJSZXF1ZXN0KGNvbnRleHQsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb25J
ZCwgdmVyc2lvbiwgdmVyc2lvbk51bGxuZXNzKSkpOwotICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5l
ZWRlZCgpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1JREJPcGVuREJSZXF1ZXN0OjpJREJP
cGVuREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1
aW50NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyB2ZXJzaW9uTnVsbG5l
c3MpCi0gICAgOiBJREJSZXF1ZXN0KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCBJREJE
YXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIDApCi0gICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tz
KGNhbGxiYWNrcykKLSAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgICwg
bV92ZXJzaW9uKHZlcnNpb24pCi0gICAgLCBtX3ZlcnNpb25OdWxsbmVzcyh2ZXJzaW9uTnVsbG5l
c3MpCi17Ci0gICAgQVNTRVJUKCFtX3Jlc3VsdCk7Ci19Ci0KLUlEQk9wZW5EQlJlcXVlc3Q6On5J
REJPcGVuREJSZXF1ZXN0KCkKLXsKLX0KLQotRXZlbnRUYXJnZXRJbnRlcmZhY2UgSURCT3BlbkRC
UmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAotewotICAgIHJldHVybiBJREJP
cGVuREJSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwotfQotCi12b2lkIElEQk9wZW5E
QlJlcXVlc3Q6Om9uQmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCT3BlbkRCUmVxdWVzdDo6b25CbG9ja2VkKCkiKTsKLSAgICBpZiAoIXNob3Vs
ZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZW5xdWV1ZUV2ZW50
KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG1fdmVyc2lvbiwgZXZl
bnROYW1lcygpLmJsb2NrZWRFdmVudCkpOwotfQotCi12b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9u
VXBncmFkZU5lZWRlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZD4gcHJwRGF0YWJhc2VCYWNrZW5kLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBt
ZXRhZGF0YSkKK0lEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJlcXVlc3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKKyAgICA6IElEQlJlcXVlc3QoY29udGV4dCkKIHsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZCgpIik7Ci0g
ICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewot
ICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYiA9IHBycERhdGFiYXNlQmFja2Vu
ZDsKLSAgICAgICAgZGItPmFib3J0KG1fdHJhbnNhY3Rpb25JZCk7Ci0gICAgICAgIGRiLT5jbG9z
ZShtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
IXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9k
YXRhYmFzZUNhbGxiYWNrcyk7Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRh
YmFzZUJhY2tlbmQgPSBwcnBEYXRhYmFzZUJhY2tlbmQ7Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJh
c2U+IGlkYkRhdGFiYXNlID0gSURCRGF0YWJhc2U6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksIGRhdGFiYXNlQmFja2VuZCwgbV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgaWRiRGF0
YWJhc2UtPnNldE1ldGFkYXRhKG1ldGFkYXRhKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzLT5j
b25uZWN0KGlkYkRhdGFiYXNlLmdldCgpKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzID0gbnVs
bHB0cjsKLQotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgb2xkTWV0YWRhdGEobWV0YWRhdGEpOwot
ICAgIG9sZE1ldGFkYXRhLnZlcnNpb24gPSBvbGRWZXJzaW9uOwotCi0gICAgbV90cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3Ry
YW5zYWN0aW9uSWQsIGlkYkRhdGFiYXNlLmdldCgpLCB0aGlzLCBvbGRNZXRhZGF0YSk7Ci0gICAg
bV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkpOwotCi0gICAg
aWYgKG1fdmVyc2lvbk51bGxuZXNzID09IEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOdWxs
KQotICAgICAgICBtX3ZlcnNpb24gPSAxOwotICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hh
bmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS51cGdy
YWRlbmVlZGVkRXZlbnQpKTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHBycEJhY2tlbmQsIGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT3BlbkRC
UmVxdWVzdDo6b25TdWNjZXNzKCkiKTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5k
ID0gcHJwQmFja2VuZDsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNlOwotICAg
IGlmIChtX3Jlc3VsdCkgewotICAgICAgICBpZGJEYXRhYmFzZSA9IG1fcmVzdWx0LT5pZGJEYXRh
YmFzZSgpOwotICAgICAgICBBU1NFUlQoaWRiRGF0YWJhc2UpOwotICAgICAgICBBU1NFUlQoIW1f
ZGF0YWJhc2VDYWxsYmFja3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFi
YXNlQ2FsbGJhY2tzKTsKLSAgICAgICAgaWRiRGF0YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZC5yZWxlYXNlKCksIG1fZGF0YWJhc2VD
YWxsYmFja3MpOwotICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzLT5jb25uZWN0KGlkYkRhdGFi
YXNlLmdldCgpKTsKLSAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9IG51bGxwdHI7Ci0gICAg
ICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0YWJhc2UuZ2V0KCkpOwotICAgIH0K
LSAgICBpZGJEYXRhYmFzZS0+c2V0TWV0YWRhdGEobWV0YWRhdGEpOwotICAgIGVucXVldWVFdmVu
dChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSkp
OwotfQotCi1ib29sIElEQk9wZW5EQlJlcXVlc3Q6OnNob3VsZEVucXVldWVFdmVudCgpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVO
RElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7Ci0gICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJP
cGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewot
ICAgIC8vIElmIHRoZSBjb25uZWN0aW9uIGNsb3NlZCBiZXR3ZWVuIG9uVXBncmFkZU5lZWRlZCBh
bmQgdGhlIGRlbGl2ZXJ5IG9mIHRoZSAic3VjY2VzcyIgZXZlbnQsCi0gICAgLy8gYW4gImVycm9y
IiBldmVudCBzaG91bGQgYmUgZmlyZWQgaW5zdGVhZC4KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50ICYmIG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55
OjpJREJEYXRhYmFzZVR5cGUgJiYgbV9yZXN1bHQtPmlkYkRhdGFiYXNlKCktPmlzQ2xvc2VQZW5k
aW5nKCkpIHsKLSAgICAgICAgbV9yZXN1bHQgPSBudWxscHRyOwotICAgICAgICBvbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwg
IlRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQuIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT3BlbkRCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT3BlbkRCUmVxdWVzdC5oCmluZGV4IDkxZDRiMDEuLmExMDE1NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmgKQEAgLTEs
MjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJPcGVuREJSZXF1ZXN0X2gK
QEAgLTMzLDMzICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQkRh
dGFiYXNlQ2FsbGJhY2tzOwotCiBjbGFzcyBJREJPcGVuREJSZXF1ZXN0IDogcHVibGljIElEQlJl
cXVlc3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlbkRCUmVxdWVzdD4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlZl
cnNpb25OdWxsbmVzcyk7Ci0gICAgdmlydHVhbCB+SURCT3BlbkRCUmVxdWVzdCgpOwotCi0gICAg
dXNpbmcgSURCUmVxdWVzdDo6b25TdWNjZXNzOwotCi0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tl
ZCh1aW50NjRfdCBleGlzdGluZ1ZlcnNpb24pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBv
blVwZ3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBvdmVycmlkZTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0g
ICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIH5JREJPcGVuREJSZXF1ZXN0KCkgeyB9CiAK
IHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgSURCT3BlbkRCUmVxdWVzdChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3Mp
OwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tz
OwotICAgIGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOwotICAgIHVpbnQ2NF90IG1fdmVy
c2lvbjsKLSAgICBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyBtX3ZlcnNpb25OdWxsbmVzczsK
KyAgICBJREJPcGVuREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKaW5kZXggNTlhNjYwMS4uNTQ2OTc4OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVx
dWVzdC5pZGwKQEAgLTI5LDYgKzI5LDcgQEAKICAgICBKU0dlbmVyYXRlVG9KU09iamVjdCwKICAg
ICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiAgICAgRW5hYmxlZEF0UnVudGltZT1JbmRleGVk
REIsCisgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCiBdIGludGVyZmFjZSBJREJPcGVuREJSZXF1
ZXN0IDogSURCUmVxdWVzdCB7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmJsb2NrZWQ7
CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbnVwZ3JhZGVuZWVkZWQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nRGVsZXRlQ2FsbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ0RlbGV0ZUNhbGwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiYTJlMS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nRGVsZXRlQ2FsbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCUGVu
ZGluZ0RlbGV0ZUNhbGxfaAotI2RlZmluZSBJREJQZW5kaW5nRGVsZXRlQ2FsbF9oCi0KLSNpbmNs
dWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJQ
ZW5kaW5nRGVsZXRlQ2FsbCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSURCUGVuZGluZ0RlbGV0
ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIElEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElE
QlBlbmRpbmdEZWxldGVDYWxsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlBlbmRpbmdPcGVuQ2FsbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUGVuZGluZ09wZW5DYWxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDliNTNlZjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ09wZW5DYWxsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJREJQZW5kaW5nT3BlbkNhbGxfaAotI2RlZmluZSBJREJQZW5k
aW5nT3BlbkNhbGxfaAotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQ2FsbGJh
Y2tzOwotY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7Ci0KLWNsYXNzIElEQlBlbmRpbmdPcGVu
Q2FsbCB7Ci1wdWJsaWM6Ci0gICAgSURCUGVuZGluZ09wZW5DYWxsKElEQkNhbGxiYWNrcyYgY2Fs
bGJhY2tzLCBJREJEYXRhYmFzZUNhbGxiYWNrcyYgZGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbikKLSAgICAgICAgOiBtX2NhbGxiYWNrcygm
Y2FsbGJhY2tzKQotICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoJmRhdGFiYXNlQ2FsbGJh
Y2tzKQotICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAsIG1fdHJhbnNhY3Rp
b25JZCh0cmFuc2FjdGlvbklkKQotICAgIHsKLSAgICB9Ci0KLSAgICBJREJDYWxsYmFja3MqIGNh
bGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzLmdldCgpOyB9Ci0gICAgSURCRGF0YWJhc2VD
YWxsYmFja3MqIGRhdGFiYXNlQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNr
cy5nZXQoKTsgfQotICAgIHVpbnQ2NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0K
LSAgICBpbnQ2NF90IHRyYW5zYWN0aW9uSWQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9u
SWQ7IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsK
LSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci0g
ICAgdWludDY0X3QgbV92ZXJzaW9uOwotICAgIGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklk
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCUGVuZGluZ09wZW5DYWxsX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNzNk
M2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPG11
dGV4PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotCi11c2luZyBXVEY6OlRocmVh
ZFNwZWNpZmljOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQlRyYW5zYWN0aW9uPj4gVHJhbnNh
Y3Rpb25MaXN0OwotCi1zdGF0aWMgVGhyZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0PiYgdHJh
bnNhY3Rpb25zKCkKLXsKLSAgICAvLyBGSVhNRTogTW92ZSB0aGUgVmVjdG9yIHRvIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgdG8gYXZvaWQgZGVhbGluZyB3aXRoCi0gICAgLy8gdGhyZWFkLWxvY2Fs
IHN0b3JhZ2UuCi0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRp
YyBUaHJlYWRTcGVjaWZpYzxUcmFuc2FjdGlvbkxpc3Q+KiB0cmFuc2FjdGlvbnM7Ci0gICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAgICB0cmFuc2FjdGlvbnMgPSBuZXcgVGhy
ZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0PjsKLSAgICB9KTsKLQotICAgIHJldHVybiAqdHJh
bnNhY3Rpb25zOwotfQotCi12b2lkIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZE5l
d1RyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKQotewot
ICAgIHRyYW5zYWN0aW9ucygpLT5hcHBlbmQodHJhbnNhY3Rpb24pOwotfQotCi12b2lkIElEQlBl
bmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0aXZhdGVOZXdUcmFuc2FjdGlvbnMoKQotewot
ICAgIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9uTGlzdD4mIGxpc3QgPSB0cmFuc2FjdGlvbnMo
KTsKLSAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogKmxpc3QpCi0gICAgICAgIHRyYW5zYWN0
aW9uLT5zZXRBY3RpdmUoZmFsc2UpOwotICAgIC8vIEZJWE1FOiBFeGVyY2lzZSB0aGlzIGNhbGwg
dG8gY2xlYXIoKSBpbiBhIGxheW91dCB0ZXN0LgotICAgIGxpc3QtPmNsZWFyKCk7Ci19Ci0KLX07
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZjU1ZmUuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCi0jZGVmaW5lIElEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3JfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb247Ci0KLS8vIFRoaXMgY2xhc3Mg
a2VlcHMgdHJhY2sgb2YgdGhlIHRyYW5zYWN0aW9ucyBjcmVhdGVkIGR1cmluZyB0aGUgY3VycmVu
dAotLy8gSmF2YXNjcmlwdCBleGVjdXRpb24gY29udGV4dC4gVHJhbnNhY3Rpb25zIGhhdmUgYW4g
aW50ZXJuYWwgfGFjdGl2ZXwgZmxhZwotLy8gd2hpY2ggaXMgc2V0IHRvIHRydWUgb24gY3JlYXRp
b24sIGJ1dCBtdXN0IGJlIHNldCB0byBmYWxzZSB3aGVuIGNvbnRyb2wKLS8vIHJldHVybnMgdG8g
dGhlIGV2ZW50IGxvb3AuCi0KLWNsYXNzIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Igewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IpOwot
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFkZE5ld1RyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb24+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWFjdGl2YXRlTmV3VHJhbnNhY3Rpb25z
KCk7Ci0KLXByaXZhdGU6Ci0gICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcigpOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNlbmRpZiAvLyBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggODY0
ZGU1My4uYzZhOGIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHAKQEAgLTEsMjkgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBA
IC0zMSw1NDcgKzI4LDEzIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JX
aXRoVmFsdWUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkV2ZW50
RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8SURCUmVxdWVzdD4g
SURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdChhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29udGV4
dCwgc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uKSkp
OwotICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgIC8vIFJlcXVlc3RzIGFzc29j
aWF0ZWQgd2l0aCBJREJGYWN0b3J5IChvcGVuL2RlbGV0ZURhdGFiYXNlL2dldERhdGFiYXNlTmFt
ZXMpIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIHRyYW5zYWN0aW9ucy4KLSAgICBpZiAodHJhbnNh
Y3Rpb24pCi0gICAgICAgIHRyYW5zYWN0aW9uLT5yZWdpc3RlclJlcXVlc3QocmVxdWVzdC5wdHIo
KSk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJB
bnk+IHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0KGFk
b3B0UmVmKCpuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRhc2tUeXBlLCB0cmFuc2Fj
dGlvbikpKTsKLSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAvLyBSZXF1ZXN0
cyBhc3NvY2lhdGVkIHdpdGggSURCRmFjdG9yeSAob3Blbi9kZWxldGVEYXRhYmFzZS9nZXREYXRh
YmFzZU5hbWVzKSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCB0cmFuc2FjdGlvbnMuCi0gICAgaWYg
KHRyYW5zYWN0aW9uKQotICAgICAgICB0cmFuc2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHJlcXVl
c3QucHRyKCkpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1JREJSZXF1ZXN0OjpJREJSZXF1
ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQotICAgICwg
bV9yZXN1bHQobnVsbHB0cikKLSAgICAsIG1fZXJyb3JDb2RlKDApCi0gICAgLCBtX2NvbnRleHRT
dG9wcGVkKGZhbHNlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1f
cmVhZHlTdGF0ZShQRU5ESU5HKQotICAgICwgbV9yZXF1ZXN0QWJvcnRlZChmYWxzZSkKLSAgICAs
IG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCi0gICAgLCBtX2hh
c1BlbmRpbmdBY3Rpdml0eSh0cnVlKQotICAgICwgbV9jdXJzb3JUeXBlKEluZGV4ZWREQjo6Q3Vy
c29yVHlwZTo6S2V5QW5kVmFsdWUpCi0gICAgLCBtX2N1cnNvckRpcmVjdGlvbihJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbjo6TmV4dCkKLSAgICAsIG1fY3Vyc29yRmluaXNoZWQoZmFsc2UpCi0g
ICAgLCBtX3BlbmRpbmdDdXJzb3IobnVsbHB0cikKLSAgICAsIG1fZGlkRmlyZVVwZ3JhZGVOZWVk
ZWRFdmVudChmYWxzZSkKLSAgICAsIG1fcHJldmVudFByb3BhZ2F0aW9uKGZhbHNlKQotICAgICwg
bV9yZXF1ZXN0U3RhdGUoY29udGV4dCkKLXsKLX0KLQotSURCUmVxdWVzdDo6fklEQlJlcXVlc3Qo
KQotewotfQotCi1QYXNzUmVmUHRyPElEQkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX3Jlc3VsdDsKLX0KLQotUGFzc1JlZlB0
cjxET01FcnJvcj4gSURCUmVxdWVzdDo6ZXJyb3IoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgcmV0dXJuIG1fZXJyb3I7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IElEQlJlcXVlc3Q6OmVy
cm9yQ29kZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IERPTkUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0
YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gbV9lcnJvckNv
ZGU7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQW55PiBJREJSZXF1ZXN0Ojpzb3VyY2UoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3NvdXJjZTsKLX0KLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4g
SURCUmVxdWVzdDo6dHJhbnNhY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zYWN0
aW9uOwotfQotCi1jb25zdCBTdHJpbmcmIElEQlJlcXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAot
ewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0g
RE9ORSk7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
cGVuZGluZywgKCJwZW5kaW5nIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGRvbmUs
ICgiZG9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLQotICAgIGlm
IChtX3JlYWR5U3RhdGUgPT0gUEVORElORykKLSAgICAgICAgcmV0dXJuIHBlbmRpbmc7Ci0KLSAg
ICByZXR1cm4gZG9uZTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjptYXJrRWFybHlEZWF0aCgpCi17
Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKLSAgICBtX3JlYWR5U3RhdGUg
PSBFYXJseURlYXRoOwotICAgIGlmIChtX3RyYW5zYWN0aW9uKQotICAgICAgICBtX3RyYW5zYWN0
aW9uLT51bnJlZ2lzdGVyUmVxdWVzdCh0aGlzKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjphYm9y
dCgpCi17Ci0gICAgQVNTRVJUKCFtX3JlcXVlc3RBYm9ydGVkKTsKLSAgICBpZiAobV9jb250ZXh0
U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05F
KTsKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IERPTkUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEVucXVldWVkIGV2ZW50cyBtYXkgYmUgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0LgotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBzZWxmKHRoaXMpOwotCi0gICAgRXZlbnRRdWV1
ZSYgZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwot
ICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0gICAgICAgIGJvb2wg
cmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5j
bGVhcigpOwotCi0gICAgbV9lcnJvckNvZGUgPSAwOwotICAgIG1fZXJyb3IgPSBudWxscHRyOwot
ICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7Ci0gICAgbV9yZXN1bHQgPSBudWxscHRyOwot
ICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpBYm9ydEVycm9yKSk7Ci0gICAgbV9yZXF1ZXN0QWJvcnRlZCA9IHRydWU7Ci19Ci0KLXZvaWQg
SURCUmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFTU0VS
VChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3Ip
OwotICAgIG1fY3Vyc29yVHlwZSA9IGN1cnNvclR5cGU7Ci0gICAgbV9jdXJzb3JEaXJlY3Rpb24g
PSBkaXJlY3Rpb247Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UGVuZGluZ0N1cnNvcihQYXNz
UmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yKQotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0g
RE9ORSk7Ci0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb24pOwotICAgIEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKLSAgICBBU1NF
UlQoY3Vyc29yID09IGdldFJlc3VsdEN1cnNvcigpKTsKLQotICAgIG1fcGVuZGluZ0N1cnNvciA9
IGN1cnNvcjsKLSAgICBtX3Jlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV9yZWFkeVN0YXRlID0gUEVO
RElORzsKLSAgICBtX2Vycm9yQ29kZSA9IDA7Ci0gICAgbV9lcnJvciA9IG51bGxwdHI7Ci0gICAg
bV9lcnJvck1lc3NhZ2UgPSBTdHJpbmcoKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5yZWdpc3RlclJl
cXVlc3QodGhpcyk7Ci19Ci0KLVJlZlB0cjxJREJDdXJzb3I+IElEQlJlcXVlc3Q6OmdldFJlc3Vs
dEN1cnNvcigpCi17Ci0gICAgaWYgKCFtX3Jlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQotICAg
ICAgICByZXR1cm4gbV9yZXN1bHQtPmlkYkN1cnNvcigpOwotICAgIGlmIChtX3Jlc3VsdC0+dHlw
ZSgpID09IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKLSAgICAgICAgcmV0dXJuIG1f
cmVzdWx0LT5pZGJDdXJzb3JXaXRoVmFsdWUoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
dm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1
cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXksIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQo
bV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAgIG1fY3Vyc29yS2V5ID0ga2V5OwotICAgIG1f
Y3Vyc29yUHJpbWFyeUtleSA9IHByaW1hcnlLZXk7Ci0gICAgbV9jdXJzb3JWYWx1ZSA9IHZhbHVl
OwotCi0gICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9u
bHkpIHsKLSAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShjdXJzb3IpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShJREJDdXJz
b3JXaXRoVmFsdWU6OmZyb21DdXJzb3IoY3Vyc29yKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6
ZmluaXNoQ3Vyc29yKCkKLXsKLSAgICBtX2N1cnNvckZpbmlzaGVkID0gdHJ1ZTsKLSAgICBpZiAo
bV9yZWFkeVN0YXRlICE9IFBFTkRJTkcpCi0gICAgICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0g
ZmFsc2U7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3QK
LXsKLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5E
SU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKLSAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElO
Ryk7Ci0gICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAm
JiAhbV9lcnJvciAmJiAhbV9yZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElE
QlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKLXsK
LSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6Om9uRXJyb3IoKSAoJXMpICclcyciLCBl
cnJvci0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9lcnJvckNvZGUgPSBlcnJvci0+Y29kZSgpOwotICAgIG1fZXJyb3JNZXNzYWdlID0gZXJy
b3ItPm1lc3NhZ2UoKTsKLSAgICBtX2Vycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKGVycm9yLT5pZGJDb2RlKCkpKTsKLSAgICBtX3BlbmRp
bmdDdXJzb3IgPSBudWxscHRyOwotICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRy
PEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQotewotICAgIHJldHVybiBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlz
dCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhET01TdHJp
bmdMaXN0KSIpOwotICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoZG9tU3RyaW5nTGlzdCk7Ci0gICAg
ZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0
OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBwcnBCYWNrZW5kKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQkN1cnNvcikiKTsK
LSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBE
T01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKLQotICAgIFJlZlB0
cjxJREJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kID0gcHJwQmFja2VuZDsKLSAgICBSZWZQdHI8SURC
S2V5PiBrZXkgPSBiYWNrZW5kLT5rZXkoKTsKLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5
ID0gYmFja2VuZC0+cHJpbWFyeUtleSgpOwotCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
dmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0ZSgpLCBiYWNrZW5k
LT52YWx1ZUJ1ZmZlcigpLCAhIWtleSk7Ci0KLSAgICBBU1NFUlQoIW1fcGVuZGluZ0N1cnNvcik7
Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yOwotICAgIHN3aXRjaCAobV9jdXJzb3JUeXBl
KSB7Ci0gICAgY2FzZSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHk6Ci0gICAgICAgIGN1
cnNvciA9IElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQucmVsZWFzZSgpLCBtX2N1cnNvckRpcmVj
dGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWU6Ci0g
ICAgICAgIGN1cnNvciA9IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKGJhY2tlbmQucmVsZWFz
ZSgpLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgc2V0UmVzdWx0Q3Vyc29yKGN1cnNvciwga2V5LnJl
bGVhc2UoKSwgcHJpbWFyeUtleS5yZWxlYXNlKCksIHZhbHVlKTsKLQotICAgIGVucXVldWVFdmVu
dChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
KFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkpCiB7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoSURCS2V5KSIpOwotICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpZGJLZXkgJiYgaWRiS2V5LT5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0
ZSk7Ci0gICAgICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiS2V5VG9TY3JpcHRWYWx1
ZShyZXF1ZXN0U3RhdGUoKSwgaWRiS2V5KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGVJbnZhbGlkKCk7Ci0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nl
c3NFdmVudCgpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVx
dWVzdDo6b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcikiKTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVF
dmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNj
b3BlKG1fcmVxdWVzdFN0YXRlKTsKLQotICAgIC8vIEZJWE1FOiBCeSBub3Qga25vd2luZyB3aGV0
aGVyIG9yIG5vdCB0aGUga2V5IGlzIGRlZmluZWQgaGVyZSwgd2UgZG9uJ3Qga25vdwotICAgIC8v
IGlmIGEgbnVsbCB2YWx1ZUJ1ZmZlciBtZWFucyB0aGUgdmFsdWUgaXMgbnVsbCBvciB0aGUgdmFs
dWUgaXMgdW5kZWZpbmVkLgotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVz
ZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihyZXF1ZXN0U3RhdGUoKSwgdmFsdWVCdWZmZXIsIHRydWUp
OwotICAgIG9uU3VjY2Vzc0ludGVybmFsKHZhbHVlKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXN0
YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZShQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlKQotewotICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSBJREJB
bnk6OklEQk9iamVjdFN0b3JlVHlwZSkKLSAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiT2JqZWN0
U3RvcmUoKTsKLSAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJJbmRleFR5cGUp
Ci0gICAgICAgIHJldHVybiBzb3VyY2UtPmlkYkluZGV4KCktPm9iamVjdFN0b3JlKCk7Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi12b2lk
IElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWVCdWZm
ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBJREJLZXlQYXRoJiBr
ZXlQYXRoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzKFNo
YXJlZEJ1ZmZlciwgSURCS2V5LCBJREJLZXlQYXRoKSIpOwotICAgIGlmICghc2hvdWxkRW5xdWV1
ZUV2ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQo
a2V5UGF0aCA9PSBlZmZlY3RpdmVPYmplY3RTdG9yZShtX3NvdXJjZSktPmtleVBhdGgoKSk7Ci0j
ZW5kaWYKLSAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsK
LQotICAgIC8vIEZJWE1FOiBCeSBub3Qga25vd2luZyB3aGV0aGVyIG9yIG5vdCB0aGUga2V5IGlz
IGRlZmluZWQgaGVyZSwgd2UgZG9uJ3Qga25vdwotICAgIC8vIGlmIGEgbnVsbCB2YWx1ZUJ1ZmZl
ciBtZWFucyB0aGUgdmFsdWUgaXMgbnVsbCBvciB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLgotICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZl
cihyZXF1ZXN0U3RhdGUoKSwgdmFsdWVCdWZmZXIsIHRydWUpOwotCi0gICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7Ci0KLSAgICBpZiAoIWtleVBhdGguaXNOdWxs
KCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5
ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChyZXF1ZXN0U3RhdGUoKS0+
ZXhlYygpLCB2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgIEFTU0VSVCghZXhwZWN0ZWRLZXkgfHwg
ZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQoKSkpOwotI2VuZGlmCi0gICAgICAg
IGJvb2wgaW5qZWN0ZWQgPSBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUocmVxdWVzdFN0YXRl
KCksIHByaW1hcnlLZXksIHZhbHVlLCBrZXlQYXRoKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChp
bmplY3RlZCwgaW5qZWN0ZWQpOwotICAgIH0KLQotICAgIG9uU3VjY2Vzc0ludGVybmFsKHZhbHVl
KTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoaW50NjRfdCB2YWx1ZSkKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhpbnQ2NF90KSIpOwotICAg
IGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICByZXR1cm4g
b25TdWNjZXNzSW50ZXJuYWwoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZSh2YWx1
ZSkpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcygpCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKSIpOwotICAgIGlmICghc2hvdWxkRW5xdWV1
ZUV2ZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICByZXR1cm4gb25TdWNjZXNzSW50ZXJuYWwo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKLX0KLQotdm9pZCBJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBET01SZXF1
ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKLSAgICByZXR1cm4gb25TdWNj
ZXNzSW50ZXJuYWwoZGVzZXJpYWxpemVJREJWYWx1ZShyZXF1ZXN0U3RhdGUoKSwgdmFsdWUpKTsK
LX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NJbnRlcm5hbChjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgdmFsdWUpCi17Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZSh2
YWx1ZSk7Ci0gICAgaWYgKG1fcGVuZGluZ0N1cnNvcikgewotICAgICAgICBtX3BlbmRpbmdDdXJz
b3ItPmNsb3NlKCk7Ci0gICAgICAgIG1fcGVuZGluZ0N1cnNvciA9IG51bGxwdHI7Ci0gICAgfQot
ICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVx
dWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQotewotICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzKGtleSwgcHJpbWFyeUtleSwgdmFs
dWVCdWZmZXIpIik7Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7
Ci0KLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFs
dWVCdWZmZXIocmVxdWVzdFN0YXRlKCksIGJ1ZmZlciwgISFrZXkpOwotCi0gICAgQVNTRVJUKG1f
cGVuZGluZ0N1cnNvcik7Ci0gICAgc2V0UmVzdWx0Q3Vyc29yKG1fcGVuZGluZ0N1cnNvci5yZWxl
YXNlKCksIGtleSwgcHJpbWFyeUtleSwgdmFsdWUpOwotICAgIGVucXVldWVFdmVudChjcmVhdGVT
dWNjZXNzRXZlbnQoKSk7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNob3VsZCBy
ZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMgYSBvciBjYW4KLSAgICAvLyAgICAgICAg
Z2V0IGEgaGFuZGxlIHRvIHVzIGFuZCB3ZSBoYXZlIGV2ZW50IGxpc3RlbmVycy4gVGhpcyBpcyBv
cmRlciB0byBoYW5kbGUKLSAgICAvLyAgICAgICAgdXNlciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Bl
cmx5LgotICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eSAmJiAhbV9jb250ZXh0U3RvcHBl
ZDsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpzdG9wKCkKLXsKLSAgICBpZiAobV9jb250ZXh0U3Rv
cHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Ci0g
ICAgbV9yZXF1ZXN0U3RhdGUuY2xlYXIoKTsKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IFBFTkRJ
TkcpCi0gICAgICAgIG1hcmtFYXJseURlYXRoKCk7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6Y2Fu
U3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2hhc1BlbmRpbmdB
Y3Rpdml0eTsKLX0KLQotY29uc3QgY2hhciogSURCUmVxdWVzdDo6YWN0aXZlRE9NT2JqZWN0TmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJJREJSZXF1ZXN0IjsKLX0KLQotRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgSURCUmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAotewotICAg
IHJldHVybiBJREJSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwotfQotCi1ib29sIElE
QlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJU
KG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQp
OwotICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7Ci0gICAgQVNTRVJUKG1fZW5xdWV1
ZWRFdmVudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
LSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UobV9yZWFkeVN0YXRlIDwgRE9ORSwgIldoZW4gZGlzcGF0Y2hpbmcgZXZlbnQgJXMsIG1f
cmVhZHlTdGF0ZSA8IERPTkUoJWQpLCB3YXMgJWQiLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIERPTkUsIG1fcmVhZHlTdGF0ZSk7Ci0KLSAgICBET01SZXF1ZXN0U3RhdGU6
OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpICE9
IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCi0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IERPTkU7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0
KCkpCi0gICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVu
ZCh0aGlzKTsKLSAgICBpZiAobV90cmFuc2FjdGlvbiAmJiAhbV9wcmV2ZW50UHJvcGFnYXRpb24p
IHsKLSAgICAgICAgdGFyZ2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbik7Ci0gICAgICAgIC8vIElm
IHRoZXJlIGV2ZXIgYXJlIGV2ZW50cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBkYXRhYmFz
ZSBidXQKLSAgICAgICAgLy8gdGhhdCBkbyBub3QgaGF2ZSBhIHRyYW5zYWN0aW9uLCB0aGVuIHRo
aXMgd2lsbCBub3Qgd29yayBhbmQgd2UgbmVlZAotICAgICAgICAvLyB0aGlzIG9iamVjdCB0byBh
Y3R1YWxseSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhYmFzZSAodG8gZW5zdXJlCi0gICAg
ICAgIC8vIGl0IHN0YXlzIGFsaXZlKS4KLSAgICAgICAgdGFyZ2V0cy5hcHBlbmQobV90cmFuc2Fj
dGlvbi0+ZGIoKSk7Ci0gICAgfQotCi0gICAgLy8gQ3Vyc29yIHByb3BlcnRpZXMgc2hvdWxkIG5v
dCB1cGRhdGVkIHVudGlsIHRoZSBzdWNjZXNzIGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQuCi0g
ICAgUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yVG9Ob3RpZnk7Ci0gICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkgewotICAgICAgICBjdXJzb3JUb05vdGlm
eSA9IGdldFJlc3VsdEN1cnNvcigpOwotICAgICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpIHsKLSAg
ICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5zZXRWYWx1ZVJlYWR5KHJlcXVlc3RTdGF0ZSgpLCBt
X2N1cnNvcktleS5yZWxlYXNlKCksIG1fY3Vyc29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1fY3Vy
c29yVmFsdWUpOwotICAgICAgICAgICAgbV9jdXJzb3JWYWx1ZS5jbGVhcigpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVu
ZWVkZWRFdmVudCkgewotICAgICAgICBBU1NFUlQoIW1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVu
dCk7Ci0gICAgICAgIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0
aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5ibG9ja2VkRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBn
cmFkZW5lZWRlZEV2ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMiLCBldmVudC0+dHlwZSgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGNvbnN0IGJvb2wgc2V0VHJhbnNhY3Rpb25BY3RpdmUg
PSBtX3RyYW5zYWN0aW9uICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNz
RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50
IHx8IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIG1fZXJyb3JD
b2RlICE9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7Ci0KLSAgICBpZiAoc2V0
VHJhbnNhY3Rpb25BY3RpdmUpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEFjdGl2ZSh0cnVl
KTsKLQotICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7Ci0KLSAgICBpZiAobV90cmFuc2FjdGlvbikg
ewotICAgICAgICBpZiAobV9yZWFkeVN0YXRlID09IERPTkUpCi0gICAgICAgICAgICBtX3RyYW5z
YWN0aW9uLT51bnJlZ2lzdGVyUmVxdWVzdCh0aGlzKTsKLQotICAgICAgICAvLyBQb3NzaWJseSBh
Ym9ydCB0aGUgdHJhbnNhY3Rpb24uIFRoaXMgbXVzdCBvY2N1ciBhZnRlciB1bnJlZ2lzdGVyaW5n
IChzbyB0aGlzIHJlcXVlc3QKLSAgICAgICAgLy8gZG9lc24ndCByZWNlaXZlIGEgc2Vjb25kIGVy
cm9yKSBhbmQgYmVmb3JlIGRlYWN0aXZhdGluZyAod2hpY2ggbWlnaHQgdHJpZ2dlciBjb21taXQp
LgotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAm
JiBkb250UHJldmVudERlZmF1bHQgJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKLSAgICAgICAgICAg
IG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKG1fZXJyb3IsIG1fZXJyb3JNZXNzYWdlKTsKLSAgICAg
ICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENFUFRJT04pOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3QgcmVxdWVzdCBpbiB0aGUgdHJhbnNh
Y3Rpb24ncyBsaXN0LCBpdCBtYXkgY29tbWl0IGhlcmUuCi0gICAgICAgIGlmIChzZXRUcmFuc2Fj
dGlvbkFjdGl2ZSkKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEFjdGl2ZShmYWxzZSk7
Ci0gICAgfQotCi0gICAgaWYgKGN1cnNvclRvTm90aWZ5KQotICAgICAgICBjdXJzb3JUb05vdGlm
eS0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKLQotICAgIGlmIChtX3JlYWR5U3RhdGUg
PT0gRE9ORSAmJiAoIWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmluaXNoZWQpICYmIGV2ZW50
LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkKLSAgICAgICAgbV9o
YXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxzZTsKLQotICAgIHJldHVybiBkb250UHJldmVudERlZmF1
bHQ7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxl
cigpCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24gJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKLSAg
ICAgICAgbV90cmFuc2FjdGlvbi0+c2V0RXJyb3IoRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9y
KSksICJVbmNhdWdodCBleGNlcHRpb24gaW4gZXZlbnQgaGFuZGxlci4iKTsKLSAgICAgICAgbV90
cmFuc2FjdGlvbi0+YWJvcnQoSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgfQotfQotCi12b2lkIElE
QlJlcXVlc3Q6OnRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0Y2goKQotewotICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hh
bmdlKCkpOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gRE9ORSk7Ci0gICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgbV90cmFuc2FjdGlvbiA9IG51bGxwdHI7Ci0g
ICAgbV9yZWFkeVN0YXRlID0gUEVORElORzsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVl
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCi17Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0
ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKLQotICAgIGlmIChtX2NvbnRl
eHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9k
aWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50LCAiV2hlbiBxdWV1ZWluZyBldmVudCAlcywgbV9yZWFk
eVN0YXRlIHdhcyAlZCIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9y
ZWFkeVN0YXRlKTsKLQotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0KLSAgICBpZiAoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50Lmdl
dCgpKSkKLSAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5o
CmluZGV4IDBlYTdlMmYuLjQ0ZmI5ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAgLTEsMjkgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIElEQlJlcXVl
c3RfaApAQCAtMzksMTAgKzM2LDcgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJREJBbnkuaCIKLSNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgogI2luY2x1ZGUg
IlNjcmlwdFdyYXBwYWJsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSwxOCArNDUs
MTUgQEAgY2xhc3MgSURCVHJhbnNhY3Rpb247CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKLWNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgSURC
Q2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7CitjbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwg
cHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiop
OwotICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlLCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKKyAgICB2
aXJ0dWFsIH5JREJSZXF1ZXN0KCkgeyB9CiAKLSAgICBQYXNzUmVmUHRyPElEQkFueT4gcmVzdWx0
KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RE9NRXJyb3I+IGVycm9yKEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlKCkgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdDsKLSAg
ICB2b2lkIHByZXZlbnRQcm9wYWdhdGlvbigpIHsgbV9wcmV2ZW50UHJvcGFnYXRpb24gPSB0cnVl
OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUm
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUoRXhjZXB0
aW9uQ29kZSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NRXJyb3I+IGVy
cm9yKEV4Y2VwdGlvbkNvZGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkFueT4gc291cmNlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdCA9IDA7CiAKICAgICAvLyBEZWZpbmVkIGluIHRo
ZSBJREwKICAgICBlbnVtIFJlYWR5U3RhdGUgewpAQCAtNzEsOTYgKzYyLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgRWFybHlEZWF0aCA9IDMKICAgICB9OwogCi0gICAgY29uc3QgU3RyaW5nJiByZWFk
eVN0YXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtFYXJseURlYXRoKCk7Ci0gICAgdm9pZCBz
ZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24pOwotICAgIHZvaWQgc2V0UGVuZGluZ0N1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNv
cj4pOwotICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7Ci0gICAgdm9pZCBhYm9ydCgpOwotCi0gICAg
Ly8gSURCQ2FsbGJhY2tzCi0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIFBhc3NSZWZQ
dHI8SURCS2V5PiwgY29uc3QgSURCS2V5UGF0aCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBvblN1Y2Nlc3MoaW50NjRfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJL
ZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+KSBvdmVycmlkZTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSW5F
dmVudEhhbmRsZXIoKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIHVzaW5nIEV2ZW50VGFyZ2V0Ojpk
aXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNw
YXRjaCgpOwotCi0gICAgdXNpbmcgUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpyZWY7Ci0gICAg
dXNpbmcgUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpkZXJlZjsKLQotICAgIElEQkRhdGFiYXNl
QmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUoKSB7IHJldHVybiBtX3Rhc2tUeXBlOyB9Ci0KLSAg
ICBET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSgpIHsgcmV0dXJuICZtX3JlcXVlc3RTdGF0
ZTsgfQotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICBib29sIGhhc1BlbmRpbmdB
Y3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiByZWFk
eVN0YXRlKCkgY29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSURCUmVxdWVzdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCRGF0YWJhc2VC
YWNrZW5kOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIGVucXVldWVFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEVucXVldWVFdmVu
dCgpIGNvbnN0OwotICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+KTsKLSAgICB2b2lkIG9uU3VjY2Vzc0ludGVybmFsKGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJik7Ci0KLSAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKLSAg
ICB1bnNpZ25lZCBzaG9ydCBtX2Vycm9yQ29kZTsKLSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7
Ci0gICAgUmVmUHRyPERPTUVycm9yPiBtX2Vycm9yOwotICAgIGJvb2wgbV9jb250ZXh0U3RvcHBl
ZDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0gICAgUmVhZHlT
dGF0ZSBtX3JlYWR5U3RhdGU7Ci0gICAgYm9vbCBtX3JlcXVlc3RBYm9ydGVkOyAvLyBNYXkgYmUg
YWJvcnRlZCBieSB0cmFuc2FjdGlvbiB0aGVuIHJlY2VpdmUgYXN5bmMgb25zdWNjZXNzOyBpZ25v
cmUgdnMuIGFzc2VydC4KLQotcHJpdmF0ZToKLSAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgot
ICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVj
dE5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUo
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0IEFQSS4KLSAgICB2aXJ0dWFs
IHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBmaW5hbCB7IHJlZigpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBmaW5hbCB7IGRlcmVmKCk7IH0K
LQotICAgIFJlZlB0cjxJREJDdXJzb3I+IGdldFJlc3VsdEN1cnNvcigpOwotICAgIHZvaWQgc2V0
UmVzdWx0Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmKTsKLQotICAgIFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwotICAgIGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKLQotICAgIGJvb2wgbV9oYXNQZW5kaW5n
QWN0aXZpdHk7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Ci0K
LSAgICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCi0g
ICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbiBtX2N1cnNvckRpcmVjdGlvbjsKLSAgICBib29sIG1fY3Vyc29yRmluaXNo
ZWQ7Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gbV9wZW5kaW5nQ3Vyc29yOwotICAgIFJlZlB0cjxJ
REJLZXk+IG1fY3Vyc29yS2V5OwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3Vyc29yUHJpbWFyeUtl
eTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2N1cnNvclZhbHVlOwotICAgIGJvb2wg
bV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50OwotICAgIGJvb2wgbV9wcmV2ZW50UHJvcGFnYXRp
b247Ci0KLSAgICBET01SZXF1ZXN0U3RhdGUgbV9yZXF1ZXN0U3RhdGU7CisgICAgSURCUmVxdWVz
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2VuZGlmIC8vIElEQlJl
cXVlc3RfaAorI2VuZGlmIC8vIExlZ2FjeVJlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAppbmRleCBlZjZlMmI2Li4zZGJkZjhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbApA
QCAtMzMsNyArMzMsOCBAQAogICAgIEFjdGl2ZURPTU9iamVjdCwKICAgICBFdmVudFRhcmdldCwK
ICAgICBKU0dlbmVyYXRlVG9KU09iamVjdCwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QK
KyAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCisgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24s
CiBdIGludGVyZmFjZSBJREJSZXF1ZXN0IDogRXZlbnRUYXJnZXQgewogICAgIFtHZXR0ZXJSYWlz
ZXNFeGNlcHRpb25dIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgcmVzdWx0OwogICAgIFtHZXR0
ZXJSYWlzZXNFeGNlcHRpb25dIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01FcnJvciBlcnJvcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNw
cAppbmRleCA2ZWMyOWZhLi41MTcwNzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0xLDI2ICsxLDI2IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTI4LDM0ICsyOCwxMyBAQAogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vo
b2xkZXIuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSAi
SURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQk9w
ZW5EQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UmVmPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGludDY0X3QgaWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmpl
Y3RTdG9yZU5hbWVzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlLCBJREJEYXRhYmFz
ZSogZGIpCi17Ci0gICAgSURCT3BlbkRCUmVxdWVzdCogb3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7
Ci0gICAgUmVmPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZigqbmV3IElEQlRy
YW5zYWN0aW9uKGNvbnRleHQsIGlkLCBvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCBkYiwgb3BlbkRC
UmVxdWVzdCwgSURCRGF0YWJhc2VNZXRhZGF0YSgpKSkpOwotICAgIHRyYW5zYWN0aW9uLT5zdXNw
ZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb247Ci19Ci0KLVJlZjxJREJUcmFu
c2FjdGlvbj4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBpbnQ2NF90IGlkLCBJREJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9w
ZW5EQlJlcXVlc3QsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIHByZXZpb3VzTWV0YWRhdGEp
CitJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQogewotICAgIFJlZjxJREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbihjb250
ZXh0LCBpZCwgVmVjdG9yPFN0cmluZz4oKSwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZl
cnNpb25DaGFuZ2UsIGRiLCBvcGVuREJSZXF1ZXN0LCBwcmV2aW91c01ldGFkYXRhKSkpOwotICAg
IHRyYW5zYWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb247
CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgp
CkBAIC04OCwyNDkgKzY3LDYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6
bW9kZVJlYWRXcml0ZUxlZ2FjeSgpCiAgICAgcmV0dXJuIHJlYWR3cml0ZTsKIH0KIAotCi1JREJU
cmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgaW50NjRfdCBpZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIElEQkRhdGFiYXNlKiBkYiwgSURCT3BlbkRC
UmVxdWVzdCogb3BlbkRCUmVxdWVzdCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgcHJldmlv
dXNNZXRhZGF0YSkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQotICAgICwgbV9pZChp
ZCkKLSAgICAsIG1fZGF0YWJhc2UoZGIpCi0gICAgLCBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0
U3RvcmVOYW1lcykKLSAgICAsIG1fb3BlbkRCUmVxdWVzdChvcGVuREJSZXF1ZXN0KQotICAgICwg
bV9tb2RlKG1vZGUpCi0gICAgLCBtX3N0YXRlKEFjdGl2ZSkKLSAgICAsIG1faGFzUGVuZGluZ0Fj
dGl2aXR5KHRydWUpCi0gICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQotICAgICwgbV9wcmV2
aW91c01ldGFkYXRhKHByZXZpb3VzTWV0YWRhdGEpCi17Ci0gICAgaWYgKG1vZGUgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgLy8gTm90IGFj
dGl2ZSB1bnRpbCB0aGUgY2FsbGJhY2suCi0gICAgICAgIG1fc3RhdGUgPSBJbmFjdGl2ZTsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBp
dCBjYW4gYmUgYWRvcHRlZC4KLSAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKLSAgICBp
ZiAobV9zdGF0ZSA9PSBBY3RpdmUpCi0gICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3I6OmFkZE5ld1RyYW5zYWN0aW9uKHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q3JlYXRlZCh0aGlzKTsKLX0KLQotSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlvbigpCi17
Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQgfHwgbV9jb250ZXh0U3RvcHBlZCk7Ci0g
ICAgQVNTRVJUKG1fcmVxdWVzdExpc3QuaXNFbXB0eSgpIHx8IG1fY29udGV4dFN0b3BwZWQpOwot
fQotCi1jb25zdCBTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjptb2RlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbW9kZVRvU3RyaW5nKG1fbW9kZSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnNl
dEVycm9yKFBhc3NSZWZQdHI8RE9NRXJyb3I+IGVycm9yLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7Ci0gICAgQVNTRVJUKGVy
cm9yKTsKLQotICAgIC8vIFRoZSBmaXJzdCBlcnJvciB0byBiZSBzZXQgaXMgdGhlIHRydWUgY2F1
c2Ugb2YgdGhlCi0gICAgLy8gdHJhbnNhY3Rpb24gYWJvcnQuCi0gICAgaWYgKCFtX2Vycm9yKSB7
Ci0gICAgICAgIG1fZXJyb3IgPSBlcnJvcjsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJv
ck1lc3NhZ2U7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFu
c2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9y
ZU1hcC5maW5kKG5hbWUpOwotICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotCi0gICAgaWYgKCFpc1ZlcnNpb25DaGFuZ2UoKSAm
JiAhbV9vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1fZGF0YWJhc2UtPmZpbmRPYmplY3RT
dG9yZUlkKG5hbWUpOwotICAgIGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0
YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRh
ZGF0YSA9IG1fZGF0YWJhc2UtPm1ldGFkYXRhKCk7Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLCB0aGlzKTsKLSAgICBvYmplY3RTdG9yZUNyZWF0ZWQo
bmFtZSwgb2JqZWN0U3RvcmUpOwotICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IHBycE9iamVjdFN0b3JlKQotewotICAg
IEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG9iamVjdFN0b3JlID0gcHJwT2JqZWN0U3RvcmU7Ci0gICAgbV9vYmplY3RTdG9yZU1hcC5zZXQo
bmFtZSwgb2JqZWN0U3RvcmUpOwotICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkKLSAgICAgICAg
bV9vYmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0
YWRhdGEoKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOwot
ICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOwotICAgIGlmIChpdCAhPSBt
X29iamVjdFN0b3JlTWFwLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBpdC0+dmFsdWU7Ci0gICAgICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3Zl
KG5hbWUpOwotICAgICAgICBvYmplY3RTdG9yZS0+bWFya0RlbGV0ZWQoKTsKLSAgICAgICAgbV9v
YmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0YWRh
dGEoKSk7Ci0gICAgICAgIG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5hZGQob2JqZWN0U3RvcmUpOwot
ICAgIH0KLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb246OnNldEFjdGl2ZSglcykgZm9y
IHRyYW5zYWN0aW9uIGlkICVsbGkiLCBhY3RpdmUgPyAidHJ1ZSIgOiAiZmFsc2UiLCBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KG1faWQpKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUg
IT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9uIHRyaWVkIHRvIHNldEFjdGl2ZSgl
cykiLCBhY3RpdmUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5p
c2hpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoYWN0aXZlICE9IChtX3N0YXRlID09
IEFjdGl2ZSkpOwotICAgIG1fc3RhdGUgPSBhY3RpdmUgPyBBY3RpdmUgOiBJbmFjdGl2ZTsKLQot
ICAgIGlmICghYWN0aXZlICYmIG1fcmVxdWVzdExpc3QuaXNFbXB0eSgpKQotICAgICAgICBiYWNr
ZW5kREIoKS0+Y29tbWl0KG1faWQpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydChF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hpbmcgfHwgbV9z
dGF0ZSA9PSBGaW5pc2hlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdGUg
PSBGaW5pc2hpbmc7Ci0KLSAgICB3aGlsZSAoIW1fcmVxdWVzdExpc3QuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gKm1fcmVxdWVzdExpc3QuYmVnaW4o
KTsKLSAgICAgICAgbV9yZXF1ZXN0TGlzdC5yZW1vdmUocmVxdWVzdCk7Ci0gICAgICAgIHJlcXVl
c3QtPmFib3J0KCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVm
ID0gdGhpczsKLSAgICBiYWNrZW5kREIoKS0+YWJvcnQobV9pZCk7Ci19Ci0KLUlEQlRyYW5zYWN0
aW9uOjpPcGVuQ3Vyc29yTm90aWZpZXI6Ok9wZW5DdXJzb3JOb3RpZmllcihQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiwgSURCQ3Vyc29yKiBjdXJzb3IpCi0gICAgOiBtX3Ry
YW5zYWN0aW9uKHRyYW5zYWN0aW9uKSwKLSAgICAgIG1fY3Vyc29yKGN1cnNvcikKLXsKLSAgICBt
X3RyYW5zYWN0aW9uLT5yZWdpc3Rlck9wZW5DdXJzb3IobV9jdXJzb3IpOwotfQotCi1JREJUcmFu
c2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyOjp+T3BlbkN1cnNvck5vdGlmaWVyKCkKLXsKLSAg
ICBpZiAobV9jdXJzb3IpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vy
c29yKG1fY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlm
aWVyOjpjdXJzb3JGaW5pc2hlZCgpCi17Ci0gICAgaWYgKG1fY3Vyc29yKSB7Ci0gICAgICAgIG1f
dHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vyc29yKTsKLSAgICAgICAgbV9j
dXJzb3IgPSBudWxscHRyOwotICAgICAgICBtX3RyYW5zYWN0aW9uID0gbnVsbHB0cjsKLSAgICB9
Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3Iq
IGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqIGN1cnNvcikKLXsK
LSAgICBtX29wZW5DdXJzb3JzLnJlbW92ZShjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uOjpjbG9zZU9wZW5DdXJzb3JzKCkKLXsKLSAgICBIYXNoU2V0PElEQkN1cnNvcio+IGN1cnNv
cnM7Ci0gICAgY3Vyc29ycy5zd2FwKG1fb3BlbkN1cnNvcnMpOwotICAgIGZvciAoYXV0byYgY3Vy
c29yIDogY3Vyc29ycykKLSAgICAgICAgY3Vyc29yLT5jbG9zZSgpOwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICBB
U1NFUlQocmVxdWVzdCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gQWN0aXZlKTsKLSAgICBtX3Jl
cXVlc3RMaXN0LmFkZChyZXF1ZXN0KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdp
c3RlclJlcXVlc3QoSURCUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQocmVxdWVzdCk7
Ci0gICAgLy8gSWYgd2UgYWJvcnRlZCB0aGUgcmVxdWVzdCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUg
YmVlbiByZW1vdmVkLgotICAgIG1fcmVxdWVzdExpc3QucmVtb3ZlKHJlcXVlc3QpOwotfQotCi12
b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
cHJwRXJyb3IpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbjo6b25BYm9y
dCIpOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBycEVycm9yOwotICAg
IEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKLQotICAgIGlmIChtX3N0YXRlICE9IEZpbmlz
aGluZykgewotICAgICAgICBBU1NFUlQoZXJyb3IuZ2V0KCkpOwotICAgICAgICBzZXRFcnJvcihE
T01FcnJvcjo6Y3JlYXRlKGVycm9yLT5uYW1lKCkpLCBlcnJvci0+bWVzc2FnZSgpKTsKLQotICAg
ICAgICAvLyBBYm9ydCB3YXMgbm90IHRyaWdnZXJlZCBieSBmcm9udC1lbmQsIHNvIG91dHN0YW5k
aW5nIHJlcXVlc3RzIG11c3QKLSAgICAgICAgLy8gYmUgYWJvcnRlZCBub3cuCi0gICAgICAgIHdo
aWxlICghbV9yZXF1ZXN0TGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gKm1fcmVxdWVzdExpc3QuYmVnaW4oKTsKLSAgICAgICAgICAgIG1f
cmVxdWVzdExpc3QucmVtb3ZlKHJlcXVlc3QpOwotICAgICAgICAgICAgcmVxdWVzdC0+YWJvcnQo
KTsKLSAgICAgICAgfQotICAgICAgICBtX3N0YXRlID0gRmluaXNoaW5nOwotICAgIH0KLQotICAg
IGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3Jl
IDogbV9vYmplY3RTdG9yZUNsZWFudXBNYXApCi0gICAgICAgICAgICBvYmplY3RTdG9yZS5rZXkt
PnNldE1ldGFkYXRhKG9iamVjdFN0b3JlLnZhbHVlKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0
TWV0YWRhdGEobV9wcmV2aW91c01ldGFkYXRhKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+Y2xvc2Uo
KTsKLSAgICB9Ci0gICAgbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuY2xlYXIoKTsKLSAgICBjbG9z
ZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICAvLyBFbnF1ZXVlIGV2ZW50cyBiZWZvcmUgbm90aWZ5aW5n
IGRhdGFiYXNlLCBhcyBkYXRhYmFzZSBtYXkgY2xvc2Ugd2hpY2ggZW5xdWV1ZXMgbW9yZSBldmVu
dHMgYW5kIG9yZGVyIG1hdHRlcnMuCi0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmFib3J0RXZlbnQsIHRydWUsIGZhbHNlKSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25Db21w
bGV0ZSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0
ZSIpOwotICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKLSAgICBtX3N0YXRlID0gRmlu
aXNoaW5nOwotICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7Ci0gICAgY2xvc2VP
cGVuQ3Vyc29ycygpOwotCi0gICAgLy8gRW5xdWV1ZSBldmVudHMgYmVmb3JlIG5vdGlmeWluZyBk
YXRhYmFzZSwgYXMgZGF0YWJhc2UgbWF5IGNsb3NlIHdoaWNoIGVucXVldWVzIG1vcmUgZXZlbnRz
IGFuZCBvcmRlciBtYXR0ZXJzLgotICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbiBhbiBpZGVhbCB3b3Js
ZCwgd2Ugc2hvdWxkIHJldHVybiB0cnVlIGFzIGxvbmcgYXMgYW55b25lIGhhcyBhIG9yIGNhbgot
ICAgIC8vICAgICAgICBnZXQgYSBoYW5kbGUgdG8gdXMgb3IgYW55IGNoaWxkIHJlcXVlc3Qgb2Jq
ZWN0IGFuZCBhbnkgb2YgdGhvc2UgaGF2ZQotICAgIC8vICAgICAgICBldmVudCBsaXN0ZW5lcnMu
IFRoaXMgaXMgIGluIG9yZGVyIHRvIGhhbmRsZSB1c2VyIGdlbmVyYXRlZCBldmVudHMgcHJvcGVy
bHkuCi0gICAgcmV0dXJuIG1faGFzUGVuZGluZ0FjdGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVk
OwotfQotCiBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBJREJUcmFuc2FjdGlvbjo6c3RyaW5n
VG9Nb2RlKGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgaWYgKG1vZGVTdHJpbmcuaXNOdWxsKCkKQEAgLTM2MCw3NCArOTYsNiBAQCBjb25zdCBBdG9t
aWNTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjptb2RlVG9TdHJpbmcoSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGUgbW9kZQogICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRPbmx5KCk7
CiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0
Y2hFdmVudCIpOwotICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKLSAgICBBU1NFUlQo
bV9oYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgbV9zdGF0ZSA9
IEZpbmlzaGVkOwotCi0gICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBmb3IgKGF1
dG8mIG9iamVjdFN0b3JlIDogbV9vYmplY3RTdG9yZU1hcCkKLSAgICAgICAgb2JqZWN0U3RvcmUu
dmFsdWUtPnRyYW5zYWN0aW9uRmluaXNoZWQoKTsKLSAgICBtX29iamVjdFN0b3JlTWFwLmNsZWFy
KCk7Ci0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fZGVsZXRlZE9iamVjdFN0b3JlcykK
LSAgICAgICAgb2JqZWN0U3RvcmUtPnRyYW5zYWN0aW9uRmluaXNoZWQoKTsKLSAgICBtX2RlbGV0
ZWRPYmplY3RTdG9yZXMuY2xlYXIoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+
PiB0YXJnZXRzOwotICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOwotICAgIHRhcmdldHMuYXBwZW5k
KGRiKCkpOwotCi0gICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50IGRpc3Bh
dGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0gICAgQVNTRVJUKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7Ci0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IElE
QkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOwotICAgIC8v
IEZJWE1FOiBUcnkgdG8gY29uc3RydWN0IGEgdGVzdCB3aGVyZSB8dGhpc3wgb3V0bGl2ZXMgb3Bl
bkRCUmVxdWVzdCBhbmQgd2UKLSAgICAvLyBnZXQgYSBjcmFzaC4KLSAgICBpZiAobV9vcGVuREJS
ZXF1ZXN0KSB7Ci0gICAgICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7Ci0gICAgICAgIG1f
b3BlbkRCUmVxdWVzdC0+dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNwYXRjaCgpOwotICAgIH0K
LSAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOwotICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHdlIGNhbiBzdXNwZW5kIGJlZm9yZSB0
aGUgZmlyc3QgcmVxdWVzdCBpcyBzY2hlZHVsZQotICAgIC8vICAgICAgICBhbmQgYWZ0ZXIgdGhl
IGNvbXBsZXRlL2Fib3J0IGV2ZW50IGlzIGVucXVldWVkLgotICAgIHJldHVybiBtX3N0YXRlID09
IEZpbmlzaGVkOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpzdG9wKCkKLXsKLSAgICBtX2Nv
bnRleHRTdG9wcGVkID0gdHJ1ZTsKLQotICAgIGFib3J0KElHTk9SRV9FWENFUFRJT04pOwotfQot
Ci1jb25zdCBjaGFyKiBJREJUcmFuc2FjdGlvbjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICJJREJUcmFuc2FjdGlvbiI7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b246OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9u
IHRyaWVkIHRvIGVucXVldWUgYW4gZXZlbnQgb2YgdHlwZSAlcy4iLCBldmVudC0+dHlwZSgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2ZW50LT5zZXRU
YXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCku
ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kKiBJREJUcmFuc2Fj
dGlvbjo6YmFja2VuZERCKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGIoKS0+YmFja2VuZCgpOwot
fQotCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5oCmluZGV4IDlmMzQzMTQuLjA1ODhkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtMSwyNiArMSwyNiBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIElEQlRyYW5zYWN0aW9uX2gKQEAgLTI5LDExICsy
OSw3IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01FcnJvci5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0j
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC00
MSw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NRXJyb3I7CiBj
bGFzcyBJREJDdXJzb3I7CiBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZDsKQEAgLTQ5LDExICs0Niw5IEBAIGNsYXNzIElEQk9iamVjdFN0b3JlOwogY2xhc3MgSURC
T3BlbkRCUmVxdWVzdDsKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCi1jbGFzcyBJ
REJUcmFuc2FjdGlvbiBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZD
b3VudGVkPElEQlRyYW5zYWN0aW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEs
IHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgSURCVHJhbnNhY3Rpb24gOiBwdWJsaWMg
U2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbj4sIHB1Ymxp
YyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGludDY0X3QsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZU5h
bWVzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgSURCRGF0YWJhc2UqKTsKLSAgICBzdGF0
aWMgUmVmPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGlu
dDY0X3QsIElEQkRhdGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCosIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEmIHByZXZpb3VzTWV0YWRhdGEpOwotICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9u
KCk7CisgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb24oKSB7IH0KIAogICAgIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIG1vZGVSZWFkT25seSgpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIG1vZGVSZWFkV3JpdGUoKTsKQEAgLTY0LDEwMyArNTksMTggQEAgcHVibGljOgogICAg
IHN0YXRpYyBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBzdHJpbmdUb01vZGUoY29uc3QgU3Ry
aW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG1v
ZGVUb1N0cmluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CiAKLSAgICBJREJEYXRhYmFz
ZUJhY2tlbmQqIGJhY2tlbmREQigpIGNvbnN0OwotCi0gICAgaW50NjRfdCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA9PSBBY3RpdmU7IH0KLSAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IEZpbmlzaGVkOyB9Ci0gICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seTsgfQotICAgIGJv
b2wgaXNWZXJzaW9uQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlOyB9Ci0KICAgICAvLyBJbXBsZW1lbnQgdGhl
IElEQlRyYW5zYWN0aW9uIElETAotICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0OwotICAg
IElEQkRhdGFiYXNlKiBkYigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KLSAg
ICBQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0K
LSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmKTsK
LQotICAgIGNsYXNzIE9wZW5DdXJzb3JOb3RpZmllciB7Ci0gICAgcHVibGljOgotICAgICAgICBP
cGVuQ3Vyc29yTm90aWZpZXIoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4sIElEQkN1cnNvciop
OwotICAgICAgICB+T3BlbkN1cnNvck5vdGlmaWVyKCk7Ci0gICAgICAgIHZvaWQgY3Vyc29yRmlu
aXNoZWQoKTsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247Ci0gICAgICAgIElEQkN1cnNvciogbV9jdXJzb3I7Ci0gICAgfTsKLQotICAg
IHZvaWQgcmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVlc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJS
ZXF1ZXN0KElEQlJlcXVlc3QqKTsKLSAgICB2b2lkIG9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBT
dHJpbmcmLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPik7Ci0gICAgdm9pZCBvYmplY3RTdG9y
ZURlbGV0ZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7Ci0gICAg
dm9pZCBzZXRFcnJvcihQYXNzUmVmUHRyPERPTUVycm9yPiwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpOwotCi0gICAgdm9pZCBvbkFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
OwotICAgIHZvaWQgb25Db21wbGV0ZSgpOwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gSURCVHJhbnNhY3Rpb25FdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0K
LSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsgfQotCi0gICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7
Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJy
aWRlOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIElEQkRhdGFiYXNlKiBkYigpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RE9NRXJyb3I+IGVycm9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhYm9ydChFeGNlcHRp
b25Db2RlJikgPSAwOwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbj46OnJl
ZjsKICAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPjo6ZGVyZWY7CiAKLXByaXZh
dGU6Ci0gICAgSURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGludDY0X3Qs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIElEQkRh
dGFiYXNlKiwgSURCT3BlbkRCUmVxdWVzdCosIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsK
LQotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2b2lkIGNs
b3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNv
ciopOwotICAgIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKik7Ci0KLSAgICAv
LyBBY3RpdmVET01PYmplY3QgQVBJLgotICAgIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGNvbnN0IGNo
YXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIEV2ZW50
VGFyZ2V0IEFQSS4KLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7
IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7
IGRlcmVmKCk7IH0KLQotICAgIGVudW0gU3RhdGUgewotICAgICAgICBJbmFjdGl2ZSwgLy8gQ3Jl
YXRlZCBvciBzdGFydGVkLCBidXQgbm90IGluIGFuIGV2ZW50IGNhbGxiYWNrCi0gICAgICAgIEFj
dGl2ZSwgLy8gQ3JlYXRlZCBvciBzdGFydGVkLCBpbiBjcmVhdGlvbiBzY29wZSBvciBhbiBldmVu
dCBjYWxsYmFjawotICAgICAgICBGaW5pc2hpbmcsIC8vIEluIHRoZSBwcm9jZXNzIG9mIGFib3J0
aW5nIG9yIGNvbXBsZXRpbmcuCi0gICAgICAgIEZpbmlzaGVkLCAvLyBObyBtb3JlIGV2ZW50cyB3
aWxsIGZpcmUgYW5kIG5vIG5ldyByZXF1ZXN0cyBtYXkgYmUgZmlsZWQuCi0gICAgfTsKLQotICAg
IGludDY0X3QgbV9pZDsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci0gICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4gbV9vYmplY3RTdG9yZU5hbWVzOwotICAgIElEQk9wZW5EQlJl
cXVlc3QqIG1fb3BlbkRCUmVxdWVzdDsKLSAgICBjb25zdCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSBtX21vZGU7Ci0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBib29sIG1faGFzUGVuZGluZ0Fj
dGl2aXR5OwotICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKLSAgICBSZWZQdHI8RE9NRXJyb3I+
IG1fZXJyb3I7Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotCi0gICAgTGlzdEhhc2hTZXQ8
UmVmUHRyPElEQlJlcXVlc3Q+PiBtX3JlcXVlc3RMaXN0OwotCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPElEQk9iamVjdFN0b3JlPj4gSURCT2JqZWN0U3RvcmVNYXA7Ci0gICAg
SURCT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZU1hcDsKLQotICAgIHR5cGVkZWYgSGFzaFNl
dDxSZWZQdHI8SURCT2JqZWN0U3RvcmU+PiBJREJPYmplY3RTdG9yZVNldDsKLSAgICBJREJPYmpl
Y3RTdG9yZVNldCBtX2RlbGV0ZWRPYmplY3RTdG9yZXM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8
UmVmUHRyPElEQk9iamVjdFN0b3JlPiwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gSURCT2JqZWN0
U3RvcmVNZXRhZGF0YU1hcDsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhTWFwIG1fb2JqZWN0
U3RvcmVDbGVhbnVwTWFwOwotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbV9wcmV2aW91c01ldGFk
YXRhOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3IqPiBtX29wZW5DdXJzb3JzOworcHJvdGVjdGVk
OgorICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAppbmRleCBlYjYyODcxLi5jYzg5YzUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRs
CkBAIC0zMSw2ICszMSw3IEBACiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAgSlNHZW5l
cmF0ZVRvTmF0aXZlT2JqZWN0LAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAorICAg
IFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCVHJhbnNhY3Rpb24gOiBFdmVu
dFRhcmdldCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtb2RlOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBJREJEYXRhYmFzZSBkYjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWJhODdjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCU2Vy
dmVyQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlv
bnMuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZCog
ZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi17Ci0gICAgSGFzaFNldDxpbnQ2NF90PiBv
YmplY3RTdG9yZUhhc2hTZXQ7Ci0gICAgZm9yIChhdXRvJiBpZCA6IG9iamVjdFN0b3JlSWRzKQot
ICAgICAgICBvYmplY3RTdG9yZUhhc2hTZXQuYWRkKGlkKTsKLQotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZChkYXRhYmFzZUJhY2tlbmQsIGlkLCBjYWxsYmFj
a3MsIG9iamVjdFN0b3JlSGFzaFNldCwgbW9kZSkpOwotfQotCi1JREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFj
a2VuZCwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUgbW9kZSkKLSAgICA6IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJ
ZHMpCi0gICAgLCBtX21vZGUobW9kZSkKLSAgICAsIG1fc3RhdGUoVW5vcGVuZWQpCi0gICAgLCBt
X2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAg
LCBtX2RhdGFiYXNlKGRhdGFiYXNlQmFja2VuZCkKLSAgICAsIG1fdGFza1RpbWVyKCp0aGlzLCAm
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp0YXNrVGltZXJGaXJlZCkKLSAgICAsIG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMoMCkKLSAgICAsIG1faWQoaWQpCi17Ci0gICAgLy8gV2UgcGFzcyBhIHJl
ZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVs
YXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0KLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwotCi0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gYmFja2VuZCh0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT5zZXJ2
ZXJDb25uZWN0aW9uKCkub3BlblRyYW5zYWN0aW9uKGlkLCBvYmplY3RTdG9yZUlkcywgbW9kZSwg
W2JhY2tlbmRdKGJvb2wgc3VjY2VzcykgewotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2JhY2tlbmRdKCkgewotICAgICAgICAgICAgICAgIGJh
Y2tlbmQtPmFib3J0KCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdHJhbnNhY3Rp
b24gd2FzIGFib3J0ZWQgYmVmb3JlIHRoZSBzZXJ2ZXIgY29ubmVjdGlvbiBmaW5pc2hlZCBvcGVu
aW5nIHRoZSB0cmFuc2FjdGlvbi4KLSAgICAgICAgaWYgKGJhY2tlbmQtPm1fc3RhdGUgPT0gRmlu
aXNoZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYmFja2VuZC0+bV9zdGF0ZSA9
IFVudXNlZDsKLSAgICAgICAgaWYgKGJhY2tlbmQtPmhhc1BlbmRpbmdUYXNrcygpKQotICAgICAg
ICAgICAgYmFja2VuZC0+c3RhcnQoKTsKLSAgICB9KTsKLX0KLQotSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kKCkKLXsKLSAgICAvLyBJdCBzaG91bGRuJ3QgYmUg
cG9zc2libGUgZm9yIHRoaXMgb2JqZWN0IHRvIGdldCBkZWxldGVkIHVubGVzcyBpdCdzIHVudXNl
ZCwgY29tcGxldGUsIG9yIGFib3J0ZWQuCi0gICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQg
fHwgbV9zdGF0ZSA9PSBVbnVzZWQpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdHlwZSwgUGFzc1JlZlB0
cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+
IGFib3J0VGFzaykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHR5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrKQot
ICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgZWxzZQotICAgICAgICBtX3By
ZWVtcHRpdmVUYXNrUXVldWUuYXBwZW5kKHRhc2spOwotCi0gICAgaWYgKGFib3J0VGFzaykKLSAg
ICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7Ci0KLSAgICBpZiAobV9z
dGF0ZSA9PSBVbm9wZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3RhdGUgPT0g
VW51c2VkKQotICAgICAgICBzdGFydCgpOwotICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gUnVubmlu
ZyAmJiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV90YXNrVGltZXIuc3RhcnRP
bmVTaG90KDApOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQoKQotewot
ICAgIGFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgKHVua25vd24gY2F1c2UpIikpOwotfQotCi12
b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBlcnJvcikKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKGVycm9yKQotICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQgLSAoJXMpICVzIiwg
ZXJyb3ItPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBlcnJvci0+bWVzc2FnZSgpLnV0ZjgoKS5kYXRh
KCkpOwotICAgIGVsc2UKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmFib3J0IChubyBlcnJvcikiKTsKLSNlbmRpZgotCi0gICAgaWYgKG1fc3RhdGUgPT0g
RmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3Rh
dGUgPT0gUnVubmluZzsKLQotICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVj
dCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKLSAgICAvLyBhYm9ydCBzdGVw
cyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNl
bHZlcwotICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KLSAgICBSZWY8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIG1fc3RhdGUgPSBG
aW5pc2hlZDsKLSAgICBtX3Rhc2tUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAod2FzUnVubmluZykK
LSAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJvbGxiYWNrVHJhbnNhY3Rp
b25TeW5jKG1faWQpOwotCi0gICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgotICAg
IHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPElE
QlN5bmNocm9ub3VzT3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkp
OwotICAgICAgICB0YXNrLT5wZXJmb3JtKCk7Ci0gICAgfQotCi0gICAgLy8gQmFja2luZyBzdG9y
ZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMpIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNj
cmlwdCBjYWxsYmFja3MKLSAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tz
IG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5nIHN0b3JlCi0gICAg
Ly8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGljYWwuCi0gICAgY2xv
c2VPcGVuQ3Vyc29ycygpOwotCi0gICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJl
c2V0VHJhbnNhY3Rpb25TeW5jKG1faWQpOwotCi0gICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxz
byBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVk
LCBhcwotICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlv
bnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgQVNTRVJUKCFt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2UgPSBtX2RhdGFiYXNlLnJlbGVhc2UoKTsKLQotICAg
IGlmIChtX2NhbGxiYWNrcykKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoaWQoKSwgZXJy
b3IpOwotCi0gICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRo
aXMpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6aXNUYXNrUXVldWVFbXB0eSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5pc0VtcHR5KCkgJiYg
bV90YXNrUXVldWUuaXNFbXB0eSgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
aGFzUGVuZGluZ1Rhc2tzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wZW5kaW5nUHJlZW1wdGl2
ZUV2ZW50cyB8fCAhaXNUYXNrUXVldWVFbXB0eSgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmQqIGN1cnNvcikKLXsK
LSAgICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCogY3Vyc29yKQot
ewotICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpydW4oKQotewotICAgIC8vIFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgaGFz
IHN0YXJ0ZWQgdGhpcyB0cmFuc2FjdGlvbi4gU2NoZWR1bGUgYSB0aW1lcgotICAgIC8vIHRvIHBy
b2Nlc3MgdGhlIGZpcnN0IHRhc2suCi0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5n
IHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2
ZSgpKTsKLQotICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVz
ZWQpOwotCi0gICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKLSAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZDo6Y29tbWl0KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0
aW9uQmFja2VuZDo6Y29tbWl0IHRyYW5zYWN0aW9uICVsbGkgaW4gc3RhdGUgJXUiLCBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KG1faWQpLCBtX3N0YXRlKTsKLQotICAgIC8vIEluIG11bHRpcHJvY2Vz
cyBwb3J0cywgZnJvbnQtZW5kIG1heSBoYXZlIHJlcXVlc3RlZCBhIGNvbW1pdCBidXQgYW4gYWJv
cnQgaGFzIGFscmVhZHkKLSAgICAvLyBiZWVuIGluaXRpYXRlZCBhc3luY2hyb25vdXNseSBieSB0
aGUgYmFjay1lbmQuCi0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChtX3N0YXRlID09IFVub3BlbmVkIHx8IG1fc3RhdGUgPT0gVW51c2Vk
IHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLQot
ICAgIC8vIEZyb250LWVuZCBoYXMgcmVxdWVzdGVkIGEgY29tbWl0LCBidXQgdGhlcmUgbWF5IGJl
IHRhc2tzIGxpa2UgY3JlYXRlSW5kZXggd2hpY2gKLSAgICAvLyBhcmUgY29uc2lkZXJlZCBzeW5j
aHJvbm91cyBieSB0aGUgZnJvbnQtZW5kIGJ1dCBhcmUgcHJvY2Vzc2VkIGFzeW5jaHJvbm91c2x5
LgotICAgIGlmIChoYXNQZW5kaW5nVGFza3MoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IklEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y29tbWl0IC0gTm90IGNvbW1pdHRpbmcgbm93LCB0cmFu
c2FjdGlvbiBzdGlsbCBoYXMgcGVuZGluZyB0YXNrcyAoVHJhbnNhY3Rpb24gJWxsaSkiLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KG1faWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hp
bGUgcGVyZm9ybWluZyB0aGUKLSAgICAvLyBjb21taXQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9y
ZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3
aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZD4gYmFja2VuZCh0aGlzKTsKLQotICAgIGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVz
ZWQgfHwgbV9zdGF0ZSA9PSBVbm9wZW5lZDsKLSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0KLSAg
ICBib29sIGNvbW1pdHRlZCA9IHVudXNlZDsKLQotICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5l
Y3Rpb24oKS5jb21taXRUcmFuc2FjdGlvbihtX2lkLCBbYmFja2VuZCwgdGhpcywgY29tbWl0dGVk
LCB1bnVzZWRdKGJvb2wgc3VjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAgIC8vIFRoaXMgbWlnaHQg
YmUgY29tbWl0VHJhbnNhY3Rpb24gcmVxdWVzdCBhYm9ydGluZyBkdXJpbmcgb3IgYWZ0ZXIgc3lu
Y2hyb25vdXMgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydCgpIGNhbGwuCi0gICAgICAgIC8v
IFRoaXMgY2FuIGVhc2lseSBoYXBwZW4gaWYgdGhlIHBhZ2UgaXMgbmF2aWdhdGVkIGJlZm9yZSBh
bGwgdHJhbnNhY3Rpb25zIGZpbmlzaC4KLSAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGhhdmUg
bm8gZnVydGhlciBjbGVhbnVwIGFuZCBkb24ndCBuZWVkIHRvIG1ha2UgYW55IGNhbGxiYWNrcy4K
LSAgICAgICAgaWYgKCFtX2RhdGFiYXNlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXN1Y2Nlc3Mp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY29tbWl0dGVkIHw9
IHN1Y2Nlc3M7Ci0KLSAgICAgICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlh
IGN1cnNvcnMpIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKLSAgICAg
ICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZl
cmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQotICAgICAgICAvLyBpdHNlbGYgdG8g
YmUgcmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KLSAgICAgICAgY2xvc2VPcGVuQ3Vy
c29ycygpOwotCi0gICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRy
YW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKLQotICAgICAgICAvLyBUcmFuc2FjdGlvbnMgbXVz
dCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90
aWZpZWQsIGFzCi0gICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tz
IG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgotICAgICAgICBpZiAoIXVudXNl
ZCkKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlk
RmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
RmluaXNoZWQodGhpcyk7Ci0KLSAgICAgICAgaWYgKGNvbW1pdHRlZCkgewotICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uQ29tcGxldGUoaWQoKSk7Ci0gICAgICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7Ci0gICAgICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOwotICAgIH0pOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6dGFza1RpbWVyRmlyZWQoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp0YXNrVGltZXJGaXJlZCIpOwotCi0gICAgaWYgKG1fc3Rh
dGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rp
b24oKS5iZWdpblRyYW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKLSAgICAgICAgbV9zdGF0ZSA9
IFJ1bm5pbmc7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIGEgdGFzay4KLSAgICAvLyBUYWtl
IGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9iamVjdCBhbGl2ZSBzbyB0aGF0IHRhc2tz
IGNhbgotICAgIC8vIHN1Y2Nlc3NmdWxseSBtYWtlIHRoZWlyIGNvbXBsZXRpb24gY2FsbGJhY2tz
LgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNlbGYodGhpcyk7Ci0KLSAgICBU
YXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVl
bXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwotICAgIGlmICghdGFza1F1ZXVlLT5pc0Vt
cHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9
PSBSdW5uaW5nKTsKLSAgICAgICAgUmVmUHRyPElEQk9wZXJhdGlvbj4gdGFzayh0YXNrUXVldWUt
PnRha2VGaXJzdCgpKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybShbc2VsZiwgdGhpcywgdGFza10o
KSB7Ci0gICAgICAgICAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVu
ZGluZyB0YXNrcywgd2UgaGF2ZW4ndCBhbHJlYWR5IGNvbW1pdHRlZC9hYm9ydGVkLAotICAgIC8v
IGFuZCB0aGUgZnJvbnQtZW5kIHJlcXVlc3RlZCBhIGNvbW1pdCwgaXQgaXMgbm93IHNhZmUgdG8g
ZG8gc28uCi0gICAgaWYgKCFoYXNQZW5kaW5nVGFza3MoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVk
ICYmIG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgY29tbWl0KCk7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kOjpjbG9zZU9wZW5DdXJzb3JzKCkKLXsKLSAgICBmb3IgKGF1dG8mIGN1
cnNvciA6IG1fb3BlbkN1cnNvcnMpCi0gICAgICAgIGN1cnNvci0+Y2xvc2UoKTsKLSAgICBtX29w
ZW5DdXJzb3JzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hl
ZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNrKENyZWF0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSksIENyZWF0
ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFk
YXRhLmlkKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZURlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSksIERlbGV0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxi
YWNrcywgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1
bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJzaW9uKSk7
Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNyZWF0ZUluZGV4T3Bl
cmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKLXsKLSAgICBzY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSwgQ3JlYXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEuaWQp
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlSW5kZXhP
cGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
bmRleE1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkp
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVHZXRPcGVyYXRpb24o
Y29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi17Ci0gICAgc2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG1ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwg
Y2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVB1
dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFk
YXRhLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIHNjaGVkdWxlVGFzayhQdXRP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBw
dXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVf
dCBpbmRleENvdW50KQotewotICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlBy
ZWVtcHRpdmVUYXNrLCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRl
eENvdW50KSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZU9wZW5D
dXJzb3JPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
biBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29y
VHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgc2NoZWR1bGVUYXNrKENvdW50T3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxi
YWNrcykpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVS
YW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAg
IHNjaGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0
b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgc2NoZWR1
bGVUYXNrKENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9y
ZUlkLCBjYWxsYmFja3MpKTsKLX0KLQotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNi
OWVmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRfaAotI2RlZmluZSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5j
bHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kOwotY2xh
c3MgSURCRGF0YWJhc2VDYWxsYmFja3M7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZCA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBjcmVhdGUoSURCRGF0YWJhc2VCYWNr
ZW5kKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUpOwotICAgIH5JREJUcmFuc2FjdGlvbkJhY2tlbmQoKTsKLQotICAgIHZv
aWQgY29tbWl0KCk7Ci0gICAgdm9pZCBhYm9ydCgpOwotICAgIHZvaWQgYWJvcnQoUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUVycm9yPik7Ci0KLSAgICB2b2lkIHJ1bigpOwotICAgIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlIG1vZGUoKSBjb25zdCAgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgY29u
c3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUoKSBjb25zdCAgeyByZXR1cm4gbV9vYmplY3RTdG9y
ZUlkczsgfQotCi0gICAgdm9pZCBzY2hlZHVsZVRhc2soUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+
IHRhc2ssIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGFib3J0VGFzayA9IG51
bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdGFz
aywgYWJvcnRUYXNrKTsgfQotICAgIHZvaWQgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2Vu
ZDo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiwgUGFzc1JlZlB0cjxJREJTeW5j
aHJvbm91c09wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7Ci0KLSAgICB2b2lkIHJlZ2lz
dGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyT3Bl
bkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKik7Ci0KLSAgICB2b2lkIGFkZFByZWVtcHRpdmVFdmVu
dCgpICB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQotICAgIHZvaWQgZGlkQ29tcGxl
dGVQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VS
VChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9Ci0KLSAgICBJREJEYXRhYmFzZUJh
Y2tlbmQmIGRhdGFiYXNlKCkgY29uc3QgIHsgcmV0dXJuICptX2RhdGFiYXNlOyB9Ci0KLSAgICB2
b2lkIHNjaGVkdWxlQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYpOwotICAgIHZvaWQgc2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
bihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7Ci0gICAgdm9pZCBzY2hlZHVsZVZlcnNp
b25DaGFuZ2VPcGVyYXRpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBJREJE
YXRhYmFzZU1ldGFkYXRhJik7Ci0gICAgdm9pZCBzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9u
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwotICAgIHZv
aWQgc2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmKTsKLSAgICB2b2lkIHNjaGVkdWxlR2V0T3BlcmF0aW9uKGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHNjaGVkdWxlUHV0T3BlcmF0aW9u
KGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
dmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jik7Ci0gICAgdm9pZCBzY2hlZHVsZVNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCk7Ci0gICAgdm9pZCBzY2hlZHVsZU9wZW5D
dXJzb3JPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgc2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBzY2hlZHVsZURlbGV0ZVJhbmdl
T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBzY2hlZHVsZUNsZWFyT2JqZWN0
U3RvcmVPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOwotCi0gICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotcHJp
dmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiwgaW50
NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8
aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7Ci0K
LSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgVW5vcGVuZWQsIC8vIEJhY2tpbmcgc3RvcmUgdHJh
bnNhY3Rpb24gbm90IHlldCBjcmVhdGVkLgotICAgICAgICBVbnVzZWQsIC8vIEJhY2tpbmcgc3Rv
cmUgdHJhbnNhY3Rpb24gY3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KLSAgICAgICAgU3RhcnRQ
ZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24g
bm90IHlldCBzdGFydGVkLgotICAgICAgICBSdW5uaW5nLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5z
YWN0aW9uIHN0YXJ0ZWQgYnV0IG5vdCB5ZXQgZmluaXNoZWQuCi0gICAgICAgIEZpbmlzaGVkLCAv
LyBFaXRoZXIgYWJvcnRlZCBvciBjb21taXR0ZWQuCi0gICAgfTsKLQotICAgIHZvaWQgc3RhcnQo
KTsKLQotICAgIGJvb2wgaXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0OwotICAgIGJvb2wgaGFzUGVu
ZGluZ1Rhc2tzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7Ci0gICAgdm9p
ZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBjb25zdCBIYXNoU2V0PGludDY0X3Q+IG1fb2Jq
ZWN0U3RvcmVJZHM7Ci0gICAgY29uc3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2Rl
OwotCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKLSAgICBS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2U7Ci0KLSAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxJ
REJPcGVyYXRpb24+PiBUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOwotICAg
IFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7Ci0gICAgRGVxdWU8UmVmUHRyPElEQlN5
bmNocm9ub3VzT3BlcmF0aW9uPj4gbV9hYm9ydFRhc2tRdWV1ZTsKLQotICAgIC8vIEZJWE1FOiBk
ZWxldGUgdGhlIHRpbWVyIG9uY2Ugd2UgaGF2ZSB0aHJlYWRzIGluc3RlYWQuCi0gICAgVGltZXIg
bV90YXNrVGltZXI7Ci0gICAgaW50IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHM7Ci0KLSAgICBI
YXNoU2V0PElEQkN1cnNvckJhY2tlbmQqPiBtX29wZW5DdXJzb3JzOwotCi0gICAgaW50NjRfdCBt
X2lkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDRmNjg3YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCIKLQotI2luY2x1ZGUgIklE
QkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2lu
Y2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCUmVjb3JkSWRlbnRpZmllci5oIgot
I2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNkZWZpbmUgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0sgc3RkOjpmdW5j
dGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBvcGVyYXRpb25DYWxsYmFj
ayA9IFwKLSAgICBbb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsgXAotICAgICAgICBpZiAoZXJyb3IpIFwKLSAgICAgICAg
ICAgIG9wZXJhdGlvbi0+bV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOyBcCi0gICAgICAgIGNv
bXBsZXRpb25DYWxsYmFjaygpOyBcCi0gICAgfTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12
b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVP
YmplY3RTdG9yZU9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPENyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FM
TEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24o
KS5jcmVhdGVPYmplY3RTdG9yZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxi
YWNrKTsKLX0KLQotdm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
Q3JlYXRlSW5kZXhPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxDcmVhdGVJbmRleE9wZXJhdGlv
bj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNL
OwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY3Jl
YXRlSW5kZXgoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Ci19Ci0K
LXZvaWQgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5yZW1vdmVJbmRleChtX29iamVjdFN0b3JlSUQsIG1faW5kZXhJRCk7Ci19
Ci0KLXZvaWQgRGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZUlu
ZGV4T3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8RGVsZXRlSW5kZXhPcGVyYXRpb24+IG9wZXJh
dGlvbih0aGlzKTsKLSAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKLQotICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZUluZGV4
KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIERl
bGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuYWRkSW5kZXgobV9vYmplY3RTdG9yZUlELCBtX2luZGV4TWV0YWRhdGEsIElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCk7Ci19Ci0KLXZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJHZXRPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxHZXRPcGVyYXRpb24+IG9wZXJh
dGlvbih0aGlzKTsKLSAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKLQotICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmdldCgqbV90cmFu
c2FjdGlvbiwgKnRoaXMsIFt0aGlzLCBvcGVyYXRpb24sIG9wZXJhdGlvbkNhbGxiYWNrXShjb25z
dCBJREJHZXRSZXN1bHQmIHJlc3VsdCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBwcnBF
cnJvcikgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBwcnBFcnJv
cjsKLQotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihlcnJvcik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFyZXN1bHQudmFsdWVC
dWZmZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmtleURhdGEuaXNOdWxsKQotICAg
ICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHJlc3Vs
dC5rZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5rZXlEYXRhLmlzTnVsbCkKLSAgICAgICAgICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhyZXN1bHQudmFsdWVCdWZmZXIsIHJlc3VsdC5r
ZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCksIHJlc3VsdC5rZXlQYXRoKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MocmVz
dWx0LnZhbHVlQnVmZmVyLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIG9wZXJhdGlvbkNhbGxiYWNrKGVycm9yLnJlbGVhc2UoKSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9u
Q2FsbGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJQdXRPcGVyYXRpb24iKTsKLSAgICBB
U1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
OjpSZWFkT25seSk7Ci0gICAgQVNTRVJUKG1faW5kZXhJRHMuc2l6ZSgpID09IG1faW5kZXhLZXlz
LnNpemUoKSk7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5wdXQoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBbdGhpcywgY29tcGxldGlvbkNhbGxiYWNr
XShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBy
cEVycm9yKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBycEVy
cm9yOwotICAgICAgICBpZiAoa2V5KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWVycm9yKTsKLSAg
ICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5KTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChlcnJvcik7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25F
cnJvcihlcnJvcik7Ci0gICAgICAgIH0KLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24iKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9pbmRleENvdW50OyArK2kpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmRpZENvbXBs
ZXRlUHJlZW1wdGl2ZUV2ZW50KCk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRpb25D
YWxsYmFjayk7Ci19Ci0KLXZvaWQgT3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiT3BlbkN1cnNvck9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPE9wZW5DdXJzb3JPcGVyYXRp
b24+IG9wZXJhdGlvbih0aGlzKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gW3RoaXMsIG9wZXJhdGlv
biwgY29tcGxldGlvbkNhbGxiYWNrXShpbnQ2NF90IGN1cnNvcklELCBQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IHZhbHVlQnVmZmVyLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7
Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3Io
ZXJyb3IpOwotICAgICAgICB9IGVsc2UgaWYgKCFrZXkpIHsKLSAgICAgICAgICAgIC8vIElmIHRo
ZXJlJ3Mgbm8gZXJyb3IgYnV0IGFsc28gbm8ga2V5LCB0aGVuIHRoZSBjdXJzb3IgaGFkIG5vIHJl
Y29yZHMuCi0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNo
YXJlZEJ1ZmZlcio+KG51bGxwdHIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kOjpjcmVhdGUo
Y3Vyc29ySUQsIG1fY3Vyc29yVHlwZSwgbV90YXNrVHlwZSwgKm1fdHJhbnNhY3Rpb24sIG1fb2Jq
ZWN0U3RvcmVJRCk7Ci0gICAgICAgICAgICBjdXJzb3ItPnVwZGF0ZUN1cnNvckRhdGEoa2V5Lmdl
dCgpLCBwcmltYXJ5S2V5LmdldCgpLCB2YWx1ZUJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAgfTsKLQotICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLm9wZW5DdXJzb3IoKm1fdHJhbnNhY3Rpb24s
ICp0aGlzLCBjYWxsYmFjayk7Ci19Ci0KLXZvaWQgQ291bnRPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIkNvdW50T3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8Q291bnRPcGVyYXRpb24+IG9w
ZXJhdGlvbih0aGlzKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29t
cGxldGlvbkNhbGxiYWNrXShpbnQ2NF90IGNvdW50LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgTGV2ZWxEQiBwb3J0IG5ldmVyIGhhZCBhbiBl
cnJvciBjb25kaXRpb24gZm9yIHRoZSBjb3VudCBvcGVyYXRpb24uCi0gICAgICAgIC8vIFdlIHBy
b2JhYmx5IG5lZWQgdG8gc3VwcG9ydCBhbiBlcnJvciBmb3IgdGhlIGNvdW50IG9wZXJhdGlvbiwg
YnJlYWtpbmcgdGhlIExldmVsREIgcG9ydC4KLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhjb3VudCk7Ci0KLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAgfTsKLQotICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNvdW50KCptX3Ry
YW5zYWN0aW9uLCAqdGhpcywgY2FsbGJhY2spOwotfQotCi12b2lkIERlbGV0ZVJhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOwotCi0gICAgUmVm
UHRyPERlbGV0ZVJhbmdlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgYXV0byBjYWxs
YmFjayA9IFt0aGlzLCBvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAg
ICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLQotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2so
KTsKLSAgICB9OwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVsZXRlUmFuZ2UoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBjYWxsYmFjayk7Ci19Ci0K
LXZvaWQgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiQ2xlYXJP
YmplY3RTdG9yZU9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVPcGVy
YXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLQotICAgIGF1dG8gY2xlYXJDYWxsYmFjayA9IFt0aGlz
LCBvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBwcnBFcnJvcikgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ig
PSBwcnBFcnJvcjsKLQotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVy
cm9yLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2VzcygpOwotCi0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOwotICAgIH07Ci0K
LSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jbGVhck9i
amVjdFN0b3JlKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgY2xlYXJDYWxsYmFjayk7Ci19Ci0KLXZv
aWQgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZU9i
amVjdFN0b3JlT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8RGVsZXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLSAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxM
QkFDSzsKLQotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigp
LmRlbGV0ZU9iamVjdFN0b3JlKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJh
Y2spOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlv
bjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiVmVyc2lvbkNoYW5nZU9wZXJhdGlvbiIpOwotCi0gICAgdWlu
dDY0X3Qgb2xkVmVyc2lvbiA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkubWV0YWRhdGEoKS52
ZXJzaW9uOwotICAgIGlmIChvbGRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50
VmVyc2lvbikKLSAgICAgICAgb2xkVmVyc2lvbiA9IDA7Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZlcnNpb24pID4gb2xkVmVyc2lvbik7Ci0K
LSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IG9w
ZXJhdGlvbkNhbGxiYWNrID0gW29sZFZlcnNpb24sIG9wZXJhdGlvbiwgdGhpcywgY29tcGxldGlv
bkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKSB7Ci0gICAg
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBycEVycm9yOwotICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAg
ICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5oYXNQZW5kaW5n
U2Vjb25kSGFsZk9wZW4oKSk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNldEN1cnJlbnRWZXJzaW9uKG1fdmVyc2lvbik7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihzdGQ6Om1ha2VfdW5pcXVlPElE
QlBlbmRpbmdPcGVuQ2FsbD4oKm1fY2FsbGJhY2tzLCAqbV9kYXRhYmFzZUNhbGxiYWNrcywgbV90
cmFuc2FjdGlvbi0+aWQoKSwgbV92ZXJzaW9uKSk7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sICZtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLCBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLm1ldGFkYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAg
IGNvbXBsZXRpb25DYWxsYmFjaygpOwotICAgIH07Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jaGFuZ2VEYXRhYmFzZVZlcnNpb24oKm1fdHJhbnNh
Y3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Ci19Ci0KLXZvaWQgQ3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5yZW1vdmVPYmplY3RTdG9yZShtX29iamVjdFN0b3JlSUQpOwotfQotCi12b2lkIERl
bGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuYWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJh
bnNhY3Rpb24tPmRhdGFiYXNlKCkuc2V0Q3VycmVudFZlcnNpb24obV9wcmV2aW91c0ludFZlcnNp
b24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxMDk3OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9uc19oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnNfaAotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5j
bHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgi
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBJREJTZXJ2ZXJDb25uZWN0aW9uOwotCi1jbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJy
aWRlIGZpbmFsOwotCi0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3Rv
cmVNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsgfQotCi1w
cml2YXRlOgotICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlTWV0YWRhdGEpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAg
ICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rp
b247Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRh
dGE7Ci19OwotCi1jbGFzcyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJP
cGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZU1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNh
Y3Rpb24uZ2V0KCk7IH0KLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZU1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZU1ldGFkYXRhOyB9Ci0K
LXByaXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0
U3RvcmVNZXRhZGF0YSkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgIHsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9u
OwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRh
OwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
IDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVy
YXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
dmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBv
dmVycmlkZSBmaW5hbDsKLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9Ci0gICAgaW50NjRfdCB2ZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgSURCRGF0YWJhc2VDYWxsYmFj
a3MqIGRhdGFiYXNlQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNr
cy5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQotICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tz
KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3Ry
YW5zYWN0aW9uOwotICAgIGludDY0X3QgbV92ZXJzaW9uOwotICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRh
YmFzZUNhbGxiYWNrczsKLX07Ci0KLWNsYXNzIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KCkgb3ZlcnJpZGUgZmluYWw7Ci1wcml2YXRlOgotICAgIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci19OwotCi1jbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2Jq
ZWN0U3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFsOwotcHJpdmF0ZToKLSAg
ICBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0
YWRhdGEpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBt
X29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNz
IElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGlj
IElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlN5
bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRW
ZXJzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBwcmV2aW91c1ZlcnNpb24sIHByZXZpb3VzSW50
VmVyc2lvbikpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZp
bmFsOwotcHJpdmF0ZToKLSAgICBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24s
IGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCi0gICAgICAgICwgbV9wcmV2aW91c1ZlcnNpb24ocHJldmlvdXNWZXJzaW9uKQot
ICAgICAgICAsIG1fcHJldmlvdXNJbnRWZXJzaW9uKHByZXZpb3VzSW50VmVyc2lvbikKLSAgICB7
Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlv
bjsKLSAgICBTdHJpbmcgbV9wcmV2aW91c1ZlcnNpb247Ci0gICAgaW50NjRfdCBtX3ByZXZpb3Vz
SW50VmVyc2lvbjsKLX07Ci0KLWNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVhdGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBm
aW5hbDsKLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmVJRDsgfQotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2luZGV4TWV0YWRhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBD
cmVhdGVJbmRleE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29i
amVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5k
ZXhNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsK
LSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKLX07Ci0KLWNsYXNz
IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRp
b24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBvdmVycmlkZSBm
aW5hbDsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAs
IG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJRChpbmRl
eElkKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwot
ICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOwotfTsKLQotY2xhc3MgRGVsZXRlSW5kZXhPcGVy
YXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElE
Qk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERlbGV0ZUluZGV4T3BlcmF0
aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2Fs
bGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29u
c3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaWRiSW5kZXhNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRhZGF0YTsgfQot
Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1f
aW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3Qg
bV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFk
YXRhOwotfTsKLQotY2xhc3MgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJT
eW5jaHJvbm91c09wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJTeW5jaHJv
bm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24s
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRh
ZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERlbGV0ZUluZGV4QWJv
cnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBvdmVycmlkZSBmaW5hbDsKLXByaXZh
dGU6Ci0gICAgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRh
dGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
LSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2lu
ZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0
YTsKLX07Ci0KLWNsYXNzIEdldE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBHZXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG1ldGFkYXRhLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2Fs
bGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29u
c3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9Ci0gICAgaW50NjRfdCBpbmRleElEKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleElEOyB9Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNv
clR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KLSAgICBJREJLZXlSYW5nZSog
a2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgpOyB9Ci0gICAgYm9vbCBh
dXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9hdXRvSW5jcmVtZW50OyB9Ci0gICAgSURC
S2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9Ci0KLXByaXZhdGU6
Ci0gICAgR2V0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwg
bV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElEKGluZGV4
SWQpCi0gICAgICAgICwgbV9rZXlQYXRoKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0
U3RvcmVJZCkua2V5UGF0aCkKLSAgICAgICAgLCBtX2F1dG9JbmNyZW1lbnQobWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5hdXRvSW5jcmVtZW50KQotICAgICAgICAsIG1f
a2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0g
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgICAgIEFT
U0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmlkID09IG9iamVj
dFN0b3JlSWQpOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1f
dHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29u
c3QgaW50NjRfdCBtX2luZGV4SUQ7Ci0gICAgY29uc3QgSURCS2V5UGF0aCBtX2tleVBhdGg7Ci0g
ICAgY29uc3QgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJh
bmdlPiBtX2tleVJhbmdlOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNv
clR5cGU7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19Owot
Ci1jbGFzcyBQdXRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElE
QkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUHV0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwg
cHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2sp
IG92ZXJyaWRlIGZpbmFsOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3B1dE1vZGU7IH0KLSAgICBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0K
LSAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9Ci0gICAgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRHM7
IH0KLSAgICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleEtleXM7IH0KLSAgICBTaGFyZWRCdWZmZXIqIHZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIFB1dE9wZXJhdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5k
ZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCi0gICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0
b3JlKQotICAgICAgICAsIG1fdmFsdWUodmFsdWUpCi0gICAgICAgICwgbV9rZXkoa2V5KQotICAg
ICAgICAsIG1fcHV0TW9kZShwdXRNb2RlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKLSAgICAgICAgLCBtX2luZGV4SURzKGluZGV4SWRzKQotICAgICAgICAsIG1faW5kZXhLZXlz
KGluZGV4S2V5cykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1f
b2JqZWN0U3RvcmU7Ci0gICAgY29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV92YWx1ZTsKLSAg
ICBjb25zdCBSZWZQdHI8SURCS2V5PiBtX2tleTsKLSAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlB1dE1vZGUgbV9wdXRNb2RlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOwotICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiBtX2luZGV4SURzOwotICAgIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+IG1faW5kZXhLZXlzOwotfTsKLQotY2xhc3MgU2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgaW5kZXhDb3VudCkp
OwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
c3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgU2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIHNpemVf
dCBpbmRleENvdW50KQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAg
ICAgICwgbV9pbmRleENvdW50KGluZGV4Q291bnQpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qgc2l6ZV90
IG1faW5kZXhDb3VudDsKLX07Ci0KLWNsYXNzIE9wZW5DdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMg
SURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3Jl
YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE9wZW5DdXJzb3JPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBj
YWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBpbnQ2NF90
IHRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLT5pZCgpOyB9Ci0g
ICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlE
OyB9Ci0gICAgaW50NjRfdCBpbmRleElEKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleElEOyB9Ci0g
ICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kaXJlY3Rpb247IH0KLSAgICBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQotICAgIElEQkRhdGFiYXNlQmFja2VuZDo6VGFz
a1R5cGUgdGFza1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Rhc2tUeXBlOyB9Ci0gICAgSURCS2V5
UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5nZS5nZXQoKTsgfQotICAg
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGlyZWN0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgT3BlbkN1cnNvck9wZXJhdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1
cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAg
ICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQot
ICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvclR5cGUo
Y3Vyc29yVHlwZSkKLSAgICAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0
U3RvcmVJRDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKLSAgICBjb25zdCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBt
X2N1cnNvclR5cGU7Ci0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSBtX3Rh
c2tUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsK
LQotY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvdW50T3Bl
cmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2Fs
bGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCBv
YmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9Ci0gICAgaW50
NjRfdCBpbmRleElEKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleElEOyB9Ci0gICAgSURCS2V5UmFu
Z2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5nZS5nZXQoKTsgfQotCi1wcml2
YXRlOgotICAgIENvdW50T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
LSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJRChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJRChpbmRleElkKQotICAg
ICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBt
X3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotICAgIGNv
bnN0IGludDY0X3QgbV9pbmRleElEOwotICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9r
ZXlSYW5nZTsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07
Ci0KLWNsYXNzIERlbGV0ZVJhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVsZXRlUmFuZ2VPcGVyYXRp
b24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nl
c3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLSAgICBJREJLZXlSYW5nZSoga2V5
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9y
ZUlkKQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlE
OwotICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBjb25zdCBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIENsZWFyT2JqZWN0
U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyT2JqZWN0
U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3Vj
Y2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9Ci0g
ICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlE
OyB9Ci0KLXByaXZhdGU6Ci0gICAgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25z
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDlkNjllMGEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpCi17Ci19Ci0KLUlEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKLXsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpk
aWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17
Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAg
ICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOwotICAgIHByb2Nlc3NTdGFy
dGVkVHJhbnNhY3Rpb25zKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
ZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikK
LXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLQot
ICAgIGlmIChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKLSAg
ICAgICAgQVNTRVJUKCFtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24p
KTsKLSAgICAgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLSAg
ICB9IGVsc2UgaWYgKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
Ci0gICAgICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotCi0g
ICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLQotICAgIHByb2Nlc3NTdGFy
dGVkVHJhbnNhY3Rpb25zKCk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi0vLyBWZXJpZmllcyBpbnRl
cm5hbCBjb25zaXN0aWVuY3kgd2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91
bmQuCi1ib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAg
IGlmIChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCi0gICAgICAg
IGZvdW5kID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uKSkgewotICAgICAgICBBU1NFUlQoIWZvdW5kKTsKLSAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgIH0KLSAgICBBU1NFUlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMuY29udGFpbnMo
dHJhbnNhY3Rpb24pKTsKLSAgICByZXR1cm4gZm91bmQ7Ci19Ci0jZW5kaWYKLQotdm9pZCBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpCi17Ci0g
ICAgaWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwgKCptX3N0YXJ0
ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKSktPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6VmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdpbigp
OwotICAgIHdoaWxlIChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSkgewotICAgICAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gKml0OwotICAgICAgICArK2l0
OwotICAgICAgICBpZiAoY2FuUnVuVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKSB7Ci0gICAgICAg
ICAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotICAgICAgICAg
ICAgbV9zdGFydGVkVHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7Ci0gICAgICAgICAgICB0
cmFuc2FjdGlvbi0+cnVuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb24pKTsKLQotICAgIFVOVVNFRF9QQVJBTSh0cmFuc2FjdGlvbik7Ci0gICAg
cmV0dXJuICFtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuc2l6ZSgpOwotfQotCi19OwotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NTU0MzguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcl9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVHJhbnNhY3Rp
b25CYWNrZW5kOwotCi0vLyBUcmFuc2FjdGlvbnMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0
aGUgd2VyZSBjcmVhdGVkLgotY2xhc3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciB7Ci1wdWJs
aWM6Ci0gICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOwotICAgIHZpcnR1YWwgfklEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKLQotICAgIC8vIENhbGxlZCBieSB0cmFuc2FjdGlvbnMg
YXMgdGhleSBzdGFydCBhbmQgZmluaXNoLgotICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNhY3Rpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0gICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0gICAgdm9pZCBkaWRTdGFydFRyYW5z
YWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotICAgIHZvaWQgZGlkRmluaXNoVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9v
bCBpc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIHZvaWQgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKLSAgICBib29sIGNhblJ1blRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotCi0gICAgLy8gVGhpcyBpcyBqdXN0
IGFuIGVmZmljaWVudCB3YXkgdG8ga2VlcCByZWZlcmVuY2VzIHRvIGFsbCB0cmFuc2FjdGlvbnMu
Ci0gICAgSGFzaE1hcDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqLCBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiA+IG1fdHJhbnNhY3Rpb25zOwotICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZm
ZXJlbnQgc3RhdGVzIGFyZSBncm91cGVkIGJlbG93LgotICAgIExpc3RIYXNoU2V0PElEQlRyYW5z
YWN0aW9uQmFja2VuZCo+IG1fcXVldWVkVHJhbnNhY3Rpb25zOwotICAgIEhhc2hTZXQ8SURCVHJh
bnNhY3Rpb25CYWNrZW5kKj4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNl
bmRpZiAvLyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCmlu
ZGV4IGQxMzNjNmQuLjRkNDY0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcApAQCAtMSwyNiArMSwy
NiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMCwyMiArMzAs
MTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OklE
QlZlcnNpb25DaGFuZ2VFdmVudCh1bnNpZ25lZCBsb25nIGxvbmcgb2xkVmVyc2lvbiwgdW5zaWdu
ZWQgbG9uZyBsb25nIG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQot
ICAgIDogRXZlbnQoZXZlbnRUeXBlLCBmYWxzZSAvKmNhbkJ1YmJsZSovLCBmYWxzZSAvKmNhbmNl
bGFibGUqLykKLSAgICAsIG1fb2xkVmVyc2lvbihvbGRWZXJzaW9uKQotICAgICwgbV9uZXdWZXJz
aW9uKG5ld1ZlcnNpb24pCi17Ci19Ci0KLUlEQlZlcnNpb25DaGFuZ2VFdmVudDo6fklEQlZlcnNp
b25DaGFuZ2VFdmVudCgpCi17Ci19Ci0KLUV2ZW50SW50ZXJmYWNlIElEQlZlcnNpb25DaGFuZ2VF
dmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAorSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJW
ZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorICAgIDogRXZlbnQo
bmFtZSwgZmFsc2UgLypjYW5CdWJibGUqLywgZmFsc2UgLypjYW5jZWxhYmxlKi8pCiB7Ci0gICAg
cmV0dXJuIElEQlZlcnNpb25DaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZl
cnNpb25DaGFuZ2VFdmVudC5oCmluZGV4IGRiYWQ1Y2QuLjEyOTllMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVu
dC5oCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSURCVmVyc2lv
bkNoYW5nZUV2ZW50X2gKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zOCwyMyArMzcsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCVmVyc2lvbkNoYW5nZUV2ZW50PiBjcmVhdGUodW5z
aWduZWQgbG9uZyBsb25nIG9sZFZlcnNpb24gPSAwLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVy
c2lvbiA9IDAsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gQXRvbWljU3RyaW5nKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRUeXBlKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB+SURCVmVyc2lvbkNoYW5nZUV2ZW50KCk7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgbG9uZyBvbGRWZXJzaW9uKCkgeyByZXR1cm4gbV9vbGRWZXJzaW9uOyB9Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbigpIHsgcmV0dXJuIG1fbmV3VmVyc2lvbjsg
fQotCi0gICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgfklEQlZlcnNpb25DaGFuZ2VFdmVudCgpIHsgfQogCi1wcml2YXRlOgotICAg
IElEQlZlcnNpb25DaGFuZ2VFdmVudCh1bnNpZ25lZCBsb25nIGxvbmcgb2xkVmVyc2lvbiwgdW5z
aWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
KTsKKyAgICB2aXJ0dWFsIHVpbnQ2NF90IG9sZFZlcnNpb24oKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB1aW50NjRfdCBuZXdWZXJzaW9uKCkgY29uc3QgPSAwOwogCi0gICAgdW5zaWduZWQgbG9u
ZyBsb25nIG1fb2xkVmVyc2lvbjsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9uZXdWZXJzaW9u
OworcHJvdGVjdGVkOgorICAgIElEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDYWxsYmFja3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDYWxsYmFja3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjU3MmYxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkNhbGxiYWNrcy5oCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSURCQ2FsbGJhY2tzX2gKKyNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKKworI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBET01TdHJp
bmdMaXN0OworY2xhc3MgSURCQ3Vyc29yQmFja2VuZDsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZDsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7CisK
K2NsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkNhbGxiYWNrcz4gewor
cHVibGljOgorICAgIHZpcnR1YWwgfklEQkNhbGxiYWNrcygpIHsgfQorCisgICAgdmlydHVhbCB2
b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgPSAwOworICAgIC8vIEZy
b20gSURCRmFjdG9yeS53ZWJraXRHZXREYXRhYmFzZU5hbWVzKCkKKyAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pID0gMDsKKyAgICAvLyBGcm9tIElE
Qk9iamVjdFN0b3JlL0lEQkluZGV4Lm9wZW5DdXJzb3IoKSwgSURCSW5kZXgub3BlbktleUN1cnNv
cigpCisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmQ+KSA9IDA7CisgICAgLy8gRnJvbSBJREJPYmplY3RTdG9yZS5hZGQoKS9wdXQoKSwgSURCSW5k
ZXguZ2V0S2V5KCkKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5
PikgPSAwOworICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXguZ2V0KCkvY291bnQo
KSwgYW5kIHZhcmlvdXMgbWV0aG9kcyB0aGF0IHlpZWxkIG51bGwvdW5kZWZpbmVkLgorICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KSA9IDA7CisgICAg
Ly8gRnJvbSBJREJPYmplY3RTdG9yZS9JREJJbmRleC5nZXQoKSAod2l0aCBrZXkgaW5qZWN0aW9u
KQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBQ
YXNzUmVmUHRyPElEQktleT4sIGNvbnN0IElEQktleVBhdGgmKSA9IDA7CisgICAgLy8gRnJvbSBJ
REJPYmplY3RTdG9yZS9JREJJbmRleC5jb3VudCgpCisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cyhpbnQ2NF90IHZhbHVlKSA9IDA7CisKKyAgICAvLyBGcm9tIElEQkZhY3Rvci5kZWxldGVEYXRh
YmFzZSgpLCBJREJPYmplY3RTdG9yZS9JREJJbmRleC5nZXQoKSwgSURCT2JqZWN0U3RvcmUuZGVs
ZXRlKCksIElEQk9iamVjdFN0b3JlLmNsZWFyKCkKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNz
KCkgPSAwOworCisgICAgLy8gRnJvbSBJREJDdXJzb3IuYWR2YW5jZSgpL2NvbnRpbnVlKCkKKyAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAwOworCisgICAg
Ly8gRnJvbSBJREJGYWN0b3J5Lm9wZW4oKS9kZWxldGVEYXRhYmFzZSgpCisgICAgdmlydHVhbCB2
b2lkIG9uQmxvY2tlZCh1aW50NjRfdCAvKiBleGlzdGluZ1ZlcnNpb24gKi8pIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKyAgICAvLyBGcm9tIElEQkZhY3Rvcnkub3BlbigpCisgICAgdmlydHVh
bCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCAvKiBvbGRWZXJzaW9uICovLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgorCisjZW5kaWYgLy8gSURCQ2FsbGJhY2tzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODAxYzdlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZE9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3Iu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCisjaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSURCU2VydmVyQ29u
bmVjdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JC
YWNrZW5kKGludDY0X3QgY3Vyc29ySUQsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpCisgICAgOiBtX3Rhc2tU
eXBlKHRhc2tUeXBlKQorICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgLCBtX3Ry
YW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKKyAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9y
ZUlEKQorICAgICwgbV9jdXJzb3JJRChjdXJzb3JJRCkKKyAgICAsIG1fc2F2ZWRDdXJzb3JJRCgw
KQorICAgICwgbV9jbG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJP
cGVuQ3Vyc29yKHRoaXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kOjp+SURCQ3Vyc29yQmFja2Vu
ZCgpCit7CisgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7Cit9
CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRp
b25Db2RlJikKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNvckJhY2tlbmQ6OmNvbnRp
bnVlIik7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OworICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVy
YXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXksIGNhbGxiYWNrcykpOworfQorCit2b2lk
IElEQkN1cnNvckJhY2tlbmQ6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjphZHZhbmNlIik7CisgICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgY291bnQs
IGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmQ6OmRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQor
eworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6ZGVsZXRlIik7CisgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZTo6UmVhZE9ubHkpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlS
YW5nZTo6Y3JlYXRlKHByaW1hcnlLZXkoKSk7CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSUQsIGtleVJh
bmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5k
OjpjbG9zZSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjpjbG9z
ZSIpOworICAgIGNsZWFyKCk7CisgICAgbV9jbG9zZWQgPSB0cnVlOworICAgIG1fc2F2ZWRDdXJz
b3JJRCA9IDA7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZDo6dXBkYXRlQ3Vyc29yRGF0YShJ
REJLZXkqIGtleSwgSURCS2V5KiBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXIqIHZhbHVlQnVmZmVy
KQoreworICAgIG1fY3VycmVudEtleSA9IGtleTsKKyAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0g
cHJpbWFyeUtleTsKKyAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlciA9IHZhbHVlQnVmZmVyOworfQor
Cit2b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNsZWFyKCkKK3sKKyAgICBtX2N1cnNvcklEID0gMDsK
KyAgICBtX2N1cnJlbnRLZXkgPSBudWxscHRyOworICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBu
dWxscHRyOworICAgIG1fY3VycmVudFZhbHVlQnVmZmVyID0gbnVsbHB0cjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ3Vy
c29yQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lE
QkN1cnNvckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjRk
MWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIElEQkN1cnNvckJhY2tlbmRfaAorI2RlZmluZSBJREJDdXJzb3JCYWNrZW5kX2gKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleVJhbmdlOworY2xh
c3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kIDogcHVibGljIFJlZkNv
dW50ZWQ8SURCQ3Vyc29yQmFja2VuZD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCQ3Vy
c29yQmFja2VuZD4gY3JlYXRlKGludDY0X3QgY3Vyc29ySUQsIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IG9iamVjdFN0b3JlSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJD
dXJzb3JCYWNrZW5kKGN1cnNvcklELCBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5v
cm1hbFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlEKSk7CisgICAgfQorICAgIHN0YXRp
YyBSZWY8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlKGludDY0X3QgY3Vyc29ySUQsIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRh
c2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVj
dFN0b3JlSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJDdXJzb3JC
YWNrZW5kKGN1cnNvcklELCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVj
dFN0b3JlSUQpKTsKKyAgICB9CisgICAgfklEQkN1cnNvckJhY2tlbmQoKTsKKworICAgIHZvaWQg
YWR2YW5jZSh1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRlbGV0
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7IH0KKworICAgIElEQktleSoga2V5
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5LmdldCgpOyB9CisgICAgSURCS2V5KiBwcmlt
YXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKTsgfQorICAg
IFNoYXJlZEJ1ZmZlciogdmFsdWVCdWZmZXIoKSBjb25zdCB7IHJldHVybiAobV9jdXJzb3JUeXBl
ID09IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSkgPyBudWxscHRyIDogbV9jdXJyZW50
VmFsdWVCdWZmZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHVwZGF0ZUN1cnNvckRhdGEoSURCS2V5Kiwg
SURCS2V5KiBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXIqIHZhbHVlQnVmZmVyKTsKKworICAgIHZv
aWQgY2xvc2UoKTsKKworICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJzb3JUeXBlOyB9CisKKyAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJzb3JJRDsgfQorCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2Fj
dGlvbigpIHsgcmV0dXJuICptX3RyYW5zYWN0aW9uOyB9CisKKyAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgdm9pZCBzZXRTYXZlZEN1cnNvcklEKGludDY0X3QgY3Vyc29ySUQpIHsgbV9zYXZlZEN1cnNv
cklEID0gY3Vyc29ySUQ7IH0KKworcHJpdmF0ZToKKyAgICBJREJDdXJzb3JCYWNrZW5kKGludDY0
X3QgY3Vyc29ySUQsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpU
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKTsK
KworICAgIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKKyAgICBJbmRl
eGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SUQ7CisKKyAgICBpbnQ2NF90IG1fY3Vyc29ySUQ7CisgICAgaW50NjRfdCBtX3NhdmVkQ3Vyc29y
SUQ7CisKKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7CisgICAgUmVmUHRyPElEQktl
eT4gbV9jdXJyZW50UHJpbWFyeUtleTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2N1cnJl
bnRWYWx1ZUJ1ZmZlcjsKKworICAgIGJvb2wgbV9jbG9zZWQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlm
IC8vIElEQkN1cnNvckJhY2tlbmRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0
aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhMTY5NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCIK
KworI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiQ3Vyc29y
QWR2YW5jZU9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPEN1cnNvckFkdmFuY2VPcGVyYXRpb24+
IG9wZXJhdGlvbih0aGlzKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwg
Y29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikg
eworICAgICAgICAgICAgbV9jdXJzb3ItPmNsZWFyKCk7CisgICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25FcnJvcihlcnJvcik7CisgICAgICAgIH0gZWxzZSBpZiAoIWtleSkgeworICAgICAgICAg
ICAgLy8gSWYgdGhlcmUncyBubyBlcnJvciBidXQgYWxzbyBubyBrZXksIHRoZW4gdGhlIGN1cnNv
ciByZWFjaGVkIHRoZSBlbmQuCisgICAgICAgICAgICBtX2N1cnNvci0+Y2xlYXIoKTsKKyAgICAg
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4o
bnVsbHB0cikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9jdXJzb3ItPnVwZGF0
ZUN1cnNvckRhdGEoa2V5LmdldCgpLCBwcmltYXJ5S2V5LmdldCgpLCB2YWx1ZUJ1ZmZlci5nZXQo
KSk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGtleSwgcHJpbWFyeUtleSwg
dmFsdWVCdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEN1cnNvciBvcGVy
YXRpb25zIHNob3VsZCBiZSBhYmxlIHRvIHBhc3MgYWxvbmcgYW4gZXJyb3IgaW5zdGVhZCBvZiBz
dWNjZXNzCisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOworICAgIH07CisKKyAgICBtX2N1
cnNvci0+dHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jdXJzb3JB
ZHZhbmNlKCptX2N1cnNvciwgKnRoaXMsIGNhbGxiYWNrKTsKK30KKwordm9pZCBDdXJzb3JJdGVy
YXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25D
YWxsYmFjaykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlv
biIpOworCisgICAgUmVmUHRyPEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbj4gb3BlcmF0aW9uKHRo
aXMpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2Fs
bGJhY2tdKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAg
ICBtX2N1cnNvci0+Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVy
cm9yKTsKKyAgICAgICAgfSBlbHNlIGlmICgha2V5KSB7CisgICAgICAgICAgICAvLyBJZiB0aGVy
ZSdzIG5vIGVycm9yIGJ1dCBhbHNvIG5vIGtleSwgdGhlbiB0aGUgY3Vyc29yIHJlYWNoZWQgdGhl
IGVuZC4KKyAgICAgICAgICAgIG1fY3Vyc29yLT5jbGVhcigpOworICAgICAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihudWxscHRyKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2N1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShr
ZXkuZ2V0KCksIHByaW1hcnlLZXkuZ2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogQ3Vyc29yIG9wZXJhdGlvbnMgc2hvdWxk
IGJlIGFibGUgdG8gcGFzcyBhbG9uZyBhbiBlcnJvciBpbnN0ZWFkIG9mIHN1Y2Nlc3MKKyAgICAg
ICAgY29tcGxldGlvbkNhbGxiYWNrKCk7CisgICAgfTsKKworICAgIG1fY3Vyc29yLT50cmFuc2Fj
dGlvbigpLmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmN1cnNvckl0ZXJhdGUoKm1fY3Vy
c29yLCAqdGhpcywgY2FsbGJhY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEVEKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzk3
N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaApAQCAtMCwwICsxLDg4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnNfaAorI2RlZmluZSBJREJDdXJzb3JC
YWNrZW5kT3BlcmF0aW9uc19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJPcGVyYXRpb24uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24gOiBw
dWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKGN1
cnNvciwga2V5LCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7
CisKKyAgICBpbnQ2NF90IGN1cnNvcklEKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPmlkKCk7
IH0KKyAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9CisKK3By
aXZhdGU6CisgICAgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZD4gY3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKKyAgICAgICAg
LCBtX2tleShrZXkpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gbV9jdXJzb3I7CisgICAgUmVmUHRy
PElEQktleT4gbV9rZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9
OworCitjbGFzcyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEN1cnNvckFkdmFuY2VPcGVyYXRpb24oY3Vyc29yLCBjb3VudCwgY2FsbGJhY2tzKSk7
CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBj
b21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOworCisgICAgaW50NjRfdCBjdXJzb3JJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLT5pZCgpOyB9CisgICAgdW5zaWduZWQgbG9uZyBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KKworcHJpdmF0ZToKKyAgICBDdXJzb3JB
ZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCB1bnNp
Z25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAg
ICAgICA6IG1fY3Vyc29yKGN1cnNvcikKKyAgICAgICAgLCBtX2NvdW50KGNvdW50KQorICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElE
QkN1cnNvckJhY2tlbmQ+IG1fY3Vyc29yOworICAgIHVuc2lnbmVkIGxvbmcgbV9jb3VudDsKKyAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2VuZGlmIC8v
IElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllNGUyNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFz
ZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNjIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgor
I2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSURC
U2VydmVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgor
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNo
YW5nZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxJREJEYXRhYmFzZUJhY2tlbmQ+
IElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9y
eSwgSURCU2VydmVyQ29ubmVjdGlvbiYgc2VydmVyQ29ubmVjdGlvbikKK3sKKyAgICBSZWY8SURC
RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gYWRvcHRSZWYoKm5ldyBJREJEYXRhYmFzZUJhY2tl
bmQobmFtZSwgdW5pcXVlSWRlbnRpZmllciwgZmFjdG9yeSwgc2VydmVyQ29ubmVjdGlvbikpOwor
ICAgIGJhY2tlbmQtPm9wZW5JbnRlcm5hbEFzeW5jKCk7CisgICAgCisgICAgcmV0dXJuIGJhY2tl
bmQ7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZDo6SURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSogZmFjdG9yeSwgSURCU2VydmVyQ29ubmVjdGlvbiYgc2VydmVyQ29ubmVj
dGlvbikKKyAgICA6IG1fbWV0YWRhdGEobmFtZSwgSW52YWxpZElkLCAwLCBJbnZhbGlkSWQpCisg
ICAgLCBtX2lkZW50aWZpZXIodW5pcXVlSWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0
b3J5KQorICAgICwgbV9zZXJ2ZXJDb25uZWN0aW9uKHNlcnZlckNvbm5lY3Rpb24pCisgICAgLCBt
X3RyYW5zYWN0aW9uQ29vcmRpbmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yPigpKQorICAgICwgbV9jbG9zaW5nQ29ubmVjdGlvbihmYWxzZSkKKyAgICAsIG1f
ZGlkT3BlbkludGVybmFsKGZhbHNlKQoreworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5uYW1lLmlz
TnVsbCgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmFkZE9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9i
amVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250
YWlucyhvYmplY3RTdG9yZS5pZCkpOworICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQobV9tZXRh
ZGF0YS5tYXhPYmplY3RTdG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIG1f
bWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7CisgICAgfQor
ICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3Rv
cmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cmVtb3ZlT2JqZWN0U3RvcmUoaW50
NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
cmVtb3ZlKG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6YWRk
SW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eCwgaW50NjRfdCBuZXdNYXhJbmRleElkKQoreworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9y
ZUlkKTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleC5p
ZCkpOworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4LmlkLCBpbmRleCk7CisgICAg
aWYgKG5ld01heEluZGV4SWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAg
ICAgIEFTU0VSVChvYmplY3RTdG9yZS5tYXhJbmRleElkIDwgbmV3TWF4SW5kZXhJZCk7CisgICAg
ICAgIG9iamVjdFN0b3JlLm1heEluZGV4SWQgPSBuZXdNYXhJbmRleElkOworICAgIH0KKyAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJZCwgb2JqZWN0U3RvcmUpOwor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3Jl
SWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkp
OworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOworICAgIG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuSW50ZXJuYWxBc3luYygpCit7CisgICAgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZD4gc2VsZiA9IHRoaXM7CisgICAgbV9zZXJ2ZXJDb25uZWN0aW9u
LT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoW3NlbGZdKGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgc2VsZi0+ZGlk
T3BlbkludGVybmFsQXN5bmMobWV0YWRhdGEsIHN1Y2Nlc3MpOworICAgIH0pOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6ZGlkT3BlbkludGVybmFsQXN5bmMoY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBtX2RpZE9wZW5JbnRl
cm5hbCA9IHRydWU7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgcHJvY2Vzc1BlbmRp
bmdPcGVuQ2FsbHMoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9tZXRh
ZGF0YSA9IG1ldGFkYXRhOworCisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworfQorCitJREJE
YXRhYmFzZUJhY2tlbmQ6On5JREJEYXRhYmFzZUJhY2tlbmQoKQoreworICAgIG1fZmFjdG9yeS0+
cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKG1faWRlbnRpZmllcik7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25D
aGFuZ2UpOworCisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhv
YmplY3RTdG9yZUlkKSk7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1l
dGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRh
dGFiYXNlQmFja2VuZDo6TWluaW11bUluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVk
dWxlQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24ob2JqZWN0U3RvcmVNZXRhZGF0YSk7CisgICAg
YWRkT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVNZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCk7Cit9CisK
K3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
SWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lv
bkNoYW5nZSk7CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
bihvYmplY3RTdG9yZU1ldGFkYXRhKTsKKyAgICByZW1vdmVPYmplY3RTdG9yZShvYmplY3RTdG9y
ZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZUluZGV4KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFj
a2VuZDo6Y3JlYXRlSW5kZXgiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNh
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7CisKKyAgICBBU1NF
UlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQoIW9iamVjdFN0b3Jl
LmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEg
aW5kZXhNZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkp
OworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0
U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7CisKKyAgICBhZGRJbmRleChvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhLCBpbmRleElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRl
bGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tl
bmQ6OmRlbGV0ZUluZGV4Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOworCisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmlu
ZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4TWV0YWRhdGEgPSBvYmplY3RTdG9yZS5pbmRleGVzLmdldChpbmRleElkKTsKKworICAgIHRy
YW5zYWN0aW9uLT5zY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGlu
ZGV4TWV0YWRhdGEpOworCisgICAgcmVtb3ZlSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7
Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpjb21taXQoaW50NjRfdCB0cmFuc2FjdGlv
bklkKQoreworICAgIC8vIFRoZSBmcm9udGVuZCBzdWdnZXN0cyB0aGF0IHdlIGNvbW1pdCwgYnV0
IHdlIG1heSBoYXZlIHByZXZpb3VzbHkgaW5pdGlhdGVkIGFuIGFib3J0LCBhbmQgc28gaGF2ZSBk
aXNwb3NlZCBvZiB0aGUgdHJhbnNhY3Rpb24uIG9uQWJvcnQgaGFzIGFscmVhZHkgYmVlbiBkaXNw
YXRjaGVkIHRvIHRoZSBmcm9udGVuZCwgc28gaXQgd2lsbCBmaW5kIG91dCBhYm91dCB0aGF0IGFz
eW5jaHJvbm91c2x5LgorICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bklkKSkKKyAgICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5jb21taXQo
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmFib3J0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCkKK3sKKyAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93biwgdGhlbiBpdCBo
YXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBz
byBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4KKyAgICBpZiAobV90cmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb25JZCkpCisgICAgICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlv
bklkKS0+YWJvcnQoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKK3sK
KyAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93biwgdGhlbiBpdCBoYXMgYWxyZWFk
eSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBzbyBpdCBpcyBz
YWZlIHRvIGlnbm9yZSBpdC4KKyAgICBpZiAobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb25JZCkpCisgICAgICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+YWJv
cnQoZXJyb3IpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Z2V0KGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFz
ZUJhY2tlbmQ6OmdldCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlR2V0T3BlcmF0
aW9uKG1fbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5
ID8gSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5IDogSW5kZXhlZERCOjpDdXJzb3JUeXBl
OjpLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6
OnB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2Rl
IHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMp
Cit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OnB1dCIpOworICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlOjpSZWFkT25seSk7CisKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVj
dFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50IHx8IGtl
eS5nZXQoKSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVQdXRPcGVyYXRpb24ob2JqZWN0
U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywg
aW5kZXhLZXlzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnNldEluZGV4S2V5cyhp
bnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgUGFzc1JlZlB0cjxJ
REJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90LCAxPiYgaW5kZXhJRHMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXMsIDE+JiBpbmRleEtleXMpCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OnNldEluZGV4S2V5cyIpOworICAgIEFTU0VSVChw
cnBQcmltYXJ5S2V5KTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFp
bnMob2JqZWN0U3RvcmVJRCkpOworCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4g
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JRCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKKwor
ICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIG1fc2Vy
dmVyQ29ubmVjdGlvbi0+c2V0SW5kZXhLZXlzKHRyYW5zYWN0aW9uSUQsIG1fbWV0YWRhdGEuaWQs
IG9iamVjdFN0b3JlSUQsIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlE
KSwgKnByaW1hcnlLZXksIGluZGV4SURzLCBpbmRleEtleXMsIFt0cmFuc2FjdGlvbl0oUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpCisgICAg
ICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOworICAgIH0pOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCwgY29uc3QgVmVjdG9yPGludDY0X3QsIDE+JiBpbmRleElkcykKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhlc1JlYWR5Iik7CisKKyAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRl
eElkcy5zaXplKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkN1cnNvcihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlIHRhc2tUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ3Vyc29yIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJh
bmdlLCBkaXJlY3Rpb24sIGtleU9ubHkgPyBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkg
OiBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCB0YXNrVHlwZSwgY2FsbGJhY2tz
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjb3VudCIpOwor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0
b3JlSWQpKTsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDb3VudE9wZXJhdGlvbihvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKTsKK30KKworCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6ZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURC
RGF0YWJhc2VCYWNrZW5kOjpkZWxldGVSYW5nZSIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAg
aWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seSk7CisKKyAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihvYmplY3RTdG9yZUlk
LCBrZXlSYW5nZSwgY2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNs
ZWFyT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNsZWFyT2JqZWN0U3RvcmUgJWxsaSBpbiB0cmFu
c2FjdGlvbiAlbGxpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihvYmplY3RTdG9yZUlkKSwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPih0cmFuc2FjdGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsK
KworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24ob2Jq
ZWN0U3RvcmVJZCwgY2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnRy
YW5zYWN0aW9uU3RhcnRlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQorewor
ICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
OjpWZXJzaW9uQ2hhbmdlKSB7CisgICAgICAgIEFTU0VSVCghbV9ydW5uaW5nVmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKTsKKyAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
ID0gdHJhbnNhY3Rpb247CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6dHJh
bnNhY3Rpb25GaW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHJhd1RyYW5zYWN0aW9uKQor
eworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gcmF3VHJh
bnNhY3Rpb247CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
LT5pZCgpKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi0+aWQo
KSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFu
c2FjdGlvbi0+aWQoKSk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJUKHRyYW5z
YWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7
CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IG51bGxwdHI7Cisg
ICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFu
ZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKK3sKKyAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0
aW9uOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlOjpWZXJzaW9uQ2hhbmdlKSB7CisgICAgICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4t
d2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwgYmUgYSAic2Vjb25kCisgICAgICAgIC8vIGhh
bGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBwcm9jZXNzUGVuZGluZ0NhbGxzLgorICAg
ICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBsb25nZXIgc3VwcG9ydCBzZXRWZXJzaW9uLCBhc3Nl
cnQgc3VjaCBhIHRoaW5nLgorICAgICAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsK
KyAgICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJy
b3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCBpbiB1cGdyYWRlbmVl
ZGVkIGV2ZW50IGhhbmRsZXIuIikpOworICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW4gPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsK
KyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVk
QW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHJhd1RyYW5zYWN0aW9uKQor
eworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gcmF3VHJh
bnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpCisgICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMo
KTsKK30KKworc2l6ZV90IElEQkRhdGFiYXNlQmFja2VuZDo6Y29ubmVjdGlvbkNvdW50KCkKK3sK
KyAgICAvLyBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcGVuZGluZyBvcGVuIGNhbGxzLCBhcyB0aG9z
ZSBzaG91bGQgbm90IGJsb2NrIHZlcnNpb24gY2hhbmdlcyBhbmQgZGVsZXRlcy4KKyAgICByZXR1
cm4gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKK3sKKyAgICAvLyBwcm9jZXNzUGVuZGluZ0Nh
bGxzKCkgd2lsbCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgb3BlbkludGVybmFsQXN5bmMoKSBjb21w
bGV0ZXMuCisgICAgaWYgKCFtX2RpZE9wZW5JbnRlcm5hbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKSB7CisgICAgICAgIEFTU0VSVChtX3BlbmRp
bmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09IG1fbWV0YWRhdGEudmVyc2lvbik7CisgICAg
ICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7CisgICAgICAgIG1fcGVuZGlu
Z1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFk
YXRhKCkpOworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51bGxwdHI7CisgICAg
ICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBwZW5kaW5nIGRlbGV0ZXMgbWF5
IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4KKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhp
cyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1Y2UgcXVldWUtY2h1cm4gYW5k
CisgICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7IGRlbGV0ZURhdGFiYXNlIGFu
ZCBvcGVuQ29ubmVjdGlvbiB3aWxsCisgICAgLy8gcmVxdWV1ZSB0aGVpciBjYWxscyBpZiB0aGlz
IGNvbmRpdGlvbiBpcyB0cnVlLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMu
aXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0g
bV9wZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIG1fZGVsZXRlQ2FsbGJh
Y2tzV2FpdGluZ0NvbXBsZXRpb24uYWRkKHBlbmRpbmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7
CisgICAgICAgIGRlbGV0ZURhdGFiYXNlQXN5bmMocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNr
cygpKTsKKyAgICB9CisKKyAgICAvLyBkZWxldGVEYXRhYmFzZUFzeW5jIHNob3VsZCBuZXZlciBy
ZS1xdWV1ZSBjYWxscy4KKyAgICBBU1NFUlQobV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgp
KTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgZGF0YWJhc2UgZGVsZXRpb25zIHdhaXRpbmcg
Zm9yIGNvbXBsZXRpb24sIHdlJ3JlIGRvbmUgZm9yIG5vdy4KKyAgICAvLyBGdXJ0aGVyIGNhbGxi
YWNrcyB3aWxsIGJlIGhhbmRsZWQgaW4gYSBmdXR1cmUgY2FsbCB0byBwcm9jZXNzUGVuZGluZ0Nh
bGxzKCkuCisgICAgaWYgKCFtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJvY2Vzc1BlbmRpbmdPcGVuQ2Fs
bHModHJ1ZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpwcm9jZXNzUGVuZGluZ09w
ZW5DYWxscyhib29sIHN1Y2Nlc3MpCit7CisgICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1
ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBv
ciBkZWxldGVzIHRoZSBkYXRhYmFzZS4KKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SURCUGVu
ZGluZ09wZW5DYWxsPj4gcGVuZGluZ09wZW5DYWxsczsKKyAgICBtX3BlbmRpbmdPcGVuQ2FsbHMu
c3dhcChwZW5kaW5nT3BlbkNhbGxzKTsKKworICAgIHdoaWxlICghcGVuZGluZ09wZW5DYWxscy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4g
cGVuZGluZ09wZW5DYWxsID0gcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAg
aWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChtX21ldGFkYXRhLmlkID09IEludmFsaWRJ
ZCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgZGF0YWJhc2Ugd2FzIGRlbGV0ZWQgdGhlbiBx
dWlja2x5IHJlLW9wZW5lZC4KKyAgICAgICAgICAgICAgICAvLyBvcGVuSW50ZXJuYWxBc3luYygp
IHdpbGwgcmVjcmVhdGUgaXQgaW4gdGhlIGJhY2tpbmcgc3RvcmUgYW5kIHRoZW4gcmVzdW1lIHBy
b2Nlc3NpbmcgcGVuZGluZyBjYWxsYmFja3MuCisgICAgICAgICAgICAgICAgcGVuZGluZ09wZW5D
YWxscy5wcmVwZW5kKFdURjo6bW92ZShwZW5kaW5nT3BlbkNhbGwpKTsKKyAgICAgICAgICAgICAg
ICBwZW5kaW5nT3BlbkNhbGxzLnN3YXAobV9wZW5kaW5nT3BlbkNhbGxzKTsKKworICAgICAgICAg
ICAgICAgIG9wZW5JbnRlcm5hbEFzeW5jKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgb3BlbkNvbm5lY3Rpb25JbnRlcm5hbChwZW5kaW5nT3Bl
bkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCks
IHBlbmRpbmdPcGVuQ2FsbC0+dHJhbnNhY3Rpb25JZCgpLCBwZW5kaW5nT3BlbkNhbGwtPnZlcnNp
b24oKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKKyAg
ICAgICAgICAgIGlmIChwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSA9PSBJREJEYXRhYmFzZU1l
dGFkYXRhOjpOb0ludFZlcnNpb24pCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJJbnRlcm5h
bCBlcnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggbm8gdmVyc2lvbiBzcGVjaWZpZWQuIjsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCB2ZXJzaW9uICVsbHUiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKSk7
CisgICAgICAgICAgICBwZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBt
ZXNzYWdlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
OjpjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmpl
Y3RTdG9yZUlEcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6Y3JlYXRlKHRoaXMsIHRyYW5zYWN0aW9uSUQsIGNhbGxiYWNrcywgb2JqZWN0U3RvcmVJ
RHMsIG1vZGUpOworCisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbklEKSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uSUQsIHRyYW5zYWN0
aW9uLmdldCgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIHVpbnQ2NF90IHZlcnNpb24pCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKKworICAgIG1fcGVuZGluZ09w
ZW5DYWxscy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nT3BlbkNhbGw+KCpjYWxs
YmFja3MsICpkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbikpOworCisg
ICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
b3BlbkNvbm5lY3Rpb25JbnRlcm5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNr
cywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKQoreworICAgIEFTU0VS
VChtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9ydW5uaW5n
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisKKyAgICAvLyBXZSBp
bmZlciB0aGF0IHRoZSBkYXRhYmFzZSBkaWRuJ3QgZXhpc3QgZnJvbSBpdHMgbGFjayBvZiB2ZXJz
aW9uLgorICAgIGJvb2wgaXNOZXdEYXRhYmFzZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBJREJE
YXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247CisKKyAgICBpZiAodmVyc2lvbiA9PSBJREJE
YXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbiAmJiAhaXNOZXdEYXRhYmFzZSkgewor
ICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Cisg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzTmV3RGF0YWJhc2UgJiYgdmVyc2lvbiA9
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbikgeworICAgICAgICAvLyBT
cGVjIHNheXM6IElmIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkIGFuZCBubyBkYXRhYmFzZSBleGlz
dHMsIHNldCBkYXRhYmFzZSB2ZXJzaW9uIHRvIDEuCisgICAgICAgIHZlcnNpb24gPSAxOworICAg
IH0KKworICAgIGlmICh2ZXJzaW9uID4gbV9tZXRhZGF0YS52ZXJzaW9uIHx8IG1fbWV0YWRhdGEu
dmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAg
cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHZlcnNpb24gPCBtX21ldGFkYXRhLnZlcnNpb24gJiYgbV9tZXRhZGF0YS52ZXJzaW9u
ICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikgeworICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpWZXJzaW9uRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJUaGUgcmVxdWVzdGVkIHZlcnNpb24gKCVs
bHUpIGlzIGxlc3MgdGhhbiB0aGUgZXhpc3RpbmcgdmVyc2lvbiAoJWxsdSkuIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPih2ZXJzaW9uKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPihtX21ldGFkYXRhLnZlcnNpb24pKSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUKHZlcnNpb24gPT0gbV9tZXRhZGF0YS52ZXJzaW9uKTsKKyAgICBtX2RhdGFi
YXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJw
RGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0
ZWRWZXJzaW9uKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJh
Y2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisgICAgQVNTRVJUKGNhbGxiYWNrcyk7CisgICAg
Zm9yIChhdXRvJiBjYWxsYmFjayA6IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQpIHsKKyAgICAgICAg
Ly8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9u
cyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KKyAgICAgICAgaWYgKGNhbGxiYWNrICE9IGRh
dGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICAgICAgY2FsbGJhY2stPm9uVmVyc2lvbkNoYW5nZSht
X21ldGFkYXRhLnZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24pOworICAgIH0KKyAgICAvLyBUaGUg
c3BlYyBkaWN0YXRlcyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFuZ2UgZXZlbnRz
IGFyZQorICAgIC8vIGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNlQ2FsbGJhY2tz
LmVtcHR5KCkgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAvLyBvciBmaXJpbmcgYSBibG9ja2VkIGV2
ZW50LCBidXQgaW5zdGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhvdworICAgIC8v
IHRoZSBvbGQgc2V0VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdC4KKyAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoZSBjYWxsIHRvIG9uQmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0IHVudGlsIHRoZSBm
cm9udGVuZAorICAgIC8vIHRlbGxzIHVzIHRoYXQgYWxsIHRoZSBibG9ja2VkIGV2ZW50cyBoYXZl
IGJlZW4gZGVsaXZlcmVkLiBTZWUKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkpCisgICAgICAgIGNh
bGxiYWNrcy0+b25CbG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7CisgICAgLy8gRklYTUU6IEFk
ZCB0ZXN0IGZvciBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uCisgICAgaWYgKG1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBjb25uZWN0aW9uQ291bnQoKSkgewor
ICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SURCUGVu
ZGluZ09wZW5DYWxsPigqY2FsbGJhY2tzLCAqZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9u
SWQsIHJlcXVlc3RlZFZlcnNpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZl
Y3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsKKyAgICBjcmVhdGVUcmFuc2FjdGlvbih0cmFu
c2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24ocmVx
dWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgbV9tZXRhZGF0YSk7
CisKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKKyAgICBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKKyAgICBpZiAoaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGNhbGxiYWNrIDogbV9kYXRhYmFzZUNhbGxiYWNrc1NldCkgeworICAgICAgICAgICAg
Ly8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9u
cyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KKyAgICAgICAgICAgIGNhbGxiYWNrLT5vblZl
cnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCAwKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9u
cyBhZnRlciB0aGUKKyAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQs
IG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQo
bV9tZXRhZGF0YS52ZXJzaW9uKTsKKyAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8SURCUGVuZGluZ0RlbGV0ZUNhbGw+KGNhbGxiYWNrcy5yZWxlYXNl
KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZWxldGVEYXRhYmFzZUFzeW5jKGNh
bGxiYWNrcy5yZWxlYXNlKCkpOworfQorCitib29sIElEQkRhdGFiYXNlQmFja2VuZDo6aXNEZWxl
dGVEYXRhYmFzZUJsb2NrZWQoKQoreworICAgIHJldHVybiBjb25uZWN0aW9uQ291bnQoKTsKK30K
Kwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlQXN5bmMoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBBU1NFUlQoIWlzRGVsZXRlRGF0
YWJhc2VCbG9ja2VkKCkpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gc2VsZih0
aGlzKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
CisgICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5kZWxldGVEYXRhYmFzZShtX21ldGFkYXRhLm5hbWUs
IFtzZWxmLCBjYWxsYmFja3NdKGJvb2wgc3VjY2VzcykgeworICAgICAgICBzZWxmLT5tX2RlbGV0
ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLnJlbW92ZShjYWxsYmFja3MpOworCisgICAgICAg
IC8vIElmIHRoaXMgSURCRGF0YWJhc2VCYWNrZW5kIHdhcyBjbG9zZWQgd2hpbGUgd2FpdGluZyBm
b3IgZGVsZXRlRGF0YWJhc2UgdG8gY29tcGxldGUsIG5vIHBvaW50IGluIHBlcmZvcm1pbmcgYW55
IGNhbGxiYWNrcy4KKyAgICAgICAgaWYgKCFzZWxmLT5tX3NlcnZlckNvbm5lY3Rpb24tPmlzQ2xv
c2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEuaWQgPSBJbnZhbGlkSWQ7CisgICAgICAgICAgICBz
ZWxmLT5tX21ldGFkYXRhLnZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNp
b247CisgICAgICAgICAgICBzZWxmLT5tX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jbGVhcigpOwor
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBk
YXRhYmFzZS4iKSk7CisKKyAgICAgICAgc2VsZi0+cHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAg
IH0pOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIEFTU0VSVChtX2RhdGFi
YXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNrcykpOworCisgICAgbV9kYXRhYmFzZUNh
bGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tzKTsKKyAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFs
Zk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmRhdGFiYXNlQ2FsbGJhY2tzKCkgPT0g
Y2FsbGJhY2tzKSB7CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3Mo
KS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKKyAgICAgICAgbV9w
ZW5kaW5nU2Vjb25kSGFsZk9wZW4gPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChjb25uZWN0
aW9uQ291bnQoKSA+IDEpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIHByb2Nlc3NQZW5kaW5n
Q2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3IgdG8gcHJvY2VzcyBhIHBlbmRpbmcgb3BlbiBjYWxs
CisgICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJlZW50ZXJpbmcgSURCRGF0YWJhc2VCYWNrZW5kOjpj
bG9zZS4gVGhlbiB0aGUKKyAgICAvLyBiYWNrZW5kIHdvdWxkIGJlIHJlbW92ZWQgYm90aCBieSB0
aGUgaW5zcGVjdG9yIGNsb3NpbmcgaXRzIGNvbm5lY3Rpb24sIGFuZAorICAgIC8vIGJ5IHRoZSBj
b25uZWN0aW9uIHRoYXQgZmlyc3QgY2FsbGVkIGNsb3NlLgorICAgIC8vIFRvIGF2b2lkIHRoYXQg
c2l0dWF0aW9uLCBkb24ndCBwcm9jZWVkIGluIGNhc2Ugb2YgcmVlbnRyYW5jeS4KKyAgICBpZiAo
bV9jbG9zaW5nQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIFRlbXBvcmFyeUNoYW5n
ZTxib29sPiBjbG9zaW5nQ29ubmVjdGlvbihtX2Nsb3NpbmdDb25uZWN0aW9uLCB0cnVlKTsKKyAg
ICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisKKyAgICAvLyBGSVhNRTogQWRkIGEgdGVzdCBmb3Ig
dGhlIG1fcGVuZGluZ09wZW5DYWxscyBjYXNlcyBiZWxvdy4KKyAgICBpZiAoIWNvbm5lY3Rpb25D
b3VudCgpICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuc2l6ZSgpICYmICFtX3BlbmRpbmdEZWxldGVD
YWxscy5zaXplKCkpIHsKKyAgICAgICAgVHJhbnNhY3Rpb25NYXAgdHJhbnNhY3Rpb25zKG1fdHJh
bnNhY3Rpb25zKTsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
ICJDb25uZWN0aW9uIGlzIGNsb3NpbmcuIik7CisgICAgICAgIGZvciAoYXV0byYgdHJhbnNhY3Rp
b24gOiB0cmFuc2FjdGlvbnMudmFsdWVzKCkpCisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJv
cnQoZXJyb3IpOworCisgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwor
CisgICAgICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+Y2xvc2UoKTsKKworICAgICAgICAvLyBUaGlz
IGNoZWNrIHNob3VsZCBvbmx5IGJlIGZhbHNlIGluIHVuaXQgdGVzdHMuCisgICAgICAgIEFTU0VS
VChtX2ZhY3RvcnkpOworICAgICAgICBpZiAobV9mYWN0b3J5KQorICAgICAgICAgICAgbV9mYWN0
b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQobV9pZGVudGlmaWVyKTsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjM4MTk5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNrZW5kLmgKQEAgLTAsMCArMSwxNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZF9oCisjZGVmaW5lIElEQkRhdGFiYXNl
QmFja2VuZF9oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1
ZGUgIklEQlBlbmRpbmdEZWxldGVDYWxsLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ09wZW5DYWxs
LmgiCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SURCRGF0YWJhc2U7CitjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElE
QktleTsKK2NsYXNzIElEQktleVBhdGg7CitjbGFzcyBJREJTZXJ2ZXJDb25uZWN0aW9uOworY2xh
c3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOworY2xhc3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7Citz
dHJ1Y3QgSURCSW5kZXhNZXRhZGF0YTsKK3N0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwor
Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gSW5kZXhLZXlzOwordHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kIDogcHVibGljIFJlZkNv
dW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kPiB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxJREJEYXRhYmFzZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UqLCBJREJTZXJ2ZXJDb25uZWN0aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgfklEQkRhdGFi
YXNlQmFja2VuZCgpOworCisgICAgSURCU2VydmVyQ29ubmVjdGlvbiYgc2VydmVyQ29ubmVjdGlv
bigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKTsgfQorCisgICAgc3RhdGljIGNv
bnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKKyAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YS5pZDsgfQorICAgIHZvaWQgYWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgdm9p
ZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZvaWQgYWRk
SW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiwgaW50
NjRfdCBuZXdNYXhJbmRleElkKTsKKyAgICB2b2lkIHJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgb3Bl
bkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7CisKKyAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmQKKyAgICB2b2lkIGNyZWF0ZU9i
amVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQp
OworICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZvaWQgY3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUp
OworICAgIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOworCisg
ICAgdm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAgICB2b2lkIGFib3J0KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCk7CisgICAgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOworCisgICAgdm9pZCBjcmVhdGVJbmRl
eChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworCisgICAg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorICAgIHZvaWQgdHJh
bnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOworICAgIHZvaWQgdHJhbnNh
Y3Rpb25GaW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIHRyYW5zYWN0
aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOworICAg
IHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKik7CisKKyAgICBlbnVtIFRhc2tUeXBlIHsKKyAgICAgICAgTm9ybWFsVGFzayA9IDAsCisg
ICAgICAgIFByZWVtcHRpdmVUYXNrCisgICAgfTsKKworICAgIGVudW0gUHV0TW9kZSB7CisgICAg
ICAgIEFkZE9yVXBkYXRlLAorICAgICAgICBBZGRPbmx5LAorICAgICAgICBDdXJzb3JVcGRhdGUK
KyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGludDY0X3QgTWluaW11bUluZGV4SWQgPSAzMDsK
KworICAgIHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9u
bHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBwdXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+Jik7CisgICAgdm9pZCBzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBj
b25zdCBWZWN0b3I8aW50NjRfdCwgMT4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
LCAxPiYpOworICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8aW50NjRfdCwgMT4mIGluZGV4SWRz
KTsKKyAgICB2b2lkIG9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQgY291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVSYW5n
ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgY29uc3QgSURCRGF0YWJhc2VNZXRh
ZGF0YSYgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9CisgICAgdm9pZCBz
ZXRDdXJyZW50VmVyc2lvbih1aW50NjRfdCB2ZXJzaW9uKSB7IG1fbWV0YWRhdGEudmVyc2lvbiA9
IHZlcnNpb247IH0KKworICAgIGJvb2wgaGFzUGVuZGluZ1NlY29uZEhhbGZPcGVuKCkgeyByZXR1
cm4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4uZ2V0KCk7IH0KKyAgICB2b2lkIHNldFBlbmRpbmdT
ZWNvbmRIYWxmT3BlbihzdGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ09wZW5DYWxsPiBwZW5kaW5n
T3BlbkNhbGwpIHsgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gPSBXVEY6Om1vdmUocGVuZGluZ09w
ZW5DYWxsKTsgfQorCisgICAgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UmIGZhY3RvcnlCYWNr
ZW5kKCkgeyByZXR1cm4gKm1fZmFjdG9yeTsgfQorCisgICAgY2xhc3MgVmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbjsKKyAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb247CisKK3ByaXZh
dGU6CisgICAgSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIElEQlNl
cnZlckNvbm5lY3Rpb24mKTsKKworICAgIHZvaWQgb3BlbkNvbm5lY3Rpb25JbnRlcm5hbChQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pOworCisgICAgdm9pZCBvcGVu
SW50ZXJuYWxBc3luYygpOworICAgIHZvaWQgZGlkT3BlbkludGVybmFsQXN5bmMoY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vzcyk7CisKKyAgICB2b2lkIHJ1bkludFZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVx
dWVzdGVkVmVyc2lvbik7CisgICAgc2l6ZV90IGNvbm5lY3Rpb25Db3VudCgpOworICAgIHZvaWQg
cHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdPcGVuQ2FsbHMo
Ym9vbCBzdWNjZXNzKTsKKworICAgIGJvb2wgaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKTsKKyAg
ICB2b2lkIGRlbGV0ZURhdGFiYXNlQXN5bmMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKwor
ICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2lkZW50
aWZpZXI7CisKKyAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1fZmFjdG9y
eTsKKyAgICBSZWY8SURCU2VydmVyQ29ubmVjdGlvbj4gbV9zZXJ2ZXJDb25uZWN0aW9uOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvcjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3J1bm5p
bmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRf
dCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kKj4gVHJhbnNhY3Rpb25NYXA7CisgICAgVHJhbnNhY3Rp
b25NYXAgbV90cmFuc2FjdGlvbnM7CisKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SURCUGVu
ZGluZ09wZW5DYWxsPj4gbV9wZW5kaW5nT3BlbkNhbGxzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
REJQZW5kaW5nT3BlbkNhbGw+IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuOworCisgICAgRGVxdWU8
c3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdEZWxldGVDYWxsPj4gbV9wZW5kaW5nRGVsZXRlQ2Fs
bHM7CisgICAgSGFzaFNldDxSZWZQdHI8SURCQ2FsbGJhY2tzPj4gbV9kZWxldGVDYWxsYmFja3NX
YWl0aW5nQ29tcGxldGlvbjsKKworICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPj4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CisgICAgRGF0YWJhc2VDYWxs
YmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKKworICAgIGJvb2wgbV9jbG9zaW5nQ29u
bmVjdGlvbjsKKyAgICBib29sIG1fZGlkT3BlbkludGVybmFsOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRp
ZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWMwZWE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VDYWxs
YmFja3NfaAorI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRl
ICJJbmRleGVkREIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExlZ2Fj
eURhdGFiYXNlOworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3Vu
dGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCRGF0
YWJhc2VDYWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkZvcmNlZENsb3NlKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lv
biwgdWludDY0X3QgbmV3VmVyc2lvbikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG9uQWJvcnQo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoaW50NjRfdCB0cmFuc2FjdGlvbklkKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChMZWdhY3lEYXRhYmFzZSopID0gMDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFz
ZUNhbGxiYWNrc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2M2RkZWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxs
YmFja3NJbXBsLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgorCisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJMZWdhY3lEYXRhYmFzZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwoKSk7Cit9CisKK0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6
SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKCkKKyAgICA6IG1fZGF0YWJhc2UobnVsbHB0cikKK3sK
K30KKworSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjp+SURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
KCkKK3sKK30KKwordm9pZCBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6Om9uRm9yY2VkQ2xvc2Uo
KQoreworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5mb3JjZUNsb3Nl
KCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpvblZlcnNpb25DaGFuZ2Uo
dWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKK3sKKyAgICBpZiAobV9k
YXRhYmFzZSkKKyAgICAgICAgbV9kYXRhYmFzZS0+b25WZXJzaW9uQ2hhbmdlKG9sZFZlcnNpb24s
IG5ld1ZlcnNpb24pOworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y29ubmVj
dChMZWdhY3lEYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlKTsK
KyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIG1fZGF0YWJhc2UgPSBkYXRhYmFzZTsKK30KKwor
dm9pZCBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6Om9uQWJvcnQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQoreworICAgIGlmIChtX2Rh
dGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5vbkFib3J0KHRyYW5zYWN0aW9uSWQsIGVycm9y
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6Om9uQ29tcGxldGUoaW50NjRf
dCB0cmFuc2FjdGlvbklkKQoreworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFi
YXNlLT5vbkNvbXBsZXRlKHRyYW5zYWN0aW9uSWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkM2IwY2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VDYWxs
YmFja3NJbXBsX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsX2gKKworI2luY2x1
ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExlZ2FjeURhdGFiYXNlOwor
CitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwgZmluYWwgOiBwdWJsaWMgSURCRGF0YWJh
c2VDYWxsYmFja3MgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwo
KSBvdmVycmlkZTsKKworICAgIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzCisgICAgdmlydHVhbCB2
b2lkIG9uRm9yY2VkQ2xvc2UoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9u
Q2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pIG92ZXJyaWRl
OworCisgICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgb25D
b21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2
b2lkIGNvbm5lY3QoTGVnYWN5RGF0YWJhc2UqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJ
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKTsKKworICAgIC8vIFRoZSBpbml0aWFsIElEQk9wZW5E
QlJlcXVlc3Qgb3IgZmluYWwgSURCRGF0YWJhc2UgbWFpbnRhaW5zIGEgUmVmUHRyIHRvIHRoaXMK
KyAgICBMZWdhY3lEYXRhYmFzZSogbV9kYXRhYmFzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zMjk5MDE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKyNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaAorI2RlZmluZSBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQu
aCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIElEQkNhbGxiYWNrczsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmQ7CitjbGFz
cyBJREJEYXRhYmFzZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZDsKK2NsYXNzIElEQkRhdGFi
YXNlQ2FsbGJhY2tzOworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOworY2xhc3MgU2VjdXJp
dHlPcmlnaW47CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCit0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOworCisvLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJGYWN0b3J5IChh
c3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5jKS4KKy8vIFRoaXMgaXMgaW1wbGVtZW50ZWQg
YnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90aGVycyAoaW4gb3JkZXIg
dG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJzKS4gQWxsIGNhbGxzIHRv
IHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQKKy8vIHRyaWdnZXIgd29y
ayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KK2NsYXNzIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90
IHZlcnNpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgU2VjdXJpdHlPcmlnaW4m
IG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4m
IG1haW5GcmFtZU9yaWdpbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUlEQkRhdGFiYXNlQmFj
a2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpID0gMDsKKworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Vf
aAorCisjZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdEZWxldGVD
YWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGlu
Z0RlbGV0ZUNhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmJhMmUx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0lEQlBlbmRpbmdEZWxldGVDYWxsLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSURCUGVuZGluZ0RlbGV0ZUNhbGxfaAorI2RlZmluZSBJREJQZW5kaW5nRGVsZXRl
Q2FsbF9oCisKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJREJQZW5kaW5nRGVsZXRlQ2FsbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SURCUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
KyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIElE
QkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorI2VuZGlmIC8vIElEQlBlbmRpbmdEZWxldGVDYWxsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nT3BlbkNhbGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nT3BlbkNhbGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjUzZWY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRp
bmdPcGVuQ2FsbC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlBl
bmRpbmdPcGVuQ2FsbF9oCisjZGVmaW5lIElEQlBlbmRpbmdPcGVuQ2FsbF9oCisKKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJDYWxsYmFja3M7CitjbGFzcyBJREJEYXRhYmFzZUNh
bGxiYWNrczsKKworY2xhc3MgSURCUGVuZGluZ09wZW5DYWxsIHsKK3B1YmxpYzoKKyAgICBJREJQ
ZW5kaW5nT3BlbkNhbGwoSURCQ2FsbGJhY2tzJiBjYWxsYmFja3MsIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzJiBkYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2
ZXJzaW9uKQorICAgICAgICA6IG1fY2FsbGJhY2tzKCZjYWxsYmFja3MpCisgICAgICAgICwgbV9k
YXRhYmFzZUNhbGxiYWNrcygmZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9u
KHZlcnNpb24pCisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAg
eworICAgIH0KKworICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxs
YmFja3MuZ2V0KCk7IH0KKyAgICBJREJEYXRhYmFzZUNhbGxiYWNrcyogZGF0YWJhc2VDYWxsYmFj
a3MoKSB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzLmdldCgpOyB9CisgICAgdWludDY0X3Qg
dmVyc2lvbigpIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorICAgIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JZDsgfQorCitwcml2YXRlOgorICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKKyAgICB1aW50NjRfdCBtX3ZlcnNpb247Cisg
ICAgY29uc3QgaW50NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNlbmRpZiAvLyBJ
REJQZW5kaW5nT3BlbkNhbGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjU4MTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDxtdXRleD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKwordXNpbmcgV1RGOjpUaHJlYWRTcGVj
aWZpYzsKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4+IFRyYW5zYWN0
aW9uTGlzdDsKKworc3RhdGljIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9uTGlzdD4mIHRyYW5z
YWN0aW9ucygpCit7CisgICAgLy8gRklYTUU6IE1vdmUgdGhlIFZlY3RvciB0byBTY3JpcHRFeGVj
dXRpb25Db250ZXh0IHRvIGF2b2lkIGRlYWxpbmcgd2l0aAorICAgIC8vIHRocmVhZC1sb2NhbCBz
dG9yYWdlLgorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0aWMg
VGhyZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0PiogdHJhbnNhY3Rpb25zOworICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKKyAgICAgICAgdHJhbnNhY3Rpb25zID0gbmV3IFRocmVh
ZFNwZWNpZmljPFRyYW5zYWN0aW9uTGlzdD47CisgICAgfSk7CisKKyAgICByZXR1cm4gKnRyYW5z
YWN0aW9uczsKK30KKwordm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdU
cmFuc2FjdGlvbihQYXNzUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKK3sK
KyAgICB0cmFuc2FjdGlvbnMoKS0+YXBwZW5kKHRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBJREJQ
ZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpkZWFjdGl2YXRlTmV3VHJhbnNhY3Rpb25zKCkKK3sK
KyAgICBUaHJlYWRTcGVjaWZpYzxUcmFuc2FjdGlvbkxpc3Q+JiBsaXN0ID0gdHJhbnNhY3Rpb25z
KCk7CisgICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6ICpsaXN0KQorICAgICAgICB0cmFuc2Fj
dGlvbi0+c2V0QWN0aXZlKGZhbHNlKTsKKyAgICAvLyBGSVhNRTogRXhlcmNpc2UgdGhpcyBjYWxs
IHRvIGNsZWFyKCkgaW4gYSBsYXlvdXQgdGVzdC4KKyAgICBsaXN0LT5jbGVhcigpOworfQorCit9
OworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNzNmZTI3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCisjZGVm
aW5lIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGVnYWN5VHJhbnNhY3Rp
b247CisKKy8vIFRoaXMgY2xhc3Mga2VlcHMgdHJhY2sgb2YgdGhlIHRyYW5zYWN0aW9ucyBjcmVh
dGVkIGR1cmluZyB0aGUgY3VycmVudAorLy8gSmF2YXNjcmlwdCBleGVjdXRpb24gY29udGV4dC4g
VHJhbnNhY3Rpb25zIGhhdmUgYW4gaW50ZXJuYWwgfGFjdGl2ZXwgZmxhZworLy8gd2hpY2ggaXMg
c2V0IHRvIHRydWUgb24gY3JlYXRpb24sIGJ1dCBtdXN0IGJlIHNldCB0byBmYWxzZSB3aGVuIGNv
bnRyb2wKKy8vIHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3AuCisKK2NsYXNzIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IpOworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFkZE5ld1RyYW5z
YWN0aW9uKFBhc3NSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+KTsKKyAgICBzdGF0aWMgdm9pZCBk
ZWFjdGl2YXRlTmV3VHJhbnNhY3Rpb25zKCk7CisKK3ByaXZhdGU6CisgICAgSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvcigpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJQZW5kaW5nVHJh
bnNhY3Rpb25Nb25pdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliYTg3YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJT
ZXJ2ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0
aW9ucy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPElEQlRyYW5zYWN0aW9u
QmFja2VuZD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5k
KiBkYXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywg
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBIYXNoU2V0PGludDY0X3Q+
IG9iamVjdFN0b3JlSGFzaFNldDsKKyAgICBmb3IgKGF1dG8mIGlkIDogb2JqZWN0U3RvcmVJZHMp
CisgICAgICAgIG9iamVjdFN0b3JlSGFzaFNldC5hZGQoaWQpOworCisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kKGRhdGFiYXNlQmFja2VuZCwgaWQsIGNhbGxi
YWNrcywgb2JqZWN0U3RvcmVIYXNoU2V0LCBtb2RlKSk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZCogZGF0YWJhc2VC
YWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6
OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQorICAgIDogbV9vYmplY3RTdG9yZUlkcyhvYmplY3RTdG9y
ZUlkcykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9zdGF0ZShVbm9wZW5lZCkKKyAgICAs
IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAg
ICAsIG1fZGF0YWJhc2UoZGF0YWJhc2VCYWNrZW5kKQorICAgICwgbV90YXNrVGltZXIoKnRoaXMs
ICZJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKQorICAgICwgbV9wZW5kaW5n
UHJlZW1wdGl2ZUV2ZW50cygwKQorICAgICwgbV9pZChpZCkKK3sKKyAgICAvLyBXZSBwYXNzIGEg
cmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KKyAgICBy
ZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKKworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhpcyk7CisKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBiYWNrZW5kKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnNl
cnZlckNvbm5lY3Rpb24oKS5vcGVuVHJhbnNhY3Rpb24oaWQsIG9iamVjdFN0b3JlSWRzLCBtb2Rl
LCBbYmFja2VuZF0oYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAg
ICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbYmFja2VuZF0oKSB7CisgICAgICAgICAgICAgICAg
YmFja2VuZC0+YWJvcnQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB0cmFuc2Fj
dGlvbiB3YXMgYWJvcnRlZCBiZWZvcmUgdGhlIHNlcnZlciBjb25uZWN0aW9uIGZpbmlzaGVkIG9w
ZW5pbmcgdGhlIHRyYW5zYWN0aW9uLgorICAgICAgICBpZiAoYmFja2VuZC0+bV9zdGF0ZSA9PSBG
aW5pc2hlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBiYWNrZW5kLT5tX3N0YXRl
ID0gVW51c2VkOworICAgICAgICBpZiAoYmFja2VuZC0+aGFzUGVuZGluZ1Rhc2tzKCkpCisgICAg
ICAgICAgICBiYWNrZW5kLT5zdGFydCgpOworICAgIH0pOworfQorCitJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tlbmQoKQoreworICAgIC8vIEl0IHNob3VsZG4ndCBi
ZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW5sZXNzIGl0J3MgdW51
c2VkLCBjb21wbGV0ZSwgb3IgYWJvcnRlZC4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hl
ZCB8fCBtX3N0YXRlID09IFVudXNlZCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0eXBlLCBQYXNzUmVm
UHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlv
bj4gYWJvcnRUYXNrKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAodHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2sp
CisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBlbHNlCisgICAgICAgIG1f
cHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisKKyAgICBpZiAoYWJvcnRUYXNrKQor
ICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKKworICAgIGlmICht
X3N0YXRlID09IFVub3BlbmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZSA9
PSBVbnVzZWQpCisgICAgICAgIHN0YXJ0KCk7CisgICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBSdW5u
aW5nICYmICFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3Rhc2tUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydCgpCit7
CisgICAgYWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciAodW5rbm93biBjYXVzZSkiKSk7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoZXJyb3IpCisgICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydCAtICglcykgJXMi
LCBlcnJvci0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgZWxzZQorICAgICAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9u
QmFja2VuZDo6YWJvcnQgKG5vIGVycm9yKSIpOworI2VuZGlmCisKKyAgICBpZiAobV9zdGF0ZSA9
PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB3YXNSdW5uaW5nID0gbV9z
dGF0ZSA9PSBSdW5uaW5nOworCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGFib3J0IHN0
ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vy
c2VsdmVzCisgICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgorICAgIFJl
ZjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHByb3RlY3QoKnRoaXMpOworCisgICAgbV9zdGF0ZSA9
IEZpbmlzaGVkOworICAgIG1fdGFza1RpbWVyLnN0b3AoKTsKKworICAgIGlmICh3YXNSdW5uaW5n
KQorICAgICAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkucm9sbGJhY2tUcmFuc2Fj
dGlvblN5bmMobV9pZCk7CisKKyAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCisg
ICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8
SURCU3luY2hyb25vdXNPcGVyYXRpb24+IHRhc2sobV9hYm9ydFRhc2tRdWV1ZS50YWtlRmlyc3Qo
KSk7CisgICAgICAgIHRhc2stPnBlcmZvcm0oKTsKKyAgICB9CisKKyAgICAvLyBCYWNraW5nIHN0
b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUg
c2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFj
a3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3RvcmUKKyAg
ICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KKyAgICBj
bG9zZU9wZW5DdXJzb3JzKCk7CisKKyAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCku
cmVzZXRUcmFuc2FjdGlvblN5bmMobV9pZCk7CisKKyAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBh
bHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZp
ZWQsIGFzCisgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0
aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOwor
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisKKyAgICBSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZSA9IG1fZGF0YWJhc2UucmVsZWFzZSgpOworCisg
ICAgaWYgKG1fY2FsbGJhY2tzKQorICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChpZCgpLCBl
cnJvcik7CisKKyAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQo
dGhpcyk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjppc1Rhc2tRdWV1ZUVtcHR5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmlzRW1wdHkoKSAm
JiBtX3Rhc2tRdWV1ZS5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpoYXNQZW5kaW5nVGFza3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzIHx8ICFpc1Rhc2tRdWV1ZUVtcHR5KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpyZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCogY3Vyc29yKQor
eworICAgIG1fb3BlbkN1cnNvcnMuYWRkKGN1cnNvcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKiBjdXJzb3Ip
Cit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKK30KKwordm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmQ6OnJ1bigpCit7CisgICAgLy8gVHJhbnNhY3Rpb25Db29yZGluYXRvciBo
YXMgc3RhcnRlZCB0aGlzIHRyYW5zYWN0aW9uLiBTY2hlZHVsZSBhIHRpbWVyCisgICAgLy8gdG8g
cHJvY2VzcyB0aGUgZmlyc3QgdGFzay4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydFBlbmRp
bmcgfHwgbV9zdGF0ZSA9PSBSdW5uaW5nKTsKKyAgICBBU1NFUlQoIW1fdGFza1RpbWVyLmlzQWN0
aXZlKCkpOworCisgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZDo6c3RhcnQoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IFVu
dXNlZCk7CisKKyAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOworICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBt
X2RhdGFiYXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpjb21taXQoKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpjb21taXQgdHJhbnNhY3Rpb24gJWxsaSBpbiBzdGF0ZSAldSIsIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4obV9pZCksIG1fc3RhdGUpOworCisgICAgLy8gSW4gbXVsdGlwcm9j
ZXNzIHBvcnRzLCBmcm9udC1lbmQgbWF5IGhhdmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBhbiBh
Ym9ydCBoYXMgYWxyZWFkeQorICAgIC8vIGJlZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5IGJ5
IHRoZSBiYWNrLWVuZC4KKyAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW5vcGVuZWQgfHwgbV9zdGF0ZSA9PSBVbnVz
ZWQgfHwgbV9zdGF0ZSA9PSBSdW5uaW5nKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwor
CisgICAgLy8gRnJvbnQtZW5kIGhhcyByZXF1ZXN0ZWQgYSBjb21taXQsIGJ1dCB0aGVyZSBtYXkg
YmUgdGFza3MgbGlrZSBjcmVhdGVJbmRleCB3aGljaAorICAgIC8vIGFyZSBjb25zaWRlcmVkIHN5
bmNocm9ub3VzIGJ5IHRoZSBmcm9udC1lbmQgYnV0IGFyZSBwcm9jZXNzZWQgYXN5bmNocm9ub3Vz
bHkuCisgICAgaWYgKGhhc1BlbmRpbmdUYXNrcygpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjb21taXQgLSBOb3QgY29tbWl0dGluZyBub3csIHRy
YW5zYWN0aW9uIHN0aWxsIGhhcyBwZW5kaW5nIHRhc2tzIChUcmFuc2FjdGlvbiAlbGxpKSIsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4obV9pZCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3
aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVm
b3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAgIC8vIGFsaXZl
IHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kPiBiYWNrZW5kKHRoaXMpOworCisgICAgYm9vbCB1bnVzZWQgPSBtX3N0YXRlID09IFVu
dXNlZCB8fCBtX3N0YXRlID09IFVub3BlbmVkOworICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKKwor
ICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkOworCisgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29u
bmVjdGlvbigpLmNvbW1pdFRyYW5zYWN0aW9uKG1faWQsIFtiYWNrZW5kLCB0aGlzLCBjb21taXR0
ZWQsIHVudXNlZF0oYm9vbCBzdWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gVGhpcyBtaWdo
dCBiZSBjb21taXRUcmFuc2FjdGlvbiByZXF1ZXN0IGFib3J0aW5nIGR1cmluZyBvciBhZnRlciBz
eW5jaHJvbm91cyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KCkgY2FsbC4KKyAgICAgICAg
Ly8gVGhpcyBjYW4gZWFzaWx5IGhhcHBlbiBpZiB0aGUgcGFnZSBpcyBuYXZpZ2F0ZWQgYmVmb3Jl
IGFsbCB0cmFuc2FjdGlvbnMgZmluaXNoLgorICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgaGF2
ZSBubyBmdXJ0aGVyIGNsZWFudXAgYW5kIGRvbid0IG5lZWQgdG8gbWFrZSBhbnkgY2FsbGJhY2tz
LgorICAgICAgICBpZiAoIW1fZGF0YWJhc2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCghc3VjY2Vz
cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb21taXR0ZWQg
fD0gc3VjY2VzczsKKworICAgICAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2
aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAg
ICAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJl
ZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5nIHN0b3JlCisgICAgICAgIC8vIGl0c2VsZiB0
byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgorICAgICAgICBjbG9zZU9wZW5D
dXJzb3JzKCk7CisKKyAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJlc2V0
VHJhbnNhY3Rpb24obV9pZCwgW10oKSB7IH0pOworCisgICAgICAgIC8vIFRyYW5zYWN0aW9ucyBt
dXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBu
b3RpZmllZCwgYXMKKyAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5ibG9j
a3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCisgICAgICAgIGlmICghdW51
c2VkKQorICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5k
aWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25GaW5pc2hlZCh0aGlzKTsKKworICAgICAgICBpZiAoY29tbWl0dGVkKSB7CisgICAgICAgICAg
ICBtX2NhbGxiYWNrcy0+b25Db21wbGV0ZShpZCgpKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKHRoaXMpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoaWQoKSwgSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5h
bCBlcnJvciBjb21taXR0aW5nIHRyYW5zYWN0aW9uLiIpKTsKKyAgICAgICAgICAgIG1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kOjp0YXNrVGltZXJGaXJlZCgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkIik7CisKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGFydFBlbmRpbmcpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVj
dGlvbigpLmJlZ2luVHJhbnNhY3Rpb24obV9pZCwgW10oKSB7IH0pOworICAgICAgICBtX3N0YXRl
ID0gUnVubmluZzsKKyAgICB9CisKKyAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBv
YmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgYSB0YXNrLgorICAgIC8vIFRh
a2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIHRoaXMgb2JqZWN0IGFsaXZlIHNvIHRoYXQgdGFz
a3MgY2FuCisgICAgLy8gc3VjY2Vzc2Z1bGx5IG1ha2UgdGhlaXIgY29tcGxldGlvbiBjYWxsYmFj
a3MuCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gc2VsZih0aGlzKTsKKworICAg
IFRhc2tRdWV1ZSogdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3By
ZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7CisgICAgaWYgKCF0YXNrUXVldWUtPmlz
RW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRl
ID09IFJ1bm5pbmcpOworICAgICAgICBSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrKHRhc2tRdWV1
ZS0+dGFrZUZpcnN0KCkpOworICAgICAgICB0YXNrLT5wZXJmb3JtKFtzZWxmLCB0aGlzLCB0YXNr
XSgpIHsKKyAgICAgICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBw
ZW5kaW5nIHRhc2tzLCB3ZSBoYXZlbid0IGFscmVhZHkgY29tbWl0dGVkL2Fib3J0ZWQsCisgICAg
Ly8gYW5kIHRoZSBmcm9udC1lbmQgcmVxdWVzdGVkIGEgY29tbWl0LCBpdCBpcyBub3cgc2FmZSB0
byBkbyBzby4KKyAgICBpZiAoIWhhc1BlbmRpbmdUYXNrcygpICYmIG1fc3RhdGUgIT0gRmluaXNo
ZWQgJiYgbV9jb21taXRQZW5kaW5nKQorICAgICAgICBjb21taXQoKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6OmNsb3NlT3BlbkN1cnNvcnMoKQoreworICAgIGZvciAoYXV0byYg
Y3Vyc29yIDogbV9vcGVuQ3Vyc29ycykKKyAgICAgICAgY3Vyc29yLT5jbG9zZSgpOworICAgIG1f
b3BlbkN1cnNvcnMuY2xlYXIoKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNj
aGVkdWxlQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKK3sKKyAgICBzY2hlZHVsZVRhc2soQ3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0
YWRhdGEuaWQpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2Jq
ZWN0U3RvcmVNZXRhZGF0YSkKK3sKKyAgICBzY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgRGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2Fs
bGJhY2tzLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBzY2hl
ZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyks
IElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgU3RyaW5nOjpudW1iZXIobWV0YWRhdGEudmVyc2lvbiksIG1ldGFkYXRhLnZlcnNpb24p
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ3JlYXRlSW5kZXhP
cGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
bmRleE1ldGFkYXRhKQoreworICAgIHNjaGVkdWxlVGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YS5p
ZCkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVJbmRl
eE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0YWRhdGEpCit7CisgICAgc2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSksIERlbGV0ZUluZGV4
QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRh
KSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUdldE9wZXJhdGlv
bihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBl
LCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxl
UHV0T3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0
YWRhdGEsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCit7CisgICAgc2NoZWR1bGVUYXNrKFB1
dE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6
ZV90IGluZGV4Q291bnQpCit7CisgICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6
UHJlZW1wdGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGlu
ZGV4Q291bnQpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlT3Bl
bkN1cnNvck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCit7CisgICAgc2NoZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJz
b3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZUNvdW50T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2soQ291bnRPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2Fs
bGJhY2tzKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZURlbGV0
ZVJhbmdlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7Cisg
ICAgc2NoZWR1bGVUYXNrKERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6c2NoZWR1bGVDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hl
ZHVsZVRhc2soQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0
b3JlSWQsIGNhbGxiYWNrcykpOworfQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uODNiOWVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaApAQCAt
MCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kX2gKKyNk
ZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURC
Q3Vyc29yQmFja2VuZDsKK2NsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOworCitjbGFzcyBJREJU
cmFuc2FjdGlvbkJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gY3Jl
YXRlKElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKKyAgICB+SURCVHJhbnNhY3Rpb25C
YWNrZW5kKCk7CisKKyAgICB2b2lkIGNvbW1pdCgpOworICAgIHZvaWQgYWJvcnQoKTsKKyAgICB2
b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOworCisgICAgdm9pZCBydW4o
KTsKKyAgICBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgIHsgcmV0dXJu
IG1fbW9kZTsgfQorICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgIHsg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KKworICAgIHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NS
ZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3BlcmF0
aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tl
bmQ6Ok5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KKyAgICB2b2lkIHNjaGVkdWxlVGFz
ayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4s
IFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIp
OworCisgICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOworICAg
IHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOworCisgICAgdm9p
ZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0K
KyAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1w
dGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAwKTsgfQor
CisgICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJldHVybiAqbV9k
YXRhYmFzZTsgfQorCisgICAgdm9pZCBzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKKyAgICB2b2lkIHNjaGVkdWxlRGVsZXRl
T2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOworICAg
IHZvaWQgc2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVy
c2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpOworICAgIHZvaWQgc2NoZWR1bGVD
cmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmKTsKKyAgICB2b2lkIHNjaGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRpb24oaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7CisgICAgdm9pZCBzY2hl
ZHVsZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRl
eGVkREI6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBz
Y2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIElEQkRhdGFiYXNl
QmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpOworICAgIHZvaWQg
c2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQpOworICAg
IHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpU
YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIHNjaGVkdWxlQ291
bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQg
c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQg
c2NoZWR1bGVDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJl
dHVybiBtX2lkOyB9CisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRh
dGFiYXNlQmFja2VuZCosIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUpOworCisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIFVub3BlbmVkLCAv
LyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgY3JlYXRlZC4KKyAgICAgICAgVW51
c2VkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGNyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5
ZXQuCisgICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBiYWNraW5n
IHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KKyAgICAgICAgUnVubmluZywgLy8g
QmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlzaGVkLgor
ICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgorICAgIH07
CisKKyAgICB2b2lkIHN0YXJ0KCk7CisKKyAgICBib29sIGlzVGFza1F1ZXVlRW1wdHkoKSBjb25z
dDsKKyAgICBib29sIGhhc1BlbmRpbmdUYXNrcygpIGNvbnN0OworCisgICAgdm9pZCB0YXNrVGlt
ZXJGaXJlZCgpOworICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgY29uc3QgSGFz
aFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOworICAgIGNvbnN0IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlIG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgYm9vbCBtX2Nv
bW1pdFBlbmRpbmc7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBtX2RhdGFiYXNlOworCisgICAgdHlw
ZWRlZiBEZXF1ZTxSZWZQdHI8SURCT3BlcmF0aW9uPj4gVGFza1F1ZXVlOworICAgIFRhc2tRdWV1
ZSBtX3Rhc2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVlOworICAg
IERlcXVlPFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4+IG1fYWJvcnRUYXNrUXVldWU7
CisKKyAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBp
bnN0ZWFkLgorICAgIFRpbWVyIG1fdGFza1RpbWVyOworICAgIGludCBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzOworCisgICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kKj4gbV9vcGVuQ3Vyc29y
czsKKworICAgIGludDY0X3QgbV9pZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVy
YXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGY2ODdhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMjg0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgi
CisjaW5jbHVkZSAiSURCUmVjb3JkSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIklEQlNlcnZlckNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNkZWZpbmUgU1RBTkRB
UkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0sgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pPiBvcGVyYXRpb25DYWxsYmFjayA9IFwKKyAgICBbb3BlcmF0aW9u
LCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ip
IHsgXAorICAgICAgICBpZiAoZXJyb3IpIFwKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+bV90cmFu
c2FjdGlvbi0+YWJvcnQoZXJyb3IpOyBcCisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOyBc
CisgICAgfTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIp
OworCisgICAgUmVmUHRyPENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhp
cyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVPYmplY3RTdG9yZSgq
bV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBDcmVh
dGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlv
bkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlSW5kZXhPcGVyYXRpb24i
KTsKKworICAgIFJlZlB0cjxDcmVhdGVJbmRleE9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwor
ICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlSW5kZXgoKm1fdHJhbnNhY3Rp
b24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Cit9CisKK3ZvaWQgQ3JlYXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uIik7CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVJ
bmRleChtX29iamVjdFN0b3JlSUQsIG1faW5kZXhJRCk7Cit9CisKK3ZvaWQgRGVsZXRlSW5kZXhP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7CisKKyAg
ICBSZWZQdHI8RGVsZXRlSW5kZXhPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFO
REFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZUluZGV4KCptX3RyYW5zYWN0aW9uLCAqdGhp
cywgb3BlcmF0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b246OnBlcmZvcm0oKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbiIpOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuYWRkSW5kZXgobV9vYmpl
Y3RTdG9yZUlELCBtX2luZGV4TWV0YWRhdGEsIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7
Cit9CisKK3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBj
b21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJHZXRPcGVyYXRpb24i
KTsKKworICAgIFJlZlB0cjxHZXRPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFO
REFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmdldCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIFt0aGlz
LCBvcGVyYXRpb24sIG9wZXJhdGlvbkNhbGxiYWNrXShjb25zdCBJREJHZXRSZXN1bHQmIHJlc3Vs
dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBwcnBFcnJvcikgeworICAgICAgICBSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBwcnBFcnJvcjsKKworICAgICAgICBpZiAoZXJy
b3IpCisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQudmFsdWVCdWZmZXIpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0LmtleURhdGEuaXNOdWxsKQorICAgICAgICAgICAgICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHJlc3VsdC5rZXlEYXRhLm1heWJlQ3JlYXRl
SURCS2V5KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdC5rZXlEYXRhLmlzTnVsbCkKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcyhyZXN1bHQudmFsdWVCdWZmZXIsIHJlc3VsdC5rZXlEYXRhLm1heWJlQ3JlYXRlSURC
S2V5KCksIHJlc3VsdC5rZXlQYXRoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MocmVzdWx0LnZhbHVlQnVmZmVyLmdldCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdGlvbkNhbGxiYWNr
KGVycm9yLnJlbGVhc2UoKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJm
b3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJQdXRPcGVyYXRpb24iKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+
bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seSk7CisgICAgQVNT
RVJUKG1faW5kZXhJRHMuc2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7CisKKyAgICBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5wdXQoKm1fdHJhbnNhY3Rp
b24sICp0aGlzLCBbdGhpcywgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKSB7CisgICAgICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBycEVycm9yOworICAgICAgICBpZiAoa2V5
KSB7CisgICAgICAgICAgICBBU1NFUlQoIWVycm9yKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tz
LT5vblN1Y2Nlc3Moa2V5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChl
cnJvcik7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7CisgICAgICAg
IH0KKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgU2V0
SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJTZXRJbmRleGVzUmVhZHlP
cGVyYXRpb24iKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyAr
K2kpCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCk7
CisKKyAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRpb25DYWxsYmFjayk7Cit9CisKK3ZvaWQg
T3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiT3BlbkN1cnNvck9wZXJhdGlv
biIpOworCisgICAgUmVmUHRyPE9wZW5DdXJzb3JPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsK
KyAgICBhdXRvIGNhbGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNr
XShpbnQ2NF90IGN1cnNvcklELCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikg
eworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICB9IGVs
c2UgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZXJyb3IgYnV0IGFs
c28gbm8ga2V5LCB0aGVuIHRoZSBjdXJzb3IgaGFkIG5vIHJlY29yZHMuCisgICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KG51bGxwdHIp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5k
PiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kOjpjcmVhdGUoY3Vyc29ySUQsIG1fY3Vyc29yVHlw
ZSwgbV90YXNrVHlwZSwgKm1fdHJhbnNhY3Rpb24sIG1fb2JqZWN0U3RvcmVJRCk7CisgICAgICAg
ICAgICBjdXJzb3ItPnVwZGF0ZUN1cnNvckRhdGEoa2V5LmdldCgpLCBwcmltYXJ5S2V5LmdldCgp
LCB2YWx1ZUJ1ZmZlci5nZXQoKSk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KGN1cnNvci5yZWxlYXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgY29tcGxldGlvbkNhbGxi
YWNrKCk7CisgICAgfTsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLm9wZW5DdXJzb3IoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBjYWxsYmFjayk7Cit9
CisKK3ZvaWQgQ291bnRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNv
bXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkNvdW50T3BlcmF0aW9u
Iik7CisKKyAgICBSZWZQdHI8Q291bnRPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBh
dXRvIGNhbGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShpbnQ2
NF90IGNvdW50LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGUgTGV2ZWxEQiBwb3J0IG5ldmVyIGhhZCBhbiBlcnJvciBjb25kaXRpb24gZm9yIHRo
ZSBjb3VudCBvcGVyYXRpb24uCisgICAgICAgIC8vIFdlIHByb2JhYmx5IG5lZWQgdG8gc3VwcG9y
dCBhbiBlcnJvciBmb3IgdGhlIGNvdW50IG9wZXJhdGlvbiwgYnJlYWtpbmcgdGhlIExldmVsREIg
cG9ydC4KKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CisKKyAgICAgICAg
Y29tcGxldGlvbkNhbGxiYWNrKCk7CisgICAgfTsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNvdW50KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgY2Fs
bGJhY2spOworfQorCit2b2lkIERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPERlbGV0ZVJhbmdlT3BlcmF0
aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgYXV0byBjYWxsYmFjayA9IFt0aGlzLCBvcGVyYXRp
b24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
cikgeworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihlcnJvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoKTsKKworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9OworCisgICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlUmFuZ2UoKm1f
dHJhbnNhY3Rpb24sICp0aGlzLCBjYWxsYmFjayk7Cit9CisKK3ZvaWQgQ2xlYXJPYmplY3RTdG9y
ZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxi
YWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbiIp
OworCisgICAgUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlz
KTsKKworICAgIGF1dG8gY2xlYXJDYWxsYmFjayA9IFt0aGlzLCBvcGVyYXRpb24sIGNvbXBsZXRp
b25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBwcnBFcnJvcikgeworICAg
ICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBwcnBFcnJvcjsKKworICAgICAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsK
KyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworCisgICAg
ICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOworICAgIH07CisKKyAgICBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jbGVhck9iamVjdFN0b3JlKCptX3RyYW5zYWN0
aW9uLCAqdGhpcywgY2xlYXJDYWxsYmFjayk7Cit9CisKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7
CisKKyAgICBSZWZQdHI8RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlz
KTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZU9iamVjdFN0b3JlKCpt
X3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAi
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiIpOworCisgICAgdWludDY0X3Qgb2xkVmVyc2lvbiA9IG1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkubWV0YWRhdGEoKS52ZXJzaW9uOworICAgIGlmIChvbGRW
ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgb2xk
VmVyc2lvbiA9IDA7CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hh
bmdlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihtX3ZlcnNpb24pID4gb2xkVmVyc2lvbik7CisKKyAgICBzdGQ6OmZ1bmN0aW9uPHZv
aWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IG9wZXJhdGlvbkNhbGxiYWNrID0gW29s
ZFZlcnNpb24sIG9wZXJhdGlvbiwgdGhpcywgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvciA9IHBycEVycm9yOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rp
b24tPmFib3J0KGVycm9yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5oYXNQZW5kaW5nU2Vjb25kSGFsZk9wZW4oKSk7Cisg
ICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNldEN1cnJlbnRWZXJzaW9uKG1f
dmVyc2lvbik7CisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNldFBlbmRp
bmdTZWNvbmRIYWxmT3BlbihzdGQ6Om1ha2VfdW5pcXVlPElEQlBlbmRpbmdPcGVuQ2FsbD4oKm1f
Y2FsbGJhY2tzLCAqbV9kYXRhYmFzZUNhbGxiYWNrcywgbV90cmFuc2FjdGlvbi0+aWQoKSwgbV92
ZXJzaW9uKSk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZl
cnNpb24sICZtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLm1ldGFkYXRhKCkpOworICAgICAgICB9CisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygp
OworICAgIH07CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5jaGFuZ2VEYXRhYmFzZVZlcnNpb24oKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRp
b25DYWxsYmFjayk7Cit9CisKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uIik7CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVPYmplY3RT
dG9yZShtX29iamVjdFN0b3JlSUQpOworfQorCit2b2lkIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb246OnBlcmZvcm0oKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbiIpOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuYWRk
T2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbnZhbGlkSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNp
b25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
c2V0Q3VycmVudFZlcnNpb24obV9wcmV2aW91c0ludFZlcnNpb24pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MTA5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3Bl
cmF0aW9ucy5oCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5k
T3BlcmF0aW9uc19oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJJREJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIElEQlNlcnZlckNvbm5lY3Rpb247CisKK2NsYXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJP
cGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJh
bnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUg
ZmluYWw7CisKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1l
dGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZU1ldGFkYXRhOyB9CisKK3ByaXZh
dGU6CisgICAgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVN
ZXRhZGF0YSkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAs
IG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsK
KyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsK
K307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
TWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlv
bi5nZXQoKTsgfQorICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
TWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlTWV0YWRhdGE7IH0KKworcHJp
dmF0ZToKKyAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9y
ZU1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAg
ICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgeworICAg
IH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Cit9
OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBw
dWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgdmVy
c2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCB2ZXJz
aW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJy
aWRlIGZpbmFsOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KKyAgICBpbnQ2NF90IHZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICBJREJEYXRhYmFzZUNhbGxiYWNrcyog
ZGF0YWJhc2VDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzLmdl
dCgpOyB9CisKK3ByaXZhdGU6CisgICAgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRh
dGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisg
ICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNh
Y3Rpb247CisgICAgaW50NjRfdCBtX3ZlcnNpb247CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNl
Q2FsbGJhY2tzOworfTsKKworY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rp
b24sIG9iamVjdFN0b3JlSWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBv
dmVycmlkZSBmaW5hbDsKK3ByaXZhdGU6CisgICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJRDsKK307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERlbGV0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgb3ZlcnJpZGUgZmluYWw7Citwcml2YXRlOgorICAgIERl
bGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0
YSkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOworfTsKKworY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURC
U3luY2hyb25vdXNPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCU3luY2hy
b25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNp
b24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIHByZXZpb3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJz
aW9uKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgb3ZlcnJpZGUgZmluYWw7
Citwcml2YXRlOgorICAgIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50
NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAgICAgLCBtX3ByZXZpb3VzVmVyc2lvbihwcmV2aW91c1ZlcnNpb24pCisgICAg
ICAgICwgbV9wcmV2aW91c0ludFZlcnNpb24ocHJldmlvdXNJbnRWZXJzaW9uKQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwor
ICAgIFN0cmluZyBtX3ByZXZpb3VzVmVyc2lvbjsKKyAgICBpbnQ2NF90IG1fcHJldmlvdXNJbnRW
ZXJzaW9uOworfTsKKworY2xhc3MgQ3JlYXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCT3Bl
cmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENyZWF0ZUluZGV4T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFs
OworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RT
dG9yZUlEOyB9CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaWRiSW5kZXhNZXRhZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRhZGF0YTsgfQorCitwcml2YXRlOgorICAgIENyZWF0
ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkK
KyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJRChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1l
dGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
PiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAg
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsKKworY2xhc3MgQ3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRl
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFs
OworcHJpdmF0ZToKKyAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElEKGluZGV4SWQp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAg
Y29uc3QgaW50NjRfdCBtX2luZGV4SUQ7Cit9OworCitjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlv
biA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVsZXRlSW5kZXhPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAgICB9CisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFj
aykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
ZGJJbmRleE1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleE1ldGFkYXRhOyB9CisKK3By
aXZhdGU6CisgICAgRGVsZXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRh
JiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisg
ICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRl
eE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSUQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7
Cit9OworCitjbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNo
cm9ub3VzT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQlN5bmNocm9ub3Vz
T3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRh
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVsZXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOworICAg
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFsOworcHJpdmF0ZToK
KyAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlEOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwor
fTsKKworY2xhc3MgR2V0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEdldE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFj
aykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KKyAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4SUQ7IH0KKyAgICBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQorICAgIElEQktleVJhbmdlKiBrZXlS
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2UuZ2V0KCk7IH0KKyAgICBib29sIGF1dG9J
bmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9JbmNyZW1lbnQ7IH0KKyAgICBJREJLZXlQ
YXRoIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2tleVBhdGg7IH0KKworcHJpdmF0ZToKKyAg
ICBHZXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERC
OjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29i
amVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4SUQoaW5kZXhJZCkK
KyAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9y
ZUlkKS5rZXlQYXRoKQorICAgICAgICAsIG1fYXV0b0luY3JlbWVudChtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9JbmNyZW1lbnQpCisgICAgICAgICwgbV9rZXlS
YW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgICAgICBBU1NFUlQobWV0YWRh
dGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICAgICAgQVNTRVJU
KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuaWQgPT0gb2JqZWN0U3Rv
cmVJZCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFu
c2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBp
bnQ2NF90IG1faW5kZXhJRDsKKyAgICBjb25zdCBJREJLZXlQYXRoIG1fa2V5UGF0aDsKKyAgICBj
b25zdCBib29sIG1fYXV0b0luY3JlbWVudDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+
IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlw
ZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2Ns
YXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBQdXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRN
b2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKKyAgICB9CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3Zl
cnJpZGUgZmluYWw7CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHV0TW9kZTsgfQorICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZTsgfQorICAg
IElEQktleSoga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXkuZ2V0KCk7IH0KKyAgICBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SURzKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleElEczsgfQor
ICAgIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4S2V5czsgfQorICAgIFNoYXJlZEJ1ZmZlciogdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUHV0T3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUp
CisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2tleShrZXkpCisgICAgICAg
ICwgbV9wdXRNb2RlKHB1dE1vZGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQor
ICAgICAgICAsIG1faW5kZXhJRHMoaW5kZXhJZHMpCisgICAgICAgICwgbV9pbmRleEtleXMoaW5k
ZXhLZXlzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
PiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmpl
Y3RTdG9yZTsKKyAgICBjb25zdCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3ZhbHVlOworICAgIGNv
bnN0IFJlZlB0cjxJREJLZXk+IG1fa2V5OworICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6
UHV0TW9kZSBtX3B1dE1vZGU7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7CisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1faW5kZXhJRHM7CisgICAgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4gbV9pbmRleEtleXM7Cit9OworCitjbGFzcyBTZXRJbmRleGVzUmVh
ZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIHNpemVfdCBpbmRleENvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBpbmRleENvdW50KSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNj
ZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOworcHJpdmF0ZToKKyAgICBTZXRJbmRleGVzUmVh
ZHlPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGlu
ZGV4Q291bnQpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAg
LCBtX2luZGV4Q291bnQoaW5kZXhDb3VudCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBzaXplX3QgbV9p
bmRleENvdW50OworfTsKKworY2xhc3MgT3BlbkN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJP
cGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBj
dXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgT3BlbkN1cnNvck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxi
YWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0X3QgdHJh
bnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmlkKCk7IH0KKyAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0K
KyAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4SUQ7IH0KKyAgICBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Rp
cmVjdGlvbjsgfQorICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJzb3JUeXBlOyB9CisgICAgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlw
ZSB0YXNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFza1R5cGU7IH0KKyAgICBJREJLZXlSYW5n
ZSoga2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgpOyB9CisgICAgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vyc29yRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kaXJlY3Rpb247IH0KKworcHJpdmF0ZToKKyAgICBPcGVuQ3Vyc29yT3BlcmF0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQorICAgICAgICAs
IG1faW5kZXhJRChpbmRleElkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAg
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJz
b3JUeXBlKQorICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCisgICAgICAgICwgbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlEOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOworICAgIGNvbnN0IFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24gbV9kaXJlY3Rpb247CisgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vy
c29yVHlwZTsKKyAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5
cGU7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitj
bGFzcyBDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ291bnRPcGVyYXRp
b24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFj
a3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBpbnQ2NF90IG9iamVj
dFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KKyAgICBpbnQ2NF90
IGluZGV4SUQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4SUQ7IH0KKyAgICBJREJLZXlSYW5nZSog
a2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgpOyB9CisKK3ByaXZhdGU6
CisgICAgQ291bnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9y
ZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCisgICAgICAg
ICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3Mp
CisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJh
bnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3Qg
aW50NjRfdCBtX2luZGV4SUQ7CisgICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJh
bmdlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKwor
Y2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgIH0K
KyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0Nh
bGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBE
ZWxldGVSYW5nZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQp
CisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Cisg
ICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0IFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ2xlYXJPYmplY3RTdG9y
ZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9y
ZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7CisgICAg
fQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNz
Q2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KKyAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0K
KworcHJpdmF0ZToKKyAgICBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQorICAgICAgICAs
IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJRDsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjlkNjllMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKQoreworfQorCitJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjp+SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpCit7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkQ3JlYXRlVHJhbnNhY3Rp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1f
dHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgbV90cmFuc2FjdGlvbnMu
YWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRy
YW5zYWN0aW9uKQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbikpOworCisgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKKyAg
ICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5z
YWN0aW9uKSk7CisKKyAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb24pKSB7CisgICAgICAgIEFTU0VSVCghbV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uKSk7CisgICAgICAgIG1fcXVldWVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFu
c2FjdGlvbik7CisgICAgfSBlbHNlIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnMo
dHJhbnNhY3Rpb24pKQorICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5z
YWN0aW9uKTsKKworICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7CisKKyAg
ICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOworfQorCisjaWZuZGVmIE5ERUJVRworLy8g
VmVyaWZpZXMgaW50ZXJuYWwgY29uc2lzdGllbmN5IHdoaWxlIHJldHVybmluZyB3aGV0aGVyIGFu
eXRoaW5nIGlzIGZvdW5kLgorYm9vbCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjppc0FjdGl2
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQoreworICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKKyAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b24pKQorICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgaWYgKG1fc3RhcnRlZFRyYW5zYWN0aW9u
cy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFmb3VuZCk7CisgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUKGZvdW5kID09IG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgcmV0dXJuIGZvdW5kOworfQorI2VuZGlm
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1N0YXJ0ZWRUcmFuc2Fj
dGlvbnMoKQoreworICAgIGlmIChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgp
IHx8ICgqbV9zdGFydGVkVHJhbnNhY3Rpb25zLmJlZ2luKCkpLT5tb2RlKCkgIT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOworCisgICAgTGlzdEhhc2hTZXQ8SURC
VHJhbnNhY3Rpb25CYWNrZW5kKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2Fj
dGlvbnMuYmVnaW4oKTsKKyAgICB3aGlsZSAoaXQgIT0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuZW5k
KCkpIHsKKyAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9ICppdDsK
KyAgICAgICAgKytpdDsKKyAgICAgICAgaWYgKGNhblJ1blRyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KSkgeworICAgICAgICAgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9u
KTsKKyAgICAgICAgICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOwor
ICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnJ1bigpOworICAgICAgICB9CisgICAgfQorfQorCiti
b29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNhblJ1blRyYW5zYWN0aW9uKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fcXVldWVkVHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBVTlVTRURfUEFSQU0odHJhbnNh
Y3Rpb24pOworICAgIHJldHVybiAhbV9zdGFydGVkVHJhbnNhY3Rpb25zLnNpemUoKTsKK30KKwor
fTsKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTQ1NTQzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCisjZGVmaW5lIElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
KyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOworCisvLyBUcmFuc2FjdGlv
bnMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGUgd2VyZSBjcmVhdGVkLgorY2xhc3MgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvciB7CitwdWJsaWM6CisgICAgSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKKwor
ICAgIC8vIENhbGxlZCBieSB0cmFuc2FjdGlvbnMgYXMgdGhleSBzdGFydCBhbmQgZmluaXNoLgor
ICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Cisg
ICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKik7CisgICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5k
Kik7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBpc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgcHJvY2Vzc1N0YXJ0ZWRUcmFu
c2FjdGlvbnMoKTsKKyAgICBib29sIGNhblJ1blRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCopOworCisgICAgLy8gVGhpcyBpcyBqdXN0IGFuIGVmZmljaWVudCB3YXkgdG8ga2VlcCBy
ZWZlcmVuY2VzIHRvIGFsbCB0cmFuc2FjdGlvbnMuCisgICAgSGFzaE1hcDxJREJUcmFuc2FjdGlv
bkJhY2tlbmQqLCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiA+IG1fdHJhbnNhY3Rpb25z
OworICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZmZXJlbnQgc3RhdGVzIGFyZSBncm91cGVkIGJl
bG93LgorICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZCo+IG1fcXVldWVkVHJh
bnNhY3Rpb25zOworICAgIEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kKj4gbV9zdGFydGVk
VHJhbnNhY3Rpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lBbnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUFueS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThl
MjkwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lBbnkuY3BwCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkxlZ2FjeUFueS5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRl
ICJMZWdhY3lEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkxlZ2FjeUZhY3RvcnkuaCIKKyNpbmNsdWRl
ICJMZWdhY3lJbmRleC5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJMZWdh
Y3lPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzUmVmUHRyPExlZ2FjeUFueT4gTGVnYWN5QW55OjpjcmVhdGVJbnZh
bGlkKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExlZ2FjeUFueShVbmRlZmluZWRUeXBl
KSk7Cit9CisKK1Bhc3NSZWZQdHI8TGVnYWN5QW55PiBMZWdhY3lBbnk6OmNyZWF0ZU51bGwoKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGVnYWN5QW55KE51bGxUeXBlKSk7Cit9CisKK1Bh
c3NSZWZQdHI8TGVnYWN5QW55PiBMZWdhY3lBbnk6OmNyZWF0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGVnYWN5QW55KHZhbHVlKSk7Cit9
CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KFR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQor
ICAgICwgbV9pbnRlZ2VyKDApCit7CisgICAgQVNTRVJUKHR5cGUgPT0gVW5kZWZpbmVkVHlwZSB8
fCB0eXBlID09IE51bGxUeXBlKTsKK30KKworTGVnYWN5QW55Ojp+TGVnYWN5QW55KCkKK3sKK30K
KworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBMZWdhY3lBbnk6OmRvbVN0cmluZ0xpc3QoKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gRE9NU3RyaW5nTGlzdFR5cGUpOworICAgIHJldHVybiBt
X2RvbVN0cmluZ0xpc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yPiBMZWdhY3lBbnk6Omlk
YkN1cnNvcigpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JUeXBlKTsKKyAgICBy
ZXR1cm4gbV9pZGJDdXJzb3I7Cit9CisKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBM
ZWdhY3lBbnk6OmlkYkN1cnNvcldpdGhWYWx1ZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJ
REJDdXJzb3JXaXRoVmFsdWVUeXBlKTsKKyAgICByZXR1cm4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7
Cit9CisKK1Bhc3NSZWZQdHI8SURCRGF0YWJhc2U+IExlZ2FjeUFueTo6aWRiRGF0YWJhc2UoKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCRGF0YWJhc2VUeXBlKTsKKyAgICByZXR1cm4gbV9p
ZGJEYXRhYmFzZTsKK30KKworUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBMZWdhY3lBbnk6OmlkYkZh
Y3RvcnkoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCRmFjdG9yeVR5cGUpOworICAgIHJl
dHVybiBtX2lkYkZhY3Rvcnk7Cit9CisKK1Bhc3NSZWZQdHI8SURCSW5kZXg+IExlZ2FjeUFueTo6
aWRiSW5kZXgoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCSW5kZXhUeXBlKTsKKyAgICBy
ZXR1cm4gbV9pZGJJbmRleDsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gTGVnYWN5
QW55OjppZGJPYmplY3RTdG9yZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJPYmplY3RT
dG9yZVR5cGUpOworICAgIHJldHVybiBtX2lkYk9iamVjdFN0b3JlOworfQorCitQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBMZWdhY3lBbnk6OmlkYlRyYW5zYWN0aW9uKCkKK3sKKyAgICBBU1NF
UlQobV90eXBlID09IElEQlRyYW5zYWN0aW9uVHlwZSk7CisgICAgcmV0dXJuIG1faWRiVHJhbnNh
Y3Rpb247Cit9CisKK2NvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBMZWdhY3lBbnk6OnNj
cmlwdFZhbHVlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFNjcmlwdFZhbHVlVHlwZSk7Cisg
ICAgcmV0dXJuIG1fc2NyaXB0VmFsdWU7Cit9CisKK2NvbnN0IFN0cmluZyYgTGVnYWN5QW55Ojpz
dHJpbmcoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVHlwZSk7CisgICAgcmV0dXJu
IG1fc3RyaW5nOworfQorCitpbnQ2NF90IExlZ2FjeUFueTo6aW50ZWdlcigpCit7CisgICAgQVNT
RVJUKG1fdHlwZSA9PSBJbnRlZ2VyVHlwZSk7CisgICAgcmV0dXJuIG1faW50ZWdlcjsKK30KKwor
TGVnYWN5QW55OjpMZWdhY3lBbnkoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB2YWx1ZSkKKyAg
ICA6IG1fdHlwZShET01TdHJpbmdMaXN0VHlwZSkKKyAgICAsIG1fZG9tU3RyaW5nTGlzdCh2YWx1
ZSkKKyAgICAsIG1faW50ZWdlcigwKQoreworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQYXNz
UmVmUHRyPExlZ2FjeUN1cnNvcldpdGhWYWx1ZT4gdmFsdWUpCisgICAgOiBtX3R5cGUoSURCQ3Vy
c29yV2l0aFZhbHVlVHlwZSkKKyAgICAsIG1faWRiQ3Vyc29yV2l0aFZhbHVlKHZhbHVlKQorICAg
ICwgbV9pbnRlZ2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KFBhc3NSZWZQdHI8
TGVnYWN5Q3Vyc29yPiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJDdXJzb3JUeXBlKQorICAgICwg
bV9pZGJDdXJzb3IodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5QW55
OjpMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lEYXRhYmFzZT4gdmFsdWUpCisgICAgOiBtX3R5
cGUoSURCRGF0YWJhc2VUeXBlKQorICAgICwgbV9pZGJEYXRhYmFzZSh2YWx1ZSkKKyAgICAsIG1f
aW50ZWdlcigwKQoreworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2Fj
eUZhY3Rvcnk+IHZhbHVlKQorICAgIDogbV90eXBlKElEQkZhY3RvcnlUeXBlKQorICAgICwgbV9p
ZGJGYWN0b3J5KHZhbHVlKQorICAgICwgbV9pbnRlZ2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6
TGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5SW5kZXg+IHZhbHVlKQorICAgIDogbV90eXBlKElE
QkluZGV4VHlwZSkKKyAgICAsIG1faWRiSW5kZXgodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkK
K3sKK30KKworTGVnYWN5QW55OjpMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lUcmFuc2FjdGlv
bj4gdmFsdWUpCisgICAgOiBtX3R5cGUoSURCVHJhbnNhY3Rpb25UeXBlKQorICAgICwgbV9pZGJU
cmFuc2FjdGlvbih2YWx1ZSkKKyAgICAsIG1faW50ZWdlcigwKQoreworfQorCitMZWdhY3lBbnk6
OkxlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiB2YWx1ZSkKKyAgICA6IG1f
dHlwZShJREJPYmplY3RTdG9yZVR5cGUpCisgICAgLCBtX2lkYk9iamVjdFN0b3JlKHZhbHVlKQor
ICAgICwgbV9pbnRlZ2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKKyAgICA6IG1fdHlwZShTY3JpcHRWYWx1ZVR5
cGUpCisgICAgLCBtX3NjcmlwdFZhbHVlKHZhbHVlKQorICAgICwgbV9pbnRlZ2VyKDApCit7Cit9
CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KGNvbnN0IElEQktleVBhdGgmIHZhbHVlKQorICAgIDog
bV90eXBlKEtleVBhdGhUeXBlKQorICAgICwgbV9pZGJLZXlQYXRoKHZhbHVlKQorICAgICwgbV9p
bnRlZ2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgOiBtX3R5cGUoU3RyaW5nVHlwZSkKKyAgICAsIG1fc3RyaW5nKHZhbHVlKQorICAg
ICwgbV9pbnRlZ2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KGludDY0X3QgdmFs
dWUpCisgICAgOiBtX3R5cGUoSW50ZWdlclR5cGUpCisgICAgLCBtX2ludGVnZXIodmFsdWUpCit7
Cit9CisKK0xlZ2FjeUN1cnNvciogTGVnYWN5QW55OjpsZWdhY3lDdXJzb3IoKQoreworICAgIEFT
U0VSVChtX3R5cGUgPT0gSURCQ3Vyc29yVHlwZSk7CisgICAgcmV0dXJuIG1faWRiQ3Vyc29yLmdl
dCgpOworfQorCitMZWdhY3lDdXJzb3JXaXRoVmFsdWUqIExlZ2FjeUFueTo6bGVnYWN5Q3Vyc29y
V2l0aFZhbHVlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvcldpdGhWYWx1ZVR5
cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1ZS5nZXQoKTsKK30KKworTGVnYWN5
RGF0YWJhc2UqIExlZ2FjeUFueTo6bGVnYWN5RGF0YWJhc2UoKQoreworICAgIEFTU0VSVChtX3R5
cGUgPT0gSURCRGF0YWJhc2VUeXBlKTsKKyAgICByZXR1cm4gbV9pZGJEYXRhYmFzZS5nZXQoKTsK
K30KKworTGVnYWN5RmFjdG9yeSogTGVnYWN5QW55OjpsZWdhY3lGYWN0b3J5KCkKK3sKKyAgICBB
U1NFUlQobV90eXBlID09IElEQkZhY3RvcnlUeXBlKTsKKyAgICByZXR1cm4gbV9pZGJGYWN0b3J5
LmdldCgpOworfQorCitMZWdhY3lJbmRleCogTGVnYWN5QW55OjpsZWdhY3lJbmRleCgpCit7Cisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBJREJJbmRleFR5cGUpOworICAgIHJldHVybiBtX2lkYkluZGV4
LmdldCgpOworfQorCitMZWdhY3lPYmplY3RTdG9yZSogTGVnYWN5QW55OjpsZWdhY3lPYmplY3RT
dG9yZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJPYmplY3RTdG9yZVR5cGUpOworICAg
IHJldHVybiBtX2lkYk9iamVjdFN0b3JlLmdldCgpOworfQorCitMZWdhY3lUcmFuc2FjdGlvbiog
TGVnYWN5QW55OjpsZWdhY3lUcmFuc2FjdGlvbigpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJ
REJUcmFuc2FjdGlvblR5cGUpOworICAgIHJldHVybiBtX2lkYlRyYW5zYWN0aW9uLmdldCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUFueS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUFueS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNmFi
MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5QW55LmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExlZ2Fj
eUFueV9oCisjZGVmaW5lIExlZ2FjeUFueV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNs
dWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRWYWx1ZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNz
IElEQkN1cnNvcjsKK2NsYXNzIElEQkN1cnNvcldpdGhWYWx1ZTsKK2NsYXNzIElEQkRhdGFiYXNl
OworY2xhc3MgSURCRmFjdG9yeTsKK2NsYXNzIElEQkluZGV4OworY2xhc3MgSURCS2V5UGF0aDsK
K2NsYXNzIElEQk9iamVjdFN0b3JlOworY2xhc3MgSURCVHJhbnNhY3Rpb247CisKK2NsYXNzIExl
Z2FjeUN1cnNvcjsKK2NsYXNzIExlZ2FjeUN1cnNvcldpdGhWYWx1ZTsKK2NsYXNzIExlZ2FjeURh
dGFiYXNlOworY2xhc3MgTGVnYWN5RmFjdG9yeTsKK2NsYXNzIExlZ2FjeUluZGV4OworY2xhc3Mg
TGVnYWN5T2JqZWN0U3RvcmU7CitjbGFzcyBMZWdhY3lUcmFuc2FjdGlvbjsKKworY2xhc3MgTGVn
YWN5QW55IDogcHVibGljIElEQkFueSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
TGVnYWN5QW55PiBjcmVhdGVJbnZhbGlkKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5
QW55PiBjcmVhdGVOdWxsKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBjcmVh
dGVTdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZShUKiBpZGJPYmplY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExlZ2FjeUFueShpZGJPYmplY3QpKTsKKyAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lB
bnk+IGNyZWF0ZShjb25zdCBUJiBpZGJPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IExlZ2FjeUFueShpZGJPYmplY3QpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZShQYXNzUmVm
UHRyPFQ+IGlkYk9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGVn
YWN5QW55KGlkYk9iamVjdCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lB
bnk+IGNyZWF0ZShpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBMZWdhY3lBbnkodmFsdWUpKTsKKyAgICB9CisgICAgfkxlZ2FjeUFueSgpOworCisgICAg
dmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX3R5cGU7
IH0KKyAgICAvLyBVc2UgdHlwZSgpIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZXNlIHlv
dSdyZSBhbGxvd2VkIHRvIGNhbGwuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IGRvbVN0cmluZ0xpc3QoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQ3Vyc29yPiBpZGJDdXJzb3IoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUoKSBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNl
KCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGlk
YkZhY3RvcnkoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5k
ZXg+IGlkYkluZGV4KCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKSBvdmVycmlkZSBm
aW5hbDsKKyAgICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRW
YWx1ZSgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgaW50NjRfdCBpbnRlZ2VyKCkgb3Zl
cnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHN0cmluZygpIG92ZXJyaWRl
IGZpbmFsOworICAgIHZpcnR1YWwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIG92ZXJyaWRl
IGZpbmFsIHsgcmV0dXJuIG1faWRiS2V5UGF0aDsgfTsKKworICAgIExlZ2FjeUN1cnNvciogbGVn
YWN5Q3Vyc29yKCk7CisgICAgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlKiBsZWdhY3lDdXJzb3JXaXRo
VmFsdWUoKTsKKyAgICBMZWdhY3lEYXRhYmFzZSogbGVnYWN5RGF0YWJhc2UoKTsKKyAgICBMZWdh
Y3lGYWN0b3J5KiBsZWdhY3lGYWN0b3J5KCk7CisgICAgTGVnYWN5SW5kZXgqIGxlZ2FjeUluZGV4
KCk7CisgICAgTGVnYWN5T2JqZWN0U3RvcmUqIGxlZ2FjeU9iamVjdFN0b3JlKCk7CisgICAgTGVn
YWN5VHJhbnNhY3Rpb24qIGxlZ2FjeVRyYW5zYWN0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgTGVnYWN5QW55KFR5cGUpOworICAgIGV4cGxpY2l0IExlZ2FjeUFueShQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+KTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdh
Y3lDdXJzb3I+KTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lDdXJz
b3JXaXRoVmFsdWU+KTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lE
YXRhYmFzZT4pOworICAgIGV4cGxpY2l0IExlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeUZhY3Rv
cnk+KTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lJbmRleD4pOwor
ICAgIGV4cGxpY2l0IExlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPik7Cisg
ICAgZXhwbGljaXQgTGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+KTsKKyAg
ICBleHBsaWNpdCBMZWdhY3lBbnkoY29uc3QgSURCS2V5UGF0aCYpOworICAgIGV4cGxpY2l0IExl
Z2FjeUFueShjb25zdCBTdHJpbmcmKTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoaW50NjRfdCk7
CisKKyAgICBjb25zdCBUeXBlIG1fdHlwZTsKKworICAgIC8vIE9ubHkgb25lIG9mIHRoZSBmb2xs
b3dpbmcgc2hvdWxkIGV2ZXIgYmUgaW4gdXNlIGF0IGFueSBnaXZlbiB0aW1lLgorICAgIGNvbnN0
IFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX2RvbVN0cmluZ0xpc3Q7CisgICAgY29uc3QgUmVmUHRy
PExlZ2FjeUN1cnNvcj4gbV9pZGJDdXJzb3I7CisgICAgY29uc3QgUmVmUHRyPExlZ2FjeUN1cnNv
cldpdGhWYWx1ZT4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7CisgICAgY29uc3QgUmVmUHRyPExlZ2Fj
eURhdGFiYXNlPiBtX2lkYkRhdGFiYXNlOworICAgIGNvbnN0IFJlZlB0cjxMZWdhY3lGYWN0b3J5
PiBtX2lkYkZhY3Rvcnk7CisgICAgY29uc3QgUmVmUHRyPExlZ2FjeUluZGV4PiBtX2lkYkluZGV4
OworICAgIGNvbnN0IFJlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gbV9pZGJPYmplY3RTdG9yZTsK
KyAgICBjb25zdCBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+IG1faWRiVHJhbnNhY3Rpb247Cisg
ICAgY29uc3QgSURCS2V5UGF0aCBtX2lkYktleVBhdGg7CisgICAgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsKKyAgICBjb25zdCBTdHJpbmcgbV9zdHJpbmc7Cisg
ICAgY29uc3QgaW50NjRfdCBtX2ludGVnZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIExlZ2Fj
eUFueV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5Q3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lDdXJzb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI2NjNlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmNwcApAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lDdXJzb3IuaCIKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUg
IklEQkN1cnNvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgor
I2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8TGVnYWN5Q3Vy
c29yPiBMZWdhY3lDdXJzb3I6OmNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJh
Y2tlbmQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGVnYWN5UmVxdWVz
dCogcmVxdWVzdCwgTGVnYWN5QW55KiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMZWdhY3lDdXJzb3IoYmFja2VuZCwg
ZGlyZWN0aW9uLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7Cit9CisKK0xlZ2FjeUN1
cnNvcjo6TGVnYWN5Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiByZXF1
ZXN0LCBMZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQor
ICAgIDogbV9iYWNrZW5kKGJhY2tlbmQpCisgICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKKyAgICAs
IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX3RyYW5zYWN0aW9uTm90aWZpZXIodHJh
bnNhY3Rpb24sIHRoaXMpCisgICAgLCBtX2dvdFZhbHVlKGZhbHNlKQoreworICAgIEFTU0VSVCht
X2JhY2tlbmQpOworICAgIEFTU0VSVChtX3JlcXVlc3QpOworICAgIEFTU0VSVChtX3NvdXJjZS0+
dHlwZSgpID09IElEQkFueTo6SURCT2JqZWN0U3RvcmVUeXBlIHx8IG1fc291cmNlLT50eXBlKCkg
PT0gSURCQW55OjpJREJJbmRleFR5cGUpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKK30K
KworTGVnYWN5Q3Vyc29yOjp+TGVnYWN5Q3Vyc29yKCkKK3sKK30KKworY29uc3QgU3RyaW5nJiBM
ZWdhY3lDdXJzb3I6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lDdXJzb3I6OmRpcmVjdGlvbiIpOworICAgIHJldHVybiBkaXJlY3Rpb25Ub1N0cmluZyht
X2RpcmVjdGlvbik7Cit9CisKK2NvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBMZWdhY3lD
dXJzb3I6OmtleSgpIGNvbnN0Cit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6
OmtleSIpOworICAgIHJldHVybiBtX2N1cnJlbnRLZXlWYWx1ZTsKK30KKworY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIExlZ2FjeUN1cnNvcjo6cHJpbWFyeUtleSgpIGNvbnN0Cit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6OnByaW1hcnlLZXkiKTsKKyAgICByZXR1
cm4gbV9jdXJyZW50UHJpbWFyeUtleVZhbHVlOworfQorCitjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYgTGVnYWN5Q3Vyc29yOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lDdXJzb3I6OnZhbHVlIik7CisgICAgcmV0dXJuIG1fY3VycmVudFZhbHVlOwor
fQorCitJREJBbnkqIExlZ2FjeUN1cnNvcjo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zb3VyY2UuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5Q3Vyc29y
Ojp1cGRhdGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5
Q3Vyc29yOjp1cGRhdGUiKTsKKworICAgIGlmICghbV9nb3RWYWx1ZSB8fCBpc0tleUN1cnNvcigp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9y
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0Fj
dGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9u
SW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChtX3RyYW5z
YWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6UmVhZE9ubHlFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRy
PExlZ2FjeU9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7
CisgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgp
LmtleVBhdGg7CisgICAgY29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVs
bCgpOworICAgIGlmICh1c2VzSW5MaW5lS2V5cykgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBr
ZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChtX3JlcXVl
c3QtPnJlcXVlc3RTdGF0ZSgpLT5leGVjKCksIHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgaWYg
KCFrZXlQYXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXku
Z2V0KCkpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBvYmplY3RTdG9yZS0+cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlLCBMZWdh
Y3lBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBtX2N1cnJlbnRQcmltYXJ5S2V5LCBl
Yyk7Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBMT0coU3RvcmFnZUFQSSwg
IkxlZ2FjeUN1cnNvcjo6YWR2YW5jZSIpOworICAgIGlmICghbV9nb3RWYWx1ZSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNvdW50KSB7CisgICAgICAg
IGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXF1ZXN0
LT5zZXRQZW5kaW5nQ3Vyc29yKHRoaXMpOworICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKKyAgICBt
X2JhY2tlbmQtPmFkdmFuY2UoY291bnQsIG1fcmVxdWVzdCwgZWMpOworICAgIEFTU0VSVCghZWMp
OworfQorCit2b2lkIExlZ2FjeUN1cnNvcjo6Y29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5VmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3Rh
dGUoY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktl
eSgmcmVxdWVzdFN0YXRlLCBrZXlWYWx1ZSk7CisgICAgY29udGludWVGdW5jdGlvbihrZXkucmVs
ZWFzZSgpLCBlYyk7Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsK
KyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6Y29udGludWUiKTsKKyAgICBpZiAo
a2V5ICYmICFrZXktPmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2dvdFZhbHVlKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtl
eSkgeworICAgICAgICBBU1NFUlQobV9jdXJyZW50S2V5KTsKKyAgICAgICAgaWYgKG1fZGlyZWN0
aW9uID09IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0IHx8IG1fZGlyZWN0aW9uID09
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0Tm9EdXBsaWNhdGUpIHsKKyAgICAgICAg
ICAgIGlmICghbV9jdXJyZW50S2V5LT5pc0xlc3NUaGFuKGtleS5nZXQoKSkpIHsKKyAgICAgICAg
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKCFrZXktPmlzTGVzc1RoYW4obV9jdXJyZW50S2V5LmdldCgpKSkgeworICAgICAgICAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBG
SVhNRTogV2UncmUgbm90IHVzaW5nIHRoZSBjb250ZXh0IGZyb20gd2hlbiBjb250aW51ZSB3YXMg
Y2FsbGVkLCB3aGljaCBtZWFucyB0aGUgY2FsbGJhY2sKKyAgICAvLyAgICAgICAgd2lsbCBiZSBv
biB0aGUgb3JpZ2luYWwgY29udGV4dCBvcGVuQ3Vyc29yIHdhcyBjYWxsZWQgb24uIElzIHRoaXMg
cmlnaHQ/CisgICAgbV9yZXF1ZXN0LT5zZXRQZW5kaW5nQ3Vyc29yKHRoaXMpOworICAgIG1fZ290
VmFsdWUgPSBmYWxzZTsKKyAgICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3Jl
cXVlc3QsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBMZWdhY3lDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIkxlZ2FjeUN1cnNvcjo6ZGVsZXRlIik7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5p
c0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0
aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChtX3Ry
YW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6UmVhZE9ubHlFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYg
KCFtX2dvdFZhbHVlIHx8IGlzS2V5Q3Vyc29yKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7
CisgICAgbV9iYWNrZW5kLT5kZWxldGVGdW5jdGlvbihyZXF1ZXN0LCBlYyk7CisgICAgQVNTRVJU
KCFlYyk7CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCit2b2lkIExlZ2FjeUN1
cnNvcjo6cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKQoreworICAgIG1fYmFja2VuZC0+cG9z
dFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKK30KKwordm9pZCBMZWdhY3lDdXJzb3I6OmNsb3Nl
KCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uTm90aWZpZXIuY3Vyc29yRmluaXNoZWQoKTsKKyAgICBp
ZiAobV9yZXF1ZXN0KSB7CisgICAgICAgIG1fcmVxdWVzdC0+ZmluaXNoQ3Vyc29yKCk7CisgICAg
ICAgIG1fcmVxdWVzdCA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIExlZ2FjeUN1cnNvcjo6
c2V0VmFsdWVSZWFkeShET01SZXF1ZXN0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIHZhbHVlKQoreworICAgIG1fY3VycmVudEtleSA9IGtleTsKKyAgICBtX2N1cnJlbnRLZXlW
YWx1ZSA9IGlkYktleVRvU2NyaXB0VmFsdWUoc3RhdGUsIG1fY3VycmVudEtleSk7CisKKyAgICBt
X2N1cnJlbnRQcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsKKyAgICBtX2N1cnJlbnRQcmltYXJ5S2V5
VmFsdWUgPSBpZGJLZXlUb1NjcmlwdFZhbHVlKHN0YXRlLCBtX2N1cnJlbnRQcmltYXJ5S2V5KTsK
KworICAgIGlmICghaXNLZXlDdXJzb3IoKSkgeworICAgICAgICBSZWZQdHI8TGVnYWN5T2JqZWN0
U3RvcmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKKyAgICAgICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSA9IG9iamVjdFN0b3JlLT5tZXRhZGF0
YSgpOworICAgICAgICBpZiAobWV0YWRhdGEuYXV0b0luY3JlbWVudCAmJiAhbWV0YWRhdGEua2V5
UGF0aC5pc051bGwoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCht
X3JlcXVlc3QtPnJlcXVlc3RTdGF0ZSgpLT5leGVjKCksIHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghZXhwZWN0ZWRLZXkgfHwgZXhwZWN0ZWRLZXktPmlzRXF1
YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpOworI2VuZGlmCisgICAgICAgICAgICBib29s
IGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKG1fcmVxdWVzdC0+cmVxdWVz
dFN0YXRlKCksIG1fY3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRoKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBubyB3YXkgdG8gcmVwb3J0IGVycm9ycyBo
ZXJlLiBNb3ZlIHRoaXMgaW50byBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uIHNvIHRoYXQgd2Ug
Y2FuIGFib3J0IHRoZSB0cmFuc2FjdGlvbiB0aGVyZS4gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzgKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5q
ZWN0ZWQsIGluamVjdGVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2N1cnJlbnRWYWx1ZSA9
IHZhbHVlOworCisgICAgbV9nb3RWYWx1ZSA9IHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8TGVnYWN5
T2JqZWN0U3RvcmU+IExlZ2FjeUN1cnNvcjo6ZWZmZWN0aXZlT2JqZWN0U3RvcmUoKQoreworICAg
IGlmIChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6SURCT2JqZWN0U3RvcmVUeXBlKQorICAg
ICAgICByZXR1cm4gbV9zb3VyY2UtPmxlZ2FjeU9iamVjdFN0b3JlKCk7CisgICAgUmVmUHRyPExl
Z2FjeUluZGV4PiBpbmRleCA9IG1fc291cmNlLT5sZWdhY3lJbmRleCgpOworICAgIHJldHVybiBp
bmRleC0+bGVnYWN5T2JqZWN0U3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkYmIzMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuaApAQCAt
MCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5Q3Vyc29yX2gKKyNkZWZpbmUgTGVn
YWN5Q3Vyc29yX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAi
SURCQ3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSW5k
ZXhlZERCLmgiCisjaW5jbHVkZSAiTGVnYWN5T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJMZWdh
Y3lUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUg
PGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01SZXF1ZXN0U3RhdGU7CitjbGFzcyBJREJBbnk7
CitjbGFzcyBJREJDYWxsYmFja3M7CitjbGFzcyBJREJDdXJzb3JCYWNrZW5kOworY2xhc3MgTGVn
YWN5UmVxdWVzdDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK3R5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIExlZ2FjeUN1cnNvciA6IHB1YmxpYyBJREJDdXJzb3JX
aXRoVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TGVnYWN5Q3Vyc29yPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24s
IExlZ2FjeVJlcXVlc3QqLCBMZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsK
KyAgICB2aXJ0dWFsIH5MZWdhY3lDdXJzb3IoKTsKKworICAgIC8vIEltcGxlbWVudCB0aGUgSURM
CisgICAgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24oKSBjb25zdDsKKyAgICBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5KCkgY29uc3Q7CisgICAgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHByaW1hcnlLZXkoKSBjb25zdDsKKyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYgdmFsdWUoKSBjb25zdDsKKyAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OworCisg
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFkdmFuY2UodW5z
aWduZWQgbG9uZywgRXhjZXB0aW9uQ29kZSYpOworICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5
IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIG92ZXJsb2FkIGlzIHVubmVlZGVkLgorICAgIHZv
aWQgY29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgY29udGludWVGdW5jdGlvbihzdGF0aWNfY2FzdDxJREJLZXkqPihudWxscHRyKSwg
ZWMpOyB9CisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcG9zdFN1Y2Nlc3NI
YW5kbGVyQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzZXRWYWx1ZVJl
YWR5KERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXksIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CisgICAgUGFzc1JlZlB0
cjxJREJLZXk+IGlkYlByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5OyB9
CisKK3Byb3RlY3RlZDoKKyAgICBMZWdhY3lDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIExlZ2FjeVJlcXVlc3QqLCBMZWdhY3lB
bnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlD
dXJzb3IoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAgUGFzc1JlZlB0
cjxMZWdhY3lPYmplY3RTdG9yZT4gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKKworICAgIFJlZlB0
cjxJREJDdXJzb3JCYWNrZW5kPiBtX2JhY2tlbmQ7CisgICAgUmVmUHRyPExlZ2FjeVJlcXVlc3Q+
IG1fcmVxdWVzdDsKKyAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVj
dGlvbjsKKyAgICBSZWZQdHI8TGVnYWN5QW55PiBtX3NvdXJjZTsKKyAgICBSZWZQdHI8TGVnYWN5
VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgTGVnYWN5VHJhbnNhY3Rpb246Ok9wZW5D
dXJzb3JOb3RpZmllciBtX3RyYW5zYWN0aW9uTm90aWZpZXI7CisgICAgYm9vbCBtX2dvdFZhbHVl
OworICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgaGVsZCBiZWNhdXNlIG1fYmFja2VuZCBtYXkgYWR2
YW5jZSB3aGlsZSB0aGV5CisgICAgLy8gYXJlIHN0aWxsIHZhbGlkIGZvciB0aGUgY3VycmVudCBz
dWNjZXNzIGhhbmRsZXJzLgorICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudEtl
eVZhbHVlOworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudFByaW1hcnlLZXlW
YWx1ZTsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7CisgICAgUmVmUHRyPElEQktl
eT4gbV9jdXJyZW50UHJpbWFyeUtleTsKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2N1
cnJlbnRWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNl
bmRpZiAvLyBMZWdhY3lDdXJzb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNkMTFkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNv
cldpdGhWYWx1ZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCIKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgorI2luY2x1ZGUg
IklEQktleS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGVnYWN5Q3Vy
c29yV2l0aFZhbHVlPiBMZWdhY3lDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbiwgTGVnYWN5UmVxdWVzdCogcmVxdWVzdCwgTGVnYWN5QW55KiBzb3VyY2UsIExlZ2FjeVRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExlZ2Fj
eUN1cnNvcldpdGhWYWx1ZShiYWNrZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJh
bnNhY3Rpb24pKTsKK30KKworUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IExlZ2Fj
eUN1cnNvcldpdGhWYWx1ZTo6ZnJvbUN1cnNvcihQYXNzUmVmUHRyPExlZ2FjeUN1cnNvcj4gcHJw
Q3Vyc29yKQoreworICAgIFJlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IGN1cnNvcldpdGhW
YWx1ZShzdGF0aWNfY2FzdDxMZWdhY3lDdXJzb3JXaXRoVmFsdWUqPihwcnBDdXJzb3IuZ2V0KCkp
KTsKKyAgICByZXR1cm4gY3Vyc29yV2l0aFZhbHVlLnJlbGVhc2UoKTsKK30KKworTGVnYWN5Q3Vy
c29yV2l0aFZhbHVlOjpMZWdhY3lDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kPiBiYWNrZW5kLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIExl
Z2FjeVJlcXVlc3QqIHJlcXVlc3QsIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24pCisgICAgOiBMZWdhY3lDdXJzb3IoYmFja2VuZCwgZGlyZWN0aW9uLCBy
ZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKQoreworfQorCitMZWdhY3lDdXJzb3JXaXRoVmFs
dWU6On5MZWdhY3lDdXJzb3JXaXRoVmFsdWUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3JXaXRoVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJz
b3JXaXRoVmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODdiMWYx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIExlZ2FjeUN1cnNvcldpdGhWYWx1ZV9oCisjZGVmaW5lIExlZ2FjeUN1cnNvcldpdGhWYWx1
ZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkxlZ2FjeUN1
cnNvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExlZ2FjeUN1cnNvcldpdGhW
YWx1ZSA6IHB1YmxpYyBMZWdhY3lDdXJzb3IgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExlZ2FjeUN1cnNvcldpdGhWYWx1ZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZD4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiwgTGVnYWN5
QW55KiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0aW9uKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBmcm9tQ3Vyc29yKFBhc3NSZWZQdHI8TGVnYWN5Q3Vyc29y
Pik7CisgICAgdmlydHVhbCB+TGVnYWN5Q3Vyc29yV2l0aFZhbHVlKCk7CisKKyAgICAvLyBUaGUg
dmFsdWUgYXR0cmlidXRlIGRlZmluZWQgaW4gdGhlIElETCBpcyBzaW1wbHkgaW1wbGVtZW50ZWQg
aW4gTGVnYWN5Q3Vyc29yIChidXQgbm90IGV4cG9zZWQgdmlhCisgICAgLy8gaXRzIElETCkuIFRo
aXMgaXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gbW9yZSBzaW1wbGUgd2hpbGUgbWF0Y2hp
bmcgd2hhdCB0aGUgc3BlYyBzYXlzLgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGlz
S2V5Q3Vyc29yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToK
KyAgICBMZWdhY3lDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIExlZ2FjeVJlcXVlc3QqLCBMZWdhY3lBbnkqIHNv
dXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCisKKyNlbmRpZiAvLyBMZWdhY3lDdXJzb3JXaXRoVmFsdWVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRh
YmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UxNzQ5MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9M
ZWdhY3lEYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5RGF0YWJhc2UuaCIKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIkV2ZW50
UXVldWUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSURCQW55Lmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VD
YWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNp
bmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJ
REJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAi
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmgiCisjaW5jbHVkZSAiTGVnYWN5T2JqZWN0U3RvcmUuaCIK
KyNpbmNsdWRlICJMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPGF0b21p
Yz4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CisjaW5jbHVkZSA8bGlt
aXRzPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmPExlZ2FjeURhdGFiYXNlPiBMZWdhY3lEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFz
ZSwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIFJl
ZjxMZWdhY3lEYXRhYmFzZT4gbGVnYWN5RGF0YWJhc2UoYWRvcHRSZWYoKm5ldyBMZWdhY3lEYXRh
YmFzZShjb250ZXh0LCBkYXRhYmFzZSwgY2FsbGJhY2tzKSkpOworICAgIGxlZ2FjeURhdGFiYXNl
LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gbGVnYWN5RGF0YWJhc2U7Cit9CisKK0xl
Z2FjeURhdGFiYXNlOjpMZWdhY3lEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIDogSURCRGF0YWJhc2UoY29udGV4
dCkKKyAgICAsIG1fYmFja2VuZChiYWNrZW5kKQorICAgICwgbV9jbG9zZVBlbmRpbmcoZmFsc2Up
CisgICAgLCBtX2lzQ2xvc2VkKGZhbHNlKQorICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkK
KyAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoY2FsbGJhY2tzKQoreworICAgIC8vIFdlIHBhc3Mg
YSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgorICAg
IHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworfQorCitMZWdhY3lEYXRhYmFzZTo6fkxlZ2Fj
eURhdGFiYXNlKCkKK3sKKyAgICAvLyBUaGlzIGRvZXMgd2hhdCBMZWdhY3lEYXRhYmFzZTo6Y2xv
c2UgZG9lcywgYnV0IHdpdGhvdXQgYW55IHJlZi9kZXJlZiBvZiB0aGUKKyAgICAvLyBkYXRhYmFz
ZSBzaW5jZSBpdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlbGV0ZWQuIFRo
ZSBsb2dpYyBoZXJlCisgICAgLy8gaXMgYWxzbyBzaW1wbGVyIHNpbmNlIHdlIGtub3cgdGhlcmUg
YXJlIG5vIHRyYW5zYWN0aW9ucyAoc2luY2UgdGhleSByZWYgdGhlCisgICAgLy8gZGF0YWJhc2Ug
d2hlbiB0aGV5IGFyZSBhbGl2ZSkuCisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0
eSgpKTsKKworICAgIGlmICghbV9jbG9zZVBlbmRpbmcpIHsKKyAgICAgICAgbV9jbG9zZVBlbmRp
bmcgPSB0cnVlOworICAgICAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3Mp
OworICAgIH0KKworICAgIGlmIChhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKSB7CisgICAgICAgIC8vIFJlbW92ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50
cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0aGlzCisgICAgICAgIC8vIGNvbm5lY3Rpb24uIFRoZXkg
d291bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBieSB0aGUgYmFja2VuZCB3aGVuIGFub3RoZXIKKyAg
ICAgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVuZCBj
b25uZWN0aW9uIGlzIGJlaW5nCisgICAgICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBjb3VsZCBm
aXJlLgorICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykKKyAgICAg
ICAgICAgIGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgIH0K
K30KKworaW50NjRfdCBMZWdhY3lEYXRhYmFzZTo6bmV4dFRyYW5zYWN0aW9uSWQoKQoreworICAg
IC8vIE9ubHkga2VlcCBhIDMyLWJpdCBjb3VudGVyIHRvIGFsbG93IHBvcnRzIHRvIHVzZSB0aGUg
b3RoZXIgMzIKKyAgICAvLyBiaXRzIG9mIHRoZSBpZC4KKyAgICBzdGF0aWMgc3RkOjphdG9taWM8
dWludDMyX3Q+IGN1cnJlbnRUcmFuc2FjdGlvbklkOworCisgICAgcmV0dXJuICsrY3VycmVudFRy
YW5zYWN0aW9uSWQ7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OnRyYW5zYWN0aW9uQ3JlYXRl
ZChMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uKTsKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT5p
ZCgpKSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLT5pZCgpLCB0cmFuc2Fj
dGlvbik7CisKKyAgICBpZiAodHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKSB7CisgICAg
ICAgIEFTU0VSVCghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOworICAgICAgICBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAgIH0KK30KKwordm9pZCBMZWdh
Y3lEYXRhYmFzZTo6dHJhbnNhY3Rpb25GaW5pc2hlZChMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKKyAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uLT5pZCgpKSA9PSB0cmFuc2FjdGlvbik7CisgICAgbV90cmFu
c2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLT5pZCgpKTsKKworICAgIGlmICh0cmFuc2FjdGlv
bi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uID09IHRyYW5zYWN0aW9uKTsKKyAgICAgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2Nsb3NlUGVuZGluZyAmJiBtX3Ry
YW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIGNsb3NlQ29ubmVjdGlvbigpOworfQorCit2
b2lkIExlZ2FjeURhdGFiYXNlOjpvbkFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKK3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkKS0+b25BYm9ydChlcnJvcik7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6Om9u
Q29tcGxldGUoaW50NjRfdCB0cmFuc2FjdGlvbklkKQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWQpLT5vbkNvbXBsZXRlKCk7Cit9CisKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gTGVnYWN5RGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAoreworICAgIFJlZlB0
cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRl
KCk7CisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LnZhbHVlcygpKQorICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQob2JqZWN0U3RvcmUu
bmFtZSk7CisgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOworICAgIHJldHVybiBvYmplY3RT
dG9yZU5hbWVzLnJlbGVhc2UoKTsKK30KKwordWludDY0X3QgTGVnYWN5RGF0YWJhc2U6OnZlcnNp
b24oKSBjb25zdAoreworICAgIC8vIE5vSW50VmVyc2lvbiBpcyBhIHNwZWNpYWwgdmFsdWUgZm9y
IGludGVybmFsIHVzZSBvbmx5IGFuZCBzaG91bGRuJ3QgYmUgZXhwb3NlZCB0byBzY3JpcHQuCisg
ICAgLy8gRGVmYXVsdEludFZlcnNpb24gc2hvdWxkIGJlIGV4cG9zZWQgaW5zdGVhZC4KKyAgICBy
ZXR1cm4gbV9tZXRhZGF0YS52ZXJzaW9uICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbiA/IG1fbWV0YWRhdGEudmVyc2lvbiA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihJREJEYXRh
YmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbik7Cit9CisKK1Bhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IExlZ2FjeURhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIElEQktleVBhdGgga2V5UGF0aDsKKyAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsK
KyAgICBpZiAoIW9wdGlvbnMuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBTdHJpbmcg
a2V5UGF0aFN0cmluZzsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEFycmF5OworICAg
ICAgICBpZiAob3B0aW9ucy5nZXQoImtleVBhdGgiLCBrZXlQYXRoQXJyYXkpKQorICAgICAgICAg
ICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aEFycmF5KTsKKyAgICAgICAgZWxzZSBpZiAo
b3B0aW9ucy5nZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soImtleVBhdGgiLCBrZXlQYXRoU3Ry
aW5nKSkKKyAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKGtleVBhdGhTdHJpbmcpOwor
CisgICAgICAgIG9wdGlvbnMuZ2V0KCJhdXRvSW5jcmVtZW50IiwgYXV0b0luY3JlbWVudCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9J
bmNyZW1lbnQsIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gTGVnYWN5RGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSIp
OworICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKGNvbnRhaW5zT2Jq
ZWN0U3RvcmUobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29u
c3RyYWludEVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWtleVBh
dGguaXNOdWxsKCkgJiYgIWtleVBhdGguaXNWYWxpZCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlN5bnRheEVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAoKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6
OlN0cmluZ1R5cGUgJiYga2V5UGF0aC5zdHJpbmcoKS5pc0VtcHR5KCkpIHx8IGtleVBhdGgudHlw
ZSgpID09IElEQktleVBhdGg6OkFycmF5VHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtX21ldGFkYXRhLm1heE9iamVjdFN0b3Jl
SWQgKyAxOworICAgIG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUobV92ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNy
ZW1lbnQpOworCisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBvYmpl
Y3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok1p
bmltdW1JbmRleElkKTsKKyAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gTGVnYWN5T2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YSwgbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24uZ2V0KCkpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChtZXRhZGF0
YS5pZCwgbWV0YWRhdGEpOworICAgICsrbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkOworCisg
ICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBv
YmplY3RTdG9yZSk7CisgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKK30KKwordm9p
ZCBMZWdhY3lEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNl
OjpkZWxldGVPYmplY3RTdG9yZSIpOworICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBmaW5kT2JqZWN0U3RvcmVJZChuYW1lKTsKKyAgICBp
ZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUobV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3JlSWQpOworICAgIG1fdmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQobmFtZSk7CisgICAgbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOworfQorCitQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBMZWdhY3lEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNjb3BlLCBjb25z
dCBTdHJpbmcmIG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5RGF0YWJhc2U6OnRyYW5zYWN0aW9uIik7CisgICAgaWYgKCFzY29wZS5z
aXplKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vz
c0Vycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZSBtb2RlID0gSURCVHJhbnNhY3Rpb246OnN0cmluZ1RvTW9kZShtb2RlU3RyaW5n
LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBtX2Nsb3NlUGVuZGluZykgeworICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOworICAgIGZvciAo
YXV0byYgbmFtZSA6IHNjb3BlKSB7CisgICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZp
bmRPYmplY3RTdG9yZUlkKG5hbWUpOworICAgICAgICBpZiAob2JqZWN0U3RvcmVJZCA9PSBJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgICAgICBvYmplY3RTdG9yZUlkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7Cisg
ICAgfQorCisgICAgaW50NjRfdCB0cmFuc2FjdGlvbklkID0gbmV4dFRyYW5zYWN0aW9uSWQoKTsK
KyAgICBtX2JhY2tlbmQtPmNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIG1fZGF0YWJh
c2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBtb2RlKTsKKworICAgIFJlZlB0cjxMZWdhY3lU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBMZWdhY3lUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRl
eHQsIHRyYW5zYWN0aW9uSWQsIHNjb3BlLCBtb2RlLCB0aGlzKTsKKyAgICByZXR1cm4gdHJhbnNh
Y3Rpb24ucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBMZWdhY3lE
YXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKKyAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1lKTsKKyAgICBy
ZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMpOworfQorCit2
b2lkIExlZ2FjeURhdGFiYXNlOjpmb3JjZUNsb3NlKCkKK3sKKyAgICBmb3IgKGF1dG8mIHRyYW5z
YWN0aW9uIDogbV90cmFuc2FjdGlvbnMudmFsdWVzKCkpCisgICAgICAgIHRyYW5zYWN0aW9uLT5h
Ym9ydChJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0aGlzLT5jbG9zZSgpOworfQorCit2b2lkIExl
Z2FjeURhdGFiYXNlOjpjbG9zZSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRh
YmFzZTo6Y2xvc2UiKTsKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9ucy5p
c0VtcHR5KCkpCisgICAgICAgIGNsb3NlQ29ubmVjdGlvbigpOworfQorCit2b2lkIExlZ2FjeURh
dGFiYXNlOjpjbG9zZUNvbm5lY3Rpb24oKQoreworICAgIEFTU0VSVChtX2Nsb3NlUGVuZGluZyk7
CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICAvLyBDbG9zaW5n
IG1heSByZXN1bHQgaW4gZGVhbGxvY2F0aW5nIHRoZSBsYXN0IHRyYW5zYWN0aW9uLCB3aGljaCBj
b3VsZCByZXN1bHQgaW4gZGVsZXRpbmcKKyAgICAvLyB0aGlzIExlZ2FjeURhdGFiYXNlLiBXZSBu
ZWVkIHRoZSBkZWFsbG9jYXRpb24gdG8gaGFwcGVuIGFmdGVyIHdlIGFyZSB0aHJvdWdoLgorICAg
IFJlZjxMZWdhY3lEYXRhYmFzZT4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBtX2JhY2tlbmQtPmNs
b3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOworCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwg
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXZlbnRR
dWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgp
OworICAgIC8vIFJlbW92ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVs
ZWQgdG8gZmlyZSBvbiB0aGlzCisgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJl
ZW4gc2NoZWR1bGVkIGJ5IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgorICAgIC8vIGNvbm5lY3Rp
b24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUgZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWlu
ZworICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJlLgorICAgIGZvciAoYXV0byYg
ZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50
UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVk
LCByZW1vdmVkKTsKKyAgICB9CisKKyAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKK30KKwordm9pZCBM
ZWdhY3lEYXRhYmFzZTo6b25WZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2
NF90IG5ld1ZlcnNpb24pCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6
b25WZXJzaW9uQ2hhbmdlIik7CisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xvc2VQZW5k
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobmV3VmVyc2lvbiAhPSBJREJEYXRh
YmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOworICAgIGVucXVldWVFdmVudChMZWdhY3lWZXJz
aW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVz
KCkudmVyc2lvbmNoYW5nZUV2ZW50KSk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmVucXVl
dWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4
dFN0b3BwZWQpOworICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7CisgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0
KCkpOworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKK30KKworYm9vbCBMZWdh
Y3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7CisgICAg
QVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgp
KQorICAgICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7CisgICAgfQorICAgIHJl
dHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Cit9CisKK2ludDY0
X3QgTGVnYWN5RGF0YWJhc2U6OmZpbmRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMpIHsKKyAgICAgICAgaWYgKG9iamVjdFN0b3JlLnZhbHVlLm5hbWUgPT0gbmFtZSkgewor
ICAgICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLmtleSAhPSBJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbnZhbGlkSWQpOworICAgICAgICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLmtleTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxp
ZElkOworfQorCitib29sIExlZ2FjeURhdGFiYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dAoreworICAgIC8vIFRoZSBzY3JpcHQgd3JhcHBlciBtdXN0IG5vdCBiZSBjb2xsZWN0ZWQgYmVm
b3JlIHRoZSBvYmplY3QgaXMgY2xvc2VkIG9yCisgICAgLy8gd2UgY2FuJ3QgZmlyZSBhICJ2ZXJz
aW9uY2hhbmdlIiBldmVudCB0byBsZXQgc2NyaXB0IG1hbnVhbGx5IGNsb3NlIHRoZSBjb25uZWN0
aW9uLgorICAgIHJldHVybiAhbV9jbG9zZVBlbmRpbmcgJiYgaGFzRXZlbnRMaXN0ZW5lcnMoKSAm
JiAhbV9jb250ZXh0U3RvcHBlZDsKK30KKwordm9pZCBMZWdhY3lEYXRhYmFzZTo6c3RvcCgpCit7
CisgICAgLy8gU3RvcCBmaXJlcyBhdCBhIGRldGVybWluaXN0aWMgdGltZSwgc28gd2UgbmVlZCB0
byBjYWxsIGNsb3NlIGluIGl0LgorICAgIGNsb3NlKCk7CisKKyAgICBtX2NvbnRleHRTdG9wcGVk
ID0gdHJ1ZTsKK30KKworY29uc3QgY2hhciogTGVnYWN5RGF0YWJhc2U6OmFjdGl2ZURPTU9iamVj
dE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiTGVnYWN5RGF0YWJhc2UiOworfQorCitib29s
IExlZ2FjeURhdGFiYXNlOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pc0Nsb3NlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNmMxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuaApAQCAtMCww
ICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5RGF0YWJhc2VfaAorI2RlZmluZSBMZWdh
Y3lEYXRhYmFzZV9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJE
T01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VN
ZXRhZGF0YS5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSW5kZXhl
ZERCLmgiCisjaW5jbHVkZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGVnYWN5VHJhbnNh
Y3Rpb247CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCit0eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOworCitjbGFzcyBMZWdhY3lEYXRhYmFzZSBmaW5hbCA6IHB1YmxpYyBJREJEYXRh
YmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxMZWdhY3lEYXRhYmFzZT4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICB+TGVnYWN5RGF0YWJhc2UoKTsK
KworICAgIHZvaWQgc2V0TWV0YWRhdGEoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRh
dGEpIHsgbV9tZXRhZGF0YSA9IG1ldGFkYXRhOyB9CisgICAgdm9pZCB0cmFuc2FjdGlvbkNyZWF0
ZWQoTGVnYWN5VHJhbnNhY3Rpb24qKTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoTGVn
YWN5VHJhbnNhY3Rpb24qKTsKKworICAgIC8vIEltcGxlbWVudCB0aGUgSURMCisgICAgdmlydHVh
bCBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fbWV0
YWRhdGEubmFtZTsgfQorICAgIHZpcnR1YWwgdWludDY0X3QgdmVyc2lvbigpIGNvbnN0IG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RT
dG9yZU5hbWVzKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhj
ZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJp
ZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBtb2RlLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIG92ZXJyaWRlIGZpbmFsOwor
CisgICAgLy8gSURCRGF0YWJhc2VDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9u
Q2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pOworICAgIHZp
cnR1YWwgdm9pZCBvbkFib3J0KGludDY0X3QsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
OworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKGludDY0X3QpOworCisgICAgLy8gRXZlbnRU
YXJnZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gSURCRGF0YWJhc2VFdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7IH0KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBBY3Rp
dmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQorCisgICAgYm9vbCBpc0Ns
b3NlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VQZW5kaW5nOyB9CisgICAgdm9pZCBm
b3JjZUNsb3NlKCk7CisgICAgdmlydHVhbCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFk
YXRhKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQorICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKworICAgIHVzaW5nIEV2ZW50VGFy
Z2V0OjpkaXNwYXRjaEV2ZW50OworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKworICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlSWQo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmRPYmpl
Y3RTdG9yZUlkKG5hbWUpICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKKyAg
ICB9CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQqIGJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIHN0YXRpYyBpbnQ2NF90IG5leHRUcmFuc2FjdGlvbklk
KCk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgorICAgIGJvb2wgaGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgTGVnYWN5RGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOworCisgICAgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBzY29wZSwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgKnNjb3BlLCBtb2Rl
LCBlYyk7IH0KKworICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCisgICAgdm9pZCBzdG9wKCkg
b3ZlcnJpZGU7CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQo
KSBvdmVycmlkZSBmaW5hbCB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRU
YXJnZXQoKSBvdmVycmlkZSBmaW5hbCB7IGRlcmVmKCk7IH0KKworICAgIHZvaWQgY2xvc2VDb25u
ZWN0aW9uKCk7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7CisgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZD4gbV9iYWNrZW5kOworICAgIFJlZlB0cjxMZWdhY3lUcmFu
c2FjdGlvbj4gbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CisgICAgdHlwZWRlZiBIYXNoTWFw
PGludDY0X3QsIExlZ2FjeVRyYW5zYWN0aW9uKj4gVHJhbnNhY3Rpb25NYXA7CisgICAgVHJhbnNh
Y3Rpb25NYXAgbV90cmFuc2FjdGlvbnM7CisKKyAgICBib29sIG1fY2xvc2VQZW5kaW5nOworICAg
IGJvb2wgbV9pc0Nsb3NlZDsKKyAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7CisKKyAgICAvLyBL
ZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRvIGJlIGZpcmVk
IG9uIHRoaXMKKyAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwgdGhlbSBpZiB0
aGUgZGF0YWJhc2UgY2xvc2VzLgorICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX2VucXVldWVk
RXZlbnRzOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2Fs
bGJhY2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlm
IC8vIExlZ2FjeURhdGFiYXNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lGYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kMDg5MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3RvcnkuY3BwCkBAIC0wLDAgKzEs
MTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5RmFjdG9yeS5oIgorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIklEQkJpbmRp
bmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKKyNpbmNsdWRlICJMZWdhY3lBbnkuaCIKKyNpbmNsdWRlICJMZWdhY3lEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkxlZ2FjeU9wZW5EQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNj
aGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJX
b3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5j
bHVkZSAiV29ya2VyVGhyZWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGVnYWN5RmFj
dG9yeTo6TGVnYWN5RmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkK
KyAgICA6IG1fYmFja2VuZChmYWN0b3J5KQoreworICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ug
dG8gdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgorICAgIHJlbGF4QWRvcHRp
b25SZXF1aXJlbWVudCgpOworfQorCitMZWdhY3lGYWN0b3J5Ojp+TGVnYWN5RmFjdG9yeSgpCit7
Cit9CisKK3N0YXRpYyBib29sIGlzQ29udGV4dFZhbGlkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzPERvY3VtZW50PigqY29udGV4dCkgfHwgY29udGV4
dC0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0
KSkgeworICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUoKSAmJiBkb2N1bWVudC5wYWdl
KCkgJiYgKCFkb2N1bWVudC5wYWdlKCktPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgfHwgU2NoZW1l
UmVnaXN0cnk6OmFsbG93c0RhdGFiYXNlQWNjZXNzSW5Qcml2YXRlQnJvd3NpbmcoZG9jdW1lbnQu
c2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lGYWN0b3J5OjpnZXREYXRhYmFzZU5h
bWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5RmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyIp
OworICAgIGlmICghaXNDb250ZXh0VmFsaWQoY29udGV4dCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29u
dGV4dC0+dG9wT3JpZ2luKCkpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9
IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwg
MCk7CisgICAgbV9iYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJlcXVlc3QsICooY29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKSksICooY29udGV4dC0+dG9wT3JpZ2luKCkpLCBjb250ZXh0KTsKKyAg
ICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBMZWdh
Y3lGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lGYWN0b3J5OjpvcGVuIik7CisgICAgcmV0dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBu
YW1lLCAwLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCwgZWMpOworfQorCitQYXNz
UmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IExlZ2FjeUZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxv
bmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lGYWN0b3J5OjpvcGVuIik7CisgICAgaWYgKCF2ZXJzaW9uKSB7CisgICAgICAgIGVjID0g
VHlwZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG9wZW5JbnRl
cm5hbChjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6
Tm9uTnVsbCwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IExlZ2FjeUZh
Y3Rvcnk6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lvbk51bGxu
ZXNzIHZlcnNpb25OdWxsbmVzcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKHZl
cnNpb24gPj0gMSB8fCB2ZXJzaW9uTnVsbG5lc3MgPT0gSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5l
c3M6Ok51bGwpOworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gVHlwZUVy
cm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFpc0NvbnRleHRWYWxpZChj
b250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBJREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGw6OmNyZWF0ZSgpOworICAgIGludDY0X3QgdHJhbnNhY3Rpb25JZCA9IExl
Z2FjeURhdGFiYXNlOjpuZXh0VHJhbnNhY3Rpb25JZCgpOworICAgIFJlZlB0cjxMZWdhY3lPcGVu
REJSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5T3BlbkRCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uLCB2ZXJzaW9uTnVsbG5l
c3MpOworICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCB2ZXJzaW9uLCB0cmFuc2FjdGlvbklkLCBy
ZXF1ZXN0LCBkYXRhYmFzZUNhbGxiYWNrcywgKihjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpKSwg
Kihjb250ZXh0LT50b3BPcmlnaW4oKSkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNz
UmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IExlZ2FjeUZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgV1RGTG9nQWx3YXlzKCJ5YWggZHVkZSIpOworICAgIExPRyhT
dG9yYWdlQVBJLCAiTGVnYWN5RmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UiKTsKKyAgICBpZiAobmFt
ZS5pc051bGwoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIGlmICghaXNDb250ZXh0VmFsaWQoY29udGV4dCkpCisgICAgICAgIHJldHVy
biAwOworICAgIGlmICghY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJh
c2UoY29udGV4dC0+dG9wT3JpZ2luKCkpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8TGVnYWN5T3BlbkRCUmVxdWVz
dD4gcmVxdWVzdCA9IExlZ2FjeU9wZW5EQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCAwLCAwLCAw
LCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCk7CisgICAgbV9iYWNrZW5kLT5kZWxl
dGVEYXRhYmFzZShuYW1lLCAqY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgKmNvbnRleHQtPnRv
cE9yaWdpbigpLCByZXF1ZXN0LCBjb250ZXh0KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwor
c2hvcnQgTGVnYWN5RmFjdG9yeTo6Y21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdFZhbHVlLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgc2Vjb25kVmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7CisgICAgUmVmUHRyPElEQktl
eT4gZmlyc3QgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGZpcnN0VmFsdWUp
OworICAgIFJlZlB0cjxJREJLZXk+IHNlY29uZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVl
c3RTdGF0ZSwgc2Vjb25kVmFsdWUpOworCisgICAgQVNTRVJUKGZpcnN0KTsKKyAgICBBU1NFUlQo
c2Vjb25kKTsKKworICAgIGlmICghZmlyc3QtPmlzVmFsaWQoKSB8fCAhc2Vjb25kLT5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KGZp
cnN0LT5jb21wYXJlKHNlY29uZC5nZXQoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lGYWN0b3J5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RmFjdG9yeS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWIxNzQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RmFjdG9yeS5o
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaWZuZGVmIExlZ2FjeUZhY3RvcnlfaAorI2RlZmluZSBMZWdhY3lGYWN0b3J5X2gK
KworI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleTsKK2NsYXNzIElE
QktleVJhbmdlOworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFz
cyBMZWdhY3lGYWN0b3J5IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIElEQkZhY3Rv
cnkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeUZhY3Rvcnk+IGNyZWF0
ZShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBXaGlsZSB0aGUgZmVhdHVyZSBpcyB1bmRlciBkZXZlbG9wbWVudCB3ZSdsbCBoYW5k
bGUgYSBudWxsIGZhY3RvcnkgYmFja2VuZCBoZXJlLAorICAgICAgICAvLyByZXR1cm5pbmcgbnVs
bCwgc28gamF2YXNjcmlwdCBjYW4ndCB0cnkgdG8gdXNlIHRoZSBmZWF0dXJlLgorICAgICAgICAv
LyBPbmNlIHRoZSBmZWF0dXJlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgd2Ugc2hvdWxkIHJlbW92ZSB0
aGUgbnVsbCBmYWN0b3J5IGJhY2tlbmQuCisgICAgICAgIHJldHVybiBmYWN0b3J5ID8gYWRvcHRS
ZWYobmV3IExlZ2FjeUZhY3RvcnkoZmFjdG9yeSkpIDogbnVsbHB0cjsKKyAgICB9CisgICAgfkxl
Z2FjeUZhY3RvcnkoKTsKKworICAgIC8vIEZJWE1FOiBnZXREYXRhYmFzZU5hbWVzIGlzIG5vIGxv
bmdlciBhIHdlYi1mYWNpbmcgQVBJLCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBMZWdhY3lG
YWN0b3J5LgorICAgIC8vIFRoZSBXZWIgSW5zcGVjdG9yIGN1cnJlbnRseSB1c2VzIHRoaXMgdG8g
ZW51bWVyYXRlIHRoZSBsaXN0IG9mIGRhdGFiYXNlcywgYnV0IGlzIG1vcmUgY29tcGxpY2F0ZWQg
YXMgYSByZXN1bHQuCisgICAgLy8gV2Ugc2hvdWxkIHByb3ZpZGUgYSBzaW1wbGVyIEFQSSB0byB0
aGUgV2ViIEluc3BlY3RvciB0aGVuIHJlbW92ZSBnZXREYXRhYmFzZU5hbWVzLgorICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBv
cGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIHZl
cnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+
IGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHNob3J0IGNtcChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgc2Vjb25kLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6Cisg
ICAgTGVnYWN5RmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOworCisgICAgUGFz
c1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpW
ZXJzaW9uTnVsbG5lc3MsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIFJlZlB0cjxJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIExlZ2FjeUZhY3RvcnlfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiZTcyMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5j
cHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTGVnYWN5SW5kZXguaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVk
ZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitMZWdhY3lJbmRleDo6TGVnYWN5SW5kZXgoY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYgbWV0YWRhdGEsIExlZ2FjeU9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwgTGVnYWN5
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIDogbV9tZXRhZGF0YShtZXRhZGF0YSkKKyAg
ICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKQorICAgICwgbV9kZWxldGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX29iamVjdFN0
b3JlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEu
aWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKK30KKworTGVnYWN5SW5kZXg6On5M
ZWdhY3lJbmRleCgpCit7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6
Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpvcGVu
Q3Vyc29yIik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJ
REJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVx
dWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWls
cyhJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCBkaXJlY3Rpb24pOworICAgIGJh
Y2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmUt
PmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGZhbHNlLCBJREJEYXRh
YmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOworICAgIHJldHVybiByZXF1ZXN0Owor
fQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUluZGV4OjpvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpvcGVuQ3Vyc29yIik7CisgICAgUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwg
ZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG9wZW5DdXJz
b3IoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBkaXJlY3Rpb24sIGVjKTsKK30KKworUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6OmNvdW50Iik7
CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNy
ZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgYmFja2VuZERCKCktPmNvdW50KG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCByZXF1ZXN0KTsKKyAgICByZXR1
cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6Y291
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJMZWdhY3lJbmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFz
ZSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6Om9wZW5L
ZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpvcGVuS2V5
Q3Vyc29yIik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJ
REJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVx
dWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWls
cyhJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHksIGRpcmVjdGlvbik7CisgICAgYmFja2Vu
ZERCKCktPm9wZW5DdXJzb3IobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQo
KSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgdHJ1ZSwgSURCRGF0YWJhc2VC
YWNrZW5kOjpOb3JtYWxUYXNrLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
a2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJMZWdhY3lJbmRleDo6b3BlbktleUN1cnNvciIpOworICAgIFJlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXks
IGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBvcGVuS2V5
Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZGlyZWN0aW9uLCBlYyk7Cit9CisK
K1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpnZXQi
KTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHko
Y29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gZ2V0KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOworfQorCitQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IExlZ2FjeUluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6OmdldCIpOworICAgIGlm
IChtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxp
ZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fdHJhbnNh
Y3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
aWYgKCFrZXlSYW5nZSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRh
RXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxMZWdhY3lSZXF1
ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6
Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+Z2V0
KG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQs
IGtleVJhbmdlLCBmYWxzZSwgcmVxdWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bh
c3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpnZXRL
ZXkiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9u
bHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBnZXRLZXkoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Cit9CisK
K1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lJbmRleDo6Z2V0
S2V5Iik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBpZiAoIWtleVJhbmdlKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVm
UHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIGJh
Y2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwg
bV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIHRydWUsIHJlcXVlc3QpOworICAgIHJldHVybiByZXF1
ZXN0OworfQorCitJREJEYXRhYmFzZUJhY2tlbmQqIExlZ2FjeUluZGV4OjpiYWNrZW5kREIoKSBj
b25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kREIoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5SW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lJbmRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNDU4ODAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5SW5kZXguaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5SW5k
ZXhfaAorI2RlZmluZSBMZWdhY3lJbmRleF9oCisKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIK
KyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNs
dWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGVnYWN5QW55LmgiCisjaW5jbHVkZSAiTGVn
YWN5T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
TGVnYWN5VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSURCT2JqZWN0U3RvcmU7CisKK2NsYXNzIExlZ2FjeUluZGV4IDogcHVibGljIFNjcmlwdFdy
YXBwYWJsZSwgcHVibGljIElEQkluZGV4IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPExlZ2Fj
eUluZGV4PiBjcmVhdGUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIExlZ2FjeU9i
amVjdFN0b3JlKiBvYmplY3RTdG9yZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTGVnYWN5SW5kZXgobWV0YWRhdGEs
IG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbikpOworICAgIH0KKyAgICB+TGVnYWN5SW5kZXgoKTsK
KworICAgIC8vIEltcGxlbWVudCB0aGUgSURMCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcgbmFt
ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoKSBjb25zdCBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiBtX29iamVjdFN0b3JlOyB9CisgICAgUGFzc1JlZlB0cjxM
ZWdhY3lPYmplY3RTdG9yZT4gbGVnYWN5T2JqZWN0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdFN0b3JlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIExlZ2FjeUFueTo6Y3JlYXRlKG1fbWV0YWRh
dGEua2V5UGF0aCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQorICAgIHZp
cnR1YWwgYm9vbCB1bmlxdWUoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX21ldGFk
YXRhLnVuaXF1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkgY29uc3Qgb3ZlcnJp
ZGUgZmluYWwgeyByZXR1cm4gbV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9CisgICAgdmlydHVhbCBp
bnQ2NF90IGlkKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsg
fQorCisgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRo
aXMgaXMgdW5uZWVkZWQuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMp
IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8
SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSBvdmVycmlk
ZSBmaW5hbCB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6
OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlIGZp
bmFsIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlv
bk5leHQoKSwgZWMpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBj
b25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gY291
bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRl
IGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
RXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3Io
Y29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKSBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNv
bnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3Io
Y29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlv
biwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmlu
YWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldEtleShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSBv
dmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisKKyAgICB2b2lkIG1hcmtEZWxl
dGVkKCkgeyBtX2RlbGV0ZWQgPSB0cnVlOyB9CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQqIGJh
Y2tlbmREQigpIGNvbnN0OworCitwcml2YXRlOgorICAgIExlZ2FjeUluZGV4KGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmLCBMZWdhY3lPYmplY3RTdG9yZSosIExlZ2FjeVRyYW5zYWN0aW9uKik7CisK
KyAgICBJREJJbmRleE1ldGFkYXRhIG1fbWV0YWRhdGE7CisgICAgUmVmUHRyPExlZ2FjeU9iamVj
dFN0b3JlPiBtX29iamVjdFN0b3JlOworICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4gbV90
cmFuc2FjdGlvbjsKKyAgICBib29sIG1fZGVsZXRlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBMZWdhY3lJbmRleF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9iamVj
dFN0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNlNjFlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeU9iamVjdFN0b3JlLmNwcApAQCAtMCwwICsxLDU3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lPYmplY3RTdG9yZS5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVk
ZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUg
IklEQkN1cnNvcldpdGhWYWx1ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRl
ICJJREJLZXlEYXRhLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIklEQktl
eVJhbmdlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMZWdhY3lD
dXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJMZWdhY3lJbmRleC5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworTGVnYWN5T2JqZWN0U3RvcmU6OkxlZ2FjeU9iamVjdFN0b3Jl
KGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBMZWdhY3lUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24pCisgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRhKQorICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fZGVsZXRlZChmYWxzZSkKK3sKKyAgICBBU1NF
UlQobV90cmFuc2FjdGlvbik7CisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVt
ZW50KCk7Cit9CisKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gTGVnYWN5T2JqZWN0U3RvcmU6
OmluZGV4TmFtZXMoKSBjb25zdAoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0
U3RvcmU6OmluZGV4TmFtZXMiKTsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1l
cyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21l
dGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpCisgICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpbmRl
eC5uYW1lKTsKKyAgICBpbmRleE5hbWVzLT5zb3J0KCk7CisgICAgcmV0dXJuIGluZGV4TmFtZXMu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3Jl
OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJ
LCAiTGVnYWN5T2JqZWN0U3RvcmU6OmdldCIpOworICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIWtleVJhbmdlKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5pZCgpLCBp
ZCgpLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIGtleVJhbmdlLCBmYWxzZSwgcmVxdWVz
dCk7CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpv
bmx5KGNvbnRleHQsIGtleSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKK30KKworUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjphZGQiKTsKKyAgICByZXR1cm4gcHV0KElEQkRhdGFi
YXNlQmFja2VuZDo6QWRkT25seSwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1
ZSwga2V5LCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3Rv
cmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lP
YmplY3RTdG9yZTo6YWRkIik7CisgICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFk
ZE9ubHksIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIHN0YXRpY19jYXN0
PElEQktleSo+KG51bGxwdHIpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVn
YWN5T2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9y
ZTo6cHV0Iik7CisgICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRl
LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBrZXksIGVjKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpwdXQiKTsK
KyAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT3JVcGRhdGUsIExlZ2FjeUFu
eTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIHN0YXRpY19jYXN0PElEQktleSo+KG51bGxw
dHIpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6
OnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxMZWdh
Y3lBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHN0YXRlKTsKKyAgICBET01SZXF1
ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9
IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOworICAgIHJldHVy
biBwdXQocHV0TW9kZSwgc291cmNlLCBzdGF0ZSwgdmFsdWUsIGtleS5yZWxlYXNlKCksIGVjKTsK
K30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KElEQkRh
dGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291
cmNlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
UmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1fdHJh
bnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUuanNWYWx1ZSgpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Jsb2JVUkxzKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAorICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG1fbWV0
YWRhdGEua2V5UGF0aDsKKyAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGgu
aXNOdWxsKCk7CisgICAgY29uc3QgYm9vbCBoYXNLZXlHZW5lcmF0b3IgPSBhdXRvSW5jcmVtZW50
KCk7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoc3RhdGUpOworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1
ZXN0U3RhdGUoY29udGV4dCk7CisKKyAgICBpZiAocHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tl
bmQ6OkN1cnNvclVwZGF0ZSAmJiB1c2VzSW5MaW5lS2V5cyAmJiBrZXkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgaWYgKCF1c2VzSW5MaW5lS2V5cyAmJiAhaGFzS2V5R2VuZXJhdG9yICYm
ICFrZXkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7
CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKHJlcXVlc3RTdGF0ZS5leGVjKCksIHZhbHVlLCBrZXlQYXRoKTsK
KyAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgeworICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFoYXNLZXlHZW5lcmF0
b3IgJiYgIWtleVBhdGhLZXkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9Cisg
ICAgICAgIGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKKyAgICAgICAgICAg
IGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIHZhbHVl
LCBrZXlQYXRoKSkgeworICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5UGF0aEtleSkKKyAgICAgICAgICAgIGtleSA9
IGtleVBhdGhLZXk7CisgICAgfQorICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzOworICAg
IFZlY3RvcjxJbmRleEtleXM+IGluZGV4S2V5czsKKyAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9t
ZXRhZGF0YS5pbmRleGVzKSB7CisgICAgICAgIFZlY3RvcjxJREJLZXlEYXRhPiBrZXlEYXRhczsK
KyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0U3RhdGUuZXhlYygpLCBp
bmRleC52YWx1ZSwgdmFsdWUsIGtleURhdGFzKTsKKyAgICAgICAgaW5kZXhJZHMuYXBwZW5kKGlu
ZGV4LmtleSk7CisKKyAgICAgICAgLy8gRklYTUU6IE11Y2ggb2YgdGhlIEluZGV4ZWQgREIgY29k
ZSBuZWVkcyB0byB1c2UgSURCS2V5RGF0YSBkaXJlY3RseSB0byBhdm9pZCB3YXN0ZWZ1bCBjb252
ZXJzaW9ucyBsaWtlIHRoaXMuCisgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4ga2V5czsK
KyAgICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDoga2V5RGF0YXMpIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKKyAgICAgICAg
ICAgIGlmIChrZXkpCisgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7
CisgICAgICAgIH0KKyAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFZlY3Rvcjx1aW50OF90
PiB2YWx1ZUJ5dGVzID0gc2VyaWFsaXplZFZhbHVlLT50b1dpcmVCeXRlcygpOworICAgIC8vIFRo
aXMgaXMgYSBoYWNrIHRvIGFjY291bnQgZm9yIGRpc2FncmVlbWVudHMgYWJvdXQgd2hldGhlciBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgc2hvdWxkIGRlYWwgaW4gVmVjdG9yPHVpbnQ4X3Q+IG9yIFZl
Y3RvcjxjaGFyPi4KKyAgICAvLyBTZWUgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFp
bC93ZWJraXQtZGV2LzIwMTMtRmVicnVhcnkvMDIzNjgyLmh0bWwKKyAgICBWZWN0b3I8Y2hhcj4q
IHZhbHVlQnl0ZXNTaWduZWQgPSByZWludGVycHJldF9jYXN0PFZlY3RvcjxjaGFyPio+KCZ2YWx1
ZUJ5dGVzKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6YWRvcHRWZWN0b3IoKnZhbHVlQnl0ZXNTaWduZWQpOworICAgIGJhY2tlbmREQigpLT5w
dXQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZmZXIsIGtleS5yZWxlYXNlKCks
IHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZT4ocHV0TW9kZSksIHJlcXVl
c3QsIGluZGV4SWRzLCBpbmRleEtleXMpOworICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsK
K30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6ZGVsZXRlRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJ
LCAiTGVnYWN5T2JqZWN0U3RvcmU6OmRlbGV0ZSIpOworICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNhY3Rpb24t
PmlzUmVhZE9ubHkoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFk
T25seUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFrZXlSYW5nZSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0g
TGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+ZGVsZXRlUmFuZ2UobV90cmFu
c2FjdGlvbi0+aWQoKSwgaWQoKSwga2V5UmFuZ2UsIHJlcXVlc3QpOworICAgIHJldHVybiByZXF1
ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RT
dG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRl
eHQsIGtleSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGRlbGV0ZUZ1bmN0aW9uKGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOworfQorCitQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpjbGVhciIpOworICAgIGlmIChtX2RlbGV0ZWQp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0
aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNh
Y3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpSZWFkT25seUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8
TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBM
ZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgYmFja2Vu
ZERCKCktPmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgcmVxdWVz
dCk7CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCituYW1lc3BhY2UgeworLy8g
VGhpcyBjbGFzcyBjcmVhdGVzIHRoZSBpbmRleCBrZXlzIGZvciBhIGdpdmVuIGluZGV4IGJ5IGV4
dHJhY3RpbmcKKy8vIHRoZW0gZnJvbSB0aGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBmb3IgYWxs
IHRoZSBleGlzdGluZyB2YWx1ZXMgaW4KKy8vIHRoZSBvYmplY3RTdG9yZS4gSXQgb25seSBuZWVk
cyB0byBiZSBrZXB0IGFsaXZlIGJ5IHZpcnR1ZSBvZiBiZWluZworLy8gYSBsaXN0ZW5lciBvbiBh
biBJREJSZXF1ZXN0IG9iamVjdCwgaW4gdGhlIHNhbWUgd2F5IHRoYXQgSmF2YVNjcmlwdAorLy8g
Y3Vyc29yIHN1Y2Nlc3MgaGFuZGxlcnMgYXJlIGtlcHQgYWxpdmUuCitjbGFzcyBJbmRleFBvcHVs
YXRvciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElu
ZGV4UG9wdWxhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tl
bmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW5kZXhQb3B1bGF0b3IoYmFja2VuZCwgdHJhbnNhY3Rpb25JZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMgPT0gJm90aGVyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbmRleFBvcHVsYXRvcihQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEpCisgICAgICAgIDogRXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSkK
KyAgICAgICAgLCBtX2RhdGFiYXNlQmFja2VuZChiYWNrZW5kKQorICAgICAgICAsIG1fdHJhbnNh
Y3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RT
dG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV2ZW50KiBldmVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpOworICAgICAgICBFdmVudFRhcmdldCogdGFy
Z2V0ID0gZXZlbnQtPnRhcmdldCgpOworICAgICAgICBMZWdhY3lSZXF1ZXN0KiByZXF1ZXN0ID0g
c3RhdGljX2Nhc3Q8TGVnYWN5UmVxdWVzdCo+KHRhcmdldCk7CisKKyAgICAgICAgUmVmUHRyPExl
Z2FjeUFueT4gY3Vyc29yQW55ID0gcmVxdWVzdC0+bGVnYWN5UmVzdWx0KEFTU0VSVF9OT19FWENF
UFRJT04pOworICAgICAgICBSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBjdXJzb3I7Cisg
ICAgICAgIGlmIChjdXJzb3JBbnktPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1
ZVR5cGUpCisgICAgICAgICAgICBjdXJzb3IgPSBjdXJzb3JBbnktPmxlZ2FjeUN1cnNvcldpdGhW
YWx1ZSgpOworCisgICAgICAgIFZlY3RvcjxpbnQ2NF90LCAxPiBpbmRleElkczsKKyAgICAgICAg
aW5kZXhJZHMuYXBwZW5kKG1faW5kZXhNZXRhZGF0YS5pZCk7CisgICAgICAgIGlmIChjdXJzb3Ip
IHsKKyAgICAgICAgICAgIGN1cnNvci0+Y29udGludWVGdW5jdGlvbihzdGF0aWNfY2FzdDxJREJL
ZXkqPihudWxscHRyKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisKKyAgICAgICAgICAgIFJlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXkgPSBjdXJzb3ItPmlkYlByaW1hcnlLZXkoKTsKKyAgICAgICAg
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gY3Vyc29yLT52YWx1ZSgpOworCisg
ICAgICAgICAgICBWZWN0b3I8SURCS2V5RGF0YT4gaW5kZXhLZXlEYXRhczsKKyAgICAgICAgICAg
IGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUocmVxdWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMo
KSwgbV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwgaW5kZXhLZXlEYXRhcyk7CisKKyAgICAgICAgICAg
IFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gaW5kZXhLZXlzOworICAgICAgICAgICAgZm9yIChhdXRv
JiBpbmRleEtleURhdGEgOiBpbmRleEtleURhdGFzKSB7CisgICAgICAgICAgICAgICAgUmVmUHRy
PElEQktleT4ga2V5ID0gaW5kZXhLZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCk7CisgICAgICAg
ICAgICAgICAgaWYgKGtleSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChr
ZXkucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFZlY3RvcjxMZWdhY3lP
YmplY3RTdG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNMaXN0OworICAgICAgICAgICAgaW5k
ZXhLZXlzTGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKKworICAgICAgICAgICAgbV9kYXRhYmFzZUJh
Y2tlbmQtPnNldEluZGV4S2V5cyhtX3RyYW5zYWN0aW9uSWQsIG1fb2JqZWN0U3RvcmVJZCwgcHJp
bWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5c0xpc3QpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5kZXhpbmcsIHRlbGwgdGhlIGJhY2tl
bmQgdG8gZ28KKyAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJvY2Vzc2luZyB0YXNrcyBvZiB0eXBl
IE5vcm1hbFRhc2suCisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5kZXhlc1Jl
YWR5KG1fdHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBpbmRleElkcyk7CisgICAgICAg
ICAgICBtX2RhdGFiYXNlQmFja2VuZCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgIH0KKwor
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2VCYWNrZW5kOworICAgIGNv
bnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RT
dG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsK
K30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gTGVnYWN5T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdl
dCgidW5pcXVlIiwgdW5pcXVlKTsKKworICAgIGJvb2wgbXVsdGlFbnRyeSA9IGZhbHNlOworICAg
IG9wdGlvbnMuZ2V0KCJtdWx0aUVudHJ5IiwgbXVsdGlFbnRyeSk7CisKKyAgICByZXR1cm4gY3Jl
YXRlSW5kZXgoY29udGV4dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBlYyk7
Cit9CisKK1Bhc3NSZWZQdHI8SURCSW5kZXg+IExlZ2FjeU9iamVjdFN0b3JlOjpjcmVhdGVJbmRl
eChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3Rv
cmU6OmNyZWF0ZUluZGV4Iik7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFu
Z2UoKSB8fCBtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgaWYgKCFrZXlQYXRoLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpTeW50YXhFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlm
IChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKGNvbnRhaW5zSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlU
eXBlICYmIG11bHRpRW50cnkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZEFjY2Vzc0Vycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQ2
NF90IGluZGV4SWQgPSBtX21ldGFkYXRhLm1heEluZGV4SWQgKyAxOworICAgIGJhY2tlbmREQigp
LT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRleElkLCBuYW1lLCBr
ZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpOworCisgICAgKyttX21ldGFkYXRhLm1heEluZGV4
SWQ7CisKKyAgICBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBh
dGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisgICAgUmVmUHRyPExlZ2FjeUluZGV4PiBpbmRleCA9
IExlZ2FjeUluZGV4OjpjcmVhdGUobWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
OworICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKKyAgICBtX21ldGFkYXRhLmluZGV4
ZXMuc2V0KGluZGV4SWQsIG1ldGFkYXRhKTsKKworICAgIEFTU0VSVCghZWMpOworICAgIGlmIChl
YykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRl
eHQpOworICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCSW5k
ZXg+IExlZ2FjeU9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3RvcmU6Omlu
ZGV4Iik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmIChtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1l
KTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKKworICAgIGludDY0X3QgaW5kZXhJZCA9IGZpbmRJbmRleElkKG5hbWUpOworICAgIGlm
IChpbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhKiBpbmRleE1ldGFkYXRhKG51bGxw
dHIpOworICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkp
IHsKKyAgICAgICAgaWYgKGluZGV4Lm5hbWUgPT0gbmFtZSkgeworICAgICAgICAgICAgaW5kZXhN
ZXRhZGF0YSA9ICZpbmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIEFTU0VSVChpbmRleE1ldGFkYXRhKTsKKyAgICBBU1NFUlQoaW5kZXhNZXRhZGF0YS0+aWQg
IT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKKworICAgIFJlZlB0cjxMZWdhY3lJbmRl
eD4gaW5kZXggPSBMZWdhY3lJbmRleDo6Y3JlYXRlKCppbmRleE1ldGFkYXRhLCB0aGlzLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CisgICAg
cmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKK30KKwordm9pZCBMZWdhY3lPYmplY3RTdG9yZTo6ZGVs
ZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpkZWxldGVJbmRleCIpOworICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkgfHwgbV9kZWxldGVkKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50NjRfdCBpbmRleElkID0gZmluZElu
ZGV4SWQobmFtZSk7CisgICAgaWYgKGluZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxp
ZElkKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBiYWNrZW5kREIoKS0+ZGVsZXRlSW5kZXgo
bV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgaW5kZXhJZCk7CisKKyAgICBtX21ldGFkYXRhLmlu
ZGV4ZXMucmVtb3ZlKGluZGV4SWQpOworICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1f
aW5kZXhNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkgewor
ICAgICAgICBpdC0+dmFsdWUtPm1hcmtEZWxldGVkKCk7CisgICAgICAgIG1faW5kZXhNYXAucmVt
b3ZlKG5hbWUpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmpl
Y3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNf
Y2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVx
dWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJD
dXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpk
aXJlY3Rpb25OZXh0KCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHJhbmdl
LCBkaXJlY3Rpb24sIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgZWMpOworfQorCitQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdl
LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJMZWdhY3lPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOworICAgIGlmIChtX2RlbGV0ZWQpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJl
Y3Rpb25TdHJpbmcsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVmUHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAg
IHJlcXVlc3QtPnNldEN1cnNvckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlBbmRW
YWx1ZSwgZGlyZWN0aW9uKTsKKworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNh
Y3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwgcmFuZ2UsIGRp
cmVjdGlvbiwgZmFsc2UsIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGU+
KHRhc2tUeXBlKSwgcmVxdWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQor
CitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29u
dGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGRpcmVjdGlvbiwgZWMp
OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lP
YmplY3RTdG9yZTo6Y291bnQiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0
ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2Fj
dGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkLCByYW5nZSwgcmVx
dWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFu
Z2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Cit9
CisKK3ZvaWQgTGVnYWN5T2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uRmluaXNoZWQoKQoreworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpOworCisgICAgLy8gQnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KKyAgICBtX2luZGV4TWFwLmNsZWFyKCk7Cit9CisKK2ludDY0X3QgTGVn
YWN5T2JqZWN0U3RvcmU6OmZpbmRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sK
KyAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9tZXRhZGF0YS5pbmRleGVzKSB7CisgICAgICAgIGlm
IChpbmRleC52YWx1ZS5uYW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleC5r
ZXkgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKKyAgICAgICAgICAgIHJldHVybiBp
bmRleC5rZXk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGE6
OkludmFsaWRJZDsKK30KKworSURCRGF0YWJhc2VCYWNrZW5kKiBMZWdhY3lPYmplY3RTdG9yZTo6
YmFja2VuZERCKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+YmFja2VuZERC
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeU9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yOTFhZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9iamVjdFN0b3JlLmgKQEAgLTAsMCArMSwx
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIExlZ2FjeU9iamVjdFN0b3JlX2gKKyNkZWZpbmUgTGVnYWN5
T2JqZWN0U3RvcmVfaAorCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIklEQkN1
cnNvci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQktl
eS5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgor
I2luY2x1ZGUgIkxlZ2FjeUluZGV4LmgiCisjaW5jbHVkZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIK
KyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIElEQkFueTsKK2NsYXNzIExl
Z2FjeUluZGV4OworCitjbGFzcyBMZWdhY3lPYmplY3RTdG9yZSA6IHB1YmxpYyBTY3JpcHRXcmFw
cGFibGUsIHB1YmxpYyBJREJPYmplY3RTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxM
ZWdhY3lPYmplY3RTdG9yZT4gY3JlYXRlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1l
dGFkYXRhLCBMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBMZWdhY3lPYmplY3RTdG9yZShtZXRhZGF0YSwgdHJhbnNhY3Rp
b24pKTsKKyAgICB9CisgICAgfkxlZ2FjeU9iamVjdFN0b3JlKCkgeyB9CisKKyAgICAvLyBJbXBs
ZW1lbnQgdGhlIElEQk9iamVjdFN0b3JlIElETAorICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhLmlkOyB9CisgICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhLm5hbWU7IH0KKyAgICBQYXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFu
eSgpIGNvbnN0IHsgcmV0dXJuIExlZ2FjeUFueTo6Y3JlYXRlKG1fbWV0YWRhdGEua2V5UGF0aCk7
IH0KKyAgICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFk
YXRhLmtleVBhdGg7IH0KKyAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMo
KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb247IH0KKyAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLmF1dG9JbmNyZW1lbnQ7IH0KKworICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlND
OjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3Qg
U3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgSURCRGF0YWJhc2VCYWNrZW5kOjpU
YXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKwor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KElEQkRhdGFiYXNlQmFja2Vu
ZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+LCBKU0M6OkV4ZWNTdGF0ZSosIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7
CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRN
b2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSosIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjbGVhcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0
cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGNvbnN0IERpY3Rpb25h
cnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVJbmRleChjb250
ZXh0LCBuYW1lLCBJREJLZXlQYXRoKGtleVBhdGgpLCBvcHRpb25zLCBlYyk7IH0KKyAgICBQYXNz
UmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoLCBj
b25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3Jl
YXRlSW5kZXgoY29udGV4dCwgbmFtZSwgSURCS2V5UGF0aChrZXlQYXRoKSwgb3B0aW9ucywgZWMp
OyB9CisgICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGNvbnN0IERp
Y3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3Jl
YXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBl
Yyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZv
aWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KKyAgICB2b2lkIHRyYW5zYWN0
aW9uRmluaXNoZWQoKTsKKworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9CisgICAgdm9pZCBzZXRNZXRhZGF0YShjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSkgeyBtX21ldGFkYXRhID0gbWV0YWRhdGE7
IH0KKworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBJbmRleEtleXM7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSW5kZXhLZXlzPiBJbmRleEtleU1hcDsKKworICAgIElE
QkRhdGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgTGVn
YWN5T2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIExlZ2FjeVRyYW5z
YWN0aW9uKik7CisKKyAgICBpbnQ2NF90IGZpbmRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3Q7CisgICAgYm9vbCBjb250YWluc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBmaW5kSW5kZXhJZChuYW1lKSAhPSBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQ7CisgICAgfQorCisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX21l
dGFkYXRhOworICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAg
ICBib29sIG1fZGVsZXRlZDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxM
ZWdhY3lJbmRleD4+IElEQkluZGV4TWFwOworICAgIElEQkluZGV4TWFwIG1faW5kZXhNYXA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gTGVnYWN5
T2JqZWN0U3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzIzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAK
QEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TGVnYWN5T3BlbkRCUmVxdWVzdC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
KyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIKKyNpbmNsdWRlICJJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmgiCisjaW5jbHVkZSAiTGVnYWN5RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMZWdhY3lWZXJzaW9u
Q2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxMZWdhY3lPcGVu
REJSZXF1ZXN0PiBMZWdhY3lPcGVuREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVy
c2lvbk51bGxuZXNzIHZlcnNpb25OdWxsbmVzcykKK3sKKyAgICBSZWY8TGVnYWN5T3BlbkRCUmVx
dWVzdD4gcmVxdWVzdChhZG9wdFJlZigqbmV3IExlZ2FjeU9wZW5EQlJlcXVlc3QoY29udGV4dCwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uLCB2ZXJzaW9uTnVsbG5lc3MpKSk7Cisg
ICAgcmVxdWVzdC0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisK
K0xlZ2FjeU9wZW5EQlJlcXVlc3Q6OkxlZ2FjeU9wZW5EQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6
VmVyc2lvbk51bGxuZXNzIHZlcnNpb25OdWxsbmVzcykKKyAgICA6IExlZ2FjeVJlcXVlc3QoY29u
dGV4dCwgTGVnYWN5QW55OjpjcmVhdGVOdWxsKCksIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFs
VGFzaywgMCkKKyAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV90
cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKKyAg
ICAsIG1fdmVyc2lvbk51bGxuZXNzKHZlcnNpb25OdWxsbmVzcykKK3sKKyAgICBBU1NFUlQoIW1f
cmVzdWx0KTsKK30KKworTGVnYWN5T3BlbkRCUmVxdWVzdDo6fkxlZ2FjeU9wZW5EQlJlcXVlc3Qo
KQoreworfQorCitFdmVudFRhcmdldEludGVyZmFjZSBMZWdhY3lPcGVuREJSZXF1ZXN0OjpldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElEQk9wZW5EQlJlcXVlc3RF
dmVudFRhcmdldEludGVyZmFjZVR5cGU7Cit9CisKK3ZvaWQgTGVnYWN5T3BlbkRCUmVxdWVzdDo6
b25CbG9ja2VkKHVpbnQ2NF90IG9sZFZlcnNpb24pCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lPcGVuREJSZXF1ZXN0OjpvbkJsb2NrZWQoKSIpOworICAgIGlmICghc2hvdWxkRW5xdWV1
ZUV2ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBlbnF1ZXVlRXZlbnQoTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbV92ZXJzaW9uLCBldmVudE5h
bWVzKCkuYmxvY2tlZEV2ZW50KSk7Cit9CisKK3ZvaWQgTGVnYWN5T3BlbkRCUmVxdWVzdDo6b25V
cGdyYWRlTmVlZGVkKHVpbnQ2NF90IG9sZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kPiBwcnBEYXRhYmFzZUJhY2tlbmQsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1l
dGFkYXRhKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T3BlbkRCUmVxdWVzdDo6b25V
cGdyYWRlTmVlZGVkKCkiKTsKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRi
ID0gcHJwRGF0YWJhc2VCYWNrZW5kOworICAgICAgICBkYi0+YWJvcnQobV90cmFuc2FjdGlvbklk
KTsKKyAgICAgICAgZGItPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKKworICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlQmFja2VuZCA9IHBycERhdGFiYXNlQmFja2VuZDsKKwor
ICAgIFJlZlB0cjxMZWdhY3lEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBMZWdhY3lEYXRhYmFzZTo6
Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgZGF0YWJhc2VCYWNrZW5kLCBtX2RhdGFi
YXNlQ2FsbGJhY2tzKTsKKyAgICBpZGJEYXRhYmFzZS0+c2V0TWV0YWRhdGEobWV0YWRhdGEpOwor
ICAgIG1fZGF0YWJhc2VDYWxsYmFja3MtPmNvbm5lY3QoaWRiRGF0YWJhc2UuZ2V0KCkpOworICAg
IG1fZGF0YWJhc2VDYWxsYmFja3MgPSBudWxscHRyOworCisgICAgSURCRGF0YWJhc2VNZXRhZGF0
YSBvbGRNZXRhZGF0YShtZXRhZGF0YSk7CisgICAgb2xkTWV0YWRhdGEudmVyc2lvbiA9IG9sZFZl
cnNpb247CisKKyAgICBtX3RyYW5zYWN0aW9uID0gTGVnYWN5VHJhbnNhY3Rpb246OmNyZWF0ZShz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fdHJhbnNhY3Rpb25JZCwgaWRiRGF0YWJhc2UuZ2V0
KCksIHRoaXMsIG9sZE1ldGFkYXRhKTsKKyAgICBtX3Jlc3VsdCA9IExlZ2FjeUFueTo6Y3JlYXRl
KGlkYkRhdGFiYXNlLnJlbGVhc2UoKSk7CisKKyAgICBpZiAobV92ZXJzaW9uTnVsbG5lc3MgPT0g
SW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3M6Ok51bGwpCisgICAgICAgIG1fdmVyc2lvbiA9IDE7
CisgICAgZW5xdWV1ZUV2ZW50KExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZl
cnNpb24sIG1fdmVyc2lvbiwgZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkpOworfQor
Cit2b2lkIExlZ2FjeU9wZW5EQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZD4gcHJwQmFja2VuZCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRh
dGEpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPcGVuREJSZXF1ZXN0OjpvblN1Y2Nl
c3MoKSIpOworICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQgPSBwcnBCYWNrZW5kOwor
ICAgIFJlZlB0cjxMZWdhY3lEYXRhYmFzZT4gaWRiRGF0YWJhc2U7CisgICAgaWYgKG1fcmVzdWx0
KSB7CisgICAgICAgIGlkYkRhdGFiYXNlID0gbV9yZXN1bHQtPmxlZ2FjeURhdGFiYXNlKCk7Cisg
ICAgICAgIEFTU0VSVChpZGJEYXRhYmFzZSk7CisgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZUNh
bGxiYWNrcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFj
a3MpOworICAgICAgICBpZGJEYXRhYmFzZSA9IExlZ2FjeURhdGFiYXNlOjpjcmVhdGUoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kLnJlbGVhc2UoKSwgbV9kYXRhYmFzZUNhbGxiYWNr
cyk7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3MtPmNvbm5lY3QoaWRiRGF0YWJhc2UuZ2V0
KCkpOworICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzID0gbnVsbHB0cjsKKyAgICAgICAgbV9y
ZXN1bHQgPSBMZWdhY3lBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5nZXQoKSk7CisgICAgfQorICAg
IGlkYkRhdGFiYXNlLT5zZXRNZXRhZGF0YShtZXRhZGF0YSk7CisgICAgZW5xdWV1ZUV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgZmFsc2UsIGZhbHNlKSk7Cit9
CisKK2Jvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3QK
K3sKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5E
SU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExlZ2Fj
eU9wZW5EQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7
CisgICAgLy8gSWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGJldHdlZW4gb25VcGdyYWRlTmVlZGVk
IGFuZCB0aGUgZGVsaXZlcnkgb2YgdGhlICJzdWNjZXNzIiBldmVudCwKKyAgICAvLyBhbiAiZXJy
b3IiIGV2ZW50IHNob3VsZCBiZSBmaXJlZCBpbnN0ZWFkLgorICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJB
bnk6OklEQkRhdGFiYXNlVHlwZSAmJiBtX3Jlc3VsdC0+bGVnYWN5RGF0YWJhc2UoKS0+aXNDbG9z
ZVBlbmRpbmcoKSkgeworICAgICAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIG9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChldmVu
dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVz
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5E
QlJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTU5M2I1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBM
ZWdhY3lPcGVuREJSZXF1ZXN0X2gKKyNkZWZpbmUgTGVnYWN5T3BlbkRCUmVxdWVzdF9oCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRh
dGEuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSW5kZXhlZERC
LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOworCitjbGFzcyBMZWdhY3lPcGVuREJSZXF1ZXN0
IDogcHVibGljIExlZ2FjeVJlcXVlc3QgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TGVnYWN5
T3BlbkRCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2
ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyk7CisgICAgdmlydHVhbCB+TGVnYWN5
T3BlbkRCUmVxdWVzdCgpOworCisgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCh1aW50NjRfdCBl
eGlzdGluZ1ZlcnNpb24pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblVwZ3Jh
ZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmly
dHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBvdmVycmlkZSBmaW5hbDsKKworICAgIC8vIEV2ZW50VGFy
Z2V0CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFj
ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRFbnF1ZXVlRXZlbnQoKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBMZWdhY3lPcGVuREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50
NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyk7CisKKyAgICBSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CisgICAgY29uc3QgaW50
NjRfdCBtX3RyYW5zYWN0aW9uSWQ7CisgICAgdWludDY0X3QgbV92ZXJzaW9uOworICAgIEluZGV4
ZWREQjo6VmVyc2lvbk51bGxuZXNzIG1fdmVyc2lvbk51bGxuZXNzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNl
bmRpZiAvLyBMZWdhY3lPcGVuREJSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDRlZTlkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCkBA
IC0wLDAgKzEsNTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5UmVxdWVzdC5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlv
bi5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhv
bGRlci5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJREJD
dXJzb3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNs
dWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIkxlZ2FjeUN1cnNvci5oIgorI2luY2x1ZGUgIkxl
Z2FjeUN1cnNvcldpdGhWYWx1ZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVRyYW5zYWN0aW9uLmgiCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8
TGVnYWN5UmVxdWVzdD4gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBSZWY8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdChhZG9w
dFJlZigqbmV3IExlZ2FjeVJlcXVlc3QoY29udGV4dCwgc291cmNlLCBJREJEYXRhYmFzZUJhY2tl
bmQ6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uKSkpOworICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5l
ZWRlZCgpOworICAgIC8vIFJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCBJREJGYWN0b3J5IChvcGVu
L2RlbGV0ZURhdGFiYXNlL2dldERhdGFiYXNlTmFtZXMpIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRo
IHRyYW5zYWN0aW9ucy4KKyAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgICAgIHRyYW5zYWN0aW9u
LT5yZWdpc3RlclJlcXVlc3QocmVxdWVzdC5wdHIoKSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKK1JlZjxMZWdhY3lSZXF1ZXN0PiBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQoreworICAgIFJlZjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcg
TGVnYWN5UmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbikpKTsK
KyAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICAvLyBSZXF1ZXN0cyBhc3NvY2lh
dGVkIHdpdGggSURCRmFjdG9yeSAob3Blbi9kZWxldGVEYXRhYmFzZS9nZXREYXRhYmFzZU5hbWVz
KSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCB0cmFuc2FjdGlvbnMuCisgICAgaWYgKHRyYW5zYWN0
aW9uKQorICAgICAgICB0cmFuc2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHJlcXVlc3QucHRyKCkp
OworICAgIHJldHVybiByZXF1ZXN0OworfQorCitMZWdhY3lSZXF1ZXN0OjpMZWdhY3lSZXF1ZXN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBz
b3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIExlZ2FjeVRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IElEQk9wZW5EQlJlcXVlc3QoY29udGV4dCkKKyAg
ICAsIG1fcmVzdWx0KG51bGxwdHIpCisgICAgLCBtX2Vycm9yQ29kZSgwKQorICAgICwgbV9jb250
ZXh0U3RvcHBlZChmYWxzZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAg
LCBtX3JlYWR5U3RhdGUoUEVORElORykKKyAgICAsIG1fcmVxdWVzdEFib3J0ZWQoZmFsc2UpCisg
ICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQorICAgICwg
bV9oYXNQZW5kaW5nQWN0aXZpdHkodHJ1ZSkKKyAgICAsIG1fY3Vyc29yVHlwZShJbmRleGVkREI6
OkN1cnNvclR5cGU6OktleUFuZFZhbHVlKQorICAgICwgbV9jdXJzb3JEaXJlY3Rpb24oSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHQpCisgICAgLCBtX2N1cnNvckZpbmlzaGVkKGZhbHNl
KQorICAgICwgbV9wZW5kaW5nQ3Vyc29yKG51bGxwdHIpCisgICAgLCBtX2RpZEZpcmVVcGdyYWRl
TmVlZGVkRXZlbnQoZmFsc2UpCisgICAgLCBtX3ByZXZlbnRQcm9wYWdhdGlvbihmYWxzZSkKKyAg
ICAsIG1fcmVxdWVzdFN0YXRlKGNvbnRleHQpCit7Cit9CisKK0xlZ2FjeVJlcXVlc3Q6On5MZWdh
Y3lSZXF1ZXN0KCkKK3sKK30KKworUGFzc1JlZlB0cjxJREJBbnk+IExlZ2FjeVJlcXVlc3Q6OnJl
c3VsdChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9
IERPTkUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRl
RXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbV9yZXN1bHQ7Cit9
CisKK1Bhc3NSZWZQdHI8RE9NRXJyb3I+IExlZ2FjeVJlcXVlc3Q6OmVycm9yKEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBtX2Vycm9yOworfQorCit1bnNpZ25lZCBzaG9y
dCBMZWdhY3lSZXF1ZXN0OjplcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgcmV0dXJuIG1fZXJyb3JDb2RlOworfQorCitQYXNzUmVmUHRyPElEQkFueT4gTGVnYWN5UmVx
dWVzdDo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2U7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeVJlcXVlc3Q6OnRyYW5zYWN0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKK30KKworY29uc3QgU3RyaW5nJiBMZWdhY3lS
ZXF1ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09
IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOworICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBlbmRpbmcsICgicGVuZGluZyIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBkb25lLCAoImRvbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSk7CisKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpCisg
ICAgICAgIHJldHVybiBwZW5kaW5nOworCisgICAgcmV0dXJuIGRvbmU7Cit9CisKK3ZvaWQgTGVn
YWN5UmVxdWVzdDo6bWFya0Vhcmx5RGVhdGgoKQoreworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PT0gUEVORElORyk7CisgICAgbV9yZWFkeVN0YXRlID0gRWFybHlEZWF0aDsKKyAgICBpZiAobV90
cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVlc3QodGhp
cyk7Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6YWJvcnQoKQoreworICAgIEFTU0VSVCghbV9y
ZXF1ZXN0QWJvcnRlZCk7CisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CisgICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBET05FKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFbnF1ZXVlZCBldmVudHMgbWF5
IGJlIHRoZSBvbmx5IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdC4KKyAgICBSZWZQdHI8TGVnYWN5
UmVxdWVzdD4gc2VsZih0aGlzKTsKKworICAgIEV2ZW50UXVldWUmIGV2ZW50UXVldWUgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50
IDogbV9lbnF1ZXVlZEV2ZW50cykgeworICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVl
LmNhbmNlbEV2ZW50KCpldmVudCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVt
b3ZlZCk7CisgICAgfQorICAgIG1fZW5xdWV1ZWRFdmVudHMuY2xlYXIoKTsKKworICAgIG1fZXJy
b3JDb2RlID0gMDsKKyAgICBtX2Vycm9yID0gbnVsbHB0cjsKKyAgICBtX2Vycm9yTWVzc2FnZSA9
IFN0cmluZygpOworICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBvbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOworICAg
IG1fcmVxdWVzdEFib3J0ZWQgPSB0cnVlOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6OnNldEN1
cnNvckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIEluZGV4ZWREQjo6
Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09
IFBFTkRJTkcpOworICAgIEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKKyAgICBtX2N1cnNvclR5
cGUgPSBjdXJzb3JUeXBlOworICAgIG1fY3Vyc29yRGlyZWN0aW9uID0gZGlyZWN0aW9uOworfQor
Cit2b2lkIExlZ2FjeVJlcXVlc3Q6OnNldFBlbmRpbmdDdXJzb3IoUGFzc1JlZlB0cjxMZWdhY3lD
dXJzb3I+IGN1cnNvcikKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IERPTkUpOworICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9uKTsKKyAgICBBU1NFUlQoIW1fcGVuZGluZ0N1cnNvcik7CisgICAgQVNTRVJUKGN1cnNvciA9
PSBnZXRSZXN1bHRDdXJzb3IoKSk7CisKKyAgICBtX3BlbmRpbmdDdXJzb3IgPSBjdXJzb3I7Cisg
ICAgbV9yZXN1bHQgPSBudWxscHRyOworICAgIG1fcmVhZHlTdGF0ZSA9IFBFTkRJTkc7CisgICAg
bV9lcnJvckNvZGUgPSAwOworICAgIG1fZXJyb3IgPSBudWxscHRyOworICAgIG1fZXJyb3JNZXNz
YWdlID0gU3RyaW5nKCk7CisgICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMp
OworfQorCitSZWZQdHI8TGVnYWN5Q3Vyc29yPiBMZWdhY3lSZXF1ZXN0OjpnZXRSZXN1bHRDdXJz
b3IoKQoreworICAgIGlmICghbV9yZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGlmIChtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6SURCQ3Vyc29yVHlwZSkKKyAgICAgICAg
cmV0dXJuIG1fcmVzdWx0LT5sZWdhY3lDdXJzb3IoKTsKKyAgICBpZiAobV9yZXN1bHQtPnR5cGUo
KSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCisgICAgICAgIHJldHVybiBtX3Jl
c3VsdC0+bGVnYWN5Q3Vyc29yV2l0aFZhbHVlKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgTGVnYWN5UmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29yKFBhc3NSZWZQdHI8TGVnYWN5Q3Vy
c29yPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUpCit7CisgICAg
QVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKKyAgICBtX2N1cnNvcktleSA9IGtleTsK
KyAgICBtX2N1cnNvclByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OworICAgIG1fY3Vyc29yVmFsdWUg
PSB2YWx1ZTsKKworICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JUeXBl
OjpLZXlPbmx5KSB7CisgICAgICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoY3Vyc29y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55Ojpj
cmVhdGUoTGVnYWN5Q3Vyc29yV2l0aFZhbHVlOjpmcm9tQ3Vyc29yKGN1cnNvcikpOworfQorCit2
b2lkIExlZ2FjeVJlcXVlc3Q6OmZpbmlzaEN1cnNvcigpCit7CisgICAgbV9jdXJzb3JGaW5pc2hl
ZCA9IHRydWU7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBQRU5ESU5HKQorICAgICAgICBtX2hh
c1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOworfQorCitib29sIExlZ2FjeVJlcXVlc3Q6OnNob3Vs
ZEVucXVldWVFdmVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VS
VChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CisgICAg
aWYgKG1fcmVxdWVzdEFib3J0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQo
bV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOworICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9l
cnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fZXJyb3IgJiYgIW1fcmVzdWx0KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lSZXF1
ZXN0OjpvbkVycm9yKCkgKCVzKSAnJXMnIiwgZXJyb3ItPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBl
cnJvci0+bWVzc2FnZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZXJyb3JDb2RlID0gZXJyb3ItPmNvZGUo
KTsKKyAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yLT5tZXNzYWdlKCk7CisgICAgbV9lcnJvciA9
IERPTUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShlcnJv
ci0+aWRiQ29kZSgpKSk7CisgICAgbV9wZW5kaW5nQ3Vyc29yID0gbnVsbHB0cjsKKyAgICBlbnF1
ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1
ZSkpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxFdmVudD4gY3JlYXRlU3VjY2Vzc0V2ZW50KCkK
K3sKKyAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBm
YWxzZSwgZmFsc2UpOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoRE9NU3RyaW5nTGlzdCkiKTsKKyAgICBpZiAoIXNo
b3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc3VsdCA9IExl
Z2FjeUFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOworICAgIGVucXVldWVFdmVudChjcmVhdGVT
dWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gcHJwQmFja2VuZCkKK3sKKyAgICBMT0coU3RvcmFnZUFQ
SSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7CisgICAgaWYgKCFzaG91
bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRE9NUmVxdWVzdFN0YXRl
OjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZD4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gYmFj
a2VuZC0+a2V5KCk7CisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGJhY2tlbmQtPnBy
aW1hcnlLZXkoKTsKKworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJp
YWxpemVJREJWYWx1ZUJ1ZmZlcihyZXF1ZXN0U3RhdGUoKSwgYmFja2VuZC0+dmFsdWVCdWZmZXIo
KSwgISFrZXkpOworCisgICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOworICAgIFJlZlB0cjxM
ZWdhY3lDdXJzb3I+IGN1cnNvcjsKKyAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgeworICAgIGNh
c2UgSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5OgorICAgICAgICBjdXJzb3IgPSBMZWdh
Y3lDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLnJlbGVhc2UoKSwgbV9jdXJzb3JEaXJlY3Rpb24sIHRo
aXMsIG1fc291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlOgorICAgICAgICBj
dXJzb3IgPSBMZWdhY3lDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLnJlbGVhc2UoKSwg
bV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1fc291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIHNldFJlc3VsdEN1cnNvcihjdXJzb3IsIGtleS5yZWxlYXNl
KCksIHByaW1hcnlLZXkucmVsZWFzZSgpLCB2YWx1ZSk7CisKKyAgICBlbnF1ZXVlRXZlbnQoY3Jl
YXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQktleT4gaWRiS2V5KQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5
UmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaWRiS2V5ICYmIGlkYktleS0+aXNWYWxp
ZCgpKSB7CisgICAgICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9yZXF1ZXN0U3Rh
dGUpOworICAgICAgICBtX3Jlc3VsdCA9IExlZ2FjeUFueTo6Y3JlYXRlKGlkYktleVRvU2NyaXB0
VmFsdWUocmVxdWVzdFN0YXRlKCksIGlkYktleSkpOworICAgIH0gZWxzZQorICAgICAgICBtX3Jl
c3VsdCA9IExlZ2FjeUFueTo6Y3JlYXRlSW52YWxpZCgpOworICAgIGVucXVldWVFdmVudChjcmVh
dGVTdWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlcikKK3sKKyAgICBMT0coU3RvcmFnZUFQ
SSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhTaGFyZWRCdWZmZXIpIik7CisgICAgaWYgKCFz
aG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRE9NUmVxdWVzdFN0
YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisKKyAgICAvLyBGSVhNRTogQnkgbm90
IGtub3dpbmcgd2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkZWZpbmVkIGhlcmUsIHdlIGRvbid0
IGtub3cKKyAgICAvLyBpZiBhIG51bGwgdmFsdWVCdWZmZXIgbWVhbnMgdGhlIHZhbHVlIGlzIG51
bGwgb3IgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIocmVxdWVzdFN0YXRlKCksIHZhbHVl
QnVmZmVyLCB0cnVlKTsKKyAgICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7Cit9CisKKyNpZm5k
ZWYgTkRFQlVHCitzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoTGVnYWN5QW55KiBzb3VyY2UpCit7CisgICAgaWYgKHNvdXJjZS0+dHlwZSgpID09
IElEQkFueTo6SURCT2JqZWN0U3RvcmVUeXBlKQorICAgICAgICByZXR1cm4gc291cmNlLT5pZGJP
YmplY3RTdG9yZSgpOworICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQkluZGV4
VHlwZSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiSW5kZXgoKS0+b2JqZWN0U3RvcmUoKTsK
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisK
K3ZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2
YWx1ZUJ1ZmZlciwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lSZXF1ZXN0Ojpv
blN1Y2Nlc3MoU2hhcmVkQnVmZmVyLCBJREJLZXksIElEQktleVBhdGgpIik7CisgICAgaWYgKCFz
aG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWZuZGVmIE5ERUJVRwor
ICAgIEFTU0VSVChrZXlQYXRoID09IGVmZmVjdGl2ZU9iamVjdFN0b3JlKG1fc291cmNlLmdldCgp
KS0+a2V5UGF0aCgpKTsKKyNlbmRpZgorICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUo
bV9yZXF1ZXN0U3RhdGUpOworCisgICAgLy8gRklYTUU6IEJ5IG5vdCBrbm93aW5nIHdoZXRoZXIg
b3Igbm90IHRoZSBrZXkgaXMgZGVmaW5lZCBoZXJlLCB3ZSBkb24ndCBrbm93CisgICAgLy8gaWYg
YSBudWxsIHZhbHVlQnVmZmVyIG1lYW5zIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHRoZSB2YWx1ZSBp
cyB1bmRlZmluZWQuCisgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNlcmlh
bGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0ZSgpLCB2YWx1ZUJ1ZmZlciwgdHJ1ZSk7CisK
KyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKKworICAgIGlm
ICgha2V5UGF0aC5pc051bGwoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgUmVmUHRyPElE
QktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KHJlcXVlc3RTdGF0ZSgpLT5leGVjKCksIHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgQVNTRVJU
KCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5S2V5LmdldCgpKSk7
CisjZW5kaWYKKyAgICAgICAgYm9vbCBpbmplY3RlZCA9IGluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZShyZXF1ZXN0U3RhdGUoKSwgcHJpbWFyeUtleSwgdmFsdWUsIGtleVBhdGgpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGluamVjdGVkLCBpbmplY3RlZCk7CisgICAgfQorCisgICAgb25TdWNj
ZXNzSW50ZXJuYWwodmFsdWUpOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2Vzcyhp
bnQ2NF90IHZhbHVlKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVxdWVzdDo6b25T
dWNjZXNzKGludDY0X3QpIik7CisgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHJldHVybiBvblN1Y2Nlc3NJbnRlcm5hbChTZXJpYWxpemVkU2NyaXB0
VmFsdWU6Om51bWJlclZhbHVlKHZhbHVlKSk7Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6b25T
dWNjZXNzKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2Vz
cygpIik7CisgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHJldHVybiBvblN1Y2Nlc3NJbnRlcm5hbChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVm
aW5lZFZhbHVlKCkpOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2Vzc0ludGVybmFs
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQo
IW1fY29udGV4dFN0b3BwZWQpOworICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9y
ZXF1ZXN0U3RhdGUpOworICAgIHJldHVybiBvblN1Y2Nlc3NJbnRlcm5hbChkZXNlcmlhbGl6ZUlE
QlZhbHVlKHJlcXVlc3RTdGF0ZSgpLCB2YWx1ZSkpOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6
Om9uU3VjY2Vzc0ludGVybmFsKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkK
K3sKKyAgICBtX3Jlc3VsdCA9IExlZ2FjeUFueTo6Y3JlYXRlKHZhbHVlKTsKKyAgICBpZiAobV9w
ZW5kaW5nQ3Vyc29yKSB7CisgICAgICAgIG1fcGVuZGluZ0N1cnNvci0+Y2xvc2UoKTsKKyAgICAg
ICAgbV9wZW5kaW5nQ3Vyc29yID0gbnVsbHB0cjsKKyAgICB9CisgICAgZW5xdWV1ZUV2ZW50KGNy
ZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3Moa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcikiKTsK
KyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBE
T01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKKworICAgIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihyZXF1
ZXN0U3RhdGUoKSwgYnVmZmVyLCAhIWtleSk7CisKKyAgICBBU1NFUlQobV9wZW5kaW5nQ3Vyc29y
KTsKKyAgICBzZXRSZXN1bHRDdXJzb3IobV9wZW5kaW5nQ3Vyc29yLnJlbGVhc2UoKSwga2V5LCBw
cmltYXJ5S2V5LCB2YWx1ZSk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgp
KTsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikKK3sKKyAgICAvLyBPbmx5
IHRoZSBMZWdhY3lPcGVuREJSZXF1ZXN0IHZlcnNpb24gb2YgdGhpcyBzaG91bGQgZXZlciBiZSBj
YWxsZWQ7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgTGVnYWN5UmVxdWVz
dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW4gYW4gaWRl
YWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMgYSBv
ciBjYW4KKyAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIGFuZCB3ZSBoYXZlIGV2ZW50
IGxpc3RlbmVycy4gVGhpcyBpcyBvcmRlciB0byBoYW5kbGUKKyAgICAvLyAgICAgICAgdXNlciBn
ZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5LgorICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0
eSAmJiAhbV9jb250ZXh0U3RvcHBlZDsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpzdG9wKCkK
K3sKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
b250ZXh0U3RvcHBlZCA9IHRydWU7CisgICAgbV9yZXF1ZXN0U3RhdGUuY2xlYXIoKTsKKyAgICBp
ZiAobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpCisgICAgICAgIG1hcmtFYXJseURlYXRoKCk7Cit9
CisKK2Jvb2wgTGVnYWN5UmVxdWVzdDo6Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX2hhc1BlbmRpbmdBY3Rpdml0eTsKK30KKworY29uc3QgY2hhciogTGVn
YWN5UmVxdWVzdDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJM
ZWdhY3lSZXF1ZXN0IjsKK30KKworRXZlbnRUYXJnZXRJbnRlcmZhY2UgTGVnYWN5UmVxdWVzdDo6
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAoreworICAgIHJldHVybiBJREJSZXF1ZXN0RXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOworfQorCitib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9
PSBQRU5ESU5HKTsKKyAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOworICAgIEFTU0VSVCht
X2hhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgQVNTRVJUKG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgp
KTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoZXZl
bnQtPnRhcmdldCgpID09IHRoaXMpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0
YXRlIDwgRE9ORSwgIldoZW4gZGlzcGF0Y2hpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSA8IERP
TkUoJWQpLCB3YXMgJWQiLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIERP
TkUsIG1fcmVhZHlTdGF0ZSk7CisKKyAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1f
cmVxdWVzdFN0YXRlKTsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5i
bG9ja2VkRXZlbnQpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IERPTkU7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0KCkpCisgICAgICAgICAg
ICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmUHRy
PEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKKyAgICB0YXJnZXRzLmFwcGVuZCh0aGlzKTsKKyAgICBp
ZiAobV90cmFuc2FjdGlvbiAmJiAhbV9wcmV2ZW50UHJvcGFnYXRpb24pIHsKKyAgICAgICAgdGFy
Z2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbik7CisgICAgICAgIC8vIElmIHRoZXJlIGV2ZXIgYXJl
IGV2ZW50cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBkYXRhYmFzZSBidXQKKyAgICAgICAg
Ly8gdGhhdCBkbyBub3QgaGF2ZSBhIHRyYW5zYWN0aW9uLCB0aGVuIHRoaXMgd2lsbCBub3Qgd29y
ayBhbmQgd2UgbmVlZAorICAgICAgICAvLyB0aGlzIG9iamVjdCB0byBhY3R1YWxseSBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBkYXRhYmFzZSAodG8gZW5zdXJlCisgICAgICAgIC8vIGl0IHN0YXlz
IGFsaXZlKS4KKyAgICAgICAgdGFyZ2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbi0+ZGIoKSk7Cisg
ICAgfQorCisgICAgLy8gQ3Vyc29yIHByb3BlcnRpZXMgc2hvdWxkIG5vdCB1cGRhdGVkIHVudGls
IHRoZSBzdWNjZXNzIGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQuCisgICAgUmVmUHRyPExlZ2Fj
eUN1cnNvcj4gY3Vyc29yVG9Ob3RpZnk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnN1Y2Nlc3NFdmVudCkgeworICAgICAgICBjdXJzb3JUb05vdGlmeSA9IGdldFJlc3Vs
dEN1cnNvcigpOworICAgICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpIHsKKyAgICAgICAgICAgIGN1
cnNvclRvTm90aWZ5LT5zZXRWYWx1ZVJlYWR5KHJlcXVlc3RTdGF0ZSgpLCBtX2N1cnNvcktleS5y
ZWxlYXNlKCksIG1fY3Vyc29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1fY3Vyc29yVmFsdWUpOwor
ICAgICAgICAgICAgbV9jdXJzb3JWYWx1ZS5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkg
eworICAgICAgICBBU1NFUlQoIW1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCk7CisgICAgICAg
IG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCA9IHRydWU7CisgICAgfQorCisgICAgLy8gRklY
TUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJv
YmFibHkgbmVlZCB0byBjaGFuZ2UuCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9j
a2VkRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2
ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMiLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGNvbnN0IGJvb2wgc2V0VHJhbnNhY3Rpb25BY3RpdmUgPSBtX3RyYW5zYWN0
aW9uICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIG1fZXJyb3JDb2RlICE9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CisKKyAgICBpZiAoc2V0VHJhbnNhY3Rpb25B
Y3RpdmUpCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEFjdGl2ZSh0cnVlKTsKKworICAgIGJv
b2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVu
dC5nZXQoKSwgdGFyZ2V0cyk7CisKKyAgICBpZiAobV90cmFuc2FjdGlvbikgeworICAgICAgICBp
ZiAobV9yZWFkeVN0YXRlID09IERPTkUpCisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT51bnJl
Z2lzdGVyUmVxdWVzdCh0aGlzKTsKKworICAgICAgICAvLyBQb3NzaWJseSBhYm9ydCB0aGUgdHJh
bnNhY3Rpb24uIFRoaXMgbXVzdCBvY2N1ciBhZnRlciB1bnJlZ2lzdGVyaW5nIChzbyB0aGlzIHJl
cXVlc3QKKyAgICAgICAgLy8gZG9lc24ndCByZWNlaXZlIGEgc2Vjb25kIGVycm9yKSBhbmQgYmVm
b3JlIGRlYWN0aXZhdGluZyAod2hpY2ggbWlnaHQgdHJpZ2dlciBjb21taXQpLgorICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVu
dERlZmF1bHQgJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rp
b24tPnNldEVycm9yKG1fZXJyb3IsIG1fZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgIG1fdHJh
bnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENFUFRJT04pOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgdGhpcyB3YXMgdGhlIGxhc3QgcmVxdWVzdCBpbiB0aGUgdHJhbnNhY3Rpb24ncyBsaXN0
LCBpdCBtYXkgY29tbWl0IGhlcmUuCisgICAgICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2ZSkK
KyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEFjdGl2ZShmYWxzZSk7CisgICAgfQorCisg
ICAgaWYgKGN1cnNvclRvTm90aWZ5KQorICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1Y2Nl
c3NIYW5kbGVyQ2FsbGJhY2soKTsKKworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gRE9ORSAmJiAo
IWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmluaXNoZWQpICYmIGV2ZW50LT50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkKKyAgICAgICAgbV9oYXNQZW5kaW5nQWN0
aXZpdHkgPSBmYWxzZTsKKworICAgIHJldHVybiBkb250UHJldmVudERlZmF1bHQ7Cit9CisKK3Zv
aWQgTGVnYWN5UmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCit7Cisg
ICAgaWYgKG1fdHJhbnNhY3Rpb24gJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKKyAgICAgICAgbV90
cmFuc2FjdGlvbi0+c2V0RXJyb3IoRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Z2V0RXJyb3JOYW1lKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSksICJVbmNh
dWdodCBleGNlcHRpb24gaW4gZXZlbnQgaGFuZGxlci4iKTsKKyAgICAgICAgbV90cmFuc2FjdGlv
bi0+YWJvcnQoSUdOT1JFX0VYQ0VQVElPTik7CisgICAgfQorfQorCit2b2lkIExlZ2FjeVJlcXVl
c3Q6OnRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0Y2goKQoreworICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkp
OworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CisgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgbV90cmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAgbV9y
ZWFkeVN0YXRlID0gUEVORElORzsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9
PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKworICAgIGlmIChtX2NvbnRleHRT
dG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9kaWRG
aXJlVXBncmFkZU5lZWRlZEV2ZW50LCAiV2hlbiBxdWV1ZWluZyBldmVudCAlcywgbV9yZWFkeVN0
YXRlIHdhcyAlZCIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9yZWFk
eVN0YXRlKTsKKworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisKKyAgICBpZiAoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmdldCgp
KSkKKyAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjM3ZmQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmgKQEAgLTAsMCArMSwx
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgTGVnYWN5UmVxdWVzdF9oCisjZGVmaW5lIExlZ2FjeVJlcXVlc3RfaAorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJET01FcnJvci5oIgorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgorI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIklEQkNhbGxi
YWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFj
a2VuZC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURC
T3BlbkRCUmVxdWVzdC5oIgorI2luY2x1ZGUgIkxlZ2FjeUFueS5oIgorI2luY2x1ZGUgIlNjcmlw
dFdyYXBwYWJsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExlZ2FjeVRyYW5z
YWN0aW9uOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBMZWdhY3lSZXF1
ZXN0IDogcHVibGljIElEQk9wZW5EQlJlcXVlc3QsIHB1YmxpYyBJREJDYWxsYmFja3MgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8TGVnYWN5UmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBMZWdhY3lUcmFuc2FjdGlv
biopOworICAgIHN0YXRpYyBSZWY8TGVnYWN5UmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlRhc2tUeXBlLCBMZWdhY3lUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgfkxlZ2FjeVJl
cXVlc3QoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdChFeGNlcHRp
b25Db2RlJikgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgUGFzc1JlZlB0cjxMZWdhY3lBbnk+
IGxlZ2FjeVJlc3VsdChFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9y
dCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxET01FcnJvcj4gZXJyb3IoRXhjZXB0aW9uQ29kZSYpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSgpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bj4gdHJhbnNhY3Rpb24oKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGNvbnN0
IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOworCisgICAgdm9pZCBw
cmV2ZW50UHJvcGFnYXRpb24oKSB7IG1fcHJldmVudFByb3BhZ2F0aW9uID0gdHJ1ZTsgfQorCisg
ICAgdm9pZCBtYXJrRWFybHlEZWF0aCgpOworICAgIHZvaWQgc2V0Q3Vyc29yRGV0YWlscyhJbmRl
eGVkREI6OkN1cnNvclR5cGUsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKKyAgICB2b2lk
IHNldFBlbmRpbmdDdXJzb3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+KTsKKyAgICB2b2lkIGZp
bmlzaEN1cnNvcigpOworICAgIHZvaWQgYWJvcnQoKTsKKworICAgIC8vIElEQkNhbGxiYWNrcwor
ICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0Pikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5Pikgb3ZlcnJpZGUgZmluYWw7CisgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pIG92ZXJyaWRl
IGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0IElEQktleVBhdGgmKSBvdmVycmlkZSBmaW5h
bDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGludDY0X3QpIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
aW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGUgZmluYWw7CisgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBvdmVycmlkZTsKKworICAgIC8vIEV2ZW50VGFyZ2V0
CisgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2
ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CisgICAgdmlydHVhbCB2b2lk
IHVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKSBvdmVycmlkZSBmaW5hbDsKKworICAg
IHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OworICAgIHZpcnR1YWwgYm9vbCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNh
Y3Rpb25EaWRGaW5pc2hBbmREaXNwYXRjaCgpOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kOjpU
YXNrVHlwZSB0YXNrVHlwZSgpIHsgcmV0dXJuIG1fdGFza1R5cGU7IH0KKworICAgIERPTVJlcXVl
c3RTdGF0ZSogcmVxdWVzdFN0YXRlKCkgeyByZXR1cm4gJm1fcmVxdWVzdFN0YXRlOyB9CisKKyAg
ICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgorICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICB1c2luZyBJREJDYWxsYmFja3M6OnJlZjsKKyAgICB1c2lu
ZyBJREJDYWxsYmFja3M6OmRlcmVmOworCitwcm90ZWN0ZWQ6CisgICAgTGVnYWN5UmVxdWVzdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURC
RGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKKyAgICB2b2lk
IGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZEVucXVldWVFdmVudCgpIGNvbnN0OworICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKKyAgICB2b2lkIG9uU3VjY2Vzc0ludGVybmFs
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CisKKyAgICBSZWZQdHI8TGVnYWN5QW55
PiBtX3Jlc3VsdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBtX2Vycm9yQ29kZTsKKyAgICBTdHJpbmcg
bV9lcnJvck1lc3NhZ2U7CisgICAgUmVmUHRyPERPTUVycm9yPiBtX2Vycm9yOworICAgIGJvb2wg
bV9jb250ZXh0U3RvcHBlZDsKKyAgICBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+IG1fdHJhbnNh
Y3Rpb247CisgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgYm9vbCBtX3JlcXVlc3RB
Ym9ydGVkOyAvLyBNYXkgYmUgYWJvcnRlZCBieSB0cmFuc2FjdGlvbiB0aGVuIHJlY2VpdmUgYXN5
bmMgb25zdWNjZXNzOyBpZ25vcmUgdnMuIGFzc2VydC4KKworcHJpdmF0ZToKKyAgICAvLyBBY3Rp
dmVET01PYmplY3QgQVBJLgorICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOworICAgIGNvbnN0IGNo
YXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGNhblN1
c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEV2ZW50VGFyZ2V0
IEFQSS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBmaW5hbCB7
IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBm
aW5hbCB7IGRlcmVmKCk7IH0KKworICAgIFJlZlB0cjxMZWdhY3lDdXJzb3I+IGdldFJlc3VsdEN1
cnNvcigpOworICAgIHZvaWQgc2V0UmVzdWx0Q3Vyc29yKFBhc3NSZWZQdHI8TGVnYWN5Q3Vyc29y
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKKworICAgIFJlZlB0cjxMZWdhY3lBbnk+IG1f
c291cmNlOworICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlw
ZTsKKworICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7CisgICAgVmVjdG9yPFJlZlB0cjxF
dmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CisKKyAgICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3Vs
dCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCisgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vy
c29yVHlwZTsKKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2N1cnNvckRpcmVjdGlv
bjsKKyAgICBib29sIG1fY3Vyc29yRmluaXNoZWQ7CisgICAgUmVmUHRyPExlZ2FjeUN1cnNvcj4g
bV9wZW5kaW5nQ3Vyc29yOworICAgIFJlZlB0cjxJREJLZXk+IG1fY3Vyc29yS2V5OworICAgIFJl
ZlB0cjxJREJLZXk+IG1fY3Vyc29yUHJpbWFyeUtleTsKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBtX2N1cnNvclZhbHVlOworICAgIGJvb2wgbV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50
OworICAgIGJvb2wgbV9wcmV2ZW50UHJvcGFnYXRpb247CisKKyAgICBET01SZXF1ZXN0U3RhdGUg
bV9yZXF1ZXN0U3RhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIExlZ2FjeVJlcXVlc3RfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uN2QxOGJmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAKQEAgLTAsMCArMSwzODAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRp
b24uaCIKKyNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1
ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5Q3Vyc29yLmgi
CisjaW5jbHVkZSAiTGVnYWN5T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJMZWdhY3lPcGVuREJS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8TGVnYWN5VHJhbnNhY3Rp
b24+IExlZ2FjeVRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgaW50NjRfdCBpZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMs
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIExlZ2FjeURhdGFiYXNlKiBkYikKK3sK
KyAgICBMZWdhY3lPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0ID0gbnVsbHB0cjsKKyAgICBS
ZWY8TGVnYWN5VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVmKCpuZXcgTGVnYWN5VHJh
bnNhY3Rpb24oY29udGV4dCwgaWQsIG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIGRiLCBvcGVuREJS
ZXF1ZXN0LCBJREJEYXRhYmFzZU1ldGFkYXRhKCkpKSk7CisgICAgdHJhbnNhY3Rpb24tPnN1c3Bl
bmRJZk5lZWRlZCgpOworICAgIHJldHVybiB0cmFuc2FjdGlvbjsKK30KKworUmVmPExlZ2FjeVRy
YW5zYWN0aW9uPiBMZWdhY3lUcmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGludDY0X3QgaWQsIExlZ2FjeURhdGFiYXNlKiBkYiwgTGVnYWN5T3BlbkRC
UmVxdWVzdCogb3BlbkRCUmVxdWVzdCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgcHJldmlv
dXNNZXRhZGF0YSkKK3sKKyAgICBSZWY8TGVnYWN5VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFk
b3B0UmVmKCpuZXcgTGVnYWN5VHJhbnNhY3Rpb24oY29udGV4dCwgaWQsIFZlY3RvcjxTdHJpbmc+
KCksIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlLCBkYiwgb3BlbkRC
UmVxdWVzdCwgcHJldmlvdXNNZXRhZGF0YSkpKTsKKyAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElm
TmVlZGVkKCk7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uOworfQorCitMZWdhY3lUcmFuc2FjdGlv
bjo6TGVnYWN5VHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50
NjRfdCBpZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIExlZ2FjeURhdGFiYXNlKiBkYiwgTGVnYWN5T3BlbkRC
UmVxdWVzdCogb3BlbkRCUmVxdWVzdCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgcHJldmlv
dXNNZXRhZGF0YSkKKyAgICA6IElEQlRyYW5zYWN0aW9uKGNvbnRleHQpCisgICAgLCBtX2lkKGlk
KQorICAgICwgbV9kYXRhYmFzZShkYikKKyAgICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RT
dG9yZU5hbWVzKQorICAgICwgbV9vcGVuREJSZXF1ZXN0KG9wZW5EQlJlcXVlc3QpCisgICAgLCBt
X21vZGUobW9kZSkKKyAgICAsIG1fc3RhdGUoQWN0aXZlKQorICAgICwgbV9oYXNQZW5kaW5nQWN0
aXZpdHkodHJ1ZSkKKyAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCisgICAgLCBtX3ByZXZp
b3VzTWV0YWRhdGEocHJldmlvdXNNZXRhZGF0YSkKK3sKKyAgICBpZiAobW9kZSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgeworICAgICAgICAvLyBOb3QgYWN0
aXZlIHVudGlsIHRoZSBjYWxsYmFjay4KKyAgICAgICAgbV9zdGF0ZSA9IEluYWN0aXZlOworICAg
IH0KKworICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0
IGNhbiBiZSBhZG9wdGVkLgorICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworICAgIGlm
IChtX3N0YXRlID09IEFjdGl2ZSkKKyAgICAgICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
cjo6YWRkTmV3VHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25D
cmVhdGVkKHRoaXMpOworfQorCitMZWdhY3lUcmFuc2FjdGlvbjo6fkxlZ2FjeVRyYW5zYWN0aW9u
KCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCB8fCBtX2NvbnRleHRTdG9wcGVk
KTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0TGlzdC5pc0VtcHR5KCkgfHwgbV9jb250ZXh0U3RvcHBl
ZCk7Cit9CisKK2NvbnN0IFN0cmluZyYgTGVnYWN5VHJhbnNhY3Rpb246Om1vZGUoKSBjb25zdAor
eworICAgIHJldHVybiBtb2RlVG9TdHJpbmcobV9tb2RlKTsKK30KKworSURCRGF0YWJhc2UqIExl
Z2FjeVRyYW5zYWN0aW9uOjpkYigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0
KCk7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OnNldEVycm9yKFBhc3NSZWZQdHI8RE9N
RXJyb3I+IGVycm9yLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBBU1NFUlQo
bV9zdGF0ZSAhPSBGaW5pc2hlZCk7CisgICAgQVNTRVJUKGVycm9yKTsKKworICAgIC8vIFRoZSBm
aXJzdCBlcnJvciB0byBiZSBzZXQgaXMgdGhlIHRydWUgY2F1c2Ugb2YgdGhlCisgICAgLy8gdHJh
bnNhY3Rpb24gYWJvcnQuCisgICAgaWYgKCFtX2Vycm9yKSB7CisgICAgICAgIG1fZXJyb3IgPSBl
cnJvcjsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CisgICAgfQorfQor
CitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBMZWdhY3lUcmFuc2FjdGlvbjo6b2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBGaW5pc2hlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgSURCT2Jq
ZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOwor
ICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQt
PnZhbHVlOworCisgICAgaWYgKCFpc1ZlcnNpb25DaGFuZ2UoKSAmJiAhbV9vYmplY3RTdG9yZU5h
bWVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5vdEZvdW5kRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCA9IG1fZGF0YWJhc2UtPmZpbmRPYmplY3RTdG9yZUlkKG5hbWUpOworICAg
IGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkg
eworICAgICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJhc2Ut
Pm1ldGFkYXRhKCk7CisKKyAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gTGVnYWN5T2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9i
amVjdFN0b3JlSWQpLCB0aGlzKTsKKyAgICBvYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0
U3RvcmUpOworICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTGVn
YWN5VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IHBycE9iamVjdFN0b3JlKQoreworICAgIEFTU0VS
VChtX3N0YXRlICE9IEZpbmlzaGVkKTsKKyAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlID0gcHJwT2JqZWN0U3RvcmU7CisgICAgbV9vYmplY3RTdG9yZU1hcC5zZXQobmFt
ZSwgb2JqZWN0U3RvcmUpOworICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkKKyAgICAgICAgbV9v
YmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0YWRh
dGEoKSk7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOwor
ICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisgICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBt
X29iamVjdFN0b3JlTWFwLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxMZWdhY3lPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUgPSBpdC0+dmFsdWU7CisgICAgICAgIG1fb2JqZWN0U3RvcmVNYXAucmVt
b3ZlKG5hbWUpOworICAgICAgICBvYmplY3RTdG9yZS0+bWFya0RlbGV0ZWQoKTsKKyAgICAgICAg
bV9vYmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0
YWRhdGEoKSk7CisgICAgICAgIG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5hZGQob2JqZWN0U3RvcmUp
OworICAgIH0KK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6c2V0QWN0aXZlKGJvb2wgYWN0
aXZlKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5VHJhbnNhY3Rpb246OnNldEFjdGl2
ZSglcykgZm9yIHRyYW5zYWN0aW9uIGlkICVsbGkiLCBhY3RpdmUgPyAidHJ1ZSIgOiAiZmFsc2Ui
LCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1faWQpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fc3RhdGUgIT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9uIHRyaWVkIHRvIHNl
dEFjdGl2ZSglcykiLCBhY3RpdmUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICBpZiAobV9zdGF0
ZSA9PSBGaW5pc2hpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoYWN0aXZlICE9ICht
X3N0YXRlID09IEFjdGl2ZSkpOworICAgIG1fc3RhdGUgPSBhY3RpdmUgPyBBY3RpdmUgOiBJbmFj
dGl2ZTsKKworICAgIGlmICghYWN0aXZlICYmIG1fcmVxdWVzdExpc3QuaXNFbXB0eSgpKQorICAg
ICAgICBiYWNrZW5kREIoKS0+Y29tbWl0KG1faWQpOworfQorCit2b2lkIExlZ2FjeVRyYW5zYWN0
aW9uOjphYm9ydChFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBGaW5p
c2hpbmcgfHwgbV9zdGF0ZSA9PSBGaW5pc2hlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fc3RhdGUgPSBGaW5pc2hpbmc7CisKKyAgICB3aGlsZSAoIW1fcmVxdWVzdExpc3QuaXNF
bXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gKm1fcmVx
dWVzdExpc3QuYmVnaW4oKTsKKyAgICAgICAgbV9yZXF1ZXN0TGlzdC5yZW1vdmUocmVxdWVzdCk7
CisgICAgICAgIHJlcXVlc3QtPmFib3J0KCk7CisgICAgfQorCisgICAgUmVmUHRyPExlZ2FjeVRy
YW5zYWN0aW9uPiBzZWxmUmVmID0gdGhpczsKKyAgICBiYWNrZW5kREIoKS0+YWJvcnQobV9pZCk7
Cit9CisKK0xlZ2FjeVRyYW5zYWN0aW9uOjpPcGVuQ3Vyc29yTm90aWZpZXI6Ok9wZW5DdXJzb3JO
b3RpZmllcihQYXNzUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiwgTGVnYWN5
Q3Vyc29yKiBjdXJzb3IpCisgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSwKKyAgICAg
IG1fY3Vyc29yKGN1cnNvcikKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT5yZWdpc3Rlck9wZW5DdXJz
b3IobV9jdXJzb3IpOworfQorCitMZWdhY3lUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVy
Ojp+T3BlbkN1cnNvck5vdGlmaWVyKCkKK3sKKyAgICBpZiAobV9jdXJzb3IpCisgICAgICAgIG1f
dHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vyc29yKTsKK30KKwordm9pZCBM
ZWdhY3lUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyOjpjdXJzb3JGaW5pc2hlZCgpCit7
CisgICAgaWYgKG1fY3Vyc29yKSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJP
cGVuQ3Vyc29yKG1fY3Vyc29yKTsKKyAgICAgICAgbV9jdXJzb3IgPSBudWxscHRyOworICAgICAg
ICBtX3RyYW5zYWN0aW9uID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNh
Y3Rpb246OnJlZ2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3IqIGN1cnNvcikKK3sKKyAgICBt
X29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOworfQorCit2b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjp1
bnJlZ2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3IqIGN1cnNvcikKK3sKKyAgICBtX29wZW5D
dXJzb3JzLnJlbW92ZShjdXJzb3IpOworfQorCit2b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjpjbG9z
ZU9wZW5DdXJzb3JzKCkKK3sKKyAgICBIYXNoU2V0PExlZ2FjeUN1cnNvcio+IGN1cnNvcnM7Cisg
ICAgY3Vyc29ycy5zd2FwKG1fb3BlbkN1cnNvcnMpOworICAgIGZvciAoYXV0byYgY3Vyc29yIDog
Y3Vyc29ycykKKyAgICAgICAgY3Vyc29yLT5jbG9zZSgpOworfQorCit2b2lkIExlZ2FjeVRyYW5z
YWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoTGVnYWN5UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBB
U1NFUlQocmVxdWVzdCk7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gQWN0aXZlKTsKKyAgICBtX3Jl
cXVlc3RMaXN0LmFkZChyZXF1ZXN0KTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6dW5y
ZWdpc3RlclJlcXVlc3QoTGVnYWN5UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQocmVx
dWVzdCk7CisgICAgLy8gSWYgd2UgYWJvcnRlZCB0aGUgcmVxdWVzdCwgaXQgd2lsbCBhbHJlYWR5
IGhhdmUgYmVlbiByZW1vdmVkLgorICAgIG1fcmVxdWVzdExpc3QucmVtb3ZlKHJlcXVlc3QpOwor
fQorCit2b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjpvbkFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gcHJwRXJyb3IpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lUcmFuc2Fj
dGlvbjo6b25BYm9ydCIpOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBy
cEVycm9yOworICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKKworICAgIGlmIChtX3N0
YXRlICE9IEZpbmlzaGluZykgeworICAgICAgICBBU1NFUlQoZXJyb3IuZ2V0KCkpOworICAgICAg
ICBzZXRFcnJvcihET01FcnJvcjo6Y3JlYXRlKGVycm9yLT5uYW1lKCkpLCBlcnJvci0+bWVzc2Fn
ZSgpKTsKKworICAgICAgICAvLyBBYm9ydCB3YXMgbm90IHRyaWdnZXJlZCBieSBmcm9udC1lbmQs
IHNvIG91dHN0YW5kaW5nIHJlcXVlc3RzIG11c3QKKyAgICAgICAgLy8gYmUgYWJvcnRlZCBub3cu
CisgICAgICAgIHdoaWxlICghbV9yZXF1ZXN0TGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gKm1fcmVxdWVzdExpc3QuYmVnaW4oKTsK
KyAgICAgICAgICAgIG1fcmVxdWVzdExpc3QucmVtb3ZlKHJlcXVlc3QpOworICAgICAgICAgICAg
cmVxdWVzdC0+YWJvcnQoKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0YXRlID0gRmluaXNoaW5n
OworICAgIH0KKworICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAgICBmb3IgKGF1
dG8mIG9iamVjdFN0b3JlIDogbV9vYmplY3RTdG9yZUNsZWFudXBNYXApCisgICAgICAgICAgICBv
YmplY3RTdG9yZS5rZXktPnNldE1ldGFkYXRhKG9iamVjdFN0b3JlLnZhbHVlKTsKKyAgICAgICAg
bV9kYXRhYmFzZS0+c2V0TWV0YWRhdGEobV9wcmV2aW91c01ldGFkYXRhKTsKKyAgICAgICAgbV9k
YXRhYmFzZS0+Y2xvc2UoKTsKKyAgICB9CisgICAgbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuY2xl
YXIoKTsKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisKKyAgICAvLyBFbnF1ZXVlIGV2ZW50cyBi
ZWZvcmUgbm90aWZ5aW5nIGRhdGFiYXNlLCBhcyBkYXRhYmFzZSBtYXkgY2xvc2Ugd2hpY2ggZW5x
dWV1ZXMgbW9yZSBldmVudHMgYW5kIG9yZGVyIG1hdHRlcnMuCisgICAgZW5xdWV1ZUV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIHRydWUsIGZhbHNlKSk7CisgICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKK30KKwordm9pZCBMZWdhY3lU
cmFuc2FjdGlvbjo6b25Db21wbGV0ZSgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lU
cmFuc2FjdGlvbjo6b25Db21wbGV0ZSIpOworICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVk
KTsKKyAgICBtX3N0YXRlID0gRmluaXNoaW5nOworICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFw
LmNsZWFyKCk7CisgICAgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgLy8gRW5xdWV1ZSBldmVu
dHMgYmVmb3JlIG5vdGlmeWluZyBkYXRhYmFzZSwgYXMgZGF0YWJhc2UgbWF5IGNsb3NlIHdoaWNo
IGVucXVldWVzIG1vcmUgZXZlbnRzIGFuZCBvcmRlciBtYXR0ZXJzLgorICAgIGVucXVldWVFdmVu
dChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworfQorCitib29s
IExlZ2FjeVRyYW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugc2hvdWxkIHJldHVybiB0cnVlIGFzIGxvbmcg
YXMgYW55b25lIGhhcyBhIG9yIGNhbgorICAgIC8vICAgICAgICBnZXQgYSBoYW5kbGUgdG8gdXMg
b3IgYW55IGNoaWxkIHJlcXVlc3Qgb2JqZWN0IGFuZCBhbnkgb2YgdGhvc2UgaGF2ZQorICAgIC8v
ICAgICAgICBldmVudCBsaXN0ZW5lcnMuIFRoaXMgaXMgIGluIG9yZGVyIHRvIGhhbmRsZSB1c2Vy
IGdlbmVyYXRlZCBldmVudHMgcHJvcGVybHkuCisgICAgcmV0dXJuIG1faGFzUGVuZGluZ0FjdGl2
aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOworfQorCitib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIExPRyhTdG9yYWdl
QVBJLCAiTGVnYWN5VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKKyAgICBBU1NFUlQobV9z
dGF0ZSAhPSBGaW5pc2hlZCk7CisgICAgQVNTRVJUKG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKKyAg
ICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoZXZlbnQtPnRh
cmdldCgpID09IHRoaXMpOworICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKKworICAgIC8vIEJyZWFr
IHJlZmVyZW5jZSBjeWNsZXMuCisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2JqZWN0
U3RvcmVNYXApCisgICAgICAgIG9iamVjdFN0b3JlLnZhbHVlLT50cmFuc2FjdGlvbkZpbmlzaGVk
KCk7CisgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOworICAgIGZvciAoYXV0byYgb2JqZWN0
U3RvcmUgOiBtX2RlbGV0ZWRPYmplY3RTdG9yZXMpCisgICAgICAgIG9iamVjdFN0b3JlLT50cmFu
c2FjdGlvbkZpbmlzaGVkKCk7CisgICAgbV9kZWxldGVkT2JqZWN0U3RvcmVzLmNsZWFyKCk7CisK
KyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKKyAgICB0YXJnZXRzLmFw
cGVuZCh0aGlzKTsKKyAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKKworICAgIC8vIEZJWE1FOiBX
aGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5
IG5lZWQgdG8gY2hhbmdlLgorICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZl
bnQpOworICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
KGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICAvLyBGSVhNRTogVHJ5IHRvIGNvbnN0cnVjdCBh
IHRlc3Qgd2hlcmUgfHRoaXN8IG91dGxpdmVzIG9wZW5EQlJlcXVlc3QgYW5kIHdlCisgICAgLy8g
Z2V0IGEgY3Jhc2guCisgICAgaWYgKG1fb3BlbkRCUmVxdWVzdCkgeworICAgICAgICBBU1NFUlQo
aXNWZXJzaW9uQ2hhbmdlKCkpOworICAgICAgICBtX29wZW5EQlJlcXVlc3QtPnRyYW5zYWN0aW9u
RGlkRmluaXNoQW5kRGlzcGF0Y2goKTsKKyAgICB9CisgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkg
PSBmYWxzZTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK2Jvb2wgTGVnYWN5VHJhbnNh
Y3Rpb246OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBU
ZWNobmljYWxseSB3ZSBjYW4gc3VzcGVuZCBiZWZvcmUgdGhlIGZpcnN0IHJlcXVlc3QgaXMgc2No
ZWR1bGUKKyAgICAvLyAgICAgICAgYW5kIGFmdGVyIHRoZSBjb21wbGV0ZS9hYm9ydCBldmVudCBp
cyBlbnF1ZXVlZC4KKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsKK30KKwordm9pZCBM
ZWdhY3lUcmFuc2FjdGlvbjo6c3RvcCgpCit7CisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7
CisKKyAgICBhYm9ydChJR05PUkVfRVhDRVBUSU9OKTsKK30KKworY29uc3QgY2hhciogTGVnYWN5
VHJhbnNhY3Rpb246OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAi
TGVnYWN5VHJhbnNhY3Rpb24iOworfQorCit2b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjplbnF1ZXVl
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX3N0YXRlICE9IEZpbmlzaGVkLCAiQSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBl
bnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUgJXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMp
OworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVu
dChldmVudCk7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZCogTGVnYWN5VHJhbnNhY3Rpb246OmJh
Y2tlbmREQigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tlbmQoKTsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2Fj
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOWU5NjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5VHJhbnNhY3Rpb24uaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5
VHJhbnNhY3Rpb25faAorI2RlZmluZSBMZWdhY3lUcmFuc2FjdGlvbl9oCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1
ZGUgIkRPTUVycm9yLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZU1l
dGFkYXRhLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJbmRleGVk
REIuaCIKKyNpbmNsdWRlICJMZWdhY3lEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlcXVl
c3QuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kOworY2xhc3MgSURCRGF0YWJhc2VFcnJvcjsKK2Ns
YXNzIExlZ2FjeUN1cnNvcjsKK2NsYXNzIExlZ2FjeU9iamVjdFN0b3JlOworY2xhc3MgTGVnYWN5
T3BlbkRCUmVxdWVzdDsKK3N0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOworCitjbGFzcyBM
ZWdhY3lUcmFuc2FjdGlvbiBmaW5hbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxMZWdhY3lUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1l
cywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIExlZ2FjeURhdGFiYXNlKik7CisgICAgc3Rh
dGljIFJlZjxMZWdhY3lUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBpbnQ2NF90LCBMZWdhY3lEYXRhYmFzZSosIExlZ2FjeU9wZW5EQlJlcXVlc3QqLCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKTsKKyAgICB2aXJ0dWFsIH5MZWdh
Y3lUcmFuc2FjdGlvbigpOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIoKSBj
b25zdDsKKworICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9v
bCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQWN0aXZlOyB9CisgICAgYm9v
bCBpc0ZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsgfQorICAg
IGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZTo6UmVhZE9ubHk7IH0KKyAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lv
bkNoYW5nZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdCBvdmVy
cmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkRhdGFiYXNlKiBkYigpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01FcnJvcj4gZXJyb3IoKSBjb25zdCBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiBtX2Vycm9yOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoRXhjZXB0aW9u
Q29kZSYpIG92ZXJyaWRlIGZpbmFsOworCisgICAgY2xhc3MgT3BlbkN1cnNvck5vdGlmaWVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIE9wZW5DdXJzb3JOb3RpZmllcihQYXNzUmVmUHRyPExlZ2Fj
eVRyYW5zYWN0aW9uPiwgTGVnYWN5Q3Vyc29yKik7CisgICAgICAgIH5PcGVuQ3Vyc29yTm90aWZp
ZXIoKTsKKyAgICAgICAgdm9pZCBjdXJzb3JGaW5pc2hlZCgpOworICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICAgICAgTGVn
YWN5Q3Vyc29yKiBtX2N1cnNvcjsKKyAgICB9OworCisgICAgdm9pZCByZWdpc3RlclJlcXVlc3Qo
TGVnYWN5UmVxdWVzdCopOworICAgIHZvaWQgdW5yZWdpc3RlclJlcXVlc3QoTGVnYWN5UmVxdWVz
dCopOworICAgIHZvaWQgb2JqZWN0U3RvcmVDcmVhdGVkKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQ
dHI8TGVnYWN5T2JqZWN0U3RvcmU+KTsKKyAgICB2b2lkIG9iamVjdFN0b3JlRGVsZXRlZChjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKKyAgICB2b2lkIHNldEVycm9y
KFBhc3NSZWZQdHI8RE9NRXJyb3I+LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKKyAg
ICB2b2lkIG9uQWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7CisgICAgdm9pZCBv
bkNvbXBsZXRlKCk7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7
IHJldHVybiBJREJUcmFuc2FjdGlvbkV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQorICAgIHZp
cnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOyB9CisKKyAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsK
KyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJp
ZGUgZmluYWw7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisKK3ByaXZhdGU6CisgICAg
TGVnYWN5VHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGludDY0X3QsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIExlZ2FjeURhdGFi
YXNlKiwgTGVnYWN5T3BlbkRCUmVxdWVzdCosIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsK
KworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGNs
b3NlT3BlbkN1cnNvcnMoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKExlZ2FjeUN1
cnNvciopOworICAgIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoTGVnYWN5Q3Vyc29yKik7CisK
KyAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgorICAgIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VD
YWNoZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOworICAgIGNv
bnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8v
IEV2ZW50VGFyZ2V0IEFQSS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVy
cmlkZSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVy
cmlkZSB7IGRlcmVmKCk7IH0KKworICAgIGVudW0gU3RhdGUgeworICAgICAgICBJbmFjdGl2ZSwg
Ly8gQ3JlYXRlZCBvciBzdGFydGVkLCBidXQgbm90IGluIGFuIGV2ZW50IGNhbGxiYWNrCisgICAg
ICAgIEFjdGl2ZSwgLy8gQ3JlYXRlZCBvciBzdGFydGVkLCBpbiBjcmVhdGlvbiBzY29wZSBvciBh
biBldmVudCBjYWxsYmFjaworICAgICAgICBGaW5pc2hpbmcsIC8vIEluIHRoZSBwcm9jZXNzIG9m
IGFib3J0aW5nIG9yIGNvbXBsZXRpbmcuCisgICAgICAgIEZpbmlzaGVkLCAvLyBObyBtb3JlIGV2
ZW50cyB3aWxsIGZpcmUgYW5kIG5vIG5ldyByZXF1ZXN0cyBtYXkgYmUgZmlsZWQuCisgICAgfTsK
KworICAgIGludDY0X3QgbV9pZDsKKyAgICBSZWZQdHI8TGVnYWN5RGF0YWJhc2U+IG1fZGF0YWJh
c2U7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9vYmplY3RTdG9yZU5hbWVzOworICAgIExl
Z2FjeU9wZW5EQlJlcXVlc3QqIG1fb3BlbkRCUmVxdWVzdDsKKyAgICBjb25zdCBJbmRleGVkREI6
OlRyYW5zYWN0aW9uTW9kZSBtX21vZGU7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBib29sIG1f
aGFzUGVuZGluZ0FjdGl2aXR5OworICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKKyAgICBSZWZQ
dHI8RE9NRXJyb3I+IG1fZXJyb3I7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworCisgICAg
TGlzdEhhc2hTZXQ8UmVmUHRyPExlZ2FjeVJlcXVlc3Q+PiBtX3JlcXVlc3RMaXN0OworCisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPj4gSURCT2Jq
ZWN0U3RvcmVNYXA7CisgICAgSURCT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZU1hcDsKKwor
ICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+PiBJREJPYmplY3RT
dG9yZVNldDsKKyAgICBJREJPYmplY3RTdG9yZVNldCBtX2RlbGV0ZWRPYmplY3RTdG9yZXM7CisK
KyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiwgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YT4gSURCT2JqZWN0U3RvcmVNZXRhZGF0YU1hcDsKKyAgICBJREJPYmplY3RT
dG9yZU1ldGFkYXRhTWFwIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwOworICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEgbV9wcmV2aW91c01ldGFkYXRhOworCisgICAgSGFzaFNldDxMZWdhY3lDdXJzb3Iq
PiBtX29wZW5DdXJzb3JzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBMZWdhY3lUcmFuc2FjdGlv
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZGM1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50
LmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkxlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50
OjpMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQodW5zaWduZWQgbG9uZyBsb25nIG9sZFZlcnNpb24s
IHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkKKyAgICA6IElEQlZlcnNpb25DaGFuZ2VFdmVudChldmVudFR5cGUpCisgICAgLCBtX29s
ZFZlcnNpb24ob2xkVmVyc2lvbikKKyAgICAsIG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uKQorewor
fQorCitMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6On5MZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQo
KQoreworfQorCitFdmVudEludGVyZmFjZSBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6OmV2ZW50
SW50ZXJmYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSURCVmVyc2lvbkNoYW5nZUV2ZW50SW50
ZXJmYWNlVHlwZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lWZXJz
aW9uQ2hhbmdlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42MzViNzQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5oCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudF9oCisjZGVmaW5l
IExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgorI2luY2x1ZGUgIkluZGV4
ZWREQi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExlZ2FjeVZlcnNpb25DaGFu
Z2VFdmVudCA6IHB1YmxpYyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50PiBjcmVhdGUodW5zaWduZWQgbG9uZyBs
b25nIG9sZFZlcnNpb24gPSAwLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbiA9IDAsIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gQXRvbWljU3RyaW5nKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQob2xkVmVy
c2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRUeXBlKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+TGVn
YWN5VmVyc2lvbkNoYW5nZUV2ZW50KCk7CisKKyAgICB2aXJ0dWFsIHVpbnQ2NF90IG9sZFZlcnNp
b24oKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX29sZFZlcnNpb247IH0KKyAgICB2
aXJ0dWFsIHVpbnQ2NF90IG5ld1ZlcnNpb24oKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVy
biBtX25ld1ZlcnNpb247IH0KKworICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRl
cmZhY2UoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBMZWdhY3lWZXJz
aW9uQ2hhbmdlRXZlbnQodW5zaWduZWQgbG9uZyBsb25nIG9sZFZlcnNpb24sIHVuc2lnbmVkIGxv
bmcgbG9uZyBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CisKKyAg
ICB1aW50NjRfdCBtX29sZFZlcnNpb247CisgICAgdWludDY0X3QgbV9uZXdWZXJzaW9uOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNlbmRpZiAvLyBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMyZjc1
OGYuLjU0ZWM4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE5MDYsMTUgKzE5MDYsMTggQEAKIAkJNTEwMTkyRDIxOEI2QjlB
QjAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTkyRDAxOEI2QjlBQjAwN0ZDN0Ex
IC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudE1hYy5oICovOyB9OwogCQk1MTAxOTJENTE4QjZC
OUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE5MkQzMThCNkI5QjcwMDdGQzdB
MSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuY3BwICovOyB9OwogCQk1MTAxOTJENjE4QjZC
OUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxOTJENDE4QjZCOUI3MDA3RkM3QTEg
LyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggKi87IH07Ci0JCTUxMDE5NDQ0MTgzNkY3RTQw
MDkyNTUyMyAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxOTQ0MjE4MzZGN0U0MDA5MjU1MjMg
LyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwICovOyB9OwotCQk1MTAxOTQ0NTE4MzZG
N0U1MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE5NDQzMTgzNkY3RTQwMDkyNTUy
MyAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxMDU5REREMTgyMEIxNzYwMERGRjlCMSAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5REQ5MTgyMEIxNzYwMERGRjlCMSAvKiBJREJU
cmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLzsgfTsKLQkJNTEwNTlEREUxODIwQjE3
NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5RERBMTgyMEIxNzYwMERG
RjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTEwM0MyQjExQkEyMkQxQTAwRTI2
MzM3IC8qIExlZ2FjeUFueS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTY0NUI2RTFCQTBBNzYxMDBGNzg5Q0UgLyogTGVnYWN5QW55LmNwcCAqLzsg
fTsKKwkJNTEwM0MyQjIxQkEyMzE3NDAwRTI2MzM3IC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjUwMUI5Rjg4
OUIwMEY3ODlDRSAvKiBJREJUcmFuc2FjdGlvbi5jcHAgKi87IH07CisJCTUxMDNDMkIzMUJBMjMy
NEQwMEUyNjMzNyAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNTQxQjlGODhFODAwRjc4OUNFIC8qIElEQkN1cnNvci5j
cHAgKi87IH07CisJCTUxMDNDMkI0MUJBMjMyQUUwMEUyNjMzNyAvKiBJREJDdXJzb3JXaXRoVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
NDVCNDIxQjlGODg5QjAwRjc4OUNFIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi87IH07CisJ
CTUxMDNDMkI1MUJBMjMyRDQwMEUyNjMzNyAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUI0NDFCOUY4ODlCMDBGNzg5
Q0UgLyogSURCRGF0YWJhc2UuY3BwICovOyB9OworCQk1MTAzQzJCNjFCQTIzM0JGMDBFMjYzMzcg
LyogSURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTY0NUI0RTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCUmVxdWVzdC5jcHAgKi87IH07
CisJCTUxMDNDMkI3MUJBMjMzQzQwMEUyNjMzNyAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjRDMUI5Rjg4
OUIwMEY3ODlDRSAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCAqLzsgfTsKKwkJNTEwM0MyQjgxQkEy
MzVDNTAwRTI2MzM3IC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUI1MjFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLzsgfTsKKwkJNTEwM0MyQjkxQkEyM0EyNjAw
RTI2MzM3IC8qIExlZ2FjeUFueS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NDVCNkYxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2FjeUFueS5oICovOyB9
OwogCQk1MTA2RDdCRDE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDZEN0JCMThC
REI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwICovOyB9OwogCQk1MTA2RDdC
RTE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA2RDdCQzE4QkRCNzZGMDAwQUIxNjYg
LyogQ29udGV4dE1lbnVDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTEwQTMyNkYxODMxODQzMTAwM0M1MzI2IC8qIElEQlNlcnZlckNv
bm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMEEzMjZFMTgzMTg0MzEwMDNDNTMyNiAvKiBJREJTZXJ2ZXJDb25uZWN0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTEwQjdEQjcxODJE
OUY1RDAwOUJGOTU3IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBCN0RCNTE4MkQ5RjVEMDA5QkY5NTcg
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCAqLzsgfTsKLQkJNTEwQjdEQjgxODJEOUY1RDAw
OUJGOTU3IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQjdEQjYxODJEOUY1RDAwOUJGOTU3IC8qIElEQlRy
YW5zYWN0aW9uQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJv
ckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAgKi87
IH07CiAJCTUxMEQ0QTM0MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTJF
MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLzsgfTsKIAkJNTEw
RDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzAxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICovOyB9OwpAQCAtMTk1Miw3
ICsxOTU1LDYgQEAKIAkJNTEyREQ4RkIwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVSZXNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJE
RDhGMTBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291cmNlLmNwcCAqLzsgfTsKIAkJNTEy
REQ4RkMwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyREQ4RjIwRDkxRTZBRjAwMEY4OUVF
IC8qIEFyY2hpdmVSZXNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxMkREOEZEMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlRmFjdG9y
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyREQ4
RjMwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVGYWN0b3J5LmggKi87IH07Ci0JCTUxMkVBOUJD
MTgxRjJFRTAwMDFEMDFFMCAvKiBJREJQZW5kaW5nT3BlbkNhbGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkVBOUJCMTgxRjJFRTAwMDFEMDFFMCAv
KiBJREJQZW5kaW5nT3BlbkNhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MTJFQTlCRTE4MjAyODU3MDAxRDAxRTAgLyogSURCT3BlcmF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJFQTlC
RDE4MjAyODU3MDAxRDAxRTAgLyogSURCT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEzMjdENjAxMUEzM0EyQjAwNEY5RDY1IC8q
IFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEzMjdENUUxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oICovOyB9Owog
CQk1MTMyN0Q2MTExQTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMzI3RDVGMTFBMzNBMkIwMDRG
OUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwICovOyB9OwpAQCAtMTk4OSwxNCArMTk5MSwzNSBAQAog
CQk1MTRDNzY3RDBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjgwQ0U5MjNB
MTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRDNzY3RTBDRTkyM0ExMDA3RUYzQ0QgLyog
UmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9u
c2VCYXNlLmNwcCAqLzsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNl
UmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTU3RDQ2
NDFCQTI0QUVFMDA4NUNBMkYgLyogSURCRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUI0NjFCOUY4ODlCMDBGNzg5Q0UgLyogSURC
RmFjdG9yeS5jcHAgKi87IH07CisJCTUxNTdENDY1MUJBMjRBRjgwMDg1Q0EyRiAvKiBJREJJbmRl
eC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUI0ODFCOUY4ODlCMDBGNzg5Q0UgLyogSURCSW5kZXguY3BwICovOyB9OworCQk1MTU3RDQ2NjFC
QTI0QUZEMDA4NUNBMkYgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNEExQjlGODg5QjAwRjc4OUNFIC8qIElE
Qk9iamVjdFN0b3JlLmNwcCAqLzsgfTsKIAkJNTE2MDMwMEIwQ0M0MjUxMjAwQzhBQzI1IC8qIEZp
bGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTYwMzAwQTBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCAq
LzsgfTsKIAkJNTE2MDMwNkMwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwMzA2QjBDQzQz
NjIzMDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCAqLzsgfTsKIAkJNTE2MEY0OTgwQjBBQTc1
RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MEY0OTcwQjBBQTc1RjAwQzFEMkFGIC8qIEhpc3RvcnlJ
dGVtTWFjLm1tICovOyB9OwogCQk1MTYyQzdGNDExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVn
aXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJ
NTE2MkM3RjUxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMzExRjc3RUZCMDA2MTJF
RkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MTYzMTE3RDE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VN
ZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAgKi87
IH07Ci0JCTUxNjczMEEzMTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjczMEExMTgy
RDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLzsgfTsKLQkJNTE2NzMwQTQx
ODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjczMEEyMTgyRDhGQkIwMDNGQUY1QyAvKiBJ
REJDdXJzb3JCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNTE2NDVCNUExQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIyODFC
OUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmNwcCAqLzsgfTsKKwkJNTE2NDVCNUIxQjlG
QTZDODAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMjkxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1
cnNvci5oICovOyB9OworCQk1MTY0NUI1QzFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29y
V2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjQ1QjJBMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3Bw
ICovOyB9OworCQk1MTY0NUI1RDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUIyQjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmggKi87IH07CisJ
CTUxNjQ1QjVFMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lEYXRhYmFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIyQzFCOUY2MzkxMDBG
Nzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuY3BwICovOyB9OworCQk1MTY0NUI1RjFCOUZBNkM4MDBG
Nzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjJEMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lEYXRhYmFz
ZS5oICovOyB9OworCQk1MTY0NUI2MDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIy
RTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5jcHAgKi87IH07CisJCTUxNjQ1QjYx
MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIyRjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVn
YWN5RmFjdG9yeS5oICovOyB9OworCQk1MTY0NUI2MjFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5
SW5kZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2NDVCMzAxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmNwcCAqLzsgfTsKKwkJNTE2
NDVCNjMxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzMTFCOUY2MzkxMDBGNzg5Q0UgLyog
TGVnYWN5SW5kZXguaCAqLzsgfTsKKwkJNTE2NDVCNjQxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2Fj
eU9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjQ1QjMyMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5jcHAg
Ki87IH07CisJCTUxNjQ1QjY1MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzMx
QjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9iamVjdFN0b3JlLmggKi87IH07CisJCTUxNjQ1QjY2
MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjM0MUI5RjYzOTEwMEY3ODlD
RSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCAqLzsgfTsKKwkJNTE2NDVCNjcxQjlGQTZDODAw
Rjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjM1MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lP
cGVuREJSZXF1ZXN0LmggKi87IH07CisJCTUxNjQ1QjY4MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdh
Y3lSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjQ1QjM2MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmNwcCAqLzsgfTsK
KwkJNTE2NDVCNjkxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjM3MUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmggKi87IH07CisJCTUxNjQ1QjZBMUI5RkE2QzgwMEY3ODlD
RSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzODFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNh
Y3Rpb24uY3BwICovOyB9OworCQk1MTY0NUI2QjFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VHJh
bnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNjQ1QjM5MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5oICovOyB9Owor
CQk1MTY0NUI2QzFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNB
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovOyB9Owor
CQk1MTY0NUI2RDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzQjFC
OUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmggKi87IH07CiAJCTUx
Njk1Mzk3MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk1Mzk1MTMyOUEzQzgwMEI5
MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCAqLzsgfTsKIAkJNTE2OTUzOTgxMzI5QTNDODAw
QjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk1Mzk2MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJh
c2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZCQjc5MjBDRTkx
RTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTIwMDcsOCAr
MjAzMCw2IEBACiAJCTUxNzQxRDExMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFEMEQwQjA3
MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3NDFEMTIwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3Rv
cnlJdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNzQxRDBFMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5jcHAgKi87IH07CiAJCTUx
NzRFMjBBMTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0RTIwODEwQTFGNDRGMDBGOTVFNkYg
LyogUG9wU3RhdGVFdmVudC5oICovOyB9OwotCQk1MTc3MUM4RTE4MkRCNEI3MDA4RTc4MUUgLyog
SURCRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNzcxQzhDMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tl
bmQuY3BwICovOyB9OwotCQk1MTc3MUM4RjE4MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VC
YWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTc3MUM4RDE4MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3OUNFMjQxOTVDODE0
MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMjMxOTVDODE0MjAwMTlDMTk4IC8qIEdhbWVwYWRQ
cm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUxNzlDRTI2MTk1QzgyMUQwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMjUxOTVDODIx
RDAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgKi87IH07CiAJCTUxNzlDRTJBMTk1Qzkx
ODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzlDRTI5MTk1QzkxODYwMDE5QzE5OCAvKiBH
YW1lcGFkUHJvdmlkZXJDbGllbnQuaCAqLzsgfTsKQEAgLTIwNDQsNyArMjA2NSw2IEBACiAJCTUx
QUJCNUI5MTg2RDBFRDEwMDgzOTFBMSAvKiBJREJPYmplY3RTdG9yZU1ldGFkYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCQjVCNzE4NkQwRUQx
MDA4MzkxQTEgLyogSURCT2JqZWN0U3RvcmVNZXRhZGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQUJGNjREMTYzOTJFMjgwMDEzMkE3QSAv
KiBMb2FkZXJTdHJhdGVneS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUFCRjY0QzE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3kuY3Bw
ICovOyB9OwogCQk1MUFGNTAzNjE2RjEwMEY2MDA5NUIyRTggLyogUmVzb3VyY2VMb2FkZXJUeXBl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBRjUw
MzUxNkYxMDBGNjAwOTVCMkU4IC8qIFJlc291cmNlTG9hZGVyVHlwZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUIwN0E0NDE4MjMyNDhCMDBB
QThEMUEgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjA3QTQzMTgyMzI0OEIwMEFBOEQxQSAvKiBJREJQZW5k
aW5nRGVsZXRlQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMjQx
N0EwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gKi87IH07CiAJCTUx
QjQ1NEVBMUI0REFFN0QwMDg1RUFBNiAvKiBQaW5nSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUI0NTRFOTFCNERBRTdEMDA4NUVBQTYgLyog
UGluZ0hhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUxQjQ1RDIwMUFCOEQxRTIwMDExN0NEMiAvKiBDb250ZW50RXh0ZW5zaW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjQ1RDFFMUFC
OEQxRTIwMDExN0NEMiAvKiBDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsgfTsKQEAgLTIwNjIsNDQg
KzIwODIsMTcgQEAKIAkJNTFENzE5QjcxODExMDZFMDAwMTZEQzUxIC8qIERPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFENzE5NkQxODExMDZERjAwMTZEQzUxIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5o
ICovOyB9OwogCQk1MUQ3MTlCOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQW55LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTZGMTgxMTA2REYw
MDE2REM1MSAvKiBJREJBbnkuY3BwICovOyB9OwogCQk1MUQ3MTlCQTE4MTEwNkUwMDAxNkRDNTEg
LyogSURCQW55LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUQ3MTk3MDE4MTEwNkRGMDAxNkRDNTEgLyogSURCQW55LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFENzE5QkUxODExMDZFMDAwMTZEQzUx
IC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFENzE5NzQxODExMDZERjAwMTZEQzUxIC8qIElEQkNhbGxiYWNrcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxRDcxOUJGMTgx
MTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5NzUxODExMDZERjAwMTZEQzUxIC8qIElEQkN1cnNv
ci5jcHAgKi87IH07Ci0JCTUxRDcxOUMwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTc2MTgx
MTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3IuaCAqLzsgfTsKLQkJNTFENzE5QzMxODExMDZFMDAw
MTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3OTE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vy
c29yV2l0aFZhbHVlLmNwcCAqLzsgfTsKLQkJNTFENzE5QzQxODExMDZFMDAwMTZEQzUxIC8qIElE
QkN1cnNvcldpdGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFENzE5N0ExODExMDZERjAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5o
ICovOyB9OwotCQk1MUQ3MTlDNjE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5N0MxODEx
MDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmNwcCAqLzsgfTsKLQkJNTFENzE5QzcxODExMDZF
MDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3RDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2Uu
aCAqLzsgfTsKLQkJNTFENzE5Q0ExODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3
MTk4MDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUQ3MTlDQjE4MTEwNkUw
MDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTgxMTgxMTA2REYwMDE2REM1MSAv
KiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovOyB9OwotCQk1MUQ3MTlDQzE4MTEwNkUw
MDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4MjE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggKi87IH07CiAJCTUxRDcxOUNEMTgxMTA2RTAwMDE2
REM1MSAvKiBJREJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4MzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VF
cnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxRDcxOUNFMTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4NDE4MTEw
NkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwICovOyB9OwogCQk1MUQ3MTlD
RjE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTg1MTgxMTA2REYwMDE2REM1
MSAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxRDcxOUQwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJFdmVu
dERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFENzE5ODYxODExMDZERjAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAg
Ki87IH07CiAJCTUxRDcxOUQxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJFdmVudERpc3BhdGNoZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTg3
MTgxMTA2REYwMDE2REM1MSAvKiBJREJFdmVudERpc3BhdGNoZXIuaCAqLzsgfTsKLQkJNTFENzE5
RDIxODExMDZFMDAwMTZEQzUxIC8qIElEQkZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5ODgxODExMDZERjAwMTZEQzUxIC8qIElE
QkZhY3RvcnkuY3BwICovOyB9OwotCQk1MUQ3MTlEMzE4MTEwNkUwMDAxNkRDNTEgLyogSURCRmFj
dG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFE
NzE5ODkxODExMDZERjAwMTZEQzUxIC8qIElEQkZhY3RvcnkuaCAqLzsgfTsKLQkJNTFENzE5RDYx
ODExMDZFMDAwMTZEQzUxIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4QzE4MTEwNkUwMDAx
NkRDNTEgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUQ3MTlEODE4MTEwNkUwMDAxNkRDNTEg
LyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFENzE5OEUxODExMDZFMDAwMTZEQzUxIC8qIElEQkluZGV4LmNwcCAqLzsgfTsKLQkJ
NTFENzE5RDkxODExMDZFMDAwMTZEQzUxIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4RjE4MTEwNkUwMDAxNkRDNTEgLyog
SURCSW5kZXguaCAqLzsgfTsKIAkJNTFENzE5REIxODExMDZFMDAwMTZEQzUxIC8qIElEQktleS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk5
MTE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmNwcCAqLzsgfTsKIAkJNTFENzE5REMxODExMDZF
MDAwMTZEQzUxIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFENzE5OTIxODExMDZFMDAwMTZEQzUxIC8qIElEQktleS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRDcxOUREMTgxMTA2
RTAwMDE2REM1MSAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTkzMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlQYXRo
LmNwcCAqLzsgfTsKIAkJNTFENzE5REUxODExMDZFMDAwMTZEQzUxIC8qIElEQktleVBhdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTk0MTgx
MTA2RTAwMDE2REM1MSAvKiBJREJLZXlQYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFENzE5REYxODExMDZFMDAwMTZEQzUxIC8qIElEQktl
eVJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRDcxOTk1MTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5nZS5jcHAgKi87IH07CiAJCTUx
RDcxOUUwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTYxODExMDZFMDAwMTZEQzUxIC8q
IElEQktleVJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNTFENzE5RTMxODExMDZFMDAwMTZEQzUxIC8qIElEQk9iamVjdFN0b3JlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTk5MTgx
MTA2RTAwMDE2REM1MSAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi87IH07Ci0JCTUxRDcxOUU0MTgx
MTA2RTAwMDE2REM1MSAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OUExODExMDZFMDAwMTZEQzUxIC8qIElEQk9i
amVjdFN0b3JlLmggKi87IH07Ci0JCTUxRDcxOUU2MTgxMTA2RTAwMDE2REM1MSAvKiBJREJPcGVu
REJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRDcxOTlDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCAqLzsg
fTsKLQkJNTFENzE5RTcxODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTlEMTgxMTA2
RTAwMDE2REM1MSAvKiBJREJPcGVuREJSZXF1ZXN0LmggKi87IH07Ci0JCTUxRDcxOUU5MTgxMTA2
RTAwMDE2REM1MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTlGMTgxMTA2RTAwMDE2
REM1MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLzsgfTsKLQkJNTFENzE5
RUExODExMDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOUEwMTgxMTA2
RTAwMDE2REM1MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi87IH07Ci0JCTUx
RDcxOUVCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOUExMTgxMTA2RTAwMDE2REM1MSAv
KiBJREJSZXF1ZXN0LmNwcCAqLzsgfTsKLQkJNTFENzE5RUMxODExMDZFMDAwMTZEQzUxIC8qIElE
QlJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRDcxOUEyMTgxMTA2RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmggKi87IH07Ci0JCTUxRDcx
OUVFMTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTlBNDE4MTEwNkUwMDAxNkRDNTEg
LyogSURCVHJhbnNhY3Rpb24uY3BwICovOyB9OwotCQk1MUQ3MTlFRjE4MTEwNkUwMDAxNkRDNTEg
LyogSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRDcxOUE1MTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlvbi5oICov
OyB9OwotCQk1MUQ3MTlGNTE4MTEwNkUwMDAxNkRDNTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcx
OUFCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovOyB9Owot
CQk1MUQ3MTlGNjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTlBQzE4MTEw
NkUwMDAxNkRDNTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi87IH07CiAJCTUxRDcxOUY4
MTgxMTA2RTAwMDE2REM1MSAvKiBJbmRleGVkREIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOUFFMTgxMTA2RTAwMDE2REM1MSAvKiBJbmRleGVk
REIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MUQ3MTlGQjE4MTEwNkUwMDAxNkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFE
NzE5QjExODExMDZFMDAwMTZEQzUxIC8qIFdvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFiYXNl
LmNwcCAqLzsgfTsKIAkJNTFENzE5RkMxODExMDZFMDAwMTZEQzUxIC8qIFdvcmtlckdsb2JhbFNj
b3BlSW5kZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUQ3MTlCMjE4MTEwNkUwMDAxNkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJ
bmRleGVkRGF0YWJhc2UuaCAqLzsgfTsKQEAgLTIxMjMsMTIgKzIxMTYsMzEgQEAKIAkJNTFFM0Y5
RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUzRjlENDBEQTA1RTFEMDAyNTA5MTEgLyogSlNT
dG9yYWdlLmNwcCAqLzsgfTsKIAkJNTFFNDE0MzQxNkE2NTk2MzAwQzYzM0M3IC8qIFJlc291cmNl
SGFuZGxlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTQxNDMyMTZBNjU5NTEwMEM2MzNDNyAvKiBSZXNvdXJjZUhhbmRsZVR5cGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFFNjgyMTAx
NjM4NzMwMjAwM0JCRjNDIC8qIExvYWRlclN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUU2ODIwRjE2Mzg3MzAyMDAzQkJGM0MgLyogTG9h
ZGVyU3RyYXRlZ3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk1MUVBQzU2NzE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUVBQzU2NTE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAg
Ki87IH07Ci0JCTUxRUFDNTY4MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUVBQzU2NjE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRUFDNUIy
MTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQg
LyogSURCUmVjb3JkSWRlbnRpZmllci5oICovOyB9OwogCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAz
MDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjVEMENFOTBERDQwMEY5MDMw
OCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovOyB9OwogCQk1MUVF
N0IzODFBQTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFRTdCMzcxQUE1MEIwNTAwRjkyQjIx
IC8qIFJlc291cmNlTG9hZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MUVFN0IzQTFBQTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2Fk
SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUVFN0IzOTFBQTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgKi87IH07CisJ
CTUxRjQxQTY4MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTQ4MUJBNzNCMkMwMDJFMDUz
QiAvKiBJREJDYWxsYmFja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MUY0MUE2OTFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2Vu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0
MUE0OTFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5jcHAgKi87IH07CisJCTUx
RjQxQTZBMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE0QTFCQTczQjJDMDAyRTA1
M0IgLyogSURCQ3Vyc29yQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTUxRjQxQTZCMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JC
YWNrZW5kT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUY0MUE0QjFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZE9w
ZXJhdGlvbnMuY3BwICovOyB9OworCQk1MUY0MUE2QzFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vy
c29yQmFja2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRjQxQTRDMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5k
T3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTUxRjQxQTZEMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUJhY2tlbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNEQx
QkE3M0IyQzAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAgKi87IH07CisJCTUxRjQx
QTZFMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTRFMUJBNzNCMkMwMDJFMDUz
QiAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MUY0MUE2RjFCQTczQjVCMDAyRTA1M0IgLyogSURCRGF0YWJh
c2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjQ1QjQwMUI5RjY5NUUwMEY3ODlDRSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRjQxQTcw
MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCM0UxQjlGNjkyMzAw
Rjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi87IH07CisJCTUxRjQxQTcx
MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNGMUI5RjY5MjMwMEY3
ODlDRSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLzsgfTsKKwkJNTFGNDFBNzIxQkE3
M0I1QjAwMkUwNTNCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE0RjFCQTczQjJDMDAyRTA1
M0IgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUY0MUE3MzFCQTczQjVCMDAyRTA1M0IgLyog
SURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRjQxQTUyMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmQuY3BwICovOyB9OworCQk1MUY0MUE3NDFCQTczQjVCMDAyRTA1M0IgLyogSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUY0MUE1MzFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTFG
NDFBNzUxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFB
NTQxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3Bw
ICovOyB9OworCQk1MUY0MUE3NjFCQTczQjVCMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFGNDFBNTUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9w
ZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1MUY0MUE3NzFCQTczQjVCMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0
MUE1NjFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87
IH07CisJCTUxRjQxQTc4MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0
MUE1NzFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9
OworCQk1MUY0MUE3OTFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTUwMUJB
NzNCMkMwMDJFMDUzQiAvKiBJREJQZW5kaW5nRGVsZXRlQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRjQxQTdBMUJBNzNCNUIwMDJFMDUz
QiAvKiBJREJQZW5kaW5nT3BlbkNhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRjQxQTUxMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJQZW5kaW5nT3Bl
bkNhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk1MUY0MUE3QjFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUIzQzFCOUY2OENGMDBGNzg5Q0UgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAg
Ki87IH07CisJCTUxRjQxQTdDMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTY0NUIzRDFCOUY2OENGMDBGNzg5Q0UgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
ci5oICovOyB9OwogCQk1MUZBMkQ3ODE1MjEzMkIzMDBDMUJBMEIgLyogRE9NV2luZG93RXh0ZW5z
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdG
QkExODE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5zaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFGQjU1MDQxMTNFM0U5MTAw
ODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGQjU1MDIxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5o
ICovOyB9OwogCQk1MUZCNTUwNTExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI1NTAzMTEz
RTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovOyB9OwpAQCAtOTE3MSwxNSArOTE4
Myw5IEBACiAJCTUxMDE5MkQzMThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VDb250
cm9sc1Jvb3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTky
RDQxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTkyRDgxOEI3RDdBQjAwN0ZDN0ExIC8qIGlt
YWdlQ29udHJvbHNNYWMuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBpbWFnZUNvbnRy
b2xzTWFjLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMTk0NDIxODM2RjdF
NDAwOTI1NTIzIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMTk0NDMxODM2RjdFNDAwOTI1NTIzIC8q
IElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUxMDU5REQ5MTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElE
QlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MTA1OUREQTE4MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
T3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MDZEN0JCMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGV4dE1lbnVDb250ZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNkQ3QkMxOEJEQjc2RjAwMEFCMTY2IC8qIENv
bnRleHRNZW51Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250
ZXh0TWVudUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwQTMyNkUx
ODMxODQzMTAwM0M1MzI2IC8qIElEQlNlcnZlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSURCU2VydmVyQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTBCN0RCNTE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMEI3REI2
MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJEMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJl
YW1FcnJvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29j
a2V0U3RyZWFtRXJyb3JCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEw
RDRBMkUxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05MjE4LDcgKzkyMjQsNiBAQAogCQk1MTJERDhGMTBEOTFFNkFGMDAwRjg5RUUgLyogQXJj
aGl2ZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFy
Y2hpdmVSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkREOEYy
MEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXJjaGl2ZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMkREOEYzMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlRmFjdG9yeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmNoaXZlRmFjdG9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MTJFQTlCQjE4MUYyRUUwMDAxRDAxRTAgLyogSURCUGVuZGlu
Z09wZW5DYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlBlbmRpbmdP
cGVuQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTJFQTlCRDE4MjAyODU3
MDAxRDAxRTAgLyogSURCT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQk9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTMyN0Q1
RTExQTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNpbmtEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTMyN0Q1RjExQTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbmtEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC05MjYyLDggKzkyNjcsNTMgQEAKIAkJNTE2MkM3RjIxMUY3N0VG
QTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNjaGVtZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjaGVtZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxNjMxMTdDMTg1MTI0MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFz
ZU1ldGFkYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkRh
dGFiYXNlTWV0YWRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTY3MzBB
MTE4MkQ4RkJCMDAzRkFGNUMgLyogSURCQ3Vyc29yQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTE2NzMwQTIxODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29yQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIyODFCOUY2MzkxMDBGNzg5
Q0UgLyogTGVnYWN5Q3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExlZ2FjeUN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1
QjI5MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGVnYWN5Q3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxNjQ1QjJBMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5Q3Vyc29yV2l0aFZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMkIxQjlGNjM5MTAw
Rjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTE2NDVCMkMxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeURhdGFiYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMkQxQjlGNjM5MTAwRjc4OUNFIC8q
IExlZ2FjeURhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eURhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjJFMUI5RjYz
OTEwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExlZ2FjeUZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MTY0NUIyRjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxNjQ1QjMwMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lJbmRleC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lJbmRleC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjMxMUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lJbmRleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lJ
bmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzMjFCOUY2MzkxMDBG
Nzg5Q0UgLyogTGVnYWN5T2JqZWN0U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGVnYWN5T2JqZWN0U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUIzMzFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T2JqZWN0U3RvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5T2JqZWN0U3RvcmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzQxQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeU9wZW5EQlJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxNjQ1QjM1MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeU9wZW5EQlJlcXVlc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzYxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2Fj
eVJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5
UmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjM3MUI5RjYz
OTEwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExlZ2FjeVJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2
NDVCMzgxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeVRyYW5zYWN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzkxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2Fj
eVRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVRy
YW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjNBMUI5RjYz
OTEwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCM0IxQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeVZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE2NDVCM0MxQjlGNjhDRjAwRjc4OUNFIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1
QjNEMUI5RjY4Q0YwMEY3ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCM0UxQjlGNjkyMzAwRjc4
OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzRjFCOUY2OTIzMDBGNzg5Q0UgLyogSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0
NUI0MDFCOUY2OTVFMDBGNzg5Q0UgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNDExQjlGODg5QjAwRjc4OUNFIC8qIElEQkN1cnNv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNDIxQjlGODg5QjAwRjc4OUNFIC8qIElEQkN1
cnNvcldpdGhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
REJDdXJzb3JXaXRoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0
NUI0MzFCOUY4ODlCMDBGNzg5Q0UgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvcldpdGhWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTY0NUI0NDFCOUY4ODlCMDBGNzg5Q0UgLyogSURCRGF0YWJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0NTFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0
YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNDYxQjlGODg5QjAw
Rjc4OUNFIC8qIElEQkZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCRmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1
QjQ3MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQkZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTE2NDVCNDgxQjlGODg5QjAwRjc4OUNFIC8qIElEQkluZGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkluZGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTE2NDVCNDkxQjlGODg5QjAwRjc4OUNFIC8qIElEQkluZGV4LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxNjQ1QjRBMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJPYmplY3RTdG9yZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPYmplY3RTdG9yZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjRCMUI5Rjg4OUIwMEY3ODlDRSAv
KiBJREJPYmplY3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJP
YmplY3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0QzFCOUY4
ODlCMDBGNzg5Q0UgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE2NDVCNEQxQjlGODg5QjAwRjc4OUNFIC8qIElEQk9wZW5EQlJlcXVlc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT3BlbkRCUmVxdWVzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0RTFCOUY4ODlCMDBGNzg5Q0UgLyog
SURCUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJS
ZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNEYxQjlGODg5
QjAwRjc4OUNFIC8qIElEQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI1MDFC
OUY4ODlCMDBGNzg5Q0UgLyogSURCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MTY0NUI1MTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVHJhbnNhY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNTIxQjlGODg5QjAwRjc4OUNFIC8qIElEQlZl
cnNpb25DaGFuZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MTY0NUI1MzFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI1NDFCOUY4OEU4MDBGNzg5Q0UgLyog
SURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1
cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjZFMUJBMEE3NjEw
MEY3ODlDRSAvKiBMZWdhY3lBbnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTGVnYWN5QW55LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVC
NkYxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2FjeUFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMZWdhY3lBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2
OTUzOTUxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWNvbkRhdGFiYXNlQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjk1Mzk2MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0
YWJhc2VCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb25EYXRhYmFz
ZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QkI3OTIwQ0U5MUU2ODAw
NTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1RyZWVXYWxrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTI3Nyw4ICs5MzI3LDYgQEAKIAkJNTE3NDFEMEUwQjA3MjU5QTAwRUQ0NDJD
IC8qIEhpc3RvcnlJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIaXN0b3J5SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzRFMjA4
MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBvcFN0YXRlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE3NEUyMEIxMEExRjQ5QTAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFBvcFN0YXRlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MTc3MUM4QzE4MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2Vu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNzcxQzhEMTgyREI0QjcwMDhF
NzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSURCRGF0YWJhc2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNzlDRTIzMTk1QzgxNDIwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxNzlDRTI1MTk1QzgyMUQwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FtZXBhZFByb3Zp
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3OUNFMjkxOTVDOTE4NjAw
MTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTkzMjMsNyArOTM3MSw2IEBACiAJCTUxQUJCNUI3MTg2RDBFRDEwMDgzOTFBMSAv
KiBJREJPYmplY3RTdG9yZU1ldGFkYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQk9iamVjdFN0b3JlTWV0YWRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFBQkY2NEMxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRlclN0cmF0ZWd5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBRjUwMzUxNkYxMDBGNjAwOTVCMkU4IC8qIFJlc291
cmNlTG9hZGVyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3Vy
Y2VMb2FkZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUIwN0E0MzE4
MjMyNDhCMDBBQThEMUEgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSURCUGVuZGluZ0RlbGV0ZUNhbGwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTFCMjQxN0EwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hp
dmVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMZWdhY3lX
ZWJBcmNoaXZlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUI0NTRFOTFC
NERBRTdEMDA4NUVBQTYgLyogUGluZ0hhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQaW5nSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjQ1
RDFFMUFCOEQxRTIwMDExN0NEMiAvKiBDb250ZW50RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTM0MiwzMCArOTM4OSwxNSBAQAogCQk1MUQ3MTk2RjE4MTEw
NkRGMDAxNkRDNTEgLyogSURCQW55LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQkFueS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTcw
MTgxMTA2REYwMDE2REM1MSAvKiBJREJBbnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSURCQW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTcxMTgx
MTA2REYwMDE2REM1MSAvKiBJREJBbnkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkFu
eS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTc0MTgxMTA2REYwMDE2
REM1MSAvKiBJREJDYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SURCQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTc1MTgx
MTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTFENzE5NzYxODExMDZERjAwMTZEQzUxIC8qIElEQkN1cnNvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFENzE5NzcxODExMDZERjAwMTZEQzUxIC8qIElEQkN1cnNvci5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gSURCQ3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTFENzE5NzkxODExMDZERjAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JXaXRoVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk3QTE4MTEwNkRGMDAxNkRDNTEgLyog
SURCQ3Vyc29yV2l0aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElE
QkN1cnNvcldpdGhWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk3
QjE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBJREJDdXJzb3JXaXRoVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MUQ3MTk3QzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk3RDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0
YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5N0UxODExMDZERjAwMTZEQzUxIC8q
IElEQkRhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJEYXRhYmFzZS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTgwMTgxMTA2REYwMDE2REM1MSAv
KiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJREJEYXRhYmFzZUNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MUQ3MTk4MTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTgyMTgxMTA2REYw
MDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUVy
cm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlRXJyb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5ODQxODExMDZERjAwMTZEQzUx
IC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFENzE5ODUxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTg2MTgxMTA2REYwMDE2REM1
MSAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTFENzE5ODcxODExMDZERjAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJFdmVudERpc3BhdGNoZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5ODgxODExMDZERjAwMTZEQzUxIC8qIElE
QkZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRmFj
dG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTg5MTgxMTA2REYw
MDE2REM1MSAvKiBJREJGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5OEExODEx
MDZERjAwMTZEQzUxIC8qIElEQkZhY3RvcnkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElE
QkZhY3RvcnkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk4QzE4MTEw
NkUwMDAxNkRDNTEgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5OEUxODExMDZFMDAwMTZEQzUxIC8qIElEQklu
ZGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkluZGV4LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5OEYxODExMDZFMDAwMTZEQzUx
IC8qIElEQkluZGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkluZGV4
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTkwMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJJbmRleC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCSW5kZXguaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk5MTE4MTEwNkUwMDAxNkRDNTEgLyog
SURCS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQktleS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTkyMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzc0LDIyICs5NDA2LDEwIEBACiAJCTUx
RDcxOTk1MTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJLZXlSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDcxOTk2MTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5nZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJLZXlSYW5nZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk5NzE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFu
Z2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQktleVJhbmdlLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5OTkxODExMDZFMDAwMTZEQzUxIC8qIElEQk9iamVj
dFN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9iamVj
dFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5OUExODExMDZF
MDAwMTZEQzUxIC8qIElEQk9iamVjdFN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQk9iamVjdFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
RDcxOTlCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJPYmplY3RTdG9yZS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gSURCT2JqZWN0U3RvcmUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MUQ3MTk5QzE4MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5OUQxODExMDZFMDAwMTZEQzUxIC8q
IElEQk9wZW5EQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURC
T3BlbkRCUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk5RTE4
MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gSURCT3BlbkRCUmVxdWVzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUxRDcxOTlGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTlB
MDE4MTEwNkUwMDAxNkRDNTEgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOUExMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElEQlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTlBMjE4
MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcx
OUEzMTgxMTA2RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBJREJSZXF1ZXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5
QTQxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTFENzE5QTUxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOUE2MTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCVHJhbnNhY3Rpb24u
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTlBQjE4MTEwNkUwMDAxNkRD
NTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxRDcxOUFDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVmVyc2lvbkNoYW5n
ZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOUFEMTgxMTA2RTAw
MDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxRDcxOUFFMTgxMTA2RTAwMDE2REM1MSAvKiBJbmRleGVkREIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhlZERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxRDcxOUIxMTgxMTA2RTAwMDE2REM1MSAvKiBXb3JrZXJHbG9iYWxTY29wZUluZGV4
ZWREYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3Jr
ZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NDE5LDEyICs5NDM5LDI2IEBACiAJCTUxRTNGOUQ1MERBMDVFMUQwMDI1MDkxMSAv
KiBKU1N0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdG9yYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTQxNDMyMTZBNjU5NTEwMEM2MzND
NyAvKiBSZXNvdXJjZUhhbmRsZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc291cmNlSGFuZGxlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFFNjgyMEYxNjM4NzMwMjAwM0JCRjNDIC8qIExvYWRlclN0cmF0ZWd5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvYWRlclN0cmF0ZWd5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxRUFDNTY1MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MUVBQzU2NjE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRUFDNUIwMTgxNjNGNEUwMDRGMUJB
NCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQlJlY29yZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFFQzkyNUQwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUVFN0IzNzFBQTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxRUU3QjM5MUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxv
YWRJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNl
TG9hZEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE0ODFCQTcz
QjJDMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQkNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0
MUE0OTFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNEExQkE3M0IyQzAwMkUwNTNCIC8qIElEQkN1cnNv
ckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29yQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE0QjFCQTczQjJDMDAy
RTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE0QzFCQTczQjJDMDAyRTA1M0IgLyogSURC
Q3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTFGNDFBNEQxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZUJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE0RTFCQTczQjJDMDAyRTA1
M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQkRhdGFiYXNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MUY0MUE0RjFCQTczQjJDMDAyRTA1M0IgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNTAxQkE3M0IyQzAwMkUw
NTNCIC8qIElEQlBlbmRpbmdEZWxldGVDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQlBlbmRpbmdEZWxldGVDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxRjQxQTUxMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJQZW5kaW5nT3BlbkNhbGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUGVuZGluZ09wZW5DYWxsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTUyMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJU
cmFuc2FjdGlvbkJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTFGNDFBNTMxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNTQxQkE3M0IyQzAwMkUwNTNCIC8q
IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTU1MUJBNzNCMkMwMDJFMDUzQiAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNTYxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxRjQxQTU3MUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGNkEzRDUwNjYzQkYwNDAw
NEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTUx
RjZBM0Q2MDY2M0JGMDQwMDREMjkxOSAvKiBIVE1MQ2FudmFzRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQ2FudmFzRWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJNTFGQjU1MDIxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nsb3NlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE2NTUyLDYgKzE2NTg2LDU2IEBACiAJCQlwYXRoID0gbWFjOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTE2NDVCMjcxQjlGNjM3RTAwRjc4OUNF
IC8qIGxlZ2FjeSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNTFGNDFBNDgxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkNhbGxiYWNrcy5oICovLAorCQkJCTUx
RjQxQTQ5MUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLywKKwkJCQk1
MUY0MUE0QTFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5oICovLAorCQkJCTUx
RjQxQTRCMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAg
Ki8sCisJCQkJNTFGNDFBNEMxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVy
YXRpb25zLmggKi8sCisJCQkJNTFGNDFBNEQxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkRhdGFiYXNl
QmFja2VuZC5jcHAgKi8sCisJCQkJNTFGNDFBNEUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkRhdGFi
YXNlQmFja2VuZC5oICovLAorCQkJCTUxNjQ1QjQwMUI5RjY5NUUwMEY3ODlDRSAvKiBJREJEYXRh
YmFzZUNhbGxiYWNrcy5oICovLAorCQkJCTUxNjQ1QjNFMUI5RjY5MjMwMEY3ODlDRSAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovLAorCQkJCTUxNjQ1QjNGMUI5RjY5MjMwMEY3ODlD
RSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLywKKwkJCQk1MUY0MUE0RjFCQTczQjJD
MDAyRTA1M0IgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLywKKwkJCQk1MUY0MUE1
MjFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCAqLywKKwkJCQk1
MUY0MUE1MzFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmggKi8sCisJ
CQkJNTFGNDFBNTQxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuY3BwICovLAorCQkJCTUxRjQxQTU1MUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi8sCisJCQkJNTFGNDFBNTYxQkE3M0IyQzAwMkUwNTNC
IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovLAorCQkJCTUxRjQxQTU3MUJBNzNC
MkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8sCisJCQkJNTFGNDFB
NTAxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdEZWxldGVDYWxsLmggKi8sCisJCQkJNTFG
NDFBNTExQkE3M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oICovLAorCQkJCTUx
NjQ1QjNDMUI5RjY4Q0YwMEY3ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNw
cCAqLywKKwkJCQk1MTY0NUIzRDFCOUY2OENGMDBGNzg5Q0UgLyogSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5oICovLAorCQkJCTUxNjQ1QjZFMUJBMEE3NjEwMEY3ODlDRSAvKiBMZWdhY3lB
bnkuY3BwICovLAorCQkJCTUxNjQ1QjZGMUJBMEE3NjEwMEY3ODlDRSAvKiBMZWdhY3lBbnkuaCAq
LywKKwkJCQk1MTY0NUIyODFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmNwcCAqLywK
KwkJCQk1MTY0NUIyOTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmggKi8sCisJCQkJ
NTE2NDVCMkExQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgKi8s
CisJCQkJNTE2NDVCMkIxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5o
ICovLAorCQkJCTUxNjQ1QjJDMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lEYXRhYmFzZS5jcHAg
Ki8sCisJCQkJNTE2NDVCMkQxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmggKi8s
CisJCQkJNTE2NDVCMkUxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUZhY3RvcnkuY3BwICovLAor
CQkJCTUxNjQ1QjJGMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmggKi8sCisJCQkJ
NTE2NDVCMzAxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmNwcCAqLywKKwkJCQk1MTY0
NUIzMTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguaCAqLywKKwkJCQk1MTY0NUIzMjFC
OUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T2JqZWN0U3RvcmUuY3BwICovLAorCQkJCTUxNjQ1QjMz
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5oICovLAorCQkJCTUxNjQ1QjM0
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCAqLywKKwkJCQk1MTY0
NUIzNTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVxdWVzdC5oICovLAorCQkJCTUx
NjQ1QjM2MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmNwcCAqLywKKwkJCQk1MTY0
NUIzNzFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5oICovLAorCQkJCTUxNjQ1QjM4
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5jcHAgKi8sCisJCQkJNTE2NDVC
MzkxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmggKi8sCisJCQkJNTE2NDVC
M0ExQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8sCisJ
CQkJNTE2NDVCM0IxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5o
ICovLAorCQkJKTsKKwkJCXBhdGggPSBsZWdhY3k7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQk1MTc0MUQwODBCMDcyNTcwMDBFRDQ0MkMgLyogaGlzdG9yeSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xODY1MSwzMSArMTg3MzUsMjIg
QEAKIAkJOTcxMkE1NTMxNTAwNEUzQzAwNDhBRjEwIC8qIGluZGV4ZWRkYiAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTE2NDVCMjcxQjlGNjM3RTAwRjc4
OUNFIC8qIGxlZ2FjeSAqLywKIAkJCQk1MUQ3MTk2QzE4MTEwNkRGMDAxNkRDNTEgLyogRE9NV2lu
ZG93SW5kZXhlZERhdGFiYXNlLmNwcCAqLywKIAkJCQk1MUQ3MTk2RDE4MTEwNkRGMDAxNkRDNTEg
LyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggKi8sCiAJCQkJNTFENzE5NkUxODExMDZERjAw
MTZEQzUxIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGwgKi8sCiAJCQkJNTFENzE5NkYx
ODExMDZERjAwMTZEQzUxIC8qIElEQkFueS5jcHAgKi8sCiAJCQkJNTFENzE5NzAxODExMDZERjAw
MTZEQzUxIC8qIElEQkFueS5oICovLAogCQkJCTUxRDcxOTcxMTgxMTA2REYwMDE2REM1MSAvKiBJ
REJBbnkuaWRsICovLAotCQkJCTUxRDcxOTc0MTgxMTA2REYwMDE2REM1MSAvKiBJREJDYWxsYmFj
a3MuaCAqLywKLQkJCQk1MUQ3MTk3NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yLmNwcCAq
LywKLQkJCQk1MUQ3MTk3NjE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yLmggKi8sCisJCQkJ
NTE2NDVCNTQxQjlGODhFODAwRjc4OUNFIC8qIElEQkN1cnNvci5jcHAgKi8sCisJCQkJNTE2NDVC
NDExQjlGODg5QjAwRjc4OUNFIC8qIElEQkN1cnNvci5oICovLAogCQkJCTUxRDcxOTc3MTgxMTA2
REYwMDE2REM1MSAvKiBJREJDdXJzb3IuaWRsICovLAotCQkJCTUxNjczMEExMTgyRDhGQkIwMDNG
QUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLywKLQkJCQk1MTY3MzBBMjE4MkQ4RkJCMDAz
RkFGNUMgLyogSURCQ3Vyc29yQmFja2VuZC5oICovLAotCQkJCTUxMDE5NDQyMTgzNkY3RTQwMDky
NTUyMyAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8sCi0JCQkJNTEwMTk0NDMx
ODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmggKi8sCi0JCQkJ
NTFENzE5NzkxODExMDZERjAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi8sCi0J
CQkJNTFENzE5N0ExODExMDZERjAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovLAor
CQkJCTUxNjQ1QjQyMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwICov
LAorCQkJCTUxNjQ1QjQzMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCAq
LywKIAkJCQk1MUQ3MTk3QjE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmlk
bCAqLywKLQkJCQk1MUQ3MTk3QzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2UuY3BwICov
LAotCQkJCTUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oICovLAorCQkJ
CTUxNjQ1QjQ0MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJEYXRhYmFzZS5jcHAgKi8sCisJCQkJNTE2
NDVCNDUxQjlGODg5QjAwRjc4OUNFIC8qIElEQkRhdGFiYXNlLmggKi8sCiAJCQkJNTFENzE5N0Ux
ODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmlkbCAqLywKLQkJCQk1MTc3MUM4QzE4MkRC
NEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLywKLQkJCQk1MTc3MUM4RDE4
MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi8sCi0JCQkJNTFENzE5ODAx
ODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8sCi0JCQkJNTFENzE5
ODExODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8sCi0J
CQkJNTFENzE5ODIxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
ICovLAogCQkJCTUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUVycm9yLmgg
Ki8sCiAJCQkJNTFENzE5ODQxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9u
LmNwcCAqLywKIAkJCQk1MUQ3MTk4NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNl
cHRpb24uaCAqLywKQEAgLTE4NjgzLDEzICsxODc1OCwxMiBAQAogCQkJCTUxQzk2MTFBMTgzRDJC
ODAwMEQyMDAyRSAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmggKi8sCiAJCQkJNTFENzE5ODYxODEx
MDZERjAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCiAJCQkJNTFENzE5ODcx
ODExMDZERjAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovLAotCQkJCTUxRDcxOTg4
MTgxMTA2REYwMDE2REM1MSAvKiBJREJGYWN0b3J5LmNwcCAqLywKLQkJCQk1MUQ3MTk4OTE4MTEw
NkRGMDAxNkRDNTEgLyogSURCRmFjdG9yeS5oICovLAorCQkJCTUxNjQ1QjQ2MUI5Rjg4OUIwMEY3
ODlDRSAvKiBJREJGYWN0b3J5LmNwcCAqLywKKwkJCQk1MTY0NUI0NzFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCRmFjdG9yeS5oICovLAogCQkJCTUxRDcxOThBMTgxMTA2REYwMDE2REM1MSAvKiBJREJG
YWN0b3J5LmlkbCAqLywKLQkJCQk1MUQ3MTk4QzE4MTEwNkUwMDAxNkRDNTEgLyogSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaCAqLywKIAkJCQk1MTIzQUYxQzE4OTE4QUU0MDAzMUNEQzkgLyog
SURCR2V0UmVzdWx0LmggKi8sCi0JCQkJNTFENzE5OEUxODExMDZFMDAwMTZEQzUxIC8qIElEQklu
ZGV4LmNwcCAqLywKLQkJCQk1MUQ3MTk4RjE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguaCAq
LywKKwkJCQk1MTY0NUI0ODFCOUY4ODlCMDBGNzg5Q0UgLyogSURCSW5kZXguY3BwICovLAorCQkJ
CTUxNjQ1QjQ5MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJJbmRleC5oICovLAogCQkJCTUxRDcxOTkw
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJJbmRleC5pZGwgKi8sCiAJCQkJNTFBQkI1QjYxODZEMEVE
MTAwODM5MUExIC8qIElEQkluZGV4TWV0YWRhdGEuaCAqLywKIAkJCQk1MUQ3MTk5MTE4MTEwNkUw
MDAxNkRDNTEgLyogSURCS2V5LmNwcCAqLywKQEAgLTE4NzAzLDM0ICsxODc3NywyNCBAQAogCQkJ
CTUxRDcxOTk3MTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5nZS5pZGwgKi8sCiAJCQkJNTEy
M0FGMTYxODkwQTRDQTAwMzFDREM5IC8qIElEQktleVJhbmdlRGF0YS5jcHAgKi8sCiAJCQkJNTEy
M0FGMTcxODkwQTRDQTAwMzFDREM5IC8qIElEQktleVJhbmdlRGF0YS5oICovLAotCQkJCTUxRDcx
OTk5MTgxMTA2RTAwMDE2REM1MSAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi8sCi0JCQkJNTFENzE5
OUExODExMDZFMDAwMTZEQzUxIC8qIElEQk9iamVjdFN0b3JlLmggKi8sCisJCQkJNTE2NDVCNEEx
QjlGODg5QjAwRjc4OUNFIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLywKKwkJCQk1MTY0NUI0QjFC
OUY4ODlCMDBGNzg5Q0UgLyogSURCT2JqZWN0U3RvcmUuaCAqLywKIAkJCQk1MUQ3MTk5QjE4MTEw
NkUwMDAxNkRDNTEgLyogSURCT2JqZWN0U3RvcmUuaWRsICovLAogCQkJCTUxQUJCNUI3MTg2RDBF
RDEwMDgzOTFBMSAvKiBJREJPYmplY3RTdG9yZU1ldGFkYXRhLmggKi8sCi0JCQkJNTFENzE5OUMx
ODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwICovLAotCQkJCTUxRDcxOTlE
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJPcGVuREJSZXF1ZXN0LmggKi8sCisJCQkJNTE2NDVCNEMx
QjlGODg5QjAwRjc4OUNFIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwICovLAorCQkJCTUxNjQ1QjRE
MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJPcGVuREJSZXF1ZXN0LmggKi8sCiAJCQkJNTFENzE5OUUx
ODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuaWRsICovLAogCQkJCTUxMkVBOUJE
MTgyMDI4NTcwMDFEMDFFMCAvKiBJREJPcGVyYXRpb24uaCAqLywKLQkJCQk1MUIwN0E0MzE4MjMy
NDhCMDBBQThEMUEgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCAqLywKLQkJCQk1MTJFQTlCQjE4
MUYyRUUwMDAxRDAxRTAgLyogSURCUGVuZGluZ09wZW5DYWxsLmggKi8sCi0JCQkJNTFENzE5OUYx
ODExMDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovLAot
CQkJCTUxRDcxOUEwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmggKi8sCiAJCQkJNTFFQUM1QjAxODE2M0Y0RTAwNEYxQkE0IC8qIElEQlJlY29yZElkZW50
aWZpZXIuaCAqLywKLQkJCQk1MUQ3MTlBMTE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5j
cHAgKi8sCi0JCQkJNTFENzE5QTIxODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuaCAqLywK
KwkJCQk1MTY0NUI0RTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCUmVxdWVzdC5jcHAgKi8sCisJCQkJ
NTE2NDVCNEYxQjlGODg5QjAwRjc4OUNFIC8qIElEQlJlcXVlc3QuaCAqLywKIAkJCQk1MUQ3MTlB
MzE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5pZGwgKi8sCiAJCQkJNTEwQTMyNkUxODMx
ODQzMTAwM0M1MzI2IC8qIElEQlNlcnZlckNvbm5lY3Rpb24uaCAqLywKLQkJCQk1MUQ3MTlBNDE4
MTEwNkUwMDAxNkRDNTEgLyogSURCVHJhbnNhY3Rpb24uY3BwICovLAotCQkJCTUxRDcxOUE1MTgx
MTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlvbi5oICovLAorCQkJCTUxNjQ1QjUwMUI5Rjg4
OUIwMEY3ODlDRSAvKiBJREJUcmFuc2FjdGlvbi5jcHAgKi8sCisJCQkJNTE2NDVCNTExQjlGODg5
QjAwRjc4OUNFIC8qIElEQlRyYW5zYWN0aW9uLmggKi8sCiAJCQkJNTFENzE5QTYxODExMDZFMDAw
MTZEQzUxIC8qIElEQlRyYW5zYWN0aW9uLmlkbCAqLywKLQkJCQk1MTBCN0RCNTE4MkQ5RjVEMDA5
QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCAqLywKLQkJCQk1MTBCN0RCNjE4MkQ5
RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmggKi8sCi0JCQkJNTEwNTlERDkx
ODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwICov
LAotCQkJCTUxMDU5RERBMTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRP
cGVyYXRpb25zLmggKi8sCi0JCQkJNTFFQUM1NjUxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwICovLAotCQkJCTUxRUFDNTY2MTgxNUVEM0UwMDRGMUJBNCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8sCi0JCQkJNTFENzE5QUIxODExMDZFMDAw
MTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8sCi0JCQkJNTFENzE5QUMxODEx
MDZFMDAwMTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovLAorCQkJCTUxNjQ1QjUy
MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovLAorCQkJCTUx
NjQ1QjUzMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLywKIAkJ
CQk1MUQ3MTlBRDE4MTEwNkUwMDAxNkRDNTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCAq
LywKIAkJCQk1MUQ3MTlBRTE4MTEwNkUwMDAxNkRDNTEgLyogSW5kZXhlZERCLmggKi8sCiAJCQkJ
NTFENzE5QjExODExMDZFMDAwMTZEQzUxIC8qIFdvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFi
YXNlLmNwcCAqLywKQEAgLTIzOTg0LDYgKzI0MDQ4LDcgQEAKIAkJCQkwNzNBQjRCMzE3RjhCQUNB
MDA2RTBENkYgLyogQWxsVmlkZW9DYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNF
REExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE3NjFCQTczQjVCMDAyRTA1M0Ig
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwM0UxMkIwMjY3NjAwQzFBMzU5IC8qIEFuYWx5c2Vy
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgyRjkwIC8qIEFO
R0xFSW5zdGFuY2VkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MDE0LDYgKzI0MDc5LDcg
QEAKIAkJCQkwRkZENEQ2MTE4NjUxRkEzMDA1MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNjFGMDExMjA5NUM4NzAwN0EzQzY3IC8qIEF0
b21pY1N0cmluZ0tleWVkTVJVQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzRBODBEMDlE
NTYzMjcwMDAzQUM4RCAvKiBBdHRyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY0NUI1RDFCOUZB
NkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEM0QTgwQjA5RDU2MzI3MDAwM0FDOEQgLyogQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRDMxNjA3QTEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9BcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQ2MjlFQTMxNTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NTQ3LDYgKzI0NjEzLDcgQEAKIAkJCQk4NUI0OThF
RDBBREIzMkZCMDA5MjVDQkIgLyogRE9NQ1NTUnVsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NTAzMkRFMzBBQThDOUJFMDA3RDNCN0QgLyogRE9NQ1NTUnVsZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1RTcxMTkyMEFDNUQ1MzUwMDUzMjcwRiAvKiBET01DU1NSdWxlTGlzdElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY0NUI1QjFCOUZBNkM4MDBGNzg5Q0UgLyog
TGVnYWN5Q3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMkRFNTBBQThDOUJFMDA3RDNC
N0QgLyogRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRCOUM0
QUExQjMyMzFGNDAwNzBGMjdGIC8qIE5TRXZlbnRTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
RTcxMTkzMEFDNUQ1MzUwMDUzMjcwRiAvKiBET01DU1NTdHlsZURlY2xhcmF0aW9uSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLApAQCAtMjQ1NjEsNiArMjQ2MjgsNyBAQAogCQkJCTg1OEMzODFDMEFB
OEUyOTYwMEIxODdBNCAvKiBET01DU1NWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVCNDk4
RjMwQURCMzM2QTAwOTI1Q0JCIC8qIERPTUNTU1ZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxRjQxQTc4MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NThDMzgzQzBBQThFRDgyMDBCMTg3QTQg
LyogRE9NQ1NTVmFsdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTkwOUQyQjBBQ0M3RDU1
MDBERjAxRjEgLyogRE9NQ1NTVmFsdWVMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxMEI5Q0NDMEI3NDdBNDQwMDNFRDg5MCAvKiBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMjQ3OTcsNiArMjQ4NjUsNyBAQAogCQkJCTg1QUNBOTlDMEE5QjU3
NTkwMDY3MUU5MCAvKiBET01UZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlEREU2M0VENTBCN0Q0
NUE4MDAyMjY5OTggLyogRE9NVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3MTFE
OTBBQzVENTM1MDA1MzI3MEYgLyogRE9NVGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MTY0NUI2RDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxODg2MDRCNDBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA1RkQ2OUUwMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1l
U3RhbXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzNDhCRkFDMUI4NTcyOTgwMDkxMkYzNiAvKiBD
bGFzc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjQ5NTAsNiArMjUwMTksNyBAQAog
CQkJCTk3NkQ2QzgzMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJFREYzNjlGMTIyQzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTg4QTkwNTE3NTUzQ0Q3MDAwQzc0RjkgLyogRmlsZUljb25Mb2FkZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjQ1QjYzMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lJ
bmRleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkUxMjUxRjEyRDAwM0VGMjY5IC8qIEZp
bGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2Qzg2MTIyQjhBM0QwMDFGRDFG
NyAvKiBGaWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY4OUYxQUYxMjY3QkFFMTAwRThE
MzgwIC8qIEZpbGVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTEwNSw2ICsyNTE3NSw3
IEBACiAJCQkJOTNGMTk5RTUwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxDYW52YXNFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOERGM0ZEMDA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0IzODY1MTIyODgzRTkwMEI4MUZGOCAvKiBI
VE1MQ29uc3RydWN0aW9uU2l0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFGNDFBNkExQkE3M0I1
QjAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0U1
MTBBMThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGNUMwNDFEQjBGRkNBN0NFMDA4MzlENEEgLyogSFRNTERhdGFMaXN0RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRDM1OUQ3OEExMjlDQTI3MTAwMDZFNUQyIC8qIEhUTUxEZXRhaWxzRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTIyNCw0NCArMjUyOTUsMjEgQEAKIAkJCQk0NUJB
QzJCMDEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFE
NzE5QkExODExMDZFMDAwMTZEQzUxIC8qIElEQkFueS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU4
NUE2NjMxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTUxRDcxOUJFMTgxMTA2RTAwMDE2REM1MSAvKiBJREJDYWxsYmFja3MuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUxRDcxOUMwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3IuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxNjczMEE0MTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JC
YWNrZW5kLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTAxOTQ0NTE4MzZGN0U1MDA5MjU1MjMgLyog
SURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRDcxOUM0
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUxRDcxOUM3MTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE3NzFDOEYxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5Q0ExODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFi
YXNlQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlDQzE4MTEwNkUwMDAxNkRD
NTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3
MTlDRDE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFcnJvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTFENzE5Q0YxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MUM5NjExQjE4M0QyQjgwMDBEMjAwMkUgLyogSURCRGF0YWJh
c2VNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5RDExODExMDZFMDAwMTZEQzUx
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RDMxODEx
MDZFMDAwMTZEQzUxIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRDcxOUQ2
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTEyM0FGMUQxODkxOEFFNDAwMzFDREM5IC8qIElEQkdldFJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RDkxODExMDZFMDAwMTZEQzUxIC8qIElEQkluZGV4Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQjVCODE4NkQwRUQxMDA4MzkxQTEgLyogSURCSW5kZXhN
ZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5REMxODExMDZFMDAwMTZEQzUxIC8q
IElEQktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRUMxQTYxODhEQUNBNDAwQkEzRUI2IC8q
IElEQktleURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOURFMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlFMDE4MTEwNkUwMDAx
NkRDNTEgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjNBRjE5MTg5MEE0
Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5nZURhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRDcx
OUU0MTgxMTA2RTAwMDE2REM1MSAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFBQkI1QjkxODZEMEVEMTAwODM5MUExIC8qIElEQk9iamVjdFN0b3JlTWV0YWRhdGEuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxRDcxOUU3MTgxMTA2RTAwMDE2REM1MSAvKiBJREJPcGVuREJS
ZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJFQTlCRTE4MjAyODU3MDAxRDAxRTAgLyog
SURCT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUIwN0E0NDE4MjMyNDhCMDBBQThE
MUEgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMkVBOUJD
MTgxRjJFRTAwMDFEMDFFMCAvKiBJREJQZW5kaW5nT3BlbkNhbGwuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUxRDcxOUVBMTgxMTA2RTAwMDE2REM1MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUVBQzVCMjE4MTYzRjRFMDA0RjFCQTQgLyogSURC
UmVjb3JkSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RUMxODExMDZFMDAw
MTZEQzUxIC8qIElEQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEEzMjZGMTgzMTg0
MzEwMDNDNTMyNiAvKiBJREJTZXJ2ZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
MUQ3MTlFRjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICov
LAotCQkJCTUxMEI3REI4MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUxMDU5RERFMTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUVBQzU2ODE4
MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTFENzE5RjYxODExMDZFMDAwMTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3MUQ1N0MwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50
aWZpZXJSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUM1MEVGODZENDcwMDlEMENBRiAv
KiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBDMDU0
Q0QxMTE4QzhFNDAwQ0UyNjM2IC8qIElETFBhcnNlci5wbSBpbiBIZWFkZXJzICovLApAQCAtMjUz
NTIsNiArMjU0MDAsNyBAQAogCQkJCUUxMzRGNUFCMTJFRTM0M0YwMDRFQzU4RCAvKiBJbnRSZWN0
SGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NzUwQjA1MzgxNDAwMkNFNjRGIC8qIElu
dFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTc2MEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bnRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFGNDFBNkMxQkE3M0I1QjAwMkUwNTNC
IC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTEy
NTI0RDFBMUE3N0RFMDA4NjQ0ODAgLyogSU9QTUxpYlNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDRERUY2NDMxQTZGRjkyNzAwRDQ1RUVDIC8qIElPUmV0dXJuU1BJLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRDBCNEFBQjE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI1MzY4LDYgKzI1NDE3LDcgQEAKIAkJCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUg
LyogSlNBdHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0Eg
LyogSlNBdWRpb0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRGN0U5QzQxM0FDMjFEQjAw
QTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2
NDVCNUYxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGREExNUVBMDEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUE2MTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlv
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFCNDU0RUExQjREQUU3RDAwODVFQUE2IC8q
IFBpbmdIYW5kbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjU0MDIsNiArMjU0NTIsNyBAQAogCQkJ
CTkzRjlCNkUxMEJBMEZCNzIwMDg1NDA2NCAvKiBKU0NvbW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTc5QUM5MjE5MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZEQTE1RUJFMTJCMDNGMEIwMDNBNTgzQSAvKiBKU0NvbnZvbHZlck5v
ZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMDNDMkI5MUJBMjNBMjYwMEUyNjMzNyAvKiBMZWdh
Y3lBbnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkZENDhFMEY2NzZFOTMwMDA5Mjg3MyAvKiBK
U0Nvb3JkaW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA3MDVEQTA5RTBDOUJGMDBCMTdG
RTQgLyogSlNDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzVDQTJBMjEzMDM2NzlEMDBF
OTlBRDkgLyogSlNDcnlwdG8uaCBpbiBIZWFkZXJzICovLApAQCAtMjU0ODYsNiArMjU1MzcsNyBA
QAogCQkJCTVGQzdEQzI2Q0ZFMjU2MzIwMEI4NUFFNCAvKiBKU0V2ZW50VGFyZ2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMzE0QUNFQzEwODkyMDg2MDAwRjBFNTYgLyogSlNFeGNlcHRpb25CYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRC
bGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFGNDFBNzkxQkE3M0I1QjAwMkUwNTNC
IC8qIElEQlBlbmRpbmdEZWxldGVDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzQzMDRCNjE5
MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLywK
IAkJCQk3NzI4Njk4NDE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDBGMDE1MEUwQTE4OTUwMEZEMDRFMyAvKiBK
U0ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjU3NzcsNiArMjU4MjksNyBAQAogCQkJCUIyRkEz
RDhCMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNEOEQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVQb2ludExpZ2h0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEOEYwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFGNDFB
NkUxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjJGQTNEOTEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVTcG90TGlnaHRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5MzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdG
RVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5NTBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1ODIw
LDYgKzI1ODczLDcgQEAKIAkJCQlCMkZBM0RDNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQzkwQUI3
NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyRkEzRENCMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoQWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY0NUI2MTFCOUZB
NkM4MDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNE
Q0QwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhS
ZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRENGMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NW
R1BhdGhTZWdMaW5ldG9BYnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREQxMEFCNzVBNkYw
MDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLmggaW4gSGVhZGVycyAq
LywKQEAgLTI1OTMzLDYgKzI1OTg3LDcgQEAKIAkJCQk2NURGMzIwNjA5RDFDQzYwMDAwQkUzMjUg
LyogSlNXaGVlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUNBQTVDNjBFOEJEMjM2MDBB
NzNFQ0EgLyogSlNXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxODI1NjkwMEVGMkIwMkQw
MDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0
MUE3QzFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTUwNTI0RjQxQjcxMkZGNjAwNjk2QUE5IC8qIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDMzZEMzUw
RUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMUMzNjJFRjBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNjAxMCw2ICsyNjA2NSw3IEBACiAJCQkJMkQ0MTNGNjExQTE4N0Ez
RjAwNDFBNTIxIC8qIExvb2t1cFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwNDA5REMxQTQz
NjBCNTAwOUU0N0YzIC8qIE1hY2hTZW5kUmlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTI1
MjRGMUExQTc4RDIwMDg2NDQ4MCAvKiBNYWNoVk1TUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
NjQ1QjZCMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMyQUQ3MDYxN0VGQTJDNDAwMzhGOEZGIC8qIE1haW5GcmFtZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE4RjZCQzYwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGODA5OUU2NDkyMDA1NkU1ODEgLyogbWFya3VwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI2MTg4LDYgKzI2MjQ0LDcgQEAKIAkJCQkxQTU2OUQwRjBEN0Uy
QjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5
RDEwMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNTY5RDExMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTE2NDVCNjkxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTI3RkQ0MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTEyNTI1MTFBMUJFQkQ4MDA4NjQ0ODAgLyogTlNDYWxl
bmRhckRhdGVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREY2MzU3MUFGMTg3REQwMDc4RkQ5
MSAvKiBOU0NvbG9yU1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MTk3LDYgKzI2MjU0LDcgQEAK
IAkJCQk5MzIxRDU5MDFBMzkwNzA0MDA4MDUyQkUgLyogTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJl
UmVjb2duaXplclNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM3RjRDQ0UxQTJENEIwMTAwQkIz
OUY1IC8qIE5TTWVudVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMjUyNDcxQTE2QzJDMjAw
ODY0NDgwIC8qIE5TUG9pbnRlckZ1bmN0aW9uc1NQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFG
NDFBNzQxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNGMUUxRUMxQTQwRkREQzAwMzQ4RDEzIC8qIE5TUG9wb3ZlclNQSS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM1MDBGMzIxM0ZERTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJ
bXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRENCODM3OTE5Rjk5QkJBMDBBN0ZCRTQg
LyogTlNTaGFyaW5nU2VydmljZVBpY2tlclNQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI0Niw2
ICsyNjMwNCw3IEBACiAJCQkJMkQ1QzlEMDIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJEQjYxQTExNkQ2MDM3RTAwQkIzMzk0
IC8qIFBhZ2VSdWxlQ29sbGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgyMDg5NTE0N0Qz
NUY5MDAxMEJDMDYgLyogUGFnZVJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFG
NDFBNkYxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUYzNkQzQjE4Rjc1ODcyMDA1NEMwMjQgLyogUGFnZVNjcmlwdERlYnVnU2Vy
dmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzFFNjVDQzEzNjYxRURDMDBCRUVEQjAgLyogUGFn
ZVNlcmlhbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MTk3RjI0MTc1Njg5QzQwMDdCOTQ0
MiAvKiBQYWdlVGhyb3R0bGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NDE5LDYgKzI2NDc4LDcg
QEAKIAkJCQlBODcxREVEMzBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyRnJhbWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDMwODBGMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFERUQxMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJG
cmFtZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2NDVCNjcxQjlGQTZDODAwRjc4OUNFIC8q
IExlZ2FjeU9wZW5EQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERUE3Qzg0MTI3NjIz
MDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNG
MEU1QTE1NzAzMEMzMDA2REE1N0YgLyogUmVuZGVyR2VvbWV0cnlNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMTI4QTczMTM3Qzg2N0MwMENBQzg0NSAvKiBSZW5kZXJHcmlkLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NjEzLDYgKzI2NjczLDcgQEAKIAkJCQkwNzhFMDkyQzE3RDE0RDFDMDA0MjBB
QTEgLyogUlRDU3RhdHNSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5NDYxN0Qx
NkUxQzAwNDIwQUExIC8qIFJUQ1N0YXRzUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzhFMDk0NzE3RDE2RTFDMDA0MjBBQTEgLyogUlRDVm9pZFJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxRjQxQTcxMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTJEMTdEMTREMUMwMDQyMEFBMSAvKiBS
VENWb2lkUmVxdWVzdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU4MjRBQkEzMUFFODExMTYw
MDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyNEFCQTcxQUU4
MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjc4
Myw2ICsyNjg0NCw3IEBACiAJCQkJMUEyMjQ2NEMwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZVN0
YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyMjQ2NEUwQ0M5OEREQjAwQzA1MjQwIC8q
IFNRTGl0ZVRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkE0MjE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE3MjFC
QTczQjVCMDAyRTA1M0IgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QkM2QTQ1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRThBNjc0ODE2Q0REMTlFMDA5MzBCRjggLyogU1FMU3Rh
dGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkE0OTE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMU3RhdGVtZW50Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtMjcyNDcsNiArMjczMDks
NyBAQAogCQkJCTg2ODE2MEQ2MTg3NjZBMTMwMDIxRTc5RCAvKiBVc2VyQWN0aXZpdHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2MjU1RjAzMTg4NzhFMTEwMDA2RTFGRCAvKiBVc2VyQWdlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEQUI2RDMxMTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRT
Y3JpcHRzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY0NUI2NTFCOUZBNkM4MDBGNzg5Q0UgLyog
TGVnYWN5T2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NjU4MUIyMDlEMTRFRTYw
MDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFF
NzlENDMxODhEQjYxRjAwMjIzOUMyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDAzRjFGRUExMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMjcyNTQsNiArMjczMTcsNyBAQAogCQkJCTI1NDJGNERCMTE2
NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTkyMDM5ODMxOEI5NUJDNjAwQjM5QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDc4RTA5MkUxN0QxNEQxQzAwNDIwQUExIC8qIFVzZXJNZWRpYUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTFGNDFBNjgxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkNhbGxi
YWNrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MkYxN0QxNEQxQzAwNDIwQUExIC8qIFVz
ZXJNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTMwMTdEMTREMUMw
MDQyMEFBMSAvKiBVc2VyTWVkaWFSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNCNzk3
MjE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTI3MzM3LDYgKzI3NDAxLDcgQEAKIAkJCQlBMTQ4MzJDQzE4N0Y2N0M0MDBEQTYzQTYgLyog
V2ViQ29yZVRocmVhZFJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0ODMyQ0QxODdGNjgyRTAw
REE2M0E2IC8qIFdlYkNvcmVUaHJlYWRTYWZlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJD
RjE4N0Y2ODQ3MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTFGNDFBN0ExQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdPcGVu
Q2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGODE4RkQw
RDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDRBMjBEQjkwRjg0MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yODAzNiw2ICsyODEwMSw3IEBACiAJCQkJNDFEMDE1Q0IwRjRCNUM3
MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NjI3QjhE
MTRGQjNDRUUwMDJDRENBMSAvKiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTA2RDdCRDE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxRjQxQTZEMUJBNzNCNUIwMDJFMDUzQiAvKiBJ
REJEYXRhYmFzZUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVE
QTAwNUEyQjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwNjAyN0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yODA2MCw2ICsyODEyNiw3IEBACiAJCQkJRTFDNDE1REUw
RjY1NUQ3QzAwOTJEMkZCIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkU0MzQ2NTgwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFk
Q29waWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNjk4MDQ5MTEzMzY0NDcwMDg5NDExNSAv
KiBDUnVudGltZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY0NUI2MDFCOUZBNkM4
MDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzVDQTI4
QTEzMDM2NUY4MDBFOTlBRDkgLyogQ3J5cHRvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNzJB
RjZEMTgwRjI0QzYwMEZCQURCOSAvKiBDcnlwdG9BbGdvcml0aG0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTEyNUY4NDExODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODEzNCw2ICsyODIwMSw3IEBACiAJCQkJQTgwRTZDRjUw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
NzcyQjNEMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMwMkE1NDAwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MTAzQzJCNDFCQTIzMkFFMDBFMjYzMzcgLyogSURCQ3Vyc29yV2l0aFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0IzODYyMTIyODgzRTkwMEI4MUZGOCAvKiBD
U1NQcmVsb2FkU2Nhbm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNkQwNTBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgw
RTZDRjcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjgzNzMsNiArMjg0NDEsNyBAQAogCQkJCTUyQjZDOUMyMTVFM0Y0REYwMDY5MEIwNSAvKiBE
T01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MThERDc5MEE5
Q0YzMUIwMDkxQjdBNiAvKiBET01OYW1lZE5vZGVNYXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk4
NTNCRjREQzBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTUxNjQ1QjY2MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg1NTI2QzM4MEFCMEExN0UwMDAzMDJFQSAvKiBET01Ob2RlSXRlcmF0
b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUFDQUE4RTBBOUI3NTlDMDA2NzFFOTAgLyogRE9N
Tm9kZUxpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTZDOEFFNTBBOTEyNjQ5MDA1QzY4N0Ig
LyogRE9NT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yODQ1Miw2ICsyODUyMSw3IEBACiAJ
CQkJQThDNEE4MDgwOUQ1NjMyNzAwMDNBQzhEIC8qIEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjVCN0ExNzAxN0MxMEFBODAwRTRBQTBBIC8qIEVsZW1lbnREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTRGRkMwMjJEMTY0M0I3MjYwMDRFMTYzOCAvKiBFbGVtZW50UmFyZURhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFGNDFBNjkxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkN1
cnNvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkJEQjYxOUIxNkQ2MDMyQTAwQkIz
Mzk0IC8qIEVsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4Q0ZG
NkNCMEExNTYxQ0QwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGNTVCM0RCQjEyNTFGMTJEMDAzRUYyNjkgLyogRW1haWxJbnB1dFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yODU0OSw2ICsyODYxOSw3IEBACiAJCQkJNTFFM0FBMEExQjk4QkNBQjAwMzZB
RDgxIC8qIFNlY3VyaXR5T3JpZ2luRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIz
NjE0RUFCRDI2MDA5MEQ3NUUgLyogRm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkMzREE2NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MTY0NUI2QzFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyQzNEQTYyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcyN0RGRDUxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRD
YWNoZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdDMEQwMEE1QzEwMDMwMDc0RCAv
KiBGb250Q2FjaGVNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTI4NjYwLDYgKzI4NzMxLDcgQEAK
IAkJCQk5MzMwOURFNzA5OUU2NDkyMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVu
dEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwM0MyQjUxQkEyMzJENDAwRTI2MzM3
IC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0IzNzIzMTIyODcyMTcw
MEI4MUZGOCAvKiBIVE1MRWxlbWVudFN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFE
NDVGMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MRW1iZWRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3N0IzODY5MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRW50aXR5UGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjg3NTEsNiArMjg4MjMsNyBAQAogCQkJCUU0NDYxM0FBMENENjMz
MTAwMEZBREE3NSAvKiBIVE1MVmlkZW9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgz
OUFBRkVDMUEwQzBDOEQwMDYwNUY5OSAvKiBIVE1MV0JSRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwQjhDNTZENDBGMjg2MjdGMDAwNTAyRTEgLyogSFRUUEhlYWRlck1hcC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MTY0NUI1QTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQzkwMEMzMTk0M0MwRkMwMDg2MjVCNSAvKiBIVFRQ
SGVhZGVyTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NzIwQ0U5MjNBMTAwN0VG
M0NEIC8qIEhUVFBQYXJzZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3MUE2N0NCMTFDNkM3
REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlvbkNGLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3NjQs
MzIgKzI4ODM3LDE0IEBACiAJCQkJNTFFMUVDQzAwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNv
cmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5QjkxODExMDZFMDAwMTZEQzUxIC8qIElE
QkFueS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTg1QTY2MjExRDRGQUM1MDA0QzNFNEIgLyog
SURCQmluZGluZ1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUQ3MTlCRjE4MTEw
NkUwMDAxNkRDNTEgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNjczMEEz
MTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTUxMDE5NDQ0MTgzNkY3RTQwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUQ3MTlDMzE4MTEwNkUwMDAxNkRDNTEgLyogSURC
Q3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRDcxOUM2MTgxMTA2RTAw
MDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTc3MUM4RTE4
MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTUxRDcxOUNCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5Q0UxODExMDZFMDAwMTZEQzUxIC8qIElEQkRh
dGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjMxMTdEMTg1MTI0MkIw
MDUzNDY0NyAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
RDcxOUQwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNTFENzE5RDIxODExMDZFMDAwMTZEQzUxIC8qIElEQkZhY3RvcnkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5RDgxODExMDZFMDAwMTZEQzUxIC8qIElEQkluZGV4LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDcxOURCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUMxQTgxODhEQUU3QjAwQkEzRUI2IC8qIElEQktl
eURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5REQxODExMDZFMDAwMTZEQzUxIC8q
IElEQktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5REYxODExMDZFMDAwMTZE
QzUxIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMjNBRjE4MTg5MEE0
Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5nZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFE
NzE5RTMxODExMDZFMDAwMTZEQzUxIC8qIElEQk9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTUxRDcxOUU2MTgxMTA2RTAwMDE2REM1MSAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTUxRDcxOUU5MTgxMTA2RTAwMDE2REM1MSAvKiBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRDcxOUVCMTgxMTA2
RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRDcxOUVF
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTBCN0RCNzE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTUxMDU5REREMTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRUFDNTY3MTgx
NUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTUxRDcxOUY1MTgxMTA2RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3MUQ1N0IwRjMzODE5MDAwRjlDRTRFIC8qIElk
ZW50aWZpZXJSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzNDRjE3QTQxNUIwMDYzRjAwMjc2
RDM5IC8qIElkVGFyZ2V0T2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzNDRjE3QTYx
NUIwMDYzRjAwMjc2RDM5IC8qIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI4ODQyLDYgKzI4ODk3LDcgQEAKIAkJCQkxQzgxQjk1QjBFOTczMzA4MDAyNjZF
MDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MkFCMTc0
MzEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNEE5Q0M4MjAxNkJGOUJCNDAwRUM2NDVBIC8qIEluc3BlY3RvckNTU09NV3JhcHBlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFGNDFBNzcxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FCMEIxQzAxMjEx
QTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDFGMDYyMTUwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0EyNDU4N0IxMDIxRUFGNDAwMEEwMEFBIC8qIElu
c3BlY3RvckRPTUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjkzNTEsNiArMjk0MDcsNyBA
QAogCQkJCUIyRkEzRDUyMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ0OTZFMzlEMTM5ODEzNkMwMDNFRTMyQSAvKiBKU1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDU0MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxMDNDMkIzMUJBMjMyNEQwMEUyNjMzNyAvKiBJREJDdXJzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJGQTNENTYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q1ODBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdDaXJjbGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDVBMEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR0NsaXBQYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI5NDQ4LDYgKzI5NTA1LDcgQEAKIAkJCQlCMkZBM0RFMjBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdQb2ludExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNERTUwQUI3NUE2RjAw
MEU1QUM0IC8qIEpTU1ZHUG9seWdvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJG
QTNERTcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUG9seWxpbmVFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxRjQxQTcwMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNERTkwQUI3NUE2RjAwMEU1QUM0
IC8qIEpTU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZB
M0RFQjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODU0MkE3OTQwQUU1Qzk0MDAwREY1OERGIC8qIEpTU1ZHUmVjdC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI5NDY2LDYgKzI5NTI0LDcgQEAKIAkJCQlCMjIzNjIyODBD
M0FGMDRBMDAwOENBOUIgLyogSlNTVkdUZXh0UGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJGQTNFMDYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UwODBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdUaXRsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwM0MyQjIxQkEyMzE3
NDAwRTI2MzM3IC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RTBBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMkZBM0UwQzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUcmFuc2Zvcm1MaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyRkEzRTBFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RSZWZF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk1NjgsNiArMjk2MjcsNyBAQAogCQkJCTQ2
M0VCNjIyMUI4Nzg5RTAwMDk2RUQ1MSAvKiBUYWdDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxMjcxQTU5MEVFRUNERTQwMEY2MTIxMyAvKiBKU1dvcmtlck5hdmlnYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzM0OEJEMzBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRw
UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTU3RDQ2NjFCQTI0QUZEMDA4NUNBMkYg
LyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzNDhCQkUwREI3RjUz
MTAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM2MERBMzkwRDJBMzAyODAwQjk5MThGIC8qIEpTWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjkxNkM0OEQwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk2MjAsNiAr
Mjk2ODAsNyBAQAogCQkJCTY1NkQzNzMzMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VSTEV4
dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDY4MTJEMjZFMzgwMEU3OTQxNSAvKiBM
b2FkZXJSdW5Mb29wQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQkY2NEQxNjM5MkUyODAw
MTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMDNDMkI4
MUJBMjM1QzUwMEUyNjMzNyAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDZFODFFRUMwQUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY1OTczREUxMTVDRkIyMDMwMDI3RjgwNCAv
KiBMb2NhbGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NjMzQTcyNzEzRDhCMzNBMDA4NTAx
QjYgLyogTG9jYWxlVG9TY3JpcHRNYXBwaW5nRGVmYXVsdC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI5Nzg1LDYgKzI5ODQ2LDcgQEAKIAkJCQkxQTU2OUQxQTBEN0UyQjgyMDA3QzM5ODMgLyogb2Jq
Y191dGlsaXR5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNGNkJERkIwRTlCQjI2QTAwMjVFMUNE
IC8qIE9iakNFdmVudExpc3RlbmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNGNkJFMTQwRTlC
QjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJNTE2NDVCNUMxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTY5ODI2MDExMzQ2MzZBMDA4OTQxMTUgLyogT2JqQ1J1
bnRpbWVPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3RTVEN0E3NjE2MUQzRjhGMDA4OTZD
MzQgLyogT0VTRWxlbWVudEluZGV4VWludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDAxNzc0
MDEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5ODE0LDEwICsyOTg3NiwxMiBAQAogCQkJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E2NzRCREIwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQzI2NDk3QzBEN0UyNEVDMDBCRDEwRjIgLyogUGFnZU1hYy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MTAzQzJCNjFCQTIzM0JGMDBFMjYzMzcgLyogSURCUmVxdWVzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRDVDOUNGRjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ1QzlEMDExOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQkRCNjE5RDE2RDYwMzQ2MDBCQjMz
OTQgLyogUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM4MjA4OTQx
NDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTE2NDVCNjIxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1RjM2RDNBMThGNzU4NzIwMDU0QzAyNCAvKiBQYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBh
Z2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MTk3RjI2MTc1NjhBRTUwMDdC
OTQ0MiAvKiBQYWdlVGhyb3R0bGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk4NjEsNiArMjk5
MjUsNyBAQAogCQkJCTQxQkY3MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTI3OEIwQzE3RjIxMkVBMDAzQTI5
OTggLyogUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU5ODkw
MkUxNEU5QjBGODAwRThEMThCIC8qIFBsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxRjQxQTczMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tl
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDMwRUFGRDYzNzAwMzY5NUM4IC8qIFBs
YXRmb3JtU2NyZWVuSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NEQxMDgwQzI3NEY4ODAw
NkJDNjE3IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkzNDk0
MEIxNkMwMkMwQTAwOTAxMzE4IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMzAwMDcsNiArMzAwNzIsNyBAQAogCQkJCUJDM0JFOTkzMEU5
QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMzQkU5QUIwRTlDMjQyMDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclBhcnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMzQkU5QTUwRTlDMjM5NjAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJh
clRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxRjQxQTc1MUJBNzNCNUIwMDJFMDUzQiAv
KiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ1OEZFNDA5MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1OERFRUQ4NjE5ODczRkYwMDA4ODhGRjMgLyogUmVuZGVyU2VsZWN0aW9u
SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQjI0N0E2QzBBRkQ2MzgzMDAzRkE1RkQgLyog
UmVuZGVyU2xpZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAwMzYsNiArMzAxMDIsNyBAQAog
CQkJCUJDRUE0ODY3MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJWaWV3LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJFMjA1MDdEMThBNDU4QkYwMDgwNjQ3RSAvKiBSZW5kZXJWVFRDdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTg3MURGRTUwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdl
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUY0MUE3QjFCQTczQjVCMDAyRTA1M0IgLyogSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTUyOERB
NjFBQzEwMzNFMDAwRUY3QUQgLyogUmVwbGFjZURlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1MjhEQTkxQUMxMDlERjAwMEVGN0FEIC8qIFJlcGxhY2VJ
bnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OUNDQzUy
MEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTMwMDQ2LDYgKzMwMTEzLDcgQEAKIAkJCQk5OUNDMEI1ODE4QkU5ODRBMDA2
Q0VCQ0MgLyogUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTlDQzBCNTkxOEJFOTg0QTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTlDQzBCNUIxOEJFOTg0QTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb25TZWdt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjVFMUI5RkE2QzgwMEY3ODlDRSAvKiBM
ZWdhY3lEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RDRjEyNTFGMTJEMDAz
RUYyNjkgLyogUmVzZXRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RjcxM0Uw
RDVBNkYyODAwMDE4RDY5IC8qIFJlc291cmNlRXJyb3JCYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFRTY4NDZCMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZUVycm9yQ0YuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zMDE5Niw2ICszMDI2NCw3IEBACiAJCQkJRTE4REYzMzgxOEFBRjE0RDAw
NzczRTU5IC8qIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDc3QUYxNDQxOEY0QjFCQjAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2Vu
dGF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1RTQ5NzcxMDc1MkFDQjAwQzlCODk2
IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY0NUI2
QTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkQ5M0FFRTQxOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUwRjA5OUU2NDkyMDA1NkU1ODEgLyogU2V0
Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjhEQkRCNEIxMzBC
MEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMDIzNSw2ICszMDMwNCw3IEBACiAJCQkJQ0QzQTQ5NjExN0E5RDAxQjAwMjc0RTQyIC8qIFNv
dXJjZUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDNBNDk2NDE3QTlEMDFCMDAyNzRF
NDIgLyogU291cmNlQnVmZmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREM4QjVBQTE4
MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNl
cyAqLywKKwkJCQk1MTU3RDQ2NDFCQTI0QUVFMDA4NUNBMkYgLyogSURCRmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NEE4MUY0MTBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhp
Yy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzYzMDZENzE3RTE0OUNGMDA1QTdDNEUgLyogU291
cmNlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzZENUEyNTE5M0Y0MEZDMDBDRTRDQUIg
LyogU291cmNlU2l6ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDI0Niw2ICszMDMxNiw3
IEBACiAJCQkJQUEyQTVBQ0QxNkE0ODVGQTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc1ZvaWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEZFMTNCMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVs
bENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIx
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEw
M0MyQjExQkEyMkQxQTAwRTI2MzM3IC8qIExlZ2FjeUFueS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0NTEyNTAyMjE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMzMDlFMTEwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMTMwOTlFNjQ5MjAwNTZFNTgxIC8q
IFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAyODIsNiArMzAz
NTMsNyBAQAogCQkJCUJDNUVCNjdEMEU4MUQ0MjAwMEIyNTk2NSAvKiBTdHlsZUJveERhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODM4NkE5NzAxOUY2MUU0RjAwRTFFQzRBIC8qIFN0eWxlQnVp
bGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VGNDQ3QTBFNjc0N0QwMDAxQzEyODcgLyog
U3R5bGVDYWNoZWRJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTAzQzJCNzFCQTIzM0M0
MDBFMjYzMzcgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Mzkz
RTYwNDE1MUE5QTE4MDAwNjZGMDYgLyogU3R5bGVDYWNoZWRJbWFnZVNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEM0QTdGRTA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzVFQjhCODBFODIwMUJEMDBCMjU5NjUgLyogU3R5bGVEZXBy
ZWNhdGVkRmxleGlibGVCb3hEYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzA0ODQsMTIgKzMw
NTU2LDE0IEBACiAJCQkJMTUwNTI0RjcxQjcxMkZGRjAwNjk2QUE5IC8qIE1lZGlhU3RyZWFtUHJp
dmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FEMDBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MjIyN0FEMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVGl0bGVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxNTdENDY1MUJBMjRBRjgwMDg1Q0EyRiAvKiBJREJJbmRleC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQ0NERjVCRDE5OTAzMzI0MDBCQ0VCQUQgLyogU1ZHVG9PVEZGb250Q29u
dmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FENjBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUQ5MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1hYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QURDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjIyN0FERTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlERUMyOTc2MTFCNEYyRjhEMDA1RjU5NDUgLyogSlNDdXN0
b21FdmVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY0NUI2NDFCOUZBNkM4MDBG
Nzg5Q0UgLyogTGVnYWN5T2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdB
RTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RSZWZFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3QUU0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUU3BhbkVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjIyMjdBRTkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1VSSVJlZmVyZW5j
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwNTc0LDYgKzMwNjQ4LDcgQEAKIAkJCQk3NTUzQ0ZF
OTEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMzA5RUE0MDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1lci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFNDQ2MTNBRjBDRDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MTY0NUI2ODFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMURFNzEzMjE4NjEzMjIyMDA3MzQxOTIgLyogVG91
Y2hDb25zdHJ1Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFERTcxMkQxODYxMkFDMTAw
NzM0MTkyIC8qIFRvdWNoRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDMzNEQ5MTQ1
QTAwNkYwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDczMyw2
ICszMDgwOCw3IEBACiAJCQkJRDc2MTNBNTAxNDc0RjEzRjAwREI4NjA2IC8qIFdlYktpdE5hbWVk
Rmxvdy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyog
V2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1REVCREEzMTZGQjkwODcw
MDgzNkZFMCAvKiBXZWJLaXRQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxRjQxQTZCMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUMwRkYyNDBFNENFQjZFMDA3
RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
Q0YzMzJFMEYyQjlBMjUwMDRCNjc5NSAvKiBXZWJMYXllci5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTA3MDlENzhFMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261125</attachid>
            <date>2015-09-14 13:11:20 -0700</date>
            <delta_ts>2015-09-14 13:40:11 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>768871</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGYzMTQ1MWYuLmNhMzNmZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMCw2ICsxMCw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01v
ZHVsZXMvaW5kZXhlZGRiIgorICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvaW5kaWV1aSIKICAgICAiJHtXRUJD
T1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNvbnRyb2xzLyIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9k
dWxlcy9tZWRpYXNlc3Npb24iCkBAIC04NDQsMTIgKzg0NSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCiAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAot
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcAogICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmQuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAog
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtODYyLDE1ICs4NTksMzEgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlRGF0
YS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAK
LSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCi0gICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAKLSAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHAKIAorICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKKyAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNrZW5kLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCisgICAgTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCisgICAgTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKyAgICBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAK
KyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmNwcAorICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeUZhY3RvcnkuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4
LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5jcHAK
KyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKKyAgICBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwCisgICAgTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAKKwogICAgIE1vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKIAogICAgIE1vZHVsZXMvbWVkaWFz
ZXNzaW9uL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNj
ZmFhYi4uZjU4Yjg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDE1LTA5LTE0ICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgY3VycmVu
dCBjb25jcmV0ZSBJREIgaW1wbGVtZW50YXRpb24gdG8gIkxlZ2FjeSIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxMTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5n
ZSBpbiBiZWhhdmlvcikuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBJREwgYmluZGluZ3Mg
YWJzdHJhY3QuCisgICAgICAgIEl0IHRoZW4gcmVuYW1lcyB0aGUgY3VycmVudCBjb25jcmV0ZSBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhlIGJpbmRpbmdzIGZyb20gIklEQiIgdG8gIkxlZ2FjeSIuCisg
ICAgICAgIEZpbmFsbHkgaXQgbW92ZXMgdGhvc2UgZmlsZXMgYW5kIHRoZWlyIHN1cHBvcnQgY2xh
c3NlcyB0byBhICJsZWdhY3kiIHN1YmZvbGRlci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5j
cHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcDoKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmg6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbDoK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0Lmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJDYWxsYmFja3MuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmguCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmQuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUJh
Y2tlbmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nRGVsZXRlQ2Fs
bC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVu
ZGluZ0RlbGV0ZUNhbGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURC
UGVuZGluZ09wZW5DYWxsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJQZW5kaW5nT3BlbkNhbGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmQuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRp
b25zLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rp
b25CYWNrZW5kT3BlcmF0aW9ucy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3JXaXRoVmFsdWUuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0
aFZhbHVlLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lE
YXRhYmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lG
YWN0b3J5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eUZhY3RvcnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJ
bmRleC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5SW5k
ZXguaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9i
amVjdFN0b3JlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPYmplY3RTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rp
b24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVy
c2lvbkNoYW5nZUV2ZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorCiAyMDE1LTA5LTE0ICBHeXV5b3VuZyBL
aW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBSZW1vdmUgY3Jl
YXRlKCkgZmFjdG9yeSBmdW5jdGlvbiBpbiBFdmFzR0xDb250ZXh0IGFuZCBFdmFzR0xTdXJmYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9N
V2luZG93SW5kZXhlZERhdGFiYXNlLmNwcAppbmRleCAyYTFhZTNjLi5kMDVkMjJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRv
d0luZGV4ZWREYXRhYmFzZS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJJREJGYWN0b3J5LmgiCisjaW5jbHVkZSAiTGVnYWN5RmFjdG9yeS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCkBAIC0xMTIs
NyArMTEyLDcgQEAgSURCRmFjdG9yeSogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjppbmRleGVk
REIoKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9pZGJGYWN0b3J5KQot
ICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+ZGF0YWJhc2VQ
cm92aWRlcigpLmlkYkZhY3RvcnlCYWNrZW5kKCkpOworICAgICAgICBtX2lkYkZhY3RvcnkgPSBM
ZWdhY3lGYWN0b3J5OjpjcmVhdGUocGFnZS0+ZGF0YWJhc2VQcm92aWRlcigpLmlkYkZhY3RvcnlC
YWNrZW5kKCkpOwogCiAgICAgcmV0dXJuIG1faWRiRmFjdG9yeS5nZXQoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCmluZGV4IDgyN2E0Y2QuLjRiMjg2
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcApAQCAt
MSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0y
OCwxOTEgKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1
ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiSURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURC
S2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiRE9NU3Ry
aW5nTGlzdC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SURCQW55PiBJ
REJBbnk6OmNyZWF0ZUludmFsaWQoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55
KFVuZGVmaW5lZFR5cGUpKTsKLX0KLQotUGFzc1JlZlB0cjxJREJBbnk+IElEQkFueTo6Y3JlYXRl
TnVsbCgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoTnVsbFR5cGUpKTsKLX0K
LQotUGFzc1JlZlB0cjxJREJBbnk+IElEQkFueTo6Y3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkodmFsdWUpKTsKLX0KLQot
SURCQW55OjpJREJBbnkoVHlwZSB0eXBlKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX2lu
dGVnZXIoMCkKLXsKLSAgICBBU1NFUlQodHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8IHR5cGUgPT0g
TnVsbFR5cGUpOwotfQotCi1JREJBbnk6On5JREJBbnkoKQotewotfQotCi1QYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IElEQkFueTo6ZG9tU3RyaW5nTGlzdCgpCi17Ci0gICAgQVNTRVJUKG1fdHlw
ZSA9PSBET01TdHJpbmdMaXN0VHlwZSk7Ci0gICAgcmV0dXJuIG1fZG9tU3RyaW5nTGlzdDsKLX0K
LQotUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQkFueTo6aWRiQ3Vyc29yKCkKLXsKLSAgICBBU1NF
UlQobV90eXBlID09IElEQkN1cnNvclR5cGUpOwotICAgIHJldHVybiBtX2lkYkN1cnNvcjsKLX0K
LQotUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkFueTo6aWRiQ3Vyc29yV2l0aFZh
bHVlKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvcldpdGhWYWx1ZVR5cGUpOwot
ICAgIHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKLX0KLQotUGFzc1JlZlB0cjxJREJEYXRh
YmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJE
YXRhYmFzZVR5cGUpOwotICAgIHJldHVybiBtX2lkYkRhdGFiYXNlOwotfQotCi1QYXNzUmVmUHRy
PElEQkZhY3Rvcnk+IElEQkFueTo6aWRiRmFjdG9yeSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9
PSBJREJGYWN0b3J5VHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiRmFjdG9yeTsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJJbmRleD4gSURCQW55OjppZGJJbmRleCgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9
PSBJREJJbmRleFR5cGUpOwotICAgIHJldHVybiBtX2lkYkluZGV4OwotfQotCi1QYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9iamVjdFN0b3JlKCkKLXsKLSAgICBBU1NFUlQo
bV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiT2JqZWN0U3Rv
cmU7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rp
b24oKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCVHJhbnNhY3Rpb25UeXBlKTsKLSAgICBy
ZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIElEQkFueTo6c2NyaXB0VmFsdWUoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gU2NyaXB0
VmFsdWVUeXBlKTsKLSAgICByZXR1cm4gbV9zY3JpcHRWYWx1ZTsKLX0KLQotY29uc3QgU3RyaW5n
JiBJREJBbnk6OnN0cmluZygpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBTdHJpbmdUeXBlKTsK
LSAgICByZXR1cm4gbV9zdHJpbmc7Ci19Ci0KLWludDY0X3QgSURCQW55OjppbnRlZ2VyKCkKLXsK
LSAgICBBU1NFUlQobV90eXBlID09IEludGVnZXJUeXBlKTsKLSAgICByZXR1cm4gbV9pbnRlZ2Vy
OwotfQotCi1JREJBbnk6OklEQkFueShQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVlKQot
ICAgIDogbV90eXBlKERPTVN0cmluZ0xpc3RUeXBlKQotICAgICwgbV9kb21TdHJpbmdMaXN0KHZh
bHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFueTo6SURCQW55KFBhc3NSZWZQ
dHI8SURCQ3Vyc29yV2l0aFZhbHVlPiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJREJDdXJzb3JXaXRo
VmFsdWVUeXBlKQotICAgICwgbV9pZGJDdXJzb3JXaXRoVmFsdWUodmFsdWUpCi0gICAgLCBtX2lu
dGVnZXIoMCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoUGFzc1JlZlB0cjxJREJDdXJzb3I+IHZh
bHVlKQotICAgIDogbV90eXBlKElEQkN1cnNvclR5cGUpCi0gICAgLCBtX2lkYkN1cnNvcih2YWx1
ZSkKLSAgICAsIG1faW50ZWdlcigwKQotewotfQotCi1JREJBbnk6OklEQkFueShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlPiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJREJEYXRhYmFzZVR5cGUpCi0gICAg
LCBtX2lkYkRhdGFiYXNlKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFu
eTo6SURCQW55KFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gdmFsdWUpCi0gICAgOiBtX3R5cGUoSURC
RmFjdG9yeVR5cGUpCi0gICAgLCBtX2lkYkZhY3RvcnkodmFsdWUpCi0gICAgLCBtX2ludGVnZXIo
MCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoUGFzc1JlZlB0cjxJREJJbmRleD4gdmFsdWUpCi0g
ICAgOiBtX3R5cGUoSURCSW5kZXhUeXBlKQotICAgICwgbV9pZGJJbmRleCh2YWx1ZSkKLSAgICAs
IG1faW50ZWdlcigwKQotewotfQotCi1JREJBbnk6OklEQkFueShQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJREJUcmFuc2FjdGlvblR5cGUpCi0gICAgLCBt
X2lkYlRyYW5zYWN0aW9uKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFu
eTo6SURCQW55KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IHZhbHVlKQotICAgIDogbV90eXBl
KElEQk9iamVjdFN0b3JlVHlwZSkKLSAgICAsIG1faWRiT2JqZWN0U3RvcmUodmFsdWUpCi0gICAg
LCBtX2ludGVnZXIoMCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIHZhbHVlKQotICAgIDogbV90eXBlKFNjcmlwdFZhbHVlVHlwZSkKLSAgICAs
IG1fc2NyaXB0VmFsdWUodmFsdWUpCi0gICAgLCBtX2ludGVnZXIoMCkKLXsKLX0KLQotSURCQW55
OjpJREJBbnkoY29uc3QgSURCS2V5UGF0aCYgdmFsdWUpCi0gICAgOiBtX3R5cGUoS2V5UGF0aFR5
cGUpCi0gICAgLCBtX2lkYktleVBhdGgodmFsdWUpCi0gICAgLCBtX2ludGVnZXIoMCkKLXsKLX0K
LQotSURCQW55OjpJREJBbnkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShTdHJp
bmdUeXBlKQotICAgICwgbV9zdHJpbmcodmFsdWUpCi0gICAgLCBtX2ludGVnZXIoMCkKLXsKLX0K
LQotSURCQW55OjpJREJBbnkoaW50NjRfdCB2YWx1ZSkKLSAgICA6IG1fdHlwZShJbnRlZ2VyVHlw
ZSkKLSAgICAsIG1faW50ZWdlcih2YWx1ZSkKK0lEQkFueTo6SURCQW55KCkKIHsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkFueS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgKaW5kZXgg
ZDcyODQ1Ni4uYTU3NTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQW55LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmgKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
ICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJBbnlf
aApAQCAtNTAsMjkgKzUwLDcgQEAgY2xhc3MgSURCVHJhbnNhY3Rpb247CiAKIGNsYXNzIElEQkFu
eSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPElEQkFueT4gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlSW52YWxpZCgpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlTnVsbCgpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkFueT4gY3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGUoVCog
aWRiT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoaWRi
T2JqZWN0KSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQW55PiBjcmVhdGUoY29uc3QgVCYgaWRiT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoaWRiT2JqZWN0KSk7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGUo
UGFzc1JlZlB0cjxUPiBpZGJPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkFueShpZGJPYmplY3QpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
QW55PiBjcmVhdGUoaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSURCQW55KHZhbHVlKSk7Ci0gICAgfQotICAgIH5JREJBbnkoKTsKKyAgICB2aXJ0dWFs
IH5JREJBbnkoKSB7IH0KIAogICAgIGVudW0gVHlwZSB7CiAgICAgICAgIFVuZGVmaW5lZFR5cGUg
PSAwLApAQCAtOTEsNTEgKzY5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgS2V5UGF0aFR5cGUsCiAg
ICAgfTsKIAotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIC8v
IFVzZSB0eXBlKCkgdG8gZmlndXJlIG91dCB3aGljaCBvbmUgb2YgdGhlc2UgeW91J3JlIGFsbG93
ZWQgdG8gY2FsbC4KLSAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3Qo
KTsKLSAgICBQYXNzUmVmUHRyPElEQkN1cnNvcj4gaWRiQ3Vyc29yKCk7Ci0gICAgUGFzc1JlZlB0
cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlkYkN1cnNvcldpdGhWYWx1ZSgpOwotICAgIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNlKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJGYWN0b3J5
PiBpZGJGYWN0b3J5KCk7Ci0gICAgUGFzc1JlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKTsKLSAg
ICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpOwotICAgIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uKCk7Ci0gICAgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKCk7Ci0gICAgaW50NjRfdCBpbnRlZ2VyKCk7
Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKTsKLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoKCkgeyByZXR1cm4gbV9pZGJLZXlQYXRoOyB9OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0
IElEQkFueShUeXBlKTsKLSAgICBleHBsaWNpdCBJREJBbnkoUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0Pik7Ci0gICAgZXhwbGljaXQgSURCQW55KFBhc3NSZWZQdHI8SURCQ3Vyc29yPik7Ci0gICAg
ZXhwbGljaXQgSURCQW55KFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPik7Ci0gICAgZXhw
bGljaXQgSURCQW55KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKLSAgICBleHBsaWNpdCBJREJB
bnkoUGFzc1JlZlB0cjxJREJGYWN0b3J5Pik7Ci0gICAgZXhwbGljaXQgSURCQW55KFBhc3NSZWZQ
dHI8SURCSW5kZXg+KTsKLSAgICBleHBsaWNpdCBJREJBbnkoUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4pOwotICAgIGV4cGxpY2l0IElEQkFueShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPik7
Ci0gICAgZXhwbGljaXQgSURCQW55KGNvbnN0IElEQktleVBhdGgmKTsKLSAgICBleHBsaWNpdCBJ
REJBbnkoY29uc3QgU3RyaW5nJik7Ci0gICAgZXhwbGljaXQgSURCQW55KGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJik7Ci0gICAgZXhwbGljaXQgSURCQW55KGludDY0X3QpOwotCi0gICAg
Y29uc3QgVHlwZSBtX3R5cGU7CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QoKSA9IDA7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkN1cnNvcj4gaWRiQ3Vyc29yKCkgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlkYkN1cnNvcldpdGhWYWx1
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNl
KCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBpZGJGYWN0b3J5KCkg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKSA9IDA7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9u
KCkgPSAwOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlw
dFZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBpbnRlZ2VyKCkgPSAwOworICAgIHZp
cnR1YWwgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKCkgPSAwOwogCi0gICAgLy8gT25seSBvbmUgb2YgdGhlIGZvbGxvd2lu
ZyBzaG91bGQgZXZlciBiZSBpbiB1c2UgYXQgYW55IGdpdmVuIHRpbWUuCi0gICAgY29uc3QgUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IG1fZG9tU3RyaW5nTGlzdDsKLSAgICBjb25zdCBSZWZQdHI8SURC
Q3Vyc29yPiBtX2lkYkN1cnNvcjsKLSAgICBjb25zdCBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVl
PiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2U+IG1f
aWRiRGF0YWJhc2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkZhY3Rvcnk+IG1faWRiRmFjdG9yeTsK
LSAgICBjb25zdCBSZWZQdHI8SURCSW5kZXg+IG1faWRiSW5kZXg7Ci0gICAgY29uc3QgUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBtX2lkYk9iamVjdFN0b3JlOwotICAgIGNvbnN0IFJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gbV9pZGJUcmFuc2FjdGlvbjsKLSAgICBjb25zdCBJREJLZXlQYXRoIG1faWRi
S2V5UGF0aDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX3NjcmlwdFZhbHVl
OwotICAgIGNvbnN0IFN0cmluZyBtX3N0cmluZzsKLSAgICBjb25zdCBpbnQ2NF90IG1faW50ZWdl
cjsKK3Byb3RlY3RlZDoKKyAgICBJREJBbnkoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxi
YWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NTcyZjEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIElEQkNhbGxiYWNrc19oCi0jZGVmaW5lIElEQkNhbGxiYWNrc19o
Ci0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0j
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
RE9NU3RyaW5nTGlzdDsKLWNsYXNzIElEQkN1cnNvckJhY2tlbmQ7Ci1jbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmQ7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLXN0cnVjdCBJREJEYXRhYmFzZU1ldGFk
YXRhOwotCi1jbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDYWxsYmFj
a3M+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJDYWxsYmFja3MoKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pID0gMDsKLSAg
ICAvLyBGcm9tIElEQkZhY3Rvcnkud2Via2l0R2V0RGF0YWJhc2VOYW1lcygpCi0gICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KSA9IDA7Ci0gICAgLy8g
RnJvbSBJREJPYmplY3RTdG9yZS9JREJJbmRleC5vcGVuQ3Vyc29yKCksIElEQkluZGV4Lm9wZW5L
ZXlDdXJzb3IoKQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPikgPSAwOwotICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUuYWRkKCkvcHV0KCks
IElEQkluZGV4LmdldEtleSgpCi0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PElEQktleT4pID0gMDsKLSAgICAvLyBGcm9tIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmdldCgp
L2NvdW50KCksIGFuZCB2YXJpb3VzIG1ldGhvZHMgdGhhdCB5aWVsZCBudWxsL3VuZGVmaW5lZC4K
LSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAw
OwotICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXguZ2V0KCkgKHdpdGgga2V5IGlu
amVjdGlvbikKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQYXRoJikgPSAwOwotICAgIC8v
IEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXguY291bnQoKQotICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoaW50NjRfdCB2YWx1ZSkgPSAwOwotCi0gICAgLy8gRnJvbSBJREJGYWN0b3IuZGVs
ZXRlRGF0YWJhc2UoKSwgSURCT2JqZWN0U3RvcmUvSURCSW5kZXguZ2V0KCksIElEQk9iamVjdFN0
b3JlLmRlbGV0ZSgpLCBJREJPYmplY3RTdG9yZS5jbGVhcigpCi0gICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcygpID0gMDsKLQotICAgIC8vIEZyb20gSURCQ3Vyc29yLmFkdmFuY2UoKS9jb250aW51
ZSgpCi0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pID0gMDsK
LQotICAgIC8vIEZyb20gSURCRmFjdG9yeS5vcGVuKCkvZGVsZXRlRGF0YWJhc2UoKQotICAgIHZp
cnR1YWwgdm9pZCBvbkJsb2NrZWQodWludDY0X3QgLyogZXhpc3RpbmdWZXJzaW9uICovKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgLy8gRnJvbSBJREJGYWN0b3J5Lm9wZW4oKQotICAg
IHZpcnR1YWwgdm9pZCBvblVwZ3JhZGVOZWVkZWQodWludDY0X3QgLyogb2xkVmVyc2lvbiAqLywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkNhbGxiYWNrc19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCBjNDAxMWRjLi44NjM4MGUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAK
QEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpA
QCAtMjgsMjQgKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0jaW5j
bHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNpbmNsdWRlICJJ
REJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPGlu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KLSNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxJREJDdXJzb3I+
IElEQkN1cnNvcjo6Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJREJSZXF1ZXN0KiByZXF1ZXN0
LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorSURCQ3Vyc29y
OjpJREJDdXJzb3IoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkN1cnNvcihiYWNr
ZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsKIH0KIAogY29u
c3QgQXRvbWljU3RyaW5nJiBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKQpAQCAtNzIsMjMxICs2
MCw2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb25QcmV2VW5pcXVl
KCkKICAgICByZXR1cm4gcHJldnVuaXF1ZTsKIH0KIAotCi1JREJDdXJzb3I6OklEQkN1cnNvcihQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uIGRpcmVjdGlvbiwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IG1fYmFja2VuZChiYWNrZW5kKQotICAg
ICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAg
LCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAg
ICwgbV90cmFuc2FjdGlvbk5vdGlmaWVyKHRyYW5zYWN0aW9uLCB0aGlzKQotICAgICwgbV9nb3RW
YWx1ZShmYWxzZSkKLXsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBBU1NFUlQobV9yZXF1
ZXN0KTsKLSAgICBBU1NFUlQobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0
b3JlVHlwZSB8fCBtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6SURCSW5kZXhUeXBlKTsKLSAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci19Ci0KLUlEQkN1cnNvcjo6fklEQkN1cnNvcigpCi17
Ci19Ci0KLWNvbnN0IFN0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb24oKSBjb25zdAotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yOjpkaXJlY3Rpb24iKTsKLSAgICByZXR1cm4gZGly
ZWN0aW9uVG9TdHJpbmcobV9kaXJlY3Rpb24pOwotfQotCi1jb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYgSURCQ3Vyc29yOjprZXkoKSBjb25zdAotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCQ3Vyc29yOjprZXkiKTsKLSAgICByZXR1cm4gbV9jdXJyZW50S2V5VmFsdWU7Ci19Ci0KLWNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25z
dAotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yOjpwcmltYXJ5S2V5Iik7Ci0gICAg
cmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXlWYWx1ZTsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIElEQkN1cnNvcjo6dmFsdWUoKSBjb25zdAotewotICAgIExPRyhTdG9yYWdl
QVBJLCAiSURCQ3Vyc29yOjp2YWx1ZSIpOwotICAgIHJldHVybiBtX2N1cnJlbnRWYWx1ZTsKLX0K
LQotSURCQW55KiBJREJDdXJzb3I6OnNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc291
cmNlLmdldCgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNvcjo6dXBk
YXRlIik7Ci0KLSAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNS
ZWFkT25seSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5
RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotICAgIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwotICAg
IGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKLSAgICBpZiAo
dXNlc0luTGluZUtleXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgobV9yZXF1ZXN0LT5yZXF1ZXN0U3Rh
dGUoKS0+ZXhlYygpLCB2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgIGlmICgha2V5UGF0aEtleSB8
fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSkgewotICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb2JqZWN0U3RvcmUt
PnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSwgSURCQW55OjpjcmVhdGUodGhp
cyksIHN0YXRlLCB2YWx1ZSwgbV9jdXJyZW50UHJpbWFyeUtleSwgZWMpOwotfQotCi12b2lkIElE
QkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3I6OmFkdmFuY2Ui
KTsKLSAgICBpZiAoIW1fZ290VmFsdWUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcmVxdWVzdC0+c2V0UGVuZGluZ0N1cnNvcih0aGlz
KTsKLSAgICBtX2dvdFZhbHVlID0gZmFsc2U7Ci0gICAgbV9iYWNrZW5kLT5hZHZhbmNlKGNvdW50
LCBtX3JlcXVlc3QsIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQotdm9pZCBJREJDdXJzb3I6
OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUp
OwotICAgIGNvbnRpbnVlRnVuY3Rpb24oa2V5LnJlbGVhc2UoKSwgZWMpOwotfQotCi12b2lkIElE
QkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJz
b3I6OmNvbnRpbnVlIik7Ci0gICAgaWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9nb3RWYWx1ZSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChrZXkpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudEtl
eSk7Ci0gICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
bjo6TmV4dCB8fCBtX2RpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbjo6TmV4
dE5vRHVwbGljYXRlKSB7Ci0gICAgICAgICAgICBpZiAoIW1fY3VycmVudEtleS0+aXNMZXNzVGhh
bihrZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6RGF0YUVycm9yOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgha2V5LT5pc0xlc3NUaGFuKG1fY3VycmVu
dEtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEYXRhRXJyb3I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlJ3JlIG5vdCB1c2luZyB0aGUgY29udGV4
dCBmcm9tIHdoZW4gY29udGludWUgd2FzIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhlIGNhbGxiYWNr
Ci0gICAgLy8gICAgICAgIHdpbGwgYmUgb24gdGhlIG9yaWdpbmFsIGNvbnRleHQgb3BlbkN1cnNv
ciB3YXMgY2FsbGVkIG9uLiBJcyB0aGlzIHJpZ2h0PwotICAgIG1fcmVxdWVzdC0+c2V0UGVuZGlu
Z0N1cnNvcih0aGlzKTsKLSAgICBtX2dvdFZhbHVlID0gZmFsc2U7Ci0gICAgbV9iYWNrZW5kLT5j
b250aW51ZUZ1bmN0aW9uKGtleSwgbV9yZXF1ZXN0LCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBl
YyA9IDA7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3I6OmRlbGV0ZSIpOwotICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIGlmICghbV9nb3RWYWx1ZSB8fCBpc0tleUN1cnNvcigpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24ocmVxdWVzdCwgZWMpOwot
ICAgIEFTU0VSVCghZWMpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotdm9p
ZCBJREJDdXJzb3I6OnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkKLXsKLSAgICBtX2JhY2tl
bmQtPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpj
bG9zZSgpCi17Ci0gICAgbV90cmFuc2FjdGlvbk5vdGlmaWVyLmN1cnNvckZpbmlzaGVkKCk7Ci0g
ICAgaWYgKG1fcmVxdWVzdCkgewotICAgICAgICBtX3JlcXVlc3QtPmZpbmlzaEN1cnNvcigpOwot
ICAgICAgICBtX3JlcXVlc3QgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBJREJDdXJzb3I6
OnNldFZhbHVlUmVhZHkoRE9NUmVxdWVzdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiB2YWx1ZSkKLXsKLSAgICBtX2N1cnJlbnRLZXkgPSBrZXk7Ci0gICAgbV9jdXJyZW50S2V5
VmFsdWUgPSBpZGJLZXlUb1NjcmlwdFZhbHVlKHN0YXRlLCBtX2N1cnJlbnRLZXkpOwotCi0gICAg
bV9jdXJyZW50UHJpbWFyeUtleSA9IHByaW1hcnlLZXk7Ci0gICAgbV9jdXJyZW50UHJpbWFyeUtl
eVZhbHVlID0gaWRiS2V5VG9TY3JpcHRWYWx1ZShzdGF0ZSwgbV9jdXJyZW50UHJpbWFyeUtleSk7
Ci0KLSAgICBpZiAoIWlzS2V5Q3Vyc29yKCkpIHsKLSAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7Ci0gICAgICAgIGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEgPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEo
KTsKLSAgICAgICAgaWYgKG1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgJiYgIW1ldGFkYXRhLmtleVBh
dGguaXNOdWxsKCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBSZWZQdHI8SURCS2V5
PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgobV9y
ZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCB2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7
Ci0gICAgICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFs
KG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKTsKLSNlbmRpZgotICAgICAgICAgICAgYm9vbCBp
bmplY3RlZCA9IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShtX3JlcXVlc3QtPnJlcXVlc3RT
dGF0ZSgpLCBtX2N1cnJlbnRQcmltYXJ5S2V5LCB2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gd2F5IHRvIHJlcG9ydCBlcnJvcnMgaGVy
ZS4gTW92ZSB0aGlzIGludG8gb25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbiBzbyB0aGF0IHdlIGNh
biBhYm9ydCB0aGUgdHJhbnNhY3Rpb24gdGhlcmUuIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkyMjc4Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGluamVj
dGVkLCBpbmplY3RlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9jdXJyZW50VmFsdWUgPSB2
YWx1ZTsKLQotICAgIG1fZ290VmFsdWUgPSB0cnVlOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBJREJDdXJzb3I6OmVmZmVjdGl2ZU9iamVjdFN0b3JlKCkKLXsKLSAgICBpZiAobV9z
b3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSkKLSAgICAgICAgcmV0
dXJuIG1fc291cmNlLT5pZGJPYmplY3RTdG9yZSgpOwotICAgIFJlZlB0cjxJREJJbmRleD4gaW5k
ZXggPSBtX3NvdXJjZS0+aWRiSW5kZXgoKTsKLSAgICByZXR1cm4gaW5kZXgtPm9iamVjdFN0b3Jl
KCk7Ci19Ci0KIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIElEQkN1cnNvcjo6c3RyaW5nVG9E
aXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGlmIChkaXJlY3Rpb25TdHJpbmcgPT0gSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4
IDdkZGRjYWIuLjI0MTQ0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5oCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYg
SURCQ3Vyc29yX2gKQEAgLTQyLDcgKzQyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RE9NUmVxdWVzdFN0YXRlOwogY2xhc3MgSURCQW55OwogY2xhc3MgSURCQ2FsbGJhY2tzOwotY2xh
c3MgSURCQ3Vyc29yQmFja2VuZDsKIGNsYXNzIElEQlJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCkBAIC01OCw1MCArNTcsMjYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBzdHJpbmdUb0RpcmVjdGlvbihjb25zdCBTdHJpbmcm
IG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBkaXJlY3Rpb25Ub1N0cmluZyhJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtb2RlKTsK
IAotICAgIHN0YXRpYyBSZWY8SURCQ3Vyc29yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIElEQlJlcXVlc3QqLCBJREJBbnkq
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2aXJ0dWFsIH5JREJDdXJzb3IoKTsKKyAg
ICB2aXJ0dWFsIH5JREJDdXJzb3IoKSB7IH0KIAogICAgIC8vIEltcGxlbWVudCB0aGUgSURMCi0g
ICAgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24oKSBjb25zdDsKLSAgICBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5KCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIHByaW1hcnlLZXkoKSBjb25zdDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUoKSBjb25zdDsKLSAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OwotCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFkdmFuY2UodW5zaWdu
ZWQgbG9uZywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHByaW1hcnlLZXkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJREJB
bnkqIHNvdXJjZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9u
ZywgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBvdmVybG9hZCBpcyB1bm5lZWRlZC4KLSAgICB2b2lkIGNv
bnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IGNvbnRpbnVlRnVuY3Rpb24oc3RhdGljX2Nhc3Q8SURCS2V5Kj4obnVsbHB0ciksIGVjKTsg
fQotICAgIHZvaWQgY29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxl
ckNhbGxiYWNrKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgc2V0VmFsdWVSZWFkeShE
T01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwotICAgIFBhc3NSZWZQdHI8SURC
S2V5PiBpZGJQcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50UHJpbWFyeUtleTsgfQorICAg
IHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBF
eGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIElEQkN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSURCUmVxdWVzdCosIElEQkFueSog
c291cmNlLCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBJREJDdXJzb3IoKTsKIAotcHJpdmF0ZToKLSAg
ICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotCi0g
ICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCUmVx
dWVzdD4gbV9yZXF1ZXN0OwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIG1f
ZGlyZWN0aW9uOwotICAgIFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKLSAgICBJREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNv
ck5vdGlmaWVyIG1fdHJhbnNhY3Rpb25Ob3RpZmllcjsKLSAgICBib29sIG1fZ290VmFsdWU7Ci0g
ICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBoZWxkIGJlY2F1c2UgbV9iYWNrZW5kIG1heSBhZHZhbmNl
IHdoaWxlIHRoZXkKLSAgICAvLyBhcmUgc3RpbGwgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHN1Y2Nl
c3MgaGFuZGxlcnMuCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9jdXJyZW50S2V5VmFs
dWU7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9jdXJyZW50UHJpbWFyeUtleVZhbHVl
OwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKLSAgICBSZWZQdHI8SURCS2V5PiBt
X2N1cnJlbnRQcmltYXJ5S2V5OwotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVu
dFZhbHVlOworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCmluZGV4IGE1MDcxMjEuLjY0YjI5MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAt
MjYsNiArMjYsNyBAQAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAg
RW5hYmxlZEF0UnVudGltZT1JbmRleGVkREIsCisgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCiBd
IGludGVyZmFjZSBJREJDdXJzb3IgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgc291
cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGlyZWN0aW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwMWM3ZS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNs
dWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3Iu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCi0jaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCU2VydmVyQ29u
bmVjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JC
YWNrZW5kKGludDY0X3QgY3Vyc29ySUQsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpCi0gICAgOiBtX3Rhc2tU
eXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0gICAgLCBtX3Ry
YW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKLSAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9y
ZUlEKQotICAgICwgbV9jdXJzb3JJRChjdXJzb3JJRCkKLSAgICAsIG1fc2F2ZWRDdXJzb3JJRCgw
KQotICAgICwgbV9jbG9zZWQoZmFsc2UpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJP
cGVuQ3Vyc29yKHRoaXMpOwotfQotCi1JREJDdXJzb3JCYWNrZW5kOjp+SURCQ3Vyc29yQmFja2Vu
ZCgpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7Ci19
Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRp
b25Db2RlJikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNvckJhY2tlbmQ6OmNvbnRp
bnVlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVy
YXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXksIGNhbGxiYWNrcykpOwotfQotCi12b2lk
IElEQkN1cnNvckJhY2tlbmQ6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjphZHZhbmNlIik7Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgY291bnQs
IGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OmRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6ZGVsZXRlIik7Ci0gICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZTo6UmVhZE9ubHkpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlS
YW5nZTo6Y3JlYXRlKHByaW1hcnlLZXkoKSk7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSUQsIGtleVJh
bmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5k
OjpjbG9zZSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjpjbG9z
ZSIpOwotICAgIGNsZWFyKCk7Ci0gICAgbV9jbG9zZWQgPSB0cnVlOwotICAgIG1fc2F2ZWRDdXJz
b3JJRCA9IDA7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZDo6dXBkYXRlQ3Vyc29yRGF0YShJ
REJLZXkqIGtleSwgSURCS2V5KiBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXIqIHZhbHVlQnVmZmVy
KQotewotICAgIG1fY3VycmVudEtleSA9IGtleTsKLSAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0g
cHJpbWFyeUtleTsKLSAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlciA9IHZhbHVlQnVmZmVyOwotfQot
Ci12b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNsZWFyKCkKLXsKLSAgICBtX2N1cnNvcklEID0gMDsK
LSAgICBtX2N1cnJlbnRLZXkgPSBudWxscHRyOwotICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBu
dWxscHRyOwotICAgIG1fY3VycmVudFZhbHVlQnVmZmVyID0gbnVsbHB0cjsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNGQxZjkuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBJREJDdXJzb3JCYWNr
ZW5kX2gKLSNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsK
LQotY2xhc3MgSURCQ3Vyc29yQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkN1cnNvckJh
Y2tlbmQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0
ZShpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJz
b3JJRCwgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCB0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmVJRCkpOwotICAgIH0KLSAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJh
Y2tlbmQ+IGNyZWF0ZShpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vy
c29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwg
Y3Vyc29yVHlwZSwgdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlEKSk7Ci0gICAg
fQotICAgIH5JREJDdXJzb3JCYWNrZW5kKCk7Ci0KLSAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQg
bG9uZywgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBvc3RTdWNjZXNz
SGFuZGxlckNhbGxiYWNrKCkgeyB9Ci0KLSAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudEtleS5nZXQoKTsgfQotICAgIElEQktleSogcHJpbWFyeUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCk7IH0KLSAgICBTaGFyZWRCdWZmZXIqIHZh
bHVlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1
cnNvclR5cGU6OktleU9ubHkpID8gbnVsbHB0ciA6IG1fY3VycmVudFZhbHVlQnVmZmVyLmdldCgp
OyB9Ci0gICAgdm9pZCB1cGRhdGVDdXJzb3JEYXRhKElEQktleSosIElEQktleSogcHJpbWFyeUtl
eSwgU2hhcmVkQnVmZmVyKiB2YWx1ZUJ1ZmZlcik7Ci0KLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAg
ICBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
c29yVHlwZTsgfQotCi0gICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29ySUQ7
IH0KLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24oKSB7IHJldHVybiAq
bV90cmFuc2FjdGlvbjsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotICAgIHZvaWQgc2V0U2F2ZWRD
dXJzb3JJRChpbnQ2NF90IGN1cnNvcklEKSB7IG1fc2F2ZWRDdXJzb3JJRCA9IGN1cnNvcklEOyB9
Ci0KLXByaXZhdGU6Ci0gICAgSURCQ3Vyc29yQmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRl
eGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZCYsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCk7Ci0KLSAgICBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JUeXBl
IG1fY3Vyc29yVHlwZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5z
YWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotCi0gICAgaW50NjRf
dCBtX2N1cnNvcklEOwotICAgIGludDY0X3QgbV9zYXZlZEN1cnNvcklEOwotCi0gICAgUmVmUHRy
PElEQktleT4gbV9jdXJyZW50S2V5OwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1h
cnlLZXk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9jdXJyZW50VmFsdWVCdWZmZXI7Ci0K
LSAgICBib29sIG1fY2xvc2VkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJDdXJzb3JCYWNr
ZW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2RhMTY5Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kT3BlcmF0aW9ucy5oIgotCi0jaW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbi5o
IgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8
Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJh
Y2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ip
IHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBtX2N1cnNvci0+Y2xlYXIoKTsK
LSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgfSBlbHNl
IGlmICgha2V5KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNv
IG5vIGtleSwgdGhlbiB0aGUgY3Vyc29yIHJlYWNoZWQgdGhlIGVuZC4KLSAgICAgICAgICAgIG1f
Y3Vyc29yLT5jbGVhcigpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0
aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihudWxscHRyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBtX2N1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShrZXkuZ2V0KCksIHByaW1hcnlLZXku
Z2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3Moa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBGSVhNRTogQ3Vyc29yIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gcGFzcyBhbG9u
ZyBhbiBlcnJvciBpbnN0ZWFkIG9mIHN1Y2Nlc3MKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNr
KCk7Ci0gICAgfTsKLQotICAgIG1fY3Vyc29yLT50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmN1cnNvckFkdmFuY2UoKm1fY3Vyc29yLCAqdGhpcywgY2FsbGJhY2sp
OwotfQotCi12b2lkIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8Q3Vyc29ySXRlcmF0aW9u
T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgYXV0byBjYWxsYmFjayA9IFt0aGlzLCBv
cGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZUJ1ZmZlciwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikgewotICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIG1fY3Vyc29yLT5jbGVhcigpOwotICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICB9IGVsc2UgaWYgKCFrZXkpIHsK
LSAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZXJyb3IgYnV0IGFsc28gbm8ga2V5LCB0aGVu
IHRoZSBjdXJzb3IgcmVhY2hlZCB0aGUgZW5kLgotICAgICAgICAgICAgbV9jdXJzb3ItPmNsZWFy
KCk7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJl
ZEJ1ZmZlcio+KG51bGxwdHIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY3Vy
c29yLT51cGRhdGVDdXJzb3JEYXRhKGtleS5nZXQoKSwgcHJpbWFyeUtleS5nZXQoKSwgdmFsdWVC
dWZmZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXksIHBy
aW1hcnlLZXksIHZhbHVlQnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBD
dXJzb3Igb3BlcmF0aW9ucyBzaG91bGQgYmUgYWJsZSB0byBwYXNzIGFsb25nIGFuIGVycm9yIGlu
c3RlYWQgb2Ygc3VjY2VzcwotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKLSAgICB9Owot
Ci0gICAgbV9jdXJzb3ItPnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9u
KCkuY3Vyc29ySXRlcmF0ZSgqbV9jdXJzb3IsICp0aGlzLCBjYWxsYmFjayk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRUQoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
Mjc5NzdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnNfaAotI2RlZmluZSBJREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9uc19oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
LQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJPcGVyYXRpb24u
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9w
ZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0
aW9uKGN1cnNvciwga2V5LCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGUg
ZmluYWw7Ci0KLSAgICBpbnQ2NF90IGN1cnNvcklEKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3It
PmlkKCk7IH0KLSAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZD4gY3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAg
ICAgICAgLCBtX2tleShrZXkpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gbV9jdXJzb3I7Ci0gICAg
UmVmUHRyPElEQktleT4gbV9rZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Ci19OwotCi1jbGFzcyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJh
dGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEN1cnNvckFkdmFuY2VPcGVyYXRpb24oY3Vyc29yLCBjb3VudCwgY2FsbGJh
Y2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCBj
dXJzb3JJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLT5pZCgpOyB9Ci0gICAgdW5zaWduZWQg
bG9uZyBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KLQotcHJpdmF0ZToKLSAgICBD
dXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29y
LCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAgICAgICAgLCBtX2NvdW50KGNvdW50KQot
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQkN1cnNvckJhY2tlbmQ+IG1fY3Vyc29yOwotICAgIHVuc2lnbmVkIGxvbmcgbV9jb3Vu
dDsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2Vu
ZGlmIC8vIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCmluZGV4IDkw
ZWM1N2EuLjVjZTQ3MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yOCwyOCArMjgsOSBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgi
Ci0jaW5jbHVkZSAiSURCS2V5LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0
cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29y
V2l0aFZhbHVlKGJhY2tlbmQsIGRpcmVjdGlvbiwgcmVxdWVzdCwgc291cmNlLCB0cmFuc2FjdGlv
bikpOwotfQotCi1QYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQ3Vyc29yV2l0aFZh
bHVlOjpmcm9tQ3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBwcnBDdXJzb3IpCi17Ci0gICAg
UmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gY3Vyc29yV2l0aFZhbHVlKHN0YXRpY19jYXN0PElE
QkN1cnNvcldpdGhWYWx1ZSo+KHBycEN1cnNvci5nZXQoKSkpOwotICAgIHJldHVybiBjdXJzb3JX
aXRoVmFsdWUucmVsZWFzZSgpOwotfQotCi1JREJDdXJzb3JXaXRoVmFsdWU6OklEQkN1cnNvcldp
dGhWYWx1ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6
Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IElEQkN1cnNvcihiYWNr
ZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pCi17Ci19Ci0KLUlE
QkN1cnNvcldpdGhWYWx1ZTo6fklEQkN1cnNvcldpdGhWYWx1ZSgpCitJREJDdXJzb3JXaXRoVmFs
dWU6OklEQkN1cnNvcldpdGhWYWx1ZSgpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmgKaW5kZXggOTZmOTZiMC4u
YzUzMTlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yV2l0aFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yV2l0aFZhbHVlLmgKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAog
I2lmbmRlZiBJREJDdXJzb3JXaXRoVmFsdWVfaApAQCAtMzQsMjIgKzM0LDE2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlIDogcHVibGljIElEQkN1cnNv
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24sIElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGZyb21DdXJzb3IoUGFzc1Jl
ZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2aXJ0dWFsIH5JREJDdXJzb3JXaXRoVmFsdWUoKTsKLQot
ICAgIC8vIFRoZSB2YWx1ZSBhdHRyaWJ1dGUgZGVmaW5lZCBpbiB0aGUgSURMIGlzIHNpbXBseSBp
bXBsZW1lbnRlZCBpbiBJREJDdXJzb3IgKGJ1dCBub3QgZXhwb3NlZCB2aWEKLSAgICAvLyBpdHMg
SURMKS4gVGhpcyBpcyB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBtb3JlIHNpbXBsZSB3aGls
ZSBtYXRjaGluZyB3aGF0IHRoZSBzcGVjIHNheXMuCisgICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0
aFZhbHVlKCkgeyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3Io
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIElEQkN1cnNvcldpdGhWYWx1
ZSgpOwogCi1wcml2YXRlOgotICAgIElEQkN1cnNvcldpdGhWYWx1ZShQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSURCUmVxdWVzdCosIElE
QkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1
cnNvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgogCi0jZW5kaWYgLy8gSURCQ3Vyc29yV2l0aFZhbHVlX2gK
KyNlbmRpZiAvLyBMZWdhY3lDdXJzb3JXaXRoVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKaW5kZXggMjQ2
ZGMwNi4uMzQ3MWEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCkBAIC0yNiw2ICsyNiw3IEBACiBbCiAgICAg
Q29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKICAgICBFbmFibGVkQXRSdW50aW1lPUluZGV4
ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIElEQkN1cnNvcldp
dGhWYWx1ZSA6IElEQkN1cnNvciB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGFueSB2YWx1ZTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5j
cHAKaW5kZXggOWVlZjlhZi4uMmQ2NDc5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yOCwzNzEgKzI4LDExIEBACiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNp
bmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
Ci0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIK
LSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNp
bmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVu
dC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCi0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxs
U3RhY2suaD4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8SURCRGF0YWJhc2U+IElEQkRhdGFiYXNlOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmQ+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi17Ci0gICAgUmVmPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZigqbmV3
IElEQkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjYWxsYmFja3MpKSk7Ci0gICAgaWRiRGF0
YWJhc2UtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgIHJldHVybiBpZGJEYXRhYmFzZTsKLX0KLQot
SURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCitJREJEYXRhYmFzZTo6SURCRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250
ZXh0KQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX2Nsb3NlUGVuZGluZyhmYWxz
ZSkKLSAgICAsIG1faXNDbG9zZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNl
KQotICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhjYWxsYmFja3MpCi17Ci0gICAgLy8gV2UgcGFz
cyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0g
ICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLUlEQkRhdGFiYXNlOjp+SURCRGF0
YWJhc2UoKQotewotICAgIC8vIFRoaXMgZG9lcyB3aGF0IElEQkRhdGFiYXNlOjpjbG9zZSBkb2Vz
LCBidXQgd2l0aG91dCBhbnkgcmVmL2RlcmVmIG9mIHRoZQotICAgIC8vIGRhdGFiYXNlIHNpbmNl
IGl0IGlzIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVsZXRlZC4gVGhlIGxvZ2lj
IGhlcmUKLSAgICAvLyBpcyBhbHNvIHNpbXBsZXIgc2luY2Ugd2Uga25vdyB0aGVyZSBhcmUgbm8g
dHJhbnNhY3Rpb25zIChzaW5jZSB0aGV5IHJlZiB0aGUKLSAgICAvLyBkYXRhYmFzZSB3aGVuIHRo
ZXkgYXJlIGFsaXZlKS4KLQotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwot
Ci0gICAgaWYgKCFtX2Nsb3NlUGVuZGluZykgewotICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRy
dWU7Ci0gICAgICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAg
fQotCi0gICAgaWYgKGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
LSAgICAgICAgLy8gUmVtb3ZlIGFueSBwZW5kaW5nIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVk
dWxlZCB0byBmaXJlIG9uIHRoaXMKLSAgICAgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBo
YXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgotICAgICAgICAv
LyBjb25uZWN0aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rp
b24gaXMgYmVpbmcKLSAgICAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCi0g
ICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKQotICAgICAgICAgICAg
Y29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KCpldmVudCk7Ci0gICAgfQotfQotCi1p
bnQ2NF90IElEQkRhdGFiYXNlOjpuZXh0VHJhbnNhY3Rpb25JZCgpCi17Ci0gICAgLy8gT25seSBr
ZWVwIGEgMzItYml0IGNvdW50ZXIgdG8gYWxsb3cgcG9ydHMgdG8gdXNlIHRoZSBvdGhlciAzMgot
ICAgIC8vIGJpdHMgb2YgdGhlIGlkLgotICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4g
Y3VycmVudFRyYW5zYWN0aW9uSWQ7Ci0KLSAgICByZXR1cm4gKytjdXJyZW50VHJhbnNhY3Rpb25J
ZDsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb25DcmVhdGVkKElEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwotICAgIEFTU0VS
VCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKLSAgICBtX3Ry
YW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24tPmlkKCksIHRyYW5zYWN0aW9uKTsKLQotICAgIGlm
ICh0cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgQVNTRVJUKCFtX3Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uID0gdHJhbnNhY3Rpb247Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlOjp0cmFuc2Fj
dGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQo
dHJhbnNhY3Rpb24pOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbi0+aWQoKSkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24t
PmlkKCkpID09IHRyYW5zYWN0aW9uKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNh
Y3Rpb24tPmlkKCkpOwotCi0gICAgaWYgKHRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkg
ewotICAgICAgICBBU1NFUlQobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rp
b24pOwotICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKG1fY2xvc2VQZW5kaW5nICYmIG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkK
LSAgICAgICAgY2xvc2VDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6Om9uQWJv
cnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklk
KSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5vbkFib3J0KGVycm9y
KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9u
SWQpCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQp
KTsKLSAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPm9uQ29tcGxldGUoKTsK
LX0KLQotUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVO
YW1lcygpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFt
ZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3Jl
IDogbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMudmFsdWVzKCkpCi0gICAgICAgIG9iamVjdFN0b3Jl
TmFtZXMtPmFwcGVuZChvYmplY3RTdG9yZS5uYW1lKTsKLSAgICBvYmplY3RTdG9yZU5hbWVzLT5z
b3J0KCk7Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOwotfQotCi11aW50
NjRfdCBJREJEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgLy8gTm9JbnRWZXJzaW9u
IGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHNob3VsZG4ndCBi
ZSBleHBvc2VkIHRvIHNjcmlwdC4KLSAgICAvLyBEZWZhdWx0SW50VmVyc2lvbiBzaG91bGQgYmUg
ZXhwb3NlZCBpbnN0ZWFkLgotICAgIHJldHVybiBtX21ldGFkYXRhLnZlcnNpb24gIT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uID8gbV9tZXRhZGF0YS52ZXJzaW9uIDogc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKTsK
LX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCS2V5UGF0aCBrZXlQYXRoOwotICAgIGJvb2wgYXV0
b0luY3JlbWVudCA9IGZhbHNlOwotICAgIGlmICghb3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7Ci0gICAgICAgIFN0cmluZyBrZXlQYXRoU3RyaW5nOwotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBrZXlQYXRoQXJyYXk7Ci0gICAgICAgIGlmIChvcHRpb25zLmdldCgia2V5UGF0aCIsIGtleVBh
dGhBcnJheSkpCi0gICAgICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aChrZXlQYXRoQXJyYXkp
OwotICAgICAgICBlbHNlIGlmIChvcHRpb25zLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygi
a2V5UGF0aCIsIGtleVBhdGhTdHJpbmcpKQotICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBh
dGgoa2V5UGF0aFN0cmluZyk7Ci0KLSAgICAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNyZW1lbnQi
LCBhdXRvSW5jcmVtZW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlT2JqZWN0U3RvcmUo
bmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2U6OmNyZWF0
ZU9iamVjdFN0b3JlIik7Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBp
ZiAoY29udGFpbnNPYmplY3RTdG9yZShuYW1lKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGlmICgha2V5UGF0aC5pc051bGwoKSAmJiAha2V5UGF0aC5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGlmIChhdXRvSW5jcmVtZW50ICYmICgoa2V5UGF0aC50eXBlKCkg
PT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiBrZXlQYXRoLnN0cmluZygpLmlzRW1wdHkoKSkg
fHwga2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1fbWV0YWRhdGEu
bWF4T2JqZWN0U3RvcmVJZCArIDE7Ci0gICAgbV9iYWNrZW5kLT5jcmVhdGVPYmplY3RTdG9yZSht
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJZCwgbmFtZSwga2V5
UGF0aCwgYXV0b0luY3JlbWVudCk7Ci0KLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFk
YXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRhdGFi
YXNlQmFja2VuZDo6TWluaW11bUluZGV4SWQpOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBtX3ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0
KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7Ci0gICAgKyttX21ldGFkYXRhLm1heE9iamVjdFN0b3Jl
SWQ7Ci0KLSAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVk
KG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJh
c2U6OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbikgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpOwotICAg
IGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZSht
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKLSAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2NvcGUsIGNvbnN0
IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24iKTsKLSAgICBpZiAoIXNjb3BlLnNpemUo
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbjo6c3RyaW5nVG9Nb2RlKG1vZGVTdHJpbmcsIGVj
KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uIHx8IG1fY2xvc2VQZW5kaW5nKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7Ci0gICAgZm9yIChhdXRv
JiBuYW1lIDogc2NvcGUpIHsKLSAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gZmluZE9i
amVjdFN0b3JlSWQobmFtZSk7Ci0gICAgICAgIGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0gICAgICAgIG9iamVjdFN0b3JlSWRzLmFwcGVuZChvYmplY3RTdG9yZUlkKTsKLSAgICB9
Ci0KLSAgICBpbnQ2NF90IHRyYW5zYWN0aW9uSWQgPSBuZXh0VHJhbnNhY3Rpb25JZCgpOwotICAg
IG1fYmFja2VuZC0+Y3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgbV9kYXRhYmFzZUNh
bGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1vZGUpOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNh
Y3Rpb25JZCwgc2NvcGUsIG1vZGUsIHRoaXMpOwotICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxl
YXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHN0
b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgp
OwotICAgIHN0b3JlTmFtZXMtPmFwcGVuZChzdG9yZU5hbWUpOwotICAgIHJldHVybiB0cmFuc2Fj
dGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCBlYyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2U6OmZvcmNlQ2xvc2UoKQotewotICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBtX3RyYW5z
YWN0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENF
UFRJT04pOwotICAgIHRoaXMtPmNsb3NlKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmNsb3Nl
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlOjpjbG9zZSIpOwotICAgIGlm
IChtX2Nsb3NlUGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbG9zZVBlbmRpbmcg
PSB0cnVlOwotCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgY2xv
c2VDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbigp
Ci17Ci0gICAgQVNTRVJUKG1fY2xvc2VQZW5kaW5nKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuaXNFbXB0eSgpKTsKLQotICAgIC8vIENsb3NpbmcgbWF5IHJlc3VsdCBpbiBkZWFsbG9jYXRp
bmcgdGhlIGxhc3QgdHJhbnNhY3Rpb24sIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkZWxldGluZwot
ICAgIC8vIHRoaXMgSURCRGF0YWJhc2UuIFdlIG5lZWQgdGhlIGRlYWxsb2NhdGlvbiB0byBoYXBw
ZW4gYWZ0ZXIgd2UgYXJlIHRocm91Z2guCi0gICAgUmVmPElEQkRhdGFiYXNlPiBwcm90ZWN0KCp0
aGlzKTsKLQotICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0KLSAg
ICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBFdmVudFF1ZXVlJiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7Ci0gICAgLy8gUmVtb3ZlIGFueSBwZW5kaW5nIHZl
cnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMKLSAgICAvLyBjb25u
ZWN0aW9uLiBUaGV5IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgdGhlIGJhY2tlbmQgd2hl
biBhbm90aGVyCi0gICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBm
cm9udGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCi0gICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNv
dWxkIGZpcmUuCi0gICAgZm9yIChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwotICAgIH0KLQotICAgIG1faXND
bG9zZWQgPSB0cnVlOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UodWlu
dDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKLXsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkRhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UiKTsKLSAgICBpZiAobV9jb250ZXh0
U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9jbG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChu
ZXdWZXJzaW9uICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Ci0gICAgZW5x
dWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1Zl
cnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIEFT
U0VSVCghbV9jb250ZXh0U3RvcHBlZCk7Ci0gICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKLSAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRo
aXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVF
dmVudChldmVudC5nZXQoKSk7Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwot
fQotCi1ib29sIElEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQi
KTsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5n
ZUV2ZW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZl
bnQuZ2V0KCkpCi0gICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKLX0K
LQotaW50NjRfdCBJREJEYXRhYmFzZTo6ZmluZE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAotewotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX21ldGFkYXRhLm9i
amVjdFN0b3JlcykgewotICAgICAgICBpZiAob2JqZWN0U3RvcmUudmFsdWUubmFtZSA9PSBuYW1l
KSB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUua2V5ICE9IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGE6OkludmFsaWRJZCk7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUua2V5
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJ
bnZhbGlkSWQ7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2U6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0Ci17Ci0gICAgLy8gVGhlIHNjcmlwdCB3cmFwcGVyIG11c3Qgbm90IGJlIGNvbGxlY3RlZCBi
ZWZvcmUgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3IKLSAgICAvLyB3ZSBjYW4ndCBmaXJlIGEgInZl
cnNpb25jaGFuZ2UiIGV2ZW50IHRvIGxldCBzY3JpcHQgbWFudWFsbHkgY2xvc2UgdGhlIGNvbm5l
Y3Rpb24uCi0gICAgcmV0dXJuICFtX2Nsb3NlUGVuZGluZyAmJiBoYXNFdmVudExpc3RlbmVycygp
ICYmICFtX2NvbnRleHRTdG9wcGVkOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpzdG9wKCkKLXsK
LSAgICAvLyBTdG9wIGZpcmVzIGF0IGEgZGV0ZXJtaW5pc3RpYyB0aW1lLCBzbyB3ZSBuZWVkIHRv
IGNhbGwgY2xvc2UgaW4gaXQuCi0gICAgY2xvc2UoKTsKLQotICAgIG1fY29udGV4dFN0b3BwZWQg
PSB0cnVlOwotfQotCi1jb25zdCBjaGFyKiBJREJEYXRhYmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJJREJEYXRhYmFzZSI7Ci19Ci0KLWJvb2wgSURCRGF0
YWJhc2U6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2lz
Q2xvc2VkOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAppbmRleCA0ODk5NzYzLi5hNWE5NjEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKQEAg
LTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJEYXRhYmFzZV9oCkBA
IC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkV2ZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxi
YWNrcy5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCkBAIC00OSw5MCArNDgs
MjkgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAotY2xhc3MgSURCRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZT4sIHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBFdmVudFRhcmdldFdp
dGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIElEQkRhdGFiYXNl
IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+LCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxl
LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKLSAgICB+SURCRGF0YWJhc2UoKTsKLQotICAgIHZv
aWQgc2V0TWV0YWRhdGEoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpIHsgbV9t
ZXRhZGF0YSA9IG1ldGFkYXRhOyB9Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkNyZWF0ZWQoSURCVHJh
bnNhY3Rpb24qKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoSURCVHJhbnNhY3Rpb24q
KTsKKyAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZSgpIHsgfQogCiAgICAgLy8gSW1wbGVtZW50IHRo
ZSBJREwKLSAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEu
bmFtZTsgfQotICAgIHVpbnQ2NF90IHZlcnNpb24oKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHNjb3BlLCBjb25zdCBTdHJpbmcmIG1v
ZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCAqc2Nv
cGUsIG1vZGUsIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
Y2xvc2UoKTsKLQotICAgIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzCi0gICAgdmlydHVhbCB2b2lk
IG9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9u
KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2NF90LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZShpbnQ2NF90KTsKLQotICAg
IC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIElEQkRhdGFiYXNl
RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyBy
ZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAg
IGJvb2wgaXNDbG9zZVBlbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlUGVuZGluZzsgfQot
ICAgIHZvaWQgZm9yY2VDbG9zZSgpOwotICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0
YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9Ci0gICAgdm9pZCBlbnF1ZXVlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4pOwotCi0gICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNo
RXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
IG92ZXJyaWRlOwotCi0gICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFt
ZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkOwotICAgIH0KKyAgICB2aXJ0
dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDY0X3Qg
dmVyc2lvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0ID0gMDsKIAotICAgIElEQkRhdGFiYXNlQmFja2Vu
ZCogYmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7
CiAKLSAgICBzdGF0aWMgaW50NjRfdCBuZXh0VHJhbnNhY3Rpb25JZCgpOworICAgIHZpcnR1YWwg
Y29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0ID0gMDsKIAogICAgIHVz
aW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZT46OmRlcmVmOwogCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAg
IElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZD4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKLQotICAgIC8v
IEFjdGl2ZURPTU9iamVjdCBBUEkuCi0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0gICAgY29u
c3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgLy8gRXZlbnRU
YXJnZXQKLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBmaW5hbCB7
IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBm
aW5hbCB7IGRlcmVmKCk7IH0KLQotICAgIHZvaWQgY2xvc2VDb25uZWN0aW9uKCk7Ci0KLSAgICBJ
REJEYXRhYmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZD4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb247Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0
aW9uKj4gVHJhbnNhY3Rpb25NYXA7Ci0gICAgVHJhbnNhY3Rpb25NYXAgbV90cmFuc2FjdGlvbnM7
Ci0KLSAgICBib29sIG1fY2xvc2VQZW5kaW5nOwotICAgIGJvb2wgbV9pc0Nsb3NlZDsKLSAgICBi
b29sIG1fY29udGV4dFN0b3BwZWQ7Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9u
Y2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRvIGJlIGZpcmVkIG9uIHRoaXMKLSAgICAvLyBkYXRhYmFz
ZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwgdGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgotICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOworcHJvdGVjdGVkOgorICAg
IElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbAppbmRleCBlZDk4ZmVkLi5hNWRlZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCkBAIC0zMSw2ICszMSw3IEBACiAg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAog
ICAgIEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9u
LAogXSBpbnRlcmZhY2UgSURCRGF0YWJhc2UgOiBFdmVudFRhcmdldCB7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGxvbmcgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwOWU0ZTI3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmQuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURC
Q3Vyc29yQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCUmVj
b3JkSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKLSNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZWY8SURCRGF0YWJhc2VCYWNrZW5kPiBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnksIElEQlNlcnZlckNvbm5lY3Rpb24mIHNl
cnZlckNvbm5lY3Rpb24pCi17Ci0gICAgUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9
IGFkb3B0UmVmKCpuZXcgSURCRGF0YWJhc2VCYWNrZW5kKG5hbWUsIHVuaXF1ZUlkZW50aWZpZXIs
IGZhY3RvcnksIHNlcnZlckNvbm5lY3Rpb24pKTsKLSAgICBiYWNrZW5kLT5vcGVuSW50ZXJuYWxB
c3luYygpOwotICAgIAotICAgIHJldHVybiBiYWNrZW5kOwotfQotCi1JREJEYXRhYmFzZUJhY2tl
bmQ6OklEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dW5pcXVlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnksIElE
QlNlcnZlckNvbm5lY3Rpb24mIHNlcnZlckNvbm5lY3Rpb24pCi0gICAgOiBtX21ldGFkYXRhKG5h
bWUsIEludmFsaWRJZCwgMCwgSW52YWxpZElkKQotICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlk
ZW50aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fc2VydmVyQ29ubmVj
dGlvbihzZXJ2ZXJDb25uZWN0aW9uKQotICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKHN0
ZDo6bWFrZV91bmlxdWU8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4oKSkKLSAgICAsIG1fY2xv
c2luZ0Nvbm5lY3Rpb24oZmFsc2UpCi0gICAgLCBtX2RpZE9wZW5JbnRlcm5hbChmYWxzZSkKLXsK
LSAgICBBU1NFUlQoIW1fbWV0YWRhdGEubmFtZS5pc051bGwoKSk7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjphZGRPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZSwgaW50NjRfdCBuZXdNYXhPYmplY3RTdG9yZUlkKQotewotICAgIEFTU0VS
VCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUuaWQpKTsKLSAg
ICBpZiAobmV3TWF4T2JqZWN0U3RvcmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZh
bGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA8IG5l
d01heE9iamVjdFN0b3JlSWQpOwotICAgICAgICBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQg
PSBuZXdNYXhPYmplY3RTdG9yZUlkOwotICAgIH0KLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5zZXQob2JqZWN0U3RvcmUuaWQsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAg
ICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkp
OwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgsIGludDY0X3QgbmV3TWF4SW5kZXhJZCkK
LXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQoIW9iamVj
dFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXguaWQpKTsKLSAgICBvYmplY3RTdG9yZS5pbmRl
eGVzLnNldChpbmRleC5pZCwgaW5kZXgpOwotICAgIGlmIChuZXdNYXhJbmRleElkICE9IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUubWF4
SW5kZXhJZCA8IG5ld01heEluZGV4SWQpOwotICAgICAgICBvYmplY3RTdG9yZS5tYXhJbmRleElk
ID0gbmV3TWF4SW5kZXhJZDsKLSAgICB9Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0
KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OnJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQot
ewotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9y
ZUlkKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmplY3RT
dG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKLSAgICBvYmplY3RTdG9yZS5pbmRleGVz
LnJlbW92ZShpbmRleElkKTsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0
U3RvcmVJZCwgb2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6b3Bl
bkludGVybmFsQXN5bmMoKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHNlbGYg
PSB0aGlzOwotICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFz
ZU1ldGFkYXRhKFtzZWxmXShjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9v
bCBzdWNjZXNzKSB7Ci0gICAgICAgIHNlbGYtPmRpZE9wZW5JbnRlcm5hbEFzeW5jKG1ldGFkYXRh
LCBzdWNjZXNzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRpZE9w
ZW5JbnRlcm5hbEFzeW5jKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBib29s
IHN1Y2Nlc3MpCi17Ci0gICAgbV9kaWRPcGVuSW50ZXJuYWwgPSB0cnVlOwotCi0gICAgaWYgKCFz
dWNjZXNzKSB7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbWV0YWRhdGEgPSBtZXRhZGF0YTsKLQotICAgIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kOjp+SURCRGF0YWJh
c2VCYWNrZW5kKCkKLXsKLSAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZCht
X2lkZW50aWZpZXIpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlT2JqZWN0
U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVP
YmplY3RTdG9yZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikK
LSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVCghbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBvYmplY3RTdG9yZUlk
LCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok1pbmltdW1JbmRl
eElkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEpOwotICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3Jl
TWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0
ZU9iamVjdFN0b3JlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24ob2JqZWN0U3RvcmVNZXRhZGF0YSk7Ci0g
ICAgcmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZUluZGV4Iik7Ci0gICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3Jl
SWQpOwotCi0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQp
KTsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIGluZGV4TWV0YWRhdGEobmFtZSwgaW5kZXhJ
ZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpOwot
Ci0gICAgYWRkSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSwgaW5kZXhJZCk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotewotICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVJbmRleCIpOwotICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
OjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlk
KTsKLQotICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsK
LSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gb2JqZWN0U3RvcmUu
aW5kZXhlcy5nZXQoaW5kZXhJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVJ
bmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsKLQotICAgIHJlbW92
ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZDo6Y29tbWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICAvLyBUaGUgZnJvbnRl
bmQgc3VnZ2VzdHMgdGhhdCB3ZSBjb21taXQsIGJ1dCB3ZSBtYXkgaGF2ZSBwcmV2aW91c2x5IGlu
aXRpYXRlZCBhbiBhYm9ydCwgYW5kIHNvIGhhdmUgZGlzcG9zZWQgb2YgdGhlIHRyYW5zYWN0aW9u
LiBvbkFib3J0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGF0Y2hlZCB0byB0aGUgZnJvbnRlbmQsIHNv
IGl0IHdpbGwgZmluZCBvdXQgYWJvdXQgdGhhdCBhc3luY2hyb25vdXNseS4KLSAgICBpZiAobV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCi0gICAgICAgIG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKS0+Y29tbWl0KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gSWYgdGhlIHRy
YW5zYWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5
IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQu
Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAg
ICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KCk7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9u
IGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNr
ZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0gICAgaWYg
KG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmQ6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpnZXQiKTsKLSAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IHRyYW5zYWN0aW9uLT5zY2hlZHVsZUdldE9wZXJhdGlvbihtX21ldGFkYXRhLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6
S2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcyk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCRGF0YWJhc2VCYWNrZW5kOjpwdXQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRy
YW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICgh
dHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1v
ZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotCi0gICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0
b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOwotCi0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlUHV0T3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cyk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8aW50NjRfdCwgMT4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzLCAx
PiYgaW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5k
OjpzZXRJbmRleEtleXMiKTsKLSAgICBBU1NFUlQocHJwUHJpbWFyeUtleSk7Ci0gICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSUQpKTsKLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSUQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24tPnNldEluZGV4S2V5
cyh0cmFuc2FjdGlvbklELCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlELCBtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJRCksICpwcmltYXJ5S2V5LCBpbmRleElEcywg
aW5kZXhLZXlzLCBbdHJhbnNhY3Rpb25dKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpIHsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0
KGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnNldEluZGV4
ZXNSZWFkeShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QsIGNvbnN0IFZlY3RvcjxpbnQ2
NF90LCAxPiYgaW5kZXhJZHMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJh
Y2tlbmQ6OnNldEluZGV4ZXNSZWFkeSIpOwotCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oaW5kZXhJZHMuc2l6ZSgpKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBr
ZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkN1
cnNvciIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlv
bihvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBrZXlPbmx5ID8g
SW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5IDogSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpL
ZXlBbmRWYWx1ZSwgdGFza1R5cGUsIGNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZDo6Y291bnQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlm
ICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgdHJhbnNhY3Rpb24t
PnNjaGVkdWxlQ291bnRPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGNhbGxiYWNrcyk7Ci19Ci0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJhbmdl
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlUmFu
Z2UiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVs
ZXRlUmFuZ2VPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcyk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5k
OjpjbGVhck9iamVjdFN0b3JlICVsbGkgaW4gdHJhbnNhY3Rpb24gJWxsaSIsIHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4ob2JqZWN0U3RvcmVJZCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odHJhbnNh
Y3Rpb25JZCkpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKLXsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUo
KSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgewotICAgICAg
ICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwotICAgIH0KLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQoKSkpOwotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOwotICAgIGlmICh0
cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9u
Q2hhbmdlKSB7Ci0gICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAgICBtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24gPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgewot
ICAgICAgICAvLyBJZiB0aGlzIHdhcyBhbiBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSB3
aWxsIGJlIGEgInNlY29uZAotICAgICAgICAvLyBoYWxmIiBvcGVuIGNhbGwgd2FpdGluZyBmb3Ig
dXMgaW4gcHJvY2Vzc1BlbmRpbmdDYWxscy4KLSAgICAgICAgLy8gRklYTUU6IFdoZW4gd2Ugbm8g
bG9uZ2VyIHN1cHBvcnQgc2V0VmVyc2lvbiwgYXNzZXJ0IHN1Y2ggYSB0aGluZy4KLSAgICAgICAg
aWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVmVyc2lvbiBjaGFuZ2UgdHJhbnNh
Y3Rpb24gd2FzIGFib3J0ZWQgaW4gdXBncmFkZW5lZWRlZCBldmVudCBoYW5kbGVyLiIpKTsKLSAg
ICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuID0gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdl
KQotICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci19Ci0KLXNpemVfdCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmNvbm5lY3Rpb25Db3VudCgpCi17Ci0gICAgLy8gVGhpcyBkb2VzIG5vdCBpbmNs
dWRlIHBlbmRpbmcgb3BlbiBjYWxscywgYXMgdGhvc2Ugc2hvdWxkIG5vdCBibG9jayB2ZXJzaW9u
IGNoYW5nZXMgYW5kIGRlbGV0ZXMuCi0gICAgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQu
c2l6ZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cHJvY2Vzc1BlbmRpbmdDYWxs
cygpCi17Ci0gICAgLy8gcHJvY2Vzc1BlbmRpbmdDYWxscygpIHdpbGwgYmUgY2FsbGVkIGFnYWlu
IGFmdGVyIG9wZW5JbnRlcm5hbEFzeW5jKCkgY29tcGxldGVzLgotICAgIGlmICghbV9kaWRPcGVu
SW50ZXJuYWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxm
T3BlbikgewotICAgICAgICBBU1NFUlQobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPnZlcnNpb24o
KSA9PSBtX21ldGFkYXRhLnZlcnNpb24pOwotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAh
PSBJbnZhbGlkSWQpOwotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tz
KCktPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKLSAgICAgICAgbV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW4gPSBudWxscHRyOwotICAgICAgICAvLyBGYWxsIHRocm91Z2ggd2hlbiBj
b21wbGV0ZSwgYXMgcGVuZGluZyBkZWxldGVzIG1heSBiZSAocGFydGlhbGx5KSB1bmJsb2NrZWQu
Ci0gICAgfQotCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXMgb25seSBhbiBvcHRpbWl6
YXRpb24gdG8gcmVkdWNlIHF1ZXVlLWNodXJuIGFuZAotICAgIC8vIG5vdCBuZWNlc3NhcnkgZm9y
IGNvcnJlY3RuZXNzOyBkZWxldGVEYXRhYmFzZSBhbmQgb3BlbkNvbm5lY3Rpb24gd2lsbAotICAg
IC8vIHJlcXVldWUgdGhlaXIgY2FsbHMgaWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICBp
ZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSAmJiBpc0RlbGV0ZURhdGFi
YXNlQmxvY2tlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgd2hpbGUgKCFtX3BlbmRpbmdEZWxl
dGVDYWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdE
ZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VG
aXJzdCgpOwotICAgICAgICBtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLmFkZChw
ZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOwotICAgICAgICBkZWxldGVEYXRhYmFzZUFz
eW5jKHBlbmRpbmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7Ci0gICAgfQotCi0gICAgLy8gZGVs
ZXRlRGF0YWJhc2VBc3luYyBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCi0gICAgQVNTRVJU
KG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUg
YW55IGRhdGFiYXNlIGRlbGV0aW9ucyB3YWl0aW5nIGZvciBjb21wbGV0aW9uLCB3ZSdyZSBkb25l
IGZvciBub3cuCi0gICAgLy8gRnVydGhlciBjYWxsYmFja3Mgd2lsbCBiZSBoYW5kbGVkIGluIGEg
ZnV0dXJlIGNhbGwgdG8gcHJvY2Vzc1BlbmRpbmdDYWxscygpLgotICAgIGlmICghbV9kZWxldGVD
YWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKHRydWUpOwotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6cHJvY2Vzc1BlbmRpbmdPcGVuQ2FsbHMoYm9vbCBzdWNjZXNzKQotewot
ICAgIC8vIE9wZW4gY2FsbHMgY2FuIGJlIHJlcXVldWVkIGlmIGFuIG9wZW4gY2FsbCBzdGFydGVk
IGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24gb3IgZGVsZXRlcyB0aGUgZGF0YWJhc2UuCi0g
ICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4+IHBlbmRpbmdPcGVu
Q2FsbHM7Ci0gICAgbV9wZW5kaW5nT3BlbkNhbGxzLnN3YXAocGVuZGluZ09wZW5DYWxscyk7Ci0K
LSAgICB3aGlsZSAoIXBlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IHBlbmRpbmdP
cGVuQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAg
ICBpZiAobV9tZXRhZGF0YS5pZCA9PSBJbnZhbGlkSWQpIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGRhdGFiYXNlIHdhcyBkZWxldGVkIHRoZW4gcXVpY2tseSByZS1vcGVuZWQuCi0gICAgICAg
ICAgICAgICAgLy8gb3BlbkludGVybmFsQXN5bmMoKSB3aWxsIHJlY3JlYXRlIGl0IGluIHRoZSBi
YWNraW5nIHN0b3JlIGFuZCB0aGVuIHJlc3VtZSBwcm9jZXNzaW5nIHBlbmRpbmcgY2FsbGJhY2tz
LgotICAgICAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbHMucHJlcGVuZChXVEY6Om1vdmUocGVu
ZGluZ09wZW5DYWxsKSk7Ci0gICAgICAgICAgICAgICAgcGVuZGluZ09wZW5DYWxscy5zd2FwKG1f
cGVuZGluZ09wZW5DYWxscyk7Ci0KLSAgICAgICAgICAgICAgICBvcGVuSW50ZXJuYWxBc3luYygp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9w
ZW5Db25uZWN0aW9uSW50ZXJuYWwocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGlu
Z09wZW5DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPnRyYW5zYWN0
aW9uSWQoKSwgcGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgICAgICBpZiAocGVuZGluZ09wZW5D
YWxsLT52ZXJzaW9uKCkgPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQotICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3
aXRoIG5vIHZlcnNpb24gc3BlY2lmaWVkLiI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRh
dGFiYXNlIHdpdGggdmVyc2lvbiAlbGx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSkpOwotICAgICAgICAgICAgcGVuZGluZ09wZW5D
YWxsLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgbWVzc2FnZSkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRf
dCB0cmFuc2FjdGlvbklELCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlIG1vZGUpCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4g
dHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNyZWF0ZSh0aGlzLCB0cmFuc2Fj
dGlvbklELCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSURzLCBtb2RlKTsKLQotICAgIEFTU0VSVCgh
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JRCkpOwotICAgIG1fdHJhbnNhY3Rp
b25zLmFkZCh0cmFuc2FjdGlvbklELCB0cmFuc2FjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFz
ZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKQotewot
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJh
c2VDYWxsYmFja3M7Ci0KLSAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV91
bmlxdWU8SURCUGVuZGluZ09wZW5DYWxsPigqY2FsbGJhY2tzLCAqZGF0YWJhc2VDYWxsYmFja3Ms
IHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsKLQotICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0aW9uSW50ZXJuYWwoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
dWludDY0X3QgdmVyc2lvbikKLXsKLSAgICBBU1NFUlQobV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7
Ci0KLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0g
ICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERh
dGFiYXNlQ2FsbGJhY2tzOwotCi0gICAgLy8gV2UgaW5mZXIgdGhhdCB0aGUgZGF0YWJhc2UgZGlk
bid0IGV4aXN0IGZyb20gaXRzIGxhY2sgb2YgdmVyc2lvbi4KLSAgICBib29sIGlzTmV3RGF0YWJh
c2UgPSBtX21ldGFkYXRhLnZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uOwotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdElu
dFZlcnNpb24gJiYgIWlzTmV3RGF0YWJhc2UpIHsKLSAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChpc05ld0RhdGFiYXNlICYmIHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVm
YXVsdEludFZlcnNpb24pIHsKLSAgICAgICAgLy8gU3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlz
IHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0
byAxLgotICAgICAgICB2ZXJzaW9uID0gMTsKLSAgICB9Ci0KLSAgICBpZiAodmVyc2lvbiA+IG1f
bWV0YWRhdGEudmVyc2lvbiB8fCBtX21ldGFkYXRhLnZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6Tm9JbnRWZXJzaW9uKSB7Ci0gICAgICAgIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbihjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJzaW9uIDwgbV9tZXRhZGF0
YS52ZXJzaW9uICYmIG1fbWV0YWRhdGEudmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb24pIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZv
cm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICglbGx1KSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0
aW5nIHZlcnNpb24gKCVsbHUpLiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odmVy
c2lvbiksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9tZXRhZGF0YS52ZXJzaW9u
KSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCh2ZXJzaW9uID09IG1f
bWV0YWRhdGEudmVyc2lvbik7Ci0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJh
c2VDYWxsYmFja3MpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFk
YXRhKCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cnVuSW50VmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKLXsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJhY2tz
OwotICAgIEFTU0VSVChjYWxsYmFja3MpOwotICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0KSB7Ci0gICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRoZSBl
dmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGluZyBz
ZXQuCi0gICAgICAgIGlmIChjYWxsYmFjayAhPSBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAg
ICAgIGNhbGxiYWNrLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCByZXF1ZXN0
ZWRWZXJzaW9uKTsKLSAgICB9Ci0gICAgLy8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRp
bCBhbGwgdGhlIHZlcnNpb24gY2hhbmdlIGV2ZW50cyBhcmUKLSAgICAvLyBkZWxpdmVyZWQgYW5k
IHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNhbGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5n
Ci0gICAgLy8gb3IgZmlyaW5nIGEgYmxvY2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxk
IGJlIGNvbnNpc3RlbnQgd2l0aCBob3cKLSAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29y
cmVjdGx5KSBkaWQgaXQuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2Nr
ZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRpbCB0aGUgZnJvbnRlbmQKLSAgICAvLyB0ZWxscyB1cyB0
aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVudHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCi0gICAgaWYg
KGNvbm5lY3Rpb25Db3VudCgpKQotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFk
YXRhLnZlcnNpb24pOwotICAgIC8vIEZJWE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLgotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxz
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPElEQlBlbmRpbmdPcGVuQ2FsbD4oKmNhbGxiYWNrcywg
KmRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJ
ZHM7Ci0gICAgY3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgZGF0YWJhc2VDYWxsYmFj
a3MsIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNo
YW5nZSk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywg
ZGF0YWJhc2VDYWxsYmFja3MsIG1fbWV0YWRhdGEpOwotCi0gICAgQVNTRVJUKCFtX3BlbmRpbmdT
ZWNvbmRIYWxmT3Blbik7Ci0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VD
YWxsYmFja3MpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlRGF0YWJhc2Uo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKGlzRGVsZXRlRGF0
YWJhc2VCbG9ja2VkKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fZGF0YWJh
c2VDYWxsYmFja3NTZXQpIHsKLSAgICAgICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRoZSBl
dmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGluZyBz
ZXQuCi0gICAgICAgICAgICBjYWxsYmFjay0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEudmVy
c2lvbiwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJsb2Nr
ZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIFZl
cnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMw
Ci0gICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7Ci0gICAg
ICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPElEQlBlbmRp
bmdEZWxldGVDYWxsPihjYWxsYmFja3MucmVsZWFzZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgZGVsZXRlRGF0YWJhc2VBc3luYyhjYWxsYmFja3MucmVsZWFzZSgpKTsKLX0KLQot
Ym9vbCBJREJEYXRhYmFzZUJhY2tlbmQ6OmlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkKLXsKLSAg
ICByZXR1cm4gY29ubmVjdGlvbkNvdW50KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
OjpkZWxldGVEYXRhYmFzZUFzeW5jKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MpCi17Ci0gICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKLQotICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHNlbGYodGhpcyk7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+
ZGVsZXRlRGF0YWJhc2UobV9tZXRhZGF0YS5uYW1lLCBbc2VsZiwgY2FsbGJhY2tzXShib29sIHN1
Y2Nlc3MpIHsKLSAgICAgICAgc2VsZi0+bV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlv
bi5yZW1vdmUoY2FsbGJhY2tzKTsKLQotICAgICAgICAvLyBJZiB0aGlzIElEQkRhdGFiYXNlQmFj
a2VuZCB3YXMgY2xvc2VkIHdoaWxlIHdhaXRpbmcgZm9yIGRlbGV0ZURhdGFiYXNlIHRvIGNvbXBs
ZXRlLCBubyBwb2ludCBpbiBwZXJmb3JtaW5nIGFueSBjYWxsYmFja3MuCi0gICAgICAgIGlmICgh
c2VsZi0+bV9zZXJ2ZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICBzZWxmLT5tX21ldGFkYXRh
LmlkID0gSW52YWxpZElkOwotICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS52ZXJzaW9uID0g
SURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgICAgICAgICAgc2VsZi0+bV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgZGF0YWJhc2UuIikpOwotCi0gICAgICAgIHNl
bGYtPnByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxi
YWNrcykKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhj
YWxsYmFja3MpKTsKLQotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNr
cyk7Ci0gICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuICYmIG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuLT5kYXRhYmFzZUNhbGxiYWNrcygpID09IGNhbGxiYWNrcykgewotICAgICAgICBtX3Bl
bmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rp
b24gd2FzIGNsb3NlZC4iKSk7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuID0gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBwcm9jZXNzUGVuZGluZ0NhbGxzIGFsbG93cyB0aGUgaW5zcGVjdG9y
IHRvIHByb2Nlc3MgYSBwZW5kaW5nIG9wZW4gY2FsbAotICAgIC8vIGFuZCBjYWxsIGNsb3NlLCBy
ZWVudGVyaW5nIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UuIFRoZW4gdGhlCi0gICAgLy8gYmFj
a2VuZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBj
b25uZWN0aW9uLCBhbmQKLSAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxl
ZCBjbG9zZS4KLSAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBp
biBjYXNlIG9mIHJlZW50cmFuY3kuCi0gICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24o
bV9jbG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7Ci0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwot
Ci0gICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2Fz
ZXMgYmVsb3cuCi0gICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNh
bGxzLnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7Ci0gICAgICAgIFRy
YW5zYWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Ci0gICAgICAgIFJlZlB0
cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIp
OwotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogdHJhbnNhY3Rpb25zLnZhbHVlcygp
KQotICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLQotICAgICAgICBBU1NF
UlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKLQotICAgICAgICBtX3NlcnZlckNvbm5lY3Rp
b24tPmNsb3NlKCk7Ci0KLSAgICAgICAgLy8gVGhpcyBjaGVjayBzaG91bGQgb25seSBiZSBmYWxz
ZSBpbiB1bml0IHRlc3RzLgotICAgICAgICBBU1NFUlQobV9mYWN0b3J5KTsKLSAgICAgICAgaWYg
KG1fZmFjdG9yeSkKLSAgICAgICAgICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNr
ZW5kKG1faWRlbnRpZmllcik7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM4MTk5MjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kX2gKLSNkZWZp
bmUgSURCRGF0YWJhc2VCYWNrZW5kX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tz
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgotI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCIKLSNpbmNsdWRlICJJREJQ
ZW5kaW5nT3BlbkNhbGwuaCIKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCS2V5UGF0aDsKLWNsYXNzIElEQlNlcnZlckNv
bm5lY3Rpb247Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ7Ci1jbGFzcyBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1zdHJ1Y3QgSURCRGF0YWJh
c2VNZXRhZGF0YTsKLXN0cnVjdCBJREJJbmRleE1ldGFkYXRhOwotc3RydWN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGE7Ci0KLXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBJbmRleEtleXM7
Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmQ+IHsKLXB1YmxpYzoKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSosIElEQlNlcnZlckNvbm5lY3Rpb24mKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB+SURCRGF0YWJhc2VCYWNrZW5kKCk7Ci0KLSAgICBJREJTZXJ2ZXJDb25uZWN0aW9uJiBz
ZXJ2ZXJDb25uZWN0aW9uKCkgeyByZXR1cm4gbV9zZXJ2ZXJDb25uZWN0aW9uLmdldCgpOyB9Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotICAgIGludDY0X3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0gICAgdm9pZCBhZGRPYmplY3RTdG9y
ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhPYmplY3RTdG9y
ZUlkKTsKLSAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
Ci0gICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOwotICAgIHZvaWQgcmVtb3ZlSW5kZXgo
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2
NF90IHZlcnNpb24pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLQotICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZAotICAg
IHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCk7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdm9pZCBjcmVhdGVUcmFuc2Fj
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSk7Ci0gICAgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPik7Ci0KLSAgICB2b2lkIGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAg
IHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKLSAgICB2b2lkIGFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7Ci0KLSAgICB2
b2lkIGNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwotICAgIHZvaWQgZGVsZXRlSW5kZXgo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCk7Ci0KLSAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9
Ci0gICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0g
ICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotICAg
IHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKik7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChJREJU
cmFuc2FjdGlvbkJhY2tlbmQqKTsKLQotICAgIGVudW0gVGFza1R5cGUgewotICAgICAgICBOb3Jt
YWxUYXNrID0gMCwKLSAgICAgICAgUHJlZW1wdGl2ZVRhc2sKLSAgICB9OwotCi0gICAgZW51bSBQ
dXRNb2RlIHsKLSAgICAgICAgQWRkT3JVcGRhdGUsCi0gICAgICAgIEFkZE9ubHksCi0gICAgICAg
IEN1cnNvclVwZGF0ZQotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBNaW5pbXVt
SW5kZXhJZCA9IDMwOwotCi0gICAgdm9pZCBnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHB1
dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKLSAgICB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90LCAxPiYgaW5kZXhJZHMsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXMsIDE+Jik7Ci0gICAgdm9pZCBzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90
LCAxPiYgaW5kZXhJZHMpOwotICAgIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFz
a1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBjb3VudChpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2
b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
LSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7
IH0KLSAgICB2b2lkIHNldEN1cnJlbnRWZXJzaW9uKHVpbnQ2NF90IHZlcnNpb24pIHsgbV9tZXRh
ZGF0YS52ZXJzaW9uID0gdmVyc2lvbjsgfQotCi0gICAgYm9vbCBoYXNQZW5kaW5nU2Vjb25kSGFs
Zk9wZW4oKSB7IHJldHVybiBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5nZXQoKTsgfQotICAgIHZv
aWQgc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3Bl
bkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCkgeyBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IFdURjo6
bW92ZShwZW5kaW5nT3BlbkNhbGwpOyB9Ci0KLSAgICBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZSYgZmFjdG9yeUJhY2tlbmQoKSB7IHJldHVybiAqbV9mYWN0b3J5OyB9Ci0KLSAgICBjbGFzcyBW
ZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOwotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlKiwgSURCU2VydmVyQ29ubmVjdGlvbiYpOwotCi0gICAgdm9pZCBvcGVuQ29ubmVjdGlv
bkludGVybmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbik7Ci0K
LSAgICB2b2lkIG9wZW5JbnRlcm5hbEFzeW5jKCk7Ci0gICAgdm9pZCBkaWRPcGVuSW50ZXJuYWxB
c3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKTsKLQotICAgIHZv
aWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICBzaXplX3QgY29ubmVjdGlvbkNvdW50
KCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVu
ZGluZ09wZW5DYWxscyhib29sIHN1Y2Nlc3MpOwotCi0gICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNl
QmxvY2tlZCgpOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VBc3luYyhQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwotCi0gICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFkYXRhOwotCi0gICAg
U3RyaW5nIG1faWRlbnRpZmllcjsKLQotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZT4gbV9mYWN0b3J5OwotICAgIFJlZjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBtX3NlcnZlckNv
bm5lY3Rpb247Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKLQotICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBUcmFuc2FjdGlvbk1hcDsK
LSAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKLQotICAgIERlcXVlPHN0ZDo6dW5p
cXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW47
Ci0KLSAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ0RlbGV0ZUNhbGw+PiBtX3Bl
bmRpbmdEZWxldGVDYWxsczsKLSAgICBIYXNoU2V0PFJlZlB0cjxJREJDYWxsYmFja3M+PiBtX2Rl
bGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uOwotCi0gICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKLSAg
ICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OwotCi0gICAgYm9v
bCBtX2Nsb3NpbmdDb25uZWN0aW9uOwotICAgIGJvb2wgbV9kaWRPcGVuSW50ZXJuYWw7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBlOTFjMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJhc2VDYWxsYmFj
a3NfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRlICJJ
bmRleGVkREIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkRhdGFi
YXNlOwotCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRGF0YWJhc2VD
YWxsYmFja3MoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBvbkZvcmNlZENsb3NlKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWlu
dDY0X3QgbmV3VmVyc2lvbikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIG9uQ29tcGxldGUoaW50NjRfdCB0cmFuc2FjdGlvbklkKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgY29ubmVjdChJREJEYXRhYmFzZSopID0gMDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUNhbGxiYWNr
c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGI0Mzg1Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8SURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsPiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNyZWF0ZSgpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKCkpOwotfQot
Ci1JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpCi0g
ICAgOiBtX2RhdGFiYXNlKG51bGxwdHIpCi17Ci19Ci0KLUlEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bDo6fklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsOjpvbkZvcmNlZENsb3NlKCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkKLSAg
ICAgICAgbV9kYXRhYmFzZS0+Zm9yY2VDbG9zZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbDo6b25WZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90
IG5ld1ZlcnNpb24pCi17Ci0gICAgaWYgKG1fZGF0YWJhc2UpCi0gICAgICAgIG1fZGF0YWJhc2Ut
Pm9uVmVyc2lvbkNoYW5nZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNvbm5lY3QoSURCRGF0YWJhc2UqIGRhdGFiYXNlKQotewot
ICAgIEFTU0VSVCghbV9kYXRhYmFzZSk7Ci0gICAgQVNTRVJUKGRhdGFiYXNlKTsKLSAgICBtX2Rh
dGFiYXNlID0gZGF0YWJhc2U7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpv
bkFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9y
PiBlcnJvcikKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+b25B
Ym9ydCh0cmFuc2FjdGlvbklkLCBlcnJvcik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsOjpvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICBpZiAobV9k
YXRhYmFzZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+b25Db21wbGV0ZSh0cmFuc2FjdGlvbklkKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YzgwMmIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaAot
Ci0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJh
c2U7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCBmaW5hbCA6IHB1YmxpYyBJREJE
YXRhYmFzZUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGw+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbCgpIG92ZXJyaWRlOwotCi0gICAgLy8gSURCRGF0YWJhc2VDYWxsYmFja3MKLSAgICB2aXJ0
dWFsIHZvaWQgb25Gb3JjZWRDbG9zZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBvblZl
cnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgY29ubmVjdChJREJEYXRhYmFzZSopIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAg
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpOwotCi0gICAgLy8gVGhlIGluaXRpYWwgSURCT3Bl
bkRCUmVxdWVzdCBvciBmaW5hbCBJREJEYXRhYmFzZSBtYWludGFpbnMgYSBSZWZQdHIgdG8gdGhp
cwotICAgIElEQkRhdGFiYXNlKiBtX2RhdGFiYXNlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCmluZGV4
IGQ1MDdlNmIuLjdhOWY5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuY3BwCkBAIC0xLDI5ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgpAQCAtMzEsMTM1ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgot
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUg
IlNjaGVtZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRl
ICJXb3JrZXJHbG9iYWxTY29wZS5oIgotI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCi0j
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRmFj
dG9yeTo6SURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKLSAg
ICA6IG1fYmFja2VuZChmYWN0b3J5KQotewotICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8g
dGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgotICAgIHJlbGF4QWRvcHRpb25S
ZXF1aXJlbWVudCgpOwotfQotCi1JREJGYWN0b3J5Ojp+SURCRmFjdG9yeSgpCi17Ci19Ci0KLXN0
YXRpYyBib29sIGlzQ29udGV4dFZhbGlkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
Ci17Ci0gICAgQVNTRVJUKGlzPERvY3VtZW50PigqY29udGV4dCkgfHwgY29udGV4dC0+aXNXb3Jr
ZXJHbG9iYWxTY29wZSgpKTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0KSkgewotICAg
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwot
ICAgICAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUoKSAmJiBkb2N1bWVudC5wYWdlKCkgJiYgKCFk
b2N1bWVudC5wYWdlKCktPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgfHwgU2NoZW1lUmVnaXN0cnk6
OmFsbG93c0RhdGFiYXNlQWNjZXNzSW5Qcml2YXRlQnJvd3NpbmcoZG9jdW1lbnQuc2VjdXJpdHlP
cmlnaW4oKS0+cHJvdG9jb2woKSkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhT
dG9yYWdlQVBJLCAiSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyIpOwotICAgIGlmICghaXND
b250ZXh0VmFsaWQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3JpZ2lu
KCkpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgbV9iYWNrZW5kLT5nZXRE
YXRhYmFzZU5hbWVzKHJlcXVlc3QsICooY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSksICooY29u
dGV4dC0+dG9wT3JpZ2luKCkpLCBjb250ZXh0KTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQot
UGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5OjpvcGVuIik7Ci0gICAgcmV0
dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCAwLCBJbmRleGVkREI6OlZlcnNpb25OdWxs
bmVzczo6TnVsbCwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IElEQkZh
Y3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5OjpvcGVuIik7Ci0gICAgaWYgKCF2ZXJz
aW9uKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgcmV0dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBJbmRleGVk
REI6OlZlcnNpb25OdWxsbmVzczo6Tm9uTnVsbCwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQk9w
ZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4
ZWREQjo6VmVyc2lvbk51bGxuZXNzIHZlcnNpb25OdWxsbmVzcywgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgQVNTRVJUKHZlcnNpb24gPj0gMSB8fCB2ZXJzaW9uTnVsbG5lc3MgPT0gSW5kZXhl
ZERCOjpWZXJzaW9uTnVsbG5lc3M6Ok51bGwpOwotICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KCFpc0NvbnRleHRWYWxpZChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFj
b250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BP
cmlnaW4oKSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxs
YmFja3MgPSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNyZWF0ZSgpOwotICAgIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCA9IElEQkRhdGFiYXNlOjpuZXh0VHJhbnNhY3Rpb25JZCgpOwotICAgIFJl
ZlB0cjxJREJPcGVuREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uLCB2ZXJz
aW9uTnVsbG5lc3MpOwotICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCB2ZXJzaW9uLCB0cmFuc2Fj
dGlvbklkLCByZXF1ZXN0LCBkYXRhYmFzZUNhbGxiYWNrcywgKihjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpKSwgKihjb250ZXh0LT50b3BPcmlnaW4oKSkpOwotICAgIHJldHVybiByZXF1ZXN0Owot
fQotCi1QYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5Ojpk
ZWxldGVEYXRhYmFzZSIpOwotICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0g
VHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFpc0NvbnRleHRW
YWxpZChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsK
LSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCT3BlbkRCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIDAsIDAsIDAsIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOdWxs
KTsKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsICpjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLCAqY29udGV4dC0+dG9wT3JpZ2luKCksIHJlcXVlc3QsIGNvbnRleHQpOwotICAg
IHJldHVybiByZXF1ZXN0OwotfQotCi1zaG9ydCBJREJGYWN0b3J5OjpjbXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0
VmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmRWYWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCitJREJGYWN0b3J5OjpJREJGYWN0b3J5KCkKIHsKLSAgICBET01SZXF1ZXN0
U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGZpcnN0ID0g
c2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBmaXJzdFZhbHVlKTsKLSAgICBSZWZQ
dHI8SURCS2V5PiBzZWNvbmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIHNl
Y29uZFZhbHVlKTsKLQotICAgIEFTU0VSVChmaXJzdCk7Ci0gICAgQVNTRVJUKHNlY29uZCk7Ci0K
LSAgICBpZiAoIWZpcnN0LT5pc1ZhbGlkKCkgfHwgIXNlY29uZC0+aXNWYWxpZCgpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PihmaXJzdC0+Y29tcGFy
ZShzZWNvbmQuZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCmluZGV4IDg2N2UzMWUuLjQ0
NmUxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
LmgKQEAgLTEsMzAgKzEsMjggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIElEQkZhY3RvcnlfaAogI2RlZmluZSBJREJG
YWN0b3J5X2gKIApAQCAtNDYsMzggKzQ0LDI3IEBAIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIElEQkZhY3RvcnkgOiBw
dWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJGYWN0b3J5PiB7Citj
bGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSogZmFjdG9yeSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGlsZSB0
aGUgZmVhdHVyZSBpcyB1bmRlciBkZXZlbG9wbWVudCB3ZSdsbCBoYW5kbGUgYSBudWxsIGZhY3Rv
cnkgYmFja2VuZCBoZXJlLAotICAgICAgICAvLyByZXR1cm5pbmcgbnVsbCwgc28gamF2YXNjcmlw
dCBjYW4ndCB0cnkgdG8gdXNlIHRoZSBmZWF0dXJlLgotICAgICAgICAvLyBPbmNlIHRoZSBmZWF0
dXJlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgbnVsbCBmYWN0b3J5
IGJhY2tlbmQuCi0gICAgICAgIHJldHVybiBmYWN0b3J5ID8gYWRvcHRSZWYobmV3IElEQkZhY3Rv
cnkoZmFjdG9yeSkpIDogbnVsbHB0cjsKLSAgICB9Ci0gICAgfklEQkZhY3RvcnkoKTsKKyAgICB2
aXJ0dWFsIH5JREJGYWN0b3J5KCkgeyB9CiAKICAgICAvLyBGSVhNRTogZ2V0RGF0YWJhc2VOYW1l
cyBpcyBubyBsb25nZXIgYSB3ZWItZmFjaW5nIEFQSSwgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZy
b20gSURCRmFjdG9yeS4KICAgICAvLyBUaGUgV2ViIEluc3BlY3RvciBjdXJyZW50bHkgdXNlcyB0
aGlzIHRvIGVudW1lcmF0ZSB0aGUgbGlzdCBvZiBkYXRhYmFzZXMsIGJ1dCBpcyBtb3JlIGNvbXBs
aWNhdGVkIGFzIGEgcmVzdWx0LgogICAgIC8vIFdlIHNob3VsZCBwcm92aWRlIGEgc2ltcGxlciBB
UEkgdG8gdGhlIFdlYiBJbnNwZWN0b3IgdGhlbiByZW1vdmUgZ2V0RGF0YWJhc2VOYW1lcy4KLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBhc3NSZWZQdHI8SURCT3BlbkRCUmVx
dWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcg
bG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJPcGVuREJS
ZXF1ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzaG9ydCBjbXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdCwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCi1wcml2YXRlOgotICAgIElEQkZh
Y3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJikg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBkZWxldGVEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJikgPSAwOwogCi0gICAgUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0
X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHNob3J0IGNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgc2Vjb25kLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCi0gICAgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Citwcm90ZWN0ZWQ6CisgICAgSURCRmFjdG9yeSgp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKIAotI2VuZGlmIC8vIElE
QkZhY3RvcnlfaAorI2VuZGlmIC8vIExlZ2FjeUZhY3RvcnlfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbAppbmRleCA4NTI3MzIyLi5jODdjZTE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmlk
bApAQCAtMjUsOCArMjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RSwKLSAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlLAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9
SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCRmFj
dG9yeSB7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJhaXNlc0V4Y2Vw
dGlvbl0gSURCT3BlbkRCUmVxdWVzdCBvcGVuKERPTVN0cmluZyBuYW1lLCBbRW5mb3JjZVJhbmdl
XSBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbik7CiAgICAgW0NhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJhaXNlc0V4Y2VwdGlvbl0gSURCT3BlbkRCUmVxdWVzdCBk
ZWxldGVEYXRhYmFzZShET01TdHJpbmcgbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5OTAxOS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Vf
aAotI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCi0KLSNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKLQotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkN1cnNv
ckJhY2tlbmQ7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZDsK
LWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5k
OwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owot
Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBi
eSBJREJGYWN0b3J5IChhc3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5jKS4KLS8vIFRoaXMg
aXMgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90
aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKLS8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJz
KS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQK
LS8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KLWNs
YXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFt
ZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3Blbmlu
Z09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBtYWlu
RnJhbWVPcmlnaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpID0gMDsK
LQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2VfaAotCi0jZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Vf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4
IGU2ZmRmNWMuLmEyYjRlMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleC5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgpAQCAtMjgsMTgxICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUg
IklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkluZGV4OjpJREJJbmRleChjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX21ldGFkYXRhKG1ldGFkYXRh
KQotICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAsIG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fb2Jq
ZWN0U3RvcmUpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQobV9tZXRh
ZGF0YS5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi1JREJJbmRleDo6
fklEQkluZGV4KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCSW5kZXg6Om9wZW5DdXJzb3Ii
KTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNv
cjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYyk7Ci0gICAgaWYgKGVjKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKLSAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vy
c29yVHlwZTo6S2V5QW5kVmFsdWUsIGRpcmVjdGlvbik7Ci0gICAgYmFja2VuZERCKCktPm9wZW5D
dXJzb3IobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0
YS5pZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgZmFsc2UsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9y
bWFsVGFzaywgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCSW5kZXg6Om9wZW5DdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5y
ZWxlYXNlKCksIGRpcmVjdGlvbiwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJJREJJbmRleDo6Y291bnQiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2Fj
dGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2Us
IHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkluZGV4Ojpjb3VudCIpOwotICAgIFJlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKLSAg
ICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb3VudChjb250ZXh0LCBr
ZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJ
bmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJp
bmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCSW5kZXg6
Om9wZW5LZXlDdXJzb3IiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYyk7
Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxz
KEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSwgZGlyZWN0aW9uKTsKLSAgICBiYWNrZW5k
REIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgp
LCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJh
Y2tlbmQ6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1Q
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7Ci0gICAgUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOwot
ICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9wZW5LZXlDdXJzb3Io
Y29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBkaXJlY3Rpb24sIGVjKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCSW5kZXg6OmdldCIpOwotICAgIFJlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXks
IGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXQoY29u
dGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJJREJJbmRleDo6Z2V0Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZl
RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWtleVJhbmdlKSB7Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwotICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmpl
Y3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsK
LSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRl
eDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCSW5kZXg6OmdldEtleSIpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKLSAgICBpZiAoZWMp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdldEtleShjb250ZXh0LCBrZXlSYW5n
ZS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6
Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkluZGV4OjpnZXRLZXkiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICgha2V5UmFuZ2UpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNy
ZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3Jl
LT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgdHJ1ZSwgcmVxdWVzdCk7Ci0gICAgcmV0
dXJuIHJlcXVlc3Q7Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZCogSURCSW5kZXg6OmJhY2tlbmRE
QigpIGNvbnN0CitJREJJbmRleDo6SURCSW5kZXgoKQogewotICAgIHJldHVybiBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kREIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKaW5kZXggMWE5ZTQ3Ni4uYmFhODVl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCkBAIC0x
LDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSURCSW5kZXhfaApAQCAtNDMs
NTUgKzQzLDQzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmU7
CiAKLWNsYXNzIElEQkluZGV4IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNv
dW50ZWQ8SURCSW5kZXg+IHsKK2NsYXNzIElEQkluZGV4IDogcHVibGljIFJlZkNvdW50ZWQ8SURC
SW5kZXg+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQkluZGV4PiBjcmVhdGUoY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwg
SURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSURCSW5kZXgobWV0YWRhdGEsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbikpOwot
ICAgIH0KLSAgICB+SURCSW5kZXgoKTsKKyAgICB2aXJ0dWFsIH5JREJJbmRleCgpIHsgfQogCiAg
ICAgLy8gSW1wbGVtZW50IHRoZSBJREwKLSAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG9iamVjdFN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZTsgfQotICAgIFBhc3NS
ZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgeyByZXR1cm4gSURCQW55OjpjcmVhdGUo
bV9tZXRhZGF0YS5rZXlQYXRoKTsgfQotICAgIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQotICAgIGJvb2wgdW5pcXVlKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhZGF0YS51bmlxdWU7IH0KLSAgICBib29sIG11bHRpRW50cnkoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLm11bHRpRW50cnk7IH0KLSAgICBpbnQ2NF90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQotCi0gICAgLy8gRklYTUU6IFRyeSB0byBt
b2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgaXMgdW5uZWVkZWQuCi0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgp
LCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJ
REJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMp
OyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4
dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpk
aXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Blbktl
eUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1
cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9
IHRydWU7IH0KLQotICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgSURCSW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIElEQk9iamVj
dFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKLQotICAgIElEQkluZGV4TWV0YWRhdGEgbV9tZXRh
ZGF0YTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIGJvb2wgbV9kZWxldGVkOwor
ICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCB1bmlxdWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG11bHRpRW50cnkoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGlkKCkgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25D
b2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAwOworCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
Y29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYg
ZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKK3By
b3RlY3RlZDoKKyAgICBJREJJbmRleCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCmluZGV4IGM3
NWJlNzAuLjk1YTEwNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleC5pZGwKQEAgLTI1LDggKzI1LDggQEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVY
RURfREFUQUJBU0UsCi0gICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBFbmFibGVk
QXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJm
YWNlIElEQkluZGV4IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IGE2ZDI4MTQuLjRhMDY0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgsNTQ1ICsyOCwxMCBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0j
aW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgot
I2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleURhdGEuaCIKLSNpbmNsdWRlICJJ
REJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCT2JqZWN0U3Rv
cmU6OklEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRh
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX21ldGFkYXRhKG1ldGFkYXRh
KQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fZGVsZXRlZChmYWxz
ZSkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgLy8gV2UgcGFzcyBhIHJlZmVy
ZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhB
ZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURC
T2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
aW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgaW5k
ZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpCi0gICAgICAgIGluZGV4TmFtZXMtPmFw
cGVuZChpbmRleC5uYW1lKTsKLSAgICBpbmRleE5hbWVzLT5zb3J0KCk7Ci0gICAgcmV0dXJuIGlu
ZGV4TmFtZXMucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmdldCIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWtleVJhbmdlKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIGtleVJhbmdlLCBmYWxzZSwgcmVxdWVzdCk7Ci0g
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRl
eHQsIGtleSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9i
amVjdFN0b3JlOjphZGQiKTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRk
T25seSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwga2V5LCBlYyk7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6YWRkIik7Ci0gICAg
cmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCBzdGF0ZSwgdmFsdWUsIHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6cHV0Iik7Ci0gICAgcmV0dXJuIHB1dChJREJEYXRh
YmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZh
bHVlLCBrZXksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVj
dFN0b3JlOjpwdXQiKTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT3JV
cGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIHN0YXRpY19jYXN0PElE
QktleSo+KG51bGxwdHIpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHN0YXRlKTsKLSAgICBE
T01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOwotICAg
IHJldHVybiBwdXQocHV0TW9kZSwgc291cmNlLCBzdGF0ZSwgdmFsdWUsIGtleS5yZWxlYXNlKCks
IGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElE
QkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291
cmNlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
UmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1fdHJh
bnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUuanNWYWx1ZSgpLCBudWxscHRyLCBu
dWxscHRyKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Jsb2JVUkxzKCkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG1fbWV0
YWRhdGEua2V5UGF0aDsKLSAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGgu
aXNOdWxsKCk7Ci0gICAgY29uc3QgYm9vbCBoYXNLZXlHZW5lcmF0b3IgPSBhdXRvSW5jcmVtZW50
KCk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoc3RhdGUpOwotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1
ZXN0U3RhdGUoY29udGV4dCk7Ci0KLSAgICBpZiAocHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tl
bmQ6OkN1cnNvclVwZGF0ZSAmJiB1c2VzSW5MaW5lS2V5cyAmJiBrZXkpIHsKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgaWYgKCF1c2VzSW5MaW5lS2V5cyAmJiAhaGFzS2V5R2VuZXJhdG9yICYm
ICFrZXkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7
Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKHJlcXVlc3RTdGF0ZS5leGVjKCksIHZhbHVlLCBrZXlQYXRoKTsK
LSAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgewotICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXNLZXlHZW5lcmF0
b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAg
IGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIHZhbHVl
LCBrZXlQYXRoKSkgewotICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoa2V5UGF0aEtleSkKLSAgICAgICAgICAgIGtleSA9
IGtleVBhdGhLZXk7Ci0gICAgfQotICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzOwotICAg
IFZlY3RvcjxJbmRleEtleXM+IGluZGV4S2V5czsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9t
ZXRhZGF0YS5pbmRleGVzKSB7Ci0gICAgICAgIFZlY3RvcjxJREJLZXlEYXRhPiBrZXlEYXRhczsK
LSAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0U3RhdGUuZXhlYygpLCBp
bmRleC52YWx1ZSwgdmFsdWUsIGtleURhdGFzKTsKLSAgICAgICAgaW5kZXhJZHMuYXBwZW5kKGlu
ZGV4LmtleSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IE11Y2ggb2YgdGhlIEluZGV4ZWQgREIgY29k
ZSBuZWVkcyB0byB1c2UgSURCS2V5RGF0YSBkaXJlY3RseSB0byBhdm9pZCB3YXN0ZWZ1bCBjb252
ZXJzaW9ucyBsaWtlIHRoaXMuCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4ga2V5czsK
LSAgICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDoga2V5RGF0YXMpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKLSAgICAgICAg
ICAgIGlmIChrZXkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1
ZUJ5dGVzID0gc2VyaWFsaXplZFZhbHVlLT50b1dpcmVCeXRlcygpOwotICAgIC8vIFRoaXMgaXMg
YSBoYWNrIHRvIGFjY291bnQgZm9yIGRpc2FncmVlbWVudHMgYWJvdXQgd2hldGhlciBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgc2hvdWxkIGRlYWwgaW4gVmVjdG9yPHVpbnQ4X3Q+IG9yIFZlY3Rvcjxj
aGFyPi4KLSAgICAvLyBTZWUgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJr
aXQtZGV2LzIwMTMtRmVicnVhcnkvMDIzNjgyLmh0bWwKLSAgICBWZWN0b3I8Y2hhcj4qIHZhbHVl
Qnl0ZXNTaWduZWQgPSByZWludGVycHJldF9jYXN0PFZlY3RvcjxjaGFyPio+KCZ2YWx1ZUJ5dGVz
KTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6
YWRvcHRWZWN0b3IoKnZhbHVlQnl0ZXNTaWduZWQpOwotICAgIGJhY2tlbmREQigpLT5wdXQobV90
cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZmZXIsIGtleS5yZWxlYXNlKCksIHN0YXRp
Y19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZT4ocHV0TW9kZSksIHJlcXVlc3QsIGlu
ZGV4SWRzLCBpbmRleEtleXMpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2Jq
ZWN0U3RvcmU6OmRlbGV0ZSIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHko
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFrZXlSYW5nZSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBiYWNrZW5kREIoKS0+ZGVsZXRlUmFuZ2UobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwg
a2V5UmFuZ2UsIHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOwotICAgIGlmIChl
YykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlbGV0ZUZ1bmN0aW9uKGNvbnRleHQs
IGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjpj
bGVhciIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+
aWQoKSwgaWQoKSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQot
Ci1uYW1lc3BhY2UgewotLy8gVGhpcyBjbGFzcyBjcmVhdGVzIHRoZSBpbmRleCBrZXlzIGZvciBh
IGdpdmVuIGluZGV4IGJ5IGV4dHJhY3RpbmcKLS8vIHRoZW0gZnJvbSB0aGUgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLCBmb3IgYWxsIHRoZSBleGlzdGluZyB2YWx1ZXMgaW4KLS8vIHRoZSBvYmplY3RT
dG9yZS4gSXQgb25seSBuZWVkcyB0byBiZSBrZXB0IGFsaXZlIGJ5IHZpcnR1ZSBvZiBiZWluZwot
Ly8gYSBsaXN0ZW5lciBvbiBhbiBJREJSZXF1ZXN0IG9iamVjdCwgaW4gdGhlIHNhbWUgd2F5IHRo
YXQgSmF2YVNjcmlwdAotLy8gY3Vyc29yIHN1Y2Nlc3MgaGFuZGxlcnMgYXJlIGtlcHQgYWxpdmUu
Ci1jbGFzcyBJbmRleFBvcHVsYXRvciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEluZGV4UG9wdWxhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5kZXhQb3B1bGF0b3IoYmFja2VuZCwgdHJh
bnNhY3Rpb25JZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMgPT0gJm90aGVyOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBJbmRleFBvcHVsYXRvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwg
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAgIDogRXZlbnRMaXN0ZW5lcihDUFBF
dmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlQmFja2VuZChiYWNrZW5kKQot
ICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRl
eE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpOwotICAgICAg
ICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpOwotICAgICAgICBJREJSZXF1
ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8SURCUmVxdWVzdCo+KHRhcmdldCk7Ci0KLSAgICAg
ICAgUmVmUHRyPElEQkFueT4gY3Vyc29yQW55ID0gcmVxdWVzdC0+cmVzdWx0KEFTU0VSVF9OT19F
WENFUFRJT04pOwotICAgICAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBjdXJzb3I7Ci0g
ICAgICAgIGlmIChjdXJzb3JBbnktPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1
ZVR5cGUpCi0gICAgICAgICAgICBjdXJzb3IgPSBjdXJzb3JBbnktPmlkYkN1cnNvcldpdGhWYWx1
ZSgpOwotCi0gICAgICAgIFZlY3RvcjxpbnQ2NF90LCAxPiBpbmRleElkczsKLSAgICAgICAgaW5k
ZXhJZHMuYXBwZW5kKG1faW5kZXhNZXRhZGF0YS5pZCk7Ci0gICAgICAgIGlmIChjdXJzb3IpIHsK
LSAgICAgICAgICAgIGN1cnNvci0+Y29udGludWVGdW5jdGlvbihzdGF0aWNfY2FzdDxJREJLZXkq
PihudWxscHRyKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkgPSBjdXJzb3ItPmlkYlByaW1hcnlLZXkoKTsKLSAgICAgICAgICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gY3Vyc29yLT52YWx1ZSgpOwotCi0gICAg
ICAgICAgICBWZWN0b3I8SURCS2V5RGF0YT4gaW5kZXhLZXlEYXRhczsKLSAgICAgICAgICAgIGdl
bmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUocmVxdWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwg
bV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwgaW5kZXhLZXlEYXRhcyk7Ci0KLSAgICAgICAgICAgIFZl
Y3RvcjxSZWZQdHI8SURCS2V5Pj4gaW5kZXhLZXlzOwotICAgICAgICAgICAgZm9yIChhdXRvJiBp
bmRleEtleURhdGEgOiBpbmRleEtleURhdGFzKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5ID0gaW5kZXhLZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGtleSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXku
cmVsZWFzZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFZlY3RvcjxJREJPYmplY3RT
dG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNMaXN0OwotICAgICAgICAgICAgaW5kZXhLZXlz
TGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKLQotICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmQt
PnNldEluZGV4S2V5cyhtX3RyYW5zYWN0aW9uSWQsIG1fb2JqZWN0U3RvcmVJZCwgcHJpbWFyeUtl
eSwgaW5kZXhJZHMsIGluZGV4S2V5c0xpc3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5kZXhpbmcsIHRlbGwgdGhlIGJhY2tlbmQgdG8g
Z28KLSAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJvY2Vzc2luZyB0YXNrcyBvZiB0eXBlIE5vcm1h
bFRhc2suCi0gICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5KG1f
dHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBpbmRleElkcyk7Ci0gICAgICAgICAgICBt
X2RhdGFiYXNlQmFja2VuZCA9IG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2VCYWNrZW5kOwotICAgIGNvbnN0IGlu
dDY0X3QgbV90cmFuc2FjdGlvbklkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlk
OwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotfTsKLX0KLQot
UGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKLSAgICBvcHRpb25zLmdldCgidW5pcXVl
IiwgdW5pcXVlKTsKLQotICAgIGJvb2wgbXVsdGlFbnRyeSA9IGZhbHNlOwotICAgIG9wdGlvbnMu
Z2V0KCJtdWx0aUVudHJ5IiwgbXVsdGlFbnRyeSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlSW5kZXgo
Y29udGV4dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBlYyk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBh
dGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4
Iik7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSB8fCBtX2RlbGV0
ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rp
b25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFrZXlQ
YXRoLmlzVmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpTeW50
YXhFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChuYW1lLmlzTnVsbCgp
KSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgaWYgKGNvbnRhaW5zSW5kZXgobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlICYmIG11bHRpRW50
cnkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vy
cm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IGluZGV4SWQgPSBt
X21ldGFkYXRhLm1heEluZGV4SWQgKyAxOwotICAgIGJhY2tlbmREQigpLT5jcmVhdGVJbmRleCht
X3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRleElkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUs
IG11bHRpRW50cnkpOwotCi0gICAgKyttX21ldGFkYXRhLm1heEluZGV4SWQ7Ci0KLSAgICBJREJJ
bmRleE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSk7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUo
bWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAuc2V0
KG5hbWUsIGluZGV4KTsKLSAgICBtX21ldGFkYXRhLmluZGV4ZXMuc2V0KGluZGV4SWQsIG1ldGFk
YXRhKTsKLQotICAgIEFTU0VSVCghZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQpOwotICAgIHJldHVybiBpbmRl
eC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpp
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhT
dG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmluZGV4Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc0Zpbmlz
aGVkKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRl
RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIElEQkluZGV4TWFwOjppdGVy
YXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9pbmRleE1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQotICAgIGludDY0X3QgaW5kZXhJ
ZCA9IGZpbmRJbmRleElkKG5hbWUpOwotICAgIGlmIChpbmRleElkID09IElEQkluZGV4TWV0YWRh
dGE6OkludmFsaWRJZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RG
b3VuZEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhKiBpbmRleE1ldGFkYXRhKG51bGxwdHIpOwotICAgIGZvciAoYXV0byYgaW5kZXgg
OiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKGluZGV4Lm5hbWUg
PT0gbmFtZSkgewotICAgICAgICAgICAgaW5kZXhNZXRhZGF0YSA9ICZpbmRleDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChpbmRleE1ldGFkYXRhKTsK
LSAgICBBU1NFUlQoaW5kZXhNZXRhZGF0YS0+aWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxp
ZElkKTsKLQotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKCpp
bmRleE1ldGFkYXRhLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2luZGV4TWFw
LnNldChuYW1lLCBpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9p
ZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjpkZWxl
dGVJbmRleCIpOwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkgfHwg
bV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRT
dGF0ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50NjRf
dCBpbmRleElkID0gZmluZEluZGV4SWQobmFtZSk7Ci0gICAgaWYgKGluZGV4SWQgPT0gSURCSW5k
ZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBiYWNrZW5k
REIoKS0+ZGVsZXRlSW5kZXgobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgaW5kZXhJZCk7Ci0K
LSAgICBtX21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwotICAgIElEQkluZGV4TWFw
OjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9p
bmRleE1hcC5lbmQoKSkgewotICAgICAgICBpdC0+dmFsdWUtPm1hcmtEZWxldGVkKCk7Ci0gICAg
ICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gb3BlbkN1cnNvcihj
b250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtl
eVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOwotfQotCi1QYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwgSURC
Q3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQs
IHJhbmdlLCBkaXJlY3Rpb24sIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgZWMpOwot
fQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kOjpU
YXNrVHlwZSB0YXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJl
Y3Rpb25TdHJpbmcsIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3Qt
PnNldEN1cnNvckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlBbmRWYWx1ZSwgZGly
ZWN0aW9uKTsKLQotICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlk
KCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwgcmFuZ2UsIGRpcmVjdGlvbiwg
ZmFsc2UsIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGU+KHRhc2tUeXBl
KSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBl
Yyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gb3BlbkN1cnNv
cihjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGRpcmVjdGlvbiwgZWMpOwotfQotCi1QYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6Y291bnQi
KTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAg
ICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Qu
cmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpj
b3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7Ci0g
ICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY291bnQoY29udGV4dCwg
a2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmU6OnRyYW5z
YWN0aW9uRmluaXNoZWQoKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVk
KCkpOwotCi0gICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2luZGV4TWFwLmNs
ZWFyKCk7Ci19Ci0KLWludDY0X3QgSURCT2JqZWN0U3RvcmU6OmZpbmRJbmRleElkKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9tZXRhZGF0YS5p
bmRleGVzKSB7Ci0gICAgICAgIGlmIChpbmRleC52YWx1ZS5uYW1lID09IG5hbWUpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpbmRleC5rZXkgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsK
LSAgICAgICAgICAgIHJldHVybiBpbmRleC5rZXk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5k
KiBJREJPYmplY3RTdG9yZTo6YmFja2VuZERCKCkgY29uc3QKK0lEQk9iamVjdFN0b3JlOjpJREJP
YmplY3RTdG9yZSgpCiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmREQigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA1NzY2YmUwLi4yODY2NTA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgK
QEAgLTEsNDEgKzEsMzQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJPYmplY3RTdG9y
ZV9oCiAjZGVmaW5lIElEQk9iamVjdFN0b3JlX2gKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIK
LSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgi
Ci0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsODUgKzM2LDY1IEBACiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAorbmFtZXNwYWNlIERlcHJlY2F0ZWQgeworY2xhc3MgU2NyaXB0VmFsdWU7
Cit9CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhlY1N0YXRlOworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBJREJBbnk7Ci0KLWNsYXNz
IElEQk9iamVjdFN0b3JlIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50
ZWQ8SURCT2JqZWN0U3RvcmU+IHsKK2NsYXNzIElEQkluZGV4OworY2xhc3MgSURCS2V5UGF0aDsK
K2NsYXNzIElEQktleVJhbmdlOworY2xhc3MgSURCUmVxdWVzdDsKK2NsYXNzIElEQlRyYW5zYWN0
aW9uOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgSURCT2JqZWN0U3Rv
cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZT4gewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBtZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCT2JqZWN0U3RvcmUobWV0YWRhdGEsIHRyYW5zYWN0
aW9uKSk7Ci0gICAgfQotICAgIH5JREJPYmplY3RTdG9yZSgpIHsgfQorICAgIHZpcnR1YWwgfklE
Qk9iamVjdFN0b3JlKCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9iamVjdFN0b3Jl
IElETAotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0g
ICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0K
LSAgICBQYXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0IHsgcmV0dXJuIElEQkFu
eTo6Y3JlYXRlKG1fbWV0YWRhdGEua2V5UGF0aCk7IH0KLSAgICBjb25zdCBJREJLZXlQYXRoIGtl
eVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb247
IH0KLSAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmF1
dG9JbmNyZW1lbnQ7IH0KLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhl
Y1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRp
cmVjdGlvbiwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUq
LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChK
U0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gY3JlYXRlSW5kZXgoY29udGV4dCwgbmFtZSwgSURCS2V5UGF0aChrZXlQYXRoKSwgb3B0aW9u
cywgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUluZGV4KGNvbnRleHQsIG5hbWUsIElEQktleVBhdGgoa2V5
UGF0aCksIG9wdGlvbnMsIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUlu
ZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NS
ZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0
aUVudHJ5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZUlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5
UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFzZUJh
Y2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRl
KiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQo
SURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBK
U0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVk
ID0gdHJ1ZTsgfQotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOwotCi0gICAgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0K
LSAgICB2b2lkIHNldE1ldGFkYXRhKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFk
YXRhKSB7IG1fbWV0YWRhdGEgPSBtZXRhZGF0YTsgfQotCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPElEQktleT4+IEluZGV4S2V5czsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJbmRl
eEtleXM+IEluZGV4S2V5TWFwOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIo
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiwgSURCVHJhbnNhY3Rpb24qKTsKLQotICAgIGludDY0X3QgZmluZEluZGV4
SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbmRJbmRleElk
KG5hbWUpICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKLSAgICB9Ci0KLSAgICBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiBtX3RyYW5zYWN0aW9uOwotICAgIGJvb2wgbV9kZWxldGVkOwotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4Pj4gSURCSW5kZXhNYXA7Ci0gICAgSURCSW5kZXhN
YXAgbV9pbmRleE1hcDsKKyAgICB2aXJ0dWFsIGludDY0X3QgaWQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3Qg
SURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29u
c3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUq
LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleD4g
aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKK3Byb3RlY3Rl
ZDoKKyAgICBJREJPYmplY3RTdG9yZSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aWRsCmluZGV4IGZkZmNhOGEuLmFmMDIwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTI1LDggKzI1LDggQEAKIAog
WwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgSW1wbGVtZW50YXRpb25M
YWNrc1ZUYWJsZSwKICAgICBFbmFibGVkQXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRh
YmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIElEQk9iamVjdFN0b3JlIHsKICAgICBbVHJlYXRS
ZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5h
bWU7CiAgICAgW0ltcGxlbWVudGVkQXM9a2V5UGF0aEFueV0gcmVhZG9ubHkgYXR0cmlidXRlIElE
QkFueSBrZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPcGVuREJSZXF1ZXN0LmNwcAppbmRleCA3MTU3OWIwLi5hZGY4YTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNw
cApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CkBAIC0yOCwxMjggKzI4LDEzIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAot
I2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2luY2x1
ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UmVmPElEQk9wZW5EQlJlcXVlc3Q+IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbiwgSW5kZXhl
ZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzKQotewotICAgIFJlZjxJREJPcGVu
REJSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcgSURCT3BlbkRCUmVxdWVzdChjb250ZXh0
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24sIHZlcnNpb25OdWxsbmVzcykpKTsK
LSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0K
LQotSURCT3BlbkRCUmVxdWVzdDo6SURCT3BlbkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJz
aW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzKQotICAgIDogSURCUmVxdWVzdChjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZU51bGwoKSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCAwKQot
ICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgLCBtX3RyYW5zYWN0aW9u
SWQodHJhbnNhY3Rpb25JZCkKLSAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICwgbV92ZXJz
aW9uTnVsbG5lc3ModmVyc2lvbk51bGxuZXNzKQotewotICAgIEFTU0VSVCghbV9yZXN1bHQpOwot
fQotCi1JREJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCgpCi17Ci19Ci0KLUV2ZW50
VGFyZ2V0SW50ZXJmYWNlIElEQk9wZW5EQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURCT3BlbkRCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNl
VHlwZTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkJsb2NrZWQodWludDY0X3Qgb2xk
VmVyc2lvbikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uQmxv
Y2tlZCgpIik7Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShv
bGRWZXJzaW9uLCBtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKLX0KLQot
dm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHBycERhdGFiYXNlQmFja2VuZCwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCitJREJPcGVuREJSZXF1ZXN0OjpJREJP
cGVuREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBJREJS
ZXF1ZXN0KGNvbnRleHQpCiB7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPcGVuREJSZXF1ZXN0
OjpvblVwZ3JhZGVOZWVkZWQoKSIpOwotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZD4gZGIgPSBwcnBEYXRhYmFzZUJhY2tlbmQ7Ci0gICAgICAgIGRiLT5hYm9ydChtX3RyYW5zYWN0
aW9uSWQpOwotICAgICAgICBkYi0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFja3MpOwotCi0gICAgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2VCYWNrZW5kID0gcHJwRGF0YWJhc2VCYWNrZW5k
OwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IElEQkRhdGFiYXNlOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBkYXRhYmFzZUJhY2tlbmQsIG1fZGF0YWJh
c2VDYWxsYmFja3MpOwotICAgIGlkYkRhdGFiYXNlLT5zZXRNZXRhZGF0YShtZXRhZGF0YSk7Ci0g
ICAgbV9kYXRhYmFzZUNhbGxiYWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7Ci0gICAg
bV9kYXRhYmFzZUNhbGxiYWNrcyA9IG51bGxwdHI7Ci0KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRh
IG9sZE1ldGFkYXRhKG1ldGFkYXRhKTsKLSAgICBvbGRNZXRhZGF0YS52ZXJzaW9uID0gb2xkVmVy
c2lvbjsKLQotICAgIG1fdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFuc2FjdGlvbklkLCBpZGJEYXRhYmFzZS5nZXQoKSwg
dGhpcywgb2xkTWV0YWRhdGEpOwotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0
YWJhc2UucmVsZWFzZSgpKTsKLQotICAgIGlmIChtX3ZlcnNpb25OdWxsbmVzcyA9PSBJbmRleGVk
REI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCkKLSAgICAgICAgbV92ZXJzaW9uID0gMTsKLSAgICBl
bnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbV92
ZXJzaW9uLCBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSk7Ci19Ci0KLXZvaWQgSURC
T3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBw
cnBCYWNrZW5kLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2VzcygpIik7Ci0gICAgaWYg
KCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9IHBycEJhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlPiBpZGJEYXRhYmFzZTsKLSAgICBpZiAobV9yZXN1bHQpIHsKLSAgICAgICAgaWRiRGF0
YWJhc2UgPSBtX3Jlc3VsdC0+aWRiRGF0YWJhc2UoKTsKLSAgICAgICAgQVNTRVJUKGlkYkRhdGFi
YXNlKTsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAgIGlkYkRhdGFi
YXNlID0gSURCRGF0YWJhc2U6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tl
bmQucmVsZWFzZSgpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICAgICAgbV9kYXRhYmFzZUNh
bGxiYWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIG1fZGF0YWJhc2VD
YWxsYmFja3MgPSBudWxscHRyOwotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGlk
YkRhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0gICAgaWRiRGF0YWJhc2UtPnNldE1ldGFkYXRhKG1l
dGFkYXRhKTsKLSAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3Vj
Y2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLX0KLQotYm9vbCBJREJPcGVuREJSZXF1ZXN0Ojpz
aG91bGRFbnF1ZXVlRXZlbnQoKSBjb25zdAotewotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8
ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwot
ICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCT3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQg
YmV0d2VlbiBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBvZiB0aGUgInN1Y2Nlc3Mi
IGV2ZW50LAotICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJlIGZpcmVkIGluc3RlYWQu
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAmJiBt
X3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6SURCRGF0YWJhc2VUeXBlICYmIG1fcmVzdWx0LT5p
ZGJEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7Ci0gICAgICAgIG1fcmVzdWx0ID0gbnVs
bHB0cjsKLSAgICAgICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBJREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaAppbmRleCA5MWQ0YjAx
Li5hMTAxNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPcGVuREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT3BlbkRCUmVxdWVzdC5oCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNp
Zm5kZWYgSURCT3BlbkRCUmVxdWVzdF9oCkBAIC0zMywzMyArMzMsMTIgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLQogY2xhc3MgSURCT3Bl
bkRCUmVxdWVzdCA6IHB1YmxpYyBJREJSZXF1ZXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PElEQk9wZW5EQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0
X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MpOwotICAgIHZpcnR1YWwgfklE
Qk9wZW5EQlJlcXVlc3QoKTsKLQotICAgIHVzaW5nIElEQlJlcXVlc3Q6Om9uU3VjY2VzczsKLQot
ICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQodWludDY0X3QgZXhpc3RpbmdWZXJzaW9uKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKHVpbnQ2NF90IG9sZFZlcnNp
b24sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRh
ZGF0YSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikgb3ZlcnJpZGU7
Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB+
SURCT3BlbkRCUmVxdWVzdCgpIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZEVucXVldWVFdmVudCgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIElEQk9w
ZW5EQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIElu
ZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzKTsKLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKLSAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rp
b25JZDsKLSAgICB1aW50NjRfdCBtX3ZlcnNpb247Ci0gICAgSW5kZXhlZERCOjpWZXJzaW9uTnVs
bG5lc3MgbV92ZXJzaW9uTnVsbG5lc3M7CisgICAgSURCT3BlbkRCUmVxdWVzdChTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCmlu
ZGV4IDU5YTY2MDEuLjU0Njk3ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCkBAIC0yOSw2ICsyOSw3IEBACiAgICAg
SlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAogICAg
IEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAog
XSBpbnRlcmZhY2UgSURCT3BlbkRCUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgIGF0dHJpYnV0
ZSBFdmVudEhhbmRsZXIgb25ibG9ja2VkOwogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb251
cGdyYWRlbmVlZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlBlbmRpbmdEZWxldGVDYWxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRmYmEyZTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUGVuZGluZ0RlbGV0ZUNhbGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIElEQlBlbmRpbmdEZWxldGVDYWxsX2gKLSNkZWZpbmUgSURCUGVu
ZGluZ0RlbGV0ZUNhbGxfaAotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCUGVuZGluZ0RlbGV0ZUNhbGwgewotcHVibGljOgotICAg
IGV4cGxpY2l0IElEQlBlbmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi0gICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9
Ci0KLSAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzLmdl
dCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJQZW5kaW5nRGVsZXRlQ2FsbF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nT3BlbkNhbGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdPcGVuQ2FsbC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjUzZWY5Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdPcGVuQ2FsbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCUGVuZGluZ09w
ZW5DYWxsX2gKLSNkZWZpbmUgSURCUGVuZGluZ09wZW5DYWxsX2gKLQotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tz
OwotCi1jbGFzcyBJREJQZW5kaW5nT3BlbkNhbGwgewotcHVibGljOgotICAgIElEQlBlbmRpbmdP
cGVuQ2FsbChJREJDYWxsYmFja3MmIGNhbGxiYWNrcywgSURCRGF0YWJhc2VDYWxsYmFja3MmIGRh
dGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24p
Ci0gICAgICAgIDogbV9jYWxsYmFja3MoJmNhbGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNl
Q2FsbGJhY2tzKCZkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lv
bikKLSAgICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAgICB7Ci0gICAg
fQotCi0gICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrcy5n
ZXQoKTsgfQotICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIHsg
cmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KLSAgICB1aW50NjRfdCB2ZXJzaW9u
KCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgaW50NjRfdCB0cmFuc2FjdGlvbklkKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklkOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotICAgIHVpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICBjb25z
dCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQlBlbmRp
bmdPcGVuQ2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyZjczZDNmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0jaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb24uaCIKLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lm
aWMuaD4KLQotdXNpbmcgV1RGOjpUaHJlYWRTcGVjaWZpYzsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4+IFRyYW5zYWN0aW9uTGlzdDsKLQotc3RhdGljIFRocmVhZFNwZWNp
ZmljPFRyYW5zYWN0aW9uTGlzdD4mIHRyYW5zYWN0aW9ucygpCi17Ci0gICAgLy8gRklYTUU6IE1v
dmUgdGhlIFZlY3RvciB0byBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHRvIGF2b2lkIGRlYWxpbmcg
d2l0aAotICAgIC8vIHRocmVhZC1sb2NhbCBzdG9yYWdlLgotICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0
PiogdHJhbnNhY3Rpb25zOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAg
ICAgdHJhbnNhY3Rpb25zID0gbmV3IFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9uTGlzdD47Ci0g
ICAgfSk7Ci0KLSAgICByZXR1cm4gKnRyYW5zYWN0aW9uczsKLX0KLQotdm9pZCBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbikKLXsKLSAgICB0cmFuc2FjdGlvbnMoKS0+YXBwZW5kKHRyYW5z
YWN0aW9uKTsKLX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpkZWFjdGl2
YXRlTmV3VHJhbnNhY3Rpb25zKCkKLXsKLSAgICBUaHJlYWRTcGVjaWZpYzxUcmFuc2FjdGlvbkxp
c3Q+JiBsaXN0ID0gdHJhbnNhY3Rpb25zKCk7Ci0gICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6
ICpsaXN0KQotICAgICAgICB0cmFuc2FjdGlvbi0+c2V0QWN0aXZlKGZhbHNlKTsKLSAgICAvLyBG
SVhNRTogRXhlcmNpc2UgdGhpcyBjYWxsIHRvIGNsZWFyKCkgaW4gYSBsYXlvdXQgdGVzdC4KLSAg
ICBsaXN0LT5jbGVhcigpOwotfQotCi19OwotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmZWY1NWZlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Jf
aAotI2RlZmluZSBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yX2gKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlRyYW5z
YWN0aW9uOwotCi0vLyBUaGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSB0cmFuc2FjdGlvbnMg
Y3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQKLS8vIEphdmFzY3JpcHQgZXhlY3V0aW9uIGNvbnRl
eHQuIFRyYW5zYWN0aW9ucyBoYXZlIGFuIGludGVybmFsIHxhY3RpdmV8IGZsYWcKLS8vIHdoaWNo
IGlzIHNldCB0byB0cnVlIG9uIGNyZWF0aW9uLCBidXQgbXVzdCBiZSBzZXQgdG8gZmFsc2Ugd2hl
biBjb250cm9sCi0vLyByZXR1cm5zIHRvIHRoZSBldmVudCBsb29wLgotCi1jbGFzcyBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhZGROZXdU
cmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPik7Ci0gICAgc3RhdGljIHZvaWQg
ZGVhY3RpdmF0ZU5ld1RyYW5zYWN0aW9ucygpOwotCi1wcml2YXRlOgotICAgIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwCmluZGV4IDg2NGRlNTMuLmM2YThiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0xLDI5ICsxLDI2IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEsNTQ3ICsyOCwxMyBAQAogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAi
RXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2lu
Y2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5k
LmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2UuaCIKLSNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUmVmPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QoYWRvcHRS
ZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpO
b3JtYWxUYXNrLCB0cmFuc2FjdGlvbikpKTsKLSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQo
KTsKLSAgICAvLyBSZXF1ZXN0cyBhc3NvY2lhdGVkIHdpdGggSURCRmFjdG9yeSAob3Blbi9kZWxl
dGVEYXRhYmFzZS9nZXREYXRhYmFzZU5hbWVzKSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCB0cmFu
c2FjdGlvbnMuCi0gICAgaWYgKHRyYW5zYWN0aW9uKQotICAgICAgICB0cmFuc2FjdGlvbi0+cmVn
aXN0ZXJSZXF1ZXN0KHJlcXVlc3QucHRyKCkpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1S
ZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBS
ZWY8SURCUmVxdWVzdD4gcmVxdWVzdChhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29udGV4dCwg
c291cmNlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24pKSk7Ci0gICAgcmVxdWVzdC0+c3VzcGVuZElm
TmVlZGVkKCk7Ci0gICAgLy8gUmVxdWVzdHMgYXNzb2NpYXRlZCB3aXRoIElEQkZhY3RvcnkgKG9w
ZW4vZGVsZXRlRGF0YWJhc2UvZ2V0RGF0YWJhc2VOYW1lcykgYXJlIG5vdCBhc3NvY2lhdGVkIHdp
dGggdHJhbnNhY3Rpb25zLgotICAgIGlmICh0cmFuc2FjdGlvbikKLSAgICAgICAgdHJhbnNhY3Rp
b24tPnJlZ2lzdGVyUmVxdWVzdChyZXF1ZXN0LnB0cigpKTsKLSAgICByZXR1cm4gcmVxdWVzdDsK
LX0KLQotSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCitJREJSZXF1ZXN0OjpJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVE
T01PYmplY3QoY29udGV4dCkKLSAgICAsIG1fcmVzdWx0KG51bGxwdHIpCi0gICAgLCBtX2Vycm9y
Q29kZSgwKQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLSAgICAsIG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCi0gICAgLCBtX3JlYWR5U3RhdGUoUEVORElORykKLSAgICAsIG1fcmVx
dWVzdEFib3J0ZWQoZmFsc2UpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3Rhc2tU
eXBlKHRhc2tUeXBlKQotICAgICwgbV9oYXNQZW5kaW5nQWN0aXZpdHkodHJ1ZSkKLSAgICAsIG1f
Y3Vyc29yVHlwZShJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlKQotICAgICwgbV9j
dXJzb3JEaXJlY3Rpb24oSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHQpCi0gICAgLCBt
X2N1cnNvckZpbmlzaGVkKGZhbHNlKQotICAgICwgbV9wZW5kaW5nQ3Vyc29yKG51bGxwdHIpCi0g
ICAgLCBtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQoZmFsc2UpCi0gICAgLCBtX3ByZXZlbnRQ
cm9wYWdhdGlvbihmYWxzZSkKLSAgICAsIG1fcmVxdWVzdFN0YXRlKGNvbnRleHQpCi17Ci19Ci0K
LUlEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJREJBbnk+IElE
QlJlcXVlc3Q6OnJlc3VsdChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAobV9y
ZWFkeVN0YXRlICE9IERPTkUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4g
bV9yZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8RE9NRXJyb3I+IElEQlJlcXVlc3Q6OmVycm9yKEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX2Vycm9yOwotfQotCi11bnNp
Z25lZCBzaG9ydCBJREJSZXF1ZXN0OjplcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1fZXJyb3JDb2RlOwotfQotCi1QYXNzUmVmUHRyPElEQkFueT4gSURC
UmVxdWVzdDo6c291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zb3VyY2U7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6OnRyYW5zYWN0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKLX0KLQotY29uc3QgU3RyaW5nJiBJREJSZXF1
ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBF
TkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBlbmRpbmcsICgicGVuZGluZyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBkb25lLCAoImRvbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpCi0gICAg
ICAgIHJldHVybiBwZW5kaW5nOwotCi0gICAgcmV0dXJuIGRvbmU7Ci19Ci0KLXZvaWQgSURCUmVx
dWVzdDo6bWFya0Vhcmx5RGVhdGgoKQotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVO
RElORyk7Ci0gICAgbV9yZWFkeVN0YXRlID0gRWFybHlEZWF0aDsKLSAgICBpZiAobV90cmFuc2Fj
dGlvbikKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVlc3QodGhpcyk7Ci19
Ci0KLXZvaWQgSURCUmVxdWVzdDo6YWJvcnQoKQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0QWJv
cnRlZCk7Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElO
RyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBET05F
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnF1ZXVlZCBldmVudHMgbWF5IGJlIHRoZSBv
bmx5IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdC4KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gc2Vs
Zih0aGlzKTsKLQotICAgIEV2ZW50UXVldWUmIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVl
ZEV2ZW50cykgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50
KCpldmVudCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAg
fQotICAgIG1fZW5xdWV1ZWRFdmVudHMuY2xlYXIoKTsKLQotICAgIG1fZXJyb3JDb2RlID0gMDsK
LSAgICBtX2Vycm9yID0gbnVsbHB0cjsKLSAgICBtX2Vycm9yTWVzc2FnZSA9IFN0cmluZygpOwot
ICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKLSAgICBvbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwotICAgIG1fcmVxdWVzdEFi
b3J0ZWQgPSB0cnVlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldEN1cnNvckRldGFpbHMoSW5k
ZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
IGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAg
IEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKLSAgICBtX2N1cnNvclR5cGUgPSBjdXJzb3JUeXBl
OwotICAgIG1fY3Vyc29yRGlyZWN0aW9uID0gZGlyZWN0aW9uOwotfQotCi12b2lkIElEQlJlcXVl
c3Q6OnNldFBlbmRpbmdDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKLXsKLSAg
ICBBU1NFUlQobV9yZWFkeVN0YXRlID09IERPTkUpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1f
cGVuZGluZ0N1cnNvcik7Ci0gICAgQVNTRVJUKGN1cnNvciA9PSBnZXRSZXN1bHRDdXJzb3IoKSk7
Ci0KLSAgICBtX3BlbmRpbmdDdXJzb3IgPSBjdXJzb3I7Ci0gICAgbV9yZXN1bHQgPSBudWxscHRy
OwotICAgIG1fcmVhZHlTdGF0ZSA9IFBFTkRJTkc7Ci0gICAgbV9lcnJvckNvZGUgPSAwOwotICAg
IG1fZXJyb3IgPSBudWxscHRyOwotICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7Ci0gICAg
bV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOwotfQotCi1SZWZQdHI8SURCQ3Vy
c29yPiBJREJSZXF1ZXN0OjpnZXRSZXN1bHRDdXJzb3IoKQotewotICAgIGlmICghbV9yZXN1bHQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChtX3Jlc3VsdC0+dHlwZSgpID09IElE
QkFueTo6SURCQ3Vyc29yVHlwZSkKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5pZGJDdXJzb3Io
KTsKLSAgICBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1
ZVR5cGUpCi0gICAgICAgIHJldHVybiBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0aFZhbHVlKCk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29y
KFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKLSAgICBt
X2N1cnNvcktleSA9IGtleTsKLSAgICBtX2N1cnNvclByaW1hcnlLZXkgPSBwcmltYXJ5S2V5Owot
ICAgIG1fY3Vyc29yVmFsdWUgPSB2YWx1ZTsKLQotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5k
ZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5KSB7Ci0gICAgICAgIG1fcmVzdWx0ID0gSURCQW55
OjpjcmVhdGUoY3Vyc29yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yV2l0aFZhbHVlOjpmcm9tQ3Vyc29yKGN1cnNvcikp
OwotfQotCi12b2lkIElEQlJlcXVlc3Q6OmZpbmlzaEN1cnNvcigpCi17Ci0gICAgbV9jdXJzb3JG
aW5pc2hlZCA9IHRydWU7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBQRU5ESU5HKQotICAgICAg
ICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOwotfQotCi1ib29sIElEQlJlcXVlc3Q6OnNo
b3VsZEVucXVldWVFdmVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwg
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFT
U0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7Ci0g
ICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYg
bV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fZXJyb3IgJiYgIW1fcmVzdWx0KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJSZXF1ZXN0
OjpvbkVycm9yKCkgKCVzKSAnJXMnIiwgZXJyb3ItPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBlcnJv
ci0+bWVzc2FnZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXJyb3JDb2RlID0gZXJyb3ItPmNvZGUoKTsK
LSAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yLT5tZXNzYWdlKCk7Ci0gICAgbV9lcnJvciA9IERP
TUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShlcnJvci0+
aWRiQ29kZSgpKSk7Ci0gICAgbV9wZW5kaW5nQ3Vyc29yID0gbnVsbHB0cjsKLSAgICBlbnF1ZXVl
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkp
OwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxFdmVudD4gY3JlYXRlU3VjY2Vzc0V2ZW50KCkKLXsK
LSAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxz
ZSwgZmFsc2UpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoRE9NU3RyaW5nTGlzdCkiKTsKLSAgICBpZiAoIXNob3VsZEVucXVl
dWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3Jl
YXRlKGRvbVN0cmluZ0xpc3QpOwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQo
KSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZD4gcHJwQmFja2VuZCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6
Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3Jl
cXVlc3RTdGF0ZSk7Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCA9IHBy
cEJhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gYmFja2VuZC0+a2V5KCk7Ci0gICAg
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGJhY2tlbmQtPnByaW1hcnlLZXkoKTsKLQotICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZl
cihyZXF1ZXN0U3RhdGUoKSwgYmFja2VuZC0+dmFsdWVCdWZmZXIoKSwgISFrZXkpOwotCi0gICAg
QVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsK
LSAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgewotICAgIGNhc2UgSW5kZXhlZERCOjpDdXJzb3JU
eXBlOjpLZXlPbmx5OgotICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5k
LnJlbGVhc2UoKSwgbV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1fc291cmNlLmdldCgpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmRleGVkREI6OkN1
cnNvclR5cGU6OktleUFuZFZhbHVlOgotICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRoVmFs
dWU6OmNyZWF0ZShiYWNrZW5kLnJlbGVhc2UoKSwgbV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1f
c291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHNldFJl
c3VsdEN1cnNvcihjdXJzb3IsIGtleS5yZWxlYXNlKCksIHByaW1hcnlLZXkucmVsZWFzZSgpLCB2
YWx1ZSk7Ci0KLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi12
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5KQogewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsKLSAg
ICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aWRiS2V5ICYmIGlkYktleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIERPTVJlcXVlc3RTdGF0ZTo6
U2NvcGUgc2NvcGUobV9yZXF1ZXN0U3RhdGUpOwotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6
Y3JlYXRlKGlkYktleVRvU2NyaXB0VmFsdWUocmVxdWVzdFN0YXRlKCksIGlkYktleSkpOwotICAg
IH0gZWxzZQotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpOwotICAg
IGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVz
dDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlcikKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhTaGFyZWRCdWZmZXIpIik7
Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0KLSAgICAvLyBG
SVhNRTogQnkgbm90IGtub3dpbmcgd2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkZWZpbmVkIGhl
cmUsIHdlIGRvbid0IGtub3cKLSAgICAvLyBpZiBhIG51bGwgdmFsdWVCdWZmZXIgbWVhbnMgdGhl
IHZhbHVlIGlzIG51bGwgb3IgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIocmVxdWVzdFN0
YXRlKCksIHZhbHVlQnVmZmVyLCB0cnVlKTsKLSAgICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7
Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4g
ZWZmZWN0aXZlT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSkKLXsKLSAgICBp
ZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9yZVR5cGUpCi0gICAgICAg
IHJldHVybiBzb3VyY2UtPmlkYk9iamVjdFN0b3JlKCk7Ci0gICAgaWYgKHNvdXJjZS0+dHlwZSgp
ID09IElEQkFueTo6SURCSW5kZXhUeXBlKQotICAgICAgICByZXR1cm4gc291cmNlLT5pZGJJbmRl
eCgpLT5vYmplY3RTdG9yZSgpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0jZW5kaWYKLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhTaGFyZWRCdWZmZXIsIElEQktleSwgSURCS2V5UGF0aCki
KTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKGtleVBhdGggPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUo
bV9zb3VyY2UpLT5rZXlQYXRoKCkpOwotI2VuZGlmCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29w
ZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0KLSAgICAvLyBGSVhNRTogQnkgbm90IGtub3dpbmcg
d2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkZWZpbmVkIGhlcmUsIHdlIGRvbid0IGtub3cKLSAg
ICAvLyBpZiBhIG51bGwgdmFsdWVCdWZmZXIgbWVhbnMgdGhlIHZhbHVlIGlzIG51bGwgb3IgdGhl
IHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSA9
IGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIocmVxdWVzdFN0YXRlKCksIHZhbHVlQnVmZmVyLCB0
cnVlKTsKLQotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5Owot
Ci0gICAgaWYgKCFrZXlQYXRoLmlzTnVsbCgpKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBS
ZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgocmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwgdmFsdWUsIGtleVBhdGgpOwotICAgICAg
ICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFsKHByaW1hcnlLZXku
Z2V0KCkpKTsKLSNlbmRpZgotICAgICAgICBib29sIGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlKHJlcXVlc3RTdGF0ZSgpLCBwcmltYXJ5S2V5LCB2YWx1ZSwga2V5UGF0aCk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaW5qZWN0ZWQsIGluamVjdGVkKTsKLSAgICB9Ci0KLSAg
ICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKGludDY0X3QgdmFsdWUpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJSZXF1ZXN0Ojpv
blN1Y2Nlc3MoaW50NjRfdCkiKTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6bnVtYmVyVmFsdWUodmFsdWUpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1
Y2Nlc3MoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzKCki
KTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
cmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVk
VmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzSW50ZXJuYWwoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQotewotICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7Ci0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RT
dGF0ZSk7Ci0gICAgcmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKGRlc2VyaWFsaXplSURCVmFsdWUo
cmVxdWVzdFN0YXRlKCksIHZhbHVlKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
SW50ZXJuYWwoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQotewotICAgIG1f
cmVzdWx0ID0gSURCQW55OjpjcmVhdGUodmFsdWUpOwotICAgIGlmIChtX3BlbmRpbmdDdXJzb3Ip
IHsKLSAgICAgICAgbV9wZW5kaW5nQ3Vyc29yLT5jbG9zZSgpOwotICAgICAgICBtX3BlbmRpbmdD
dXJzb3IgPSBudWxscHRyOwotICAgIH0KLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2
ZW50KCkpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlcikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6Om9uU3Vj
Y2VzcyhrZXksIHByaW1hcnlLZXksIHZhbHVlQnVmZmVyKSIpOwotICAgIGlmICghc2hvdWxkRW5x
dWV1ZUV2ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTVJlcXVlc3RTdGF0ZTo6U2Nv
cGUgc2NvcGUobV9yZXF1ZXN0U3RhdGUpOwotCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
dmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0ZSgpLCBidWZmZXIs
ICEha2V5KTsKLQotICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOwotICAgIHNldFJlc3VsdEN1
cnNvcihtX3BlbmRpbmdDdXJzb3IucmVsZWFzZSgpLCBrZXksIHByaW1hcnlLZXksIHZhbHVlKTsK
LSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi1ib29sIElEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEluIGFu
IGlkZWFsIHdvcmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFz
IGEgb3IgY2FuCi0gICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBl
dmVudCBsaXN0ZW5lcnMuIFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCi0gICAgLy8gICAgICAgIHVz
ZXIgZ2VuZXJhdGVkIGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0
aXZpdHkgJiYgIW1fY29udGV4dFN0b3BwZWQ7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c3RvcCgp
Ci17Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dFN0b3BwZWQgPSB0cnVlOwotICAgIG1fcmVxdWVzdFN0YXRlLmNsZWFyKCk7Ci0gICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKQotICAgICAgICBtYXJrRWFybHlEZWF0aCgpOwot
fQotCi1ib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAotewot
ICAgIHJldHVybiAhbV9oYXNQZW5kaW5nQWN0aXZpdHk7Ci19Ci0KLWNvbnN0IGNoYXIqIElEQlJl
cXVlc3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURCUmVx
dWVzdCI7Ci19Ci0KLUV2ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50
ZXJmYWNlVHlwZTsKLX0KLQotYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudCIpOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7Ci0gICAg
QVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZp
dHkpOwotICAgIEFTU0VSVChtX2VucXVldWVkRXZlbnRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0
aGlzKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8IERPTkUsICJXaGVu
IGRpc3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05FKCVkKSwgd2FzICVkIiwg
ZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBET05FLCBtX3JlYWR5U3RhdGUp
OwotCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0K
LSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQotICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZl
bnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQotICAgICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50
cy5yZW1vdmUoaSk7Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7Ci0gICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24g
JiYgIW1fcHJldmVudFByb3BhZ2F0aW9uKSB7Ci0gICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJh
bnNhY3Rpb24pOwotICAgICAgICAvLyBJZiB0aGVyZSBldmVyIGFyZSBldmVudHMgdGhhdCBhcmUg
YXNzb2NpYXRlZCB3aXRoIGEgZGF0YWJhc2UgYnV0Ci0gICAgICAgIC8vIHRoYXQgZG8gbm90IGhh
dmUgYSB0cmFuc2FjdGlvbiwgdGhlbiB0aGlzIHdpbGwgbm90IHdvcmsgYW5kIHdlIG5lZWQKLSAg
ICAgICAgLy8gdGhpcyBvYmplY3QgdG8gYWN0dWFsbHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUg
ZGF0YWJhc2UgKHRvIGVuc3VyZQotICAgICAgICAvLyBpdCBzdGF5cyBhbGl2ZSkuCi0gICAgICAg
IHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24tPmRiKCkpOwotICAgIH0KLQotICAgIC8vIEN1
cnNvciBwcm9wZXJ0aWVzIHNob3VsZCBub3QgdXBkYXRlZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVu
dCBpcyBiZWluZyBkaXNwYXRjaGVkLgotICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvclRvTm90
aWZ5OwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQp
IHsKLSAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRSZXN1bHRDdXJzb3IoKTsKLSAgICAgICAg
aWYgKGN1cnNvclRvTm90aWZ5KSB7Ci0gICAgICAgICAgICBjdXJzb3JUb05vdGlmeS0+c2V0VmFs
dWVSZWFkeShyZXF1ZXN0U3RhdGUoKSwgbV9jdXJzb3JLZXkucmVsZWFzZSgpLCBtX2N1cnNvclBy
aW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVlKTsKLSAgICAgICAgICAgIG1fY3Vyc29y
VmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKLSAgICAgICAgQVNTRVJUKCFt
X2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQpOwotICAgICAgICBtX2RpZEZpcmVVcGdyYWRlTmVl
ZGVkRXZlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaGVuIHdlIGFsbG93IGN1
c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5IG5lZWQgdG8gY2hhbmdl
LgotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCwgImV2ZW50IHR5cGUgd2Fz
ICVzIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBjb25zdCBi
b29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAmJiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJv
cnRFcnJvcikpOwotCi0gICAgaWYgKHNldFRyYW5zYWN0aW9uQWN0aXZlKQotICAgICAgICBtX3Ry
YW5zYWN0aW9uLT5zZXRBY3RpdmUodHJ1ZSk7Ci0KLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVs
dCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOwot
Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBE
T05FKQotICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVlc3QodGhpcyk7
Ci0KLSAgICAgICAgLy8gUG9zc2libHkgYWJvcnQgdGhlIHRyYW5zYWN0aW9uLiBUaGlzIG11c3Qg
b2NjdXIgYWZ0ZXIgdW5yZWdpc3RlcmluZyAoc28gdGhpcyByZXF1ZXN0Ci0gICAgICAgIC8vIGRv
ZXNuJ3QgcmVjZWl2ZSBhIHNlY29uZCBlcnJvcikgYW5kIGJlZm9yZSBkZWFjdGl2YXRpbmcgKHdo
aWNoIG1pZ2h0IHRyaWdnZXIgY29tbWl0KS4KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9udFByZXZlbnREZWZhdWx0ICYmICFtX3JlcXVl
c3RBYm9ydGVkKSB7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihtX2Vycm9y
LCBtX2Vycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChJR05P
UkVfRVhDRVBUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBs
YXN0IHJlcXVlc3QgaW4gdGhlIHRyYW5zYWN0aW9uJ3MgbGlzdCwgaXQgbWF5IGNvbW1pdCBoZXJl
LgotICAgICAgICBpZiAoc2V0VHJhbnNhY3Rpb25BY3RpdmUpCi0gICAgICAgICAgICBtX3RyYW5z
YWN0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjdXJzb3JUb05vdGlm
eSkKLSAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7
Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlID09IERPTkUgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBt
X2N1cnNvckZpbmlzaGVkKSAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS51cGdyYWRl
bmVlZGVkRXZlbnQpCi0gICAgICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnVuY2F1
Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQotewotICAgIGlmIChtX3RyYW5zYWN0aW9uICYm
ICFtX3JlcXVlc3RBYm9ydGVkKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKERP
TUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpLCAiVW5jYXVnaHQgZXhjZXB0aW9uIGluIGV2ZW50
IGhhbmRsZXIuIik7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENFUFRJ
T04pOwotICAgIH0KLX0KLQotdm9pZCBJREJSZXF1ZXN0Ojp0cmFuc2FjdGlvbkRpZEZpbmlzaEFu
ZERpc3BhdGNoKCkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgQVNTRVJUKG1f
dHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKTsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRl
ID09IERPTkUpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIG1f
dHJhbnNhY3Rpb24gPSBudWxscHRyOwotICAgIG1fcmVhZHlTdGF0ZSA9IFBFTkRJTkc7Ci19Ci0K
LXZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQot
ewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0g
RE9ORSk7Ci0KLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVh
ZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCwgIldoZW4g
cXVldWVpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSB3YXMgJWQiLCBldmVudC0+dHlwZSgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fcmVhZHlTdGF0ZSk7Ci0KLSAgICBldmVudC0+c2V0VGFy
Z2V0KHRoaXMpOwotCi0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudChldmVudC5nZXQoKSkpCi0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMu
YXBwZW5kKGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAppbmRleCAwZWE3ZTJmLi40NGZiOWUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCkBAIC0xLDI5ICsx
LDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBJREJSZXF1ZXN0X2gKQEAgLTM5LDEwICszNiw3IEBACiAjaW5jbHVk
ZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAi
SURCQW55LmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29y
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VDYWxsYmFja3MuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTEsMTggKzQ1LDE1IEBAIGNsYXNzIElEQlRyYW5zYWN0aW9uOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFNj
cmlwdFdyYXBwYWJsZSwgcHVibGljIElEQkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgSURCUmVxdWVzdCA6
IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRh
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlJl
cXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwg
SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2aXJ0
dWFsIH5JREJSZXF1ZXN0KCk7CisgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpIHsgfQogCi0gICAg
UGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdChFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgdW5z
aWduZWQgc2hvcnQgZXJyb3JDb2RlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBQYXNzUmVm
UHRyPERPTUVycm9yPiBlcnJvcihFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxJREJBbnk+IHNvdXJjZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBwcmV2ZW50UHJvcGFnYXRpb24oKSB7IG1f
cHJldmVudFByb3BhZ2F0aW9uID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJB
bnk+IHJlc3VsdChFeGNlcHRpb25Db2RlJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgZXJyb3JDb2RlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJvcihFeGNlcHRpb25Db2RlJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgPSAw
OwogCiAgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCiAgICAgZW51bSBSZWFkeVN0YXRlIHsKQEAg
LTcxLDk2ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEVhcmx5RGVhdGggPSAzCiAgICAgfTsK
IAotICAgIGNvbnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBtYXJr
RWFybHlEZWF0aCgpOwotICAgIHZvaWQgc2V0Q3Vyc29yRGV0YWlscyhJbmRleGVkREI6OkN1cnNv
clR5cGUsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2b2lkIHNldFBlbmRpbmdD
dXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2b2lkIGZpbmlzaEN1cnNvcigpOwot
ICAgIHZvaWQgYWJvcnQoKTsKLQotICAgIC8vIElEQkNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9p
ZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5
Pikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0IElEQktleVBhdGgmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGludDY0X3QpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFdmVudFRh
cmdldAotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBB
Y3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkgb3ZlcnJpZGUgZmluYWw7Ci0K
LSAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRy
YW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0Y2goKTsKLQotICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCQ2FsbGJhY2tzPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6
ZGVyZWY7Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgeyBy
ZXR1cm4gbV90YXNrVHlwZTsgfQotCi0gICAgRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUo
KSB7IHJldHVybiAmbV9yZXF1ZXN0U3RhdGU7IH0KLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdCBB
UEkuCi0gICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVk
OgotICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
QW55PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9u
Kik7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRFbnF1ZXVlRXZlbnQoKSBjb25zdDsKLSAgICB2b2lkIG9uU3VjY2Vzc0lu
dGVybmFsKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7Ci0gICAgdm9pZCBvblN1
Y2Nlc3NJbnRlcm5hbChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwotCi0gICAgUmVm
UHRyPElEQkFueT4gbV9yZXN1bHQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9lcnJvckNvZGU7Ci0g
ICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotICAgIFJlZlB0cjxET01FcnJvcj4gbV9lcnJvcjsK
LSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBt
X3RyYW5zYWN0aW9uOwotICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGJvb2wgbV9y
ZXF1ZXN0QWJvcnRlZDsgLy8gTWF5IGJlIGFib3J0ZWQgYnkgdHJhbnNhY3Rpb24gdGhlbiByZWNl
aXZlIGFzeW5jIG9uc3VjY2VzczsgaWdub3JlIHZzLiBhc3NlcnQuCi0KLXByaXZhdGU6Ci0gICAg
Ly8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLSAgICBj
b25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFdmVu
dFRhcmdldCBBUEkuCi0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUg
ZmluYWwgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3Zl
cnJpZGUgZmluYWwgeyBkZXJlZigpOyB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yPiBnZXRSZXN1
bHRDdXJzb3IoKTsKLSAgICB2b2lkIHNldFJlc3VsdEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNv
cj4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7Ci0KLSAgICBSZWZQdHI8SURCQW55PiBtX3Nv
dXJjZTsKLSAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7
Ci0KLSAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OwotICAgIFZlY3RvcjxSZWZQdHI8RXZl
bnQ+PiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQg
dHlwZSB3aWxsIGJlIGEgY3Vyc29yLgotICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNv
clR5cGU7Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9jdXJzb3JEaXJlY3Rpb247
Ci0gICAgYm9vbCBtX2N1cnNvckZpbmlzaGVkOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fcGVu
ZGluZ0N1cnNvcjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnNvcktleTsKLSAgICBSZWZQdHI8
SURCS2V5PiBtX2N1cnNvclByaW1hcnlLZXk7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
bV9jdXJzb3JWYWx1ZTsKLSAgICBib29sIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudDsKLSAg
ICBib29sIG1fcHJldmVudFByb3BhZ2F0aW9uOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlIG1fcmVx
dWVzdFN0YXRlOworICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKLSNlbmRpZiAvLyBJREJSZXF1ZXN0X2gKKyNlbmRpZiAvLyBMZWdhY3lSZXF1ZXN0
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwK
aW5kZXggZWY2ZTJiNi4uM2RiZGY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5pZGwKQEAgLTMzLDcgKzMzLDggQEAKICAgICBBY3RpdmVET01P
YmplY3QsCiAgICAgRXZlbnRUYXJnZXQsCiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAg
SlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0CisgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAor
ICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCA6IEV2ZW50
VGFyZ2V0IHsKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUg
SURCQW55IHJlc3VsdDsKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgRE9NRXJyb3IgZXJyb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNmVjMjlmYS4uNTE3MDc3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNw
cApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CkBAIC0yOCwzNCArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0j
aW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkV2ZW50
RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90IGlkLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGUgbW9kZSwgSURCRGF0YWJhc2UqIGRiKQotewotICAgIElEQk9wZW5EQlJlcXVlc3Qq
IG9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb24oYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBpZCwgb2JqZWN0U3Rv
cmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSkp
KTsKLSAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHRyYW5z
YWN0aW9uOwotfQotCi1SZWY8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50NjRfdCBpZCwgSURCRGF0YWJhc2Uq
IGRiLCBJREJPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0LCBjb25zdCBJREJEYXRhYmFzZU1l
dGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQorSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBBY3RpdmVET01PYmplY3Qo
Y29udGV4dCkKIHsKLSAgICBSZWY8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVm
KCpuZXcgSURCVHJhbnNhY3Rpb24oY29udGV4dCwgaWQsIFZlY3RvcjxTdHJpbmc+KCksIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlLCBkYiwgb3BlbkRCUmVxdWVzdCwg
cHJldmlvdXNNZXRhZGF0YSkpKTsKLSAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7
Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIElEQlRy
YW5zYWN0aW9uOjptb2RlUmVhZE9ubHkoKQpAQCAtODgsMjQ5ICs2Nyw2IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkV3JpdGVMZWdhY3koKQogICAgIHJldHVy
biByZWFkd3JpdGU7CiB9CiAKLQotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGludDY0X3QgaWQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlLCBJ
REJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QsIGNvbnN0IElE
QkRhdGFiYXNlTWV0YWRhdGEmIHByZXZpb3VzTWV0YWRhdGEpCi0gICAgOiBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCkKLSAgICAsIG1faWQoaWQpCi0gICAgLCBtX2RhdGFiYXNlKGRiKQotICAgICwg
bV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlTmFtZXMpCi0gICAgLCBtX29wZW5EQlJlcXVl
c3Qob3BlbkRCUmVxdWVzdCkKLSAgICAsIG1fbW9kZShtb2RlKQotICAgICwgbV9zdGF0ZShBY3Rp
dmUpCi0gICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQotICAgICwgbV9jb250ZXh0U3Rv
cHBlZChmYWxzZSkKLSAgICAsIG1fcHJldmlvdXNNZXRhZGF0YShwcmV2aW91c01ldGFkYXRhKQot
ewotICAgIGlmIChtb2RlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hh
bmdlKSB7Ci0gICAgICAgIC8vIE5vdCBhY3RpdmUgdW50aWwgdGhlIGNhbGxiYWNrLgotICAgICAg
ICBtX3N0YXRlID0gSW5hY3RpdmU7Ci0gICAgfQotCi0gICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5j
ZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhBZG9w
dGlvblJlcXVpcmVtZW50KCk7Ci0gICAgaWYgKG1fc3RhdGUgPT0gQWN0aXZlKQotICAgICAgICBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFuc2FjdGlvbih0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNyZWF0ZWQodGhpcyk7Ci19Ci0KLUlEQlRyYW5zYWN0
aW9uOjp+SURCVHJhbnNhY3Rpb24oKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVk
IHx8IG1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVChtX3JlcXVlc3RMaXN0LmlzRW1wdHko
KSB8fCBtX2NvbnRleHRTdG9wcGVkKTsKLX0KLQotY29uc3QgU3RyaW5nJiBJREJUcmFuc2FjdGlv
bjo6bW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1vZGVUb1N0cmluZyhtX21vZGUpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjpzZXRFcnJvcihQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJv
ciwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0g
RmluaXNoZWQpOwotICAgIEFTU0VSVChlcnJvcik7Ci0KLSAgICAvLyBUaGUgZmlyc3QgZXJyb3Ig
dG8gYmUgc2V0IGlzIHRoZSB0cnVlIGNhdXNlIG9mIHRoZQotICAgIC8vIHRyYW5zYWN0aW9uIGFi
b3J0LgotICAgIGlmICghbV9lcnJvcikgewotICAgICAgICBtX2Vycm9yID0gZXJyb3I7Ci0gICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlOwotICAgIH0KLX0KLQotUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNo
ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIElEQk9iamVjdFN0b3JlTWFwOjpp
dGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0g
bV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQotICAg
IGlmICghaXNWZXJzaW9uQ2hhbmdlKCkgJiYgIW1fb2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhu
YW1lKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9y
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQg
PSBtX2RhdGFiYXNlLT5maW5kT2JqZWN0U3RvcmVJZChuYW1lKTsKLSAgICBpZiAob2JqZWN0U3Rv
cmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNT
RVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEgPSBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpOwot
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGUobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKSwgdGhpcyk7
Ci0gICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICByZXR1cm4g
b2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpvYmplY3RT
dG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBwcnBPYmplY3RTdG9yZSkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7Ci0g
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IHBycE9iamVjdFN0b3JlOwot
ICAgIG1fb2JqZWN0U3RvcmVNYXAuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICBpZiAoaXNW
ZXJzaW9uQ2hhbmdlKCkpCi0gICAgICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLnNldChvYmpl
Y3RTdG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VS
VChtX3N0YXRlICE9IEZpbmlzaGVkKTsKLSAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwot
ICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmlu
ZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkgewotICAgICAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gaXQtPnZhbHVlOwotICAgICAg
ICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShuYW1lKTsKLSAgICAgICAgb2JqZWN0U3RvcmUtPm1h
cmtEZWxldGVkKCk7Ci0gICAgICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLnNldChvYmplY3RT
dG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkpOwotICAgICAgICBtX2RlbGV0ZWRPYmplY3RT
dG9yZXMuYWRkKG9iamVjdFN0b3JlKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246
OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5z
YWN0aW9uOjpzZXRBY3RpdmUoJXMpIGZvciB0cmFuc2FjdGlvbiBpZCAlbGxpIiwgYWN0aXZlID8g
InRydWUiIDogImZhbHNlIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSk7Ci0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVkLCAiQSBmaW5pc2hlZCB0cmFuc2Fj
dGlvbiB0cmllZCB0byBzZXRBY3RpdmUoJXMpIiwgYWN0aXZlID8gInRydWUiIDogImZhbHNlIik7
Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKGFjdGl2ZSAhPSAobV9zdGF0ZSA9PSBBY3RpdmUpKTsKLSAgICBtX3N0YXRlID0gYWN0aXZl
ID8gQWN0aXZlIDogSW5hY3RpdmU7Ci0KLSAgICBpZiAoIWFjdGl2ZSAmJiBtX3JlcXVlc3RMaXN0
LmlzRW1wdHkoKSkKLSAgICAgICAgYmFja2VuZERCKCktPmNvbW1pdChtX2lkKTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKG1f
c3RhdGUgPT0gRmluaXNoaW5nIHx8IG1fc3RhdGUgPT0gRmluaXNoZWQpIHsKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoaW5nOwotCi0gICAgd2hpbGUgKCFtX3Jl
cXVlc3RMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9ICptX3JlcXVlc3RMaXN0LmJlZ2luKCk7Ci0gICAgICAgIG1fcmVxdWVzdExpc3QucmVtb3Zl
KHJlcXVlc3QpOwotICAgICAgICByZXF1ZXN0LT5hYm9ydCgpOwotICAgIH0KLQotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4gc2VsZlJlZiA9IHRoaXM7Ci0gICAgYmFja2VuZERCKCktPmFib3J0
KG1faWQpOwotfQotCi1JREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyOjpPcGVuQ3Vy
c29yTm90aWZpZXIoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24sIElEQkN1
cnNvciogY3Vyc29yKQotICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbiksCi0gICAgICBt
X2N1cnNvcihjdXJzb3IpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29y
KG1fY3Vyc29yKTsKLX0KLQotSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6fk9w
ZW5DdXJzb3JOb3RpZmllcigpCi17Ci0gICAgaWYgKG1fY3Vyc29yKQotICAgICAgICBtX3RyYW5z
YWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcihtX2N1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6Y3Vyc29yRmluaXNoZWQoKQotewotICAgIGlm
IChtX2N1cnNvcikgewotICAgICAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNv
cihtX2N1cnNvcik7Ci0gICAgICAgIG1fY3Vyc29yID0gbnVsbHB0cjsKLSAgICAgICAgbV90cmFu
c2FjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdp
c3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5h
ZGQoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29y
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCi17Ci0gICAg
SGFzaFNldDxJREJDdXJzb3IqPiBjdXJzb3JzOwotICAgIGN1cnNvcnMuc3dhcChtX29wZW5DdXJz
b3JzKTsKLSAgICBmb3IgKGF1dG8mIGN1cnNvciA6IGN1cnNvcnMpCi0gICAgICAgIGN1cnNvci0+
Y2xvc2UoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJSZXF1ZXN0KElEQlJl
cXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKHJlcXVlc3QpOwotICAgIEFTU0VSVChtX3N0
YXRlID09IEFjdGl2ZSk7Ci0gICAgbV9yZXF1ZXN0TGlzdC5hZGQocmVxdWVzdCk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVlc3QqIHJlcXVlc3Qp
Ci17Ci0gICAgQVNTRVJUKHJlcXVlc3QpOwotICAgIC8vIElmIHdlIGFib3J0ZWQgdGhlIHJlcXVl
c3QsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZC4KLSAgICBtX3JlcXVlc3RMaXN0
LnJlbW92ZShyZXF1ZXN0KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydChQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCVHJhbnNhY3Rpb246Om9uQWJvcnQiKTsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gZXJyb3IgPSBwcnBFcnJvcjsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7Ci0K
LSAgICBpZiAobV9zdGF0ZSAhPSBGaW5pc2hpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVycm9yLmdl
dCgpKTsKLSAgICAgICAgc2V0RXJyb3IoRE9NRXJyb3I6OmNyZWF0ZShlcnJvci0+bmFtZSgpKSwg
ZXJyb3ItPm1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgLy8gQWJvcnQgd2FzIG5vdCB0cmlnZ2VyZWQg
YnkgZnJvbnQtZW5kLCBzbyBvdXRzdGFuZGluZyByZXF1ZXN0cyBtdXN0Ci0gICAgICAgIC8vIGJl
IGFib3J0ZWQgbm93LgotICAgICAgICB3aGlsZSAoIW1fcmVxdWVzdExpc3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9ICptX3JlcXVlc3RMaXN0
LmJlZ2luKCk7Ci0gICAgICAgICAgICBtX3JlcXVlc3RMaXN0LnJlbW92ZShyZXF1ZXN0KTsKLSAg
ICAgICAgICAgIHJlcXVlc3QtPmFib3J0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdGF0ZSA9
IEZpbmlzaGluZzsKLSAgICB9Ci0KLSAgICBpZiAoaXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwKQotICAg
ICAgICAgICAgb2JqZWN0U3RvcmUua2V5LT5zZXRNZXRhZGF0YShvYmplY3RTdG9yZS52YWx1ZSk7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNldE1ldGFkYXRhKG1fcHJldmlvdXNNZXRhZGF0YSk7Ci0g
ICAgICAgIG1fZGF0YWJhc2UtPmNsb3NlKCk7Ci0gICAgfQotICAgIG1fb2JqZWN0U3RvcmVDbGVh
bnVwTWFwLmNsZWFyKCk7Ci0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAgLy8gRW5xdWV1
ZSBldmVudHMgYmVmb3JlIG5vdGlmeWluZyBkYXRhYmFzZSwgYXMgZGF0YWJhc2UgbWF5IGNsb3Nl
IHdoaWNoIGVucXVldWVzIG1vcmUgZXZlbnRzIGFuZCBvcmRlciBtYXR0ZXJzLgotICAgIGVucXVl
dWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxz
ZSkpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUiKTsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBGaW5p
c2hlZCk7Ci0gICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKLSAgICBtX29iamVjdFN0b3JlQ2xlYW51
cE1hcC5jbGVhcigpOwotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIC8vIEVucXVldWUg
ZXZlbnRzIGJlZm9yZSBub3RpZnlpbmcgZGF0YWJhc2UsIGFzIGRhdGFiYXNlIG1heSBjbG9zZSB3
aGljaCBlbnF1ZXVlcyBtb3JlIGV2ZW50cyBhbmQgb3JkZXIgbWF0dGVycy4KLSAgICBlbnF1ZXVl
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZh
bHNlKSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLX0KLQot
Ym9vbCBJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25n
IGFzIGFueW9uZSBoYXMgYSBvciBjYW4KLSAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVz
IG9yIGFueSBjaGlsZCByZXF1ZXN0IG9iamVjdCBhbmQgYW55IG9mIHRob3NlIGhhdmUKLSAgICAv
LyAgICAgICAgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlzICBpbiBvcmRlciB0byBoYW5kbGUgdXNl
ciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5LgotICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rp
dml0eSAmJiAhbV9jb250ZXh0U3RvcHBlZDsKLX0KLQogSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUgSURCVHJhbnNhY3Rpb246OnN0cmluZ1RvTW9kZShjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtb2RlU3RyaW5nLmlzTnVsbCgpCkBAIC0z
NjAsNzQgKzk2LDYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVRv
U3RyaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUKICAgICByZXR1cm4gSURCVHJh
bnNhY3Rpb246Om1vZGVSZWFkT25seSgpOwogfQogCi1ib29sIElEQlRyYW5zYWN0aW9uOjpkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKLSAgICBBU1NFUlQobV9zdGF0ZSAh
PSBGaW5pc2hlZCk7Ci0gICAgQVNTRVJUKG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgp
ID09IHRoaXMpOwotICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKLQotICAgIC8vIEJyZWFrIHJlZmVy
ZW5jZSBjeWNsZXMuCi0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVN
YXApCi0gICAgICAgIG9iamVjdFN0b3JlLnZhbHVlLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7Ci0g
ICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOwotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUg
OiBtX2RlbGV0ZWRPYmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVjdFN0b3JlLT50cmFuc2FjdGlv
bkZpbmlzaGVkKCk7Ci0gICAgbV9kZWxldGVkT2JqZWN0U3RvcmVzLmNsZWFyKCk7Ci0KLSAgICBW
ZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVuZCh0
aGlzKTsKLSAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKLQotICAgIC8vIEZJWE1FOiBXaGVuIHdl
IGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5IG5lZWQg
dG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb21w
bGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwot
ICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50
LmdldCgpLCB0YXJnZXRzKTsKLSAgICAvLyBGSVhNRTogVHJ5IHRvIGNvbnN0cnVjdCBhIHRlc3Qg
d2hlcmUgfHRoaXN8IG91dGxpdmVzIG9wZW5EQlJlcXVlc3QgYW5kIHdlCi0gICAgLy8gZ2V0IGEg
Y3Jhc2guCi0gICAgaWYgKG1fb3BlbkRCUmVxdWVzdCkgewotICAgICAgICBBU1NFUlQoaXNWZXJz
aW9uQ2hhbmdlKCkpOwotICAgICAgICBtX29wZW5EQlJlcXVlc3QtPnRyYW5zYWN0aW9uRGlkRmlu
aXNoQW5kRGlzcGF0Y2goKTsKLSAgICB9Ci0gICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxz
ZTsKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246OmNh
blN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUZWNobmljYWxs
eSB3ZSBjYW4gc3VzcGVuZCBiZWZvcmUgdGhlIGZpcnN0IHJlcXVlc3QgaXMgc2NoZWR1bGUKLSAg
ICAvLyAgICAgICAgYW5kIGFmdGVyIHRoZSBjb21wbGV0ZS9hYm9ydCBldmVudCBpcyBlbnF1ZXVl
ZC4KLSAgICByZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsKLX0KLQotdm9pZCBJREJUcmFuc2Fj
dGlvbjo6c3RvcCgpCi17Ci0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Ci0KLSAgICBhYm9y
dChJR05PUkVfRVhDRVBUSU9OKTsKLX0KLQotY29uc3QgY2hhciogSURCVHJhbnNhY3Rpb246OmFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURCVHJhbnNhY3Rpb24i
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVk
LCAiQSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5
cGUgJXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAo
bV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudCk7Ci19Ci0KLUlEQkRh
dGFiYXNlQmFja2VuZCogSURCVHJhbnNhY3Rpb246OmJhY2tlbmREQigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGRiKCktPmJhY2tlbmQoKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAppbmRleCA5ZjM0MzE0Li4wNTg4
ZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmgKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJU
cmFuc2FjdGlvbl9oCkBAIC0yOSwxMSArMjksNyBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NRXJyb3Iu
aCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKICNp
bmNsdWRlICJJbmRleGVkREIuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNDEsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIERPTUVycm9yOwogY2xhc3MgSURCQ3Vyc29yOwogY2xhc3MgSURCRGF0YWJh
c2U7CiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7CkBAIC00OSwxMSArNDYsOSBAQCBjbGFzcyBJ
REJPYmplY3RTdG9yZTsKIGNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CiBzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTsKIAotY2xhc3MgSURCVHJhbnNhY3Rpb24gZmluYWwgOiBwdWJsaWMgU2Ny
aXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbj4sIHB1YmxpYyBF
dmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNz
IElEQlRyYW5zYWN0aW9uIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50
ZWQ8SURCVHJhbnNhY3Rpb24+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVi
bGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJUcmFuc2Fj
dGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUs
IElEQkRhdGFiYXNlKik7Ci0gICAgc3RhdGljIFJlZjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJl
cXVlc3QqLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKTsKLSAg
ICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbigpOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9u
KCkgeyB9CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZE9ubHkoKTsK
ICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZFdyaXRlKCk7CkBAIC02NCwx
MDMgKzU5LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUgc3RyaW5nVG9Nb2RlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0
aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlVG9TdHJpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUpOwogCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIoKSBjb25zdDsKLQot
ICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgYm9vbCBpc0FjdGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQWN0aXZlOyB9Ci0gICAgYm9vbCBpc0Zpbmlz
aGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsgfQotICAgIGJvb2wgaXNS
ZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6UmVhZE9ubHk7IH0KLSAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZTsg
fQotCiAgICAgLy8gSW1wbGVtZW50IHRoZSBJREJUcmFuc2FjdGlvbiBJREwKLSAgICBjb25zdCBT
dHJpbmcmIG1vZGUoKSBjb25zdDsKLSAgICBJREJEYXRhYmFzZSogZGIoKSBjb25zdCB7IHJldHVy
biBtX2RhdGFiYXNlLmdldCgpOyB9Ci0gICAgUGFzc1JlZlB0cjxET01FcnJvcj4gZXJyb3IoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBhYm9ydChFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBjbGFzcyBPcGVuQ3Vyc29yTm90aWZpZXIg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgT3BlbkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb24+LCBJREJDdXJzb3IqKTsKLSAgICAgICAgfk9wZW5DdXJzb3JOb3RpZmllcigp
OwotICAgICAgICB2b2lkIGN1cnNvckZpbmlzaGVkKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgICAgICBJREJDdXJzb3Iq
IG1fY3Vyc29yOwotICAgIH07Ci0KLSAgICB2b2lkIHJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0
Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0Kik7Ci0gICAgdm9pZCBv
YmplY3RTdG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4pOwotICAgIHZvaWQgb2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgc2V0QWN0aXZlKGJvb2wpOwotICAgIHZvaWQgc2V0RXJyb3IoUGFzc1JlZlB0cjxET01FcnJv
cj4sIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLQotICAgIHZvaWQgb25BYm9ydChQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKLSAgICB2b2lkIG9uQ29tcGxldGUoKTsKLQotICAg
IC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIElEQlRyYW5zYWN0aW9uRXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWN0
aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAgIHVzaW5nIEV2
ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAot
ICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJREJEYXRhYmFz
ZSogZGIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJv
cigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHVzaW5nIFJlZkNv
dW50ZWQ8SURCVHJhbnNhY3Rpb24+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFu
c2FjdGlvbj46OmRlcmVmOwogCi1wcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3QqLCBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJik7Ci0KLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICB2b2lkIHJl
Z2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vy
c29yKElEQkN1cnNvciopOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICBib29s
IGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3Ao
KSBvdmVycmlkZTsKLSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICAvLyBFdmVudFRhcmdldCBBUEkuCi0gICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9Ci0KLSAgICBlbnVtIFN0YXRlIHsK
LSAgICAgICAgSW5hY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRlZCwgYnV0IG5vdCBpbiBhbiBl
dmVudCBjYWxsYmFjawotICAgICAgICBBY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRlZCwgaW4g
Y3JlYXRpb24gc2NvcGUgb3IgYW4gZXZlbnQgY2FsbGJhY2sKLSAgICAgICAgRmluaXNoaW5nLCAv
LyBJbiB0aGUgcHJvY2VzcyBvZiBhYm9ydGluZyBvciBjb21wbGV0aW5nLgotICAgICAgICBGaW5p
c2hlZCwgLy8gTm8gbW9yZSBldmVudHMgd2lsbCBmaXJlIGFuZCBubyBuZXcgcmVxdWVzdHMgbWF5
IGJlIGZpbGVkLgotICAgIH07Ci0KLSAgICBpbnQ2NF90IG1faWQ7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlPiBtX2RhdGFiYXNlOwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fb2JqZWN0U3Rv
cmVOYW1lczsKLSAgICBJREJPcGVuREJSZXF1ZXN0KiBtX29wZW5EQlJlcXVlc3Q7Ci0gICAgY29u
c3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOwotICAgIFN0YXRlIG1fc3RhdGU7
Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKLSAgICBib29sIG1fY29udGV4dFN0b3Bw
ZWQ7Ci0gICAgUmVmUHRyPERPTUVycm9yPiBtX2Vycm9yOwotICAgIFN0cmluZyBtX2Vycm9yTWVz
c2FnZTsKLQotICAgIExpc3RIYXNoU2V0PFJlZlB0cjxJREJSZXF1ZXN0Pj4gbV9yZXF1ZXN0TGlz
dDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4+
IElEQk9iamVjdFN0b3JlTWFwOwotICAgIElEQk9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVN
YXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPElEQk9iamVjdFN0b3JlPj4gSURCT2Jq
ZWN0U3RvcmVTZXQ7Ci0gICAgSURCT2JqZWN0U3RvcmVTZXQgbV9kZWxldGVkT2JqZWN0U3RvcmVz
OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE+IElEQk9iamVjdFN0b3JlTWV0YWRhdGFNYXA7Ci0gICAgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YU1hcCBtX29iamVjdFN0b3JlQ2xlYW51cE1hcDsKLSAgICBJREJEYXRhYmFz
ZU1ldGFkYXRhIG1fcHJldmlvdXNNZXRhZGF0YTsKLQotICAgIEhhc2hTZXQ8SURCQ3Vyc29yKj4g
bV9vcGVuQ3Vyc29yczsKK3Byb3RlY3RlZDoKKyAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKaW5kZXgg
ZWI2Mjg3MS4uY2M4OWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbApAQCAtMzEsNiArMzEsNyBAQAogICAgIEpTR2VuZXJh
dGVUb0pTT2JqZWN0LAogICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKICAgICBFbmFibGVk
QXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJm
YWNlIElEQlRyYW5zYWN0aW9uIDogRXZlbnRUYXJnZXQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbW9kZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCRGF0YWJhc2UgZGI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzliYTg3
Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgi
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0j
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1SZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNy
ZWF0ZShJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQot
ewotICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0U3RvcmVIYXNoU2V0OwotICAgIGZvciAoYXV0
byYgaWQgOiBvYmplY3RTdG9yZUlkcykKLSAgICAgICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFkZChp
ZCk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmQoZGF0
YWJhc2VCYWNrZW5kLCBpZCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUpKTsK
LX0KLQotSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0
YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi0gICAgOiBtX29i
amVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQotICAgICwgbV9tb2RlKG1vZGUpCi0gICAgLCBt
X3N0YXRlKFVub3BlbmVkKQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9j
YWxsYmFja3MoY2FsbGJhY2tzKQotICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZUJhY2tlbmQpCi0g
ICAgLCBtX3Rhc2tUaW1lcigqdGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVy
RmlyZWQpCi0gICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCi0gICAgLCBtX2lkKGlk
KQotewotICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0
IGNhbiBiZSBhZG9wdGVkLgotICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotCi0gICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlv
bih0aGlzKTsKLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQodGhp
cyk7Ci0gICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLm9wZW5UcmFuc2FjdGlvbihp
ZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUsIFtiYWNrZW5kXShib29sIHN1Y2Nlc3MpIHsKLSAgICAg
ICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtiYWNrZW5k
XSgpIHsKLSAgICAgICAgICAgICAgICBiYWNrZW5kLT5hYm9ydCgpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgdGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGJlZm9yZSB0aGUgc2VydmVy
IGNvbm5lY3Rpb24gZmluaXNoZWQgb3BlbmluZyB0aGUgdHJhbnNhY3Rpb24uCi0gICAgICAgIGlm
IChiYWNrZW5kLT5tX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGJhY2tlbmQtPm1fc3RhdGUgPSBVbnVzZWQ7Ci0gICAgICAgIGlmIChiYWNrZW5kLT5o
YXNQZW5kaW5nVGFza3MoKSkKLSAgICAgICAgICAgIGJhY2tlbmQtPnN0YXJ0KCk7Ci0gICAgfSk7
Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZCgpCi17
Ci0gICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBnZXQg
ZGVsZXRlZCB1bmxlc3MgaXQncyB1bnVzZWQsIGNvbXBsZXRlLCBvciBhYm9ydGVkLgotICAgIEFT
U0VSVChtX3N0YXRlID09IEZpbmlzaGVkIHx8IG1fc3RhdGUgPT0gVW51c2VkKTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6
OlRhc2tUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRy
PElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBhYm9ydFRhc2spCi17Ci0gICAgaWYgKG1fc3RhdGUg
PT0gRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0eXBlID09IElEQkRhdGFi
YXNlQmFja2VuZDo6Tm9ybWFsVGFzaykKLSAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2sp
OwotICAgIGVsc2UKLSAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsK
LQotICAgIGlmIChhYm9ydFRhc2spCi0gICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChh
Ym9ydFRhc2spOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gVW5vcGVuZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKLSAgICAgICAgc3RhcnQoKTsKLSAgICBl
bHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmFib3J0KCkKLXsKLSAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yICh1
bmtub3duIGNhdXNlKSIpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIGlmIChlcnJvcikKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmFib3J0IC0gKCVzKSAlcyIsIGVycm9yLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZXJy
b3ItPm1lc3NhZ2UoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydCAobm8gZXJyb3IpIik7Ci0jZW5k
aWYKLQotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7Ci0KLSAgICAvLyBUaGUgbGFz
dCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1p
bmcgdGhlCi0gICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2Vs
ZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRp
bmcgdGhpcyBtZXRob2QuCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0gICAgbV90YXNrVGltZXIuc3RvcCgp
OwotCi0gICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5l
Y3Rpb24oKS5yb2xsYmFja1RyYW5zYWN0aW9uU3luYyhtX2lkKTsKLQotICAgIC8vIFJ1biB0aGUg
YWJvcnQgdGFza3MsIGlmIGFueS4KLSAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gdGFzayhtX2Fi
b3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybSgpOwotICAg
IH0KLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBt
dXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgLy8gYXJlIGZpcmVk
LCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxv
dyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9y
ZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIG1fZGF0YWJh
c2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uU3luYyhtX2lkKTsKLQotICAg
IC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUg
dGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKLSAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY29t
cGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4KLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0
aW9uKHRoaXMpOwotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpLT5pc0FjdGl2ZSh0aGlzKSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCh0aGlzKTsKLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlID0gbV9k
YXRhYmFzZS5yZWxlYXNlKCk7Ci0KLSAgICBpZiAobV9jYWxsYmFja3MpCi0gICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkFib3J0KGlkKCksIGVycm9yKTsKLQotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlv
bkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmlzVGFza1F1ZXVlRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByZWVtcHRp
dmVUYXNrUXVldWUuaXNFbXB0eSgpICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsKLX0KLQotYm9v
bCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6Omhhc1BlbmRpbmdUYXNrcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHkoKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJD
dXJzb3JCYWNrZW5kKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElE
QkN1cnNvckJhY2tlbmQqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLnJlbW92ZShjdXJz
b3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6cnVuKCkKLXsKLSAgICAvLyBU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRoaXMgdHJhbnNhY3Rpb24uIFNjaGVk
dWxlIGEgdGltZXIKLSAgICAvLyB0byBwcm9jZXNzIHRoZSBmaXJzdCB0YXNrLgotICAgIEFTU0VS
VChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIEFT
U0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICBtX3Rhc2tUaW1lci5zdGFydE9u
ZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzdGFydCgpCi17Ci0g
ICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKLQotICAgIG1fc3RhdGUgPSBTdGFydFBlbmRp
bmc7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRy
YW5zYWN0aW9uKHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlz
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCgpCi17Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCB0cmFuc2FjdGlvbiAl
bGxpIGluIHN0YXRlICV1Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSwgbV9zdGF0ZSk7
Ci0KLSAgICAvLyBJbiBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1
ZXN0ZWQgYSBjb21taXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5Ci0gICAgLy8gYmVlbiBpbml0
aWF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgotICAgIGlmIChtX3N0YXRlID09
IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbm9w
ZW5lZCB8fCBtX3N0YXRlID09IFVudXNlZCB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIG1f
Y29tbWl0UGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBGcm9udC1lbmQgaGFzIHJlcXVlc3RlZCBh
IGNvbW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNrcyBsaWtlIGNyZWF0ZUluZGV4IHdoaWNoCi0g
ICAgLy8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25vdXMgYnkgdGhlIGZyb250LWVuZCBidXQgYXJl
IHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KLSAgICBpZiAoaGFzUGVuZGluZ1Rhc2tzKCkpIHsK
LSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCAt
IE5vdCBjb21taXR0aW5nIG5vdywgdHJhbnNhY3Rpb24gc3RpbGwgaGFzIHBlbmRpbmcgdGFza3Mg
KFRyYW5zYWN0aW9uICVsbGkpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBv
YmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gY29tbWl0
IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAg
b3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQodGhpcyk7Ci0KLSAgICBib29s
IHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gVW5vcGVuZWQ7Ci0gICAg
bV9zdGF0ZSA9IEZpbmlzaGVkOwotCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQ7Ci0KLSAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24obV9pZCwg
W2JhY2tlbmQsIHRoaXMsIGNvbW1pdHRlZCwgdW51c2VkXShib29sIHN1Y2Nlc3MpIG11dGFibGUg
ewotICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGNvbW1pdFRyYW5zYWN0aW9uIHJlcXVlc3QgYWJv
cnRpbmcgZHVyaW5nIG9yIGFmdGVyIHN5bmNocm9ub3VzIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
YWJvcnQoKSBjYWxsLgotICAgICAgICAvLyBUaGlzIGNhbiBlYXNpbHkgaGFwcGVuIGlmIHRoZSBw
YWdlIGlzIG5hdmlnYXRlZCBiZWZvcmUgYWxsIHRyYW5zYWN0aW9ucyBmaW5pc2guCi0gICAgICAg
IC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIGZ1cnRoZXIgY2xlYW51cCBhbmQgZG9uJ3QgbmVl
ZCB0byBtYWtlIGFueSBjYWxsYmFja3MuCi0gICAgICAgIGlmICghbV9kYXRhYmFzZSkgewotICAg
ICAgICAgICAgQVNTRVJUKCFzdWNjZXNzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNvbW1pdHRlZCB8PSBzdWNjZXNzOwotCi0gICAgICAgIC8vIEJhY2tpbmcg
c3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9y
ZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBj
YWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3Rv
cmUKLSAgICAgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGlj
YWwuCi0gICAgICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgICAgICBtX2RhdGFiYXNlLT5z
ZXJ2ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7Ci0KLSAg
ICAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJl
Zm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcwotICAgICAgICAvLyB0aGUgdHJhbnNh
Y3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0
aW9ucy4KLSAgICAgICAgaWYgKCF1bnVzZWQpCi0gICAgICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAgICAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwotCi0gICAgICAgIGlmIChj
b21taXR0ZWQpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkpOwot
ICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmly
ZWQodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25B
Ym9ydChpZCgpLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikp
OwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0Rmly
ZWQodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKLSAg
ICB9KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKCkK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVy
RmlyZWQiKTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgewotICAgICAgICBt
X2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuYmVnaW5UcmFuc2FjdGlvbihtX2lkLCBbXSgp
IHsgfSk7Ci0gICAgICAgIG1fc3RhdGUgPSBSdW5uaW5nOwotICAgIH0KLQotICAgIC8vIFRoZSBs
YXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9y
bWluZyBhIHRhc2suCi0gICAgLy8gVGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBv
YmplY3QgYWxpdmUgc28gdGhhdCB0YXNrcyBjYW4KLSAgICAvLyBzdWNjZXNzZnVsbHkgbWFrZSB0
aGVpciBjb21wbGV0aW9uIGNhbGxiYWNrcy4KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kPiBzZWxmKHRoaXMpOwotCi0gICAgVGFza1F1ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsK
LSAgICBpZiAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQpIHsK
LSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgICAgIFJlZlB0cjxJREJP
cGVyYXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtlRmlyc3QoKSk7Ci0gICAgICAgIHRhc2stPnBl
cmZvcm0oW3NlbGYsIHRoaXMsIHRhc2tdKCkgewotICAgICAgICAgICAgbV90YXNrVGltZXIuc3Rh
cnRPbmVTaG90KDApOwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdlIGhhdmVuJ3QgYWxyZWFkeSBj
b21taXR0ZWQvYWJvcnRlZCwKLSAgICAvLyBhbmQgdGhlIGZyb250LWVuZCByZXF1ZXN0ZWQgYSBj
b21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgotICAgIGlmICghaGFzUGVuZGluZ1Rhc2tz
KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIGNv
bW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y2xvc2VPcGVuQ3Vyc29y
cygpCi17Ci0gICAgZm9yIChhdXRvJiBjdXJzb3IgOiBtX29wZW5DdXJzb3JzKQotICAgICAgICBj
dXJzb3ItPmNsb3NlKCk7Ci0gICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotewotICAg
IHNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlTWV0YWRhdGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotewotICAgIHNjaGVkdWxl
VGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jl
TWV0YWRhdGEpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
b2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
IG1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFj
a3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdl
QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52ZXJz
aW9uKSwgbWV0YWRhdGEudmVyc2lvbikpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNr
KENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhN
ZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhLmlkKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLXsKLSAgICBzY2hlZHVsZVRh
c2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRl
eE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVj
dFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFk
YXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhH
ZXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUg
cHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
LXsKLSAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3Rv
cmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5k
ZXhLZXlzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVNldElu
ZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKLXsKLSAgICBzY2hlZHVsZVRh
c2soSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0aXZlVGFzaywgU2V0SW5kZXhlc1JlYWR5T3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXhDb3VudCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVsZVRhc2soT3Bl
bkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ291bnRPcGVyYXRpb24oaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAg
IHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVsZVRhc2soRGVsZXRlUmFuZ2VPcGVyYXRp
b246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVP
cGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Ci19Ci0KLX07Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYjllZjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5k
X2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kX2gKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSURCQ3Vyc29yQmFja2VuZDsKLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotCi1jbGFz
cyBJREJUcmFuc2FjdGlvbkJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gY3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKLSAgICB+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kKCk7Ci0KLSAgICB2b2lkIGNvbW1pdCgpOwotICAgIHZvaWQgYWJvcnQoKTsK
LSAgICB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotCi0gICAgdm9p
ZCBydW4oKTsKLSAgICBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgIHsg
cmV0dXJuIG1fbW9kZTsgfQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29u
c3QgIHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KLQotICAgIHZvaWQgc2NoZWR1bGVUYXNr
KFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3Vz
T3BlcmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHNjaGVkdWxlVGFzayhJREJEYXRhYmFz
ZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KLSAgICB2b2lkIHNjaGVk
dWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQk9wZXJh
dGlvbj4sIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGFib3J0VGFzayA9IG51
bGxwdHIpOwotCi0gICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCop
OwotICAgIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwotCi0g
ICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
Kys7IH0KLSAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5kaW5n
UHJlZW1wdGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAw
KTsgfQotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJldHVy
biAqbV9kYXRhYmFzZTsgfQotCi0gICAgdm9pZCBzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKLSAgICB2b2lkIHNjaGVkdWxl
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYp
OwotICAgIHZvaWQgc2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVz
dGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpOwotICAgIHZvaWQgc2No
ZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmKTsKLSAgICB2b2lkIHNjaGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRpb24o
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7Ci0gICAgdm9p
ZCBzY2hlZHVsZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAg
dm9pZCBzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIElEQkRh
dGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpOwotICAg
IHZvaWQgc2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQp
OwotICAgIHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHNjaGVk
dWxlQ291bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAg
IHZvaWQgc2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAg
IHZvaWQgc2NoZWR1bGVDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLQotICAgIGludDY0X3QgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
KElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUpOwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVub3Bl
bmVkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgY3JlYXRlZC4KLSAgICAg
ICAgVW51c2VkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGNyZWF0ZWQsIGJ1dCBubyB0
YXNrcyB5ZXQuCi0gICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBi
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KLSAgICAgICAgUnVubmlu
ZywgLy8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlz
aGVkLgotICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgot
ICAgIH07Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0KLSAgICBib29sIGlzVGFza1F1ZXVlRW1wdHko
KSBjb25zdDsKLSAgICBib29sIGhhc1BlbmRpbmdUYXNrcygpIGNvbnN0OwotCi0gICAgdm9pZCB0
YXNrVGltZXJGaXJlZCgpOwotICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAgY29u
c3QgSGFzaFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOwotICAgIGNvbnN0IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1fbW9kZTsKLQotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgYm9v
bCBtX2NvbW1pdFBlbmRpbmc7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBtX2RhdGFiYXNlOwotCi0g
ICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8SURCT3BlcmF0aW9uPj4gVGFza1F1ZXVlOwotICAgIFRh
c2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKLSAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVl
OwotICAgIERlcXVlPFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4+IG1fYWJvcnRUYXNr
UXVldWU7Ci0KLSAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhy
ZWFkcyBpbnN0ZWFkLgotICAgIFRpbWVyIG1fdGFza1RpbWVyOwotICAgIGludCBtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kKj4gbV9vcGVu
Q3Vyc29yczsKLQotICAgIGludDY0X3QgbV9pZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURC
VHJhbnNhY3Rpb25CYWNrZW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZjY4N2EuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3Bl
cmF0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVy
YXRpb25zLmgiCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUg
IklEQlJlY29yZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZGVmaW5lIFNUQU5EQVJEX0RBVEFCQVNF
X0VSUk9SX0NBTExCQUNLIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gb3BlcmF0aW9uQ2FsbGJhY2sgPSBcCi0gICAgW29wZXJhdGlvbiwgY29tcGxldGlv
bkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7IFwKLSAgICAg
ICAgaWYgKGVycm9yKSBcCi0gICAgICAgICAgICBvcGVyYXRpb24tPm1fdHJhbnNhY3Rpb24tPmFi
b3J0KGVycm9yKTsgXAotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsgXAotICAgIH07Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLQotICAgIFJl
ZlB0cjxDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIFNU
QU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rp
b24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Ci19Ci0KLXZvaWQgQ3JlYXRlSW5kZXhPcGVy
YXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7Ci0KLSAgICBS
ZWZQdHI8Q3JlYXRlSW5kZXhPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLSAgICBTVEFOREFS
RF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKLQotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmNyZWF0ZUluZGV4KCptX3RyYW5zYWN0aW9uLCAqdGhpcywg
b3BlcmF0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246
OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlSW5kZXhBYm9ydE9wZXJh
dGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlSW5kZXgobV9vYmpl
Y3RTdG9yZUlELCBtX2luZGV4SUQpOwotfQotCi12b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPERl
bGV0ZUluZGV4T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgU1RBTkRBUkRfREFUQUJB
U0VfRVJST1JfQ0FMTEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZWxldGVJbmRleCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlv
bkNhbGxiYWNrKTsKLX0KLQotdm9pZCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3Jt
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsK
LSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJRCwg
bV9pbmRleE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi12b2lk
IEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiR2V0T3BlcmF0aW9uIik7Ci0KLSAgICBS
ZWZQdHI8R2V0T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgU1RBTkRBUkRfREFUQUJB
U0VfRVJST1JfQ0FMTEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5nZXQoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBbdGhpcywgb3BlcmF0aW9u
LCBvcGVyYXRpb25DYWxsYmFja10oY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7Ci0KLSAgICAgICAgaWYgKGVycm9yKQotICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0LnZhbHVlQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5rZXlEYXRhLmlzTnVsbCkKLSAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcygpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhyZXN1bHQua2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQua2V5RGF0
YS5pc051bGwpCi0gICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MocmVz
dWx0LnZhbHVlQnVmZmVyLCByZXN1bHQua2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpLCByZXN1
bHQua2V5UGF0aCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKHJlc3VsdC52YWx1ZUJ1ZmZlci5nZXQoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBvcGVyYXRpb25DYWxsYmFjayhlcnJvci5yZWxl
YXNlKCkpOwotICAgIH0pOwotfQotCi12b2lkIFB1dE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiUHV0T3BlcmF0aW9uIik7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotICAgIEFTU0VSVChtX2luZGV4
SURzLnNpemUoKSA9PSBtX2luZGV4S2V5cy5zaXplKCkpOwotCi0gICAgbV90cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkucHV0KCptX3RyYW5zYWN0aW9uLCAqdGhpcywg
W3RoaXMsIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPiBwcnBFcnJvcikgewotICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IgPSBwcnBFcnJvcjsKLSAgICAgICAgaWYgKGtleSkgewotICAgICAg
ICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KGtleSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXJyb3IpOwotICAg
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICB9Ci0gICAgICAg
IGNvbXBsZXRpb25DYWxsYmFjaygpOwotICAgIH0pOwotfQotCi12b2lkIFNldEluZGV4ZXNSZWFk
eU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxi
YWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uIik7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhDb3VudDsgKytpKQotICAgICAg
ICBtX3RyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwotCi0gICAgY2Fs
bE9uTWFpblRocmVhZChjb21wbGV0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIE9wZW5DdXJzb3JP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKLQotICAg
IFJlZlB0cjxPcGVuQ3Vyc29yT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgYXV0byBj
YWxsYmFjayA9IFt0aGlzLCBvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oaW50NjRfdCBj
dXJzb3JJRCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlciwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgfSBlbHNlIGlmICgha2V5
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNvIG5vIGtleSwg
dGhlbiB0aGUgY3Vyc29yIGhhZCBubyByZWNvcmRzLgotICAgICAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihudWxscHRyKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yID0g
SURCQ3Vyc29yQmFja2VuZDo6Y3JlYXRlKGN1cnNvcklELCBtX2N1cnNvclR5cGUsIG1fdGFza1R5
cGUsICptX3RyYW5zYWN0aW9uLCBtX29iamVjdFN0b3JlSUQpOwotICAgICAgICAgICAgY3Vyc29y
LT51cGRhdGVDdXJzb3JEYXRhKGtleS5nZXQoKSwgcHJpbWFyeUtleS5nZXQoKSwgdmFsdWVCdWZm
ZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IucmVs
ZWFzZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOwotICAg
IH07Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5v
cGVuQ3Vyc29yKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgY2FsbGJhY2spOwotfQotCi12b2lkIENv
dW50T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJDb3VudE9wZXJhdGlvbiIpOwotCi0gICAg
UmVmUHRyPENvdW50T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgYXV0byBjYWxsYmFj
ayA9IFt0aGlzLCBvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oaW50NjRfdCBjb3VudCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgewotICAgICAgICAvLyBGSVhNRTogVGhlIExl
dmVsREIgcG9ydCBuZXZlciBoYWQgYW4gZXJyb3IgY29uZGl0aW9uIGZvciB0aGUgY291bnQgb3Bl
cmF0aW9uLgotICAgICAgICAvLyBXZSBwcm9iYWJseSBuZWVkIHRvIHN1cHBvcnQgYW4gZXJyb3Ig
Zm9yIHRoZSBjb3VudCBvcGVyYXRpb24sIGJyZWFraW5nIHRoZSBMZXZlbERCIHBvcnQuCi0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotCi0gICAgICAgIGNvbXBsZXRpb25D
YWxsYmFjaygpOwotICAgIH07Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5jb3VudCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIGNhbGxiYWNrKTsKLX0K
LQotdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlUmFu
Z2VPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxEZWxldGVSYW5nZU9wZXJhdGlvbj4gb3BlcmF0
aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0
aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsKLSAgICAg
ICAgaWYgKGVycm9yKQotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0KLSAg
ICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAgfTsKLQotICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZVJhbmdlKCptX3RyYW5zYWN0aW9u
LCAqdGhpcywgY2FsbGJhY2spOwotfQotCi12b2lkIENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb246
OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIkNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLQotICAgIFJl
ZlB0cjxDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0KLSAgICBh
dXRvIGNsZWFyQ2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2td
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsKLSAgICAgICAgUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7Ci0KLSAgICAgICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgICAg
ICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLQotICAgICAgICBjb21wbGV0
aW9uQ2FsbGJhY2soKTsKLSAgICB9OwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5z
ZXJ2ZXJDb25uZWN0aW9uKCkuY2xlYXJPYmplY3RTdG9yZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMs
IGNsZWFyQ2FsbGJhY2spOwotfQotCi12b2lkIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotCi0gICAgUmVm
UHRyPERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgU1RB
TkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVPYmplY3RTdG9yZSgqbV90cmFuc2FjdGlv
biwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFu
Z2VPcGVyYXRpb24iKTsKLQotICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLm1ldGFkYXRhKCkudmVyc2lvbjsKLSAgICBpZiAob2xkVmVyc2lvbiA9PSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCi0gICAgICAgIG9sZFZlcnNpb24gPSAw
OwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlv
bj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1aW50NjRfdD4obV92
ZXJzaW9uKSA+IG9sZFZlcnNpb24pOwotCi0gICAgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiBvcGVyYXRpb25DYWxsYmFjayA9IFtvbGRWZXJzaW9uLCBv
cGVyYXRpb24sIHRoaXMsIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBwcnBFcnJvcikgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IgPSBwcnBFcnJvcjsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChl
cnJvcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuaGFzUGVuZGluZ1NlY29uZEhhbGZPcGVuKCkpOwotICAgICAgICAgICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXRDdXJyZW50VmVyc2lvbihtX3ZlcnNpb24pOwot
ICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXRQZW5kaW5nU2Vjb25kSGFs
Zk9wZW4oc3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nT3BlbkNhbGw+KCptX2NhbGxiYWNrcywg
Km1fZGF0YWJhc2VDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fdmVyc2lvbikpOwot
ICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCAmbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5tZXRhZGF0
YSgpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKLSAgICB9Owot
Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY2hhbmdl
RGF0YWJhc2VWZXJzaW9uKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2sp
OwotfQotCi12b2lkIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIp
OwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlT2JqZWN0U3RvcmUobV9vYmpl
Y3RTdG9yZUlEKTsKLX0KLQotdm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpw
ZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmFkZE9iamVjdFN0b3Jl
KG1fb2JqZWN0U3RvcmVNZXRhZGF0YSwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElk
KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNldEN1cnJlbnRW
ZXJzaW9uKG1fcHJldmlvdXNJbnRWZXJzaW9uKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRPcGVyYXRpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTA5Nzku
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaAot
I2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zX2gKLQotI2luY2x1ZGUgIklE
QkRhdGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCU2VydmVyQ29ubmVjdGlvbjsKLQot
Y2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0
YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdFN0b3JlTWV0YWRhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVj
dFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwotfTsKLQotY2xhc3MgRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBv
dmVycmlkZSBmaW5hbDsKLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9Ci0gICAgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0U3RvcmVNZXRhZGF0YTsgfQotCi1wcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgICAgIDogbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2Jq
ZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNh
bGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZlcnNpb25DaGFu
Z2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5n
ZXQoKTsgfQotICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsg
fQotICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
LSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9kYXRhYmFzZUNh
bGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBpbnQ2NF90IG1fdmVyc2lv
bjsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci19OwotCi1jbGFzcyBDcmVh
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0
aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBj
cmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFsOwotcHJpdmF0ZToKLSAg
ICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLSAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlk
KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3Ry
YW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotfTsKLQotY2xh
c3MgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91
c09wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJh
dGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlv
biwgb2JqZWN0U3RvcmUpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBvdmVy
cmlkZSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3Jl
TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0
b3JlTWV0YWRhdGE7Ci19OwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFu
Z2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJz
aW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgcHJl
dmlvdXNWZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oKSBvdmVycmlkZSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgVmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0
IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKLSAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fcHJldmlvdXNW
ZXJzaW9uKHByZXZpb3VzVmVyc2lvbikKLSAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihw
cmV2aW91c0ludFZlcnNpb24pCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9u
OwotICAgIGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247Ci19OwotCi1jbGFzcyBDcmVhdGVJ
bmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlSW5k
ZXhPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1
Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLSAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpZGJJbmRleE1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleE1ldGFk
YXRhOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCi0gICAg
ICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2lu
ZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVi
bGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElE
QlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKCkgb3ZlcnJpZGUgZmluYWw7Ci1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4
QWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi0gICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkK
LSAgICAgICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKLX07
Ci0KLWNsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQot
ICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4TWV0YWRhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleE9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2Jq
ZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2Fj
dGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBJREJJ
bmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIERlbGV0ZUluZGV4QWJv
cnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KCkgb3ZlcnJpZGUgZmluYWw7Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVj
dFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rp
b247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBHZXRPcGVyYXRpb24gOiBw
dWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkRh
dGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2V0T3BlcmF0aW9uKHRyYW5zYWN0
aW9uLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5
cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQot
ICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRDsgfQotICAgIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JU
eXBlOyB9Ci0gICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlS
YW5nZS5nZXQoKTsgfQotICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXV0b0luY3JlbWVudDsgfQotICAgIElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5UGF0aDsgfQotCi1wcml2YXRlOgotICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0
YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQot
ICAgICAgICAsIG1faW5kZXhJRChpbmRleElkKQotICAgICAgICAsIG1fa2V5UGF0aChtZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCi0gICAgICAgICwgbV9h
dXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0
b0luY3JlbWVudCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1f
Y3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2Jq
ZWN0U3RvcmVJZCkpOwotICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChv
YmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3Qg
bV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOwotICAgIGNvbnN0
IElEQktleVBhdGggbV9rZXlQYXRoOwotICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50Owot
ICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBjb25zdCBJbmRl
eGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9k
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGlu
ZGV4S2V5cykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIElEQkRhdGFi
YXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wdXRNb2RlOyB9
Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlOyB9Ci0gICAgSURCS2V5KiBrZXkoKSBjb25zdCB7IHJldHVy
biBtX2tleS5nZXQoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4SURzOyB9Ci0gICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhLZXlzOyB9Ci0gICAgU2hhcmVkQnVm
ZmVyKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLQotcHJpdmF0ZToK
LSAgICBQdXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2Vu
ZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQot
ICAgICAgICAsIG1fa2V5KGtleSkKLSAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKLSAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9pbmRleElEcyhpbmRleElk
cykKLSAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOwotICAgIGNvbnN0IFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1fdmFsdWU7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7Ci0g
ICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIG1fcHV0TW9kZTsKLSAgICBjb25z
dCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBjb25zdCBWZWN0b3I8aW50
NjRfdD4gbV9pbmRleElEczsKLSAgICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiBtX2luZGV4S2V5
czsKLX07Ci0KLWNsYXNzIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVy
YXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIGluZGV4Q291bnQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7
Ci1wcml2YXRlOgotICAgIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkKLSAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1faW5kZXhDb3VudChpbmRleENvdW50KQot
ICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5z
YWN0aW9uOwotICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7Ci19OwotCi1jbGFzcyBPcGVu
Q3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJy
aWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCB0cmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2FjdGlvbi0+aWQoKTsgfQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQotICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXhJRDsgfQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRp
cmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9Ci0gICAgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIGN1cnNvclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KLSAg
ICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV90YXNrVHlwZTsgfQotICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5UmFuZ2UuZ2V0KCk7IH0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJz
b3JEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQotCi1wcml2YXRlOgot
ICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24s
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRh
c2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9y
ZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCi0gICAgICAg
ICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24p
Ci0gICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0gICAgICAgICwgbV90YXNrVHlw
ZSh0YXNrVHlwZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0g
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2lu
ZGV4SUQ7Ci0gICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAg
ICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBjb25z
dCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGlj
IElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDb3VudE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlk
ZSBmaW5hbDsKLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJRDsgfQotICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXhJRDsgfQotICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UmFuZ2UuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBDb3VudE9wZXJhdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAg
LCBtX2luZGV4SUQoaW5kZXhJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAg
ICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKLSAgICBjb25z
dCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6
IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0g
ICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlE
OyB9Ci0gICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5n
ZS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJh
bmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25z
dCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+
IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Ci19OwotCi1jbGFzcyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJh
dGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0K
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2FjdGlvbi5nZXQoKTsgfQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQotCi1wcml2YXRlOgotICAgIENsZWFyT2JqZWN0
U3RvcmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9y
ZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCVHJh
bnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9uc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDY5ZTBhLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgot
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUlEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KQotewotfQotCi1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjp+SURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpCi17Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkQ3Jl
YXRlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgbV90
cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5z
YWN0aW9uKTsKLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb24pKSB7Ci0gICAgICAgIEFTU0VSVCghbV9zdGFydGVkVHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgICAgIG1fcXVldWVkVHJhbnNhY3Rpb25z
LnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0gICAgfSBlbHNlIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24pKQotICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMu
cmVtb3ZlKHRyYW5zYWN0aW9uKTsKLQotICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2Fj
dGlvbik7Ci0KLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotLy8gVmVyaWZpZXMgaW50ZXJuYWwgY29uc2lzdGllbmN5IHdoaWxlIHJldHVybmlu
ZyB3aGV0aGVyIGFueXRoaW5nIGlzIGZvdW5kLgotYm9vbCBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjppc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQotewotICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb24pKQotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgaWYgKG1fc3RhcnRl
ZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKLSAgICAgICAgQVNTRVJUKCFm
b3VuZCk7Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICB9Ci0gICAgQVNTRVJUKGZvdW5kID09
IG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgcmV0dXJuIGZvdW5k
OwotfQotI2VuZGlmCi0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1N0
YXJ0ZWRUcmFuc2FjdGlvbnMoKQotewotICAgIGlmIChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXJ0ZWRUcmFuc2FjdGlv
bnMuaXNFbXB0eSgpIHx8ICgqbV9zdGFydGVkVHJhbnNhY3Rpb25zLmJlZ2luKCkpLT5tb2RlKCkg
IT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgTGlz
dEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9x
dWV1ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXQgIT0gbV9xdWV1ZWRUcmFu
c2FjdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiA9ICppdDsKLSAgICAgICAgKytpdDsKLSAgICAgICAgaWYgKGNhblJ1blRyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKSkgewotICAgICAgICAgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMucmVtb3Zl
KHRyYW5zYWN0aW9uKTsKLSAgICAgICAgICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5hZGQodHJh
bnNhY3Rpb24pOwotICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnJ1bigpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNhblJ1blRyYW5zYWN0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1f
cXVldWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAgICBVTlVTRURf
UEFSQU0odHJhbnNhY3Rpb24pOwotICAgIHJldHVybiAhbV9zdGFydGVkVHJhbnNhY3Rpb25zLnNp
emUoKTsKLX0KLQotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDU1NDM4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAotI2RlZmluZSBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZDsKLQotLy8gVHJhbnNhY3Rpb25zIGFy
ZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KLWNsYXNzIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IgewotcHVibGljOgotICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0KLSAgICAv
LyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlzaC4KLSAgICB2
b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotICAgIHZv
aWQgZGlkT3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCop
OwotICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsK
LSAgICB2b2lkIGRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwot
Ci0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
Kik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2b2lkIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rp
b25zKCk7Ci0gICAgYm9vbCBjYW5SdW5UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQq
KTsKLQotICAgIC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQgd2F5IHRvIGtlZXAgcmVmZXJl
bmNlcyB0byBhbGwgdHJhbnNhY3Rpb25zLgotICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gPiBtX3RyYW5zYWN0aW9uczsKLSAg
ICAvLyBUcmFuc2FjdGlvbnMgaW4gZGlmZmVyZW50IHN0YXRlcyBhcmUgZ3JvdXBlZCBiZWxvdy4K
LSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBtX3F1ZXVlZFRyYW5zYWN0
aW9uczsKLSAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZCo+IG1fc3RhcnRlZFRyYW5z
YWN0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcAppbmRleCBkMTMzYzZkLi40ZDQ2NGNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgpAQCAtMzAsMjIgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQodW5zaWduZWQgbG9u
ZyBsb25nIG9sZFZlcnNpb24sIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdWZXJzaW9uLCBjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UgLypj
YW5CdWJibGUqLywgZmFsc2UgLypjYW5jZWxhYmxlKi8pCi0gICAgLCBtX29sZFZlcnNpb24ob2xk
VmVyc2lvbikKLSAgICAsIG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uKQotewotfQotCi1JREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6On5JREJWZXJzaW9uQ2hhbmdlRXZlbnQoKQotewotfQotCi1FdmVudElu
dGVyZmFjZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKK0lE
QlZlcnNpb25DaGFuZ2VFdmVudDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKKyAgICA6IEV2ZW50KG5hbWUsIGZhbHNlIC8qY2FuQnViYmxlKi8sIGZhbHNl
IC8qY2FuY2VsYWJsZSovKQogewotICAgIHJldHVybiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaAppbmRleCBkYmFkNWNk
Li4xMjk5ZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaWZuZGVmIElEQlZlcnNpb25DaGFuZ2VFdmVudF9oCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJFdmVudC5oIgotI2lu
Y2x1ZGUgIkluZGV4ZWREQi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzgs
MjMgKzM3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCVmVyc2lvbkNoYW5n
ZUV2ZW50IDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlZlcnNp
b25DaGFuZ2VFdmVudD4gY3JlYXRlKHVuc2lnbmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uID0gMCwg
dW5zaWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb24gPSAwLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSA9IEF0b21pY1N0cmluZygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSURCVmVyc2lvbkNoYW5nZUV2ZW50KG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50
VHlwZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfklEQlZlcnNpb25DaGFuZ2VFdmVudCgpOwot
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgb2xkVmVyc2lvbigpIHsgcmV0dXJuIG1f
b2xkVmVyc2lvbjsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb24o
KSB7IHJldHVybiBtX25ld1ZlcnNpb247IH0KLQotICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2Ug
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlRXZl
bnQoKSB7IH0KIAotcHJpdmF0ZToKLSAgICBJREJWZXJzaW9uQ2hhbmdlRXZlbnQodW5zaWduZWQg
bG9uZyBsb25nIG9sZFZlcnNpb24sIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdWZXJzaW9uLCBjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CisgICAgdmlydHVhbCB1aW50NjRfdCBvbGRWZXJz
aW9uKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDY0X3QgbmV3VmVyc2lvbigpIGNvbnN0
ID0gMDsKIAotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX29sZFZlcnNpb247Ci0gICAgdW5zaWdu
ZWQgbG9uZyBsb25nIG1fbmV3VmVyc2lvbjsKK3Byb3RlY3RlZDoKKyAgICBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCQ2FsbGJhY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1NzJm
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJDYWxsYmFja3MuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkNhbGxiYWNrc19oCisjZGVm
aW5lIElEQkNhbGxiYWNrc19oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5j
bHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmQ7
CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK3N0cnVj
dCBJREJEYXRhYmFzZU1ldGFkYXRhOworCitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgUmVm
Q291bnRlZDxJREJDYWxsYmFja3M+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJDYWxsYmFj
a3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pID0gMDsKKyAgICAvLyBGcm9tIElEQkZhY3Rvcnkud2Via2l0R2V0RGF0YWJhc2VO
YW1lcygpCisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xp
c3Q+KSA9IDA7CisgICAgLy8gRnJvbSBJREJPYmplY3RTdG9yZS9JREJJbmRleC5vcGVuQ3Vyc29y
KCksIElEQkluZGV4Lm9wZW5LZXlDdXJzb3IoKQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPikgPSAwOworICAgIC8vIEZyb20gSURCT2JqZWN0
U3RvcmUuYWRkKCkvcHV0KCksIElEQkluZGV4LmdldEtleSgpCisgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4pID0gMDsKKyAgICAvLyBGcm9tIElEQk9iamVjdFN0
b3JlL0lEQkluZGV4LmdldCgpL2NvdW50KCksIGFuZCB2YXJpb3VzIG1ldGhvZHMgdGhhdCB5aWVs
ZCBudWxsL3VuZGVmaW5lZC4KKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPikgPSAwOworICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXgu
Z2V0KCkgKHdpdGgga2V5IGluamVjdGlvbikKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQ
YXRoJikgPSAwOworICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXguY291bnQoKQor
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoaW50NjRfdCB2YWx1ZSkgPSAwOworCisgICAgLy8g
RnJvbSBJREJGYWN0b3IuZGVsZXRlRGF0YWJhc2UoKSwgSURCT2JqZWN0U3RvcmUvSURCSW5kZXgu
Z2V0KCksIElEQk9iamVjdFN0b3JlLmRlbGV0ZSgpLCBJREJPYmplY3RTdG9yZS5jbGVhcigpCisg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcygpID0gMDsKKworICAgIC8vIEZyb20gSURCQ3Vyc29y
LmFkdmFuY2UoKS9jb250aW51ZSgpCisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4pID0gMDsKKworICAgIC8vIEZyb20gSURCRmFjdG9yeS5vcGVuKCkvZGVsZXRl
RGF0YWJhc2UoKQorICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQodWludDY0X3QgLyogZXhpc3Rp
bmdWZXJzaW9uICovKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgLy8gRnJvbSBJREJG
YWN0b3J5Lm9wZW4oKQorICAgIHZpcnR1YWwgdm9pZCBvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qg
Lyogb2xkVmVyc2lvbiAqLywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkNhbGxiYWNrc19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURC
Q3Vyc29yQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCQ3Vyc29yQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzgwMWM3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5o
IgorI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURC
Q3Vyc29yQmFja2VuZDo6SURCQ3Vyc29yQmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRleGVk
REI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlEKQorICAgIDogbV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAsIG1fY3Vyc29yVHlw
ZShjdXJzb3JUeXBlKQorICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24pCisgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJRCkKKyAgICAsIG1fY3Vyc29ySUQoY3Vyc29ySUQp
CisgICAgLCBtX3NhdmVkQ3Vyc29ySUQoMCkKKyAgICAsIG1fY2xvc2VkKGZhbHNlKQoreworICAg
IG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKK30KKworSURCQ3Vyc29y
QmFja2VuZDo6fklEQkN1cnNvckJhY2tlbmQoKQoreworICAgIG1fdHJhbnNhY3Rpb24tPnVucmVn
aXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNvbnRp
bnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJJREJDdXJzb3JCYWNrZW5kOjpjb250aW51ZSIpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2sobV90YXNrVHlwZSwgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5
LCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kOjphZHZhbmNlKHVuc2ln
bmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4
Y2VwdGlvbkNvZGUmKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6
YWR2YW5jZSIpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKKyAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3Vyc29yQWR2YW5jZU9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIGNvdW50LCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJDdXJz
b3JCYWNrZW5kOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNv
ckJhY2tlbmQ6OmRlbGV0ZSIpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKKyAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6OmNyZWF0ZShwcmltYXJ5S2V5KCkpOworICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuZGVsZXRlUmFuZ2UobV90cmFuc2FjdGlvbi0+aWQo
KSwgbV9vYmplY3RTdG9yZUlELCBrZXlSYW5nZS5yZWxlYXNlKCksIHBycENhbGxiYWNrcyk7Cit9
CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Y2xvc2UoKQoreworICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCQ3Vyc29yQmFja2VuZDo6Y2xvc2UiKTsKKyAgICBjbGVhcigpOworICAgIG1fY2xvc2Vk
ID0gdHJ1ZTsKKyAgICBtX3NhdmVkQ3Vyc29ySUQgPSAwOworfQorCit2b2lkIElEQkN1cnNvckJh
Y2tlbmQ6OnVwZGF0ZUN1cnNvckRhdGEoSURCS2V5KiBrZXksIElEQktleSogcHJpbWFyeUtleSwg
U2hhcmVkQnVmZmVyKiB2YWx1ZUJ1ZmZlcikKK3sKKyAgICBtX2N1cnJlbnRLZXkgPSBrZXk7Cisg
ICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IHByaW1hcnlLZXk7CisgICAgbV9jdXJyZW50VmFsdWVC
dWZmZXIgPSB2YWx1ZUJ1ZmZlcjsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kOjpjbGVhcigp
Cit7CisgICAgbV9jdXJzb3JJRCA9IDA7CisgICAgbV9jdXJyZW50S2V5ID0gbnVsbHB0cjsKKyAg
ICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZl
ciA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ZDFmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmgKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kX2gKKyNkZWZpbmUg
SURCQ3Vyc29yQmFja2VuZF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJREJLZXlSYW5nZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSURCQ3Vy
c29yQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkN1cnNvckJhY2tlbmQ+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShpbnQ2NF90IGN1cnNv
cklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwgY3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJRCkpOworICAgIH0KKyAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShp
bnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlEKSk7CisgICAgfQorICAgIH5JREJDdXJz
b3JCYWNrZW5kKCk7CisKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNr
KCkgeyB9CisKKyAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleS5n
ZXQoKTsgfQorICAgIElEQktleSogcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dFByaW1hcnlLZXkuZ2V0KCk7IH0KKyAgICBTaGFyZWRCdWZmZXIqIHZhbHVlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9u
bHkpID8gbnVsbHB0ciA6IG1fY3VycmVudFZhbHVlQnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCB1
cGRhdGVDdXJzb3JEYXRhKElEQktleSosIElEQktleSogcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVy
KiB2YWx1ZUJ1ZmZlcik7CisKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBJbmRleGVkREI6OkN1
cnNvclR5cGUgY3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQorCisg
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29ySUQ7IH0KKworICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24oKSB7IHJldHVybiAqbV90cmFuc2FjdGlvbjsg
fQorCisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgc2V0U2F2ZWRDdXJzb3JJRChpbnQ2NF90
IGN1cnNvcklEKSB7IG1fc2F2ZWRDdXJzb3JJRCA9IGN1cnNvcklEOyB9CisKK3ByaXZhdGU6Cisg
ICAgSURCQ3Vyc29yQmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5
cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZCYs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCk7CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIG1fdGFza1R5cGU7CisgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworCisgICAgaW50NjRfdCBtX2N1cnNvcklEOwor
ICAgIGludDY0X3QgbV9zYXZlZEN1cnNvcklEOworCisgICAgUmVmUHRyPElEQktleT4gbV9jdXJy
ZW50S2V5OworICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1hcnlLZXk7CisgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV9jdXJyZW50VmFsdWVCdWZmZXI7CisKKyAgICBib29sIG1fY2xv
c2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVmOGE1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCkBA
IC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1
cnNvckJhY2tlbmRPcGVyYXRpb25zLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8
Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIGF1dG8gY2FsbGJh
Y2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ip
IHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBtX2N1cnNvci0+Y2xlYXIoKTsK
KyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgfSBlbHNl
IGlmICgha2V5KSB7CisgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNv
IG5vIGtleSwgdGhlbiB0aGUgY3Vyc29yIHJlYWNoZWQgdGhlIGVuZC4KKyAgICAgICAgICAgIG1f
Y3Vyc29yLT5jbGVhcigpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0
aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihudWxscHRyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX2N1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShrZXkuZ2V0KCksIHByaW1hcnlLZXku
Z2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3Moa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogQ3Vyc29yIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gcGFzcyBhbG9u
ZyBhbiBlcnJvciBpbnN0ZWFkIG9mIHN1Y2Nlc3MKKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNr
KCk7CisgICAgfTsKKworICAgIG1fY3Vyc29yLT50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmN1cnNvckFkdmFuY2UoKm1fY3Vyc29yLCAqdGhpcywgY2FsbGJhY2sp
OworfQorCit2b2lkIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAi
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8Q3Vyc29ySXRlcmF0aW9u
T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgYXV0byBjYWxsYmFjayA9IFt0aGlzLCBv
cGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZUJ1ZmZlciwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikgeworICAgICAgICBp
ZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIG1fY3Vyc29yLT5jbGVhcigpOworICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICB9IGVsc2UgaWYgKCFrZXkpIHsK
KyAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZXJyb3IgYnV0IGFsc28gbm8ga2V5LCB0aGVu
IHRoZSBjdXJzb3IgcmVhY2hlZCB0aGUgZW5kLgorICAgICAgICAgICAgbV9jdXJzb3ItPmNsZWFy
KCk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJl
ZEJ1ZmZlcio+KG51bGxwdHIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fY3Vy
c29yLT51cGRhdGVDdXJzb3JEYXRhKGtleS5nZXQoKSwgcHJpbWFyeUtleS5nZXQoKSwgdmFsdWVC
dWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXksIHBy
aW1hcnlLZXksIHZhbHVlQnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBD
dXJzb3Igb3BlcmF0aW9ucyBzaG91bGQgYmUgYWJsZSB0byBwYXNzIGFsb25nIGFuIGVycm9yIGlu
c3RlYWQgb2Ygc3VjY2VzcworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9Owor
CisgICAgbV9jdXJzb3ItPnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9u
KCkuY3Vyc29ySXRlcmF0ZSgqbV9jdXJzb3IsICp0aGlzLCBjYWxsYmFjayk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRUQoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjI3OTc3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5o
CkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9u
c19oCisjZGVmaW5lIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zX2gKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgorI2luY2x1
ZGUgIklEQk9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1cnNv
ckl0ZXJhdGlvbk9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDdXJz
b3JJdGVyYXRpb25PcGVyYXRpb24oY3Vyc29yLCBrZXksIGNhbGxiYWNrcykpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0X3QgY3Vyc29ySUQoKSBjb25zdCB7
IHJldHVybiBtX2N1cnNvci0+aWQoKTsgfQorICAgIElEQktleSoga2V5KCkgY29uc3QgeyByZXR1
cm4gbV9rZXkuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9j
dXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2NhbGxiYWNr
cyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5k
PiBtX2N1cnNvcjsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2tleTsKKyAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb24g
OiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCB1bnNpZ25l
ZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbihjdXJz
b3IsIGNvdW50LCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7
CisKKyAgICBpbnQ2NF90IGN1cnNvcklEKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPmlkKCk7
IH0KKyAgICB1bnNpZ25lZCBsb25nIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQor
Citwcml2YXRlOgorICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPiBjdXJzb3IsIHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAs
IG1fY291bnQoY291bnQpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gbV9jdXJzb3I7CisgICAgdW5z
aWduZWQgbG9uZyBtX2NvdW50OworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisjZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnNfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFi
YXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCRGF0YWJhc2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wOWU0ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw2MjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlY29yZElkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmPElEQkRhdGFiYXNlQmFja2VuZD4gSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBJREJTZXJ2ZXJDb25uZWN0aW9uJiBzZXJ2ZXJDb25u
ZWN0aW9uKQoreworICAgIFJlZjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQgPSBhZG9wdFJl
ZigqbmV3IElEQkRhdGFiYXNlQmFja2VuZChuYW1lLCB1bmlxdWVJZGVudGlmaWVyLCBmYWN0b3J5
LCBzZXJ2ZXJDb25uZWN0aW9uKSk7CisgICAgYmFja2VuZC0+b3BlbkludGVybmFsQXN5bmMoKTsK
KyAgICAKKyAgICByZXR1cm4gYmFja2VuZDsKK30KKworSURCRGF0YWJhc2VCYWNrZW5kOjpJREJE
YXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlk
ZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBJREJTZXJ2ZXJD
b25uZWN0aW9uJiBzZXJ2ZXJDb25uZWN0aW9uKQorICAgIDogbV9tZXRhZGF0YShuYW1lLCBJbnZh
bGlkSWQsIDAsIEludmFsaWRJZCkKKyAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVy
KQorICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCisgICAgLCBtX3NlcnZlckNvbm5lY3Rpb24oc2Vy
dmVyQ29ubmVjdGlvbikKKyAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihzdGQ6Om1ha2Vf
dW5pcXVlPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+KCkpCisgICAgLCBtX2Nsb3NpbmdDb25u
ZWN0aW9uKGZhbHNlKQorICAgICwgbV9kaWRPcGVuSW50ZXJuYWwoZmFsc2UpCit7CisgICAgQVNT
RVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0
U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQoIW1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlkKSk7CisgICAgaWYgKG5l
d01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKSB7
CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPCBuZXdNYXhPYmpl
Y3RTdG9yZUlkKTsKKyAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkID0gbmV3TWF4
T2JqZWN0U3RvcmVJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9i
amVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
OjpyZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCit7CisgICAg
QVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsK
KyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5p
bmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7CisgICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQo
aW5kZXguaWQsIGluZGV4KTsKKyAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQg
PCBuZXdNYXhJbmRleElkKTsKKyAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01h
eEluZGV4SWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RT
dG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpyZW1v
dmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBB
U1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwor
ICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5k
ZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5yZW1vdmUo
aW5kZXhJZCk7CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQs
IG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5JbnRlcm5h
bEFzeW5jKCkKK3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBzZWxmID0gdGhpczsK
KyAgICBtX3NlcnZlckNvbm5lY3Rpb24tPmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0
YShbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2Vz
cykgeworICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJuYWxBc3luYyhtZXRhZGF0YSwgc3VjY2Vz
cyk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkaWRPcGVuSW50ZXJu
YWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9vbCBzdWNjZXNz
KQoreworICAgIG1fZGlkT3BlbkludGVybmFsID0gdHJ1ZTsKKworICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyhmYWxzZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX21ldGFkYXRhID0gbWV0YWRhdGE7CisKKyAgICBwcm9jZXNzUGVu
ZGluZ0NhbGxzKCk7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZDo6fklEQkRhdGFiYXNlQmFja2Vu
ZCgpCit7CisgICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQobV9pZGVudGlm
aWVyKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK3sK
KyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7CisKKyAgICBBU1NFUlQoIW1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCwgSURCRGF0YWJhc2VCYWNrZW5kOjpNaW5pbXVtSW5kZXhJZCk7CisK
KyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihvYmpl
Y3RTdG9yZU1ldGFkYXRhKTsKKyAgICBhZGRPYmplY3RTdG9yZShvYmplY3RTdG9yZU1ldGFkYXRh
LCBvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZU9i
amVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQor
eworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVPYmplY3RT
dG9yZSIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZURl
bGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEpOworICAgIHJlbW92
ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVJbmRleCIpOworICAgIElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rp
b25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJz
aW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlu
cyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmpl
Y3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKwor
ICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBh
dGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVh
dGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsKKworICAgIGFk
ZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgiKTsKKyAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
SWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lv
bkNoYW5nZSk7CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0
U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAg
ICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmluZGV4ZXMu
Z2V0KGluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRlSW5kZXhPcGVy
YXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7CisKKyAgICByZW1vdmVJbmRleChv
YmplY3RTdG9yZUlkLCBpbmRleElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNv
bW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dl
c3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQg
YW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9y
dCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxs
IGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYgKG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQoreworICAgIC8vIElmIHRoZSB0cmFuc2FjdGlv
biBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFj
a2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgorICAgIGlm
IChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+IGVycm9yKQoreworICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyB1bmtu
b3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFja2VuZCBiZWZv
cmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgorICAgIGlmIChtX3RyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wg
a2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Z2V0Iik7CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVHZXRPcGVyYXRpb24obV9tZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwga2V5UmFuZ2UsIGtleU9ubHkgPyBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkg
OiBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFi
YXNlQmFja2VuZDo6cHV0Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKKworICAgIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZU1ldGFk
YXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2Rl
LCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9y
PGludDY0X3QsIDE+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cywgMT4mIGluZGV4
S2V5cykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5k
ZXhLZXlzIik7CisgICAgQVNTRVJUKHBycFByaW1hcnlLZXkpOworICAgIEFTU0VSVChtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7CisKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklEKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGU6OlZlcnNpb25DaGFuZ2UpOworCisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBy
cFByaW1hcnlLZXk7CisgICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5zZXRJbmRleEtleXModHJhbnNh
Y3Rpb25JRCwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJRCwgbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSUQpLCAqcHJpbWFyeUtleSwgaW5kZXhJRHMsIGluZGV4S2V5
cywgW3RyYW5zYWN0aW9uXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7Cisg
ICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7
CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRleGVzUmVhZHko
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdCwgMT4m
IGluZGV4SWRzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpz
ZXRJbmRleGVzUmVhZHkiKTsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2Fj
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlU2V0SW5k
ZXhlc1JlYWR5T3BlcmF0aW9uKGluZGV4SWRzLnNpemUoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwg
VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7
CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5DdXJzb3IiKTsK
KyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24ob2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZTo6S2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFs
dWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRh
YmFzZUJhY2tlbmQ6OmNvdW50Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5z
YWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFj
a3MpOworfQorCisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVSYW5nZShpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJhbmdlIik7Cisg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGU6OlJlYWRPbmx5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZURlbGV0ZVJhbmdl
T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJP
YmplY3RTdG9yZSAlbGxpIGluIHRyYW5zYWN0aW9uICVsbGkiLCBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KG9iamVjdFN0b3JlSWQpLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHRyYW5zYWN0aW9uSWQp
KTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZTo6UmVhZE9ubHkpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ2xlYXJP
YmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJU
KCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOworICAgICAgICBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogcmF3VHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uLT5pZCgpKSA9PSB0cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV90
cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLT5pZCgpKTsKKyAgICBpZiAodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkg
eworICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
Ojp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHJhd1RyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRy
YW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAg
Ly8gSWYgdGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBh
ICJzZWNvbmQKKyAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMuCisgICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBz
dXBwb3J0IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCisgICAgICAgIGlmIChtX3Bl
bmRpbmdTZWNvbmRIYWxmT3BlbikgeworICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdh
cyBhYm9ydGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7CisgICAgICAgICAg
ICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAg
cHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogcmF3VHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1v
ZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkKKyAgICAg
ICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworfQorCitzaXplX3QgSURCRGF0YWJhc2VCYWNrZW5k
Ojpjb25uZWN0aW9uQ291bnQoKQoreworICAgIC8vIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBwZW5k
aW5nIG9wZW4gY2FsbHMsIGFzIHRob3NlIHNob3VsZCBub3QgYmxvY2sgdmVyc2lvbiBjaGFuZ2Vz
IGFuZCBkZWxldGVzLgorICAgIHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQorewor
ICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBv
cGVuSW50ZXJuYWxBc3luYygpIGNvbXBsZXRlcy4KKyAgICBpZiAoIW1fZGlkT3BlbkludGVybmFs
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsK
KyAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT52ZXJzaW9uKCkgPT0gbV9t
ZXRhZGF0YS52ZXJzaW9uKTsKKyAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxp
ZElkKTsKKyAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vblN1
Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuID0gbnVsbHB0cjsKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHdoZW4gY29tcGxldGUs
IGFzIHBlbmRpbmcgZGVsZXRlcyBtYXkgYmUgKHBhcnRpYWxseSkgdW5ibG9ja2VkLgorICAgIH0K
KworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uIHRv
IHJlZHVjZSBxdWV1ZS1jaHVybiBhbmQKKyAgICAvLyBub3QgbmVjZXNzYXJ5IGZvciBjb3JyZWN0
bmVzczsgZGVsZXRlRGF0YWJhc2UgYW5kIG9wZW5Db25uZWN0aW9uIHdpbGwKKyAgICAvLyByZXF1
ZXVlIHRoZWlyIGNhbGxzIGlmIHRoaXMgY29uZGl0aW9uIGlzIHRydWUuCisgICAgaWYgKG1fcnVu
bmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkgJiYgaXNEZWxldGVEYXRhYmFzZUJsb2Nr
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nRGVsZXRlQ2Fs
bD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBtX3BlbmRpbmdEZWxldGVDYWxscy50YWtlRmlyc3QoKTsK
KyAgICAgICAgbV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5hZGQocGVuZGluZ0Rl
bGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICAgICAgZGVsZXRlRGF0YWJhc2VBc3luYyhwZW5k
aW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0KKworICAgIC8vIGRlbGV0ZURhdGFi
YXNlQXN5bmMgc2hvdWxkIG5ldmVyIHJlLXF1ZXVlIGNhbGxzLgorICAgIEFTU0VSVChtX3BlbmRp
bmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBkYXRh
YmFzZSBkZWxldGlvbnMgd2FpdGluZyBmb3IgY29tcGxldGlvbiwgd2UncmUgZG9uZSBmb3Igbm93
LgorICAgIC8vIEZ1cnRoZXIgY2FsbGJhY2tzIHdpbGwgYmUgaGFuZGxlZCBpbiBhIGZ1dHVyZSBj
YWxsIHRvIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKS4KKyAgICBpZiAoIW1fZGVsZXRlQ2FsbGJhY2tz
V2FpdGluZ0NvbXBsZXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyh0cnVlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmQ6OnByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGJvb2wgc3VjY2VzcykKK3sKKyAgICAvLyBP
cGVuIGNhbGxzIGNhbiBiZSByZXF1ZXVlZCBpZiBhbiBvcGVuIGNhbGwgc3RhcnRlZCBhIHZlcnNp
b24gY2hhbmdlIHRyYW5zYWN0aW9uIG9yIGRlbGV0ZXMgdGhlIGRhdGFiYXNlLgorICAgIERlcXVl
PHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBwZW5kaW5nT3BlbkNhbGxzOwor
ICAgIG1fcGVuZGluZ09wZW5DYWxscy5zd2FwKHBlbmRpbmdPcGVuQ2FsbHMpOworCisgICAgd2hp
bGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SURCUGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxz
LnRha2VGaXJzdCgpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKG1f
bWV0YWRhdGEuaWQgPT0gSW52YWxpZElkKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBkYXRh
YmFzZSB3YXMgZGVsZXRlZCB0aGVuIHF1aWNrbHkgcmUtb3BlbmVkLgorICAgICAgICAgICAgICAg
IC8vIG9wZW5JbnRlcm5hbEFzeW5jKCkgd2lsbCByZWNyZWF0ZSBpdCBpbiB0aGUgYmFja2luZyBz
dG9yZSBhbmQgdGhlbiByZXN1bWUgcHJvY2Vzc2luZyBwZW5kaW5nIGNhbGxiYWNrcy4KKyAgICAg
ICAgICAgICAgICBwZW5kaW5nT3BlbkNhbGxzLnByZXBlbmQoV1RGOjptb3ZlKHBlbmRpbmdPcGVu
Q2FsbCkpOworICAgICAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbHMuc3dhcChtX3BlbmRpbmdP
cGVuQ2FsbHMpOworCisgICAgICAgICAgICAgICAgb3BlbkludGVybmFsQXN5bmMoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVuQ29ubmVj
dGlvbkludGVybmFsKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2Fs
bC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2FjdGlvbklkKCks
IHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFN0cmluZyBtZXNzYWdlOworICAgICAgICAgICAgaWYgKHBlbmRpbmdPcGVuQ2FsbC0+dmVy
c2lvbigpID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgICAg
ICAgICBtZXNzYWdlID0gIkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2
ZXJzaW9uIHNwZWNpZmllZC4iOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3
aXRoIHZlcnNpb24gJWxsdSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4ocGVuZGlu
Z09wZW5DYWxsLT52ZXJzaW9uKCkpKTsKKyAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbC0+Y2Fs
bGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNh
Y3Rpb25JRCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSURzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSBtb2RlKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JRCwg
Y2FsbGJhY2tzLCBvYmplY3RTdG9yZUlEcywgbW9kZSk7CisKKyAgICBBU1NFUlQoIW1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSUQpKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5hZGQo
dHJhbnNhY3Rpb25JRCwgdHJhbnNhY3Rpb24uZ2V0KCkpOworfQorCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFj
a3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbikKK3sKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJh
Y2tzOworCisgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPElE
QlBlbmRpbmdPcGVuQ2FsbD4oKmNhbGxiYWNrcywgKmRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbklkLCB2ZXJzaW9uKSk7CisKKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVjdGlvbkludGVybmFsKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90
IHZlcnNpb24pCit7CisgICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7
CisgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOworCisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNh
bGxiYWNrczsKKworICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlz
dCBmcm9tIGl0cyBsYWNrIG9mIHZlcnNpb24uCisgICAgYm9vbCBpc05ld0RhdGFiYXNlID0gbV9t
ZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKKwor
ICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9u
ICYmICFpc05ld0RhdGFiYXNlKSB7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRk
KGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywg
dGhpcy0+bWV0YWRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNO
ZXdEYXRhYmFzZSAmJiB2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRW
ZXJzaW9uKSB7CisgICAgICAgIC8vIFNwZWMgc2F5czogSWYgbm8gdmVyc2lvbiBpcyBzcGVjaWZp
ZWQgYW5kIG5vIGRhdGFiYXNlIGV4aXN0cywgc2V0IGRhdGFiYXNlIHZlcnNpb24gdG8gMS4KKyAg
ICAgICAgdmVyc2lvbiA9IDE7CisgICAgfQorCisgICAgaWYgKHZlcnNpb24gPiBtX21ldGFkYXRh
LnZlcnNpb24gfHwgbV9tZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5v
SW50VmVyc2lvbikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2Fs
bGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA8IG1fbWV0YWRhdGEudmVyc2lv
biAmJiBtX21ldGFkYXRhLnZlcnNpb24gIT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIlRo
ZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJWxsdSkgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJz
aW9uICglbGx1KS4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHZlcnNpb24pLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fbWV0YWRhdGEudmVyc2lvbikpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX21ldGFkYXRh
LnZlcnNpb24pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJh
Y2tzKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCit7CisgICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKKyAgICBB
U1NFUlQoY2FsbGJhY2tzKTsKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9kYXRhYmFzZUNh
bGxiYWNrc1NldCkgeworICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMg
bm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgorICAg
ICAgICBpZiAoY2FsbGJhY2sgIT0gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAgICBjYWxs
YmFjay0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEudmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lv
bik7CisgICAgfQorICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwgYWxsIHRo
ZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCisgICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVuIGNo
ZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZworICAgIC8v
IG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3VsZCBiZSBjb25z
aXN0ZW50IHdpdGggaG93CisgICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNvcnJlY3RseSkg
ZGlkIGl0LgorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNhbGwgdG8gb25CbG9ja2VkIGFuZCBp
bnN0ZWFkIHdhaXQgdW50aWwgdGhlIGZyb250ZW5kCisgICAgLy8gdGVsbHMgdXMgdGhhdCBhbGwg
dGhlIGJsb2NrZWQgZXZlbnRzIGhhdmUgYmVlbiBkZWxpdmVyZWQuIFNlZQorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChjb25uZWN0
aW9uQ291bnQoKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS52ZXJz
aW9uKTsKKyAgICAvLyBGSVhNRTogQWRkIHRlc3QgZm9yIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbi4KKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8
IGNvbm5lY3Rpb25Db3VudCgpKSB7CisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nT3BlbkNhbGw+KCpjYWxsYmFja3MsICpkYXRhYmFz
ZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOworICAg
IGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmpl
Y3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbihyZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKKworICAgIEFTU0VSVCghbV9wZW5kaW5nU2Vjb25kSGFs
Zk9wZW4pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tz
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxv
Y2tlZCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0KSB7CisgICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMg
bm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgorICAg
ICAgICAgICAgY2FsbGJhY2stPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIDAp
OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRo
ZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgICAgICAvLyBWZXJzaW9uQ2hh
bmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgICAg
ICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLnZlcnNpb24pOworICAgICAgICBtX3Bl
bmRpbmdEZWxldGVDYWxscy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nRGVsZXRl
Q2FsbD4oY2FsbGJhY2tzLnJlbGVhc2UoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGRlbGV0ZURhdGFiYXNlQXN5bmMoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Cit9CisKK2Jvb2wgSURC
RGF0YWJhc2VCYWNrZW5kOjppc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpCit7CisgICAgcmV0dXJu
IGNvbm5lY3Rpb25Db3VudCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRl
RGF0YWJhc2VBc3luYyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQorewor
ICAgIEFTU0VSVCghaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSk7CisKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kPiBzZWxmKHRoaXMpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBtX3NlcnZlckNvbm5lY3Rpb24tPmRlbGV0ZURh
dGFiYXNlKG1fbWV0YWRhdGEubmFtZSwgW3NlbGYsIGNhbGxiYWNrc10oYm9vbCBzdWNjZXNzKSB7
CisgICAgICAgIHNlbGYtPm1fZGVsZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb24ucmVtb3Zl
KGNhbGxiYWNrcyk7CisKKyAgICAgICAgLy8gSWYgdGhpcyBJREJEYXRhYmFzZUJhY2tlbmQgd2Fz
IGNsb3NlZCB3aGlsZSB3YWl0aW5nIGZvciBkZWxldGVEYXRhYmFzZSB0byBjb21wbGV0ZSwgbm8g
cG9pbnQgaW4gcGVyZm9ybWluZyBhbnkgY2FsbGJhY2tzLgorICAgICAgICBpZiAoIXNlbGYtPm1f
c2VydmVyQ29ubmVjdGlvbi0+aXNDbG9zZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS5pZCA9IElu
dmFsaWRJZDsKKyAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEudmVyc2lvbiA9IElEQkRhdGFi
YXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKKyAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcygp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yIGRlbGV0aW5nIGRhdGFiYXNlLiIpKTsKKworICAgICAgICBzZWxmLT5wcm9j
ZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
OjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7
CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuY29udGFpbnMoY2FsbGJhY2tz
KSk7CisKKyAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShjYWxsYmFja3MpOworICAg
IGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiAmJiBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+
ZGF0YWJhc2VDYWxsYmFja3MoKSA9PSBjYWxsYmFja3MpIHsKKyAgICAgICAgbV9wZW5kaW5nU2Vj
b25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlRoZSBjb25uZWN0aW9uIHdhcyBj
bG9zZWQuIikpOworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51bGxwdHI7Cisg
ICAgfQorCisgICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpID4gMSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gcHJvY2Vzc1BlbmRpbmdDYWxscyBhbGxvd3MgdGhlIGluc3BlY3RvciB0byBwcm9j
ZXNzIGEgcGVuZGluZyBvcGVuIGNhbGwKKyAgICAvLyBhbmQgY2FsbCBjbG9zZSwgcmVlbnRlcmlu
ZyBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlLiBUaGVuIHRoZQorICAgIC8vIGJhY2tlbmQgd291
bGQgYmUgcmVtb3ZlZCBib3RoIGJ5IHRoZSBpbnNwZWN0b3IgY2xvc2luZyBpdHMgY29ubmVjdGlv
biwgYW5kCisgICAgLy8gYnkgdGhlIGNvbm5lY3Rpb24gdGhhdCBmaXJzdCBjYWxsZWQgY2xvc2Uu
CisgICAgLy8gVG8gYXZvaWQgdGhhdCBzaXR1YXRpb24sIGRvbid0IHByb2NlZWQgaW4gY2FzZSBv
ZiByZWVudHJhbmN5LgorICAgIGlmIChtX2Nsb3NpbmdDb25uZWN0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNsb3NpbmdDb25uZWN0aW9uKG1fY2xvc2lu
Z0Nvbm5lY3Rpb24sIHRydWUpOworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKworICAgIC8v
IEZJWE1FOiBBZGQgYSB0ZXN0IGZvciB0aGUgbV9wZW5kaW5nT3BlbkNhbGxzIGNhc2VzIGJlbG93
LgorICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5zaXpl
KCkgJiYgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgeworICAgICAgICBUcmFuc2FjdGlv
bk1hcCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOworICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKKyAgICAg
ICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6IHRyYW5zYWN0aW9ucy52YWx1ZXMoKSkKKyAgICAg
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CisKKyAgICAgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICAgICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5jbG9z
ZSgpOworCisgICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFsc2UgaW4gdW5p
dCB0ZXN0cy4KKyAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7CisgICAgICAgIGlmIChtX2ZhY3Rv
cnkpCisgICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChtX2lk
ZW50aWZpZXIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxOTkyNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUJhY2tl
bmQuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5k
X2gKKyNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kX2gKKworI2luY2x1ZGUgIklEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUg
IklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCIKKyNpbmNs
dWRlICJJREJQZW5kaW5nT3BlbkNhbGwuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZTsKK2NsYXNzIElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UGF0aDsKK2NsYXNzIElE
QlNlcnZlckNvbm5lY3Rpb247CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ7CitjbGFzcyBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitzdHJ1Y3Qg
SURCRGF0YWJhc2VNZXRhZGF0YTsKK3N0cnVjdCBJREJJbmRleE1ldGFkYXRhOworc3RydWN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE7CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBJ
bmRleEtleXM7Cit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmQ+IHsKK3B1Ymxp
YzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIElEQlNlcnZlckNvbm5lY3Rpb24mKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB+SURCRGF0YWJhc2VCYWNrZW5kKCk7CisKKyAgICBJREJTZXJ2ZXJDb25u
ZWN0aW9uJiBzZXJ2ZXJDb25uZWN0aW9uKCkgeyByZXR1cm4gbV9zZXJ2ZXJDb25uZWN0aW9uLmdl
dCgpOyB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOworICAgIGlu
dDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CisgICAgdm9pZCBhZGRP
YmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhP
YmplY3RTdG9yZUlkKTsKKyAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCk7CisgICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOworICAgIHZvaWQgcmVt
b3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIHVpbnQ2NF90IHZlcnNpb24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlRGF0
YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIC8vIElEQkRhdGFiYXNlQmFj
a2VuZAorICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdm9pZCBjcmVh
dGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CisgICAgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPik7CisKKyAgICB2b2lkIGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQpOworICAgIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAgICB2b2lkIGFi
b3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7
CisKKyAgICB2b2lkIGNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOworICAgIHZvaWQgZGVs
ZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCk7CisKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmdldCgpOyB9CisgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKik7CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCopOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKik7CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRG
aXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKworICAgIGVudW0gVGFza1R5cGUgeworICAg
ICAgICBOb3JtYWxUYXNrID0gMCwKKyAgICAgICAgUHJlZW1wdGl2ZVRhc2sKKyAgICB9OworCisg
ICAgZW51bSBQdXRNb2RlIHsKKyAgICAgICAgQWRkT3JVcGRhdGUsCisgICAgICAgIEFkZE9ubHks
CisgICAgICAgIEN1cnNvclVwZGF0ZQorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRf
dCBNaW5pbXVtSW5kZXhJZCA9IDMwOworCisgICAgdm9pZCBnZXQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAg
ICB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKKyAgICB2b2lkIHNldEluZGV4S2V5cyhp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90LCAxPiYgaW5kZXhJZHMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXMsIDE+Jik7CisgICAgdm9pZCBzZXRJbmRleGVzUmVhZHko
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90LCAxPiYgaW5kZXhJZHMpOworICAgIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5
T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBjb3Vu
dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKKyAgICB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisKKyAg
ICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWV0YWRhdGE7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRWZXJzaW9uKHVpbnQ2NF90IHZlcnNpb24p
IHsgbV9tZXRhZGF0YS52ZXJzaW9uID0gdmVyc2lvbjsgfQorCisgICAgYm9vbCBoYXNQZW5kaW5n
U2Vjb25kSGFsZk9wZW4oKSB7IHJldHVybiBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5nZXQoKTsg
fQorICAgIHZvaWQgc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKHN0ZDo6dW5pcXVlX3B0cjxJREJQ
ZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCkgeyBtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
biA9IFdURjo6bW92ZShwZW5kaW5nT3BlbkNhbGwpOyB9CisKKyAgICBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZSYgZmFjdG9yeUJhY2tlbmQoKSB7IHJldHVybiAqbV9mYWN0b3J5OyB9CisKKyAg
ICBjbGFzcyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOworICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbjsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiwgSURCU2VydmVyQ29ubmVjdGlvbiYpOworCisgICAgdm9pZCBvcGVu
Q29ubmVjdGlvbkludGVybmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVy
c2lvbik7CisKKyAgICB2b2lkIG9wZW5JbnRlcm5hbEFzeW5jKCk7CisgICAgdm9pZCBkaWRPcGVu
SW50ZXJuYWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKTsK
KworICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAgICBzaXplX3QgY29ubmVj
dGlvbkNvdW50KCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ09wZW5DYWxscyhib29sIHN1Y2Nlc3MpOworCisgICAgYm9vbCBpc0RlbGV0
ZURhdGFiYXNlQmxvY2tlZCgpOworICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VBc3luYyhQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFkYXRh
OworCisgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKKworICAgIFJlZlB0cjxJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4gbV9mYWN0b3J5OworICAgIFJlZjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBt
X3NlcnZlckNvbm5lY3Rpb247CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmQ+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBUcmFuc2Fj
dGlvbk1hcDsKKyAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKKworICAgIERlcXVl
PHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW47CisKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ0RlbGV0ZUNh
bGw+PiBtX3BlbmRpbmdEZWxldGVDYWxsczsKKyAgICBIYXNoU2V0PFJlZlB0cjxJREJDYWxsYmFj
a3M+PiBtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uOworCisgICAgdHlwZWRlZiBM
aXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBEYXRhYmFzZUNhbGxiYWNr
c1NldDsKKyAgICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0Owor
CisgICAgYm9vbCBtX2Nsb3NpbmdDb25uZWN0aW9uOworICAgIGJvb2wgbV9kaWRPcGVuSW50ZXJu
YWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VD
YWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1
YzBlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3MuaApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJREJEYXRhYmFzZUNhbGxiYWNrc19oCisjZGVmaW5lIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTGVnYWN5RGF0YWJhc2U7CisKK2NsYXNzIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VDYWxsYmFja3M+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUNhbGxiYWNrcygpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIG9uRm9yY2VkQ2xvc2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNo
YW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZShpbnQ2
NF90IHRyYW5zYWN0aW9uSWQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KExlZ2Fj
eURhdGFiYXNlKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KworI2VuZGlmIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYz
ZGRlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkxlZ2Fj
eURhdGFiYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbD4gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpjcmVhdGUoKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpKTsKK30KKworSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsOjpJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKQorICAgIDog
bV9kYXRhYmFzZShudWxscHRyKQoreworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5J
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKQoreworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbDo6b25Gb3JjZWRDbG9zZSgpCit7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAg
IG1fZGF0YWJhc2UtPmZvcmNlQ2xvc2UoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGw6Om9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdW
ZXJzaW9uKQoreworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5vblZl
cnNpb25DaGFuZ2Uob2xkVmVyc2lvbiwgbmV3VmVyc2lvbik7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsOjpjb25uZWN0KExlZ2FjeURhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAg
ICBBU1NFUlQoIW1fZGF0YWJhc2UpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgbV9kYXRh
YmFzZSA9IGRhdGFiYXNlOworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6b25B
Ym9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
ZXJyb3IpCit7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2UtPm9uQWJv
cnQodHJhbnNhY3Rpb25JZCwgZXJyb3IpOworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbDo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgaWYgKG1fZGF0
YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2UtPm9uQ29tcGxldGUodHJhbnNhY3Rpb25JZCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzYjBj
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaAorI2RlZmluZSBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGxfaAorCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTGVnYWN5RGF0YWJhc2U7CisKK2NsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCBm
aW5hbCA6IHB1YmxpYyBJREJEYXRhYmFzZUNhbGxiYWNrcyB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgfklE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpIG92ZXJyaWRlOworCisgICAgLy8gSURCRGF0YWJhc2VD
YWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25Gb3JjZWRDbG9zZSgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0
X3QgbmV3VmVyc2lvbikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkgb3Zl
cnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChMZWdhY3lEYXRhYmFzZSopIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpOworCisgICAg
Ly8gVGhlIGluaXRpYWwgSURCT3BlbkRCUmVxdWVzdCBvciBmaW5hbCBJREJEYXRhYmFzZSBtYWlu
dGFpbnMgYSBSZWZQdHIgdG8gdGhpcworICAgIExlZ2FjeURhdGFiYXNlKiBtX2RhdGFiYXNlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOTkwMTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZV9oCisjZGVmaW5lIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlX2gKKworI2luY2x1
ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgorCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3Mg
SURCQ3Vyc29yQmFja2VuZDsKK2NsYXNzIElEQkRhdGFiYXNlOworY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kOworY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7CitjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKKy8vIFRoaXMgY2xhc3MgaXMg
c2hhcmVkIGJ5IElEQkZhY3RvcnkgKGFzeW5jKSBhbmQgSURCRmFjdG9yeVN5bmMgKHN5bmMpLgor
Ly8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJGYWN0b3J5QmFja2VuZEltcGwgYW5kIG9wdGlv
bmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBwcm94eQorLy8gY2FsbHMgYWNyb3NzIHByb2Nlc3Mg
YmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUgbm9uLWJsb2Nr
aW5nIGFuZAorLy8gdHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaWYgbmVjZXNz
YXJ5LgorY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4geworcHVibGljOgorICAgIHZpcnR1YWwgfklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFNlY3VyaXR5T3JpZ2lu
JiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmln
aW4mIG1haW5GcmFtZU9yaWdpbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5nT3JpZ2lu
LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cikgPSAwOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZV9oCisKKyNlbmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nRGVsZXRlQ2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRmYmEyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaApAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJQZW5kaW5nRGVsZXRlQ2FsbF9oCisj
ZGVmaW5lIElEQlBlbmRpbmdEZWxldGVDYWxsX2gKKworI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQlBlbmRpbmdEZWxldGVDYWxsIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBJREJQZW5kaW5nRGVsZXRlQ2FsbChQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
KyAgICB7CisgICAgfQorCisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSB7IHJldHVybiBt
X2NhbGxiYWNrcy5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IG1fY2FsbGJhY2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjZW5kaWYgLy8gSURCUGVuZGluZ0RlbGV0ZUNhbGxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lE
QlBlbmRpbmdPcGVuQ2FsbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0lEQlBlbmRpbmdPcGVuQ2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjliNTNlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ09wZW5DYWxsLmgKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSURCUGVuZGluZ09wZW5DYWxsX2gKKyNkZWZpbmUgSURCUGVuZGlu
Z09wZW5DYWxsX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkNhbGxiYWNr
czsKK2NsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOworCitjbGFzcyBJREJQZW5kaW5nT3BlbkNh
bGwgeworcHVibGljOgorICAgIElEQlBlbmRpbmdPcGVuQ2FsbChJREJDYWxsYmFja3MmIGNhbGxi
YWNrcywgSURCRGF0YWJhc2VDYWxsYmFja3MmIGRhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pCisgICAgICAgIDogbV9jYWxsYmFja3MoJmNh
bGxiYWNrcykKKyAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKCZkYXRhYmFzZUNhbGxiYWNr
cykKKyAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBtX3RyYW5zYWN0aW9u
SWQodHJhbnNhY3Rpb25JZCkKKyAgICB7CisgICAgfQorCisgICAgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorICAgIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3Mu
Z2V0KCk7IH0KKyAgICB1aW50NjRfdCB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Cisg
ICAgaW50NjRfdCB0cmFuc2FjdGlvbklkKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklk
OyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cisg
ICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOworICAg
IHVpbnQ2NF90IG1fdmVyc2lvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorI2VuZGlmIC8vIElEQlBlbmRpbmdPcGVuQ2FsbF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTlkNjYwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcApA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKKworI2luY2x1ZGUgIkxlZ2FjeVRyYW5zYWN0
aW9uLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CisKK3VzaW5nIFdURjo6VGhyZWFkU3BlY2lmaWM7CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGVn
YWN5VHJhbnNhY3Rpb24+PiBUcmFuc2FjdGlvbkxpc3Q7CisKK3N0YXRpYyBUaHJlYWRTcGVjaWZp
YzxUcmFuc2FjdGlvbkxpc3Q+JiB0cmFuc2FjdGlvbnMoKQoreworICAgIC8vIEZJWE1FOiBNb3Zl
IHRoZSBWZWN0b3IgdG8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0byBhdm9pZCBkZWFsaW5nIHdp
dGgKKyAgICAvLyB0aHJlYWQtbG9jYWwgc3RvcmFnZS4KKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9uTGlzdD4q
IHRyYW5zYWN0aW9uczsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAg
ICB0cmFuc2FjdGlvbnMgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0PjsKKyAg
ICB9KTsKKworICAgIHJldHVybiAqdHJhbnNhY3Rpb25zOworfQorCit2b2lkIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3I6OmFkZE5ld1RyYW5zYWN0aW9uKFBhc3NSZWZQdHI8TGVnYWN5VHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKQoreworICAgIHRyYW5zYWN0aW9ucygpLT5hcHBlbmQodHJh
bnNhY3Rpb24pOworfQorCit2b2lkIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0
aXZhdGVOZXdUcmFuc2FjdGlvbnMoKQoreworICAgIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9u
TGlzdD4mIGxpc3QgPSB0cmFuc2FjdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9u
IDogKmxpc3QpCisgICAgICAgIHRyYW5zYWN0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOworICAgIC8v
IEZJWE1FOiBFeGVyY2lzZSB0aGlzIGNhbGwgdG8gY2xlYXIoKSBpbiBhIGxheW91dCB0ZXN0Lgor
ICAgIGxpc3QtPmNsZWFyKCk7Cit9CisKK307CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZlMjczCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yX2gKKyNkZWZpbmUgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
cl9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBMZWdhY3lUcmFuc2FjdGlvbjsKKworLy8gVGhpcyBjbGFzcyBrZWVwcyB0cmFj
ayBvZiB0aGUgdHJhbnNhY3Rpb25zIGNyZWF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50CisvLyBKYXZh
c2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBUcmFuc2FjdGlvbnMgaGF2ZSBhbiBpbnRlcm5hbCB8
YWN0aXZlfCBmbGFnCisvLyB3aGljaCBpcyBzZXQgdG8gdHJ1ZSBvbiBjcmVhdGlvbiwgYnV0IG11
c3QgYmUgc2V0IHRvIGZhbHNlIHdoZW4gY29udHJvbAorLy8gcmV0dXJucyB0byB0aGUgZXZlbnQg
bG9vcC4KKworY2xhc3MgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcik7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgYWRkTmV3VHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxMZWdhY3lUcmFuc2Fj
dGlvbj4pOworICAgIHN0YXRpYyB2b2lkIGRlYWN0aXZhdGVOZXdUcmFuc2FjdGlvbnMoKTsKKwor
cHJpdmF0ZToKKyAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yKCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2VuZGlmIC8vIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
OWJhODdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNv
ckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OmNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2Rl
KQoreworICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0U3RvcmVIYXNoU2V0OworICAgIGZvciAo
YXV0byYgaWQgOiBvYmplY3RTdG9yZUlkcykKKyAgICAgICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFk
ZChpZCk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmQo
ZGF0YWJhc2VCYWNrZW5kLCBpZCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUp
KTsKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURC
RGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYg
b2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCisgICAgOiBt
X29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAg
LCBtX3N0YXRlKFVub3BlbmVkKQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwg
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZUJhY2tlbmQp
CisgICAgLCBtX3Rhc2tUaW1lcigqdGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1Rp
bWVyRmlyZWQpCisgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCisgICAgLCBtX2lk
KGlkKQoreworICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3Jl
IGl0IGNhbiBiZSBhZG9wdGVkLgorICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCisg
ICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2Fj
dGlvbih0aGlzKTsKKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQo
dGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLm9wZW5UcmFuc2FjdGlv
bihpZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUsIFtiYWNrZW5kXShib29sIHN1Y2Nlc3MpIHsKKyAg
ICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtiYWNr
ZW5kXSgpIHsKKyAgICAgICAgICAgICAgICBiYWNrZW5kLT5hYm9ydCgpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgdGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGJlZm9yZSB0aGUgc2Vy
dmVyIGNvbm5lY3Rpb24gZmluaXNoZWQgb3BlbmluZyB0aGUgdHJhbnNhY3Rpb24uCisgICAgICAg
IGlmIChiYWNrZW5kLT5tX3N0YXRlID09IEZpbmlzaGVkKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGJhY2tlbmQtPm1fc3RhdGUgPSBVbnVzZWQ7CisgICAgICAgIGlmIChiYWNrZW5k
LT5oYXNQZW5kaW5nVGFza3MoKSkKKyAgICAgICAgICAgIGJhY2tlbmQtPnN0YXJ0KCk7CisgICAg
fSk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZCgp
Cit7CisgICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBn
ZXQgZGVsZXRlZCB1bmxlc3MgaXQncyB1bnVzZWQsIGNvbXBsZXRlLCBvciBhYm9ydGVkLgorICAg
IEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkIHx8IG1fc3RhdGUgPT0gVW51c2VkKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tl
bmQ6OlRhc2tUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVm
UHRyPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBhYm9ydFRhc2spCit7CisgICAgaWYgKG1fc3Rh
dGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlID09IElEQkRh
dGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaykKKyAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRh
c2spOworICAgIGVsc2UKKyAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNr
KTsKKworICAgIGlmIChhYm9ydFRhc2spCisgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVu
ZChhYm9ydFRhc2spOworCisgICAgaWYgKG1fc3RhdGUgPT0gVW5vcGVuZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKKyAgICAgICAgc3RhcnQoKTsKKyAg
ICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmQ6OmFib3J0KCkKK3sKKyAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
ICh1bmtub3duIGNhdXNlKSIpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFi
b3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCit7CisjaWZuZGVmIE5ERUJV
RworICAgIGlmIChlcnJvcikKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OmFib3J0IC0gKCVzKSAlcyIsIGVycm9yLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwg
ZXJyb3ItPm1lc3NhZ2UoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydCAobm8gZXJyb3IpIik7Cisj
ZW5kaWYKKworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7CisKKyAgICAvLyBUaGUg
bGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZv
cm1pbmcgdGhlCisgICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEg
c2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKKyAgICAvLyBhbGl2ZSB3aGlsZSBleGVj
dXRpbmcgdGhpcyBtZXRob2QuCisgICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBtX3N0YXRlID0gRmluaXNoZWQ7CisgICAgbV90YXNrVGltZXIuc3Rv
cCgpOworCisgICAgaWYgKHdhc1J1bm5pbmcpCisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNv
bm5lY3Rpb24oKS5yb2xsYmFja1RyYW5zYWN0aW9uU3luYyhtX2lkKTsKKworICAgIC8vIFJ1biB0
aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KKyAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gdGFzayht
X2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSgpOwor
ICAgIH0KKworICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3Jz
KSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCisgICAgLy8gYXJlIGZp
cmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBh
bGxvdyB0aGUgYmFja2luZyBzdG9yZQorICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5k
IG9yZGVyIGlzIGNyaXRpY2FsLgorICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgIG1fZGF0
YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uU3luYyhtX2lkKTsKKwor
ICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZv
cmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKKyAgICAvLyB0aGUgdHJhbnNhY3Rpb24g
Y29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4K
KyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5z
YWN0aW9uKHRoaXMpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5p
c2hlZCh0aGlzKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlID0g
bV9kYXRhYmFzZS5yZWxlYXNlKCk7CisKKyAgICBpZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIGVycm9yKTsKKworICAgIGRhdGFiYXNlLT50cmFuc2Fj
dGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKK30KKworYm9vbCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OmlzVGFza1F1ZXVlRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWVt
cHRpdmVUYXNrUXVldWUuaXNFbXB0eSgpICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsKK30KKwor
Ym9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6Omhhc1BlbmRpbmdUYXNrcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHko
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnJlZ2lzdGVyT3BlbkN1cnNvcihJ
REJDdXJzb3JCYWNrZW5kKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29y
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnVucmVnaXN0ZXJPcGVuQ3Vyc29y
KElEQkN1cnNvckJhY2tlbmQqIGN1cnNvcikKK3sKKyAgICBtX29wZW5DdXJzb3JzLnJlbW92ZShj
dXJzb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6cnVuKCkKK3sKKyAgICAv
LyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRoaXMgdHJhbnNhY3Rpb24uIFNj
aGVkdWxlIGEgdGltZXIKKyAgICAvLyB0byBwcm9jZXNzIHRoZSBmaXJzdCB0YXNrLgorICAgIEFT
U0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOworICAg
IEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7CisKKyAgICBtX3Rhc2tUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzdGFydCgpCit7
CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKworICAgIG1fc3RhdGUgPSBTdGFydFBl
bmRpbmc7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFy
dFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0
aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCgpCit7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCB0cmFuc2FjdGlv
biAlbGxpIGluIHN0YXRlICV1Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSwgbV9zdGF0
ZSk7CisKKyAgICAvLyBJbiBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSBy
ZXF1ZXN0ZWQgYSBjb21taXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5CisgICAgLy8gYmVlbiBp
bml0aWF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgorICAgIGlmIChtX3N0YXRl
ID09IEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBV
bm9wZW5lZCB8fCBtX3N0YXRlID09IFVudXNlZCB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOworICAg
IG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisKKyAgICAvLyBGcm9udC1lbmQgaGFzIHJlcXVlc3Rl
ZCBhIGNvbW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNrcyBsaWtlIGNyZWF0ZUluZGV4IHdoaWNo
CisgICAgLy8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25vdXMgYnkgdGhlIGZyb250LWVuZCBidXQg
YXJlIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KKyAgICBpZiAoaGFzUGVuZGluZ1Rhc2tzKCkp
IHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1p
dCAtIE5vdCBjb21taXR0aW5nIG5vdywgdHJhbnNhY3Rpb24gc3RpbGwgaGFzIHBlbmRpbmcgdGFz
a3MgKFRyYW5zYWN0aW9uICVsbGkpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhp
cyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCisgICAgLy8gY29t
bWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtl
ZXAgb3Vyc2VsdmVzCisgICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQodGhpcyk7CisKKyAgICBi
b29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gVW5vcGVuZWQ7Cisg
ICAgbV9zdGF0ZSA9IEZpbmlzaGVkOworCisgICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQ7CisK
KyAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24obV9p
ZCwgW2JhY2tlbmQsIHRoaXMsIGNvbW1pdHRlZCwgdW51c2VkXShib29sIHN1Y2Nlc3MpIG11dGFi
bGUgeworICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGNvbW1pdFRyYW5zYWN0aW9uIHJlcXVlc3Qg
YWJvcnRpbmcgZHVyaW5nIG9yIGFmdGVyIHN5bmNocm9ub3VzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6YWJvcnQoKSBjYWxsLgorICAgICAgICAvLyBUaGlzIGNhbiBlYXNpbHkgaGFwcGVuIGlmIHRo
ZSBwYWdlIGlzIG5hdmlnYXRlZCBiZWZvcmUgYWxsIHRyYW5zYWN0aW9ucyBmaW5pc2guCisgICAg
ICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIGZ1cnRoZXIgY2xlYW51cCBhbmQgZG9uJ3Qg
bmVlZCB0byBtYWtlIGFueSBjYWxsYmFja3MuCisgICAgICAgIGlmICghbV9kYXRhYmFzZSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFzdWNjZXNzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbW1pdHRlZCB8PSBzdWNjZXNzOworCisgICAgICAgIC8vIEJhY2tp
bmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJl
Zm9yZSBzY3JpcHQgY2FsbGJhY2tzCisgICAgICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlw
dCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcg
c3RvcmUKKyAgICAgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3Jp
dGljYWwuCisgICAgICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgICAgICBtX2RhdGFiYXNl
LT5zZXJ2ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7CisK
KyAgICAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVk
IGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAgICAgICAvLyB0aGUgdHJh
bnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25u
ZWN0aW9ucy4KKyAgICAgICAgaWYgKCF1bnVzZWQpCisgICAgICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAg
ICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworCisgICAgICAgIGlm
IChjb21taXR0ZWQpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkp
OworICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRl
RmlyZWQodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25BYm9ydChpZCgpLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24u
IikpOworICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0
RmlyZWQodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsK
KyAgICB9KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVk
KCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1Rp
bWVyRmlyZWQiKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgeworICAgICAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuYmVnaW5UcmFuc2FjdGlvbihtX2lkLCBb
XSgpIHsgfSk7CisgICAgICAgIG1fc3RhdGUgPSBSdW5uaW5nOworICAgIH0KKworICAgIC8vIFRo
ZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVy
Zm9ybWluZyBhIHRhc2suCisgICAgLy8gVGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgdGhp
cyBvYmplY3QgYWxpdmUgc28gdGhhdCB0YXNrcyBjYW4KKyAgICAvLyBzdWNjZXNzZnVsbHkgbWFr
ZSB0aGVpciBjb21wbGV0aW9uIGNhbGxiYWNrcy4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kPiBzZWxmKHRoaXMpOworCisgICAgVGFza1F1ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRp
bmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1
ZTsKKyAgICBpZiAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQp
IHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAgICAgIFJlZlB0cjxJ
REJPcGVyYXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtlRmlyc3QoKSk7CisgICAgICAgIHRhc2st
PnBlcmZvcm0oW3NlbGYsIHRoaXMsIHRhc2tdKCkgeworICAgICAgICAgICAgbV90YXNrVGltZXIu
c3RhcnRPbmVTaG90KDApOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdlIGhhdmVuJ3QgYWxyZWFk
eSBjb21taXR0ZWQvYWJvcnRlZCwKKyAgICAvLyBhbmQgdGhlIGZyb250LWVuZCByZXF1ZXN0ZWQg
YSBjb21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgorICAgIGlmICghaGFzUGVuZGluZ1Rh
c2tzKCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBlbmRpbmcpCisgICAgICAg
IGNvbW1pdCgpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y2xvc2VPcGVuQ3Vy
c29ycygpCit7CisgICAgZm9yIChhdXRvJiBjdXJzb3IgOiBtX29wZW5DdXJzb3JzKQorICAgICAg
ICBjdXJzb3ItPmNsb3NlKCk7CisgICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
bihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorewor
ICAgIHNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG9iamVjdFN0b3JlTWV0YWRhdGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpj
cmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQoreworICAgIHNjaGVk
dWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0
b3JlTWV0YWRhdGEpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhKQoreworICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlZl
cnNpb25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hh
bmdlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52
ZXJzaW9uKSwgbWV0YWRhdGEudmVyc2lvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCit7CisgICAgc2NoZWR1bGVU
YXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhNZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLmlkKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKK3sKKyAgICBzY2hlZHVs
ZVRhc2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1l
dGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFz
ayhHZXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1v
ZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5
cykKK3sKKyAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywg
aW5kZXhLZXlzKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKK3sKKyAgICBzY2hlZHVs
ZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0aXZlVGFzaywgU2V0SW5kZXhlc1JlYWR5
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXhDb3VudCkpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNv
clR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2so
T3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ291bnRPcGVyYXRpb24o
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorewor
ICAgIHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2soRGVsZXRlUmFuZ2VPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNsZWFyT2JqZWN0U3Rv
cmVPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFzayhDbGVhck9iamVjdFN0b3JlT3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Cit9CisKK307CisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I5ZWYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRfaAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRfaAor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiSURCT3Bl
cmF0aW9uLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kOworY2xhc3MgSURCRGF0YWJh
c2VDYWxsYmFja3M7CisKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZCA6IHB1YmxpYyBSZWZD
b3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kKiwgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUpOworICAgIH5JREJUcmFuc2FjdGlvbkJhY2tlbmQoKTsKKworICAgIHZvaWQgY29tbWl0KCk7
CisgICAgdm9pZCBhYm9ydCgpOworICAgIHZvaWQgYWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik7CisKKyAgICB2b2lkIHJ1bigpOworICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlIG1vZGUoKSBjb25zdCAgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgY29uc3QgSGFzaFNldDxp
bnQ2NF90PiYgc2NvcGUoKSBjb25zdCAgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQorCisg
ICAgdm9pZCBzY2hlZHVsZVRhc2soUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NS
ZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2No
ZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNr
KTsgfQorICAgIHZvaWQgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUs
IFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiwgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJh
dGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7CisKKyAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNv
cihJREJDdXJzb3JCYWNrZW5kKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJD
dXJzb3JCYWNrZW5kKik7CisKKyAgICB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVu
ZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQorICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZl
RXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzID49IDApOyB9CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFi
YXNlKCkgY29uc3QgIHsgcmV0dXJuICptX2RhdGFiYXNlOyB9CisKKyAgICB2b2lkIHNjaGVkdWxl
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYp
OworICAgIHZvaWQgc2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJik7CisgICAgdm9pZCBzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFk
YXRhJik7CisgICAgdm9pZCBzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOworICAgIHZvaWQgc2NoZWR1bGVE
ZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmKTsKKyAgICB2b2lkIHNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKKyAgICB2b2lkIHNjaGVkdWxlUHV0T3BlcmF0aW9uKGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+Jik7CisgICAgdm9pZCBzY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
bihzaXplX3QgaW5kZXhDb3VudCk7CisgICAgdm9pZCBzY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRp
b24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JU
eXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pOworICAgIHZvaWQgc2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBzY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRp
b24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisg
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworcHJpdmF0ZToKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiwgaW50NjRfdCBpZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CisKKyAgICBlbnVtIFN0
YXRlIHsKKyAgICAgICAgVW5vcGVuZWQsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90
IHlldCBjcmVhdGVkLgorICAgICAgICBVbnVzZWQsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rp
b24gY3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KKyAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBF
bnF1ZXVlZCB0YXNrcywgYnV0IGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFy
dGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0
ZWQgYnV0IG5vdCB5ZXQgZmluaXNoZWQuCisgICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJv
cnRlZCBvciBjb21taXR0ZWQuCisgICAgfTsKKworICAgIHZvaWQgc3RhcnQoKTsKKworICAgIGJv
b2wgaXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0OworICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkg
Y29uc3Q7CisKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CisgICAgdm9pZCBjbG9zZU9wZW5D
dXJzb3JzKCk7CisKKyAgICBjb25zdCBIYXNoU2V0PGludDY0X3Q+IG1fb2JqZWN0U3RvcmVJZHM7
CisgICAgY29uc3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOworCisgICAgU3Rh
dGUgbV9zdGF0ZTsKKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmQ+IG1fZGF0YWJhc2U7CisKKyAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxJREJPcGVyYXRpb24+
PiBUYXNrUXVldWU7CisgICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBt
X3ByZWVtcHRpdmVUYXNrUXVldWU7CisgICAgRGVxdWU8UmVmUHRyPElEQlN5bmNocm9ub3VzT3Bl
cmF0aW9uPj4gbV9hYm9ydFRhc2tRdWV1ZTsKKworICAgIC8vIEZJWE1FOiBkZWxldGUgdGhlIHRp
bWVyIG9uY2Ugd2UgaGF2ZSB0aHJlYWRzIGluc3RlYWQuCisgICAgVGltZXIgbV90YXNrVGltZXI7
CisgICAgaW50IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHM7CisKKyAgICBIYXNoU2V0PElEQkN1
cnNvckJhY2tlbmQqPiBtX29wZW5DdXJzb3JzOworCisgICAgaW50NjRfdCBtX2lkOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ0ZjY4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9u
cy5jcHAKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIgorCisjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgi
CisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVy
LmgiCisjaW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2RlZmluZSBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSyBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IG9wZXJhdGlvbkNh
bGxiYWNrID0gXAorICAgIFtvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikgeyBcCisgICAgICAgIGlmIChlcnJvcikgXAorICAg
ICAgICAgICAgb3BlcmF0aW9uLT5tX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7IFwKKyAgICAg
ICAgY29tcGxldGlvbkNhbGxiYWNrKCk7IFwKKyAgICB9OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkNy
ZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJP
Ul9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVj
dGlvbigpLmNyZWF0ZU9iamVjdFN0b3JlKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9u
Q2FsbGJhY2spOworfQorCit2b2lkIENyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPENyZWF0ZUluZGV4T3Bl
cmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FM
TEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24o
KS5jcmVhdGVJbmRleCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsK
K30KKwordm9pZCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJRCwgbV9pbmRleElE
KTsKK30KKwordm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiRGVs
ZXRlSW5kZXhPcGVyYXRpb24iKTsKKworICAgIFJlZlB0cjxEZWxldGVJbmRleE9wZXJhdGlvbj4g
b3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwor
CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRl
SW5kZXgoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Cit9CisKK3Zv
aWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIik7CisgICAgbV90cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS5hZGRJbmRleChtX29iamVjdFN0b3JlSUQsIG1faW5kZXhNZXRhZGF0YSwgSURC
SW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKK30KKwordm9pZCBHZXRPcGVyYXRpb246OnBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIkdldE9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPEdldE9wZXJhdGlvbj4g
b3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwor
CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0KCpt
X3RyYW5zYWN0aW9uLCAqdGhpcywgW3RoaXMsIG9wZXJhdGlvbiwgb3BlcmF0aW9uQ2FsbGJhY2td
KGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IHBycEVycm9yKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBy
cEVycm9yOworCisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKGVycm9yKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC52
YWx1ZUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQua2V5RGF0YS5pc051bGwp
CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
cmVzdWx0LmtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmtleURhdGEuaXNOdWxsKQorICAgICAgICAg
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHJlc3VsdC52YWx1ZUJ1ZmZlciwgcmVz
dWx0LmtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKSwgcmVzdWx0LmtleVBhdGgpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhyZXN1bHQudmFsdWVCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgb3BlcmF0aW9uQ2FsbGJhY2soZXJyb3IucmVsZWFzZSgpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlB1dE9wZXJhdGlvbiIpOwor
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGU6OlJlYWRPbmx5KTsKKyAgICBBU1NFUlQobV9pbmRleElEcy5zaXplKCkgPT0gbV9pbmRl
eEtleXMuc2l6ZSgpKTsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLnB1dCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIFt0aGlzLCBjb21wbGV0aW9uQ2Fs
bGJhY2tdKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gcHJwRXJyb3IpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0g
cHJwRXJyb3I7CisgICAgICAgIGlmIChrZXkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZXJyb3Ip
OworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKGVycm9yKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tz
LT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2so
KTsKKyAgICB9KTsKK30KKwordm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2luZGV4Q291bnQ7ICsraSkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGlk
Q29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoY29tcGxl
dGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJPcGVuQ3Vyc29yT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8T3BlbkN1cnNvck9w
ZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3Bl
cmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKGludDY0X3QgY3Vyc29ySUQsIFBhc3NSZWZQdHI8
SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25F
cnJvcihlcnJvcik7CisgICAgICAgIH0gZWxzZSBpZiAoIWtleSkgeworICAgICAgICAgICAgLy8g
SWYgdGhlcmUncyBubyBlcnJvciBidXQgYWxzbyBubyBrZXksIHRoZW4gdGhlIGN1cnNvciBoYWQg
bm8gcmVjb3Jkcy4KKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nh
c3Q8U2hhcmVkQnVmZmVyKj4obnVsbHB0cikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmQ6OmNy
ZWF0ZShjdXJzb3JJRCwgbV9jdXJzb3JUeXBlLCBtX3Rhc2tUeXBlLCAqbV90cmFuc2FjdGlvbiwg
bV9vYmplY3RTdG9yZUlEKTsKKyAgICAgICAgICAgIGN1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShr
ZXkuZ2V0KCksIHByaW1hcnlLZXkuZ2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVhc2UoKSk7CisgICAgICAgIH0K
KworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9OworCisgICAgbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkub3BlbkN1cnNvcigqbV90cmFuc2Fj
dGlvbiwgKnRoaXMsIGNhbGxiYWNrKTsKK30KKwordm9pZCBDb3VudE9wZXJhdGlvbjo6cGVyZm9y
bShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhT
dG9yYWdlQVBJLCAiQ291bnRPcGVyYXRpb24iKTsKKworICAgIFJlZlB0cjxDb3VudE9wZXJhdGlv
bj4gb3BlcmF0aW9uKHRoaXMpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9u
LCBjb21wbGV0aW9uQ2FsbGJhY2tdKGludDY0X3QgY291bnQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pIHsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBMZXZlbERCIHBvcnQgbmV2ZXIgaGFk
IGFuIGVycm9yIGNvbmRpdGlvbiBmb3IgdGhlIGNvdW50IG9wZXJhdGlvbi4KKyAgICAgICAgLy8g
V2UgcHJvYmFibHkgbmVlZCB0byBzdXBwb3J0IGFuIGVycm9yIGZvciB0aGUgY291bnQgb3BlcmF0
aW9uLCBicmVha2luZyB0aGUgTGV2ZWxEQiBwb3J0LgorICAgICAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKGNvdW50KTsKKworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9Owor
CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY291bnQo
Km1fdHJhbnNhY3Rpb24sICp0aGlzLCBjYWxsYmFjayk7Cit9CisKK3ZvaWQgRGVsZXRlUmFuZ2VP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7CisKKyAg
ICBSZWZQdHI8RGVsZXRlUmFuZ2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBhdXRv
IGNhbGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAg
ICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworCisgICAgICAgIGNvbXBsZXRpb25DYWxs
YmFjaygpOworICAgIH07CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNv
bm5lY3Rpb24oKS5kZWxldGVSYW5nZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIGNhbGxiYWNrKTsK
K30KKwordm9pZCBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJD
bGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8Q2xlYXJPYmplY3RTdG9y
ZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworCisgICAgYXV0byBjbGVhckNhbGxiYWNrID0g
W3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IHBycEVycm9yKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBl
cnJvciA9IHBycEVycm9yOworCisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJv
cnQoZXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKCk7CisKKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7CisgICAg
fTsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNs
ZWFyT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBjbGVhckNhbGxiYWNrKTsKK30K
Kwordm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKKworICAgIFJlZlB0cjxEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9S
X0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVsZXRlT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25D
YWxsYmFjayk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3Bl
cmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2sp
Cit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIik7CisKKyAg
ICB1aW50NjRfdCBvbGRWZXJzaW9uID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5tZXRhZGF0
YSgpLnZlcnNpb247CisgICAgaWYgKG9sZFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6
Tm9JbnRWZXJzaW9uKQorICAgICAgICBvbGRWZXJzaW9uID0gMDsKKworICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmVyc2lvbikgPiBvbGRWZXJzaW9u
KTsKKworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KT4gb3BlcmF0aW9uQ2FsbGJhY2sgPSBbb2xkVmVyc2lvbiwgb3BlcmF0aW9uLCB0aGlzLCBjb21w
bGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsK
KyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7CisgICAg
ICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3Ip
OworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmhhc1Bl
bmRpbmdTZWNvbmRIYWxmT3BlbigpKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2V0Q3VycmVudFZlcnNpb24obV92ZXJzaW9uKTsKKyAgICAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKHN0ZDo6bWFrZV91bmlx
dWU8SURCUGVuZGluZ09wZW5DYWxsPigqbV9jYWxsYmFja3MsICptX2RhdGFiYXNlQ2FsbGJhY2tz
LCBtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX3ZlcnNpb24pKTsKKyAgICAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgJm1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkubWV0YWRhdGEoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7CisgICAgfTsKKworICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNoYW5nZURhdGFiYXNlVmVyc2lvbigqbV90
cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQ
SSwgIkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnJlbW92ZU9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVJRCk7Cit9CisKK3Zv
aWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIik7CisgICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5hZGRPYmplY3RTdG9yZShtX29iamVjdFN0b3JlTWV0YWRh
dGEsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQorewor
ICAgIExPRyhTdG9yYWdlQVBJLCAiVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIik7CisgICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXRDdXJyZW50VmVyc2lvbihtX3ByZXZpb3VzSW50
VmVyc2lvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRP
cGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxMDk3OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaAorI2Rl
ZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zX2gKKworI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCU2VydmVyQ29ubmVjdGlvbjsKKworY2xh
c3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
c3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29iamVj
dFN0b3JlTWV0YWRhdGE7IH0KKworcHJpdmF0ZToKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0
b3JlTWV0YWRhdGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOworfTsKKworY2xhc3MgRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24s
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
bih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVy
cmlkZSBmaW5hbDsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CisgICAgY29uc3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmVNZXRhZGF0YTsgfQorCitwcml2YXRlOgorICAgIERlbGV0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0
U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZDo6
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxi
YWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZlcnNpb25DaGFuZ2VP
cGVyYXRpb24odHJhbnNhY3Rpb24sIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQo
KTsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQor
ICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBWZXJzaW9u
Q2hhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0
X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKKyAg
ICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwgbV9kYXRhYmFzZUNhbGxi
YWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsK
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCitjbGFzcyBDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVh
dGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFsOworcHJpdmF0ZToKKyAgICBD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5z
YWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworfTsKKworY2xhc3Mg
RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmUpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBvdmVycmlk
ZSBmaW5hbDsKK3ByaXZhdGU6CisgICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0
YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IG1fdHJhbnNhY3Rpb247CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3Jl
TWV0YWRhdGE7Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9u
LCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgcHJldmlv
dXNWZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oKSBvdmVycmlkZSBmaW5hbDsKK3ByaXZhdGU6CisgICAgVmVyc2lvbkNoYW5nZUFi
b3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0
cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKKyAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fcHJldmlvdXNWZXJz
aW9uKHByZXZpb3VzVmVyc2lvbikKKyAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihwcmV2
aW91c0ludFZlcnNpb24pCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9uOwor
ICAgIGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247Cit9OworCitjbGFzcyBDcmVhdGVJbmRl
eE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlSW5kZXhP
cGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nl
c3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KKyAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpZGJJbmRleE1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleE1ldGFkYXRh
OyB9CisKK3ByaXZhdGU6CisgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAg
ICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4
TWV0YWRhdGE7Cit9OworCitjbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGlj
IElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQlN5
bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKCkgb3ZlcnJpZGUgZmluYWw7Citwcml2YXRlOgorICAgIENyZWF0ZUluZGV4QWJv
cnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAg
ICAgICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKK307CisK
K2NsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0
X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAg
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4TWV0YWRhdGE7IH0KKworcHJpdmF0ZToKKyAgICBEZWxldGVJbmRleE9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0
U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlv
bjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisKK2NsYXNzIERlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkg
b3ZlcnJpZGUgZmluYWw7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0
b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgewor
ICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247
CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCitjbGFzcyBHZXRPcGVyYXRpb24gOiBwdWJs
aWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4g
Y3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29y
VHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2V0T3BlcmF0aW9uKHRyYW5zYWN0aW9u
LCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUs
IGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0
X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAg
IGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRDsgfQorICAgIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JUeXBl
OyB9CisgICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5n
ZS5nZXQoKTsgfQorICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0
b0luY3JlbWVudDsgfQorICAgIElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UGF0aDsgfQorCitwcml2YXRlOgorICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1faW5kZXhJRChpbmRleElkKQorICAgICAgICAsIG1fa2V5UGF0aChtZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCisgICAgICAgICwgbV9hdXRv
SW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0b0lu
Y3JlbWVudCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY3Vy
c29yVHlwZShjdXJzb3JUeXBlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOworICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmpl
Y3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9v
YmplY3RTdG9yZUlEOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOworICAgIGNvbnN0IElE
QktleVBhdGggbV9rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAg
IGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJbmRleGVk
REI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElEQk9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4
S2V5cykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIElEQkRhdGFiYXNl
QmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wdXRNb2RlOyB9Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUoKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdFN0b3JlOyB9CisgICAgSURCS2V5KiBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleS5nZXQoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4SURzOyB9CisgICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhLZXlzOyB9CisgICAgU2hhcmVkQnVmZmVy
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAg
ICBQdXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwg
bV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAg
ICAgICAsIG1fa2V5KGtleSkKKyAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKKyAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwgbV9pbmRleElEcyhpbmRleElkcykK
KyAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCisgICAgeworICAgIH0KKworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1fdmFsdWU7CisgICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7CisgICAg
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIG1fcHV0TW9kZTsKKyAgICBjb25zdCBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBjb25zdCBWZWN0b3I8aW50NjRf
dD4gbV9pbmRleElEczsKKyAgICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiBtX2luZGV4S2V5czsK
K307CisKK2NsYXNzIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRp
b24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24odHJh
bnNhY3Rpb24sIGluZGV4Q291bnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Citw
cml2YXRlOgorICAgIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkKKyAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1faW5kZXhDb3VudChpbmRleENvdW50KQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uOworICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7Cit9OworCitjbGFzcyBPcGVuQ3Vy
c29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRl
IGZpbmFsOworCisgICAgaW50NjRfdCB0cmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbi0+aWQoKTsgfQorICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhJRDsgfQorICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgSW5kZXhlZERCOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KKyAgICBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
YXNrVHlwZTsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UmFuZ2UuZ2V0KCk7IH0KKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorCitwcml2YXRlOgorICAg
IE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlE
KG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCisgICAgICAgICwg
bV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisg
ICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV90YXNrVHlwZSh0
YXNrVHlwZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0K
KworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAg
Y29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4
SUQ7CisgICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBj
b25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBjb25zdCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IElEQkRhdGFiYXNl
QmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDb3VudE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBm
aW5hbDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmVJRDsgfQorICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXhJRDsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
UmFuZ2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBDb3VudE9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlv
bikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBt
X2luZGV4SUQoaW5kZXhJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKKyAgICBjb25zdCBS
ZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1
YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9u
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBrZXlS
YW5nZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOworCisgICAg
aW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9
CisgICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5nZS5n
ZXQoKTsgfQorCitwcml2YXRlOgorICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29i
amVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdl
KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1f
a2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9
OworCitjbGFzcyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZUlkLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbi5nZXQoKTsgfQorICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorCitwcml2YXRlOgorICAgIENsZWFyT2JqZWN0U3Rv
cmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlE
KG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9u
OworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAgIGNvbnN0IFJlZlB0cjxJ
REJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjZW5kaWYgLy8gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9uc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2OWUwYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6SURCVHJhbnNhY3Rp
b25Db29yZGluYXRvcigpCit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKK3sKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b24pKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRTdGFydFRyYW5zYWN0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBtX3F1ZXVlZFRyYW5zYWN0
aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQobV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKworICAgIGlmIChtX3F1ZXVlZFRy
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0
YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKyAgICAgICAgbV9xdWV1
ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2UgaWYgKG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAgIG1fc3RhcnRl
ZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgbV90cmFuc2FjdGlvbnMu
cmVtb3ZlKHRyYW5zYWN0aW9uKTsKKworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7
Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBWZXJpZmllcyBpbnRlcm5hbCBjb25zaXN0aWVuY3kg
d2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCitib29sIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24pCit7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGlmIChtX3F1ZXVlZFRyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAg
ICAgICBBU1NFUlQoIWZvdW5kKTsKKyAgICAgICAgZm91bmQgPSB0cnVlOworICAgIH0KKyAgICBB
U1NFUlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKyAg
ICByZXR1cm4gZm91bmQ7Cit9CisjZW5kaWYKKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpCit7CisgICAgaWYgKG1fcXVldWVkVHJh
bnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwgKCptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVn
aW4oKSktPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5n
ZSk7CisKKyAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdpbigpOworICAgIHdoaWxlIChpdCAh
PSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uID0gKml0OworICAgICAgICArK2l0OworICAgICAgICBpZiAoY2Fu
UnVuVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKSB7CisgICAgICAgICAgICBtX3F1ZXVlZFRyYW5z
YWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworICAgICAgICAgICAgbV9zdGFydGVkVHJhbnNh
Y3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+cnVuKCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBBU1NFUlQobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsK
KworICAgIFVOVVNFRF9QQVJBTSh0cmFuc2FjdGlvbik7CisgICAgcmV0dXJuICFtX3N0YXJ0ZWRU
cmFuc2FjdGlvbnMuc2l6ZSgpOworfQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDU1NDM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ7CisKKy8vIFRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRo
ZSB3ZXJlIGNyZWF0ZWQuCitjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsKK3B1Ymxp
YzoKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CisgICAgdmlydHVhbCB+SURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcigpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRyYW5zYWN0aW9ucyBh
cyB0aGV5IHN0YXJ0IGFuZCBmaW5pc2guCisgICAgdm9pZCBkaWRDcmVhdGVUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7CisgICAgdm9pZCBkaWRGaW5pc2hUcmFuc2Fj
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBib29s
IGlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOworI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOworICAgIGJvb2wgY2FuUnVuVHJh
bnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7CisKKyAgICAvLyBUaGlzIGlzIGp1c3Qg
YW4gZWZmaWNpZW50IHdheSB0byBrZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4K
KyAgICBIYXNoTWFwPElEQlRyYW5zYWN0aW9uQmFja2VuZCosIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+ID4gbV90cmFuc2FjdGlvbnM7CisgICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZl
cmVudCBzdGF0ZXMgYXJlIGdyb3VwZWQgYmVsb3cuCisgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kKj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7CisgICAgSGFzaFNldDxJREJUcmFu
c2FjdGlvbkJhY2tlbmQqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2Vu
ZGlmIC8vIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU4OWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHAKQEAgLTAsMCAr
MSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5QW55
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmlu
Z0xpc3QuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiTGVnYWN5Q3Vyc29y
V2l0aFZhbHVlLmgiCisjaW5jbHVkZSAiTGVnYWN5RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMZWdh
Y3lGYWN0b3J5LmgiCisjaW5jbHVkZSAiTGVnYWN5SW5kZXguaCIKKyNpbmNsdWRlICJMZWdhY3lP
YmplY3RTdG9yZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGVnYWN5
QW55PiBMZWdhY3lBbnk6OmNyZWF0ZUludmFsaWQoKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTGVnYWN5QW55KFVuZGVmaW5lZFR5cGUpKTsKK30KKworUGFzc1JlZlB0cjxMZWdhY3lBbnk+
IExlZ2FjeUFueTo6Y3JlYXRlTnVsbCgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZWdh
Y3lBbnkoTnVsbFR5cGUpKTsKK30KKworUGFzc1JlZlB0cjxMZWdhY3lBbnk+IExlZ2FjeUFueTo6
Y3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBMZWdhY3lBbnkodmFsdWUpKTsKK30KKworTGVnYWN5QW55OjpMZWdhY3lBbnkoVHlwZSB0
eXBlKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKKyAgICBBU1NF
UlQodHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8IHR5cGUgPT0gTnVsbFR5cGUpOworfQorCitMZWdh
Y3lBbnk6On5MZWdhY3lBbnkoKQoreworfQorCitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IExl
Z2FjeUFueTo6ZG9tU3RyaW5nTGlzdCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBET01TdHJp
bmdMaXN0VHlwZSk7CisgICAgcmV0dXJuIG1fZG9tU3RyaW5nTGlzdDsKK30KKworUGFzc1JlZlB0
cjxJREJDdXJzb3I+IExlZ2FjeUFueTo6aWRiQ3Vyc29yKCkKK3sKKyAgICBBU1NFUlQobV90eXBl
ID09IElEQkN1cnNvclR5cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNvcjsKK30KKworUGFzc1Jl
ZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IExlZ2FjeUFueTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvcldpdGhWYWx1ZVR5cGUpOworICAgIHJl
dHVybiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKK30KKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4g
TGVnYWN5QW55OjppZGJEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJEYXRh
YmFzZVR5cGUpOworICAgIHJldHVybiBtX2lkYkRhdGFiYXNlOworfQorCitQYXNzUmVmUHRyPElE
QkZhY3Rvcnk+IExlZ2FjeUFueTo6aWRiRmFjdG9yeSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBJREJGYWN0b3J5VHlwZSk7CisgICAgcmV0dXJuIG1faWRiRmFjdG9yeTsKK30KKworUGFzc1Jl
ZlB0cjxJREJJbmRleD4gTGVnYWN5QW55OjppZGJJbmRleCgpCit7CisgICAgQVNTRVJUKG1fdHlw
ZSA9PSBJREJJbmRleFR5cGUpOworICAgIHJldHVybiBtX2lkYkluZGV4OworfQorCitQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBMZWdhY3lBbnk6OmlkYk9iamVjdFN0b3JlKCkKK3sKKyAgICBB
U1NFUlQobV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7CisgICAgcmV0dXJuIG1faWRiT2Jq
ZWN0U3RvcmU7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeUFueTo6aWRi
VHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCVHJhbnNhY3Rpb25UeXBl
KTsKKyAgICByZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKK30KKworY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIExlZ2FjeUFueTo6c2NyaXB0VmFsdWUoKQoreworICAgIEFTU0VSVChtX3R5
cGUgPT0gU2NyaXB0VmFsdWVUeXBlKTsKKyAgICByZXR1cm4gbV9zY3JpcHRWYWx1ZTsKK30KKwor
Y29uc3QgU3RyaW5nJiBMZWdhY3lBbnk6OnN0cmluZygpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9CisKK2ludDY0X3QgTGVnYWN5
QW55OjppbnRlZ2VyKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IEludGVnZXJUeXBlKTsKKyAg
ICByZXR1cm4gbV9pbnRlZ2VyOworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IHZhbHVlKQorICAgIDogbV90eXBlKERPTVN0cmluZ0xpc3RUeXBlKQor
ICAgICwgbV9kb21TdHJpbmdMaXN0KHZhbHVlKQorICAgICwgbV9pbnRlZ2VyKDApCit7Cit9CisK
K0xlZ2FjeUFueTo6TGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiB2
YWx1ZSkKKyAgICA6IG1fdHlwZShJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQorICAgICwgbV9pZGJD
dXJzb3JXaXRoVmFsdWUodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5
QW55OjpMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+IHZhbHVlKQorICAgIDogbV90
eXBlKElEQkN1cnNvclR5cGUpCisgICAgLCBtX2lkYkN1cnNvcih2YWx1ZSkKKyAgICAsIG1faW50
ZWdlcigwKQoreworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeURh
dGFiYXNlPiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJEYXRhYmFzZVR5cGUpCisgICAgLCBtX2lk
YkRhdGFiYXNlKHZhbHVlKQorICAgICwgbV9pbnRlZ2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6
TGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5RmFjdG9yeT4gdmFsdWUpCisgICAgOiBtX3R5cGUo
SURCRmFjdG9yeVR5cGUpCisgICAgLCBtX2lkYkZhY3RvcnkodmFsdWUpCisgICAgLCBtX2ludGVn
ZXIoMCkKK3sKK30KKworTGVnYWN5QW55OjpMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lJbmRl
eD4gdmFsdWUpCisgICAgOiBtX3R5cGUoSURCSW5kZXhUeXBlKQorICAgICwgbV9pZGJJbmRleCh2
YWx1ZSkKKyAgICAsIG1faW50ZWdlcigwKQoreworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQ
YXNzUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJUcmFu
c2FjdGlvblR5cGUpCisgICAgLCBtX2lkYlRyYW5zYWN0aW9uKHZhbHVlKQorICAgICwgbV9pbnRl
Z2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5T2Jq
ZWN0U3RvcmU+IHZhbHVlKQorICAgIDogbV90eXBlKElEQk9iamVjdFN0b3JlVHlwZSkKKyAgICAs
IG1faWRiT2JqZWN0U3RvcmUodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVn
YWN5QW55OjpMZWdhY3lBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQor
ICAgIDogbV90eXBlKFNjcmlwdFZhbHVlVHlwZSkKKyAgICAsIG1fc2NyaXB0VmFsdWUodmFsdWUp
CisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5QW55OjpMZWdhY3lBbnkoY29uc3Qg
SURCS2V5UGF0aCYgdmFsdWUpCisgICAgOiBtX3R5cGUoS2V5UGF0aFR5cGUpCisgICAgLCBtX2lk
YktleVBhdGgodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5QW55OjpM
ZWdhY3lBbnkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICA6IG1fdHlwZShTdHJpbmdUeXBlKQor
ICAgICwgbV9zdHJpbmcodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5
QW55OjpMZWdhY3lBbnkoaW50NjRfdCB2YWx1ZSkKKyAgICA6IG1fdHlwZShJbnRlZ2VyVHlwZSkK
KyAgICAsIG1faW50ZWdlcih2YWx1ZSkKK3sKK30KKworTGVnYWN5Q3Vyc29yKiBMZWdhY3lBbnk6
OmxlZ2FjeUN1cnNvcigpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JUeXBlKTsK
KyAgICByZXR1cm4gbV9pZGJDdXJzb3IuZ2V0KCk7Cit9CisKK0xlZ2FjeUN1cnNvcldpdGhWYWx1
ZSogTGVnYWN5QW55OjpsZWdhY3lDdXJzb3JXaXRoVmFsdWUoKQoreworICAgIEFTU0VSVChtX3R5
cGUgPT0gSURCQ3Vyc29yV2l0aFZhbHVlVHlwZSk7CisgICAgcmV0dXJuIG1faWRiQ3Vyc29yV2l0
aFZhbHVlLmdldCgpOworfQorCitMZWdhY3lEYXRhYmFzZSogTGVnYWN5QW55OjpsZWdhY3lEYXRh
YmFzZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJEYXRhYmFzZVR5cGUpOworICAgIHJl
dHVybiBtX2lkYkRhdGFiYXNlLmdldCgpOworfQorCitMZWdhY3lGYWN0b3J5KiBMZWdhY3lBbnk6
OmxlZ2FjeUZhY3RvcnkoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCRmFjdG9yeVR5cGUp
OworICAgIHJldHVybiBtX2lkYkZhY3RvcnkuZ2V0KCk7Cit9CisKK0xlZ2FjeUluZGV4KiBMZWdh
Y3lBbnk6OmxlZ2FjeUluZGV4KCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkluZGV4VHlw
ZSk7CisgICAgcmV0dXJuIG1faWRiSW5kZXguZ2V0KCk7Cit9CisKK0xlZ2FjeU9iamVjdFN0b3Jl
KiBMZWdhY3lBbnk6OmxlZ2FjeU9iamVjdFN0b3JlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09
IElEQk9iamVjdFN0b3JlVHlwZSk7CisgICAgcmV0dXJuIG1faWRiT2JqZWN0U3RvcmUuZ2V0KCk7
Cit9CisKK0xlZ2FjeVRyYW5zYWN0aW9uKiBMZWdhY3lBbnk6OmxlZ2FjeVRyYW5zYWN0aW9uKCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQlRyYW5zYWN0aW9uVHlwZSk7CisgICAgcmV0dXJu
IG1faWRiVHJhbnNhY3Rpb24uZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2YWIwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lBbnkuaApAQCAtMCwwICsxLDE0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5QW55X2gKKyNkZWZpbmUgTGVnYWN5QW55X2gKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5j
bHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1
ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgSURCQ3Vyc29yOworY2xhc3MgSURCQ3Vyc29yV2l0
aFZhbHVlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJGYWN0b3J5OworY2xhc3MgSURC
SW5kZXg7CitjbGFzcyBJREJLZXlQYXRoOworY2xhc3MgSURCT2JqZWN0U3RvcmU7CitjbGFzcyBJ
REJUcmFuc2FjdGlvbjsKKworY2xhc3MgTGVnYWN5Q3Vyc29yOworY2xhc3MgTGVnYWN5Q3Vyc29y
V2l0aFZhbHVlOworY2xhc3MgTGVnYWN5RGF0YWJhc2U7CitjbGFzcyBMZWdhY3lGYWN0b3J5Owor
Y2xhc3MgTGVnYWN5SW5kZXg7CitjbGFzcyBMZWdhY3lPYmplY3RTdG9yZTsKK2NsYXNzIExlZ2Fj
eVRyYW5zYWN0aW9uOworCitjbGFzcyBMZWdhY3lBbnkgOiBwdWJsaWMgSURCQW55IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZUludmFsaWQoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZU51bGwoKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeUFueT4gY3Jl
YXRlKFQqIGlkYk9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGVn
YWN5QW55KGlkYk9iamVjdCkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeUFueT4gY3JlYXRlKGNvbnN0IFQmIGlkYk9iamVjdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGVnYWN5QW55KGlkYk9iamVjdCkp
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExlZ2FjeUFueT4gY3JlYXRlKFBhc3NSZWZQdHI8VD4gaWRiT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZWdhY3lBbnkoaWRiT2JqZWN0KSk7CisgICAgfQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeUFueT4gY3JlYXRlKGludDY0X3QgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExlZ2FjeUFueSh2YWx1ZSkpOworICAgIH0K
KyAgICB+TGVnYWN5QW55KCk7CisKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJy
aWRlIGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIC8vIFVzZSB0eXBlKCkgdG8gZmlndXJl
IG91dCB3aGljaCBvbmUgb2YgdGhlc2UgeW91J3JlIGFsbG93ZWQgdG8gY2FsbC4KKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCgpIG92ZXJyaWRlIGZp
bmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNvcigpIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlk
YkN1cnNvcldpdGhWYWx1ZSgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpIG92ZXJyaWRlIGZpbmFsOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKSBvdmVycmlkZSBmaW5hbDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCkg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBp
ZGJUcmFuc2FjdGlvbigpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmly
dHVhbCBpbnQ2NF90IGludGVnZXIoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKCkgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9pZGJLZXlQYXRoOyB9
OworCisgICAgTGVnYWN5Q3Vyc29yKiBsZWdhY3lDdXJzb3IoKTsKKyAgICBMZWdhY3lDdXJzb3JX
aXRoVmFsdWUqIGxlZ2FjeUN1cnNvcldpdGhWYWx1ZSgpOworICAgIExlZ2FjeURhdGFiYXNlKiBs
ZWdhY3lEYXRhYmFzZSgpOworICAgIExlZ2FjeUZhY3RvcnkqIGxlZ2FjeUZhY3RvcnkoKTsKKyAg
ICBMZWdhY3lJbmRleCogbGVnYWN5SW5kZXgoKTsKKyAgICBMZWdhY3lPYmplY3RTdG9yZSogbGVn
YWN5T2JqZWN0U3RvcmUoKTsKKyAgICBMZWdhY3lUcmFuc2FjdGlvbiogbGVnYWN5VHJhbnNhY3Rp
b24oKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoVHlwZSk7CisgICAgZXhw
bGljaXQgTGVnYWN5QW55KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOworICAgIGV4cGxpY2l0
IExlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeUN1cnNvcj4pOworICAgIGV4cGxpY2l0IExlZ2Fj
eUFueShQYXNzUmVmUHRyPExlZ2FjeUN1cnNvcldpdGhWYWx1ZT4pOworICAgIGV4cGxpY2l0IExl
Z2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeURhdGFiYXNlPik7CisgICAgZXhwbGljaXQgTGVnYWN5
QW55KFBhc3NSZWZQdHI8TGVnYWN5RmFjdG9yeT4pOworICAgIGV4cGxpY2l0IExlZ2FjeUFueShQ
YXNzUmVmUHRyPExlZ2FjeUluZGV4Pik7CisgICAgZXhwbGljaXQgTGVnYWN5QW55KFBhc3NSZWZQ
dHI8TGVnYWN5T2JqZWN0U3RvcmU+KTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoUGFzc1JlZlB0
cjxMZWdhY3lUcmFuc2FjdGlvbj4pOworICAgIGV4cGxpY2l0IExlZ2FjeUFueShjb25zdCBJREJL
ZXlQYXRoJik7CisgICAgZXhwbGljaXQgTGVnYWN5QW55KGNvbnN0IFN0cmluZyYpOworICAgIGV4
cGxpY2l0IExlZ2FjeUFueShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgIGV4
cGxpY2l0IExlZ2FjeUFueShpbnQ2NF90KTsKKworICAgIGNvbnN0IFR5cGUgbV90eXBlOworCisg
ICAgLy8gT25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaG91bGQgZXZlciBiZSBpbiB1c2UgYXQg
YW55IGdpdmVuIHRpbWUuCisgICAgY29uc3QgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fZG9tU3Ry
aW5nTGlzdDsKKyAgICBjb25zdCBSZWZQdHI8TGVnYWN5Q3Vyc29yPiBtX2lkYkN1cnNvcjsKKyAg
ICBjb25zdCBSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBtX2lkYkN1cnNvcldpdGhWYWx1
ZTsKKyAgICBjb25zdCBSZWZQdHI8TGVnYWN5RGF0YWJhc2U+IG1faWRiRGF0YWJhc2U7CisgICAg
Y29uc3QgUmVmUHRyPExlZ2FjeUZhY3Rvcnk+IG1faWRiRmFjdG9yeTsKKyAgICBjb25zdCBSZWZQ
dHI8TGVnYWN5SW5kZXg+IG1faWRiSW5kZXg7CisgICAgY29uc3QgUmVmUHRyPExlZ2FjeU9iamVj
dFN0b3JlPiBtX2lkYk9iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxMZWdhY3lUcmFuc2Fj
dGlvbj4gbV9pZGJUcmFuc2FjdGlvbjsKKyAgICBjb25zdCBJREJLZXlQYXRoIG1faWRiS2V5UGF0
aDsKKyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX3NjcmlwdFZhbHVlOworICAg
IGNvbnN0IFN0cmluZyBtX3N0cmluZzsKKyAgICBjb25zdCBpbnQ2NF90IG1faW50ZWdlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCisjZW5kaWYgLy8gTGVnYWN5QW55X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlOTU1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwCkBA
IC0wLDAgKzEsMjc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxl
Z2FjeUN1cnNvci5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRl
ICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
SURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgorI2luY2x1ZGUg
IklEQktleS5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlZjxMZWdhY3lDdXJzb3I+IExlZ2FjeUN1cnNvcjo6Y3JlYXRlKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b24gZGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiByZXF1ZXN0LCBMZWdhY3lBbnkqIHNvdXJjZSwg
TGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IExlZ2FjeUN1cnNvcihiYWNrZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJh
bnNhY3Rpb24pKTsKK30KKworTGVnYWN5Q3Vyc29yOjpMZWdhY3lDdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24sIExlZ2FjeVJlcXVlc3QqIHJlcXVlc3QsIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgOiBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAs
IG1fcmVxdWVzdChyZXF1ZXN0KQorICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICwg
bV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAs
IG1fdHJhbnNhY3Rpb25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKKyAgICAsIG1fZ290VmFs
dWUoZmFsc2UpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgQVNTRVJUKG1fcmVxdWVz
dCk7CisgICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9y
ZVR5cGUgfHwgbV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQkluZGV4VHlwZSk7CisgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24pOworfQorCitMZWdhY3lDdXJzb3I6On5MZWdhY3lDdXJzb3Io
KQoreworfQorCitjb25zdCBTdHJpbmcmIExlZ2FjeUN1cnNvcjo6ZGlyZWN0aW9uKCkgY29uc3QK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6ZGlyZWN0aW9uIik7CisgICAg
cmV0dXJuIGRpcmVjdGlvblRvU3RyaW5nKG1fZGlyZWN0aW9uKTsKK30KKworY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIExlZ2FjeUN1cnNvcjo6a2V5KCkgY29uc3QKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6a2V5Iik7CisgICAgcmV0dXJuIG1fY3VycmVudEtl
eVZhbHVlOworfQorCitjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgTGVnYWN5Q3Vyc29y
OjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNv
cjo6cHJpbWFyeUtleSIpOworICAgIHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5VmFsdWU7Cit9
CisKK2NvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBMZWdhY3lDdXJzb3I6OnZhbHVlKCkg
Y29uc3QKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6dmFsdWUiKTsKKyAg
ICByZXR1cm4gbV9jdXJyZW50VmFsdWU7Cit9CisKK0lEQkFueSogTGVnYWN5Q3Vyc29yOjpzb3Vy
Y2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKK30KKworUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBMZWdhY3lDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6OnVwZGF0ZSIpOworCisgICAgaWYgKCFt
X2dvdFZhbHVlIHx8IGlzS2V5Q3Vyc29yKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKKyAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
ID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aDsKKyAgICBjb25zdCBib29sIHVzZXNJ
bkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxsKCk7CisgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7
CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKG1fcmVxdWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwgdmFs
dWUsIGtleVBhdGgpOworICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlz
RXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5wdXQoSURCRGF0YWJhc2VC
YWNrZW5kOjpDdXJzb3JVcGRhdGUsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFs
dWUsIG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKK30KKwordm9pZCBMZWdhY3lDdXJzb3I6OmFk
dmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMg
PSAwOworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5Q3Vyc29yOjphZHZhbmNlIik7CisgICAg
aWYgKCFtX2dvdFZhbHVlKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghY291bnQpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3JlcXVlc3QtPnNldFBlbmRpbmdDdXJzb3IodGhpcyk7CisgICAg
bV9nb3RWYWx1ZSA9IGZhbHNlOworICAgIG1fYmFja2VuZC0+YWR2YW5jZShjb3VudCwgbV9yZXF1
ZXN0LCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjpjb250
aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
RE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKKyAg
ICBjb250aW51ZUZ1bmN0aW9uKGtleS5yZWxlYXNlKCksIGVjKTsKK30KKwordm9pZCBMZWdhY3lD
dXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5Q3Vy
c29yOjpjb250aW51ZSIpOworICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fZ290VmFsdWUpIHsKKyAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5KSB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRL
ZXkpOworICAgICAgICBpZiAobV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b246Ok5leHQgfHwgbV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5l
eHROb0R1cGxpY2F0ZSkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRLZXktPmlzTGVzc1Ro
YW4oa2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWtleS0+aXNMZXNzVGhhbihtX2N1cnJl
bnRLZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6RGF0YUVycm9yOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRl
eHQgZnJvbSB3aGVuIGNvbnRpbnVlIHdhcyBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFj
aworICAgIC8vICAgICAgICB3aWxsIGJlIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJz
b3Igd2FzIGNhbGxlZCBvbi4gSXMgdGhpcyByaWdodD8KKyAgICBtX3JlcXVlc3QtPnNldFBlbmRp
bmdDdXJzb3IodGhpcyk7CisgICAgbV9nb3RWYWx1ZSA9IGZhbHNlOworICAgIG1fYmFja2VuZC0+
Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOworICAgIEFTU0VSVCghZWMpOwor
fQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgZWMgPSAwOworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5Q3Vyc29yOjpkZWxldGUiKTsK
KyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1
ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRo
aXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9u
KHJlcXVlc3QsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjpwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFj
aygpCit7CisgICAgbV9iYWNrZW5kLT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOworfQor
Cit2b2lkIExlZ2FjeUN1cnNvcjo6Y2xvc2UoKQoreworICAgIG1fdHJhbnNhY3Rpb25Ob3RpZmll
ci5jdXJzb3JGaW5pc2hlZCgpOworICAgIGlmIChtX3JlcXVlc3QpIHsKKyAgICAgICAgbV9yZXF1
ZXN0LT5maW5pc2hDdXJzb3IoKTsKKyAgICAgICAgbV9yZXF1ZXN0ID0gbnVsbHB0cjsKKyAgICB9
Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjpzZXRWYWx1ZVJlYWR5KERPTVJlcXVlc3RTdGF0ZSog
c3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUpCit7CisgICAgbV9jdXJyZW50S2V5
ID0ga2V5OworICAgIG1fY3VycmVudEtleVZhbHVlID0gaWRiS2V5VG9TY3JpcHRWYWx1ZShzdGF0
ZSwgbV9jdXJyZW50S2V5KTsKKworICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBwcmltYXJ5S2V5
OworICAgIG1fY3VycmVudFByaW1hcnlLZXlWYWx1ZSA9IGlkYktleVRvU2NyaXB0VmFsdWUoc3Rh
dGUsIG1fY3VycmVudFByaW1hcnlLZXkpOworCisgICAgaWYgKCFpc0tleUN1cnNvcigpKSB7Cisg
ICAgICAgIFJlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVP
YmplY3RTdG9yZSgpOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFk
YXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7CisgICAgICAgIGlmIChtZXRhZGF0YS5hdXRv
SW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7CisjaWZuZGVmIE5ERUJV
RworICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlG
cm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKG1fcmVxdWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMo
KSwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgQVNTRVJUKCFleHBlY3Rl
ZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSk7
CisjZW5kaWYKKyAgICAgICAgICAgIGJvb2wgaW5qZWN0ZWQgPSBpbmplY3RJREJLZXlJbnRvU2Ny
aXB0VmFsdWUobV9yZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKSwgbV9jdXJyZW50UHJpbWFyeUtleSwg
dmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlz
IG5vIHdheSB0byByZXBvcnQgZXJyb3JzIGhlcmUuIE1vdmUgdGhpcyBpbnRvIG9uU3VjY2Vzc1dp
dGhDb250aW51YXRpb24gc28gdGhhdCB3ZSBjYW4gYWJvcnQgdGhlIHRyYW5zYWN0aW9uIHRoZXJl
LiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3OAorICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChpbmplY3RlZCwgaW5qZWN0ZWQpOworICAgICAgICB9Cisg
ICAgfQorICAgIG1fY3VycmVudFZhbHVlID0gdmFsdWU7CisKKyAgICBtX2dvdFZhbHVlID0gdHJ1
ZTsKK30KKworUGFzc1JlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gTGVnYWN5Q3Vyc29yOjplZmZl
Y3RpdmVPYmplY3RTdG9yZSgpCit7CisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55
OjpJREJPYmplY3RTdG9yZVR5cGUpCisgICAgICAgIHJldHVybiBtX3NvdXJjZS0+bGVnYWN5T2Jq
ZWN0U3RvcmUoKTsKKyAgICBSZWZQdHI8TGVnYWN5SW5kZXg+IGluZGV4ID0gbV9zb3VyY2UtPmxl
Z2FjeUluZGV4KCk7CisgICAgcmV0dXJuIGluZGV4LT5sZWdhY3lPYmplY3RTdG9yZSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lDdXJzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRi
YjMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvci5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBM
ZWdhY3lDdXJzb3JfaAorI2RlZmluZSBMZWdhY3lDdXJzb3JfaAorCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRl
ICJJREJLZXkuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZWdhY3lPYmpl
Y3RTdG9yZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2Ny
aXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVJl
cXVlc3RTdGF0ZTsKK2NsYXNzIElEQkFueTsKK2NsYXNzIElEQkNhbGxiYWNrczsKK2NsYXNzIElE
QkN1cnNvckJhY2tlbmQ7CitjbGFzcyBMZWdhY3lSZXF1ZXN0OworY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgTGVnYWN5
Q3Vyc29yIDogcHVibGljIElEQkN1cnNvcldpdGhWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxMZWdhY3lDdXJzb3I+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+LCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgTGVnYWN5UmVxdWVzdCosIExlZ2FjeUFueSogc291
cmNlLCBMZWdhY3lUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgfkxlZ2FjeUN1cnNvcigpOwor
CisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAgICBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbigp
IGNvbnN0OworICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXkoKSBjb25zdDsK
KyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgcHJpbWFyeUtleSgpIGNvbnN0Owor
ICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0OworICAgIElE
QkFueSogc291cmNlKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0
ZShKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgb3Zl
cmxvYWQgaXMgdW5uZWVkZWQuCisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJiBlYykgeyBjb250aW51ZUZ1bmN0aW9uKHN0YXRp
Y19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICB2b2lkIGNvbnRpbnVlRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOworICAgIHZvaWQgY2xv
c2UoKTsKKyAgICB2b2lkIHNldFZhbHVlUmVhZHkoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gaWRiUHJpbWFyeUtleSgpIHsgcmV0
dXJuIG1fY3VycmVudFByaW1hcnlLZXk7IH0KKworcHJvdGVjdGVkOgorICAgIExlZ2FjeUN1cnNv
cihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
biwgTGVnYWN5UmVxdWVzdCosIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lUcmFuc2FjdGlvbiop
OworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiBlZmZlY3RpdmVP
YmplY3RTdG9yZSgpOworCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IG1fYmFja2VuZDsK
KyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gbV9yZXF1ZXN0OworICAgIGNvbnN0IEluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIFJlZlB0cjxMZWdhY3lBbnk+IG1f
c291cmNlOworICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAg
ICBMZWdhY3lUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyIG1fdHJhbnNhY3Rpb25Ob3Rp
ZmllcjsKKyAgICBib29sIG1fZ290VmFsdWU7CisgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBoZWxk
IGJlY2F1c2UgbV9iYWNrZW5kIG1heSBhZHZhbmNlIHdoaWxlIHRoZXkKKyAgICAvLyBhcmUgc3Rp
bGwgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHN1Y2Nlc3MgaGFuZGxlcnMuCisgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgbV9jdXJyZW50S2V5VmFsdWU7CisgICAgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUgbV9jdXJyZW50UHJpbWFyeUtleVZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IG1fY3Vy
cmVudEtleTsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRQcmltYXJ5S2V5OworICAgIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudFZhbHVlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIExlZ2FjeUN1cnNvcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29y
V2l0aFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9M
ZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjMxY2QxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcApAQCAtMCwwICsxLDU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxlZ2FjeUN1cnNvcldpdGhW
YWx1ZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJD
dXJzb3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IExlZ2FjeUN1cnNvcldpdGhW
YWx1ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiByZXF1ZXN0LCBM
ZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlKGJhY2tlbmQsIGRpcmVj
dGlvbiwgcmVxdWVzdCwgc291cmNlLCB0cmFuc2FjdGlvbikpOworfQorCitQYXNzUmVmUHRyPExl
Z2FjeUN1cnNvcldpdGhWYWx1ZT4gTGVnYWN5Q3Vyc29yV2l0aFZhbHVlOjpmcm9tQ3Vyc29yKFBh
c3NSZWZQdHI8TGVnYWN5Q3Vyc29yPiBwcnBDdXJzb3IpCit7CisgICAgUmVmUHRyPExlZ2FjeUN1
cnNvcldpdGhWYWx1ZT4gY3Vyc29yV2l0aFZhbHVlKHN0YXRpY19jYXN0PExlZ2FjeUN1cnNvcldp
dGhWYWx1ZSo+KHBycEN1cnNvci5nZXQoKSkpOworICAgIHJldHVybiBjdXJzb3JXaXRoVmFsdWUu
cmVsZWFzZSgpOworfQorCitMZWdhY3lDdXJzb3JXaXRoVmFsdWU6OkxlZ2FjeUN1cnNvcldpdGhW
YWx1ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGVnYWN5UmVxdWVzdCogcmVxdWVzdCwgTGVnYWN5QW55
KiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IExlZ2FjeUN1
cnNvcihiYWNrZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pCit7
Cit9CisKK0xlZ2FjeUN1cnNvcldpdGhWYWx1ZTo6fkxlZ2FjeUN1cnNvcldpdGhWYWx1ZSgpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQ4N2IxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmgKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlX2gKKyNk
ZWZpbmUgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiTGVnYWN5Q3Vyc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlIDogcHVibGljIExlZ2FjeUN1cnNvciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b24sIExlZ2FjeVJlcXVlc3QqLCBMZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24q
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IGZyb21DdXJz
b3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+KTsKKyAgICB2aXJ0dWFsIH5MZWdhY3lDdXJzb3JX
aXRoVmFsdWUoKTsKKworICAgIC8vIFRoZSB2YWx1ZSBhdHRyaWJ1dGUgZGVmaW5lZCBpbiB0aGUg
SURMIGlzIHNpbXBseSBpbXBsZW1lbnRlZCBpbiBMZWdhY3lDdXJzb3IgKGJ1dCBub3QgZXhwb3Nl
ZCB2aWEKKyAgICAvLyBpdHMgSURMKS4gVGhpcyBpcyB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlv
biBtb3JlIHNpbXBsZSB3aGlsZSBtYXRjaGluZyB3aGF0IHRoZSBzcGVjIHNheXMuCisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3IoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIExlZ2FjeUN1cnNvcldpdGhWYWx1ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgTGVn
YWN5UmVxdWVzdCosIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lUcmFuc2FjdGlvbiopOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIExlZ2FjeUN1
cnNvcldpdGhWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43ZTE3NDkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcApAQCAtMCwwICsxLDQw
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lEYXRhYmFz
ZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJET01TdHJp
bmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUg
IklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAi
SURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNs
dWRlICJMZWdhY3lPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVZlcnNpb25DaGFuZ2VF
dmVudC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRD
YWxsU3RhY2suaD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8TGVnYWN5RGF0YWJhc2U+IExlZ2FjeURhdGFi
YXNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit7CisgICAgUmVmPExlZ2FjeURhdGFiYXNlPiBsZWdhY3lEYXRhYmFz
ZShhZG9wdFJlZigqbmV3IExlZ2FjeURhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjYWxsYmFj
a3MpKSk7CisgICAgbGVnYWN5RGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVy
biBsZWdhY3lEYXRhYmFzZTsKK30KKworTGVnYWN5RGF0YWJhc2U6OkxlZ2FjeURhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kPiBiYWNrZW5kLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CisgICAgOiBJREJEYXRhYmFzZShjb250ZXh0KQorICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCisg
ICAgLCBtX2Nsb3NlUGVuZGluZyhmYWxzZSkKKyAgICAsIG1faXNDbG9zZWQoZmFsc2UpCisgICAg
LCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhjYWxs
YmFja3MpCit7CisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZv
cmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Cit9
CisKK0xlZ2FjeURhdGFiYXNlOjp+TGVnYWN5RGF0YWJhc2UoKQoreworICAgIC8vIFRoaXMgZG9l
cyB3aGF0IExlZ2FjeURhdGFiYXNlOjpjbG9zZSBkb2VzLCBidXQgd2l0aG91dCBhbnkgcmVmL2Rl
cmVmIG9mIHRoZQorICAgIC8vIGRhdGFiYXNlIHNpbmNlIGl0IGlzIGFscmVhZHkgaW4gdGhlIHBy
b2Nlc3Mgb2YgYmVpbmcgZGVsZXRlZC4gVGhlIGxvZ2ljIGhlcmUKKyAgICAvLyBpcyBhbHNvIHNp
bXBsZXIgc2luY2Ugd2Uga25vdyB0aGVyZSBhcmUgbm8gdHJhbnNhY3Rpb25zIChzaW5jZSB0aGV5
IHJlZiB0aGUKKyAgICAvLyBkYXRhYmFzZSB3aGVuIHRoZXkgYXJlIGFsaXZlKS4KKworICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOworCisgICAgaWYgKCFtX2Nsb3NlUGVuZGlu
ZykgeworICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7CisgICAgICAgIG1fYmFja2VuZC0+
Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgfQorCisgICAgaWYgKGF1dG8qIGNvbnRl
eHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBw
ZW5kaW5nIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMKKyAg
ICAgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRo
ZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgorICAgICAgICAvLyBjb25uZWN0aW9uIGNhbGxlZCBzZXRW
ZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rpb24gaXMgYmVpbmcKKyAgICAgICAgLy8g
Y2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQg
OiBtX2VucXVldWVkRXZlbnRzKQorICAgICAgICAgICAgY29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNh
bmNlbEV2ZW50KCpldmVudCk7CisgICAgfQorfQorCitpbnQ2NF90IExlZ2FjeURhdGFiYXNlOjpu
ZXh0VHJhbnNhY3Rpb25JZCgpCit7CisgICAgLy8gT25seSBrZWVwIGEgMzItYml0IGNvdW50ZXIg
dG8gYWxsb3cgcG9ydHMgdG8gdXNlIHRoZSBvdGhlciAzMgorICAgIC8vIGJpdHMgb2YgdGhlIGlk
LgorICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4gY3VycmVudFRyYW5zYWN0aW9uSWQ7
CisKKyAgICByZXR1cm4gKytjdXJyZW50VHJhbnNhY3Rpb25JZDsKK30KKwordm9pZCBMZWdhY3lE
YXRhYmFzZTo6dHJhbnNhY3Rpb25DcmVhdGVkKExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24pOworICAgIEFTU0VSVCghbV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5hZGQo
dHJhbnNhY3Rpb24tPmlkKCksIHRyYW5zYWN0aW9uKTsKKworICAgIGlmICh0cmFuc2FjdGlvbi0+
aXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbik7CisgICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rp
b247CisgICAgfQorfQorCit2b2lkIExlZ2FjeURhdGFiYXNlOjp0cmFuc2FjdGlvbkZpbmlzaGVk
KExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rp
b24pOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQo
KSkpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09
IHRyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlk
KCkpOworCisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAg
ICBBU1NFUlQobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pOworICAg
ICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAg
aWYgKG1fY2xvc2VQZW5kaW5nICYmIG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAg
Y2xvc2VDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6Om9uQWJvcnQoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQor
eworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7Cisg
ICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5vbkFib3J0KGVycm9yKTsKK30K
Kwordm9pZCBMZWdhY3lEYXRhYmFzZTo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQp
Cit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsK
KyAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPm9uQ29tcGxldGUoKTsKK30K
KworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBMZWdhY3lEYXRhYmFzZTo6b2JqZWN0U3RvcmVO
YW1lcygpIGNvbnN0Cit7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFt
ZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3Jl
IDogbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMudmFsdWVzKCkpCisgICAgICAgIG9iamVjdFN0b3Jl
TmFtZXMtPmFwcGVuZChvYmplY3RTdG9yZS5uYW1lKTsKKyAgICBvYmplY3RTdG9yZU5hbWVzLT5z
b3J0KCk7CisgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOworfQorCit1aW50
NjRfdCBMZWdhY3lEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Cit7CisgICAgLy8gTm9JbnRWZXJz
aW9uIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHNob3VsZG4n
dCBiZSBleHBvc2VkIHRvIHNjcmlwdC4KKyAgICAvLyBEZWZhdWx0SW50VmVyc2lvbiBzaG91bGQg
YmUgZXhwb3NlZCBpbnN0ZWFkLgorICAgIHJldHVybiBtX21ldGFkYXRhLnZlcnNpb24gIT0gSURC
RGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uID8gbV9tZXRhZGF0YS52ZXJzaW9uIDogc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9u
KTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gTGVnYWN5RGF0YWJhc2U6OmNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9u
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCS2V5UGF0aCBrZXlQYXRoOworICAgIGJv
b2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOworICAgIGlmICghb3B0aW9ucy5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CisgICAgICAgIFN0cmluZyBrZXlQYXRoU3RyaW5nOworICAgICAgICBWZWN0b3I8
U3RyaW5nPiBrZXlQYXRoQXJyYXk7CisgICAgICAgIGlmIChvcHRpb25zLmdldCgia2V5UGF0aCIs
IGtleVBhdGhBcnJheSkpCisgICAgICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aChrZXlQYXRo
QXJyYXkpOworICAgICAgICBlbHNlIGlmIChvcHRpb25zLmdldFdpdGhVbmRlZmluZWRPck51bGxD
aGVjaygia2V5UGF0aCIsIGtleVBhdGhTdHJpbmcpKQorICAgICAgICAgICAga2V5UGF0aCA9IElE
QktleVBhdGgoa2V5UGF0aFN0cmluZyk7CisKKyAgICAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNy
ZW1lbnQiLCBhdXRvSW5jcmVtZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlT2JqZWN0
U3RvcmUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgZWMpOworfQorCitQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBMZWdhY3lEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5RGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBpZiAoY29udGFpbnNPYmplY3RTdG9yZShuYW1lKSkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3I7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGlmICgha2V5UGF0aC5pc051bGwoKSAmJiAha2V5UGF0aC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChhdXRvSW5jcmVtZW50ICYmICgoa2V5
UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiBrZXlQYXRoLnN0cmluZygp
LmlzRW1wdHkoKSkgfHwga2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9
IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDE7CisgICAgbV9iYWNrZW5kLT5jcmVhdGVP
YmplY3RTdG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJ
ZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisKKyAgICBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1l
bnQsIElEQkRhdGFiYXNlQmFja2VuZDo6TWluaW11bUluZGV4SWQpOworICAgIFJlZlB0cjxMZWdh
Y3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBMZWdhY3lPYmplY3RTdG9yZTo6Y3JlYXRlKG1l
dGFkYXRhLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7CisgICAgKyttX21ldGFk
YXRhLm1heE9iamVjdFN0b3JlSWQ7CisKKyAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+
b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKKyAgICByZXR1cm4gb2JqZWN0
U3RvcmUucmVsZWFzZSgpOworfQorCit2b2lkIExlZ2FjeURhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhT
dG9yYWdlQVBJLCAiTGVnYWN5RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlIik7CisgICAgaWYg
KCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRP
YmplY3RTdG9yZUlkKG5hbWUpOworICAgIGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0
b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNr
ZW5kLT5kZWxldGVPYmplY3RTdG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwg
b2JqZWN0U3RvcmVJZCk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0
b3JlRGVsZXRlZChuYW1lKTsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2Jq
ZWN0U3RvcmVJZCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeURhdGFi
YXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6dHJhbnNh
Y3Rpb24iKTsKKyAgICBpZiAoIXNjb3BlLnNpemUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlv
bjo6c3RyaW5nVG9Nb2RlKG1vZGVTdHJpbmcsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IG1fY2xvc2VQ
ZW5kaW5nKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0
ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50NjRfdD4g
b2JqZWN0U3RvcmVJZHM7CisgICAgZm9yIChhdXRvJiBuYW1lIDogc2NvcGUpIHsKKyAgICAgICAg
aW50NjRfdCBvYmplY3RTdG9yZUlkID0gZmluZE9iamVjdFN0b3JlSWQobmFtZSk7CisgICAgICAg
IGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkg
eworICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG9iamVjdFN0b3JlSWRz
LmFwcGVuZChvYmplY3RTdG9yZUlkKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQgPSBuZXh0VHJhbnNhY3Rpb25JZCgpOworICAgIG1fYmFja2VuZC0+Y3JlYXRlVHJhbnNhY3Rp
b24odHJhbnNhY3Rpb25JZCwgbV9kYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1v
ZGUpOworCisgICAgUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IExlZ2Fj
eVRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25JZCwgc2NvcGUsIG1vZGUs
IHRoaXMpOworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeURhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gc3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIHN0b3JlTmFtZXMt
PmFwcGVuZChzdG9yZU5hbWUpOworICAgIHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCBzdG9y
ZU5hbWVzLCBtb2RlLCBlYyk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmZvcmNlQ2xvc2Uo
KQoreworICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBtX3RyYW5zYWN0aW9ucy52YWx1ZXMo
KSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENFUFRJT04pOworICAgIHRo
aXMtPmNsb3NlKCk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3NlKCkKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpjbG9zZSIpOworICAgIGlmIChtX2Nsb3Nl
UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbG9zZVBlbmRpbmcgPSB0cnVlOwor
CisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgY2xvc2VDb25uZWN0
aW9uKCk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbigpCit7Cisg
ICAgQVNTRVJUKG1fY2xvc2VQZW5kaW5nKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNF
bXB0eSgpKTsKKworICAgIC8vIENsb3NpbmcgbWF5IHJlc3VsdCBpbiBkZWFsbG9jYXRpbmcgdGhl
IGxhc3QgdHJhbnNhY3Rpb24sIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkZWxldGluZworICAgIC8v
IHRoaXMgTGVnYWN5RGF0YWJhc2UuIFdlIG5lZWQgdGhlIGRlYWxsb2NhdGlvbiB0byBoYXBwZW4g
YWZ0ZXIgd2UgYXJlIHRocm91Z2guCisgICAgUmVmPExlZ2FjeURhdGFiYXNlPiBwcm90ZWN0KCp0
aGlzKTsKKworICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7CisKKyAg
ICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBFdmVudFF1ZXVlJiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CisgICAgLy8gUmVtb3ZlIGFueSBwZW5kaW5nIHZl
cnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMKKyAgICAvLyBjb25u
ZWN0aW9uLiBUaGV5IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgdGhlIGJhY2tlbmQgd2hl
biBhbm90aGVyCisgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBm
cm9udGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCisgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNv
dWxkIGZpcmUuCisgICAgZm9yIChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKKyAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOworICAgIH0KKworICAgIG1faXND
bG9zZWQgPSB0cnVlOworfQorCit2b2lkIExlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2Uo
dWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UiKTsKKyAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChuZXdWZXJzaW9uICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Cisg
ICAgZW5xdWV1ZUV2ZW50KExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNp
b24sIG5ld1ZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKK30KKwor
dm9pZCBMZWdhY3lEYXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQoreworICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CisgICAgQVNTRVJUKCFtX2lzQ2xv
c2VkKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudChldmVudC5nZXQoKSk7CisgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBl
bmQoZXZlbnQpOworfQorCitib29sIExlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5RGF0YWJh
c2U6OmRpc3BhdGNoRXZlbnQiKTsKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVu
dHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0KCkpCisgICAgICAgICAgICBtX2VucXVldWVkRXZlbnRz
LnJlbW92ZShpKTsKKyAgICB9CisgICAgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50
KGV2ZW50LmdldCgpKTsKK30KKworaW50NjRfdCBMZWdhY3lEYXRhYmFzZTo6ZmluZE9iamVjdFN0
b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGZvciAoYXV0byYgb2JqZWN0
U3RvcmUgOiBtX21ldGFkYXRhLm9iamVjdFN0b3JlcykgeworICAgICAgICBpZiAob2JqZWN0U3Rv
cmUudmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUu
a2V5ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CisgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0U3RvcmUua2V5OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQ7Cit9CisKK2Jvb2wgTGVnYWN5RGF0YWJhc2U6
Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgLy8gVGhlIHNjcmlwdCB3cmFwcGVy
IG11c3Qgbm90IGJlIGNvbGxlY3RlZCBiZWZvcmUgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3IKKyAg
ICAvLyB3ZSBjYW4ndCBmaXJlIGEgInZlcnNpb25jaGFuZ2UiIGV2ZW50IHRvIGxldCBzY3JpcHQg
bWFudWFsbHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgcmV0dXJuICFtX2Nsb3NlUGVuZGlu
ZyAmJiBoYXNFdmVudExpc3RlbmVycygpICYmICFtX2NvbnRleHRTdG9wcGVkOworfQorCit2b2lk
IExlZ2FjeURhdGFiYXNlOjpzdG9wKCkKK3sKKyAgICAvLyBTdG9wIGZpcmVzIGF0IGEgZGV0ZXJt
aW5pc3RpYyB0aW1lLCBzbyB3ZSBuZWVkIHRvIGNhbGwgY2xvc2UgaW4gaXQuCisgICAgY2xvc2Uo
KTsKKworICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOworfQorCitjb25zdCBjaGFyKiBMZWdh
Y3lEYXRhYmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJM
ZWdhY3lEYXRhYmFzZSI7Cit9CisKK2Jvb2wgTGVnYWN5RGF0YWJhc2U6OmNhblN1c3BlbmRGb3JQ
YWdlQ2FjaGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzQ2xvc2VkOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lE
YXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eURhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2YzE2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lEYXRhYmFzZS5oCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZWdh
Y3lEYXRhYmFzZV9oCisjZGVmaW5lIExlZ2FjeURhdGFiYXNlX2gKKworI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3Mu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZWdhY3lUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMZWdhY3lUcmFuc2FjdGlvbjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIExlZ2FjeURhdGFi
YXNlIGZpbmFsIDogcHVibGljIElEQkRhdGFiYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PExlZ2FjeURhdGFiYXNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4p
OworICAgIH5MZWdhY3lEYXRhYmFzZSgpOworCisgICAgdm9pZCBzZXRNZXRhZGF0YShjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkgeyBtX21ldGFkYXRhID0gbWV0YWRhdGE7IH0K
KyAgICB2b2lkIHRyYW5zYWN0aW9uQ3JlYXRlZChMZWdhY3lUcmFuc2FjdGlvbiopOworICAgIHZv
aWQgdHJhbnNhY3Rpb25GaW5pc2hlZChMZWdhY3lUcmFuc2FjdGlvbiopOworCisgICAgLy8gSW1w
bGVtZW50IHRoZSBJREwKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWwgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9CisgICAgdmlydHVhbCB1aW50
NjRfdCB2ZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdCBvdmVycmlkZSBmaW5h
bDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29k
ZSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmIG1v
ZGUsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lk
IGNsb3NlKCkgb3ZlcnJpZGUgZmluYWw7CisKKyAgICAvLyBJREJEYXRhYmFzZUNhbGxiYWNrcwor
ICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWlu
dDY0X3QgbmV3VmVyc2lvbik7CisgICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoaW50NjRfdCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7CisgICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUo
aW50NjRfdCk7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJl
dHVybiBJREJEYXRhYmFzZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQorICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOyB9CisKKyAgICBib29sIGlzQ2xvc2VQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9j
bG9zZVBlbmRpbmc7IH0KKyAgICB2b2lkIGZvcmNlQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJl
dHVybiBtX21ldGFkYXRhOyB9CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworCisgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7CisgICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworCisgICAg
aW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAg
IGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW52YWxpZElkOworICAgIH0KKworICAgIElEQkRhdGFiYXNlQmFja2VuZCog
YmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgc3RhdGlj
IGludDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdCBB
UEkuCisgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBMZWdhY3lEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
Pik7CisKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHNjb3Bl
LCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFuc2Fj
dGlvbihjb250ZXh0LCAqc2NvcGUsIG1vZGUsIGVjKTsgfQorCisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0IEFQSS4KKyAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBhY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5TdXNwZW5kRm9y
UGFnZUNhY2hlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZp
cnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgcmVmKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYo
KTsgfQorCisgICAgdm9pZCBjbG9zZUNvbm5lY3Rpb24oKTsKKworICAgIElEQkRhdGFiYXNlTWV0
YWRhdGEgbV9tZXRhZGF0YTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBtX2JhY2tl
bmQ7CisgICAgUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiBtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgTGVnYWN5VHJhbnNhY3Rpb24qPiBU
cmFuc2FjdGlvbk1hcDsKKyAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKKworICAg
IGJvb2wgbV9jbG9zZVBlbmRpbmc7CisgICAgYm9vbCBtX2lzQ2xvc2VkOworICAgIGJvb2wgbV9j
b250ZXh0U3RvcHBlZDsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIHZlcnNpb25jaGFuZ2Ug
ZXZlbnRzIHdhaXRpbmcgdG8gYmUgZmlyZWQgb24gdGhpcworICAgIC8vIGRhdGFiYXNlIHNvIHRo
YXQgd2UgY2FuIGNhbmNlbCB0aGVtIGlmIHRoZSBkYXRhYmFzZSBjbG9zZXMuCisgICAgVmVjdG9y
PFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CisKKyAgICBSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gTGVnYWN5RGF0YWJhc2VfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3Rvcnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3Rv
cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODkxOTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5RmFjdG9yeS5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJM
ZWdhY3lGYWN0b3J5LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJL
ZXkuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIkxlZ2FjeUFueS5oIgor
I2luY2x1ZGUgIkxlZ2FjeURhdGFiYXNlLmgiCisjaW5jbHVkZSAiTGVnYWN5T3BlbkRCUmVxdWVz
dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAi
V29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitMZWdhY3lGYWN0b3J5OjpMZWdhY3lGYWN0b3J5KElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQorICAgIDogbV9iYWNrZW5kKGZhY3RvcnkpCit7Cisg
ICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJl
IGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Cit9CisKK0xlZ2FjeUZh
Y3Rvcnk6On5MZWdhY3lGYWN0b3J5KCkKK3sKK30KKworc3RhdGljIGJvb2wgaXNDb250ZXh0VmFs
aWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaXM8RG9j
dW1lbnQ+KCpjb250ZXh0KSB8fCBjb250ZXh0LT5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOworICAg
IGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKSB7CisgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgIHJldHVybiBkb2N1bWVu
dC5mcmFtZSgpICYmIGRvY3VtZW50LnBhZ2UoKSAmJiAoIWRvY3VtZW50LnBhZ2UoKS0+dXNlc0Vw
aGVtZXJhbFNlc3Npb24oKSB8fCBTY2hlbWVSZWdpc3RyeTo6YWxsb3dzRGF0YWJhc2VBY2Nlc3NJ
blByaXZhdGVCcm93c2luZyhkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpKSk7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExl
Z2FjeUZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lG
YWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzIik7CisgICAgaWYgKCFpc0NvbnRleHRWYWxpZChjb250
ZXh0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsKKyAgICAgICAg
ZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0
cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICBtX2JhY2tlbmQtPmdldERhdGFiYXNl
TmFtZXMocmVxdWVzdCwgKihjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpKSwgKihjb250ZXh0LT50
b3BPcmlnaW4oKSksIGNvbnRleHQpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVm
UHRyPElEQk9wZW5EQlJlcXVlc3Q+IExlZ2FjeUZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUZhY3Rvcnk6Om9wZW4iKTsKKyAgICByZXR1
cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIDAsIEluZGV4ZWREQjo6VmVyc2lvbk51bGxu
ZXNzOjpOdWxsLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gTGVnYWN5
RmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUZhY3Rvcnk6Om9wZW4iKTsKKyAgICBpZiAo
IXZlcnNpb24pIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICByZXR1cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIElu
ZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOb25OdWxsLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8
SURCT3BlbkRCUmVxdWVzdD4gTGVnYWN5RmFjdG9yeTo6b3BlbkludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lv
biwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBBU1NFUlQodmVyc2lvbiA+PSAxIHx8IHZlcnNpb25OdWxsbmVzcyA9
PSBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCk7CisgICAgaWYgKG5hbWUuaXNOdWxs
KCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAoIWlzQ29udGV4dFZhbGlkKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRl
eHQtPnRvcE9yaWdpbigpKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRh
YmFzZUNhbGxiYWNrcyA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKCk7CisgICAg
aW50NjRfdCB0cmFuc2FjdGlvbklkID0gTGVnYWN5RGF0YWJhc2U6Om5leHRUcmFuc2FjdGlvbklk
KCk7CisgICAgUmVmUHRyPExlZ2FjeU9wZW5EQlJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lPcGVu
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9u
SWQsIHZlcnNpb24sIHZlcnNpb25OdWxsbmVzcyk7CisgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUs
IHZlcnNpb24sIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3QsIGRhdGFiYXNlQ2FsbGJhY2tzLCAqKGNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpLCAqKGNvbnRleHQtPnRvcE9yaWdpbigpKSk7CisgICAg
cmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gTGVnYWN5
RmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBXVEZMb2dBbHdh
eXMoInlhaCBkdWRlIik7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lGYWN0b3J5OjpkZWxl
dGVEYXRhYmFzZSIpOworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gVHlw
ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFpc0NvbnRleHRWYWxp
ZChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IFJlZlB0cjxMZWdhY3lPcGVuREJSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5T3BlbkRCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIDAsIDAsIDAsIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpO
dWxsKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsICpjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLCAqY29udGV4dC0+dG9wT3JpZ2luKCksIHJlcXVlc3QsIGNvbnRleHQpOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCitzaG9ydCBMZWdhY3lGYWN0b3J5OjpjbXAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGZpcnN0VmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmRWYWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShj
b250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBmaXJzdCA9IHNjcmlwdFZhbHVlVG9JREJLZXko
JnJlcXVlc3RTdGF0ZSwgZmlyc3RWYWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4gc2Vjb25kID0g
c2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBzZWNvbmRWYWx1ZSk7CisKKyAgICBB
U1NFUlQoZmlyc3QpOworICAgIEFTU0VSVChzZWNvbmQpOworCisgICAgaWYgKCFmaXJzdC0+aXNW
YWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBhcmUoc2Vjb25kLmdldCgpKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lGYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTM1YjE3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lGYWN0b3J5LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgTGVnYWN5RmFjdG9yeV9o
CisjZGVmaW5lIExlZ2FjeUZhY3RvcnlfaAorCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorI2lu
Y2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK3R5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIExlZ2FjeUZhY3RvcnkgOiBwdWJsaWMgU2NyaXB0
V3JhcHBhYmxlLCBwdWJsaWMgSURCRmFjdG9yeSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGVnYWN5RmFjdG9yeT4gY3JlYXRlKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBm
YWN0b3J5KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdoaWxlIHRoZSBmZWF0dXJlIGlzIHVu
ZGVyIGRldmVsb3BtZW50IHdlJ2xsIGhhbmRsZSBhIG51bGwgZmFjdG9yeSBiYWNrZW5kIGhlcmUs
CisgICAgICAgIC8vIHJldHVybmluZyBudWxsLCBzbyBqYXZhc2NyaXB0IGNhbid0IHRyeSB0byB1
c2UgdGhlIGZlYXR1cmUuCisgICAgICAgIC8vIE9uY2UgdGhlIGZlYXR1cmUgaXMgZnVsbHkgZnVu
Y3Rpb25hbCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBudWxsIGZhY3RvcnkgYmFja2VuZC4KKyAgICAg
ICAgcmV0dXJuIGZhY3RvcnkgPyBhZG9wdFJlZihuZXcgTGVnYWN5RmFjdG9yeShmYWN0b3J5KSkg
OiBudWxscHRyOworICAgIH0KKyAgICB+TGVnYWN5RmFjdG9yeSgpOworCisgICAgLy8gRklYTUU6
IGdldERhdGFiYXNlTmFtZXMgaXMgbm8gbG9uZ2VyIGEgd2ViLWZhY2luZyBBUEksIGFuZCBzaG91
bGQgYmUgcmVtb3ZlZCBmcm9tIExlZ2FjeUZhY3RvcnkuCisgICAgLy8gVGhlIFdlYiBJbnNwZWN0
b3IgY3VycmVudGx5IHVzZXMgdGhpcyB0byBlbnVtZXJhdGUgdGhlIGxpc3Qgb2YgZGF0YWJhc2Vz
LCBidXQgaXMgbW9yZSBjb21wbGljYXRlZCBhcyBhIHJlc3VsdC4KKyAgICAvLyBXZSBzaG91bGQg
cHJvdmlkZSBhIHNpbXBsZXIgQVBJIHRvIHRoZSBXZWIgSW5zcGVjdG9yIHRoZW4gcmVtb3ZlIGdl
dERhdGFiYXNlTmFtZXMuCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5h
bWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBQYXNz
UmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCT3Bl
bkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBh
c3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgc2hv
cnQgY21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgZmlyc3QsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmQsIEV4Y2Vw
dGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICBMZWdhY3lGYWN0b3J5KElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlKik7CisKKyAgICBQYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW5J
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50
NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcywgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gTGVnYWN5
RmFjdG9yeV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5SW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUluZGV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYmJlNzIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmNwcApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lJbmRleC5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgor
I2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAi
SURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xlZ2FjeUluZGV4OjpM
ZWdhY3lJbmRleChjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgTGVnYWN5T2JqZWN0
U3RvcmUqIG9iamVjdFN0b3JlLCBMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAg
OiBtX21ldGFkYXRhKG1ldGFkYXRhKQorICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
KyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX2RlbGV0ZWQoZmFsc2Up
Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
KTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpOworfQorCitMZWdhY3lJbmRleDo6fkxlZ2FjeUluZGV4KCkKK3sKK30KKworUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3Ry
aW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5SW5kZXg6Om9wZW5DdXJzb3IiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGly
ZWN0aW9uU3RyaW5nLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAg
ICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5k
VmFsdWUsIGRpcmVjdGlvbik7CisgICAgYmFja2VuZERCKCktPm9wZW5DdXJzb3IobV90cmFuc2Fj
dGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwgZmFsc2UsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgcmVxdWVz
dCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVn
YWN5SW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6
Om9wZW5DdXJzb3IiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5
UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCks
IGRpcmVjdGlvbiwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUluZGV4
Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lJbmRleDo6Y291bnQiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJv
cjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiBy
ZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRl
KHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+Y291bnQobV90
cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5
UmFuZ2UsIHJlcXVlc3QpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IExlZ2FjeUluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4Ojpjb3VudCIpOworICAgIFJl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBr
ZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb3Vu
dChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdl
QVBJLCAiTGVnYWN5SW5kZXg6Om9wZW5LZXlDdXJzb3IiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGly
ZWN0aW9uU3RyaW5nLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAg
ICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25s
eSwgZGlyZWN0aW9uKTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9u
LT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGly
ZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUlu
ZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4Ojpv
cGVuS2V5Q3Vyc29yIik7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktl
eVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UucmVsZWFz
ZSgpLCBkaXJlY3Rpb24sIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJ
bmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5SW5kZXg6OmdldCIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBnZXQoY29udGV4dCwga2V5UmFuZ2UucmVs
ZWFzZSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6Omdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lJbmRleDo6Z2V0Iik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIWtleVJhbmdlKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0
KCkpOworICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RT
dG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKKyAg
ICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRl
eDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5SW5kZXg6OmdldEtleSIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdldEtleShjb250ZXh0LCBrZXlS
YW5nZS5yZWxlYXNlKCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJ
bmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpnZXRLZXkiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgha2V5UmFuZ2UpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExl
Z2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5p
ZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgdHJ1ZSwg
cmVxdWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZCog
TGVnYWN5SW5kZXg6OmJhY2tlbmREQigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rp
b24tPmJhY2tlbmREQigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzM0NTg4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5oCkBAIC0wLDAgKzEsMTA1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBMZWdhY3lJbmRleF9oCisjZGVmaW5lIExlZ2FjeUluZGV4X2gKKwor
I2luY2x1ZGUgIklEQkN1cnNvci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJM
ZWdhY3lBbnkuaCIKKyNpbmNsdWRlICJMZWdhY3lPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkxl
Z2FjeVJlcXVlc3QuaCIKKyNpbmNsdWRlICJMZWdhY3lUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUg
IlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3MgTGVn
YWN5SW5kZXggOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgSURCSW5kZXggeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8TGVnYWN5SW5kZXg+IGNyZWF0ZShjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBtZXRhZGF0YSwgTGVnYWN5T2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlLCBMZWdhY3lU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBMZWdhY3lJbmRleChtZXRhZGF0YSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7Cisg
ICAgfQorICAgIH5MZWdhY3lJbmRleCgpOworCisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAg
ICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1
cm4gbV9tZXRhZGF0YS5uYW1lOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0
U3RvcmU7IH0KKyAgICBQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiBsZWdhY3lPYmplY3RT
dG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4g
TGVnYWN5QW55OjpjcmVhdGUobV9tZXRhZGF0YS5rZXlQYXRoKTsgfQorICAgIHZpcnR1YWwgY29u
c3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9t
ZXRhZGF0YS5rZXlQYXRoOyB9CisgICAgdmlydHVhbCBib29sIHVuaXF1ZSgpIGNvbnN0IG92ZXJy
aWRlIGZpbmFsIHsgcmV0dXJuIG1fbWV0YWRhdGEudW5pcXVlOyB9CisgICAgdmlydHVhbCBib29s
IG11bHRpRW50cnkoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX21ldGFkYXRhLm11
bHRpRW50cnk7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgaWQoKSBjb25zdCBvdmVycmlkZSBmaW5h
bCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlm
eSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gb3BlbkN1
cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29u
dGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0
LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2Rl
Jikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlS
YW5nZSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmlu
YWwgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5n
ZSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGly
ZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmlu
YWwgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0
aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmlu
YWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4
Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBm
aW5hbDsKKworICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KKwor
ICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgTGVnYWN5SW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIExlZ2FjeU9iamVjdFN0b3Jl
KiwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKKworICAgIElEQkluZGV4TWV0YWRhdGEgbV9tZXRhZGF0
YTsKKyAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVm
UHRyPExlZ2FjeVRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworICAgIGJvb2wgbV9kZWxldGVk
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIExl
Z2FjeUluZGV4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBiM2U2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuY3BwCkBAIC0wLDAg
KzEsNTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxlZ2FjeU9i
amVjdFN0b3JlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKKyNpbmNsdWRlICJJREJL
ZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgIkxlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oIgorI2luY2x1ZGUgIkxl
Z2FjeUluZGV4LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMZWdhY3lPYmpl
Y3RTdG9yZTo6TGVnYWN5T2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
bWV0YWRhdGEsIExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IG1fbWV0YWRh
dGEobWV0YWRhdGEpCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICwgbV9k
ZWxldGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICAvLyBXZSBw
YXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4K
KyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30KKworUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0Cit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOworICAgIFJlZlB0
cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Cisg
ICAgZm9yIChhdXRvJiBpbmRleCA6IG1fbWV0YWRhdGEuaW5kZXhlcy52YWx1ZXMoKSkKKyAgICAg
ICAgaW5kZXhOYW1lcy0+YXBwZW5kKGluZGV4Lm5hbWUpOworICAgIGluZGV4TmFtZXMtPnNvcnQo
KTsKKyAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURC
UmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6Z2V0Iik7Cisg
ICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgha2V5
UmFuZ2UpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxMZWdhY3lS
ZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+
Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmdldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2V0KGNvbnRleHQsIGtleVJhbmdl
LnJlbGVhc2UoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVj
dFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3RvcmU6OmFkZCIp
OworICAgIHJldHVybiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5LCBMZWdhY3lBbnk6
OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBrZXksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjphZGQiKTsKKyAgICByZXR1cm4g
cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyks
IHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURCS2V5Kj4obnVsbHB0ciksIGVjKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpwdXQiKTsKKyAgICByZXR1cm4gcHV0KElEQkRh
dGFiYXNlQmFja2VuZDo6QWRkT3JVcGRhdGUsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0
ZSwgdmFsdWUsIGtleSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9i
amVjdFN0b3JlOjpwdXQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAi
TGVnYWN5T2JqZWN0U3RvcmU6OnB1dCIpOworICAgIHJldHVybiBwdXQoSURCRGF0YWJhc2VCYWNr
ZW5kOjpBZGRPclVwZGF0ZSwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwg
c3RhdGljX2Nhc3Q8SURCS2V5Kj4obnVsbHB0ciksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVj
U3RhdGUoc3RhdGUpOworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7
CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0
YXRlLCBrZXlWYWx1ZSk7CisgICAgcmV0dXJuIHB1dChwdXRNb2RlLCBzb3VyY2UsIHN0YXRlLCB2
YWx1ZSwga2V5LnJlbGVhc2UoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExl
Z2FjeU9iamVjdFN0b3JlOjpwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Cisg
ICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2
YWx1ZS5qc1ZhbHVlKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGlmIChzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHNlcmlhbGl6ZWRW
YWx1ZS0+aGFzQmxvYlVSTHMoKSkgeworICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9G
aWxlTGlzdCBzdXBwb3J0CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFD
bG9uZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoID0gbV9tZXRhZGF0YS5rZXlQYXRoOworICAgIGNvbnN0IGJvb2wg
dXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKKyAgICBjb25zdCBib29sIGhhc0tl
eUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZShzdGF0ZSk7
CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKKworICAgIGlmIChw
dXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIHVzZXNJbkxpbmVL
ZXlzICYmIGtleSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoIXVzZXNJbkxpbmVL
ZXlzICYmICFoYXNLZXlHZW5lcmF0b3IgJiYgIWtleSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBpZiAodXNlc0luTGluZUtleXMpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0
aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgocmVxdWVzdFN0YXRl
LmV4ZWMoKSwgdmFsdWUsIGtleVBhdGgpOworICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5
UGF0aEtleS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgeworICAgICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc0tleUdlbmVyYXRvciAmJiAh
a2V5UGF0aEtleSkgeworICAgICAgICAgICAgaWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUoJnJlcXVlc3RTdGF0ZSwgdmFsdWUsIGtleVBhdGgpKSB7CisgICAgICAgICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChrZXlQ
YXRoS2V5KQorICAgICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKKyAgICB9CisgICAgaWYgKGtl
eSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6RGF0YUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0
b3I8aW50NjRfdD4gaW5kZXhJZHM7CisgICAgVmVjdG9yPEluZGV4S2V5cz4gaW5kZXhLZXlzOwor
ICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21ldGFkYXRhLmluZGV4ZXMpIHsKKyAgICAgICAgVmVj
dG9yPElEQktleURhdGE+IGtleURhdGFzOworICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZh
bHVlKHJlcXVlc3RTdGF0ZS5leGVjKCksIGluZGV4LnZhbHVlLCB2YWx1ZSwga2V5RGF0YXMpOwor
ICAgICAgICBpbmRleElkcy5hcHBlbmQoaW5kZXgua2V5KTsKKworICAgICAgICAvLyBGSVhNRTog
TXVjaCBvZiB0aGUgSW5kZXhlZCBEQiBjb2RlIG5lZWRzIHRvIHVzZSBJREJLZXlEYXRhIGRpcmVj
dGx5IHRvIGF2b2lkIHdhc3RlZnVsIGNvbnZlcnNpb25zIGxpa2UgdGhpcy4KKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxJREJLZXk+PiBrZXlzOworICAgICAgICBmb3IgKGF1dG8mIGtleURhdGEgOiBr
ZXlEYXRhcykgeworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0YS5tYXli
ZUNyZWF0ZUlEQktleSgpOworICAgICAgICAgICAgaWYgKGtleSkKKyAgICAgICAgICAgICAgICBr
ZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpbmRleEtleXMu
YXBwZW5kKGtleXMpOworICAgIH0KKworICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0
ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNvdXJjZSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnl0ZXMgPSBzZXJpYWxpemVkVmFsdWUt
PnRvV2lyZUJ5dGVzKCk7CisgICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gYWNjb3VudCBmb3IgZGlz
YWdyZWVtZW50cyBhYm91dCB3aGV0aGVyIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzaG91bGQgZGVh
bCBpbiBWZWN0b3I8dWludDhfdD4gb3IgVmVjdG9yPGNoYXI+LgorICAgIC8vIFNlZSBodHRwczov
L2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAxMy1GZWJydWFyeS8wMjM2
ODIuaHRtbAorICAgIFZlY3RvcjxjaGFyPiogdmFsdWVCeXRlc1NpZ25lZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJnZhbHVlQnl0ZXMpOworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IHZhbHVlQnVmZmVyID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcigqdmFsdWVCeXRlc1Np
Z25lZCk7CisgICAgYmFja2VuZERCKCktPnB1dChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCB2
YWx1ZUJ1ZmZlciwga2V5LnJlbGVhc2UoKSwgc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5k
OjpQdXRNb2RlPihwdXRNb2RlKSwgcmVxdWVzdCwgaW5kZXhJZHMsIGluZGV4S2V5cyk7CisgICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExl
Z2FjeU9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6ZGVsZXRlIik7
CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBpZiAoIWtleVJhbmdlKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRy
PExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
TGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIGJhY2tl
bmREQigpLT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBrZXlSYW5nZSwg
cmVxdWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZGVsZXRlRnVuY3Rpb24oY29udGV4dCwga2V5UmFu
Z2UucmVsZWFzZSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2Jq
ZWN0U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3RvcmU6OmNs
ZWFyIik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5z
YWN0aW9uLT5pZCgpLCBpZCgpLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNl
KCk7Cit9CisKK25hbWVzcGFjZSB7CisvLyBUaGlzIGNsYXNzIGNyZWF0ZXMgdGhlIGluZGV4IGtl
eXMgZm9yIGEgZ2l2ZW4gaW5kZXggYnkgZXh0cmFjdGluZworLy8gdGhlbSBmcm9tIHRoZSBTZXJp
YWxpemVkU2NyaXB0VmFsdWUsIGZvciBhbGwgdGhlIGV4aXN0aW5nIHZhbHVlcyBpbgorLy8gdGhl
IG9iamVjdFN0b3JlLiBJdCBvbmx5IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUgYnkgdmlydHVlIG9m
IGJlaW5nCisvLyBhIGxpc3RlbmVyIG9uIGFuIElEQlJlcXVlc3Qgb2JqZWN0LCBpbiB0aGUgc2Ft
ZSB3YXkgdGhhdCBKYXZhU2NyaXB0CisvLyBjdXJzb3Igc3VjY2VzcyBoYW5kbGVycyBhcmUga2Vw
dCBhbGl2ZS4KK2NsYXNzIEluZGV4UG9wdWxhdG9yIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8SW5kZXhQb3B1bGF0b3I+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmRleFBvcHVsYXRvcihiYWNr
ZW5kLCB0cmFuc2FjdGlvbklkLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3Ro
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcyA9PSAmb3RoZXI7CisgICAgfQorCitwcml2
YXRlOgorICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBi
YWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgOiBFdmVudExpc3Rl
bmVyKENQUEV2ZW50TGlzdGVuZXJUeXBlKQorICAgICAgICAsIG1fZGF0YWJhc2VCYWNrZW5kKGJh
Y2tlbmQpCisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFk
YXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCk7
CisgICAgICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CisgICAgICAg
IExlZ2FjeVJlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxMZWdhY3lSZXF1ZXN0Kj4odGFy
Z2V0KTsKKworICAgICAgICBSZWZQdHI8TGVnYWN5QW55PiBjdXJzb3JBbnkgPSByZXF1ZXN0LT5s
ZWdhY3lSZXN1bHQoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIFJlZlB0cjxMZWdhY3lD
dXJzb3JXaXRoVmFsdWU+IGN1cnNvcjsKKyAgICAgICAgaWYgKGN1cnNvckFueS0+dHlwZSgpID09
IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKKyAgICAgICAgICAgIGN1cnNvciA9IGN1
cnNvckFueS0+bGVnYWN5Q3Vyc29yV2l0aFZhbHVlKCk7CisKKyAgICAgICAgVmVjdG9yPGludDY0
X3QsIDE+IGluZGV4SWRzOworICAgICAgICBpbmRleElkcy5hcHBlbmQobV9pbmRleE1ldGFkYXRh
LmlkKTsKKyAgICAgICAgaWYgKGN1cnNvcikgeworICAgICAgICAgICAgY3Vyc29yLT5jb250aW51
ZUZ1bmN0aW9uKHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKKworICAgICAgICAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGN1cnNvci0+
aWRiUHJpbWFyeUtleSgpOworICAgICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFs
dWUgPSBjdXJzb3ItPnZhbHVlKCk7CisKKyAgICAgICAgICAgIFZlY3RvcjxJREJLZXlEYXRhPiBp
bmRleEtleURhdGFzOworICAgICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1
ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCBtX2luZGV4TWV0YWRhdGEsIHZhbHVlLCBpbmRl
eEtleURhdGFzKTsKKworICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBpbmRleEtl
eXM7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4S2V5RGF0YSA6IGluZGV4S2V5RGF0YXMp
IHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBpbmRleEtleURhdGEubWF5
YmVDcmVhdGVJREJLZXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoa2V5KQorICAgICAgICAgICAg
ICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleS5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVmVjdG9yPExlZ2FjeU9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGluZGV4
S2V5c0xpc3Q7CisgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMpOwor
CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5kZXhLZXlzKG1fdHJhbnNhY3Rp
b25JZCwgbV9vYmplY3RTdG9yZUlkLCBwcmltYXJ5S2V5LCBpbmRleElkcywgaW5kZXhLZXlzTGlz
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBhcmUgZG9u
ZSBpbmRleGluZywgdGVsbCB0aGUgYmFja2VuZCB0byBnbworICAgICAgICAgICAgLy8gYmFjayB0
byBwcm9jZXNzaW5nIHRhc2tzIG9mIHR5cGUgTm9ybWFsVGFzay4KKyAgICAgICAgICAgIG1fZGF0
YWJhc2VCYWNrZW5kLT5zZXRJbmRleGVzUmVhZHkobV90cmFuc2FjdGlvbklkLCBtX29iamVjdFN0
b3JlSWQsIGluZGV4SWRzKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kID0gbnVsbHB0
cjsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4g
bV9kYXRhYmFzZUJhY2tlbmQ7CisgICAgY29uc3QgaW50NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Cisg
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworfQorCitQYXNzUmVmUHRyPElEQkluZGV4PiBMZWdh
Y3lPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBjb25zdCBE
aWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBib29sIHVuaXF1
ZSA9IGZhbHNlOworICAgIG9wdGlvbnMuZ2V0KCJ1bmlxdWUiLCB1bmlxdWUpOworCisgICAgYm9v
bCBtdWx0aUVudHJ5ID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXQoIm11bHRpRW50cnkiLCBtdWx0
aUVudHJ5KTsKKworICAgIHJldHVybiBjcmVhdGVJbmRleChjb250ZXh0LCBuYW1lLCBrZXlQYXRo
LCB1bmlxdWUsIG11bHRpRW50cnksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gTGVn
YWN5T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgiKTsKKyAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpIHx8IG1fZGVsZXRlZCkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIWtleVBhdGguaXNWYWxpZCgpKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlN5bnRheEVycm9yOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMg
PSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoY29udGFpbnNJ
bmRleChuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJh
aW50RXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChrZXlQYXRoLnR5
cGUoKSA9PSBJREJLZXlQYXRoOjpBcnJheVR5cGUgJiYgbXVsdGlFbnRyeSkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIGludDY0X3QgaW5kZXhJZCA9IG1fbWV0YWRhdGEubWF4SW5k
ZXhJZCArIDE7CisgICAgYmFja2VuZERCKCktPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmlk
KCksIGlkKCksIGluZGV4SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisK
KyAgICArK21fbWV0YWRhdGEubWF4SW5kZXhJZDsKKworICAgIElEQkluZGV4TWV0YWRhdGEgbWV0
YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBS
ZWZQdHI8TGVnYWN5SW5kZXg+IGluZGV4ID0gTGVnYWN5SW5kZXg6OmNyZWF0ZShtZXRhZGF0YSwg
dGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5k
ZXgpOworICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5zZXQoaW5kZXhJZCwgbWV0YWRhdGEpOworCisg
ICAgQVNTRVJUKCFlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dCk7CisgICAgcmV0dXJuIGluZGV4LnJlbGVhc2Uo
KTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gTGVnYWN5T2JqZWN0U3RvcmU6OmluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lPYmplY3RTdG9yZTo6aW5kZXgiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzRmluaXNoZWQo
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVu
ZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgaW50NjRfdCBpbmRleElkID0g
ZmluZEluZGV4SWQobmFtZSk7CisgICAgaWYgKGluZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6
SW52YWxpZElkKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5k
RXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEqIGluZGV4TWV0YWRhdGEobnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBpbmRleCA6IG1f
bWV0YWRhdGEuaW5kZXhlcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW5kZXgubmFtZSA9PSBu
YW1lKSB7CisgICAgICAgICAgICBpbmRleE1ldGFkYXRhID0gJmluZGV4OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOworICAg
IEFTU0VSVChpbmRleE1ldGFkYXRhLT5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
OworCisgICAgUmVmUHRyPExlZ2FjeUluZGV4PiBpbmRleCA9IExlZ2FjeUluZGV4OjpjcmVhdGUo
KmluZGV4TWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1faW5kZXhN
YXAuc2V0KG5hbWUsIGluZGV4KTsKKyAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOworfQorCit2
b2lkIExlZ2FjeU9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3Rv
cmU6OmRlbGV0ZUluZGV4Iik7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFu
Z2UoKSB8fCBtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpbnQ2NF90IGluZGV4SWQgPSBmaW5kSW5kZXhJZChuYW1lKTsKKyAgICBpZiAoaW5kZXhJZCA9
PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJhY2tlbmREQigpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRl
eElkKTsKKworICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7CisgICAgSURC
SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChp
dCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7CisgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQo
KTsKKyAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFtZSk7CisgICAgfQorfQorCitQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBv
cGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVj
KTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6b3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIG9wZW5DdXJz
b3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIG9wZW5DdXJzb3Io
Y29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOworfQorCitQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBj
b25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJu
IG9wZW5DdXJzb3IoY29udGV4dCwgcmFuZ2UsIGRpcmVjdGlvbiwgSURCRGF0YWJhc2VCYWNrZW5k
OjpOb3JtYWxUYXNrLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2Jq
ZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5n
LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29y
Iik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJDdXJz
b3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9
IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJbmRl
eGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCBkaXJlY3Rpb24pOworCisgICAgYmFja2Vu
ZERCKCktPm9wZW5DdXJzb3IobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRh
ZGF0YTo6SW52YWxpZElkLCByYW5nZSwgZGlyZWN0aW9uLCBmYWxzZSwgc3RhdGljX2Nhc3Q8SURC
RGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZT4odGFza1R5cGUpLCByZXF1ZXN0KTsKKyAgICByZXR1
cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5
T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdl
LnJlbGVhc2UoKSwgZGlyZWN0aW9uLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4g
TGVnYWN5T2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpjb3VudCIpOworICAgIGlmICht
X2RlbGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0
YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUmVm
UHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIGJh
Y2tlbmREQigpLT5jb3VudChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQsIHJhbmdlLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb3VudChjb250ZXh0LCBr
ZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKK30KKwordm9pZCBMZWdhY3lPYmplY3RTdG9yZTo6dHJh
bnNhY3Rpb25GaW5pc2hlZCgpCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPmlzRmluaXNo
ZWQoKSk7CisKKyAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1faW5kZXhNYXAu
Y2xlYXIoKTsKK30KKworaW50NjRfdCBMZWdhY3lPYmplY3RTdG9yZTo6ZmluZEluZGV4SWQoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21ldGFk
YXRhLmluZGV4ZXMpIHsKKyAgICAgICAgaWYgKGluZGV4LnZhbHVlLm5hbWUgPT0gbmFtZSkgewor
ICAgICAgICAgICAgQVNTRVJUKGluZGV4LmtleSAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpOworICAgICAgICAgICAgcmV0dXJuIGluZGV4LmtleTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkOworfQorCitJREJEYXRhYmFzZUJh
Y2tlbmQqIExlZ2FjeU9iamVjdFN0b3JlOjpiYWNrZW5kREIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kREIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9y
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWFlYjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
T2JqZWN0U3RvcmUuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5T2Jq
ZWN0U3RvcmVfaAorI2RlZmluZSBMZWdhY3lPYmplY3RTdG9yZV9oCisKKyNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VC
YWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklE
QkluZGV4LmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIK
KyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGVnYWN5SW5kZXguaCIKKyNpbmNs
dWRlICJMZWdhY3lUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgor
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0
OworY2xhc3MgSURCQW55OworY2xhc3MgTGVnYWN5SW5kZXg7CisKK2NsYXNzIExlZ2FjeU9iamVj
dFN0b3JlIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIElEQk9iamVjdFN0b3JlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPExlZ2FjeU9iamVjdFN0b3JlPiBjcmVhdGUoY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgbWV0YWRhdGEsIExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExlZ2FjeU9iamVj
dFN0b3JlKG1ldGFkYXRhLCB0cmFuc2FjdGlvbikpOworICAgIH0KKyAgICB+TGVnYWN5T2JqZWN0
U3RvcmUoKSB7IH0KKworICAgIC8vIEltcGxlbWVudCB0aGUgSURCT2JqZWN0U3RvcmUgSURMCisg
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICBjb25z
dCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQorICAgIFBh
c3NSZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgeyByZXR1cm4gTGVnYWN5QW55Ojpj
cmVhdGUobV9tZXRhZGF0YS5rZXlQYXRoKTsgfQorICAgIGNvbnN0IElEQktleVBhdGgga2V5UGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQorICAgIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQor
ICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0lu
Y3JlbWVudDsgfQorCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3Rh
dGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVj
dGlvbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSosIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6
RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFu
eT4sIEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1
dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3Vy
Y2UsIEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGNyZWF0ZUluZGV4KGNvbnRleHQsIG5hbWUsIElEQktleVBhdGgoa2V5UGF0aCks
IG9wdGlvbnMsIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGtleVBhdGgsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVJbmRleChjb250ZXh0LCBuYW1lLCBJREJLZXlQ
YXRoKGtleVBhdGgpLCBvcHRpb25zLCBlYyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBj
cmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJJbmRl
eD4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBk
ZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVkID0g
dHJ1ZTsgfQorICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOworCisgICAgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KKyAg
ICB2b2lkIHNldE1ldGFkYXRhKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRh
KSB7IG1fbWV0YWRhdGEgPSBtZXRhZGF0YTsgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PElEQktleT4+IEluZGV4S2V5czsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJbmRleEtl
eXM+IEluZGV4S2V5TWFwOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBMZWdhY3lPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKKworICAgIGludDY0X3QgZmluZElu
ZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmRJbmRl
eElkKG5hbWUpICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKKyAgICB9CisKKyAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7CisgICAgUmVmUHRyPExlZ2FjeVRyYW5z
YWN0aW9uPiBtX3RyYW5zYWN0aW9uOworICAgIGJvb2wgbV9kZWxldGVkOworCisgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPExlZ2FjeUluZGV4Pj4gSURCSW5kZXhNYXA7CisgICAg
SURCSW5kZXhNYXAgbV9pbmRleE1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCisKKyNlbmRpZiAvLyBMZWdhY3lPYmplY3RTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRC
UmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3MjNlOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lPcGVuREJSZXF1ZXN0LmgiCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbC5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKKyNpbmNs
dWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJMZWdhY3lEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkxlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVmPExlZ2FjeU9wZW5EQlJlcXVlc3Q+IExlZ2FjeU9wZW5EQlJlcXVlc3Q6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0
X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzKQor
eworICAgIFJlZjxMZWdhY3lPcGVuREJSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcgTGVn
YWN5T3BlbkRCUmVxdWVzdChjb250ZXh0LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24sIHZlcnNpb25OdWxsbmVzcykpKTsKKyAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsK
KyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworTGVnYWN5T3BlbkRCUmVxdWVzdDo6TGVnYWN5T3Bl
bkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWlu
dDY0X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNz
KQorICAgIDogTGVnYWN5UmVxdWVzdChjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZU51bGwoKSwg
SURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCAwKQorICAgICwgbV9kYXRhYmFzZUNhbGxi
YWNrcyhjYWxsYmFja3MpCisgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKKyAg
ICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICwgbV92ZXJzaW9uTnVsbG5lc3ModmVyc2lvbk51
bGxuZXNzKQoreworICAgIEFTU0VSVCghbV9yZXN1bHQpOworfQorCitMZWdhY3lPcGVuREJSZXF1
ZXN0Ojp+TGVnYWN5T3BlbkRCUmVxdWVzdCgpCit7Cit9CisKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IExlZ2FjeU9wZW5EQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSURCT3BlbkRCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKK30KKwor
dm9pZCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpvbkJsb2NrZWQodWludDY0X3Qgb2xkVmVyc2lvbikK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9wZW5EQlJlcXVlc3Q6Om9uQmxvY2tlZCgp
Iik7CisgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGVucXVldWVFdmVudChMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRW
ZXJzaW9uLCBtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKK30KKwordm9p
ZCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHBycERhdGFiYXNlQmFja2VuZCwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJMZWdhY3lPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoKSIpOworICAgIGlmIChtX2Nv
bnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZD4gZGIgPSBwcnBEYXRhYmFzZUJhY2tlbmQ7CisgICAgICAg
IGRiLT5hYm9ydChtX3RyYW5zYWN0aW9uSWQpOworICAgICAgICBkYi0+Y2xvc2UobV9kYXRhYmFz
ZUNhbGxiYWNrcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFzaG91bGRFbnF1
ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxs
YmFja3MpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2VCYWNrZW5k
ID0gcHJwRGF0YWJhc2VCYWNrZW5kOworCisgICAgUmVmUHRyPExlZ2FjeURhdGFiYXNlPiBpZGJE
YXRhYmFzZSA9IExlZ2FjeURhdGFiYXNlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBkYXRhYmFzZUJhY2tlbmQsIG1fZGF0YWJhc2VDYWxsYmFja3MpOworICAgIGlkYkRhdGFiYXNl
LT5zZXRNZXRhZGF0YShtZXRhZGF0YSk7CisgICAgbV9kYXRhYmFzZUNhbGxiYWNrcy0+Y29ubmVj
dChpZGJEYXRhYmFzZS5nZXQoKSk7CisgICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9IG51bGxwdHI7
CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG9sZE1ldGFkYXRhKG1ldGFkYXRhKTsKKyAgICBv
bGRNZXRhZGF0YS52ZXJzaW9uID0gb2xkVmVyc2lvbjsKKworICAgIG1fdHJhbnNhY3Rpb24gPSBM
ZWdhY3lUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFu
c2FjdGlvbklkLCBpZGJEYXRhYmFzZS5nZXQoKSwgdGhpcywgb2xkTWV0YWRhdGEpOworICAgIG1f
cmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoaWRiRGF0YWJhc2UucmVsZWFzZSgpKTsKKworICAg
IGlmIChtX3ZlcnNpb25OdWxsbmVzcyA9PSBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVs
bCkKKyAgICAgICAgbV92ZXJzaW9uID0gMTsKKyAgICBlbnF1ZXVlRXZlbnQoTGVnYWN5VmVyc2lv
bkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbV92ZXJzaW9uLCBldmVudE5hbWVzKCku
dXBncmFkZW5lZWRlZEV2ZW50KSk7Cit9CisKK3ZvaWQgTGVnYWN5T3BlbkRCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBwcnBCYWNrZW5kLCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxl
Z2FjeU9wZW5EQlJlcXVlc3Q6Om9uU3VjY2VzcygpIik7CisgICAgaWYgKCFzaG91bGRFbnF1ZXVl
RXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZD4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisgICAgUmVmUHRyPExlZ2FjeURhdGFiYXNlPiBpZGJE
YXRhYmFzZTsKKyAgICBpZiAobV9yZXN1bHQpIHsKKyAgICAgICAgaWRiRGF0YWJhc2UgPSBtX3Jl
c3VsdC0+bGVnYWN5RGF0YWJhc2UoKTsKKyAgICAgICAgQVNTRVJUKGlkYkRhdGFiYXNlKTsKKyAg
ICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIGlkYkRhdGFiYXNlID0gTGVn
YWN5RGF0YWJhc2U6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQucmVs
ZWFzZSgpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
cy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFj
a3MgPSBudWxscHRyOworICAgICAgICBtX3Jlc3VsdCA9IExlZ2FjeUFueTo6Y3JlYXRlKGlkYkRh
dGFiYXNlLmdldCgpKTsKKyAgICB9CisgICAgaWRiRGF0YWJhc2UtPnNldE1ldGFkYXRhKG1ldGFk
YXRhKTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKworYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0Ojpz
aG91bGRFbnF1ZXVlRXZlbnQoKSBjb25zdAoreworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8
ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwor
ICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBjbG9z
ZWQgYmV0d2VlbiBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBvZiB0aGUgInN1Y2Nl
c3MiIGV2ZW50LAorICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJlIGZpcmVkIGluc3Rl
YWQuCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAm
JiBtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6SURCRGF0YWJhc2VUeXBlICYmIG1fcmVzdWx0
LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7CisgICAgICAgIG1fcmVzdWx0
ID0gbnVsbHB0cjsKKyAgICAgICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2Vk
LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBMZWdhY3lS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjVhNTkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIExlZ2FjeU9wZW5EQlJlcXVlc3RfaAorI2RlZmluZSBM
ZWdhY3lPcGVuREJSZXF1ZXN0X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
aW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVl
c3QuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7CisK
K2NsYXNzIExlZ2FjeU9wZW5EQlJlcXVlc3QgOiBwdWJsaWMgTGVnYWN5UmVxdWVzdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxMZWdhY3lPcGVuREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lvbk51bGxu
ZXNzKTsKKyAgICB2aXJ0dWFsIH5MZWdhY3lPcGVuREJSZXF1ZXN0KCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgb25CbG9ja2VkKHVpbnQ2NF90IGV4aXN0aW5nVmVyc2lvbikgb3ZlcnJpZGUgZmluYWw7
CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpIG92ZXJyaWRl
IGZpbmFsOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAg
dmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZp
bmFsOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVldWVFdmVudCgp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIExlZ2FjeU9wZW5EQlJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lv
bk51bGxuZXNzKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFz
ZUNhbGxiYWNrczsKKyAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKKyAgICB1aW50
NjRfdCBtX3ZlcnNpb247CisgICAgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgbV92ZXJzaW9u
TnVsbG5lc3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIExlZ2FjeU9wZW5EQlJlcXVlc3RfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeVJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGVl
OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJD
dXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklE
QkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAiTGVn
YWN5Q3Vyc29yLmgiCisjaW5jbHVkZSAiTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVk
ZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxMZWdhY3lSZXF1ZXN0PiBMZWdhY3lSZXF1ZXN0Ojpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxMZWdhY3lB
bnk+IHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIFJlZjxM
ZWdhY3lSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcgTGVnYWN5UmVxdWVzdChjb250ZXh0
LCBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24pKSk7
CisgICAgcmVxdWVzdC0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgLy8gUmVxdWVzdHMgYXNzb2Np
YXRlZCB3aXRoIElEQkZhY3RvcnkgKG9wZW4vZGVsZXRlRGF0YWJhc2UvZ2V0RGF0YWJhc2VOYW1l
cykgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggdHJhbnNhY3Rpb25zLgorICAgIGlmICh0cmFuc2Fj
dGlvbikKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJlZ2lzdGVyUmVxdWVzdChyZXF1ZXN0LnB0cigp
KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworUmVmPExlZ2FjeVJlcXVlc3Q+IExlZ2FjeVJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PExlZ2FjeUFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBl
LCBMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgUmVmPExlZ2FjeVJlcXVl
c3Q+IHJlcXVlc3QoYWRvcHRSZWYoKm5ldyBMZWdhY3lSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwg
dGFza1R5cGUsIHRyYW5zYWN0aW9uKSkpOworICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgp
OworICAgIC8vIFJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCBJREJGYWN0b3J5IChvcGVuL2RlbGV0
ZURhdGFiYXNlL2dldERhdGFiYXNlTmFtZXMpIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIHRyYW5z
YWN0aW9ucy4KKyAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgICAgIHRyYW5zYWN0aW9uLT5yZWdp
c3RlclJlcXVlc3QocmVxdWVzdC5wdHIoKSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK0xl
Z2FjeVJlcXVlc3Q6OkxlZ2FjeVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIDogSURC
T3BlbkRCUmVxdWVzdChjb250ZXh0KQorICAgICwgbV9yZXN1bHQobnVsbHB0cikKKyAgICAsIG1f
ZXJyb3JDb2RlKDApCisgICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQorICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fcmVhZHlTdGF0ZShQRU5ESU5HKQorICAgICwg
bV9yZXF1ZXN0QWJvcnRlZChmYWxzZSkKKyAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1f
dGFza1R5cGUodGFza1R5cGUpCisgICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQorICAg
ICwgbV9jdXJzb3JUeXBlKEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWUpCisgICAg
LCBtX2N1cnNvckRpcmVjdGlvbihJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbjo6TmV4dCkKKyAg
ICAsIG1fY3Vyc29yRmluaXNoZWQoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdDdXJzb3IobnVsbHB0
cikKKyAgICAsIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudChmYWxzZSkKKyAgICAsIG1fcHJl
dmVudFByb3BhZ2F0aW9uKGZhbHNlKQorICAgICwgbV9yZXF1ZXN0U3RhdGUoY29udGV4dCkKK3sK
K30KKworTGVnYWN5UmVxdWVzdDo6fkxlZ2FjeVJlcXVlc3QoKQoreworfQorCitQYXNzUmVmUHRy
PElEQkFueT4gTGVnYWN5UmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAor
eworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIHJldHVybiBtX3Jlc3VsdDsKK30KKworUGFzc1JlZlB0cjxET01FcnJvcj4gTGVnYWN5
UmVxdWVzdDo6ZXJyb3IoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVh
ZHlTdGF0ZSAhPSBET05FKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1f
ZXJyb3I7Cit9CisKK3Vuc2lnbmVkIHNob3J0IExlZ2FjeVJlcXVlc3Q6OmVycm9yQ29kZShFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IERPTkUpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbV9lcnJvckNvZGU7Cit9CisKK1Bh
c3NSZWZQdHI8SURCQW55PiBMZWdhY3lSZXF1ZXN0Ojpzb3VyY2UoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3NvdXJjZTsKK30KKworUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gTGVnYWN5UmVx
dWVzdDo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uOwor
fQorCitjb25zdCBTdHJpbmcmIExlZ2FjeVJlcXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9O
RSk7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcGVu
ZGluZywgKCJwZW5kaW5nIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwor
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGRvbmUsICgi
ZG9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKworICAgIGlmICht
X3JlYWR5U3RhdGUgPT0gUEVORElORykKKyAgICAgICAgcmV0dXJuIHBlbmRpbmc7CisKKyAgICBy
ZXR1cm4gZG9uZTsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjptYXJrRWFybHlEZWF0aCgpCit7
CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKKyAgICBtX3JlYWR5U3RhdGUg
PSBFYXJseURlYXRoOworICAgIGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAgICBtX3RyYW5zYWN0
aW9uLT51bnJlZ2lzdGVyUmVxdWVzdCh0aGlzKTsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0Ojph
Ym9ydCgpCit7CisgICAgQVNTRVJUKCFtX3JlcXVlc3RBYm9ydGVkKTsKKyAgICBpZiAobV9jb250
ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBE
T05FKTsKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IERPTkUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEVucXVldWVkIGV2ZW50cyBtYXkgYmUgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoaXMg
b2JqZWN0LgorICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiBzZWxmKHRoaXMpOworCisgICAgRXZl
bnRRdWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpOworICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7CisgICAgICAg
IGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICB9CisgICAgbV9lbnF1ZXVlZEV2
ZW50cy5jbGVhcigpOworCisgICAgbV9lcnJvckNvZGUgPSAwOworICAgIG1fZXJyb3IgPSBudWxs
cHRyOworICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7CisgICAgbV9yZXN1bHQgPSBudWxs
cHRyOworICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpBYm9ydEVycm9yKSk7CisgICAgbV9yZXF1ZXN0QWJvcnRlZCA9IHRydWU7Cit9CisK
K3ZvaWQgTGVnYWN5UmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhJbmRleGVkREI6OkN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CisgICAgQVNTRVJUKCFtX3BlbmRp
bmdDdXJzb3IpOworICAgIG1fY3Vyc29yVHlwZSA9IGN1cnNvclR5cGU7CisgICAgbV9jdXJzb3JE
aXJlY3Rpb24gPSBkaXJlY3Rpb247Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6c2V0UGVuZGlu
Z0N1cnNvcihQYXNzUmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vyc29yKQoreworICAgIEFTU0VSVCht
X3JlYWR5U3RhdGUgPT0gRE9ORSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVCghbV9wZW5kaW5nQ3Vy
c29yKTsKKyAgICBBU1NFUlQoY3Vyc29yID09IGdldFJlc3VsdEN1cnNvcigpKTsKKworICAgIG1f
cGVuZGluZ0N1cnNvciA9IGN1cnNvcjsKKyAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CisgICAgbV9y
ZWFkeVN0YXRlID0gUEVORElORzsKKyAgICBtX2Vycm9yQ29kZSA9IDA7CisgICAgbV9lcnJvciA9
IG51bGxwdHI7CisgICAgbV9lcnJvck1lc3NhZ2UgPSBTdHJpbmcoKTsKKyAgICBtX3RyYW5zYWN0
aW9uLT5yZWdpc3RlclJlcXVlc3QodGhpcyk7Cit9CisKK1JlZlB0cjxMZWdhY3lDdXJzb3I+IExl
Z2FjeVJlcXVlc3Q6OmdldFJlc3VsdEN1cnNvcigpCit7CisgICAgaWYgKCFtX3Jlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55
OjpJREJDdXJzb3JUeXBlKQorICAgICAgICByZXR1cm4gbV9yZXN1bHQtPmxlZ2FjeUN1cnNvcigp
OworICAgIGlmIChtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVl
VHlwZSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5sZWdhY3lDdXJzb3JXaXRoVmFsdWUoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpzZXRSZXN1bHRD
dXJzb3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcp
OworICAgIG1fY3Vyc29yS2V5ID0ga2V5OworICAgIG1fY3Vyc29yUHJpbWFyeUtleSA9IHByaW1h
cnlLZXk7CisgICAgbV9jdXJzb3JWYWx1ZSA9IHZhbHVlOworCisgICAgaWYgKG1fY3Vyc29yVHlw
ZSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkpIHsKKyAgICAgICAgbV9yZXN1bHQg
PSBMZWdhY3lBbnk6OmNyZWF0ZShjdXJzb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9yZXN1bHQgPSBMZWdhY3lBbnk6OmNyZWF0ZShMZWdhY3lDdXJzb3JXaXRoVmFsdWU6OmZy
b21DdXJzb3IoY3Vyc29yKSk7Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6ZmluaXNoQ3Vyc29y
KCkKK3sKKyAgICBtX2N1cnNvckZpbmlzaGVkID0gdHJ1ZTsKKyAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IFBFTkRJTkcpCisgICAgICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7Cit9CisK
K2Jvb2wgTGVnYWN5UmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3QKK3sKKyAgICBp
ZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1f
cmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CisgICAg
QVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9lcnJv
ciAmJiAhbV9yZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIExlZ2FjeVJlcXVl
c3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uRXJyb3IoKSAoJXMpICclcyciLCBlcnJv
ci0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9lcnJvckNvZGUgPSBlcnJvci0+Y29kZSgpOworICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3It
Pm1lc3NhZ2UoKTsKKyAgICBtX2Vycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKGVycm9yLT5pZGJDb2RlKCkpKTsKKyAgICBtX3BlbmRpbmdD
dXJzb3IgPSBudWxscHRyOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2
ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQoreworICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgTGVnYWN5
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlz
dCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhET01T
dHJpbmdMaXN0KSIpOworICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoZG9tU3RyaW5nTGlzdCk7
CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwordm9pZCBMZWdh
Y3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBwcnBCYWNr
ZW5kKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKElE
QkN1cnNvcikiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsK
KworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kID0gcHJwQmFja2VuZDsKKyAg
ICBSZWZQdHI8SURCS2V5PiBrZXkgPSBiYWNrZW5kLT5rZXkoKTsKKyAgICBSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5ID0gYmFja2VuZC0+cHJpbWFyeUtleSgpOworCisgICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0
ZSgpLCBiYWNrZW5kLT52YWx1ZUJ1ZmZlcigpLCAhIWtleSk7CisKKyAgICBBU1NFUlQoIW1fcGVu
ZGluZ0N1cnNvcik7CisgICAgUmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vyc29yOworICAgIHN3aXRj
aCAobV9jdXJzb3JUeXBlKSB7CisgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9u
bHk6CisgICAgICAgIGN1cnNvciA9IExlZ2FjeUN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQucmVsZWFz
ZSgpLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZTo6S2V5QW5kVmFsdWU6CisgICAgICAgIGN1cnNvciA9IExlZ2FjeUN1cnNvcldpdGhWYWx1ZTo6
Y3JlYXRlKGJhY2tlbmQucmVsZWFzZSgpLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3Vy
Y2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgc2V0UmVzdWx0
Q3Vyc29yKGN1cnNvciwga2V5LnJlbGVhc2UoKSwgcHJpbWFyeUtleS5yZWxlYXNlKCksIHZhbHVl
KTsKKworICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQg
TGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCS2V5KSIpOwor
ICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChpZGJLZXkgJiYgaWRiS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgRE9NUmVxdWVzdFN0YXRl
OjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisgICAgICAgIG1fcmVzdWx0ID0gTGVnYWN5
QW55OjpjcmVhdGUoaWRiS2V5VG9TY3JpcHRWYWx1ZShyZXF1ZXN0U3RhdGUoKSwgaWRiS2V5KSk7
CisgICAgfSBlbHNlCisgICAgICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGVJbnZhbGlk
KCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwordm9pZCBM
ZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVm
ZmVyKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFNo
YXJlZEJ1ZmZlcikiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRl
KTsKKworICAgIC8vIEZJWE1FOiBCeSBub3Qga25vd2luZyB3aGV0aGVyIG9yIG5vdCB0aGUga2V5
IGlzIGRlZmluZWQgaGVyZSwgd2UgZG9uJ3Qga25vdworICAgIC8vIGlmIGEgbnVsbCB2YWx1ZUJ1
ZmZlciBtZWFucyB0aGUgdmFsdWUgaXMgbnVsbCBvciB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLgor
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZUJ1
ZmZlcihyZXF1ZXN0U3RhdGUoKSwgdmFsdWVCdWZmZXIsIHRydWUpOworICAgIG9uU3VjY2Vzc0lu
dGVybmFsKHZhbHVlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZShMZWdhY3lBbnkqIHNvdXJjZSkKK3sK
KyAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9yZVR5cGUpCisg
ICAgICAgIHJldHVybiBzb3VyY2UtPmlkYk9iamVjdFN0b3JlKCk7CisgICAgaWYgKHNvdXJjZS0+
dHlwZSgpID09IElEQkFueTo6SURCSW5kZXhUeXBlKQorICAgICAgICByZXR1cm4gc291cmNlLT5p
ZGJJbmRleCgpLT5vYmplY3RTdG9yZSgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQYXNzUmVmUHRyPElEQktleT4g
cHJwUHJpbWFyeUtleSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhTaGFyZWRCdWZmZXIsIElEQktleSwg
SURCS2V5UGF0aCkiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKGtleVBhdGggPT0gZWZmZWN0aXZl
T2JqZWN0U3RvcmUobV9zb3VyY2UuZ2V0KCkpLT5rZXlQYXRoKCkpOworI2VuZGlmCisgICAgRE9N
UmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisKKyAgICAvLyBGSVhN
RTogQnkgbm90IGtub3dpbmcgd2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkZWZpbmVkIGhlcmUs
IHdlIGRvbid0IGtub3cKKyAgICAvLyBpZiBhIG51bGwgdmFsdWVCdWZmZXIgbWVhbnMgdGhlIHZh
bHVlIGlzIG51bGwgb3IgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIocmVxdWVzdFN0YXRl
KCksIHZhbHVlQnVmZmVyLCB0cnVlKTsKKworICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkg
PSBwcnBQcmltYXJ5S2V5OworCisgICAgaWYgKCFrZXlQYXRoLmlzTnVsbCgpKSB7CisjaWZuZGVm
IE5ERUJVRworICAgICAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgocmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwgdmFsdWUs
IGtleVBhdGgpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5p
c0VxdWFsKHByaW1hcnlLZXkuZ2V0KCkpKTsKKyNlbmRpZgorICAgICAgICBib29sIGluamVjdGVk
ID0gaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHJlcXVlc3RTdGF0ZSgpLCBwcmltYXJ5S2V5
LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5qZWN0ZWQsIGluamVj
dGVkKTsKKyAgICB9CisKKyAgICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7Cit9CisKK3ZvaWQg
TGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKGludDY0X3QgdmFsdWUpCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoaW50NjRfdCkiKTsKKyAgICBpZiAoIXNo
b3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG9uU3VjY2Vz
c0ludGVybmFsKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUodmFsdWUpKTsKK30K
Kwordm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoKQoreworICAgIExPRyhTdG9yYWdlQVBJ
LCAiTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKCkiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVF
dmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK3ZvaWQgTGVnYWN5
UmVxdWVzdDo6b25TdWNjZXNzSW50ZXJuYWwoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CisgICAgRE9NUmVx
dWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisgICAgcmV0dXJuIG9uU3Vj
Y2Vzc0ludGVybmFsKGRlc2VyaWFsaXplSURCVmFsdWUocmVxdWVzdFN0YXRlKCksIHZhbHVlKSk7
Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzSW50ZXJuYWwoY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55Ojpj
cmVhdGUodmFsdWUpOworICAgIGlmIChtX3BlbmRpbmdDdXJzb3IpIHsKKyAgICAgICAgbV9wZW5k
aW5nQ3Vyc29yLT5jbG9zZSgpOworICAgICAgICBtX3BlbmRpbmdDdXJzb3IgPSBudWxscHRyOwor
ICAgIH0KKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lk
IExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhrZXksIHBy
aW1hcnlLZXksIHZhbHVlQnVmZmVyKSIpOworICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9y
ZXF1ZXN0U3RhdGUpOworCisgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNl
cmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0ZSgpLCBidWZmZXIsICEha2V5KTsKKwor
ICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOworICAgIHNldFJlc3VsdEN1cnNvcihtX3BlbmRp
bmdDdXJzb3IucmVsZWFzZSgpLCBrZXksIHByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBlbnF1ZXVl
RXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6Om9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEmKQoreworICAgIC8vIE9ubHkgdGhlIExlZ2FjeU9wZW5EQlJlcXVlc3QgdmVyc2lv
biBvZiB0aGlzIHNob3VsZCBldmVyIGJlIGNhbGxlZDsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworYm9vbCBMZWdhY3lSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugc2hvdWxkIHJldHVybiB0cnVl
IGFzIGxvbmcgYXMgYW55b25lIGhhcyBhIG9yIGNhbgorICAgIC8vICAgICAgICBnZXQgYSBoYW5k
bGUgdG8gdXMgYW5kIHdlIGhhdmUgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlzIG9yZGVyIHRvIGhh
bmRsZQorICAgIC8vICAgICAgICB1c2VyIGdlbmVyYXRlZCBldmVudHMgcHJvcGVybHkuCisgICAg
cmV0dXJuIG1faGFzUGVuZGluZ0FjdGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOworfQorCit2
b2lkIExlZ2FjeVJlcXVlc3Q6OnN0b3AoKQoreworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKKyAgICBtX3Jl
cXVlc3RTdGF0ZS5jbGVhcigpOworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gUEVORElORykKKyAg
ICAgICAgbWFya0Vhcmx5RGVhdGgoKTsKK30KKworYm9vbCBMZWdhY3lSZXF1ZXN0OjpjYW5TdXNw
ZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faGFzUGVuZGluZ0FjdGl2
aXR5OworfQorCitjb25zdCBjaGFyKiBMZWdhY3lSZXF1ZXN0OjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIkxlZ2FjeVJlcXVlc3QiOworfQorCitFdmVudFRhcmdl
dEludGVyZmFjZSBMZWdhY3lSZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIElEQlJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7Cit9CisKK2Jv
b2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOworICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7CisgICAgQVNTRVJUKG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKKyAgICBBU1NF
UlQobV9lbnF1ZXVlZEV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5U3RhdGUgPCBET05FLCAiV2hlbiBkaXNwYXRjaGluZyBl
dmVudCAlcywgbV9yZWFkeVN0YXRlIDwgRE9ORSglZCksIHdhcyAlZCIsIGV2ZW50LT50eXBlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgRE9ORSwgbV9yZWFkeVN0YXRlKTsKKworICAgIERPTVJl
cXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9yZXF1ZXN0U3RhdGUpOworCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICAgICAgbV9yZWFkeVN0
YXRlID0gRE9ORTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9
PSBldmVudC5nZXQoKSkKKyAgICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwor
ICAgIH0KKworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOworICAgIHRh
cmdldHMuYXBwZW5kKHRoaXMpOworICAgIGlmIChtX3RyYW5zYWN0aW9uICYmICFtX3ByZXZlbnRQ
cm9wYWdhdGlvbikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uKTsKKyAg
ICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0
aCBhIGRhdGFiYXNlIGJ1dAorICAgICAgICAvLyB0aGF0IGRvIG5vdCBoYXZlIGEgdHJhbnNhY3Rp
b24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3ZSBuZWVkCisgICAgICAgIC8vIHRoaXMg
b2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGRhdGFiYXNlICh0byBl
bnN1cmUKKyAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUpLgorICAgICAgICB0YXJnZXRzLmFwcGVu
ZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKKyAgICB9CisKKyAgICAvLyBDdXJzb3IgcHJvcGVydGll
cyBzaG91bGQgbm90IHVwZGF0ZWQgdW50aWwgdGhlIHN1Y2Nlc3MgZXZlbnQgaXMgYmVpbmcgZGlz
cGF0Y2hlZC4KKyAgICBSZWZQdHI8TGVnYWN5Q3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKKyAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50KSB7CisgICAgICAg
IGN1cnNvclRvTm90aWZ5ID0gZ2V0UmVzdWx0Q3Vyc29yKCk7CisgICAgICAgIGlmIChjdXJzb3JU
b05vdGlmeSkgeworICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnNldFZhbHVlUmVhZHkocmVx
dWVzdFN0YXRlKCksIG1fY3Vyc29yS2V5LnJlbGVhc2UoKSwgbV9jdXJzb3JQcmltYXJ5S2V5LnJl
bGVhc2UoKSwgbV9jdXJzb3JWYWx1ZSk7CisgICAgICAgICAgICBtX2N1cnNvclZhbHVlLmNsZWFy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSB7CisgICAgICAgIEFTU0VSVCghbV9kaWRGaXJlVXBn
cmFkZU5lZWRlZEV2ZW50KTsKKyAgICAgICAgbV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQg
ZGlzcGF0Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVu
dCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQsICJldmVudCB0eXBlIHdhcyAlcyIsIGV2ZW50
LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgY29uc3QgYm9vbCBzZXRUcmFu
c2FjdGlvbkFjdGl2ZSA9IG1fdHJhbnNhY3Rpb24gJiYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdy
YWRlbmVlZGVkRXZlbnQgfHwgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZl
bnQgJiYgbV9lcnJvckNvZGUgIT0gSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsK
KworICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2ZSkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+
c2V0QWN0aXZlKHRydWUpOworCisgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKworICAgIGlmICht
X3RyYW5zYWN0aW9uKSB7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gRE9ORSkKKyAgICAg
ICAgICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworCisgICAgICAg
IC8vIFBvc3NpYmx5IGFib3J0IHRoZSB0cmFuc2FjdGlvbi4gVGhpcyBtdXN0IG9jY3VyIGFmdGVy
IHVucmVnaXN0ZXJpbmcgKHNvIHRoaXMgcmVxdWVzdAorICAgICAgICAvLyBkb2Vzbid0IHJlY2Vp
dmUgYSBzZWNvbmQgZXJyb3IpIGFuZCBiZWZvcmUgZGVhY3RpdmF0aW5nICh3aGljaCBtaWdodCB0
cmlnZ2VyIGNvbW1pdCkuCisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50ICYmIGRvbnRQcmV2ZW50RGVmYXVsdCAmJiAhbV9yZXF1ZXN0QWJvcnRlZCkg
eworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0RXJyb3IobV9lcnJvciwgbV9lcnJvck1l
c3NhZ2UpOworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoSUdOT1JFX0VYQ0VQVElP
Tik7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCByZXF1ZXN0
IGluIHRoZSB0cmFuc2FjdGlvbidzIGxpc3QsIGl0IG1heSBjb21taXQgaGVyZS4KKyAgICAgICAg
aWYgKHNldFRyYW5zYWN0aW9uQWN0aXZlKQorICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0
QWN0aXZlKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCisgICAgICAg
IGN1cnNvclRvTm90aWZ5LT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOworCisgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBET05FICYmICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5p
c2hlZCkgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50
KQorICAgICAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOworCisgICAgcmV0dXJuIGRv
bnRQcmV2ZW50RGVmYXVsdDsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0Ojp1bmNhdWdodEV4Y2Vw
dGlvbkluRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV90cmFuc2FjdGlvbiAmJiAhbV9yZXF1
ZXN0QWJvcnRlZCkgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihET01FcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0YWJhc2VFeGNl
cHRpb246OkFib3J0RXJyb3IpKSwgIlVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBldmVudCBoYW5kbGVy
LiIpOworICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNw
YXRjaCgpCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSk7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBE
T05FKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBtX3RyYW5z
YWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX3JlYWR5U3RhdGUgPSBQRU5ESU5HOworfQorCit2b2lk
IExlZ2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERP
TkUpOworCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5
U3RhdGUgPT0gUEVORElORyB8fCBtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQsICJXaGVuIHF1
ZXVlaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgd2FzICVkIiwgZXZlbnQtPnR5cGUoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBtX3JlYWR5U3RhdGUpOworCisgICAgZXZlbnQtPnNldFRhcmdl
dCh0aGlzKTsKKworICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUo
KS5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkpKQorICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFw
cGVuZChldmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVx
dWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJl
cXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdmZDUwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeVJlcXVlc3QuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZWdhY3lSZXF1ZXN0X2gKKyNkZWZpbmUg
TGVnYWN5UmVxdWVzdF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUVycm9yLmgiCisjaW5jbHVkZSAi
RE9NUmVxdWVzdFN0YXRlLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VD
YWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGVn
YWN5QW55LmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTGVnYWN5VHJhbnNhY3Rpb247CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIExlZ2FjeVJlcXVlc3QgOiBwdWJsaWMgSURCT3BlbkRCUmVxdWVzdCwg
cHVibGljIElEQkNhbGxiYWNrcyB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxMZWdhY3lSZXF1
ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0aW9uKik7CisgICAgc3RhdGljIFJlZjxMZWdhY3lSZXF1
ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIExlZ2FjeVRyYW5zYWN0aW9u
Kik7CisgICAgdmlydHVhbCB+TGVnYWN5UmVxdWVzdCgpOworCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdCBvdmVycmlkZSBmaW5hbDsK
KyAgICBQYXNzUmVmUHRyPExlZ2FjeUFueT4gbGVnYWN5UmVzdWx0KEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGVycm9yQ29kZShFeGNlcHRpb25Db2RlJikgY29u
c3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJv
cihFeGNlcHRpb25Db2RlJikgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiByZWFkeVN0YXRlKCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWw7CisKKyAgICB2b2lkIHByZXZlbnRQcm9wYWdhdGlvbigpIHsgbV9wcmV2ZW50
UHJvcGFnYXRpb24gPSB0cnVlOyB9CisKKyAgICB2b2lkIG1hcmtFYXJseURlYXRoKCk7CisgICAg
dm9pZCBzZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24pOworICAgIHZvaWQgc2V0UGVuZGluZ0N1cnNvcihQYXNzUmVmUHRyPExl
Z2FjeUN1cnNvcj4pOworICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7CisgICAgdm9pZCBhYm9ydCgp
OworCisgICAgLy8gSURCQ2FsbGJhY2tzCisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lk
IG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KSBvdmVycmlkZSBmaW5hbDsKKyAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4pIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJL
ZXk+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIG9uU3Vj
Y2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIFBhc3NSZWZQdHI8SURCS2V5PiwgY29uc3Qg
SURCS2V5UGF0aCYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
aW50NjRfdCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcygpIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJL
ZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpIG92ZXJy
aWRlOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxl
cigpIG92ZXJyaWRlIGZpbmFsOworCisgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZl
bnQ7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92
ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCk7CisK
KyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgeyByZXR1cm4gbV90
YXNrVHlwZTsgfQorCisgICAgRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUoKSB7IHJldHVy
biAmbV9yZXF1ZXN0U3RhdGU7IH0KKworICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCisgICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHVzaW5nIElE
QkNhbGxiYWNrczo6cmVmOworICAgIHVzaW5nIElEQkNhbGxiYWNrczo6ZGVyZWY7CisKK3Byb3Rl
Y3RlZDoKKyAgICBMZWdhY3lSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPExlZ2FjeUFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBMZWdh
Y3lUcmFuc2FjdGlvbiopOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Q7CisgICAgdm9p
ZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwor
ICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
KTsKKworICAgIFJlZlB0cjxMZWdhY3lBbnk+IG1fcmVzdWx0OworICAgIHVuc2lnbmVkIHNob3J0
IG1fZXJyb3JDb2RlOworICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKKyAgICBSZWZQdHI8RE9N
RXJyb3I+IG1fZXJyb3I7CisgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOworICAgIFJlZlB0cjxM
ZWdhY3lUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKKyAgICBib29sIG1fcmVxdWVzdEFib3J0ZWQ7IC8vIE1heSBiZSBhYm9ydGVkIGJ5IHRy
YW5zYWN0aW9uIHRoZW4gcmVjZWl2ZSBhc3luYyBvbnN1Y2Nlc3M7IGlnbm9yZSB2cy4gYXNzZXJ0
LgorCitwcml2YXRlOgorICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCisgICAgdm9pZCBzdG9w
KCkgb3ZlcnJpZGU7CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gRXZlbnRUYXJnZXQgQVBJLgorICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVy
ZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQorCisgICAgUmVmUHRy
PExlZ2FjeUN1cnNvcj4gZ2V0UmVzdWx0Q3Vyc29yKCk7CisgICAgdm9pZCBzZXRSZXN1bHRDdXJz
b3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwor
CisgICAgUmVmUHRyPExlZ2FjeUFueT4gbV9zb3VyY2U7CisgICAgY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworCisgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rp
dml0eTsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9lbnF1ZXVlZEV2ZW50czsKKworICAg
IC8vIE9ubHkgdXNlZCBpZiB0aGUgcmVzdWx0IHR5cGUgd2lsbCBiZSBhIGN1cnNvci4KKyAgICBJ
bmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIG1fY3Vyc29yRGlyZWN0aW9uOworICAgIGJvb2wgbV9jdXJzb3JGaW5pc2hlZDsK
KyAgICBSZWZQdHI8TGVnYWN5Q3Vyc29yPiBtX3BlbmRpbmdDdXJzb3I7CisgICAgUmVmUHRyPElE
QktleT4gbV9jdXJzb3JLZXk7CisgICAgUmVmUHRyPElEQktleT4gbV9jdXJzb3JQcmltYXJ5S2V5
OworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3Vyc29yVmFsdWU7CisgICAgYm9vbCBt
X2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQ7CisgICAgYm9vbCBtX3ByZXZlbnRQcm9wYWdhdGlv
bjsKKworICAgIERPTVJlcXVlc3RTdGF0ZSBtX3JlcXVlc3RTdGF0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
ZW5kaWYgLy8gTGVnYWN5UmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWNmNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9u
LmNwcApAQCAtMCwwICsxLDM4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMZWdhY3lUcmFuc2FjdGlvbi5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJJREJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURC
RXZlbnREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKKyNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIK
KyNpbmNsdWRlICJMZWdhY3lDdXJzb3IuaCIKKyNpbmNsdWRlICJMZWdhY3lPYmplY3RTdG9yZS5o
IgorI2luY2x1ZGUgIkxlZ2FjeU9wZW5EQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlZjxMZWdhY3lUcmFuc2FjdGlvbj4gTGVnYWN5VHJhbnNhY3Rpb246OmNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90IGlkLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9k
ZSwgTGVnYWN5RGF0YWJhc2UqIGRiKQoreworICAgIExlZ2FjeU9wZW5EQlJlcXVlc3QqIG9wZW5E
QlJlcXVlc3QgPSBudWxscHRyOworICAgIFJlZjxMZWdhY3lUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24oYWRvcHRSZWYoKm5ldyBMZWdhY3lUcmFuc2FjdGlvbihjb250ZXh0LCBpZCwgb2JqZWN0U3Rv
cmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSkp
KTsKKyAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHRyYW5z
YWN0aW9uOworfQorCitSZWY8TGVnYWN5VHJhbnNhY3Rpb24+IExlZ2FjeVRyYW5zYWN0aW9uOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50NjRfdCBpZCwgTGVnYWN5
RGF0YWJhc2UqIGRiLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQoreworICAgIFJlZjxMZWdhY3lU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYoKm5ldyBMZWdhY3lUcmFuc2FjdGlvbihj
b250ZXh0LCBpZCwgVmVjdG9yPFN0cmluZz4oKSwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6
OlZlcnNpb25DaGFuZ2UsIGRiLCBvcGVuREJSZXF1ZXN0LCBwcmV2aW91c01ldGFkYXRhKSkpOwor
ICAgIHRyYW5zYWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gdHJhbnNhY3Rp
b247Cit9CisKK0xlZ2FjeVRyYW5zYWN0aW9uOjpMZWdhY3lUcmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90IGlkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
b2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSwgTGVnYWN5
RGF0YWJhc2UqIGRiLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQorICAgIDogSURCVHJhbnNhY3Rp
b24oY29udGV4dCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX2RhdGFiYXNlKGRiKQorICAgICwg
bV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlTmFtZXMpCisgICAgLCBtX29wZW5EQlJlcXVl
c3Qob3BlbkRCUmVxdWVzdCkKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9zdGF0ZShBY3Rp
dmUpCisgICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQorICAgICwgbV9jb250ZXh0U3Rv
cHBlZChmYWxzZSkKKyAgICAsIG1fcHJldmlvdXNNZXRhZGF0YShwcmV2aW91c01ldGFkYXRhKQor
eworICAgIGlmIChtb2RlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hh
bmdlKSB7CisgICAgICAgIC8vIE5vdCBhY3RpdmUgdW50aWwgdGhlIGNhbGxiYWNrLgorICAgICAg
ICBtX3N0YXRlID0gSW5hY3RpdmU7CisgICAgfQorCisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5j
ZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9w
dGlvblJlcXVpcmVtZW50KCk7CisgICAgaWYgKG1fc3RhdGUgPT0gQWN0aXZlKQorICAgICAgICBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFuc2FjdGlvbih0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNyZWF0ZWQodGhpcyk7Cit9CisKK0xlZ2FjeVRyYW5z
YWN0aW9uOjp+TGVnYWN5VHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IEZp
bmlzaGVkIHx8IG1fY29udGV4dFN0b3BwZWQpOworICAgIEFTU0VSVChtX3JlcXVlc3RMaXN0Lmlz
RW1wdHkoKSB8fCBtX2NvbnRleHRTdG9wcGVkKTsKK30KKworY29uc3QgU3RyaW5nJiBMZWdhY3lU
cmFuc2FjdGlvbjo6bW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1vZGVUb1N0cmluZyhtX21v
ZGUpOworfQorCitJREJEYXRhYmFzZSogTGVnYWN5VHJhbnNhY3Rpb246OmRiKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlv
bjo6c2V0RXJyb3IoUGFzc1JlZlB0cjxET01FcnJvcj4gZXJyb3IsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKKyAgICBBU1NF
UlQoZXJyb3IpOworCisgICAgLy8gVGhlIGZpcnN0IGVycm9yIHRvIGJlIHNldCBpcyB0aGUgdHJ1
ZSBjYXVzZSBvZiB0aGUKKyAgICAvLyB0cmFuc2FjdGlvbiBhYm9ydC4KKyAgICBpZiAoIW1fZXJy
b3IpIHsKKyAgICAgICAgbV9lcnJvciA9IGVycm9yOworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IGVycm9yTWVzc2FnZTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IExl
Z2FjeVRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29i
amVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBpZiAoIWlzVmVyc2lvbkNo
YW5nZSgpICYmICFtX29iamVjdFN0b3JlTmFtZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbV9kYXRhYmFzZS0+Zmlu
ZE9iamVjdFN0b3JlSWQobmFtZSk7CisgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChpc1ZlcnNpb25DaGFu
Z2UoKSk7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhID0gbV9kYXRhYmFzZS0+bWV0YWRhdGEoKTsKKworICAgIFJlZlB0cjxMZWdh
Y3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBMZWdhY3lPYmplY3RTdG9yZTo6Y3JlYXRlKG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCksIHRoaXMpOworICAgIG9iamVj
dFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgcmV0dXJuIG9iamVjdFN0b3Jl
LnJlbGVhc2UoKTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVDcmVh
dGVkKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gcHJw
T2JqZWN0U3RvcmUpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOworICAgIFJl
ZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKKyAg
ICBtX29iamVjdFN0b3JlTWFwLnNldChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgaWYgKGlzVmVy
c2lvbkNoYW5nZSgpKQorICAgICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5zZXQob2JqZWN0
U3RvcmUsIG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2Fj
dGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NF
UlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7CisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsK
KyAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZp
bmQobmFtZSk7CisgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpIHsKKyAgICAg
ICAgUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGl0LT52YWx1ZTsKKyAg
ICAgICAgbV9vYmplY3RTdG9yZU1hcC5yZW1vdmUobmFtZSk7CisgICAgICAgIG9iamVjdFN0b3Jl
LT5tYXJrRGVsZXRlZCgpOworICAgICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5zZXQob2Jq
ZWN0U3RvcmUsIG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbV9kZWxldGVkT2Jq
ZWN0U3RvcmVzLmFkZChvYmplY3RTdG9yZSk7CisgICAgfQorfQorCit2b2lkIExlZ2FjeVRyYW5z
YWN0aW9uOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lUcmFuc2FjdGlvbjo6c2V0QWN0aXZlKCVzKSBmb3IgdHJhbnNhY3Rpb24gaWQgJWxsaSIs
IGFjdGl2ZSA/ICJ0cnVlIiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9pZCkp
OworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdGF0ZSAhPSBGaW5pc2hlZCwgIkEgZmluaXNo
ZWQgdHJhbnNhY3Rpb24gdHJpZWQgdG8gc2V0QWN0aXZlKCVzKSIsIGFjdGl2ZSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGluZykKKyAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChhY3RpdmUgIT0gKG1fc3RhdGUgPT0gQWN0aXZlKSk7CisgICAgbV9zdGF0
ZSA9IGFjdGl2ZSA/IEFjdGl2ZSA6IEluYWN0aXZlOworCisgICAgaWYgKCFhY3RpdmUgJiYgbV9y
ZXF1ZXN0TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIGJhY2tlbmREQigpLT5jb21taXQobV9pZCk7
Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmFib3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGluZyB8fCBtX3N0YXRlID09IEZpbmlzaGVkKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKKworICAg
IHdoaWxlICghbV9yZXF1ZXN0TGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPExlZ2Fj
eVJlcXVlc3Q+IHJlcXVlc3QgPSAqbV9yZXF1ZXN0TGlzdC5iZWdpbigpOworICAgICAgICBtX3Jl
cXVlc3RMaXN0LnJlbW92ZShyZXF1ZXN0KTsKKyAgICAgICAgcmVxdWVzdC0+YWJvcnQoKTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOworICAg
IGJhY2tlbmREQigpLT5hYm9ydChtX2lkKTsKK30KKworTGVnYWN5VHJhbnNhY3Rpb246Ok9wZW5D
dXJzb3JOb3RpZmllcjo6T3BlbkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8TGVnYWN5VHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uLCBMZWdhY3lDdXJzb3IqIGN1cnNvcikKKyAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX2N1cnNvcihjdXJzb3IpCit7CisgICAgbV90cmFu
c2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vyc29yKTsKK30KKworTGVnYWN5VHJhbnNh
Y3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6fk9wZW5DdXJzb3JOb3RpZmllcigpCit7CisgICAg
aWYgKG1fY3Vyc29yKQorICAgICAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNv
cihtX2N1cnNvcik7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3Rp
Zmllcjo6Y3Vyc29yRmluaXNoZWQoKQoreworICAgIGlmIChtX2N1cnNvcikgeworICAgICAgICBt
X3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcihtX2N1cnNvcik7CisgICAgICAgIG1f
Y3Vyc29yID0gbnVsbHB0cjsKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAg
fQorfQorCit2b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjpyZWdpc3Rlck9wZW5DdXJzb3IoTGVnYWN5
Q3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwor
dm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoTGVnYWN5Q3Vyc29y
KiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKK30KKwordm9p
ZCBMZWdhY3lUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCit7CisgICAgSGFzaFNldDxM
ZWdhY3lDdXJzb3IqPiBjdXJzb3JzOworICAgIGN1cnNvcnMuc3dhcChtX29wZW5DdXJzb3JzKTsK
KyAgICBmb3IgKGF1dG8mIGN1cnNvciA6IGN1cnNvcnMpCisgICAgICAgIGN1cnNvci0+Y2xvc2Uo
KTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6cmVnaXN0ZXJSZXF1ZXN0KExlZ2FjeVJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIEFTU0VSVChtX3N0
YXRlID09IEFjdGl2ZSk7CisgICAgbV9yZXF1ZXN0TGlzdC5hZGQocmVxdWVzdCk7Cit9CisKK3Zv
aWQgTGVnYWN5VHJhbnNhY3Rpb246OnVucmVnaXN0ZXJSZXF1ZXN0KExlZ2FjeVJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIC8vIElmIHdlIGFib3J0ZWQgdGhl
IHJlcXVlc3QsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICBtX3JlcXVl
c3RMaXN0LnJlbW92ZShyZXF1ZXN0KTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6b25B
Ym9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKQoreworICAgIExPRyhT
dG9yYWdlQVBJLCAiTGVnYWN5VHJhbnNhY3Rpb246Om9uQWJvcnQiKTsKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBwcnBFcnJvcjsKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBG
aW5pc2hlZCk7CisKKyAgICBpZiAobV9zdGF0ZSAhPSBGaW5pc2hpbmcpIHsKKyAgICAgICAgQVNT
RVJUKGVycm9yLmdldCgpKTsKKyAgICAgICAgc2V0RXJyb3IoRE9NRXJyb3I6OmNyZWF0ZShlcnJv
ci0+bmFtZSgpKSwgZXJyb3ItPm1lc3NhZ2UoKSk7CisKKyAgICAgICAgLy8gQWJvcnQgd2FzIG5v
dCB0cmlnZ2VyZWQgYnkgZnJvbnQtZW5kLCBzbyBvdXRzdGFuZGluZyByZXF1ZXN0cyBtdXN0Cisg
ICAgICAgIC8vIGJlIGFib3J0ZWQgbm93LgorICAgICAgICB3aGlsZSAoIW1fcmVxdWVzdExpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9
ICptX3JlcXVlc3RMaXN0LmJlZ2luKCk7CisgICAgICAgICAgICBtX3JlcXVlc3RMaXN0LnJlbW92
ZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmFib3J0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKKyAgICB9CisKKyAgICBpZiAoaXNWZXJzaW9uQ2hh
bmdlKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVD
bGVhbnVwTWFwKQorICAgICAgICAgICAgb2JqZWN0U3RvcmUua2V5LT5zZXRNZXRhZGF0YShvYmpl
Y3RTdG9yZS52YWx1ZSk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldE1ldGFkYXRhKG1fcHJldmlv
dXNNZXRhZGF0YSk7CisgICAgICAgIG1fZGF0YWJhc2UtPmNsb3NlKCk7CisgICAgfQorICAgIG1f
b2JqZWN0U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7CisgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwor
CisgICAgLy8gRW5xdWV1ZSBldmVudHMgYmVmb3JlIG5vdGlmeWluZyBkYXRhYmFzZSwgYXMgZGF0
YWJhc2UgbWF5IGNsb3NlIHdoaWNoIGVucXVldWVzIG1vcmUgZXZlbnRzIGFuZCBvcmRlciBtYXR0
ZXJzLgorICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50LCB0cnVlLCBmYWxzZSkpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQo
dGhpcyk7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246Om9uQ29tcGxldGUoKQoreworICAg
IExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5VHJhbnNhY3Rpb246Om9uQ29tcGxldGUiKTsKKyAgICBB
U1NFUlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7CisgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKKyAg
ICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5jbGVhcigpOworICAgIGNsb3NlT3BlbkN1cnNvcnMo
KTsKKworICAgIC8vIEVucXVldWUgZXZlbnRzIGJlZm9yZSBub3RpZnlpbmcgZGF0YWJhc2UsIGFz
IGRhdGFiYXNlIG1heSBjbG9zZSB3aGljaCBlbnF1ZXVlcyBtb3JlIGV2ZW50cyBhbmQgb3JkZXIg
bWF0dGVycy4KKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29t
cGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25G
aW5pc2hlZCh0aGlzKTsKK30KKworYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNo
b3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMgYSBvciBjYW4KKyAgICAvLyAg
ICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIG9yIGFueSBjaGlsZCByZXF1ZXN0IG9iamVjdCBhbmQg
YW55IG9mIHRob3NlIGhhdmUKKyAgICAvLyAgICAgICAgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlz
ICBpbiBvcmRlciB0byBoYW5kbGUgdXNlciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5LgorICAg
IHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eSAmJiAhbV9jb250ZXh0U3RvcHBlZDsKK30KKwor
Ym9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRj
aEV2ZW50Iik7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOworICAgIEFTU0VSVCht
X2hhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CisgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKKyAgICBtX3N0YXRlID0g
RmluaXNoZWQ7CisKKyAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIGZvciAoYXV0
byYgb2JqZWN0U3RvcmUgOiBtX29iamVjdFN0b3JlTWFwKQorICAgICAgICBvYmplY3RTdG9yZS52
YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOworICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIo
KTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9kZWxldGVkT2JqZWN0U3RvcmVzKQor
ICAgICAgICBvYmplY3RTdG9yZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOworICAgIG1fZGVsZXRl
ZE9iamVjdFN0b3Jlcy5jbGVhcigpOworCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+
IHRhcmdldHM7CisgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CisgICAgdGFyZ2V0cy5hcHBlbmQo
ZGIoKSk7CisKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0
Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KKyAgICBBU1NFUlQoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKKyAgICBib29sIHJldHVyblZhbHVlID0gSURC
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CisgICAgLy8g
RklYTUU6IFRyeSB0byBjb25zdHJ1Y3QgYSB0ZXN0IHdoZXJlIHx0aGlzfCBvdXRsaXZlcyBvcGVu
REJSZXF1ZXN0IGFuZCB3ZQorICAgIC8vIGdldCBhIGNyYXNoLgorICAgIGlmIChtX29wZW5EQlJl
cXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICAgICAgbV9v
cGVuREJSZXF1ZXN0LT50cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCk7CisgICAgfQor
ICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7CisgICAgcmV0dXJuIHJldHVyblZhbHVl
OworfQorCitib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgd2UgY2FuIHN1c3BlbmQgYmVmb3Jl
IHRoZSBmaXJzdCByZXF1ZXN0IGlzIHNjaGVkdWxlCisgICAgLy8gICAgICAgIGFuZCBhZnRlciB0
aGUgY29tcGxldGUvYWJvcnQgZXZlbnQgaXMgZW5xdWV1ZWQuCisgICAgcmV0dXJuIG1fc3RhdGUg
PT0gRmluaXNoZWQ7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OnN0b3AoKQoreworICAg
IG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOworCisgICAgYWJvcnQoSUdOT1JFX0VYQ0VQVElPTik7
Cit9CisKK2NvbnN0IGNoYXIqIExlZ2FjeVRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIkxlZ2FjeVRyYW5zYWN0aW9uIjsKK30KKwordm9pZCBM
ZWdhY3lUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQor
eworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdGF0ZSAhPSBGaW5pc2hlZCwgIkEgZmluaXNo
ZWQgdHJhbnNhY3Rpb24gdHJpZWQgdG8gZW5xdWV1ZSBhbiBldmVudCBvZiB0eXBlICVzLiIsIGV2
ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1fY29udGV4dFN0
b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworfQorCitJREJEYXRhYmFzZUJhY2tl
bmQqIExlZ2FjeVRyYW5zYWN0aW9uOjpiYWNrZW5kREIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RhdGFiYXNlLT5iYWNrZW5kKCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jMzllOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmgKQEAgLTAsMCArMSwxNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIExlZ2FjeVRyYW5zYWN0aW9uX2gKKyNkZWZpbmUgTGVnYWN5VHJh
bnNhY3Rpb25faAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01FcnJvci5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uLmgiCisjaW5jbHVkZSAiSW5kZXhlZERCLmgiCisjaW5jbHVkZSAiTGVnYWN5RGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZDsKK2Ns
YXNzIElEQkRhdGFiYXNlRXJyb3I7CitjbGFzcyBMZWdhY3lDdXJzb3I7CitjbGFzcyBMZWdhY3lP
YmplY3RTdG9yZTsKK2NsYXNzIExlZ2FjeU9wZW5EQlJlcXVlc3Q7CitzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTsKKworY2xhc3MgTGVnYWN5VHJhbnNhY3Rpb24gZmluYWwgOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TGVnYWN5VHJhbnNhY3Rp
b24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgaW50NjRfdCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlLCBM
ZWdhY3lEYXRhYmFzZSopOworICAgIHN0YXRpYyBSZWY8TGVnYWN5VHJhbnNhY3Rpb24+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgaW50NjRfdCwgTGVnYWN5RGF0YWJhc2UqLCBMZWdh
Y3lPcGVuREJSZXF1ZXN0KiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgcHJldmlvdXNNZXRh
ZGF0YSk7CisgICAgdmlydHVhbCB+TGVnYWN5VHJhbnNhY3Rpb24oKTsKKworICAgIElEQkRhdGFi
YXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7CisKKyAgICBpbnQ2NF90IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IEFjdGl2ZTsgfQorICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gRmluaXNoZWQ7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVy
biBtX21vZGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5OyB9CisgICAg
Ym9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U7IH0KKworICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nJiBtb2RlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJEYXRh
YmFzZSogZGIoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RE9NRXJyb3I+IGVycm9yKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9lcnJvcjsg
fQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmly
dHVhbCB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGNs
YXNzIE9wZW5DdXJzb3JOb3RpZmllciB7CisgICAgcHVibGljOgorICAgICAgICBPcGVuQ3Vyc29y
Tm90aWZpZXIoUGFzc1JlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4sIExlZ2FjeUN1cnNvciopOwor
ICAgICAgICB+T3BlbkN1cnNvck5vdGlmaWVyKCk7CisgICAgICAgIHZvaWQgY3Vyc29yRmluaXNo
ZWQoKTsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247CisgICAgICAgIExlZ2FjeUN1cnNvciogbV9jdXJzb3I7CisgICAgfTsKKwor
ICAgIHZvaWQgcmVnaXN0ZXJSZXF1ZXN0KExlZ2FjeVJlcXVlc3QqKTsKKyAgICB2b2lkIHVucmVn
aXN0ZXJSZXF1ZXN0KExlZ2FjeVJlcXVlc3QqKTsKKyAgICB2b2lkIG9iamVjdFN0b3JlQ3JlYXRl
ZChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPik7CisgICAgdm9p
ZCBvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRBY3RpdmUo
Ym9vbCk7CisgICAgdm9pZCBzZXRFcnJvcihQYXNzUmVmUHRyPERPTUVycm9yPiwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgdm9pZCBvbkFib3J0KFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4pOworICAgIHZvaWQgb25Db21wbGV0ZSgpOworCisgICAgLy8gRXZlbnRUYXJn
ZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gSURCVHJhbnNhY3Rpb25FdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7IH0KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBBY3Rp
dmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQorCisgICAgdXNpbmcgRXZl
bnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFsOworCisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOworCitwcml2YXRlOgorICAgIExlZ2FjeVRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlLCBMZWdhY3lEYXRhYmFzZSosIExlZ2FjeU9wZW5EQlJlcXVlc3QqLCBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CisKKyAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50Pik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CisKKyAgICB2b2lkIHJl
Z2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3IqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJPcGVu
Q3Vyc29yKExlZ2FjeUN1cnNvciopOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KKyAg
ICBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHN0b3AoKSBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBFdmVudFRhcmdldCBBUEkuCisgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9CisKKyAgICBlbnVtIFN0
YXRlIHsKKyAgICAgICAgSW5hY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRlZCwgYnV0IG5vdCBp
biBhbiBldmVudCBjYWxsYmFjaworICAgICAgICBBY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRl
ZCwgaW4gY3JlYXRpb24gc2NvcGUgb3IgYW4gZXZlbnQgY2FsbGJhY2sKKyAgICAgICAgRmluaXNo
aW5nLCAvLyBJbiB0aGUgcHJvY2VzcyBvZiBhYm9ydGluZyBvciBjb21wbGV0aW5nLgorICAgICAg
ICBGaW5pc2hlZCwgLy8gTm8gbW9yZSBldmVudHMgd2lsbCBmaXJlIGFuZCBubyBuZXcgcmVxdWVz
dHMgbWF5IGJlIGZpbGVkLgorICAgIH07CisKKyAgICBpbnQ2NF90IG1faWQ7CisgICAgUmVmUHRy
PExlZ2FjeURhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1f
b2JqZWN0U3RvcmVOYW1lczsKKyAgICBMZWdhY3lPcGVuREJSZXF1ZXN0KiBtX29wZW5EQlJlcXVl
c3Q7CisgICAgY29uc3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOworICAgIFN0
YXRlIG1fc3RhdGU7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKKyAgICBib29sIG1f
Y29udGV4dFN0b3BwZWQ7CisgICAgUmVmUHRyPERPTUVycm9yPiBtX2Vycm9yOworICAgIFN0cmlu
ZyBtX2Vycm9yTWVzc2FnZTsKKworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxMZWdhY3lSZXF1ZXN0
Pj4gbV9yZXF1ZXN0TGlzdDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxM
ZWdhY3lPYmplY3RTdG9yZT4+IElEQk9iamVjdFN0b3JlTWFwOworICAgIElEQk9iamVjdFN0b3Jl
TWFwIG1fb2JqZWN0U3RvcmVNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPExlZ2Fj
eU9iamVjdFN0b3JlPj4gSURCT2JqZWN0U3RvcmVTZXQ7CisgICAgSURCT2JqZWN0U3RvcmVTZXQg
bV9kZWxldGVkT2JqZWN0U3RvcmVzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxMZWdh
Y3lPYmplY3RTdG9yZT4sIElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQk9iamVjdFN0b3JlTWV0
YWRhdGFNYXA7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YU1hcCBtX29iamVjdFN0b3JlQ2xl
YW51cE1hcDsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1fcHJldmlvdXNNZXRhZGF0YTsKKwor
ICAgIEhhc2hTZXQ8TGVnYWN5Q3Vyc29yKj4gbV9vcGVuQ3Vyc29yczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
ZW5kaWYgLy8gTGVnYWN5VHJhbnNhY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWRjNWRiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCIK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50KHVuc2ln
bmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCisgICAgOiBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQoZXZlbnRUeXBlKQorICAgICwgbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24pCisgICAgLCBtX25l
d1ZlcnNpb24obmV3VmVyc2lvbikKK3sKK30KKworTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Ojp+
TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50KCkKK3sKK30KKworRXZlbnRJbnRlcmZhY2UgTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IElEQlZlcnNpb25DaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1Yjc0MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lWZXJzaW9u
Q2hhbmdlRXZlbnQuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZWdhY3lWZXJz
aW9uQ2hhbmdlRXZlbnRfaAorI2RlZmluZSBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnRfaAorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgSURCVmVyc2lvbkNoYW5n
ZUV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVu
dD4gY3JlYXRlKHVuc2lnbmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uID0gMCwgdW5zaWduZWQgbG9u
ZyBsb25nIG5ld1ZlcnNpb24gPSAwLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IEF0
b21pY1N0cmluZygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50KG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50VHlwZSkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgfkxlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudCgpOworCisgICAg
dmlydHVhbCB1aW50NjRfdCBvbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1
cm4gbV9vbGRWZXJzaW9uOyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBuZXdWZXJzaW9uKCkgY29u
c3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9uZXdWZXJzaW9uOyB9CisKKyAgICB2aXJ0dWFs
IEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisK
K3ByaXZhdGU6CisgICAgTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50KHVuc2lnbmVkIGxvbmcgbG9u
ZyBvbGRWZXJzaW9uLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpOworCisgICAgdWludDY0X3QgbV9vbGRWZXJzaW9uOworICAgIHVp
bnQ2NF90IG1fbmV3VmVyc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gTGVnYWN5VmVyc2lv
bkNoYW5nZUV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCmluZGV4IDYxYmFjZDAuLmQzMWNiZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNjc3NSw3ICs2Nzc1LDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXERPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGlu
ZGV4ZWRkYlxJREJBbnkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxl
c1xpbmRleGVkZGJcSURCQ3Vyc29yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvckJhY2tlbmQuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcbGVnYWN5XElEQkN1cnNvckJhY2tlbmQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURC
RGF0YWJhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcSURCRmFjdG9yeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJJbmRleC5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzJmNzU4Zi4uNTRlYzg1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTkwNiwxNSArMTkwNiwxOCBAQAogCQk1MTAxOTJEMjE4QjZCOUFCMDA3RkM3QTEgLyogSW1h
Z2VDb250cm9sc1Jvb3RFbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTAxOTJEMDE4QjZCOUFCMDA3RkM3QTEgLyogSW1hZ2VDb250cm9s
c1Jvb3RFbGVtZW50TWFjLmggKi87IH07CiAJCTUxMDE5MkQ1MThCNkI5QjcwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwMTkyRDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJv
bHNSb290RWxlbWVudC5jcHAgKi87IH07CiAJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDE5MkQ0MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xz
Um9vdEVsZW1lbnQuaCAqLzsgfTsKLQkJNTEwMTk0NDQxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1
cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDE5NDQyMTgzNkY3RTQwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5jcHAgKi87IH07Ci0JCTUxMDE5NDQ1MTgzNkY3RTUwMDkyNTUyMyAvKiBJ
REJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwMTk0NDMxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNTEwNTlEREQxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEwNTlERDkxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuY3BwICovOyB9OwotCQk1MTA1OURERTE4MjBCMTc2MDBERkY5QjEgLyogSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNTlEREExODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5z
YWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MTAzQzJCMTFCQTIyRDFBMDBFMjYzMzcgLyogTGVnYWN5QW55
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1
QjZFMUJBMEE3NjEwMEY3ODlDRSAvKiBMZWdhY3lBbnkuY3BwICovOyB9OworCQk1MTAzQzJCMjFC
QTIzMTc0MDBFMjYzMzcgLyogSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNTAxQjlGODg5QjAwRjc4OUNFIC8qIElE
QlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKKwkJNTEwM0MyQjMxQkEyMzI0RDAwRTI2MzM3IC8qIElE
QkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTY0NUI1NDFCOUY4OEU4MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLzsgfTsKKwkJNTEw
M0MyQjQxQkEyMzJBRTAwRTI2MzM3IC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUI0MjFCOUY4ODlCMDBG
Nzg5Q0UgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLzsgfTsKKwkJNTEwM0MyQjUxQkEyMzJE
NDAwRTI2MzM3IC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjQ0MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJEYXRhYmFz
ZS5jcHAgKi87IH07CisJCTUxMDNDMkI2MUJBMjMzQkYwMEUyNjMzNyAvKiBJREJSZXF1ZXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjRF
MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJSZXF1ZXN0LmNwcCAqLzsgfTsKKwkJNTEwM0MyQjcxQkEy
MzNDNDAwRTI2MzM3IC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNEMxQjlGODg5QjAwRjc4OUNFIC8qIElE
Qk9wZW5EQlJlcXVlc3QuY3BwICovOyB9OworCQk1MTAzQzJCODFCQTIzNUM1MDBFMjYzMzcgLyog
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjUyMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuY3BwICovOyB9OworCQk1MTAzQzJCOTFCQTIzQTI2MDBFMjYzMzcgLyogTGVnYWN5
QW55LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUI2RjFCQTBBNzYxMDBGNzg5Q0UgLyogTGVnYWN5QW55LmggKi87IH07CiAJCTUxMDZEN0JEMThC
REI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNkQ3QkIxOEJEQjc2RjAwMEFCMTY2IC8q
IENvbnRleHRNZW51Q29udGV4dC5jcHAgKi87IH07CiAJCTUxMDZEN0JFMThCREI3NkYwMDBBQjE2
NiAvKiBDb250ZXh0TWVudUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDZEN0JDMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNv
bnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MTBBMzI2RjE4MzE4NDMxMDAzQzUzMjYgLyogSURCU2VydmVyQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQTMyNkUxODMxODQz
MTAwM0M1MzI2IC8qIElEQlNlcnZlckNvbm5lY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MTBCN0RCNzE4MkQ5RjVEMDA5QkY5NTcgLyog
SURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMEI3REI1MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmQuY3BwICovOyB9OwotCQk1MTBCN0RCODE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTBCN0RCNjE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEw
RDRBMzMxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEEyRDEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLzsgfTsKIAkJNTEwRDRBMzQx
MDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMkUxMDMxNjVFRTAwNDlFQTU0
IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5oICovOyB9OwogCQk1MTBENEEzNjEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEEzMDEwMzE2NUVFMDA0OUVBNTQgLyogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAgKi87IH07CkBAIC0xOTUyLDcgKzE5NTUsNiBAQAogCQk1
MTJERDhGQjBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291cmNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkREOEYxMEQ5MUU2QUYwMDBG
ODlFRSAvKiBBcmNoaXZlUmVzb3VyY2UuY3BwICovOyB9OwogCQk1MTJERDhGQzBEOTFFNkFGMDAw
Rjg5RUUgLyogQXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTJERDhGMjBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291
cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTEyREQ4RkQwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVGYWN0b3J5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERDhGMzBEOTFFNkFGMDAwRjg5
RUUgLyogQXJjaGl2ZUZhY3RvcnkuaCAqLzsgfTsKLQkJNTEyRUE5QkMxODFGMkVFMDAwMUQwMUUw
IC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyRUE5QkIxODFGMkVFMDAwMUQwMUUwIC8qIElEQlBlbmRpbmdPcGVu
Q2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxMkVBOUJFMTgyMDI4NTcwMDFEMDFFMCAvKiBJREJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkVBOUJEMTgyMDI4NTcwMDFEMDFF
MCAvKiBJREJPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MTMyN0Q2MDExQTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTMyN0Q1RTEx
QTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50LmggKi87IH07CiAJCTUxMzI3RDYxMTFBMzNB
MkIwMDRGOUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1
bWVudC5jcHAgKi87IH07CkBAIC0xOTg5LDE0ICsxOTkxLDM1IEBACiAJCTUxNEM3NjdEMENFOTIz
QTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVz
b3VyY2VSZXF1ZXN0QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUxNEM3NjdFMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNl
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwICovOyB9
OwogCQk1MTRDNzY3RjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjZBMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxNTdENDY0MUJBMjRBRUUwMDg1Q0Ey
RiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjQ1QjQ2MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJGYWN0b3J5LmNwcCAqLzsg
fTsKKwkJNTE1N0Q0NjUxQkEyNEFGODAwODVDQTJGIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjQ4MUI5Rjg4OUIwMEY3
ODlDRSAvKiBJREJJbmRleC5jcHAgKi87IH07CisJCTUxNTdENDY2MUJBMjRBRkQwMDg1Q0EyRiAv
KiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTY0NUI0QTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT2JqZWN0U3RvcmUuY3Bw
ICovOyB9OwogCQk1MTYwMzAwQjBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lYLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjAzMDBB
MENDNDI1MTIwMEM4QUMyNSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwICovOyB9OwogCQk1MTYwMzA2
QzBDQzQzNjIzMDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjAzMDZCMENDNDM2MjMwMEM4QUMyNSAvKiBG
aWxlU3lzdGVtQ0YuY3BwICovOyB9OwogCQk1MTYwRjQ5ODBCMEFBNzVGMDBDMUQyQUYgLyogSGlz
dG9yeUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTYwRjQ5NzBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gKi87IH07
CiAJCTUxNjJDN0Y0MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMjExRjc3RUZB
MDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwICovOyB9OwogCQk1MTYyQzdGNTExRjc3RUZC
MDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdp
c3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxNjMxMTdEMTg1MTI0MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxMTdDMTg1MTI0
MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcCAqLzsgfTsKLQkJNTE2NzMwQTMx
ODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NzMwQTExODJEOEZCQjAwM0ZBRjVDIC8q
IElEQkN1cnNvckJhY2tlbmQuY3BwICovOyB9OwotCQk1MTY3MzBBNDE4MkQ4RkJCMDAzRkFGNUMg
LyogSURCQ3Vyc29yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NzMwQTIxODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTY0
NUI1QTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjI4MUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lDdXJzb3IuY3BwICovOyB9OworCQk1MTY0NUI1QjFCOUZBNkM4MDBGNzg5Q0UgLyog
TGVnYWN5Q3Vyc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTY0NUIyOTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmggKi87IH07CisJ
CTUxNjQ1QjVDMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMkExQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgKi87IH07CisJCTUxNjQ1
QjVEMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjJCMUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCAqLzsgfTsKKwkJNTE2NDVCNUUxQjlGQTZD
ODAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjJDMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lE
YXRhYmFzZS5jcHAgKi87IH07CisJCTUxNjQ1QjVGMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lE
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2NDVCMkQxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmggKi87IH07CisJCTUx
NjQ1QjYwMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjJFMUI5RjYzOTEwMEY3ODlD
RSAvKiBMZWdhY3lGYWN0b3J5LmNwcCAqLzsgfTsKKwkJNTE2NDVCNjExQjlGQTZDODAwRjc4OUNF
IC8qIExlZ2FjeUZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjQ1QjJGMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmggKi87
IH07CisJCTUxNjQ1QjYyMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lJbmRleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzMDFCOUY2Mzkx
MDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguY3BwICovOyB9OworCQk1MTY0NUI2MzFCOUZBNkM4MDBG
Nzg5Q0UgLyogTGVnYWN5SW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjQ1QjMxMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lJbmRleC5oICov
OyB9OworCQk1MTY0NUI2NDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5T2JqZWN0U3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzIx
QjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9iamVjdFN0b3JlLmNwcCAqLzsgfTsKKwkJNTE2NDVC
NjUxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeU9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzMzFCOUY2MzkxMDBGNzg5Q0Ug
LyogTGVnYWN5T2JqZWN0U3RvcmUuaCAqLzsgfTsKKwkJNTE2NDVCNjYxQjlGQTZDODAwRjc4OUNF
IC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzQxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9wZW5E
QlJlcXVlc3QuY3BwICovOyB9OworCQk1MTY0NUI2NzFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5
T3BlbkRCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2NDVCMzUxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuaCAq
LzsgfTsKKwkJNTE2NDVCNjgxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVJlcXVlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzYxQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeVJlcXVlc3QuY3BwICovOyB9OworCQk1MTY0NUI2OTFCOUZB
NkM4MDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzcxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVJl
cXVlc3QuaCAqLzsgfTsKKwkJNTE2NDVCNkExQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVRyYW5z
YWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNjQ1QjM4MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5jcHAgKi87IH07
CisJCTUxNjQ1QjZCMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzkxQjlGNjM5
MTAwRjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmggKi87IH07CisJCTUxNjQ1QjZDMUI5RkE2
QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCM0ExQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi87IH07CisJCTUxNjQ1QjZEMUI5RkE2
QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNCMUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJNTE2OTUzOTcxMzI5QTNDODAw
QjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2OTUzOTUxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRh
YmFzZUJhc2UuY3BwICovOyB9OwogCQk1MTY5NTM5ODEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRh
dGFiYXNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE2OTUzOTYxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTZCQjc5NDBDRTkx
RTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkJCNzkyMENFOTFFNjgwMDUxMkY3OSAvKiBK
U1RyZWVXYWxrZXJDdXN0b20uY3BwICovOyB9OwpAQCAtMjAwNyw4ICsyMDMwLDYgQEAKIAkJNTE3
NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRDBCMDcyNTlBMDBFRDQ0MkMgLyog
SGlzdG9yeUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFEMEUwQjA3MjU5
QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLzsgfTsKIAkJNTE3NEUyMEExMEExRjQ0RjAw
Rjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50
LmggKi87IH07Ci0JCTUxNzcxQzhFMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tl
bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3
NzFDOEMxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAgKi87IH07Ci0J
CTUxNzcxQzhGMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzcxQzhEMTgyREI0Qjcw
MDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTc5Q0UyNDE5NUM4MTQyMDAxOUMxOTggLyogR2Ft
ZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc5Q0UyMzE5NUM4MTQyMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3OUNFMjYxOTVD
ODIxRDAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc5Q0UyNTE5NUM4MjFEMDAxOUMxOTggLyogR2Ft
ZXBhZFByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJNTE3OUNFMkExOTVDOTE4NjAwMTlDMTk4IC8qIEdh
bWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE3OUNFMjkxOTVDOTE4NjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNs
aWVudC5oICovOyB9OwpAQCAtMjA0NCw3ICsyMDY1LDYgQEAKIAkJNTFBQkI1QjkxODZEMEVEMTAw
ODM5MUExIC8qIElEQk9iamVjdFN0b3JlTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJCNUI3MTg2RDBFRDEwMDgzOTFBMSAvKiBJREJP
YmplY3RTdG9yZU1ldGFkYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTFBQkY2NEQxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJG
NjRDMTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJCTUxQUY1
MDM2MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUxQjA3QTQ0MTgyMzI0OEIwMEFBOEQxQSAvKiBJREJQZW5k
aW5nRGVsZXRlQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFCMDdBNDMxODIzMjQ4QjAwQUE4RDFBIC8qIElEQlBlbmRpbmdEZWxldGVDYWxsLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFCMjQx
N0IwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIyNDE3QTBEOTMxRjNGMDBFODNG
NUMgLyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLzsgfTsKIAkJNTFCNDU0RUExQjREQUU3RDAw
ODVFQUE2IC8qIFBpbmdIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQjQ1NEU5MUI0REFFN0QwMDg1RUFBNiAvKiBQaW5nSGFuZGxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFCNDVEMjAx
QUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCNDVEMUUxQUI4RDFFMjAwMTE3Q0QyIC8q
IENvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OwpAQCAtMjA2Miw0NCArMjA4MiwxNyBAQAogCQk1
MUQ3MTlCNzE4MTEwNkUwMDAxNkRDNTEgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk2RDE4MTEw
NkRGMDAxNkRDNTEgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggKi87IH07CiAJCTUxRDcx
OUI5MTgxMTA2RTAwMDE2REM1MSAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5NkYxODExMDZERjAwMTZEQzUxIC8qIElEQkFu
eS5jcHAgKi87IH07CiAJCTUxRDcxOUJBMTgxMTA2RTAwMDE2REM1MSAvKiBJREJBbnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTcwMTgxMTA2
REYwMDE2REM1MSAvKiBJREJBbnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk1MUQ3MTlCRTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ2FsbGJhY2tz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3
NDE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ2FsbGJhY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFENzE5QkYxODExMDZFMDAwMTZEQzUxIC8q
IElEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUQ3MTk3NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yLmNwcCAqLzsgfTsKLQkJ
NTFENzE5QzAxODExMDZFMDAwMTZEQzUxIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5NzYxODExMDZERjAwMTZEQzUxIC8q
IElEQkN1cnNvci5oICovOyB9OwotCQk1MUQ3MTlDMzE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ3Vy
c29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRDcxOTc5MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3Bw
ICovOyB9OwotCQk1MUQ3MTlDNDE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3
QTE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi87IH07Ci0JCTUxRDcx
OUM2MTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3QzE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRGF0YWJhc2UuY3BwICovOyB9OwotCQk1MUQ3MTlDNzE4MTEwNkUwMDAxNkRDNTEgLyogSURC
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oICovOyB9OwotCQk1MUQ3
MTlDQTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTgwMTgxMTA2REYwMDE2
REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxRDcxOUNCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFENzE5ODExODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbC5jcHAgKi87IH07Ci0JCTUxRDcxOUNDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRDcxOTgyMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuaCAqLzsgfTsKIAkJNTFENzE5Q0QxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFi
YXNlRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUVycm9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFENzE5Q0UxODExMDZF
MDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTg0MTgxMTA2REYwMDE2REM1MSAvKiBJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCTUxRDcxOUNGMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFENzE5ODUxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
RXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTFENzE5RDAxODExMDZFMDAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4NjE4
MTEwNkRGMDAxNkRDNTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNTFENzE5
RDExODExMDZFMDAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5ODcxODExMDZERjAwMTZEQzUx
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovOyB9OwotCQk1MUQ3MTlEMjE4MTEwNkUwMDAxNkRD
NTEgLyogSURCRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUQ3MTk4ODE4MTEwNkRGMDAxNkRDNTEgLyogSURCRmFjdG9yeS5jcHAgKi87
IH07Ci0JCTUxRDcxOUQzMTgxMTA2RTAwMDE2REM1MSAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4OTE4MTEwNkRGMDAx
NkRDNTEgLyogSURCRmFjdG9yeS5oICovOyB9OwotCQk1MUQ3MTlENjE4MTEwNkUwMDAxNkRDNTEg
LyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOThDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTUxRDcxOUQ4MTgxMTA2RTAwMDE2REM1MSAvKiBJREJJbmRleC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4RTE4
MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwICovOyB9OwotCQk1MUQ3MTlEOTE4MTEwNkUw
MDAxNkRDNTEgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRDcxOThGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJJbmRleC5oICovOyB9
OwogCQk1MUQ3MTlEQjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTkxMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJLZXkuY3BwICovOyB9OwogCQk1MUQ3MTlEQzE4MTEwNkUwMDAxNkRDNTEgLyogSURC
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3
MTk5MjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFENzE5REQxODExMDZFMDAwMTZEQzUxIC8qIElE
QktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFENzE5OTMxODExMDZFMDAwMTZEQzUxIC8qIElEQktleVBhdGguY3BwICovOyB9OwogCQk1
MUQ3MTlERTE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTQxODExMDZFMDAwMTZEQzUxIC8q
IElEQktleVBhdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MUQ3MTlERjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTUxODExMDZF
MDAwMTZEQzUxIC8qIElEQktleVJhbmdlLmNwcCAqLzsgfTsKIAkJNTFENzE5RTAxODExMDZFMDAw
MTZEQzUxIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUQ3MTk5NjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFuZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUQ3MTlF
MzE4MTEwNkUwMDAxNkRDNTEgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTkxODExMDZFMDAwMTZEQzUxIC8q
IElEQk9iamVjdFN0b3JlLmNwcCAqLzsgfTsKLQkJNTFENzE5RTQxODExMDZFMDAwMTZEQzUxIC8q
IElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUQ3MTk5QTE4MTEwNkUwMDAxNkRDNTEgLyogSURCT2JqZWN0U3RvcmUuaCAqLzsg
fTsKLQkJNTFENzE5RTYxODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OUMxODEx
MDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwICovOyB9OwotCQk1MUQ3MTlFNzE4
MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OUQxODExMDZFMDAwMTZEQzUxIC8qIElE
Qk9wZW5EQlJlcXVlc3QuaCAqLzsgfTsKLQkJNTFENzE5RTkxODExMDZFMDAwMTZEQzUxIC8qIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OUYxODExMDZFMDAwMTZEQzUxIC8qIElEQlBlbmRp
bmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovOyB9OwotCQk1MUQ3MTlFQTE4MTEwNkUwMDAxNkRD
NTEgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5QTAxODExMDZFMDAwMTZEQzUxIC8qIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLzsgfTsKLQkJNTFENzE5RUIxODExMDZFMDAw
MTZEQzUxIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFENzE5QTExODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuY3Bw
ICovOyB9OwotCQk1MUQ3MTlFQzE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5QTIxODExMDZF
MDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuaCAqLzsgfTsKLQkJNTFENzE5RUUxODExMDZFMDAwMTZE
QzUxIC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRDcxOUE0MTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlv
bi5jcHAgKi87IH07Ci0JCTUxRDcxOUVGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5
QTUxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0aW9uLmggKi87IH07Ci0JCTUxRDcxOUY1
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5QUIxODExMDZFMDAwMTZE
QzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi87IH07Ci0JCTUxRDcxOUY2MTgxMTA2
RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOUFDMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJNTFENzE5RjgxODExMDZFMDAwMTZEQzUx
IC8qIEluZGV4ZWREQi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFENzE5QUUxODExMDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRDcxOUZCMTgxMTA2RTAw
MDE2REM1MSAvKiBXb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTlCMTE4MTEwNkUwMDAx
NkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuY3BwICovOyB9OwogCQk1
MUQ3MTlGQzE4MTEwNkUwMDAxNkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcx
OUIyMTgxMTA2RTAwMDE2REM1MSAvKiBXb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5o
ICovOyB9OwpAQCAtMjEyMywxMiArMjExNiwzMSBAQAogCQk1MUUzRjlENjBEQTA1RTFEMDAyNTA5
MTEgLyogSlNTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRTNGOUQ0MERBMDVFMUQwMDI1MDkxMSAvKiBKU1N0b3JhZ2UuY3BwICovOyB9
OwogCQk1MUU0MTQzNDE2QTY1OTYzMDBDNjMzQzcgLyogUmVzb3VyY2VIYW5kbGVUeXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNDE0MzIxNkE2
NTk1MTAwQzYzM0M3IC8qIFJlc291cmNlSGFuZGxlVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUU2ODIxMDE2Mzg3MzAyMDAzQkJGM0Mg
LyogTG9hZGVyU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRTY4MjBGMTYzODczMDIwMDNCQkYzQyAvKiBMb2FkZXJTdHJhdGVneS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxRUFDNTY3
MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFDNTY1MTgxNUVEM0Uw
MDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKLQkJNTFFQUM1
NjgxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFDNTY2MTgxNUVEM0Uw
MDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFFQUM1QjIxODE2M0Y0RTAwNEYxQkE0
IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRUFDNUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVu
dGlmaWVyLmggKi87IH07CiAJCTUxRUM5MjY1MENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFFQzkyNUQwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi87IH07CiAJCTUxRUU3QjM4MUFBNTBCMDUwMEY5
MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUVFN0IzNzFBQTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2Fk
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxRUU3QjNBMUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUU3QjM5MUFBNTEyMzEw
MEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLzsgfTsKKwkJNTFGNDFBNjgxQkE3M0I1
QjAwMkUwNTNCIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNDgxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkNhbGxiYWNr
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUx
RjQxQTY5MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTQ5MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLzsgfTsKKwkJNTFGNDFBNkExQkE3M0I1QjAw
MkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTRBMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JC
YWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTFGNDFBNkIxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQx
QTRCMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi87
IH07CisJCTUxRjQxQTZDMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
NDFBNEMxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTFGNDFBNkQx
QkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE0RDFCQTczQjJDMDAyRTA1M0Ig
LyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLzsgfTsKKwkJNTFGNDFBNkUxQkE3M0I1QjAwMkUw
NTNCIC8qIElEQkRhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNEUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkRhdGFiYXNl
QmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTUxRjQxQTZGMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNDAxQjlG
Njk1RTAwRjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTFGNDFBNzAxQkE3M0I1QjAwMkUwNTNC
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzRTFCOUY2OTIzMDBGNzg5Q0UgLyogSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLzsgfTsKKwkJNTFGNDFBNzExQkE3M0I1QjAwMkUwNTNC
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCM0YxQjlGNjkyMzAwRjc4OUNFIC8qIElEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbC5oICovOyB9OworCQk1MUY0MUE3MjFCQTczQjVCMDAyRTA1M0IgLyog
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTRGMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTUxRjQxQTczMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGNDFBNTIxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgKi87
IH07CisJCTUxRjQxQTc0MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTUz
MUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUY0MUE3NTFCQTczQjVCMDAy
RTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE1NDFCQTczQjJDMDAyRTA1
M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTUxRjQx
QTc2MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE1NTFC
QTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRjQxQTc3MUJB
NzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTU2MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKKwkJNTFGNDFBNzgx
QkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTU3MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IH07CisJCTUxRjQxQTc5MUJB
NzNCNUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nRGVsZXRlQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNTAxQkE3M0IyQzAwMkUwNTNCIC8q
IElEQlBlbmRpbmdEZWxldGVDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTFGNDFBN0ExQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdP
cGVuQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGNDFBNTExQkE3M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRjQxQTdCMUJBNzNC
NUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNDMUI5RjY4Q0YwMEY3
ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLzsgfTsKKwkJNTFGNDFB
N0MxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNEMUI5RjY4
Q0YwMEY3ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi87IH07CiAJCTUx
RkEyRDc4MTUyMTMyQjMwMEMxQkEwQiAvKiBET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0ZCQTE4MTUxQUE3MUIwMEI1
Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUZCNTUwNDExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9z
ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUZCNTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi87IH07CiAJCTUxRkI1
NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8q
IEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CkBAIC05MTcxLDE1ICs5MTgzLDkgQEAKIAkJNTEwMTky
RDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3
QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTAxOTJEODE4QjdEN0FCMDA3RkM3QTEgLyogaW1hZ2VDb250cm9sc01hYy5j
c3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IGltYWdlQ29udHJvbHNNYWMuY3NzOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTAxOTQ0MjE4MzZGN0U0MDA5MjU1MjMgLyogSURC
Q3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTAxOTQ0MzE4MzZGN0U0MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFja2Vu
ZE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29y
QmFja2VuZE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwNTlE
RDkxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDU5RERB
MTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNkQ3QkIxOEJEQjc2RjAw
MEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb250ZXh0TWVudUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTA2RDdCQzE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHRNZW51Q29udGV4dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBBMzI2RTE4MzE4NDMxMDAzQzUzMjYg
LyogSURCU2VydmVyQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJREJTZXJ2ZXJDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
MEI3REI1MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwQjdEQjYxODJEOUY1RDAwOUJGOTU3
IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEEyRTEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTBENEEzMDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRTdHJlYW1I
YW5kbGVCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyMTgsNyArOTIy
NCw2IEBACiAJCTUxMkREOEYxMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJjaGl2ZVJlc291cmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyREQ4RjIwRDkxRTZBRjAwMEY4OUVF
IC8qIEFyY2hpdmVSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
cmNoaXZlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyREQ4RjMw
RDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFyY2hpdmVGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMkVBOUJCMTgxRjJFRTAwMDFEMDFFMCAvKiBJREJQZW5kaW5nT3BlbkNhbGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUGVuZGluZ09wZW5DYWxsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkVBOUJEMTgyMDI4NTcwMDFEMDFFMCAvKiBJREJP
cGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT3BlcmF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMzI3RDVFMTFBMzNBMkIwMDRGOUQ2
NSAvKiBTaW5rRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lu
a0RvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMzI3RDVGMTFBMzNB
MkIwMDRGOUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2lua0RvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTkyNjIsOCArOTI2Nyw1MyBAQAogCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2No
ZW1lUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2No
ZW1lUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYyQzdGMzEx
Rjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NoZW1lUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE2MzExN0MxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRhdGFiYXNlTWV0YWRhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VNZXRhZGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjczMEExMTgyRDhGQkIwMDNGQUY1
QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQkN1cnNvckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTY3MzBBMjE4MkQ4RkJCMDAzRkFGNUMgLyogSURCQ3Vyc29yQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjI4MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJz
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5Q3Vyc29y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMjkxQjlGNjM5MTAwRjc4
OUNFIC8qIExlZ2FjeUN1cnNvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
ZWdhY3lDdXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMkExQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIyQjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5
Q3Vyc29yV2l0aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eUN1cnNvcldpdGhWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIy
QzFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5RGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTY0NUIyRDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RGF0YWJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5RGF0YWJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMkUxQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeUZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVn
YWN5RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjJGMUI5
RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExlZ2FjeUZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTE2NDVCMzAxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUluZGV4LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzExQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUluZGV4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeUluZGV4Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjMyMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lP
YmplY3RTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdh
Y3lPYmplY3RTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjMz
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMZWdhY3lPYmplY3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MTY0NUIzNDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVxdWVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lPcGVuREJS
ZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzUxQjlGNjM5
MTAwRjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTGVnYWN5T3BlbkRCUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUIzNjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lSZXF1ZXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzcxQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeVJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVx
dWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzODFCOUY2MzkxMDBG
Nzg5Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGVnYWN5VHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUIzOTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5VHJhbnNhY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCM0ExQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MTY0NUIzQjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5n
ZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVZlcnNpb25D
aGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzQzFCOUY2
OENGMDBGNzg5Q0UgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCM0QxQjlGNjhDRjAwRjc4
OUNFIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzRTFCOUY2OTIzMDBGNzg5Q0UgLyogSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxNjQ1QjNGMUI5RjY5MjMwMEY3ODlDRSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjQwMUI5RjY5NUUwMEY3
ODlDRSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJEYXRhYmFzZUNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MTY0NUI0MTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCQ3Vyc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUI0MjFCOUY4ODlCMDBGNzg5Q0UgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvcldpdGhWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjQzMUI5Rjg4OUIwMEY3
ODlDRSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSURCQ3Vyc29yV2l0aFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxNjQ1QjQ0MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxNjQ1QjQ1MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJEYXRhYmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0NjFCOUY4ODlCMDBGNzg5Q0UgLyogSURCRmFj
dG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJGYWN0b3J5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNDcxQjlGODg5QjAwRjc4
OUNFIC8qIElEQkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURC
RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0ODFCOUY4ODlC
MDBGNzg5Q0UgLyogSURCSW5kZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0
OTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVC
NEExQjlGODg5QjAwRjc4OUNFIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9iamVjdFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNEIxQjlGODg5QjAwRjc4OUNFIC8qIElEQk9iamVjdFN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjRDMUI5Rjg4OUIwMEY3ODlDRSAvKiBJ
REJPcGVuREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElEQk9wZW5EQlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0
NUI0RDFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT3BlbkRCUmVxdWVzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxNjQ1QjRFMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJSZXF1ZXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlJlcXVlc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0RjFCOUY4ODlCMDBGNzg5Q0UgLyogSURC
UmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJSZXF1ZXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjUwMUI5Rjg4OUIwMEY3ODlDRSAv
KiBJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1
QjUxMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUI1MjFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjUzMUI5Rjg4
OUIwMEY3ODlDRSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxNjQ1QjU0MUI5Rjg4RTgwMEY3ODlDRSAvKiBJREJDdXJzb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNkUxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2Fj
eUFueS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lBbnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI2RjFCQTBBNzYxMDBGNzg5
Q0UgLyogTGVnYWN5QW55LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eUFueS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY5NTM5NTEzMjlBM0M4MDBC
OTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJY29uRGF0YWJhc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE2OTUzOTYxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvbkRhdGFiYXNlQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVl
V2Fsa2VyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
VHJlZVdhbGtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mjc3
LDggKzkzMjcsNiBAQAogCQk1MTc0MUQwRTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpc3RvcnlJdGVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3NEUyMDgxMEExRjQ0RjAwRjk1RTZG
IC8qIFBvcFN0YXRlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9w
U3RhdGVFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc0RTIwQjEwQTFG
NDlBMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
UG9wU3RhdGVFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNzcxQzhD
MTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE3NzFDOEQxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFi
YXNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFz
ZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3OUNFMjMxOTVDODE0
MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE3OUNFMjUxOTVDODIxRDAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc5Q0UyOTE5NUM5MTg2MDAxOUMxOTggLyogR2FtZXBh
ZFByb3ZpZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhbWVw
YWRQcm92aWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTMyMyw3
ICs5MzcxLDYgQEAKIAkJNTFBQkI1QjcxODZEMEVEMTAwODM5MUExIC8qIElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCRjY0QzE2Mzky
RTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3kuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTG9hZGVyU3RyYXRlZ3kuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRlclR5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQjA3QTQzMTgyMzI0OEIwMEFBOEQxQSAv
KiBJREJQZW5kaW5nRGVsZXRlQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJREJQZW5kaW5nRGVsZXRlQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUIyNDE3QTBEOTMxRjNGMDBFODNGNUMgLyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExlZ2FjeVdlYkFyY2hpdmVNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjQ1NEU5MUI0REFFN0QwMDg1RUFBNiAv
KiBQaW5nSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpbmdIYW5k
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCNDVEMUUxQUI4RDFFMjAwMTE3
Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGVudEV4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05MzQyLDMwICs5Mzg5LDE1IEBACiAJCTUxRDcxOTZGMTgxMTA2REYwMDE2REM1MSAvKiBJ
REJBbnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQW55LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5NzAxODExMDZERjAwMTZEQzUx
IC8qIElEQkFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJBbnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5NzExODExMDZERjAwMTZEQzUxIC8q
IElEQkFueS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCQW55LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5NzQxODExMDZERjAwMTZEQzUxIC8qIElEQkNhbGxi
YWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDYWxsYmFja3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5NzUxODExMDZERjAwMTZEQzUxIC8q
IElEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJD
dXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk3NjE4MTEwNkRG
MDAxNkRDNTEgLyogSURCQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk3NzE4MTEw
NkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJD
dXJzb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk3OTE4MTEwNkRG
MDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvcldpdGhWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxRDcxOTdBMTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29yV2l0aFZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTdCMTgxMTA2REYwMDE2REM1
MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkN1
cnNvcldpdGhWYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTdD
MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUQ3MTk3RTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2UuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTFENzE5ODAxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTgxMTgxMTA2REYw
MDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5ODIxODExMDZERjAwMTZEQzUxIC8qIElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFENzE5ODMxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VFcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUQ3MTk4NDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VF
eGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0
YWJhc2VFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk4
NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5ODYxODExMDZERjAwMTZEQzUxIC8qIElEQkV2ZW50RGlz
cGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJFdmVu
dERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk4NzE4
MTEwNkRGMDAxNkRDNTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQkV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MUQ3MTk4ODE4MTEwNkRGMDAxNkRDNTEgLyogSURCRmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJGYWN0b3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5ODkxODExMDZERjAwMTZEQzUxIC8qIElEQkZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9yeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk4QTE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRmFjdG9yeS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCRmFjdG9yeS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOThDMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MUQ3MTk4RTE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MUQ3MTk4RjE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCSW5kZXguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5OTAxODExMDZFMDAwMTZEQzUxIC8qIElEQkluZGV4Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJJbmRleC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDcxOTkxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCS2V5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5OTIxODExMDZFMDAwMTZEQzUxIC8qIElEQktleS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJLZXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTkzNzQsMjIgKzk0MDYsMTAgQEAKIAkJNTFENzE5OTUxODExMDZFMDAw
MTZEQzUxIC8qIElEQktleVJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQktleVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFE
NzE5OTYxODExMDZFMDAwMTZEQzUxIC8qIElEQktleVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQktleVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxRDcxOTk3MTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5nZS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gSURCS2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MUQ3MTk5OTE4MTEwNkUwMDAxNkRDNTEgLyogSURCT2JqZWN0U3RvcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCT2JqZWN0U3RvcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk5QTE4MTEwNkUwMDAxNkRDNTEgLyogSURC
T2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0
U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5OUIxODExMDZFMDAw
MTZEQzUxIC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJP
YmplY3RTdG9yZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTlDMTgx
MTA2RTAwMDE2REM1MSAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9wZW5EQlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MUQ3MTk5RDE4MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTlFMTgxMTA2RTAwMDE2REM1MSAv
KiBJREJPcGVuREJSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJPcGVuREJS
ZXF1ZXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5OUYxODExMDZF
MDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOUEwMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5QTExODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUmVxdWVzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOUEyMTgxMTA2RTAwMDE2REM1MSAv
KiBJREJSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlJlcXVl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QTMxODExMDZFMDAwMTZE
QzUxIC8qIElEQlJlcXVlc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQlJlcXVlc3Qu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTlBNDE4MTEwNkUwMDAxNkRD
NTEgLyogSURCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MUQ3MTlBNTE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFENzE5QTYxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0aW9uLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOUFCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFE
NzE5QUMxODExMDZFMDAwMTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QUQxODExMDZFMDAwMTZEQzUxIC8qIElEQlZl
cnNpb25DaGFuZ2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QUUxODEx
MDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmRleGVkREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QjEx
ODExMDZFMDAwMTZEQzUxIC8qIFdvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFiYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlckdsb2JhbFNjb3BlSW5k
ZXhlZERhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0MTksMTIg
Kzk0MzksMjYgQEAKIAkJNTFFM0Y5RDUwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0b3JhZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNDE0MzIxNkE2NTk1MTAwQzYzM0M3IC8qIFJlc291cmNlSGFu
ZGxlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VIYW5k
bGVUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU2ODIwRjE2Mzg3MzAy
MDAzQkJGM0MgLyogTG9hZGVyU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9hZGVyU3RyYXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFF
QUM1NjUxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRUFDNTY2MTgxNUVEM0Uw
MDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQUM1QjAxODE2M0Y0RTAwNEYxQkE0IC8qIElEQlJlY29yZElk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUmVjb3JkSWRl
bnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUVDOTI1RDBDRTkwREQ0
MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRUU3QjM3MUFBNTBC
MDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlc291cmNlTG9hZEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFFRTdCMzkxQUE1MTIzMTAwRjkyQjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkSW5mby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTQ4MUJBNzNCMkMwMDJFMDUzQiAvKiBJ
REJDYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ2FsbGJh
Y2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTQ5MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElEQkN1cnNvckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MUY0MUE0QTFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTRCMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJz
b3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxRjQxQTRDMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3Bl
cmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE0RDFC
QTczQjJDMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTRFMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJEYXRhYmFz
ZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTRGMUJBNzNCMkMw
MDJFMDUzQiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE1MDFCQTczQjJDMDAyRTA1M0IgLyogSURCUGVuZGlu
Z0RlbGV0ZUNhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUGVuZGlu
Z0RlbGV0ZUNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNTExQkE3
M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJREJQZW5kaW5nT3BlbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTFGNDFBNTIxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE1MzFCQTcz
QjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MUY0MUE1NDFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25C
YWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTFGNDFBNTUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJh
bnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MUY0MUE1NjFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNTcxQkE3
M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUY2QTNENTA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENh
bnZhc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFGNkEzRDYwNjYzQkYwNDAw
NEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUZCNTUwMjEx
M0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTY1NTIsNiArMTY1ODYsNTYgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwogCQl9OworCQk1MTY0NUIyNzFCOUY2MzdFMDBGNzg5Q0UgLyogbGVnYWN5ICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MUY0MUE0ODFCQTcz
QjJDMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggKi8sCisJCQkJNTFGNDFBNDkxQkE3M0IyQzAw
MkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmQuY3BwICovLAorCQkJCTUxRjQxQTRBMUJBNzNCMkMw
MDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmggKi8sCisJCQkJNTFGNDFBNEIxQkE3M0IyQzAw
MkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLywKKwkJCQk1MUY0MUE0
QzFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCAqLywKKwkJ
CQk1MUY0MUE0RDFCQTczQjJDMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLywK
KwkJCQk1MUY0MUE0RTFCQTczQjJDMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi8s
CisJCQkJNTE2NDVCNDAxQjlGNjk1RTAwRjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmgg
Ki8sCisJCQkJNTE2NDVCM0UxQjlGNjkyMzAwRjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbC5jcHAgKi8sCisJCQkJNTE2NDVCM0YxQjlGNjkyMzAwRjc4OUNFIC8qIElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5oICovLAorCQkJCTUxRjQxQTRGMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovLAorCQkJCTUxRjQxQTUyMUJBNzNCMkMwMDJFMDUz
QiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovLAorCQkJCTUxRjQxQTUzMUJBNzNCMkMw
MDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLywKKwkJCQk1MUY0MUE1NDFCQTcz
QjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8sCisJ
CQkJNTFGNDFBNTUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuaCAqLywKKwkJCQk1MUY0MUE1NjFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJNTFGNDFBNTcxQkE3M0IyQzAwMkUwNTNCIC8qIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKKwkJCQk1MUY0MUE1MDFCQTczQjJDMDAyRTA1
M0IgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCAqLywKKwkJCQk1MUY0MUE1MTFCQTczQjJDMDAy
RTA1M0IgLyogSURCUGVuZGluZ09wZW5DYWxsLmggKi8sCisJCQkJNTE2NDVCM0MxQjlGNjhDRjAw
Rjc4OUNFIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovLAorCQkJCTUxNjQ1
QjNEMUI5RjY4Q0YwMEY3ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8s
CisJCQkJNTE2NDVCNkUxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2FjeUFueS5jcHAgKi8sCisJCQkJ
NTE2NDVCNkYxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2FjeUFueS5oICovLAorCQkJCTUxNjQ1QjI4
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuY3BwICovLAorCQkJCTUxNjQ1QjI5MUI5
RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuaCAqLywKKwkJCQk1MTY0NUIyQTFCOUY2Mzkx
MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcCAqLywKKwkJCQk1MTY0NUIyQjFC
OUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmggKi8sCisJCQkJNTE2NDVC
MkMxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNwcCAqLywKKwkJCQk1MTY0NUIy
RDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuaCAqLywKKwkJCQk1MTY0NUIyRTFC
OUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5jcHAgKi8sCisJCQkJNTE2NDVCMkYxQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeUZhY3RvcnkuaCAqLywKKwkJCQk1MTY0NUIzMDFCOUY2Mzkx
MDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguY3BwICovLAorCQkJCTUxNjQ1QjMxMUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lJbmRleC5oICovLAorCQkJCTUxNjQ1QjMyMUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lPYmplY3RTdG9yZS5jcHAgKi8sCisJCQkJNTE2NDVCMzMxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeU9iamVjdFN0b3JlLmggKi8sCisJCQkJNTE2NDVCMzQxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwICovLAorCQkJCTUxNjQ1QjM1MUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmggKi8sCisJCQkJNTE2NDVCMzYxQjlGNjM5MTAw
Rjc4OUNFIC8qIExlZ2FjeVJlcXVlc3QuY3BwICovLAorCQkJCTUxNjQ1QjM3MUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmggKi8sCisJCQkJNTE2NDVCMzgxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeVRyYW5zYWN0aW9uLmNwcCAqLywKKwkJCQk1MTY0NUIzOTFCOUY2MzkxMDBGNzg5
Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uaCAqLywKKwkJCQk1MTY0NUIzQTFCOUY2MzkxMDBGNzg5
Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKKwkJCQk1MTY0NUIzQjFCOUY2
MzkxMDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCisJCQkpOworCQkJ
cGF0aCA9IGxlZ2FjeTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTUxNzQx
RDA4MEIwNzI1NzAwMEVENDQyQyAvKiBoaXN0b3J5ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE4NjUxLDMxICsxODczNSwyMiBAQAogCQk5NzEyQTU1MzE1
MDA0RTNDMDA0OEFGMTAgLyogaW5kZXhlZGRiICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk1MTY0NUIyNzFCOUY2MzdFMDBGNzg5Q0UgLyogbGVnYWN5ICov
LAogCQkJCTUxRDcxOTZDMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwICovLAogCQkJCTUxRDcxOTZEMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuaCAqLywKIAkJCQk1MUQ3MTk2RTE4MTEwNkRGMDAxNkRDNTEgLyogRE9NV2lu
ZG93SW5kZXhlZERhdGFiYXNlLmlkbCAqLywKIAkJCQk1MUQ3MTk2RjE4MTEwNkRGMDAxNkRDNTEg
LyogSURCQW55LmNwcCAqLywKIAkJCQk1MUQ3MTk3MDE4MTEwNkRGMDAxNkRDNTEgLyogSURCQW55
LmggKi8sCiAJCQkJNTFENzE5NzExODExMDZERjAwMTZEQzUxIC8qIElEQkFueS5pZGwgKi8sCi0J
CQkJNTFENzE5NzQxODExMDZERjAwMTZEQzUxIC8qIElEQkNhbGxiYWNrcy5oICovLAotCQkJCTUx
RDcxOTc1MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3IuY3BwICovLAotCQkJCTUxRDcxOTc2
MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3IuaCAqLywKKwkJCQk1MTY0NUI1NDFCOUY4OEU4
MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLywKKwkJCQk1MTY0NUI0MTFCOUY4ODlCMDBGNzg5
Q0UgLyogSURCQ3Vyc29yLmggKi8sCiAJCQkJNTFENzE5NzcxODExMDZERjAwMTZEQzUxIC8qIElE
QkN1cnNvci5pZGwgKi8sCi0JCQkJNTE2NzMwQTExODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNv
ckJhY2tlbmQuY3BwICovLAotCQkJCTUxNjczMEEyMTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJz
b3JCYWNrZW5kLmggKi8sCi0JCQkJNTEwMTk0NDIxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNv
ckJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLywKLQkJCQk1MTAxOTQ0MzE4MzZGN0U0MDA5MjU1MjMg
LyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCAqLywKLQkJCQk1MUQ3MTk3OTE4MTEwNkRG
MDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLywKLQkJCQk1MUQ3MTk3QTE4MTEw
NkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi8sCisJCQkJNTE2NDVCNDIxQjlG
ODg5QjAwRjc4OUNFIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi8sCisJCQkJNTE2NDVCNDMx
QjlGODg5QjAwRjc4OUNFIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovLAogCQkJCTUxRDcxOTdC
MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaWRsICovLAotCQkJCTUxRDcx
OTdDMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgKi8sCi0JCQkJNTFENzE5N0Qx
ODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmggKi8sCisJCQkJNTE2NDVCNDQxQjlGODg5
QjAwRjc4OUNFIC8qIElEQkRhdGFiYXNlLmNwcCAqLywKKwkJCQk1MTY0NUI0NTFCOUY4ODlCMDBG
Nzg5Q0UgLyogSURCRGF0YWJhc2UuaCAqLywKIAkJCQk1MUQ3MTk3RTE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRGF0YWJhc2UuaWRsICovLAotCQkJCTUxNzcxQzhDMTgyREI0QjcwMDhFNzgxRSAvKiBJ
REJEYXRhYmFzZUJhY2tlbmQuY3BwICovLAotCQkJCTUxNzcxQzhEMTgyREI0QjcwMDhFNzgxRSAv
KiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLywKLQkJCQk1MUQ3MTk4MDE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLywKLQkJCQk1MUQ3MTk4MTE4MTEwNkRGMDAxNkRD
NTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLywKLQkJCQk1MUQ3MTk4MjE4MTEw
NkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggKi8sCiAJCQkJNTFENzE5
ODMxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAqLywKIAkJCQk1MUQ3MTk4
NDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwICovLAogCQkJCTUx
RDcxOTg1MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovLApAQCAt
MTg2ODMsMTMgKzE4NzU4LDEyIEBACiAJCQkJNTFDOTYxMUExODNEMkI4MDAwRDIwMDJFIC8qIElE
QkRhdGFiYXNlTWV0YWRhdGEuaCAqLywKIAkJCQk1MUQ3MTk4NjE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk1MUQ3MTk4NzE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8sCi0JCQkJNTFENzE5ODgxODExMDZERjAwMTZEQzUx
IC8qIElEQkZhY3RvcnkuY3BwICovLAotCQkJCTUxRDcxOTg5MTgxMTA2REYwMDE2REM1MSAvKiBJ
REJGYWN0b3J5LmggKi8sCisJCQkJNTE2NDVCNDYxQjlGODg5QjAwRjc4OUNFIC8qIElEQkZhY3Rv
cnkuY3BwICovLAorCQkJCTUxNjQ1QjQ3MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJGYWN0b3J5Lmgg
Ki8sCiAJCQkJNTFENzE5OEExODExMDZERjAwMTZEQzUxIC8qIElEQkZhY3RvcnkuaWRsICovLAot
CQkJCTUxRDcxOThDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oICovLAogCQkJCTUxMjNBRjFDMTg5MThBRTQwMDMxQ0RDOSAvKiBJREJHZXRSZXN1bHQuaCAq
LywKLQkJCQk1MUQ3MTk4RTE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwICovLAotCQkJ
CTUxRDcxOThGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJJbmRleC5oICovLAorCQkJCTUxNjQ1QjQ4
MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJJbmRleC5jcHAgKi8sCisJCQkJNTE2NDVCNDkxQjlGODg5
QjAwRjc4OUNFIC8qIElEQkluZGV4LmggKi8sCiAJCQkJNTFENzE5OTAxODExMDZFMDAwMTZEQzUx
IC8qIElEQkluZGV4LmlkbCAqLywKIAkJCQk1MUFCQjVCNjE4NkQwRUQxMDA4MzkxQTEgLyogSURC
SW5kZXhNZXRhZGF0YS5oICovLAogCQkJCTUxRDcxOTkxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJL
ZXkuY3BwICovLApAQCAtMTg3MDMsMzQgKzE4Nzc3LDI0IEBACiAJCQkJNTFENzE5OTcxODExMDZF
MDAwMTZEQzUxIC8qIElEQktleVJhbmdlLmlkbCAqLywKIAkJCQk1MTIzQUYxNjE4OTBBNENBMDAz
MUNEQzkgLyogSURCS2V5UmFuZ2VEYXRhLmNwcCAqLywKIAkJCQk1MTIzQUYxNzE4OTBBNENBMDAz
MUNEQzkgLyogSURCS2V5UmFuZ2VEYXRhLmggKi8sCi0JCQkJNTFENzE5OTkxODExMDZFMDAwMTZE
QzUxIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLywKLQkJCQk1MUQ3MTk5QTE4MTEwNkUwMDAxNkRD
NTEgLyogSURCT2JqZWN0U3RvcmUuaCAqLywKKwkJCQk1MTY0NUI0QTFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCT2JqZWN0U3RvcmUuY3BwICovLAorCQkJCTUxNjQ1QjRCMUI5Rjg4OUIwMEY3ODlDRSAv
KiBJREJPYmplY3RTdG9yZS5oICovLAogCQkJCTUxRDcxOTlCMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJPYmplY3RTdG9yZS5pZGwgKi8sCiAJCQkJNTFBQkI1QjcxODZEMEVEMTAwODM5MUExIC8qIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEuaCAqLywKLQkJCQk1MUQ3MTk5QzE4MTEwNkUwMDAxNkRDNTEg
LyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8sCi0JCQkJNTFENzE5OUQxODExMDZFMDAwMTZEQzUx
IC8qIElEQk9wZW5EQlJlcXVlc3QuaCAqLywKKwkJCQk1MTY0NUI0QzFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8sCisJCQkJNTE2NDVCNEQxQjlGODg5QjAwRjc4OUNF
IC8qIElEQk9wZW5EQlJlcXVlc3QuaCAqLywKIAkJCQk1MUQ3MTk5RTE4MTEwNkUwMDAxNkRDNTEg
LyogSURCT3BlbkRCUmVxdWVzdC5pZGwgKi8sCiAJCQkJNTEyRUE5QkQxODIwMjg1NzAwMUQwMUUw
IC8qIElEQk9wZXJhdGlvbi5oICovLAotCQkJCTUxQjA3QTQzMTgyMzI0OEIwMEFBOEQxQSAvKiBJ
REJQZW5kaW5nRGVsZXRlQ2FsbC5oICovLAotCQkJCTUxMkVBOUJCMTgxRjJFRTAwMDFEMDFFMCAv
KiBJREJQZW5kaW5nT3BlbkNhbGwuaCAqLywKLQkJCQk1MUQ3MTk5RjE4MTEwNkUwMDAxNkRDNTEg
LyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgKi8sCi0JCQkJNTFENzE5QTAxODEx
MDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLywKIAkJCQk1
MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQgLyogSURCUmVjb3JkSWRlbnRpZmllci5oICovLAotCQkJ
CTUxRDcxOUExMTgxMTA2RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmNwcCAqLywKLQkJCQk1MUQ3
MTlBMjE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5oICovLAorCQkJCTUxNjQ1QjRFMUI5
Rjg4OUIwMEY3ODlDRSAvKiBJREJSZXF1ZXN0LmNwcCAqLywKKwkJCQk1MTY0NUI0RjFCOUY4ODlC
MDBGNzg5Q0UgLyogSURCUmVxdWVzdC5oICovLAogCQkJCTUxRDcxOUEzMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJSZXF1ZXN0LmlkbCAqLywKIAkJCQk1MTBBMzI2RTE4MzE4NDMxMDAzQzUzMjYgLyog
SURCU2VydmVyQ29ubmVjdGlvbi5oICovLAotCQkJCTUxRDcxOUE0MTgxMTA2RTAwMDE2REM1MSAv
KiBJREJUcmFuc2FjdGlvbi5jcHAgKi8sCi0JCQkJNTFENzE5QTUxODExMDZFMDAwMTZEQzUxIC8q
IElEQlRyYW5zYWN0aW9uLmggKi8sCisJCQkJNTE2NDVCNTAxQjlGODg5QjAwRjc4OUNFIC8qIElE
QlRyYW5zYWN0aW9uLmNwcCAqLywKKwkJCQk1MTY0NUI1MTFCOUY4ODlCMDBGNzg5Q0UgLyogSURC
VHJhbnNhY3Rpb24uaCAqLywKIAkJCQk1MUQ3MTlBNjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJh
bnNhY3Rpb24uaWRsICovLAotCQkJCTUxMEI3REI1MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmQuY3BwICovLAotCQkJCTUxMEI3REI2MTgyRDlGNUQwMDlCRjk1NyAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLywKLQkJCQk1MTA1OUREOTE4MjBCMTc2MDBERkY5QjEg
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8sCi0JCQkJNTEwNTlEREEx
ODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCAqLywK
LQkJCQk1MUVBQzU2NTE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAgKi8sCi0JCQkJNTFFQUM1NjYxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCAqLywKLQkJCQk1MUQ3MTlBQjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKLQkJCQk1MUQ3MTlBQzE4MTEwNkUwMDAxNkRDNTEgLyog
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCisJCQkJNTE2NDVCNTIxQjlGODg5QjAwRjc4OUNF
IC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8sCisJCQkJNTE2NDVCNTMxQjlGODg5QjAw
Rjc4OUNFIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovLAogCQkJCTUxRDcxOUFEMTgxMTA2
RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsICovLAogCQkJCTUxRDcxOUFF
MTgxMTA2RTAwMDE2REM1MSAvKiBJbmRleGVkREIuaCAqLywKIAkJCQk1MUQ3MTlCMTE4MTEwNkUw
MDAxNkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuY3BwICovLApAQCAt
MjM5ODQsNiArMjQwNDgsNyBAQAogCQkJCTA3M0FCNEIzMTdGOEJBQ0EwMDZFMEQ2RiAvKiBBbGxW
aWRlb0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAw
RDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Uw
OEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUxRjQxQTc2MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1ODZBQkFE
MDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRDMxNjAzRTEyQjAyNjc2MDBDMUEzNTkgLyogQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJh
eXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjQwMTQsNiArMjQwNzksNyBAQAogCQkJCTBGRkQ0RDYx
MTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzN0M2MUYwMTEyMDk1Qzg3MDA3QTNDNjcgLyogQXRvbWljU3RyaW5nS2V5ZWRN
UlVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDNEE4MEQwOUQ1NjMyNzAwMDNBQzhEIC8q
IEF0dHIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjQ1QjVEMUI5RkE2QzgwMEY3ODlDRSAvKiBM
ZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzRBODBCMDlENTYz
MjcwMDAzQUM4RCAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDdBMTJC
MDI2RjcwMEMxQTM1OSAvKiBBdWRpb0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDYyOUVB
MzE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjQ1NDcsNiArMjQ2MTMsNyBAQAogCQkJCTg1QjQ5OEVEMEFEQjMyRkIwMDkyNUNC
QiAvKiBET01DU1NSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMyREUzMEFB
OEM5QkUwMDdEM0I3RCAvKiBET01DU1NSdWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVF
NzExOTIwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUNTU1J1bGVMaXN0SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxNjQ1QjVCMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTg1MDMyREU1MEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NTdHls
ZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREI5QzRBQTFCMzIzMUY0MDA3MEYy
N0YgLyogTlNFdmVudFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExOTMwQUM1RDUzNTAw
NTMyNzBGIC8qIERPTUNTU1N0eWxlRGVjbGFyYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDU2MSw2ICsyNDYyOCw3IEBACiAJCQkJODU4QzM4MUMwQUE4RTI5NjAwQjE4N0E0IC8q
IERPTUNTU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUI0OThGMzBBREIzMzZBMDA5MjVD
QkIgLyogRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjMx
QjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFG
NDFBNzgxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1OEMzODNDMEFBOEVEODIwMEIxODdBNCAvKiBET01DU1NWYWx1ZUxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1OTA5RDJCMEFDQzdENTUwMERGMDFGMSAvKiBET01D
U1NWYWx1ZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjlDQ0MwQjc0N0E0
NDAwM0VEODkwIC8qIERPTUN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNDc5Nyw2ICsyNDg2NSw3IEBACiAJCQkJODVBQ0E5OUMwQTlCNTc1OTAwNjcxRTkwIC8qIERP
TVRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCURERTYzRUQ1MEI3RDQ1QTgwMDIyNjk5OCAvKiBE
T01UZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUQ5MEFDNUQ1MzUwMDUzMjcw
RiAvKiBET01UZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjQ1QjZEMUI5RkE2
QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE4ODYwNEI0MEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDVGRDY5RTAxMjg0NUQ0MzAwQjJCRUIzIC8qIERPTVRpbWVTdGFtcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM0OEJGQUMxQjg1NzI5ODAwOTEyRjM2IC8qIENsYXNzQ29sbGVjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDk1MCw2ICsyNTAxOSw3IEBACiAJCQkJOTc2RDZDODMxMjJC
OEEzRDAwMUZEMUY3IC8qIEZpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERjM2OUYx
MjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
ODhBOTA1MTc1NTNDRDcwMDBDNzRGOSAvKiBGaWxlSWNvbkxvYWRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTE2NDVCNjMxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGNTVCM0RCRTEyNTFGMTJEMDAzRUYyNjkgLyogRmlsZUlucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0Njg5RjFBRjEyNjdCQUUxMDBFOEQzODAgLyogRmlsZU1ldGFk
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTA1LDYgKzI1MTc1LDcgQEAKIAkJCQk5M0YxOTlF
NTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4REYzRkQwMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc3QjM4NjUxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE2QTFCQTczQjVCMDAyRTA1M0IgLyogSURC
Q3Vyc29yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzRTUxMEExOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1QzA0MURCMEZGQ0E3
Q0UwMDgzOUQ0QSAvKiBIVE1MRGF0YUxpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlE
MzU5RDc4QTEyOUNBMjcxMDAwNkU1RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1MjI0LDQ0ICsyNTI5NSwyMSBAQAogCQkJCTQ1QkFDMkIwMTM2MEJCQUIwMDVE
QTI1OCAvKiBJY29uVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlCQTE4MTEwNkUwMDAx
NkRDNTEgLyogSURCQW55LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTY2MzExRDRGQUM1MDA0
QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5
QkUxODExMDZFMDAwMTZEQzUxIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTFENzE5QzAxODExMDZFMDAwMTZEQzUxIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE2NzMwQTQxODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTUxMDE5NDQ1MTgzNkY3RTUwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNrZW5k
T3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5QzQxODExMDZFMDAwMTZEQzUx
IC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5QzcxODEx
MDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTc3MUM4
RjE4MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MUQ3MTlDQTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxRDcxOUNDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUNEMTgxMTA2RTAwMDE2
REM1MSAvKiBJREJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlDRjE4
MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxQzk2MTFCMTgzRDJCODAwMEQyMDAyRSAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MUQ3MTlEMTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRXZlbnREaXNw
YXRjaGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlEMzE4MTEwNkUwMDAxNkRDNTEgLyog
SURCRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RDYxODExMDZFMDAwMTZEQzUx
IC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTIz
QUYxRDE4OTE4QUU0MDAzMUNEQzkgLyogSURCR2V0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MUQ3MTlEOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxQUJCNUI4MTg2RDBFRDEwMDgzOTFBMSAvKiBJREJJbmRleE1ldGFkYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUQ3MTlEQzE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTFFQzFBNjE4OERBQ0E0MDBCQTNFQjYgLyogSURCS2V5RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5REUxODExMDZFMDAwMTZEQzUxIC8qIElEQktleVBhdGgu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUUwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlS
YW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyM0FGMTkxODkwQTRDQTAwMzFDREM5IC8qIElE
QktleVJhbmdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RTQxODExMDZFMDAwMTZE
QzUxIC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQjVCOTE4NkQw
RUQxMDA4MzkxQTEgLyogSURCT2JqZWN0U3RvcmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTFENzE5RTcxODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMkVBOUJFMTgyMDI4NTcwMDFEMDFFMCAvKiBJREJPcGVyYXRpb24uaCBp
biBIZWFkZXJzICovLAotCQkJCTUxQjA3QTQ0MTgyMzI0OEIwMEFBOEQxQSAvKiBJREJQZW5kaW5n
RGVsZXRlQ2FsbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEyRUE5QkMxODFGMkVFMDAwMUQwMUUw
IC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RUExODEx
MDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRUFDNUIyMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlFQzE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwQTMyNkYxODMxODQzMTAwM0M1MzI2IC8qIElE
QlNlcnZlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRDcxOUVGMTgxMTA2RTAw
MDE2REM1MSAvKiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEwQjdEQjgx
ODJEOUY1RDAwOUJGOTU3IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTEwNTlEREUxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9w
ZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRUFDNTY4MTgxNUVEM0UwMDRGMUJBNCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlG
NjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTcxRDU3QzBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDlFOTExQzUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMwNTRDRDExMThDOEU0MDBDRTI2
MzYgLyogSURMUGFyc2VyLnBtIGluIEhlYWRlcnMgKi8sCkBAIC0yNTM1Miw2ICsyNTQwMCw3IEBA
CiAJCQkJRTEzNEY1QUIxMkVFMzQzRjAwNEVDNThEIC8qIEludFJlY3RIYXNoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjc1MzU3NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjI3NTM1NzYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MUY0MUE2QzFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFj
a2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTI1MjREMUExQTc3REUwMDg2
NDQ4MCAvKiBJT1BNTGliU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NERFRjY0MzFBNkZGOTI3
MDBENDVFRUMgLyogSU9SZXR1cm5TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMEI0QUFCMThE
QTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjUzNjgsNiAr
MjU0MTcsNyBAQAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZEQTE1RTlFMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRp
b0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY0NUI1RjFCOUZBNkM4MDBG
Nzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUEwMTJC
MDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkRBMTVFQTYxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9Db250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUI0NTRFQTFCNERBRTdEMDA4NUVBQTYgLyogUGluZ0hhbmRsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTQwMiw2ICsyNTQ1Miw3IEBACiAJCQkJOTNGOUI2RTEwQkEwRkI3
MjAwODU0MDY0IC8qIEpTQ29tbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlBQzkyMTkxMDk5
NDVDODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkRBMTVFQkUxMkIwM0YwQjAwM0E1ODNBIC8qIEpTQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTEwM0MyQjkxQkEyM0EyNjAwRTI2MzM3IC8qIExlZ2FjeUFueS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU2RkQ0OEUwRjY3NkU5MzAwMDkyODczIC8qIEpTQ29vcmRpbmF0ZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMDcwNURBMDlFMEM5QkYwMEIxN0ZFNCAvKiBKU0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NUNBMkEyMTMwMzY3OUQwMEU5OUFEOSAvKiBKU0NyeXB0
by5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTQ4Niw2ICsyNTUzNyw3IEBACiAJCQkJNUZDN0RDMjZD
RkUyNTYzMjAwQjg1QUU0IC8qIEpTRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMz
MTRBQ0VDMTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MUY0MUE3OTFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ0Rl
bGV0ZUNhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJDMCAv
KiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovLAogCQkJCTc3Mjg2OTg0MTRG
RDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMwMEYwMTUwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTc3Nyw2ICsyNTgyOSw3IEBACiAJCQkJQjJGQTNEOEIwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHRkVPZmZzZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q4
RDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVBvaW50TGlnaHRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMkZBM0Q4RjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE2RTFCQTczQjVCMDAyRTA1
M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5MTBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyRkEzRDkzMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFVGlsZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyRkEzRDk1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU4MjAsNiArMjU4NzMsNyBAQAog
CQkJCUIyRkEzREM3MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RDOTBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJG
QTNEQ0IwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9v
dGhBYnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjQ1QjYxMUI5RkE2QzgwMEY3ODlDRSAvKiBM
ZWdhY3lGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RDRDBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNEQ0YwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0xpbmV0b0Fi
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERDEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU5MzMsNiAr
MjU5ODcsNyBAQAogCQkJCTY1REYzMjA2MDlEMUNDNjAwMDBCRTMyNSAvKiBKU1doZWVsRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxQ0FBNUM2MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE4MjU2OTAwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRjQxQTdDMUJBNzNCNUIwMDJF
MDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNTA1MjRGNDFCNzEyRkY2MDA2OTZBQTkgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUMzNkQzNTBFQjBBMDk0MDA3NDEwQkMg
LyogSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzM2MkVG
MEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTI2MDEwLDYgKzI2MDY1LDcgQEAKIAkJCQkyRDQxM0Y2MTFBMTg3QTNGMDA0MUE1MjEgLyogTG9v
a3VwU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0MDlEQzFBNDM2MEI1MDA5RTQ3RjMgLyog
TWFjaFNlbmRSaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMjUyNEYxQTFBNzhEMjAwODY0
NDgwIC8qIE1hY2hWTVNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2NDVCNkIxQjlGQTZDODAw
Rjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJBRDcw
NjE3RUZBMkM0MDAzOEY4RkYgLyogTWFpbkZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThG
NkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzMzA5REY4MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuaCBpbiBIZWFkZXJzICovLApA
QCAtMjYxODgsNiArMjYyNDQsNyBAQAogCQkJCTFBNTY5RDBGMEQ3RTJCODIwMDdDMzk4MyAvKiBu
cHJ1bnRpbWVfaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTAwRDdFMkI4MjAwN0Mz
OTgzIC8qIG5wcnVudGltZV9pbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTEw
RDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTY0NUI2OTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE5MjdGRDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNFMTI1MjUxMUExQkVCRDgwMDg2NDQ4MCAvKiBOU0NhbGVuZGFyRGF0ZVNQSS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzFERjYzNTcxQUYxODdERDAwNzhGRDkxIC8qIE5TQ29sb3JTUEku
aCBpbiBIZWFkZXJzICovLApAQCAtMjYxOTcsNiArMjYyNTQsNyBAQAogCQkJCTkzMjFENTkwMUEz
OTA3MDQwMDgwNTJCRSAvKiBOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzdGNENDRTFBMkQ0QjAxMDBCQjM5RjUgLyogTlNNZW51U1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTEyNTI0NzFBMTZDMkMyMDA4NjQ0ODAgLyogTlNQb2lu
dGVyRnVuY3Rpb25zU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE3NDFCQTczQjVCMDAy
RTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Yx
RTFFQzFBNDBGRERDMDAzNDhEMTMgLyogTlNQb3BvdmVyU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEQ0I4Mzc5MTlGOTlCQkEwMEE3RkJFNCAvKiBOU1NoYXJpbmdTZXJ2
aWNlUGlja2VyU1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MjQ2LDYgKzI2MzA0LDcgQEAKIAkJ
CQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGQkRCNjFBMTE2RDYwMzdFMDBCQjMzOTQgLyogUGFnZVJ1bGVDb2xs
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODk1MTQ3RDM1RjkwMDEwQkMwNiAvKiBQ
YWdlUnVudGltZUFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE2RjFCQTczQjVCMDAy
RTA1M0IgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RjM2
RDNCMThGNzU4NzIwMDU0QzAyNCAvKiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcxOTdGMjQxNzU2ODlDNDAwN0I5NDQyIC8qIFBhZ2VUaHJvdHRs
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjY0MTksNiArMjY0NzgsNyBAQAogCQkJCUE4NzFERUQz
MEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
MzA4MEYxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg3MURFRDEwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MTY0NUI2NzFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RFQTdDODQxMjc2MjMwNDAwQjg0NkREIC8qIFJl
bmRlckZ1bGxTY3JlZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0YwRTVBMTU3MDMwQzMwMDZE
QTU3RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMjhBNzMx
MzdDODY3QzAwQ0FDODQ1IC8qIFJlbmRlckdyaWQuaCBpbiBIZWFkZXJzICovLApAQCAtMjY2MTMs
NiArMjY2NzMsNyBAQAogCQkJCTA3OEUwOTJDMTdEMTREMUMwMDQyMEFBMSAvKiBSVENTdGF0c1Jl
c3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhFMDk0NjE3RDE2RTFDMDA0MjBBQTEgLyog
UlRDU3RhdHNSZXNwb25zZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQ3MTdEMTZF
MUMwMDQyMEFBMSAvKiBSVENWb2lkUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFGNDFB
NzExQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDc4RTA5MkQxN0QxNEQxQzAwNDIwQUExIC8qIFJUQ1ZvaWRSZXF1ZXN0SW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyNEFCQTMxQUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1ODI0QUJBNzFBRTgxMzg0MDA5MDc0QjcgLyog
UnVieVRleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2NzgzLDYgKzI2ODQ0LDcgQEAK
IAkJCQkxQTIyNDY0QzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTIyNDY0RTBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTQyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxS
ZXN1bHRTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRjQxQTcyMUJBNzNCNUIwMDJFMDUzQiAv
KiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZB
NDUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFOEE2NzQ4MTZDREQxOUUwMDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3QkM2QTQ5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzI0Nyw2ICsyNzMwOSw3IEBACiAJCQkJODY4MTYw
RDYxODc2NkExMzAwMjFFNzlEIC8qIFVzZXJBY3Rpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjYyNTVGMDMxODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0RBQjZEMzExN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxNjQ1QjY1MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9y
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgxQjIwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJB
Z2VudFN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU3OUQ0MzE4OERCNjFGMDAy
MjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwMDNG
MUZFQTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNzI1NCw2ICsyNzMxNyw3IEBACiAJCQkJMjU0MkY0REIxMTY2QzI1QTAwRTg5QTg2IC8q
IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTIwMzk4MzE4Qjk1
QkM2MDBCMzlBRjkgLyogVXNlcklucHV0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhF
MDkyRTE3RDE0RDFDMDA0MjBBQTEgLyogVXNlck1lZGlhQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MUY0MUE2ODFCQTczQjVCMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwNzhFMDkyRjE3RDE0RDFDMDA0MjBBQTEgLyogVXNlck1lZGlhQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MzAxN0QxNEQxQzAwNDIwQUExIC8qIFVzZXJN
ZWRpYVJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0I3OTcyMTkwODc1N0IwMEI0N0Ey
RCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjczMzcsNiArMjc0
MDEsNyBAQAogCQkJCUExNDgzMkNDMTg3RjY3QzQwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkUnVu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDRDE4N0Y2ODJFMDBEQTYzQTYgLyogV2ViQ29y
ZVRocmVhZFNhZmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkNGMTg3RjY4NDcwMERBNjNB
NiAvKiBXZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MUY0MUE3QTFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ09wZW5DYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUg
LyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NEEyMERCOTBGODQx
NjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLywKQEAg
LTI4MDM2LDYgKzI4MTAxLDcgQEAKIAkJCQk0MUQwMTVDQjBGNEI1QzcxMDA0QTY2MkYgLyogQ29u
dGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2MjdCOEQxNEZCM0NFRTAwMkNEQ0Ex
IC8qIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
MDZEN0JEMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTFGNDFBNkQxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQmFja2Vu
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjVBRDRGNjBCMEMyRURBMDA1QTJCMUQgLyogQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA2MDI3Q0IzMEIxQ0Mw
M0QwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5
M0I2QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAq
LywKQEAgLTI4MDYwLDYgKzI4MTI2LDcgQEAKIAkJCQlFMUM0MTVERTBGNjU1RDdDMDA5MkQyRkIg
LyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRTQzNDY1ODBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTE2OTgwNDkxMTMzNjQ0NzAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjYwMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdh
Y3lGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NUNBMjhBMTMwMzY1RjgwMEU5OUFE
OSAvKiBDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3MkFGNkQxODBGMjRDNjAwRkJB
REI5IC8qIENyeXB0b0FsZ29yaXRobS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1Rjg0MTE4
MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4MTM0LDYgKzI4MjAxLDcgQEAKIAkJCQlBODBFNkNGNTBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTUGFnZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3NzJCM0QwQzRFQTkxRTAw
ODMyODVGIC8qIENTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAyQTU0MDBFMDk5
QzVBMDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUx
MDNDMkI0MUJBMjMyQUUwMEUyNjMzNyAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTc3QjM4NjIxMjI4ODNFOTAwQjgxRkY4IC8qIENTU1ByZWxvYWRTY2FubmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2RDA1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQ
cmltaXRpdmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNkNGNzBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODM3Myw2ICsyODQ0
MSw3IEBACiAJCQkJNTJCNkM5QzIxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUxOERENzkwQTlDRjMxQjAwOTFCN0E2IC8q
IERPTU5hbWVkTm9kZU1hcC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1M0JGNERDMEFCQjZCNTUw
MDg2NDdCQiAvKiBET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE2NDVCNjYxQjlGQTZD
ODAwRjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODU1MjZDMzgwQUIwQTE3RTAwMDMwMkVBIC8qIERPTU5vZGVJdGVyYXRvci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTg1QUNBQThFMEE5Qjc1OUMwMDY3MUU5MCAvKiBET01Ob2RlTGlzdC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTg1NkM4QUU1MEE5MTI2NDkwMDVDNjg3QiAvKiBET01PYmplY3QubW0g
aW4gU291cmNlcyAqLywKQEAgLTI4NDUyLDYgKzI4NTIxLDcgQEAKIAkJCQlBOEM0QTgwODA5RDU2
MzI3MDAwM0FDOEQgLyogRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNUI3QTE3MDE3
QzEwQUE4MDBFNEFBMEEgLyogRWxlbWVudERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkQxNjQzQjcyNjAwNEUxNjM4IC8qIEVsZW1lbnRSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MUY0MUE2OTFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGQkRCNjE5QjE2RDYwMzJBMDBCQjMzOTQgLyogRWxlbWVudFJ1
bGVDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkY2Q0IwQTE1NjFDRDAwMEE0
MjM0IC8qIEVsbGlwc2lzQm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREJCMTI1MUYx
MkQwMDNFRjI2OSAvKiBFbWFpbElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NTQ5
LDYgKzI4NjE5LDcgQEAKIAkJCQk1MUUzQUEwQTFCOThCQ0FCMDAzNkFEODEgLyogU2VjdXJpdHlP
cmlnaW5EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2RDlEMjM2MTRFQUJEMjYwMDkwRDc1
RSAvKiBGb2N1c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTY0MEQwMDZDRDYw
MEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjZDMUI5RkE2Qzgw
MEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzNzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJBRkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5t
bSBpbiBTb3VyY2VzICovLApAQCAtMjg2NjAsNiArMjg3MzEsNyBAQAogCQkJCTkzMzA5REU3MDk5
RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Yx
OUE5MjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MTAzQzJCNTFCQTIzMkQ0MDBFMjYzMzcgLyogSURCRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM3MjMxMjI4NzIxNzAwQjgxRkY4IC8qIEhUTUxF
bGVtZW50U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MUQ0NUYwQTEyN0NCQzAwQjEy
QTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM4Njkx
MjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxFbnRpdHlQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yODc1MSw2ICsyODgyMyw3IEBACiAJCQkJRTQ0NjEzQUEwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhU
TUxWaWRlb0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM5QUFGRUMxQTBDMEM4RDAw
NjA1Rjk5IC8qIEhUTUxXQlJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOEM1NkQ0
MEYyODYyN0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVyTWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxNjQ1QjVBMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFDOTAwQzMxOTQzQzBGQzAwODYyNUI1IC8qIEhUVFBIZWFkZXJOYW1lcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY3MjBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNl
cnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxQTY3Q0IxMUM2QzdEQjAwMDQ3QjhCIC8qIEh5
cGhlbmF0aW9uQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODc2NCwzMiArMjg4MzcsMTQgQEAK
IAkJCQk1MUUxRUNDMDBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29yZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUQ3MTlCOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQW55LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0
aWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRDcxOUJGMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2NzMwQTMxODJEOEZCQjAwM0ZBRjVD
IC8qIElEQkN1cnNvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwMTk0NDQxODM2
RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTUxRDcxOUMzMTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5QzYxODExMDZFMDAwMTZEQzUxIC8qIElEQkRh
dGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNzcxQzhFMTgyREI0QjcwMDhFNzgxRSAv
KiBJREJEYXRhYmFzZUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5Q0IxODEx
MDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUQ3MTlDRTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MzExN0QxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRh
dGFiYXNlTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5RDAxODExMDZFMDAw
MTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUQ3
MTlEMjE4MTEwNkUwMDAxNkRDNTEgLyogSURCRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MUQ3MTlEODE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFENzE5REIxODExMDZFMDAwMTZEQzUxIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTFFQzFBODE4OERBRTdCMDBCQTNFQjYgLyogSURCS2V5RGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUQ3MTlERDE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UGF0aC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUQ3MTlERjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFu
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyM0FGMTgxODkwQTRDQTAwMzFDREM5IC8qIElE
QktleVJhbmdlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUQ3MTlFMzE4MTEwNkUwMDAx
NkRDNTEgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5RTYx
ODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTFENzE5RTkxODExMDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5RUIxODExMDZFMDAwMTZEQzUxIC8qIElE
QlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5RUUxODExMDZFMDAwMTZEQzUx
IC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxMEI3REI3MTgyRDlG
NUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTEwNTlEREQxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFFQUM1NjcxODE1RUQzRTAwNEYxQkE0IC8q
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5
RjUxODExMDZFMDAwMTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTcxRDU3QjBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDM0NGMTdBNDE1QjAwNjNGMDAyNzZEMzkgLyogSWRUYXJnZXRP
YnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDM0NGMTdBNjE1QjAwNjNGMDAyNzZEMzkg
LyogSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg4NDIs
NiArMjg4OTcsNyBAQAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzQzMTI0Qjk5RUMwMEM1MDY5
RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTlDQzgyMDE2
QkY5QkI0MDBFQzY0NUEgLyogSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MUY0MUE3NzFCQTczQjVCMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QUIwQjFDMDEyMTFBNjIyMDBBNzY5NDAgLyog
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjIxNTBG
NUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QTI0NTg3QjEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTM1MSw2ICsyOTQwNyw3IEBACiAJCQkJQjJGQTNENTIw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDQ5NkUzOUQxMzk4MTM2QzAwM0VFMzJBIC8qIEpTU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENTQwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwM0My
QjMxQkEyMzI0RDAwRTI2MzM3IC8qIElEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkZBM0Q1NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRpb25FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyRkEzRDU4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0NpcmNsZUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENUEwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk0NDgsNiArMjk1
MDUsNyBAQAogCQkJCUIyRkEzREUyMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BvaW50TGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RFNTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQ
b2x5Z29uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RFNzBBQjc1QTZGMDAw
RTVBQzQgLyogSlNTVkdQb2x5bGluZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFG
NDFBNzAxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0RFOTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREVCMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NTQyQTc5NDBBRTVDOTQwMDBERjU4REYgLyogSlNTVkdSZWN0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjk0NjYsNiArMjk1MjQsNyBAQAogCQkJCUIyMjM2MjI4MEMzQUYwNEEwMDA4Q0E5QiAv
KiBKU1NWR1RleHRQYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UwNjBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyRkEzRTA4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RpdGxlRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTAzQzJCMjFCQTIzMTc0MDBFMjYzMzcgLyogSURC
VHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNFMEEwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTBDMEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RyYW5zZm9ybUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJGQTNFMEUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTU2OCw2ICsyOTYyNyw3IEBACiAJCQkJNDYzRUI2MjIxQjg3ODlFMDAw
OTZFRDUxIC8qIFRhZ0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNzFBNTkw
RUVFQ0RFNDAwRjYxMjEzIC8qIEpTV29ya2VyTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMzQ4QkQzMERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxNTdENDY2MUJBMjRBRkQwMDg1Q0EyRiAvKiBJREJPYmplY3RTdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzM0OEJCRTBEQjdGNTMxMDA0QUJBQjkgLyogSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzYwREEzOTBEMkEz
MDI4MDBCOTkxOEYgLyogSlNYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGOTE2QzQ4RDBEQjUxMEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTYyMCw2ICsyOTY4MCw3IEBACiAJCQkJ
NjU2RDM3MzMwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NjgxMkQyNkUzODAwRTc5NDE1IC8qIExvYWRlclJ1bkxvb3BDRi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUFCRjY0RDE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVy
U3RyYXRlZ3kuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwM0MyQjgxQkEyMzVDNTAwRTI2MzM3
IC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNkU4MUVF
QzBBQjVEQTk3MDBDODc4MzcgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJRjU5NzNERTExNUNGQjIwMzAwMjdGODA0IC8qIExvY2FsZU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTc2MzNBNzI3MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1Nj
cmlwdE1hcHBpbmdEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk3ODUsNiArMjk4NDYs
NyBAQAogCQkJCTFBNTY5RDFBMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX3V0aWxpdHkubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxQ0Y2QkRGQjBFOUJCMjZBMDAyNUUxQ0QgLyogT2JqQ0V2ZW50TGlz
dGVuZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0Y2QkUxNDBFOUJCNDY3MDAyNUUxQ0QgLyog
T2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTY0NUI1QzFC
OUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxNjk4MjYwMTEzNDYzNkEwMDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdFNUQ3QTc2MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50
SW5kZXhVaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMDE3NzQwMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk4MTQs
MTAgKzI5ODc2LDEyIEBACiAJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTY3NEJEQjBGOUVCRjRFMDA2Q0YwOTkgLyogUGFn
ZUdyb3VwTG9hZERlZmVycmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMjY0OTdDMEQ3RTI0
RUMwMEJEMTBGMiAvKiBQYWdlTWFjLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMDNDMkI2MUJB
MjMzQkYwMEUyNjMzNyAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJENUM5
Q0ZGMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRDVDOUQwMTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZCREI2MTlEMTZENjAzNDYwMEJCMzM5NCAvKiBQYWdlUnVsZUNv
bGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzgyMDg5NDE0N0QzNUY5MDAxMEJDMDYg
LyogUGFnZVJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY0NUI2MjFCOUZB
NkM4MDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGMzZE
M0ExOEY3NTg3MjAwNTRDMDI0IC8qIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzNzFFNjVDRTEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxOTdGMjYxNzU2OEFFNTAwN0I5NDQyIC8qIFBhZ2VUaHJv
dHRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTg2MSw2ICsyOTkyNSw3IEBACiAJCQkJNDFC
RjcwMEYwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUM1Mjc4QjBDMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBh
c3RlYm9hcmRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlDNTk4OTAyRTE0RTlCMEY4MDBFOEQx
OEIgLyogUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFGNDFB
NzMxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFNDUzOTA0MzBFQUZENjM3MDAzNjk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1Mu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzk0RDEwODBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZv
cm1TY3JlZW5NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTM0OTQwQjE2QzAyQzBBMDA5MDEz
MTggLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zMDAwNyw2ICszMDA3Miw3IEBACiAJCQkJQkMzQkU5OTMwRTlDMUM3QzAwODM1NTg4IC8q
IFJlbmRlclNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzNCRTlBQjBFOUMyNDIw
MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzNCRTlBNTBFOUMyMzk2MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTFGNDFBNzUxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDU4RkU0MDkxNTg5REYw
QjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU4
REVFRDg2MTk4NzNGRjAwMDg4OEZGMyAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUFCMjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0zMDAzNiw2ICszMDEwMiw3IEBACiAJCQkJQkNFQTQ4NjcwOTdE
OTMwMjAwOTRDOUU0IC8qIFJlbmRlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkUyMDUw
N0QxOEE0NThCRjAwODA2NDdFIC8qIFJlbmRlclZUVEN1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBODcxREZFNTBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxRjQxQTdCMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NTI4REE2MUFDMTAzM0UwMDBFRjdB
RCAvKiBSZXBsYWNlRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGNTUyOERBOTFBQzEwOURGMDAwRUY3QUQgLyogUmVwbGFjZUluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5Q0NDNTIwRjQ0RTk4MTAwQjVEQTEw
IC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAw
NDYsNiArMzAxMTMsNyBAQAogCQkJCTk5Q0MwQjU4MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlJ
bnB1dERpc3BhdGNoTWV0aG9kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUNDMEI1OTE4QkU5
ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUND
MEI1QjE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTE2NDVCNUUxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzRENGMTI1MUYxMkQwMDNFRjI2OSAvKiBSZXNldElu
cHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRGNzEzRTBENUE2RjI4MDAwMThENjkg
LyogUmVzb3VyY2VFcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NkIxMkQy
NkUzODAwRTc5NDE1IC8qIFJlc291cmNlRXJyb3JDRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMw
MTk2LDYgKzMwMjY0LDcgQEAKIAkJCQlFMThERjMzODE4QUFGMTREMDA3NzNFNTkgLyogU2VyaWFs
aXplZENyeXB0b0tleVdyYXBNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzdBRjE0NDE4RjRC
MUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBNzVFNDk3NzEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjZBMUI5RkE2QzgwMEY3ODlD
RSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkzQUVFNDE5
REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0QjEzMEIwRjhBMDBGNUNEQjEgLyog
U2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwMjM1LDYgKzMwMzA0
LDcgQEAKIAkJCQlDRDNBNDk2MTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEM0E0OTY0MTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZm
ZXJMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQzhCNUFBMTgwNDdGRjEwMDE2RTY4NSAv
KiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxNTdE
NDY0MUJBMjRBRUUwMDg1Q0EyRiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA3NjMwNkQ3MTdFMTQ5Q0YwMDVBN0M0RSAvKiBTb3VyY2VJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUzNkQ1QTI1MTkzRjQwRkMwMENFNENBQiAvKiBTb3VyY2VTaXplTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwMjQ2LDYgKzMwMzE2LDcgQEAKIAkJCQlBQTJBNUFD
RDE2QTQ4NUZBMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4RkUxM0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTAzQzJCMTFCQTIyRDFBMDBF
MjYzMzcgLyogTGVnYWN5QW55LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ1MTI1MDIyMTVEQ0Uz
N0QwMDJGODRFMiAvKiBTcGluQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzMwOUUxMTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOUUxMzA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDI4Miw2ICszMDM1Myw3IEBACiAJCQkJQkM1
RUI2N0QwRTgxRDQyMDAwQjI1OTY1IC8qIFN0eWxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4Mzg2QTk3MDE5RjYxRTRGMDBFMUVDNEEgLyogU3R5bGVCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRUY0NDdBMEU2NzQ3RDAwMDFDMTI4NyAvKiBTdHlsZUNhY2hlZEltYWdl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMDNDMkI3MUJBMjMzQzQwMEUyNjMzNyAvKiBJREJP
cGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTNFNjA0MTUxQTlBMTgwMDA2
NkYwNiAvKiBTdHlsZUNhY2hlZEltYWdlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QzRB
N0ZFMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNUVCOEI4MEU4MjAxQkQwMEIyNTk2NSAvKiBTdHlsZURlcHJlY2F0ZWRGbGV4aWJsZUJv
eERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDQ4NCwxMiArMzA1NTYsMTQgQEAKIAkJCQkx
NTA1MjRGNzFCNzEyRkZGMDA2OTZBQTkgLyogTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QUQwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUQzMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdUaXRsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1N0Q0
NjUxQkEyNEFGODAwODVDQTJGIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFD
Q0RGNUJEMTk5MDMzMjQwMEJDRUJBRCAvKiBTVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMjI3QUQ2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1Ry
YW5zZm9ybWFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBREMwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QURFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCURFQzI5NzYxMUI0RjJGOEQwMDVGNTk0NSAvKiBKU0N1c3RvbUV2ZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjY0MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lP
YmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FFMTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRTQwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1RTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MjIyN0FFOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVVJJUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzA1NzQsNiArMzA2NDgsNyBAQAogCQkJCTc1NTNDRkU5MTA4RjQ3M0YwMEVBMjgx
RSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTQwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYx
M0FGMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFuZ2VzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxNjQ1QjY4MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExREU3MTMyMTg2MTMyMjIwMDczNDE5MiAvKiBUb3VjaENvbnN0cnVjdG9ycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMURFNzEyRDE4NjEyQUMxMDA3MzQxOTIgLyogVG91Y2hF
dmVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwMzM0RDkxNDVBMDA2RjAwOEQ4RDQ1IC8q
IFRyYWNrQmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwNzMzLDYgKzMwODA4LDcgQEAKIAkJ
CQlENzYxM0E1MDE0NzRGMTNGMDBEQjg2MDYgLyogV2ViS2l0TmFtZWRGbG93LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVERUJEQTMxNkZCOTA4NzAwODM2RkUwIC8qIFdlYktp
dFBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTFGNDFBNkIxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTMxQzBGRjI0MEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRU
cmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMzMkUwRjJCOUEyNTAw
NEI2Nzk1IC8qIFdlYkxheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OEUxQUU1NTU1
NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261128</attachid>
            <date>2015-09-14 13:40:11 -0700</date>
            <delta_ts>2015-09-14 13:59:19 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>769966</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGYzMTQ1MWYuLmNhMzNmZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMCw2ICsxMCw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01v
ZHVsZXMvaW5kZXhlZGRiIgorICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvaW5kaWV1aSIKICAgICAiJHtXRUJD
T1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNvbnRyb2xzLyIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9k
dWxlcy9tZWRpYXNlc3Npb24iCkBAIC04NDQsMTIgKzg0NSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCiAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAot
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcAogICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmQuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAog
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtODYyLDE1ICs4NTksMzEgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlRGF0
YS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAK
LSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCi0gICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAKLSAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHAKIAorICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKKyAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNrZW5kLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCisgICAgTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCisgICAgTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKyAgICBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAK
KyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmNwcAorICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeUZhY3RvcnkuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4
LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5jcHAK
KyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKKyAgICBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwCisgICAgTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAKKwogICAgIE1vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKIAogICAgIE1vZHVsZXMvbWVkaWFz
ZXNzaW9uL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNj
ZmFhYi4uZjU4Yjg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDE1LTA5LTE0ICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgY3VycmVu
dCBjb25jcmV0ZSBJREIgaW1wbGVtZW50YXRpb24gdG8gIkxlZ2FjeSIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxMTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5n
ZSBpbiBiZWhhdmlvcikuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBJREwgYmluZGluZ3Mg
YWJzdHJhY3QuCisgICAgICAgIEl0IHRoZW4gcmVuYW1lcyB0aGUgY3VycmVudCBjb25jcmV0ZSBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhlIGJpbmRpbmdzIGZyb20gIklEQiIgdG8gIkxlZ2FjeSIuCisg
ICAgICAgIEZpbmFsbHkgaXQgbW92ZXMgdGhvc2UgZmlsZXMgYW5kIHRoZWlyIHN1cHBvcnQgY2xh
c3NlcyB0byBhICJsZWdhY3kiIHN1YmZvbGRlci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5j
cHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcDoKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmg6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbDoK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0Lmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJDYWxsYmFja3MuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmguCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmQuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUJh
Y2tlbmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nRGVsZXRlQ2Fs
bC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVu
ZGluZ0RlbGV0ZUNhbGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURC
UGVuZGluZ09wZW5DYWxsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJQZW5kaW5nT3BlbkNhbGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmQuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRp
b25zLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rp
b25CYWNrZW5kT3BlcmF0aW9ucy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3JXaXRoVmFsdWUuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0
aFZhbHVlLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lE
YXRhYmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lG
YWN0b3J5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eUZhY3RvcnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJ
bmRleC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5SW5k
ZXguaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9i
amVjdFN0b3JlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPYmplY3RTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rp
b24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVy
c2lvbkNoYW5nZUV2ZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorCiAyMDE1LTA5LTE0ICBHeXV5b3VuZyBL
aW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBSZW1vdmUgY3Jl
YXRlKCkgZmFjdG9yeSBmdW5jdGlvbiBpbiBFdmFzR0xDb250ZXh0IGFuZCBFdmFzR0xTdXJmYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9N
V2luZG93SW5kZXhlZERhdGFiYXNlLmNwcAppbmRleCAyYTFhZTNjLi5kMDVkMjJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRv
d0luZGV4ZWREYXRhYmFzZS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJJREJGYWN0b3J5LmgiCisjaW5jbHVkZSAiTGVnYWN5RmFjdG9yeS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCkBAIC0xMTIs
NyArMTEyLDcgQEAgSURCRmFjdG9yeSogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjppbmRleGVk
REIoKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9pZGJGYWN0b3J5KQot
ICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+ZGF0YWJhc2VQ
cm92aWRlcigpLmlkYkZhY3RvcnlCYWNrZW5kKCkpOworICAgICAgICBtX2lkYkZhY3RvcnkgPSBM
ZWdhY3lGYWN0b3J5OjpjcmVhdGUocGFnZS0+ZGF0YWJhc2VQcm92aWRlcigpLmlkYkZhY3RvcnlC
YWNrZW5kKCkpOwogCiAgICAgcmV0dXJuIG1faWRiRmFjdG9yeS5nZXQoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCmluZGV4IDgyN2E0Y2QuLjRiMjg2
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcApAQCAt
MSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0y
OCwxOTEgKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1
ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiSURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURC
S2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiRE9NU3Ry
aW5nTGlzdC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SURCQW55PiBJ
REJBbnk6OmNyZWF0ZUludmFsaWQoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55
KFVuZGVmaW5lZFR5cGUpKTsKLX0KLQotUGFzc1JlZlB0cjxJREJBbnk+IElEQkFueTo6Y3JlYXRl
TnVsbCgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoTnVsbFR5cGUpKTsKLX0K
LQotUGFzc1JlZlB0cjxJREJBbnk+IElEQkFueTo6Y3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkodmFsdWUpKTsKLX0KLQot
SURCQW55OjpJREJBbnkoVHlwZSB0eXBlKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX2lu
dGVnZXIoMCkKLXsKLSAgICBBU1NFUlQodHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8IHR5cGUgPT0g
TnVsbFR5cGUpOwotfQotCi1JREJBbnk6On5JREJBbnkoKQotewotfQotCi1QYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IElEQkFueTo6ZG9tU3RyaW5nTGlzdCgpCi17Ci0gICAgQVNTRVJUKG1fdHlw
ZSA9PSBET01TdHJpbmdMaXN0VHlwZSk7Ci0gICAgcmV0dXJuIG1fZG9tU3RyaW5nTGlzdDsKLX0K
LQotUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQkFueTo6aWRiQ3Vyc29yKCkKLXsKLSAgICBBU1NF
UlQobV90eXBlID09IElEQkN1cnNvclR5cGUpOwotICAgIHJldHVybiBtX2lkYkN1cnNvcjsKLX0K
LQotUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkFueTo6aWRiQ3Vyc29yV2l0aFZh
bHVlKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvcldpdGhWYWx1ZVR5cGUpOwot
ICAgIHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKLX0KLQotUGFzc1JlZlB0cjxJREJEYXRh
YmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJE
YXRhYmFzZVR5cGUpOwotICAgIHJldHVybiBtX2lkYkRhdGFiYXNlOwotfQotCi1QYXNzUmVmUHRy
PElEQkZhY3Rvcnk+IElEQkFueTo6aWRiRmFjdG9yeSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9
PSBJREJGYWN0b3J5VHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiRmFjdG9yeTsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJJbmRleD4gSURCQW55OjppZGJJbmRleCgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9
PSBJREJJbmRleFR5cGUpOwotICAgIHJldHVybiBtX2lkYkluZGV4OwotfQotCi1QYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9iamVjdFN0b3JlKCkKLXsKLSAgICBBU1NFUlQo
bV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiT2JqZWN0U3Rv
cmU7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rp
b24oKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCVHJhbnNhY3Rpb25UeXBlKTsKLSAgICBy
ZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIElEQkFueTo6c2NyaXB0VmFsdWUoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gU2NyaXB0
VmFsdWVUeXBlKTsKLSAgICByZXR1cm4gbV9zY3JpcHRWYWx1ZTsKLX0KLQotY29uc3QgU3RyaW5n
JiBJREJBbnk6OnN0cmluZygpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBTdHJpbmdUeXBlKTsK
LSAgICByZXR1cm4gbV9zdHJpbmc7Ci19Ci0KLWludDY0X3QgSURCQW55OjppbnRlZ2VyKCkKLXsK
LSAgICBBU1NFUlQobV90eXBlID09IEludGVnZXJUeXBlKTsKLSAgICByZXR1cm4gbV9pbnRlZ2Vy
OwotfQotCi1JREJBbnk6OklEQkFueShQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVlKQot
ICAgIDogbV90eXBlKERPTVN0cmluZ0xpc3RUeXBlKQotICAgICwgbV9kb21TdHJpbmdMaXN0KHZh
bHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFueTo6SURCQW55KFBhc3NSZWZQ
dHI8SURCQ3Vyc29yV2l0aFZhbHVlPiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJREJDdXJzb3JXaXRo
VmFsdWVUeXBlKQotICAgICwgbV9pZGJDdXJzb3JXaXRoVmFsdWUodmFsdWUpCi0gICAgLCBtX2lu
dGVnZXIoMCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoUGFzc1JlZlB0cjxJREJDdXJzb3I+IHZh
bHVlKQotICAgIDogbV90eXBlKElEQkN1cnNvclR5cGUpCi0gICAgLCBtX2lkYkN1cnNvcih2YWx1
ZSkKLSAgICAsIG1faW50ZWdlcigwKQotewotfQotCi1JREJBbnk6OklEQkFueShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlPiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJREJEYXRhYmFzZVR5cGUpCi0gICAg
LCBtX2lkYkRhdGFiYXNlKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFu
eTo6SURCQW55KFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gdmFsdWUpCi0gICAgOiBtX3R5cGUoSURC
RmFjdG9yeVR5cGUpCi0gICAgLCBtX2lkYkZhY3RvcnkodmFsdWUpCi0gICAgLCBtX2ludGVnZXIo
MCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoUGFzc1JlZlB0cjxJREJJbmRleD4gdmFsdWUpCi0g
ICAgOiBtX3R5cGUoSURCSW5kZXhUeXBlKQotICAgICwgbV9pZGJJbmRleCh2YWx1ZSkKLSAgICAs
IG1faW50ZWdlcigwKQotewotfQotCi1JREJBbnk6OklEQkFueShQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJREJUcmFuc2FjdGlvblR5cGUpCi0gICAgLCBt
X2lkYlRyYW5zYWN0aW9uKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUlEQkFu
eTo6SURCQW55KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IHZhbHVlKQotICAgIDogbV90eXBl
KElEQk9iamVjdFN0b3JlVHlwZSkKLSAgICAsIG1faWRiT2JqZWN0U3RvcmUodmFsdWUpCi0gICAg
LCBtX2ludGVnZXIoMCkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIHZhbHVlKQotICAgIDogbV90eXBlKFNjcmlwdFZhbHVlVHlwZSkKLSAgICAs
IG1fc2NyaXB0VmFsdWUodmFsdWUpCi0gICAgLCBtX2ludGVnZXIoMCkKLXsKLX0KLQotSURCQW55
OjpJREJBbnkoY29uc3QgSURCS2V5UGF0aCYgdmFsdWUpCi0gICAgOiBtX3R5cGUoS2V5UGF0aFR5
cGUpCi0gICAgLCBtX2lkYktleVBhdGgodmFsdWUpCi0gICAgLCBtX2ludGVnZXIoMCkKLXsKLX0K
LQotSURCQW55OjpJREJBbnkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShTdHJp
bmdUeXBlKQotICAgICwgbV9zdHJpbmcodmFsdWUpCi0gICAgLCBtX2ludGVnZXIoMCkKLXsKLX0K
LQotSURCQW55OjpJREJBbnkoaW50NjRfdCB2YWx1ZSkKLSAgICA6IG1fdHlwZShJbnRlZ2VyVHlw
ZSkKLSAgICAsIG1faW50ZWdlcih2YWx1ZSkKK0lEQkFueTo6SURCQW55KCkKIHsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkFueS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgKaW5kZXgg
ZDcyODQ1Ni4uYTU3NTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQW55LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmgKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
ICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJBbnlf
aApAQCAtNTAsMjkgKzUwLDcgQEAgY2xhc3MgSURCVHJhbnNhY3Rpb247CiAKIGNsYXNzIElEQkFu
eSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPElEQkFueT4gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlSW52YWxpZCgpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlTnVsbCgpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkFueT4gY3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGUoVCog
aWRiT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoaWRi
T2JqZWN0KSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQW55PiBjcmVhdGUoY29uc3QgVCYgaWRiT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoaWRiT2JqZWN0KSk7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGUo
UGFzc1JlZlB0cjxUPiBpZGJPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkFueShpZGJPYmplY3QpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
QW55PiBjcmVhdGUoaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSURCQW55KHZhbHVlKSk7Ci0gICAgfQotICAgIH5JREJBbnkoKTsKKyAgICB2aXJ0dWFs
IH5JREJBbnkoKSB7IH0KIAogICAgIGVudW0gVHlwZSB7CiAgICAgICAgIFVuZGVmaW5lZFR5cGUg
PSAwLApAQCAtOTEsNTEgKzY5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgS2V5UGF0aFR5cGUsCiAg
ICAgfTsKIAotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIC8v
IFVzZSB0eXBlKCkgdG8gZmlndXJlIG91dCB3aGljaCBvbmUgb2YgdGhlc2UgeW91J3JlIGFsbG93
ZWQgdG8gY2FsbC4KLSAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3Qo
KTsKLSAgICBQYXNzUmVmUHRyPElEQkN1cnNvcj4gaWRiQ3Vyc29yKCk7Ci0gICAgUGFzc1JlZlB0
cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlkYkN1cnNvcldpdGhWYWx1ZSgpOwotICAgIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNlKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJGYWN0b3J5
PiBpZGJGYWN0b3J5KCk7Ci0gICAgUGFzc1JlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKTsKLSAg
ICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpOwotICAgIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uKCk7Ci0gICAgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKCk7Ci0gICAgaW50NjRfdCBpbnRlZ2VyKCk7
Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKTsKLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoKCkgeyByZXR1cm4gbV9pZGJLZXlQYXRoOyB9OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0
IElEQkFueShUeXBlKTsKLSAgICBleHBsaWNpdCBJREJBbnkoUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0Pik7Ci0gICAgZXhwbGljaXQgSURCQW55KFBhc3NSZWZQdHI8SURCQ3Vyc29yPik7Ci0gICAg
ZXhwbGljaXQgSURCQW55KFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPik7Ci0gICAgZXhw
bGljaXQgSURCQW55KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKLSAgICBleHBsaWNpdCBJREJB
bnkoUGFzc1JlZlB0cjxJREJGYWN0b3J5Pik7Ci0gICAgZXhwbGljaXQgSURCQW55KFBhc3NSZWZQ
dHI8SURCSW5kZXg+KTsKLSAgICBleHBsaWNpdCBJREJBbnkoUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4pOwotICAgIGV4cGxpY2l0IElEQkFueShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPik7
Ci0gICAgZXhwbGljaXQgSURCQW55KGNvbnN0IElEQktleVBhdGgmKTsKLSAgICBleHBsaWNpdCBJ
REJBbnkoY29uc3QgU3RyaW5nJik7Ci0gICAgZXhwbGljaXQgSURCQW55KGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJik7Ci0gICAgZXhwbGljaXQgSURCQW55KGludDY0X3QpOwotCi0gICAg
Y29uc3QgVHlwZSBtX3R5cGU7CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QoKSA9IDA7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkN1cnNvcj4gaWRiQ3Vyc29yKCkgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlkYkN1cnNvcldpdGhWYWx1
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNl
KCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBpZGJGYWN0b3J5KCkg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKSA9IDA7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9u
KCkgPSAwOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlw
dFZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBpbnRlZ2VyKCkgPSAwOworICAgIHZp
cnR1YWwgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKCkgPSAwOwogCi0gICAgLy8gT25seSBvbmUgb2YgdGhlIGZvbGxvd2lu
ZyBzaG91bGQgZXZlciBiZSBpbiB1c2UgYXQgYW55IGdpdmVuIHRpbWUuCi0gICAgY29uc3QgUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IG1fZG9tU3RyaW5nTGlzdDsKLSAgICBjb25zdCBSZWZQdHI8SURC
Q3Vyc29yPiBtX2lkYkN1cnNvcjsKLSAgICBjb25zdCBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVl
PiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2U+IG1f
aWRiRGF0YWJhc2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkZhY3Rvcnk+IG1faWRiRmFjdG9yeTsK
LSAgICBjb25zdCBSZWZQdHI8SURCSW5kZXg+IG1faWRiSW5kZXg7Ci0gICAgY29uc3QgUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBtX2lkYk9iamVjdFN0b3JlOwotICAgIGNvbnN0IFJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gbV9pZGJUcmFuc2FjdGlvbjsKLSAgICBjb25zdCBJREJLZXlQYXRoIG1faWRi
S2V5UGF0aDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX3NjcmlwdFZhbHVl
OwotICAgIGNvbnN0IFN0cmluZyBtX3N0cmluZzsKLSAgICBjb25zdCBpbnQ2NF90IG1faW50ZWdl
cjsKK3Byb3RlY3RlZDoKKyAgICBJREJBbnkoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxi
YWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NTcyZjEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIElEQkNhbGxiYWNrc19oCi0jZGVmaW5lIElEQkNhbGxiYWNrc19o
Ci0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0j
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
RE9NU3RyaW5nTGlzdDsKLWNsYXNzIElEQkN1cnNvckJhY2tlbmQ7Ci1jbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmQ7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLXN0cnVjdCBJREJEYXRhYmFzZU1ldGFk
YXRhOwotCi1jbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDYWxsYmFj
a3M+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJDYWxsYmFja3MoKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pID0gMDsKLSAg
ICAvLyBGcm9tIElEQkZhY3Rvcnkud2Via2l0R2V0RGF0YWJhc2VOYW1lcygpCi0gICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KSA9IDA7Ci0gICAgLy8g
RnJvbSBJREJPYmplY3RTdG9yZS9JREJJbmRleC5vcGVuQ3Vyc29yKCksIElEQkluZGV4Lm9wZW5L
ZXlDdXJzb3IoKQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPikgPSAwOwotICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUuYWRkKCkvcHV0KCks
IElEQkluZGV4LmdldEtleSgpCi0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PElEQktleT4pID0gMDsKLSAgICAvLyBGcm9tIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmdldCgp
L2NvdW50KCksIGFuZCB2YXJpb3VzIG1ldGhvZHMgdGhhdCB5aWVsZCBudWxsL3VuZGVmaW5lZC4K
LSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAw
OwotICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXguZ2V0KCkgKHdpdGgga2V5IGlu
amVjdGlvbikKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQYXRoJikgPSAwOwotICAgIC8v
IEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXguY291bnQoKQotICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoaW50NjRfdCB2YWx1ZSkgPSAwOwotCi0gICAgLy8gRnJvbSBJREJGYWN0b3IuZGVs
ZXRlRGF0YWJhc2UoKSwgSURCT2JqZWN0U3RvcmUvSURCSW5kZXguZ2V0KCksIElEQk9iamVjdFN0
b3JlLmRlbGV0ZSgpLCBJREJPYmplY3RTdG9yZS5jbGVhcigpCi0gICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcygpID0gMDsKLQotICAgIC8vIEZyb20gSURCQ3Vyc29yLmFkdmFuY2UoKS9jb250aW51
ZSgpCi0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pID0gMDsK
LQotICAgIC8vIEZyb20gSURCRmFjdG9yeS5vcGVuKCkvZGVsZXRlRGF0YWJhc2UoKQotICAgIHZp
cnR1YWwgdm9pZCBvbkJsb2NrZWQodWludDY0X3QgLyogZXhpc3RpbmdWZXJzaW9uICovKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgLy8gRnJvbSBJREJGYWN0b3J5Lm9wZW4oKQotICAg
IHZpcnR1YWwgdm9pZCBvblVwZ3JhZGVOZWVkZWQodWludDY0X3QgLyogb2xkVmVyc2lvbiAqLywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkNhbGxiYWNrc19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCBjNDAxMWRjLi44NjM4MGUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAK
QEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpA
QCAtMjgsMjQgKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0jaW5j
bHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNpbmNsdWRlICJJ
REJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPGlu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KLSNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxJREJDdXJzb3I+
IElEQkN1cnNvcjo6Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJREJSZXF1ZXN0KiByZXF1ZXN0
LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorSURCQ3Vyc29y
OjpJREJDdXJzb3IoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkN1cnNvcihiYWNr
ZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsKIH0KIAogY29u
c3QgQXRvbWljU3RyaW5nJiBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKQpAQCAtNzIsMjMxICs2
MCw2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb25QcmV2VW5pcXVl
KCkKICAgICByZXR1cm4gcHJldnVuaXF1ZTsKIH0KIAotCi1JREJDdXJzb3I6OklEQkN1cnNvcihQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uIGRpcmVjdGlvbiwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IG1fYmFja2VuZChiYWNrZW5kKQotICAg
ICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAg
LCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAg
ICwgbV90cmFuc2FjdGlvbk5vdGlmaWVyKHRyYW5zYWN0aW9uLCB0aGlzKQotICAgICwgbV9nb3RW
YWx1ZShmYWxzZSkKLXsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBBU1NFUlQobV9yZXF1
ZXN0KTsKLSAgICBBU1NFUlQobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0
b3JlVHlwZSB8fCBtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6SURCSW5kZXhUeXBlKTsKLSAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci19Ci0KLUlEQkN1cnNvcjo6fklEQkN1cnNvcigpCi17
Ci19Ci0KLWNvbnN0IFN0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb24oKSBjb25zdAotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yOjpkaXJlY3Rpb24iKTsKLSAgICByZXR1cm4gZGly
ZWN0aW9uVG9TdHJpbmcobV9kaXJlY3Rpb24pOwotfQotCi1jb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYgSURCQ3Vyc29yOjprZXkoKSBjb25zdAotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCQ3Vyc29yOjprZXkiKTsKLSAgICByZXR1cm4gbV9jdXJyZW50S2V5VmFsdWU7Ci19Ci0KLWNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25z
dAotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yOjpwcmltYXJ5S2V5Iik7Ci0gICAg
cmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXlWYWx1ZTsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIElEQkN1cnNvcjo6dmFsdWUoKSBjb25zdAotewotICAgIExPRyhTdG9yYWdl
QVBJLCAiSURCQ3Vyc29yOjp2YWx1ZSIpOwotICAgIHJldHVybiBtX2N1cnJlbnRWYWx1ZTsKLX0K
LQotSURCQW55KiBJREJDdXJzb3I6OnNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc291
cmNlLmdldCgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNvcjo6dXBk
YXRlIik7Ci0KLSAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNS
ZWFkT25seSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5
RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotICAgIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwotICAg
IGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKLSAgICBpZiAo
dXNlc0luTGluZUtleXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgobV9yZXF1ZXN0LT5yZXF1ZXN0U3Rh
dGUoKS0+ZXhlYygpLCB2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgIGlmICgha2V5UGF0aEtleSB8
fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSkgewotICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb2JqZWN0U3RvcmUt
PnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSwgSURCQW55OjpjcmVhdGUodGhp
cyksIHN0YXRlLCB2YWx1ZSwgbV9jdXJyZW50UHJpbWFyeUtleSwgZWMpOwotfQotCi12b2lkIElE
QkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3I6OmFkdmFuY2Ui
KTsKLSAgICBpZiAoIW1fZ290VmFsdWUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcmVxdWVzdC0+c2V0UGVuZGluZ0N1cnNvcih0aGlz
KTsKLSAgICBtX2dvdFZhbHVlID0gZmFsc2U7Ci0gICAgbV9iYWNrZW5kLT5hZHZhbmNlKGNvdW50
LCBtX3JlcXVlc3QsIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQotdm9pZCBJREJDdXJzb3I6
OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUp
OwotICAgIGNvbnRpbnVlRnVuY3Rpb24oa2V5LnJlbGVhc2UoKSwgZWMpOwotfQotCi12b2lkIElE
QkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJz
b3I6OmNvbnRpbnVlIik7Ci0gICAgaWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9nb3RWYWx1ZSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChrZXkpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudEtl
eSk7Ci0gICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
bjo6TmV4dCB8fCBtX2RpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbjo6TmV4
dE5vRHVwbGljYXRlKSB7Ci0gICAgICAgICAgICBpZiAoIW1fY3VycmVudEtleS0+aXNMZXNzVGhh
bihrZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6RGF0YUVycm9yOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgha2V5LT5pc0xlc3NUaGFuKG1fY3VycmVu
dEtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEYXRhRXJyb3I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlJ3JlIG5vdCB1c2luZyB0aGUgY29udGV4
dCBmcm9tIHdoZW4gY29udGludWUgd2FzIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhlIGNhbGxiYWNr
Ci0gICAgLy8gICAgICAgIHdpbGwgYmUgb24gdGhlIG9yaWdpbmFsIGNvbnRleHQgb3BlbkN1cnNv
ciB3YXMgY2FsbGVkIG9uLiBJcyB0aGlzIHJpZ2h0PwotICAgIG1fcmVxdWVzdC0+c2V0UGVuZGlu
Z0N1cnNvcih0aGlzKTsKLSAgICBtX2dvdFZhbHVlID0gZmFsc2U7Ci0gICAgbV9iYWNrZW5kLT5j
b250aW51ZUZ1bmN0aW9uKGtleSwgbV9yZXF1ZXN0LCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBl
YyA9IDA7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3I6OmRlbGV0ZSIpOwotICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIGlmICghbV9nb3RWYWx1ZSB8fCBpc0tleUN1cnNvcigpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24ocmVxdWVzdCwgZWMpOwot
ICAgIEFTU0VSVCghZWMpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotdm9p
ZCBJREJDdXJzb3I6OnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkKLXsKLSAgICBtX2JhY2tl
bmQtPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpj
bG9zZSgpCi17Ci0gICAgbV90cmFuc2FjdGlvbk5vdGlmaWVyLmN1cnNvckZpbmlzaGVkKCk7Ci0g
ICAgaWYgKG1fcmVxdWVzdCkgewotICAgICAgICBtX3JlcXVlc3QtPmZpbmlzaEN1cnNvcigpOwot
ICAgICAgICBtX3JlcXVlc3QgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBJREJDdXJzb3I6
OnNldFZhbHVlUmVhZHkoRE9NUmVxdWVzdFN0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiB2YWx1ZSkKLXsKLSAgICBtX2N1cnJlbnRLZXkgPSBrZXk7Ci0gICAgbV9jdXJyZW50S2V5
VmFsdWUgPSBpZGJLZXlUb1NjcmlwdFZhbHVlKHN0YXRlLCBtX2N1cnJlbnRLZXkpOwotCi0gICAg
bV9jdXJyZW50UHJpbWFyeUtleSA9IHByaW1hcnlLZXk7Ci0gICAgbV9jdXJyZW50UHJpbWFyeUtl
eVZhbHVlID0gaWRiS2V5VG9TY3JpcHRWYWx1ZShzdGF0ZSwgbV9jdXJyZW50UHJpbWFyeUtleSk7
Ci0KLSAgICBpZiAoIWlzS2V5Q3Vyc29yKCkpIHsKLSAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7Ci0gICAgICAgIGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEgPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEo
KTsKLSAgICAgICAgaWYgKG1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgJiYgIW1ldGFkYXRhLmtleVBh
dGguaXNOdWxsKCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBSZWZQdHI8SURCS2V5
PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgobV9y
ZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCB2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7
Ci0gICAgICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFs
KG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKTsKLSNlbmRpZgotICAgICAgICAgICAgYm9vbCBp
bmplY3RlZCA9IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShtX3JlcXVlc3QtPnJlcXVlc3RT
dGF0ZSgpLCBtX2N1cnJlbnRQcmltYXJ5S2V5LCB2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gd2F5IHRvIHJlcG9ydCBlcnJvcnMgaGVy
ZS4gTW92ZSB0aGlzIGludG8gb25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbiBzbyB0aGF0IHdlIGNh
biBhYm9ydCB0aGUgdHJhbnNhY3Rpb24gdGhlcmUuIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkyMjc4Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGluamVj
dGVkLCBpbmplY3RlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9jdXJyZW50VmFsdWUgPSB2
YWx1ZTsKLQotICAgIG1fZ290VmFsdWUgPSB0cnVlOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBJREJDdXJzb3I6OmVmZmVjdGl2ZU9iamVjdFN0b3JlKCkKLXsKLSAgICBpZiAobV9z
b3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSkKLSAgICAgICAgcmV0
dXJuIG1fc291cmNlLT5pZGJPYmplY3RTdG9yZSgpOwotICAgIFJlZlB0cjxJREJJbmRleD4gaW5k
ZXggPSBtX3NvdXJjZS0+aWRiSW5kZXgoKTsKLSAgICByZXR1cm4gaW5kZXgtPm9iamVjdFN0b3Jl
KCk7Ci19Ci0KIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIElEQkN1cnNvcjo6c3RyaW5nVG9E
aXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGlmIChkaXJlY3Rpb25TdHJpbmcgPT0gSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4
IDdkZGRjYWIuLjI0MTQ0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5oCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYg
SURCQ3Vyc29yX2gKQEAgLTQyLDcgKzQyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RE9NUmVxdWVzdFN0YXRlOwogY2xhc3MgSURCQW55OwogY2xhc3MgSURCQ2FsbGJhY2tzOwotY2xh
c3MgSURCQ3Vyc29yQmFja2VuZDsKIGNsYXNzIElEQlJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCkBAIC01OCw1MCArNTcsMjYgQEAgcHVibGljOgogICAgIHN0YXRpYyBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBzdHJpbmdUb0RpcmVjdGlvbihjb25zdCBTdHJpbmcm
IG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBkaXJlY3Rpb25Ub1N0cmluZyhJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtb2RlKTsK
IAotICAgIHN0YXRpYyBSZWY8SURCQ3Vyc29yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIElEQlJlcXVlc3QqLCBJREJBbnkq
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2aXJ0dWFsIH5JREJDdXJzb3IoKTsKKyAg
ICB2aXJ0dWFsIH5JREJDdXJzb3IoKSB7IH0KIAogICAgIC8vIEltcGxlbWVudCB0aGUgSURMCi0g
ICAgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24oKSBjb25zdDsKLSAgICBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5KCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIHByaW1hcnlLZXkoKSBjb25zdDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUoKSBjb25zdDsKLSAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OwotCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFkdmFuY2UodW5zaWdu
ZWQgbG9uZywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHByaW1hcnlLZXkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJREJB
bnkqIHNvdXJjZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9u
ZywgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBvdmVybG9hZCBpcyB1bm5lZWRlZC4KLSAgICB2b2lkIGNv
bnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IGNvbnRpbnVlRnVuY3Rpb24oc3RhdGljX2Nhc3Q8SURCS2V5Kj4obnVsbHB0ciksIGVjKTsg
fQotICAgIHZvaWQgY29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxl
ckNhbGxiYWNrKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgc2V0VmFsdWVSZWFkeShE
T01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwotICAgIFBhc3NSZWZQdHI8SURC
S2V5PiBpZGJQcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50UHJpbWFyeUtleTsgfQorICAg
IHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBF
eGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIElEQkN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSURCUmVxdWVzdCosIElEQkFueSog
c291cmNlLCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBJREJDdXJzb3IoKTsKIAotcHJpdmF0ZToKLSAg
ICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotCi0g
ICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCUmVx
dWVzdD4gbV9yZXF1ZXN0OwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIG1f
ZGlyZWN0aW9uOwotICAgIFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKLSAgICBJREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNv
ck5vdGlmaWVyIG1fdHJhbnNhY3Rpb25Ob3RpZmllcjsKLSAgICBib29sIG1fZ290VmFsdWU7Ci0g
ICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBoZWxkIGJlY2F1c2UgbV9iYWNrZW5kIG1heSBhZHZhbmNl
IHdoaWxlIHRoZXkKLSAgICAvLyBhcmUgc3RpbGwgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHN1Y2Nl
c3MgaGFuZGxlcnMuCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9jdXJyZW50S2V5VmFs
dWU7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9jdXJyZW50UHJpbWFyeUtleVZhbHVl
OwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKLSAgICBSZWZQdHI8SURCS2V5PiBt
X2N1cnJlbnRQcmltYXJ5S2V5OwotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVu
dFZhbHVlOworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCmluZGV4IGE1MDcxMjEuLjY0YjI5MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAt
MjYsNiArMjYsNyBAQAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAg
RW5hYmxlZEF0UnVudGltZT1JbmRleGVkREIsCisgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCiBd
IGludGVyZmFjZSBJREJDdXJzb3IgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgc291
cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGlyZWN0aW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwMWM3ZS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNs
dWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3Iu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCi0jaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCU2VydmVyQ29u
bmVjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JC
YWNrZW5kKGludDY0X3QgY3Vyc29ySUQsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpCi0gICAgOiBtX3Rhc2tU
eXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0gICAgLCBtX3Ry
YW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKLSAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9y
ZUlEKQotICAgICwgbV9jdXJzb3JJRChjdXJzb3JJRCkKLSAgICAsIG1fc2F2ZWRDdXJzb3JJRCgw
KQotICAgICwgbV9jbG9zZWQoZmFsc2UpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJP
cGVuQ3Vyc29yKHRoaXMpOwotfQotCi1JREJDdXJzb3JCYWNrZW5kOjp+SURCQ3Vyc29yQmFja2Vu
ZCgpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7Ci19
Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRp
b25Db2RlJikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNvckJhY2tlbmQ6OmNvbnRp
bnVlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVy
YXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXksIGNhbGxiYWNrcykpOwotfQotCi12b2lk
IElEQkN1cnNvckJhY2tlbmQ6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjphZHZhbmNlIik7Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgY291bnQs
IGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OmRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6ZGVsZXRlIik7Ci0gICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZTo6UmVhZE9ubHkpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlS
YW5nZTo6Y3JlYXRlKHByaW1hcnlLZXkoKSk7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSUQsIGtleVJh
bmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5k
OjpjbG9zZSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjpjbG9z
ZSIpOwotICAgIGNsZWFyKCk7Ci0gICAgbV9jbG9zZWQgPSB0cnVlOwotICAgIG1fc2F2ZWRDdXJz
b3JJRCA9IDA7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZDo6dXBkYXRlQ3Vyc29yRGF0YShJ
REJLZXkqIGtleSwgSURCS2V5KiBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXIqIHZhbHVlQnVmZmVy
KQotewotICAgIG1fY3VycmVudEtleSA9IGtleTsKLSAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0g
cHJpbWFyeUtleTsKLSAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlciA9IHZhbHVlQnVmZmVyOwotfQot
Ci12b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNsZWFyKCkKLXsKLSAgICBtX2N1cnNvcklEID0gMDsK
LSAgICBtX2N1cnJlbnRLZXkgPSBudWxscHRyOwotICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBu
dWxscHRyOwotICAgIG1fY3VycmVudFZhbHVlQnVmZmVyID0gbnVsbHB0cjsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNGQxZjkuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBJREJDdXJzb3JCYWNr
ZW5kX2gKLSNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsK
LQotY2xhc3MgSURCQ3Vyc29yQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkN1cnNvckJh
Y2tlbmQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0
ZShpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJz
b3JJRCwgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCB0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmVJRCkpOwotICAgIH0KLSAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJh
Y2tlbmQ+IGNyZWF0ZShpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vy
c29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwg
Y3Vyc29yVHlwZSwgdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlEKSk7Ci0gICAg
fQotICAgIH5JREJDdXJzb3JCYWNrZW5kKCk7Ci0KLSAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQg
bG9uZywgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBvc3RTdWNjZXNz
SGFuZGxlckNhbGxiYWNrKCkgeyB9Ci0KLSAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudEtleS5nZXQoKTsgfQotICAgIElEQktleSogcHJpbWFyeUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCk7IH0KLSAgICBTaGFyZWRCdWZmZXIqIHZh
bHVlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1
cnNvclR5cGU6OktleU9ubHkpID8gbnVsbHB0ciA6IG1fY3VycmVudFZhbHVlQnVmZmVyLmdldCgp
OyB9Ci0gICAgdm9pZCB1cGRhdGVDdXJzb3JEYXRhKElEQktleSosIElEQktleSogcHJpbWFyeUtl
eSwgU2hhcmVkQnVmZmVyKiB2YWx1ZUJ1ZmZlcik7Ci0KLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAg
ICBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
c29yVHlwZTsgfQotCi0gICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29ySUQ7
IH0KLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24oKSB7IHJldHVybiAq
bV90cmFuc2FjdGlvbjsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotICAgIHZvaWQgc2V0U2F2ZWRD
dXJzb3JJRChpbnQ2NF90IGN1cnNvcklEKSB7IG1fc2F2ZWRDdXJzb3JJRCA9IGN1cnNvcklEOyB9
Ci0KLXByaXZhdGU6Ci0gICAgSURCQ3Vyc29yQmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRl
eGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZCYsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCk7Ci0KLSAgICBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JUeXBl
IG1fY3Vyc29yVHlwZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5z
YWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotCi0gICAgaW50NjRf
dCBtX2N1cnNvcklEOwotICAgIGludDY0X3QgbV9zYXZlZEN1cnNvcklEOwotCi0gICAgUmVmUHRy
PElEQktleT4gbV9jdXJyZW50S2V5OwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1h
cnlLZXk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9jdXJyZW50VmFsdWVCdWZmZXI7Ci0K
LSAgICBib29sIG1fY2xvc2VkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJDdXJzb3JCYWNr
ZW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2RhMTY5Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kT3BlcmF0aW9ucy5oIgotCi0jaW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbi5o
IgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8
Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJh
Y2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ip
IHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBtX2N1cnNvci0+Y2xlYXIoKTsK
LSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgfSBlbHNl
IGlmICgha2V5KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNv
IG5vIGtleSwgdGhlbiB0aGUgY3Vyc29yIHJlYWNoZWQgdGhlIGVuZC4KLSAgICAgICAgICAgIG1f
Y3Vyc29yLT5jbGVhcigpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0
aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihudWxscHRyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBtX2N1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShrZXkuZ2V0KCksIHByaW1hcnlLZXku
Z2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3Moa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBGSVhNRTogQ3Vyc29yIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gcGFzcyBhbG9u
ZyBhbiBlcnJvciBpbnN0ZWFkIG9mIHN1Y2Nlc3MKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNr
KCk7Ci0gICAgfTsKLQotICAgIG1fY3Vyc29yLT50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmN1cnNvckFkdmFuY2UoKm1fY3Vyc29yLCAqdGhpcywgY2FsbGJhY2sp
OwotfQotCi12b2lkIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8Q3Vyc29ySXRlcmF0aW9u
T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgYXV0byBjYWxsYmFjayA9IFt0aGlzLCBv
cGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZUJ1ZmZlciwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikgewotICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIG1fY3Vyc29yLT5jbGVhcigpOwotICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICB9IGVsc2UgaWYgKCFrZXkpIHsK
LSAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZXJyb3IgYnV0IGFsc28gbm8ga2V5LCB0aGVu
IHRoZSBjdXJzb3IgcmVhY2hlZCB0aGUgZW5kLgotICAgICAgICAgICAgbV9jdXJzb3ItPmNsZWFy
KCk7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJl
ZEJ1ZmZlcio+KG51bGxwdHIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY3Vy
c29yLT51cGRhdGVDdXJzb3JEYXRhKGtleS5nZXQoKSwgcHJpbWFyeUtleS5nZXQoKSwgdmFsdWVC
dWZmZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXksIHBy
aW1hcnlLZXksIHZhbHVlQnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBD
dXJzb3Igb3BlcmF0aW9ucyBzaG91bGQgYmUgYWJsZSB0byBwYXNzIGFsb25nIGFuIGVycm9yIGlu
c3RlYWQgb2Ygc3VjY2VzcwotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKLSAgICB9Owot
Ci0gICAgbV9jdXJzb3ItPnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9u
KCkuY3Vyc29ySXRlcmF0ZSgqbV9jdXJzb3IsICp0aGlzLCBjYWxsYmFjayk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRUQoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
Mjc5NzdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnNfaAotI2RlZmluZSBJREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9uc19oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
LQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJPcGVyYXRpb24u
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9w
ZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0
aW9uKGN1cnNvciwga2V5LCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGUg
ZmluYWw7Ci0KLSAgICBpbnQ2NF90IGN1cnNvcklEKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3It
PmlkKCk7IH0KLSAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZD4gY3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAg
ICAgICAgLCBtX2tleShrZXkpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gbV9jdXJzb3I7Ci0gICAg
UmVmUHRyPElEQktleT4gbV9rZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Ci19OwotCi1jbGFzcyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJh
dGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEN1cnNvckFkdmFuY2VPcGVyYXRpb24oY3Vyc29yLCBjb3VudCwgY2FsbGJh
Y2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCBj
dXJzb3JJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLT5pZCgpOyB9Ci0gICAgdW5zaWduZWQg
bG9uZyBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KLQotcHJpdmF0ZToKLSAgICBD
dXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29y
LCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAgICAgICAgLCBtX2NvdW50KGNvdW50KQot
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQkN1cnNvckJhY2tlbmQ+IG1fY3Vyc29yOwotICAgIHVuc2lnbmVkIGxvbmcgbV9jb3Vu
dDsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2Vu
ZGlmIC8vIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCmluZGV4IDkw
ZWM1N2EuLjVjZTQ3MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yOCwyOCArMjgsOSBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgi
Ci0jaW5jbHVkZSAiSURCS2V5LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0
cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29y
V2l0aFZhbHVlKGJhY2tlbmQsIGRpcmVjdGlvbiwgcmVxdWVzdCwgc291cmNlLCB0cmFuc2FjdGlv
bikpOwotfQotCi1QYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQ3Vyc29yV2l0aFZh
bHVlOjpmcm9tQ3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBwcnBDdXJzb3IpCi17Ci0gICAg
UmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gY3Vyc29yV2l0aFZhbHVlKHN0YXRpY19jYXN0PElE
QkN1cnNvcldpdGhWYWx1ZSo+KHBycEN1cnNvci5nZXQoKSkpOwotICAgIHJldHVybiBjdXJzb3JX
aXRoVmFsdWUucmVsZWFzZSgpOwotfQotCi1JREJDdXJzb3JXaXRoVmFsdWU6OklEQkN1cnNvcldp
dGhWYWx1ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6
Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IElEQkN1cnNvcihiYWNr
ZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pCi17Ci19Ci0KLUlE
QkN1cnNvcldpdGhWYWx1ZTo6fklEQkN1cnNvcldpdGhWYWx1ZSgpCitJREJDdXJzb3JXaXRoVmFs
dWU6OklEQkN1cnNvcldpdGhWYWx1ZSgpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmgKaW5kZXggOTZmOTZiMC4u
YzUzMTlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yV2l0aFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yV2l0aFZhbHVlLmgKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAog
I2lmbmRlZiBJREJDdXJzb3JXaXRoVmFsdWVfaApAQCAtMzQsMjIgKzM0LDE2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlIDogcHVibGljIElEQkN1cnNv
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24sIElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGZyb21DdXJzb3IoUGFzc1Jl
ZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2aXJ0dWFsIH5JREJDdXJzb3JXaXRoVmFsdWUoKTsKLQot
ICAgIC8vIFRoZSB2YWx1ZSBhdHRyaWJ1dGUgZGVmaW5lZCBpbiB0aGUgSURMIGlzIHNpbXBseSBp
bXBsZW1lbnRlZCBpbiBJREJDdXJzb3IgKGJ1dCBub3QgZXhwb3NlZCB2aWEKLSAgICAvLyBpdHMg
SURMKS4gVGhpcyBpcyB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBtb3JlIHNpbXBsZSB3aGls
ZSBtYXRjaGluZyB3aGF0IHRoZSBzcGVjIHNheXMuCisgICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0
aFZhbHVlKCkgeyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3Io
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIElEQkN1cnNvcldpdGhWYWx1
ZSgpOwogCi1wcml2YXRlOgotICAgIElEQkN1cnNvcldpdGhWYWx1ZShQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSURCUmVxdWVzdCosIElE
QkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1
cnNvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgogCi0jZW5kaWYgLy8gSURCQ3Vyc29yV2l0aFZhbHVlX2gK
KyNlbmRpZiAvLyBMZWdhY3lDdXJzb3JXaXRoVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKaW5kZXggMjQ2
ZGMwNi4uMzQ3MWEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCkBAIC0yNiw2ICsyNiw3IEBACiBbCiAgICAg
Q29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKICAgICBFbmFibGVkQXRSdW50aW1lPUluZGV4
ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIElEQkN1cnNvcldp
dGhWYWx1ZSA6IElEQkN1cnNvciB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGFueSB2YWx1ZTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5j
cHAKaW5kZXggOWVlZjlhZi4uMmQ2NDc5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yOCwzNzEgKzI4LDExIEBACiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNp
bmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
Ci0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIK
LSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNp
bmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVu
dC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCi0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxs
U3RhY2suaD4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8SURCRGF0YWJhc2U+IElEQkRhdGFiYXNlOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmQ+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi17Ci0gICAgUmVmPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZigqbmV3
IElEQkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjYWxsYmFja3MpKSk7Ci0gICAgaWRiRGF0
YWJhc2UtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgIHJldHVybiBpZGJEYXRhYmFzZTsKLX0KLQot
SURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCitJREJEYXRhYmFzZTo6SURCRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250
ZXh0KQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX2Nsb3NlUGVuZGluZyhmYWxz
ZSkKLSAgICAsIG1faXNDbG9zZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNl
KQotICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhjYWxsYmFja3MpCi17Ci0gICAgLy8gV2UgcGFz
cyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0g
ICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLUlEQkRhdGFiYXNlOjp+SURCRGF0
YWJhc2UoKQotewotICAgIC8vIFRoaXMgZG9lcyB3aGF0IElEQkRhdGFiYXNlOjpjbG9zZSBkb2Vz
LCBidXQgd2l0aG91dCBhbnkgcmVmL2RlcmVmIG9mIHRoZQotICAgIC8vIGRhdGFiYXNlIHNpbmNl
IGl0IGlzIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVsZXRlZC4gVGhlIGxvZ2lj
IGhlcmUKLSAgICAvLyBpcyBhbHNvIHNpbXBsZXIgc2luY2Ugd2Uga25vdyB0aGVyZSBhcmUgbm8g
dHJhbnNhY3Rpb25zIChzaW5jZSB0aGV5IHJlZiB0aGUKLSAgICAvLyBkYXRhYmFzZSB3aGVuIHRo
ZXkgYXJlIGFsaXZlKS4KLQotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwot
Ci0gICAgaWYgKCFtX2Nsb3NlUGVuZGluZykgewotICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRy
dWU7Ci0gICAgICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAg
fQotCi0gICAgaWYgKGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
LSAgICAgICAgLy8gUmVtb3ZlIGFueSBwZW5kaW5nIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVk
dWxlZCB0byBmaXJlIG9uIHRoaXMKLSAgICAgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBo
YXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgotICAgICAgICAv
LyBjb25uZWN0aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rp
b24gaXMgYmVpbmcKLSAgICAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCi0g
ICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKQotICAgICAgICAgICAg
Y29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KCpldmVudCk7Ci0gICAgfQotfQotCi1p
bnQ2NF90IElEQkRhdGFiYXNlOjpuZXh0VHJhbnNhY3Rpb25JZCgpCi17Ci0gICAgLy8gT25seSBr
ZWVwIGEgMzItYml0IGNvdW50ZXIgdG8gYWxsb3cgcG9ydHMgdG8gdXNlIHRoZSBvdGhlciAzMgot
ICAgIC8vIGJpdHMgb2YgdGhlIGlkLgotICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4g
Y3VycmVudFRyYW5zYWN0aW9uSWQ7Ci0KLSAgICByZXR1cm4gKytjdXJyZW50VHJhbnNhY3Rpb25J
ZDsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb25DcmVhdGVkKElEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwotICAgIEFTU0VS
VCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKLSAgICBtX3Ry
YW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24tPmlkKCksIHRyYW5zYWN0aW9uKTsKLQotICAgIGlm
ICh0cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgQVNTRVJUKCFtX3Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uID0gdHJhbnNhY3Rpb247Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlOjp0cmFuc2Fj
dGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQo
dHJhbnNhY3Rpb24pOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbi0+aWQoKSkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24t
PmlkKCkpID09IHRyYW5zYWN0aW9uKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNh
Y3Rpb24tPmlkKCkpOwotCi0gICAgaWYgKHRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkg
ewotICAgICAgICBBU1NFUlQobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rp
b24pOwotICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKG1fY2xvc2VQZW5kaW5nICYmIG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkK
LSAgICAgICAgY2xvc2VDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6Om9uQWJv
cnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklk
KSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5vbkFib3J0KGVycm9y
KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9u
SWQpCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQp
KTsKLSAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPm9uQ29tcGxldGUoKTsK
LX0KLQotUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVO
YW1lcygpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFt
ZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3Jl
IDogbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMudmFsdWVzKCkpCi0gICAgICAgIG9iamVjdFN0b3Jl
TmFtZXMtPmFwcGVuZChvYmplY3RTdG9yZS5uYW1lKTsKLSAgICBvYmplY3RTdG9yZU5hbWVzLT5z
b3J0KCk7Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOwotfQotCi11aW50
NjRfdCBJREJEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgLy8gTm9JbnRWZXJzaW9u
IGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHNob3VsZG4ndCBi
ZSBleHBvc2VkIHRvIHNjcmlwdC4KLSAgICAvLyBEZWZhdWx0SW50VmVyc2lvbiBzaG91bGQgYmUg
ZXhwb3NlZCBpbnN0ZWFkLgotICAgIHJldHVybiBtX21ldGFkYXRhLnZlcnNpb24gIT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uID8gbV9tZXRhZGF0YS52ZXJzaW9uIDogc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKTsK
LX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCS2V5UGF0aCBrZXlQYXRoOwotICAgIGJvb2wgYXV0
b0luY3JlbWVudCA9IGZhbHNlOwotICAgIGlmICghb3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7Ci0gICAgICAgIFN0cmluZyBrZXlQYXRoU3RyaW5nOwotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBrZXlQYXRoQXJyYXk7Ci0gICAgICAgIGlmIChvcHRpb25zLmdldCgia2V5UGF0aCIsIGtleVBh
dGhBcnJheSkpCi0gICAgICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aChrZXlQYXRoQXJyYXkp
OwotICAgICAgICBlbHNlIGlmIChvcHRpb25zLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygi
a2V5UGF0aCIsIGtleVBhdGhTdHJpbmcpKQotICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBh
dGgoa2V5UGF0aFN0cmluZyk7Ci0KLSAgICAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNyZW1lbnQi
LCBhdXRvSW5jcmVtZW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlT2JqZWN0U3RvcmUo
bmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2U6OmNyZWF0
ZU9iamVjdFN0b3JlIik7Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBp
ZiAoY29udGFpbnNPYmplY3RTdG9yZShuYW1lKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGlmICgha2V5UGF0aC5pc051bGwoKSAmJiAha2V5UGF0aC5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGlmIChhdXRvSW5jcmVtZW50ICYmICgoa2V5UGF0aC50eXBlKCkg
PT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiBrZXlQYXRoLnN0cmluZygpLmlzRW1wdHkoKSkg
fHwga2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1fbWV0YWRhdGEu
bWF4T2JqZWN0U3RvcmVJZCArIDE7Ci0gICAgbV9iYWNrZW5kLT5jcmVhdGVPYmplY3RTdG9yZSht
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJZCwgbmFtZSwga2V5
UGF0aCwgYXV0b0luY3JlbWVudCk7Ci0KLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFk
YXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRhdGFi
YXNlQmFja2VuZDo6TWluaW11bUluZGV4SWQpOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBtX3ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0
KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7Ci0gICAgKyttX21ldGFkYXRhLm1heE9iamVjdFN0b3Jl
SWQ7Ci0KLSAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVk
KG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJh
c2U6OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbikgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpOwotICAg
IGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZSht
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKLSAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2NvcGUsIGNvbnN0
IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24iKTsKLSAgICBpZiAoIXNjb3BlLnNpemUo
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbjo6c3RyaW5nVG9Nb2RlKG1vZGVTdHJpbmcsIGVj
KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uIHx8IG1fY2xvc2VQZW5kaW5nKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7Ci0gICAgZm9yIChhdXRv
JiBuYW1lIDogc2NvcGUpIHsKLSAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gZmluZE9i
amVjdFN0b3JlSWQobmFtZSk7Ci0gICAgICAgIGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0gICAgICAgIG9iamVjdFN0b3JlSWRzLmFwcGVuZChvYmplY3RTdG9yZUlkKTsKLSAgICB9
Ci0KLSAgICBpbnQ2NF90IHRyYW5zYWN0aW9uSWQgPSBuZXh0VHJhbnNhY3Rpb25JZCgpOwotICAg
IG1fYmFja2VuZC0+Y3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgbV9kYXRhYmFzZUNh
bGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1vZGUpOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNh
Y3Rpb25JZCwgc2NvcGUsIG1vZGUsIHRoaXMpOwotICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxl
YXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHN0
b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgp
OwotICAgIHN0b3JlTmFtZXMtPmFwcGVuZChzdG9yZU5hbWUpOwotICAgIHJldHVybiB0cmFuc2Fj
dGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCBlYyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2U6OmZvcmNlQ2xvc2UoKQotewotICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBtX3RyYW5z
YWN0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENF
UFRJT04pOwotICAgIHRoaXMtPmNsb3NlKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmNsb3Nl
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlOjpjbG9zZSIpOwotICAgIGlm
IChtX2Nsb3NlUGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbG9zZVBlbmRpbmcg
PSB0cnVlOwotCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgY2xv
c2VDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbigp
Ci17Ci0gICAgQVNTRVJUKG1fY2xvc2VQZW5kaW5nKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuaXNFbXB0eSgpKTsKLQotICAgIC8vIENsb3NpbmcgbWF5IHJlc3VsdCBpbiBkZWFsbG9jYXRp
bmcgdGhlIGxhc3QgdHJhbnNhY3Rpb24sIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkZWxldGluZwot
ICAgIC8vIHRoaXMgSURCRGF0YWJhc2UuIFdlIG5lZWQgdGhlIGRlYWxsb2NhdGlvbiB0byBoYXBw
ZW4gYWZ0ZXIgd2UgYXJlIHRocm91Z2guCi0gICAgUmVmPElEQkRhdGFiYXNlPiBwcm90ZWN0KCp0
aGlzKTsKLQotICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0KLSAg
ICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBFdmVudFF1ZXVlJiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7Ci0gICAgLy8gUmVtb3ZlIGFueSBwZW5kaW5nIHZl
cnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMKLSAgICAvLyBjb25u
ZWN0aW9uLiBUaGV5IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgdGhlIGJhY2tlbmQgd2hl
biBhbm90aGVyCi0gICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBm
cm9udGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCi0gICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNv
dWxkIGZpcmUuCi0gICAgZm9yIChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwotICAgIH0KLQotICAgIG1faXND
bG9zZWQgPSB0cnVlOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UodWlu
dDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKLXsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkRhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UiKTsKLSAgICBpZiAobV9jb250ZXh0
U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9jbG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChu
ZXdWZXJzaW9uICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Ci0gICAgZW5x
dWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1Zl
cnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIEFT
U0VSVCghbV9jb250ZXh0U3RvcHBlZCk7Ci0gICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKLSAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRo
aXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVF
dmVudChldmVudC5nZXQoKSk7Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwot
fQotCi1ib29sIElEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQi
KTsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5n
ZUV2ZW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZl
bnQuZ2V0KCkpCi0gICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKLX0K
LQotaW50NjRfdCBJREJEYXRhYmFzZTo6ZmluZE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAotewotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX21ldGFkYXRhLm9i
amVjdFN0b3JlcykgewotICAgICAgICBpZiAob2JqZWN0U3RvcmUudmFsdWUubmFtZSA9PSBuYW1l
KSB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUua2V5ICE9IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGE6OkludmFsaWRJZCk7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUua2V5
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJ
bnZhbGlkSWQ7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2U6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0Ci17Ci0gICAgLy8gVGhlIHNjcmlwdCB3cmFwcGVyIG11c3Qgbm90IGJlIGNvbGxlY3RlZCBi
ZWZvcmUgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3IKLSAgICAvLyB3ZSBjYW4ndCBmaXJlIGEgInZl
cnNpb25jaGFuZ2UiIGV2ZW50IHRvIGxldCBzY3JpcHQgbWFudWFsbHkgY2xvc2UgdGhlIGNvbm5l
Y3Rpb24uCi0gICAgcmV0dXJuICFtX2Nsb3NlUGVuZGluZyAmJiBoYXNFdmVudExpc3RlbmVycygp
ICYmICFtX2NvbnRleHRTdG9wcGVkOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpzdG9wKCkKLXsK
LSAgICAvLyBTdG9wIGZpcmVzIGF0IGEgZGV0ZXJtaW5pc3RpYyB0aW1lLCBzbyB3ZSBuZWVkIHRv
IGNhbGwgY2xvc2UgaW4gaXQuCi0gICAgY2xvc2UoKTsKLQotICAgIG1fY29udGV4dFN0b3BwZWQg
PSB0cnVlOwotfQotCi1jb25zdCBjaGFyKiBJREJEYXRhYmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJJREJEYXRhYmFzZSI7Ci19Ci0KLWJvb2wgSURCRGF0
YWJhc2U6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2lz
Q2xvc2VkOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAppbmRleCA0ODk5NzYzLi5hNWE5NjEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKQEAg
LTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJEYXRhYmFzZV9oCkBA
IC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkV2ZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxi
YWNrcy5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCkBAIC00OSw5MCArNDgs
MjkgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAotY2xhc3MgSURCRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZT4sIHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBFdmVudFRhcmdldFdp
dGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIElEQkRhdGFiYXNl
IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+LCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxl
LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKLSAgICB+SURCRGF0YWJhc2UoKTsKLQotICAgIHZv
aWQgc2V0TWV0YWRhdGEoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpIHsgbV9t
ZXRhZGF0YSA9IG1ldGFkYXRhOyB9Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkNyZWF0ZWQoSURCVHJh
bnNhY3Rpb24qKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoSURCVHJhbnNhY3Rpb24q
KTsKKyAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZSgpIHsgfQogCiAgICAgLy8gSW1wbGVtZW50IHRo
ZSBJREwKLSAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEu
bmFtZTsgfQotICAgIHVpbnQ2NF90IHZlcnNpb24oKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHNjb3BlLCBjb25zdCBTdHJpbmcmIG1v
ZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCAqc2Nv
cGUsIG1vZGUsIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
Y2xvc2UoKTsKLQotICAgIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzCi0gICAgdmlydHVhbCB2b2lk
IG9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9u
KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2NF90LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZShpbnQ2NF90KTsKLQotICAg
IC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIElEQkRhdGFiYXNl
RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyBy
ZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAg
IGJvb2wgaXNDbG9zZVBlbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlUGVuZGluZzsgfQot
ICAgIHZvaWQgZm9yY2VDbG9zZSgpOwotICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0
YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9Ci0gICAgdm9pZCBlbnF1ZXVlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4pOwotCi0gICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNo
RXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
IG92ZXJyaWRlOwotCi0gICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFt
ZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkOwotICAgIH0KKyAgICB2aXJ0
dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDY0X3Qg
dmVyc2lvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0ID0gMDsKIAotICAgIElEQkRhdGFiYXNlQmFja2Vu
ZCogYmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7
CiAKLSAgICBzdGF0aWMgaW50NjRfdCBuZXh0VHJhbnNhY3Rpb25JZCgpOworICAgIHZpcnR1YWwg
Y29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0ID0gMDsKIAogICAgIHVz
aW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZT46OmRlcmVmOwogCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAg
IElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZD4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKLQotICAgIC8v
IEFjdGl2ZURPTU9iamVjdCBBUEkuCi0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0gICAgY29u
c3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgLy8gRXZlbnRU
YXJnZXQKLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBmaW5hbCB7
IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSBm
aW5hbCB7IGRlcmVmKCk7IH0KLQotICAgIHZvaWQgY2xvc2VDb25uZWN0aW9uKCk7Ci0KLSAgICBJ
REJEYXRhYmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZD4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb247Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0
aW9uKj4gVHJhbnNhY3Rpb25NYXA7Ci0gICAgVHJhbnNhY3Rpb25NYXAgbV90cmFuc2FjdGlvbnM7
Ci0KLSAgICBib29sIG1fY2xvc2VQZW5kaW5nOwotICAgIGJvb2wgbV9pc0Nsb3NlZDsKLSAgICBi
b29sIG1fY29udGV4dFN0b3BwZWQ7Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9u
Y2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRvIGJlIGZpcmVkIG9uIHRoaXMKLSAgICAvLyBkYXRhYmFz
ZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwgdGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgotICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOworcHJvdGVjdGVkOgorICAg
IElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbAppbmRleCBlZDk4ZmVkLi5hNWRlZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCkBAIC0zMSw2ICszMSw3IEBACiAg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAog
ICAgIEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9u
LAogXSBpbnRlcmZhY2UgSURCRGF0YWJhc2UgOiBFdmVudFRhcmdldCB7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGxvbmcgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwOWU0ZTI3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmQuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURC
Q3Vyc29yQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCUmVj
b3JkSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKLSNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZWY8SURCRGF0YWJhc2VCYWNrZW5kPiBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnksIElEQlNlcnZlckNvbm5lY3Rpb24mIHNl
cnZlckNvbm5lY3Rpb24pCi17Ci0gICAgUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9
IGFkb3B0UmVmKCpuZXcgSURCRGF0YWJhc2VCYWNrZW5kKG5hbWUsIHVuaXF1ZUlkZW50aWZpZXIs
IGZhY3RvcnksIHNlcnZlckNvbm5lY3Rpb24pKTsKLSAgICBiYWNrZW5kLT5vcGVuSW50ZXJuYWxB
c3luYygpOwotICAgIAotICAgIHJldHVybiBiYWNrZW5kOwotfQotCi1JREJEYXRhYmFzZUJhY2tl
bmQ6OklEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dW5pcXVlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnksIElE
QlNlcnZlckNvbm5lY3Rpb24mIHNlcnZlckNvbm5lY3Rpb24pCi0gICAgOiBtX21ldGFkYXRhKG5h
bWUsIEludmFsaWRJZCwgMCwgSW52YWxpZElkKQotICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlk
ZW50aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fc2VydmVyQ29ubmVj
dGlvbihzZXJ2ZXJDb25uZWN0aW9uKQotICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKHN0
ZDo6bWFrZV91bmlxdWU8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4oKSkKLSAgICAsIG1fY2xv
c2luZ0Nvbm5lY3Rpb24oZmFsc2UpCi0gICAgLCBtX2RpZE9wZW5JbnRlcm5hbChmYWxzZSkKLXsK
LSAgICBBU1NFUlQoIW1fbWV0YWRhdGEubmFtZS5pc051bGwoKSk7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjphZGRPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZSwgaW50NjRfdCBuZXdNYXhPYmplY3RTdG9yZUlkKQotewotICAgIEFTU0VS
VCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUuaWQpKTsKLSAg
ICBpZiAobmV3TWF4T2JqZWN0U3RvcmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZh
bGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA8IG5l
d01heE9iamVjdFN0b3JlSWQpOwotICAgICAgICBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQg
PSBuZXdNYXhPYmplY3RTdG9yZUlkOwotICAgIH0KLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5zZXQob2JqZWN0U3RvcmUuaWQsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAg
ICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkp
OwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgsIGludDY0X3QgbmV3TWF4SW5kZXhJZCkK
LXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQoIW9iamVj
dFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXguaWQpKTsKLSAgICBvYmplY3RTdG9yZS5pbmRl
eGVzLnNldChpbmRleC5pZCwgaW5kZXgpOwotICAgIGlmIChuZXdNYXhJbmRleElkICE9IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUubWF4
SW5kZXhJZCA8IG5ld01heEluZGV4SWQpOwotICAgICAgICBvYmplY3RTdG9yZS5tYXhJbmRleElk
ID0gbmV3TWF4SW5kZXhJZDsKLSAgICB9Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0
KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OnJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQot
ewotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9y
ZUlkKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmplY3RT
dG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKLSAgICBvYmplY3RTdG9yZS5pbmRleGVz
LnJlbW92ZShpbmRleElkKTsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0
U3RvcmVJZCwgb2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6b3Bl
bkludGVybmFsQXN5bmMoKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHNlbGYg
PSB0aGlzOwotICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFz
ZU1ldGFkYXRhKFtzZWxmXShjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9v
bCBzdWNjZXNzKSB7Ci0gICAgICAgIHNlbGYtPmRpZE9wZW5JbnRlcm5hbEFzeW5jKG1ldGFkYXRh
LCBzdWNjZXNzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRpZE9w
ZW5JbnRlcm5hbEFzeW5jKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBib29s
IHN1Y2Nlc3MpCi17Ci0gICAgbV9kaWRPcGVuSW50ZXJuYWwgPSB0cnVlOwotCi0gICAgaWYgKCFz
dWNjZXNzKSB7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbWV0YWRhdGEgPSBtZXRhZGF0YTsKLQotICAgIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kOjp+SURCRGF0YWJh
c2VCYWNrZW5kKCkKLXsKLSAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZCht
X2lkZW50aWZpZXIpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlT2JqZWN0
U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVP
YmplY3RTdG9yZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikK
LSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVCghbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBvYmplY3RTdG9yZUlk
LCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok1pbmltdW1JbmRl
eElkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEpOwotICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3Jl
TWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0
ZU9iamVjdFN0b3JlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24ob2JqZWN0U3RvcmVNZXRhZGF0YSk7Ci0g
ICAgcmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZUluZGV4Iik7Ci0gICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3Jl
SWQpOwotCi0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQp
KTsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIGluZGV4TWV0YWRhdGEobmFtZSwgaW5kZXhJ
ZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpOwot
Ci0gICAgYWRkSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSwgaW5kZXhJZCk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotewotICAgIExP
RyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVJbmRleCIpOwotICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
OjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlk
KTsKLQotICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsK
LSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0gb2JqZWN0U3RvcmUu
aW5kZXhlcy5nZXQoaW5kZXhJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVJ
bmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsKLQotICAgIHJlbW92
ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZDo6Y29tbWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICAvLyBUaGUgZnJvbnRl
bmQgc3VnZ2VzdHMgdGhhdCB3ZSBjb21taXQsIGJ1dCB3ZSBtYXkgaGF2ZSBwcmV2aW91c2x5IGlu
aXRpYXRlZCBhbiBhYm9ydCwgYW5kIHNvIGhhdmUgZGlzcG9zZWQgb2YgdGhlIHRyYW5zYWN0aW9u
LiBvbkFib3J0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGF0Y2hlZCB0byB0aGUgZnJvbnRlbmQsIHNv
IGl0IHdpbGwgZmluZCBvdXQgYWJvdXQgdGhhdCBhc3luY2hyb25vdXNseS4KLSAgICBpZiAobV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCi0gICAgICAgIG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKS0+Y29tbWl0KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gSWYgdGhlIHRy
YW5zYWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5
IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQu
Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAg
ICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KCk7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9u
IGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNr
ZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0gICAgaWYg
KG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmQ6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpnZXQiKTsKLSAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IHRyYW5zYWN0aW9uLT5zY2hlZHVsZUdldE9wZXJhdGlvbihtX21ldGFkYXRhLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6
S2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcyk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCRGF0YWJhc2VCYWNrZW5kOjpwdXQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRy
YW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICgh
dHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1v
ZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotCi0gICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0
b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOwotCi0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlUHV0T3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cyk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8aW50NjRfdCwgMT4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzLCAx
PiYgaW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5k
OjpzZXRJbmRleEtleXMiKTsKLSAgICBBU1NFUlQocHJwUHJpbWFyeUtleSk7Ci0gICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSUQpKTsKLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSUQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24tPnNldEluZGV4S2V5
cyh0cmFuc2FjdGlvbklELCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlELCBtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJRCksICpwcmltYXJ5S2V5LCBpbmRleElEcywg
aW5kZXhLZXlzLCBbdHJhbnNhY3Rpb25dKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpIHsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0
KGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnNldEluZGV4
ZXNSZWFkeShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QsIGNvbnN0IFZlY3RvcjxpbnQ2
NF90LCAxPiYgaW5kZXhJZHMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJh
Y2tlbmQ6OnNldEluZGV4ZXNSZWFkeSIpOwotCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oaW5kZXhJZHMuc2l6ZSgpKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBr
ZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkN1
cnNvciIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlv
bihvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBrZXlPbmx5ID8g
SW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5IDogSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpL
ZXlBbmRWYWx1ZSwgdGFza1R5cGUsIGNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZDo6Y291bnQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlm
ICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgdHJhbnNhY3Rpb24t
PnNjaGVkdWxlQ291bnRPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGNhbGxiYWNrcyk7Ci19Ci0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJhbmdl
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlUmFu
Z2UiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVs
ZXRlUmFuZ2VPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcyk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5k
OjpjbGVhck9iamVjdFN0b3JlICVsbGkgaW4gdHJhbnNhY3Rpb24gJWxsaSIsIHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4ob2JqZWN0U3RvcmVJZCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odHJhbnNh
Y3Rpb25JZCkpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKLXsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUo
KSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgewotICAgICAg
ICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwotICAgIH0KLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQoKSkpOwotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOwotICAgIGlmICh0
cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9u
Q2hhbmdlKSB7Ci0gICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAgICBtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24gPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgewot
ICAgICAgICAvLyBJZiB0aGlzIHdhcyBhbiBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSB3
aWxsIGJlIGEgInNlY29uZAotICAgICAgICAvLyBoYWxmIiBvcGVuIGNhbGwgd2FpdGluZyBmb3Ig
dXMgaW4gcHJvY2Vzc1BlbmRpbmdDYWxscy4KLSAgICAgICAgLy8gRklYTUU6IFdoZW4gd2Ugbm8g
bG9uZ2VyIHN1cHBvcnQgc2V0VmVyc2lvbiwgYXNzZXJ0IHN1Y2ggYSB0aGluZy4KLSAgICAgICAg
aWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVmVyc2lvbiBjaGFuZ2UgdHJhbnNh
Y3Rpb24gd2FzIGFib3J0ZWQgaW4gdXBncmFkZW5lZWRlZCBldmVudCBoYW5kbGVyLiIpKTsKLSAg
ICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuID0gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdl
KQotICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci19Ci0KLXNpemVfdCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmNvbm5lY3Rpb25Db3VudCgpCi17Ci0gICAgLy8gVGhpcyBkb2VzIG5vdCBpbmNs
dWRlIHBlbmRpbmcgb3BlbiBjYWxscywgYXMgdGhvc2Ugc2hvdWxkIG5vdCBibG9jayB2ZXJzaW9u
IGNoYW5nZXMgYW5kIGRlbGV0ZXMuCi0gICAgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQu
c2l6ZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cHJvY2Vzc1BlbmRpbmdDYWxs
cygpCi17Ci0gICAgLy8gcHJvY2Vzc1BlbmRpbmdDYWxscygpIHdpbGwgYmUgY2FsbGVkIGFnYWlu
IGFmdGVyIG9wZW5JbnRlcm5hbEFzeW5jKCkgY29tcGxldGVzLgotICAgIGlmICghbV9kaWRPcGVu
SW50ZXJuYWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxm
T3BlbikgewotICAgICAgICBBU1NFUlQobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPnZlcnNpb24o
KSA9PSBtX21ldGFkYXRhLnZlcnNpb24pOwotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAh
PSBJbnZhbGlkSWQpOwotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tz
KCktPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKLSAgICAgICAgbV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW4gPSBudWxscHRyOwotICAgICAgICAvLyBGYWxsIHRocm91Z2ggd2hlbiBj
b21wbGV0ZSwgYXMgcGVuZGluZyBkZWxldGVzIG1heSBiZSAocGFydGlhbGx5KSB1bmJsb2NrZWQu
Ci0gICAgfQotCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXMgb25seSBhbiBvcHRpbWl6
YXRpb24gdG8gcmVkdWNlIHF1ZXVlLWNodXJuIGFuZAotICAgIC8vIG5vdCBuZWNlc3NhcnkgZm9y
IGNvcnJlY3RuZXNzOyBkZWxldGVEYXRhYmFzZSBhbmQgb3BlbkNvbm5lY3Rpb24gd2lsbAotICAg
IC8vIHJlcXVldWUgdGhlaXIgY2FsbHMgaWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICBp
ZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSAmJiBpc0RlbGV0ZURhdGFi
YXNlQmxvY2tlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgd2hpbGUgKCFtX3BlbmRpbmdEZWxl
dGVDYWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdE
ZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VG
aXJzdCgpOwotICAgICAgICBtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLmFkZChw
ZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOwotICAgICAgICBkZWxldGVEYXRhYmFzZUFz
eW5jKHBlbmRpbmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7Ci0gICAgfQotCi0gICAgLy8gZGVs
ZXRlRGF0YWJhc2VBc3luYyBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCi0gICAgQVNTRVJU
KG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUg
YW55IGRhdGFiYXNlIGRlbGV0aW9ucyB3YWl0aW5nIGZvciBjb21wbGV0aW9uLCB3ZSdyZSBkb25l
IGZvciBub3cuCi0gICAgLy8gRnVydGhlciBjYWxsYmFja3Mgd2lsbCBiZSBoYW5kbGVkIGluIGEg
ZnV0dXJlIGNhbGwgdG8gcHJvY2Vzc1BlbmRpbmdDYWxscygpLgotICAgIGlmICghbV9kZWxldGVD
YWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKHRydWUpOwotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6cHJvY2Vzc1BlbmRpbmdPcGVuQ2FsbHMoYm9vbCBzdWNjZXNzKQotewot
ICAgIC8vIE9wZW4gY2FsbHMgY2FuIGJlIHJlcXVldWVkIGlmIGFuIG9wZW4gY2FsbCBzdGFydGVk
IGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24gb3IgZGVsZXRlcyB0aGUgZGF0YWJhc2UuCi0g
ICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4+IHBlbmRpbmdPcGVu
Q2FsbHM7Ci0gICAgbV9wZW5kaW5nT3BlbkNhbGxzLnN3YXAocGVuZGluZ09wZW5DYWxscyk7Ci0K
LSAgICB3aGlsZSAoIXBlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IHBlbmRpbmdP
cGVuQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAg
ICBpZiAobV9tZXRhZGF0YS5pZCA9PSBJbnZhbGlkSWQpIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGRhdGFiYXNlIHdhcyBkZWxldGVkIHRoZW4gcXVpY2tseSByZS1vcGVuZWQuCi0gICAgICAg
ICAgICAgICAgLy8gb3BlbkludGVybmFsQXN5bmMoKSB3aWxsIHJlY3JlYXRlIGl0IGluIHRoZSBi
YWNraW5nIHN0b3JlIGFuZCB0aGVuIHJlc3VtZSBwcm9jZXNzaW5nIHBlbmRpbmcgY2FsbGJhY2tz
LgotICAgICAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbHMucHJlcGVuZChXVEY6Om1vdmUocGVu
ZGluZ09wZW5DYWxsKSk7Ci0gICAgICAgICAgICAgICAgcGVuZGluZ09wZW5DYWxscy5zd2FwKG1f
cGVuZGluZ09wZW5DYWxscyk7Ci0KLSAgICAgICAgICAgICAgICBvcGVuSW50ZXJuYWxBc3luYygp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9w
ZW5Db25uZWN0aW9uSW50ZXJuYWwocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGlu
Z09wZW5DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPnRyYW5zYWN0
aW9uSWQoKSwgcGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgICAgICBpZiAocGVuZGluZ09wZW5D
YWxsLT52ZXJzaW9uKCkgPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQotICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3
aXRoIG5vIHZlcnNpb24gc3BlY2lmaWVkLiI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRh
dGFiYXNlIHdpdGggdmVyc2lvbiAlbGx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSkpOwotICAgICAgICAgICAgcGVuZGluZ09wZW5D
YWxsLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgbWVzc2FnZSkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRf
dCB0cmFuc2FjdGlvbklELCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlIG1vZGUpCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4g
dHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNyZWF0ZSh0aGlzLCB0cmFuc2Fj
dGlvbklELCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSURzLCBtb2RlKTsKLQotICAgIEFTU0VSVCgh
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JRCkpOwotICAgIG1fdHJhbnNhY3Rp
b25zLmFkZCh0cmFuc2FjdGlvbklELCB0cmFuc2FjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFz
ZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKQotewot
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJh
c2VDYWxsYmFja3M7Ci0KLSAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV91
bmlxdWU8SURCUGVuZGluZ09wZW5DYWxsPigqY2FsbGJhY2tzLCAqZGF0YWJhc2VDYWxsYmFja3Ms
IHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsKLQotICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0aW9uSW50ZXJuYWwoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
dWludDY0X3QgdmVyc2lvbikKLXsKLSAgICBBU1NFUlQobV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7
Ci0KLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0g
ICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERh
dGFiYXNlQ2FsbGJhY2tzOwotCi0gICAgLy8gV2UgaW5mZXIgdGhhdCB0aGUgZGF0YWJhc2UgZGlk
bid0IGV4aXN0IGZyb20gaXRzIGxhY2sgb2YgdmVyc2lvbi4KLSAgICBib29sIGlzTmV3RGF0YWJh
c2UgPSBtX21ldGFkYXRhLnZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uOwotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdElu
dFZlcnNpb24gJiYgIWlzTmV3RGF0YWJhc2UpIHsKLSAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChpc05ld0RhdGFiYXNlICYmIHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVm
YXVsdEludFZlcnNpb24pIHsKLSAgICAgICAgLy8gU3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlz
IHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0
byAxLgotICAgICAgICB2ZXJzaW9uID0gMTsKLSAgICB9Ci0KLSAgICBpZiAodmVyc2lvbiA+IG1f
bWV0YWRhdGEudmVyc2lvbiB8fCBtX21ldGFkYXRhLnZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6Tm9JbnRWZXJzaW9uKSB7Ci0gICAgICAgIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbihjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJzaW9uIDwgbV9tZXRhZGF0
YS52ZXJzaW9uICYmIG1fbWV0YWRhdGEudmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb24pIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZv
cm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICglbGx1KSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0
aW5nIHZlcnNpb24gKCVsbHUpLiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odmVy
c2lvbiksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9tZXRhZGF0YS52ZXJzaW9u
KSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCh2ZXJzaW9uID09IG1f
bWV0YWRhdGEudmVyc2lvbik7Ci0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJh
c2VDYWxsYmFja3MpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFk
YXRhKCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cnVuSW50VmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKLXsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJhY2tz
OwotICAgIEFTU0VSVChjYWxsYmFja3MpOwotICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0KSB7Ci0gICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRoZSBl
dmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGluZyBz
ZXQuCi0gICAgICAgIGlmIChjYWxsYmFjayAhPSBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAg
ICAgIGNhbGxiYWNrLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCByZXF1ZXN0
ZWRWZXJzaW9uKTsKLSAgICB9Ci0gICAgLy8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRp
bCBhbGwgdGhlIHZlcnNpb24gY2hhbmdlIGV2ZW50cyBhcmUKLSAgICAvLyBkZWxpdmVyZWQgYW5k
IHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNhbGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5n
Ci0gICAgLy8gb3IgZmlyaW5nIGEgYmxvY2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxk
IGJlIGNvbnNpc3RlbnQgd2l0aCBob3cKLSAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29y
cmVjdGx5KSBkaWQgaXQuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2Nr
ZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRpbCB0aGUgZnJvbnRlbmQKLSAgICAvLyB0ZWxscyB1cyB0
aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVudHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCi0gICAgaWYg
KGNvbm5lY3Rpb25Db3VudCgpKQotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFk
YXRhLnZlcnNpb24pOwotICAgIC8vIEZJWE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLgotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxz
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPElEQlBlbmRpbmdPcGVuQ2FsbD4oKmNhbGxiYWNrcywg
KmRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJ
ZHM7Ci0gICAgY3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgZGF0YWJhc2VDYWxsYmFj
a3MsIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNo
YW5nZSk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywg
ZGF0YWJhc2VDYWxsYmFja3MsIG1fbWV0YWRhdGEpOwotCi0gICAgQVNTRVJUKCFtX3BlbmRpbmdT
ZWNvbmRIYWxmT3Blbik7Ci0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VD
YWxsYmFja3MpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlRGF0YWJhc2Uo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKGlzRGVsZXRlRGF0
YWJhc2VCbG9ja2VkKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fZGF0YWJh
c2VDYWxsYmFja3NTZXQpIHsKLSAgICAgICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRoZSBl
dmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGluZyBz
ZXQuCi0gICAgICAgICAgICBjYWxsYmFjay0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEudmVy
c2lvbiwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJsb2Nr
ZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIFZl
cnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMw
Ci0gICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7Ci0gICAg
ICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPElEQlBlbmRp
bmdEZWxldGVDYWxsPihjYWxsYmFja3MucmVsZWFzZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgZGVsZXRlRGF0YWJhc2VBc3luYyhjYWxsYmFja3MucmVsZWFzZSgpKTsKLX0KLQot
Ym9vbCBJREJEYXRhYmFzZUJhY2tlbmQ6OmlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkKLXsKLSAg
ICByZXR1cm4gY29ubmVjdGlvbkNvdW50KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
OjpkZWxldGVEYXRhYmFzZUFzeW5jKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MpCi17Ci0gICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKLQotICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHNlbGYodGhpcyk7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+
ZGVsZXRlRGF0YWJhc2UobV9tZXRhZGF0YS5uYW1lLCBbc2VsZiwgY2FsbGJhY2tzXShib29sIHN1
Y2Nlc3MpIHsKLSAgICAgICAgc2VsZi0+bV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlv
bi5yZW1vdmUoY2FsbGJhY2tzKTsKLQotICAgICAgICAvLyBJZiB0aGlzIElEQkRhdGFiYXNlQmFj
a2VuZCB3YXMgY2xvc2VkIHdoaWxlIHdhaXRpbmcgZm9yIGRlbGV0ZURhdGFiYXNlIHRvIGNvbXBs
ZXRlLCBubyBwb2ludCBpbiBwZXJmb3JtaW5nIGFueSBjYWxsYmFja3MuCi0gICAgICAgIGlmICgh
c2VsZi0+bV9zZXJ2ZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICBzZWxmLT5tX21ldGFkYXRh
LmlkID0gSW52YWxpZElkOwotICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS52ZXJzaW9uID0g
SURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgICAgICAgICAgc2VsZi0+bV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgZGF0YWJhc2UuIikpOwotCi0gICAgICAgIHNl
bGYtPnByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxi
YWNrcykKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhj
YWxsYmFja3MpKTsKLQotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNr
cyk7Ci0gICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuICYmIG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuLT5kYXRhYmFzZUNhbGxiYWNrcygpID09IGNhbGxiYWNrcykgewotICAgICAgICBtX3Bl
bmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rp
b24gd2FzIGNsb3NlZC4iKSk7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuID0gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBwcm9jZXNzUGVuZGluZ0NhbGxzIGFsbG93cyB0aGUgaW5zcGVjdG9y
IHRvIHByb2Nlc3MgYSBwZW5kaW5nIG9wZW4gY2FsbAotICAgIC8vIGFuZCBjYWxsIGNsb3NlLCBy
ZWVudGVyaW5nIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UuIFRoZW4gdGhlCi0gICAgLy8gYmFj
a2VuZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBj
b25uZWN0aW9uLCBhbmQKLSAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxl
ZCBjbG9zZS4KLSAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBp
biBjYXNlIG9mIHJlZW50cmFuY3kuCi0gICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24o
bV9jbG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7Ci0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwot
Ci0gICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2Fz
ZXMgYmVsb3cuCi0gICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNh
bGxzLnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7Ci0gICAgICAgIFRy
YW5zYWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Ci0gICAgICAgIFJlZlB0
cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIp
OwotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uIDogdHJhbnNhY3Rpb25zLnZhbHVlcygp
KQotICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLQotICAgICAgICBBU1NF
UlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKLQotICAgICAgICBtX3NlcnZlckNvbm5lY3Rp
b24tPmNsb3NlKCk7Ci0KLSAgICAgICAgLy8gVGhpcyBjaGVjayBzaG91bGQgb25seSBiZSBmYWxz
ZSBpbiB1bml0IHRlc3RzLgotICAgICAgICBBU1NFUlQobV9mYWN0b3J5KTsKLSAgICAgICAgaWYg
KG1fZmFjdG9yeSkKLSAgICAgICAgICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNr
ZW5kKG1faWRlbnRpZmllcik7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM4MTk5MjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kX2gKLSNkZWZp
bmUgSURCRGF0YWJhc2VCYWNrZW5kX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tz
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgotI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCIKLSNpbmNsdWRlICJJREJQ
ZW5kaW5nT3BlbkNhbGwuaCIKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCS2V5UGF0aDsKLWNsYXNzIElEQlNlcnZlckNv
bm5lY3Rpb247Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ7Ci1jbGFzcyBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1zdHJ1Y3QgSURCRGF0YWJh
c2VNZXRhZGF0YTsKLXN0cnVjdCBJREJJbmRleE1ldGFkYXRhOwotc3RydWN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGE7Ci0KLXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBJbmRleEtleXM7
Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmQ+IHsKLXB1YmxpYzoKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSosIElEQlNlcnZlckNvbm5lY3Rpb24mKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB+SURCRGF0YWJhc2VCYWNrZW5kKCk7Ci0KLSAgICBJREJTZXJ2ZXJDb25uZWN0aW9uJiBz
ZXJ2ZXJDb25uZWN0aW9uKCkgeyByZXR1cm4gbV9zZXJ2ZXJDb25uZWN0aW9uLmdldCgpOyB9Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotICAgIGludDY0X3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0gICAgdm9pZCBhZGRPYmplY3RTdG9y
ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhPYmplY3RTdG9y
ZUlkKTsKLSAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
Ci0gICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOwotICAgIHZvaWQgcmVtb3ZlSW5kZXgo
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2
NF90IHZlcnNpb24pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLQotICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZAotICAg
IHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCk7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdm9pZCBjcmVhdGVUcmFuc2Fj
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSk7Ci0gICAgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPik7Ci0KLSAgICB2b2lkIGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAg
IHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKLSAgICB2b2lkIGFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7Ci0KLSAgICB2
b2lkIGNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwotICAgIHZvaWQgZGVsZXRlSW5kZXgo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCk7Ci0KLSAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9
Ci0gICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0g
ICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotICAg
IHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKik7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChJREJU
cmFuc2FjdGlvbkJhY2tlbmQqKTsKLQotICAgIGVudW0gVGFza1R5cGUgewotICAgICAgICBOb3Jt
YWxUYXNrID0gMCwKLSAgICAgICAgUHJlZW1wdGl2ZVRhc2sKLSAgICB9OwotCi0gICAgZW51bSBQ
dXRNb2RlIHsKLSAgICAgICAgQWRkT3JVcGRhdGUsCi0gICAgICAgIEFkZE9ubHksCi0gICAgICAg
IEN1cnNvclVwZGF0ZQotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBNaW5pbXVt
SW5kZXhJZCA9IDMwOwotCi0gICAgdm9pZCBnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHB1
dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKLSAgICB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90LCAxPiYgaW5kZXhJZHMsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXMsIDE+Jik7Ci0gICAgdm9pZCBzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90
LCAxPiYgaW5kZXhJZHMpOwotICAgIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFz
a1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBjb3VudChpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2
b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
LSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7
IH0KLSAgICB2b2lkIHNldEN1cnJlbnRWZXJzaW9uKHVpbnQ2NF90IHZlcnNpb24pIHsgbV9tZXRh
ZGF0YS52ZXJzaW9uID0gdmVyc2lvbjsgfQotCi0gICAgYm9vbCBoYXNQZW5kaW5nU2Vjb25kSGFs
Zk9wZW4oKSB7IHJldHVybiBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5nZXQoKTsgfQotICAgIHZv
aWQgc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3Bl
bkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCkgeyBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IFdURjo6
bW92ZShwZW5kaW5nT3BlbkNhbGwpOyB9Ci0KLSAgICBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZSYgZmFjdG9yeUJhY2tlbmQoKSB7IHJldHVybiAqbV9mYWN0b3J5OyB9Ci0KLSAgICBjbGFzcyBW
ZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOwotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlKiwgSURCU2VydmVyQ29ubmVjdGlvbiYpOwotCi0gICAgdm9pZCBvcGVuQ29ubmVjdGlv
bkludGVybmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbik7Ci0K
LSAgICB2b2lkIG9wZW5JbnRlcm5hbEFzeW5jKCk7Ci0gICAgdm9pZCBkaWRPcGVuSW50ZXJuYWxB
c3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKTsKLQotICAgIHZv
aWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICBzaXplX3QgY29ubmVjdGlvbkNvdW50
KCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVu
ZGluZ09wZW5DYWxscyhib29sIHN1Y2Nlc3MpOwotCi0gICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNl
QmxvY2tlZCgpOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VBc3luYyhQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwotCi0gICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFkYXRhOwotCi0gICAg
U3RyaW5nIG1faWRlbnRpZmllcjsKLQotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZT4gbV9mYWN0b3J5OwotICAgIFJlZjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBtX3NlcnZlckNv
bm5lY3Rpb247Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKLQotICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBUcmFuc2FjdGlvbk1hcDsK
LSAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKLQotICAgIERlcXVlPHN0ZDo6dW5p
cXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW47
Ci0KLSAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ0RlbGV0ZUNhbGw+PiBtX3Bl
bmRpbmdEZWxldGVDYWxsczsKLSAgICBIYXNoU2V0PFJlZlB0cjxJREJDYWxsYmFja3M+PiBtX2Rl
bGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uOwotCi0gICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKLSAg
ICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OwotCi0gICAgYm9v
bCBtX2Nsb3NpbmdDb25uZWN0aW9uOwotICAgIGJvb2wgbV9kaWRPcGVuSW50ZXJuYWw7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBlOTFjMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJhc2VDYWxsYmFj
a3NfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRlICJJ
bmRleGVkREIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkRhdGFi
YXNlOwotCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRGF0YWJhc2VD
YWxsYmFja3MoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBvbkZvcmNlZENsb3NlKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWlu
dDY0X3QgbmV3VmVyc2lvbikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIG9uQ29tcGxldGUoaW50NjRfdCB0cmFuc2FjdGlvbklkKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgY29ubmVjdChJREJEYXRhYmFzZSopID0gMDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUNhbGxiYWNr
c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGI0Mzg1Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8SURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsPiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNyZWF0ZSgpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKCkpOwotfQot
Ci1JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpCi0g
ICAgOiBtX2RhdGFiYXNlKG51bGxwdHIpCi17Ci19Ci0KLUlEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bDo6fklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsOjpvbkZvcmNlZENsb3NlKCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkKLSAg
ICAgICAgbV9kYXRhYmFzZS0+Zm9yY2VDbG9zZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbDo6b25WZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90
IG5ld1ZlcnNpb24pCi17Ci0gICAgaWYgKG1fZGF0YWJhc2UpCi0gICAgICAgIG1fZGF0YWJhc2Ut
Pm9uVmVyc2lvbkNoYW5nZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNvbm5lY3QoSURCRGF0YWJhc2UqIGRhdGFiYXNlKQotewot
ICAgIEFTU0VSVCghbV9kYXRhYmFzZSk7Ci0gICAgQVNTRVJUKGRhdGFiYXNlKTsKLSAgICBtX2Rh
dGFiYXNlID0gZGF0YWJhc2U7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpv
bkFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9y
PiBlcnJvcikKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+b25B
Ym9ydCh0cmFuc2FjdGlvbklkLCBlcnJvcik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsOjpvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICBpZiAobV9k
YXRhYmFzZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+b25Db21wbGV0ZSh0cmFuc2FjdGlvbklkKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YzgwMmIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaAot
Ci0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJh
c2U7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCBmaW5hbCA6IHB1YmxpYyBJREJE
YXRhYmFzZUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGw+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbCgpIG92ZXJyaWRlOwotCi0gICAgLy8gSURCRGF0YWJhc2VDYWxsYmFja3MKLSAgICB2aXJ0
dWFsIHZvaWQgb25Gb3JjZWRDbG9zZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBvblZl
cnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgY29ubmVjdChJREJEYXRhYmFzZSopIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAg
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpOwotCi0gICAgLy8gVGhlIGluaXRpYWwgSURCT3Bl
bkRCUmVxdWVzdCBvciBmaW5hbCBJREJEYXRhYmFzZSBtYWludGFpbnMgYSBSZWZQdHIgdG8gdGhp
cwotICAgIElEQkRhdGFiYXNlKiBtX2RhdGFiYXNlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCmluZGV4
IGQ1MDdlNmIuLjdhOWY5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuY3BwCkBAIC0xLDI5ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgpAQCAtMzEsMTM1ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgot
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUg
IlNjaGVtZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRl
ICJXb3JrZXJHbG9iYWxTY29wZS5oIgotI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCi0j
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRmFj
dG9yeTo6SURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKLSAg
ICA6IG1fYmFja2VuZChmYWN0b3J5KQotewotICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8g
dGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgotICAgIHJlbGF4QWRvcHRpb25S
ZXF1aXJlbWVudCgpOwotfQotCi1JREJGYWN0b3J5Ojp+SURCRmFjdG9yeSgpCi17Ci19Ci0KLXN0
YXRpYyBib29sIGlzQ29udGV4dFZhbGlkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
Ci17Ci0gICAgQVNTRVJUKGlzPERvY3VtZW50PigqY29udGV4dCkgfHwgY29udGV4dC0+aXNXb3Jr
ZXJHbG9iYWxTY29wZSgpKTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0KSkgewotICAg
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwot
ICAgICAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUoKSAmJiBkb2N1bWVudC5wYWdlKCkgJiYgKCFk
b2N1bWVudC5wYWdlKCktPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgfHwgU2NoZW1lUmVnaXN0cnk6
OmFsbG93c0RhdGFiYXNlQWNjZXNzSW5Qcml2YXRlQnJvd3NpbmcoZG9jdW1lbnQuc2VjdXJpdHlP
cmlnaW4oKS0+cHJvdG9jb2woKSkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhT
dG9yYWdlQVBJLCAiSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyIpOwotICAgIGlmICghaXND
b250ZXh0VmFsaWQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3JpZ2lu
KCkpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgbV9iYWNrZW5kLT5nZXRE
YXRhYmFzZU5hbWVzKHJlcXVlc3QsICooY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSksICooY29u
dGV4dC0+dG9wT3JpZ2luKCkpLCBjb250ZXh0KTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQot
UGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5OjpvcGVuIik7Ci0gICAgcmV0
dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCAwLCBJbmRleGVkREI6OlZlcnNpb25OdWxs
bmVzczo6TnVsbCwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IElEQkZh
Y3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5OjpvcGVuIik7Ci0gICAgaWYgKCF2ZXJz
aW9uKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgcmV0dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBJbmRleGVk
REI6OlZlcnNpb25OdWxsbmVzczo6Tm9uTnVsbCwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQk9w
ZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4
ZWREQjo6VmVyc2lvbk51bGxuZXNzIHZlcnNpb25OdWxsbmVzcywgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgQVNTRVJUKHZlcnNpb24gPj0gMSB8fCB2ZXJzaW9uTnVsbG5lc3MgPT0gSW5kZXhl
ZERCOjpWZXJzaW9uTnVsbG5lc3M6Ok51bGwpOwotICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KCFpc0NvbnRleHRWYWxpZChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFj
b250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BP
cmlnaW4oKSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxs
YmFja3MgPSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNyZWF0ZSgpOwotICAgIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCA9IElEQkRhdGFiYXNlOjpuZXh0VHJhbnNhY3Rpb25JZCgpOwotICAgIFJl
ZlB0cjxJREJPcGVuREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uLCB2ZXJz
aW9uTnVsbG5lc3MpOwotICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCB2ZXJzaW9uLCB0cmFuc2Fj
dGlvbklkLCByZXF1ZXN0LCBkYXRhYmFzZUNhbGxiYWNrcywgKihjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpKSwgKihjb250ZXh0LT50b3BPcmlnaW4oKSkpOwotICAgIHJldHVybiByZXF1ZXN0Owot
fQotCi1QYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5Ojpk
ZWxldGVEYXRhYmFzZSIpOwotICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0g
VHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFpc0NvbnRleHRW
YWxpZChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsK
LSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCT3BlbkRCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIDAsIDAsIDAsIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOdWxs
KTsKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsICpjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLCAqY29udGV4dC0+dG9wT3JpZ2luKCksIHJlcXVlc3QsIGNvbnRleHQpOwotICAg
IHJldHVybiByZXF1ZXN0OwotfQotCi1zaG9ydCBJREJGYWN0b3J5OjpjbXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0
VmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmRWYWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCitJREJGYWN0b3J5OjpJREJGYWN0b3J5KCkKIHsKLSAgICBET01SZXF1ZXN0
U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGZpcnN0ID0g
c2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBmaXJzdFZhbHVlKTsKLSAgICBSZWZQ
dHI8SURCS2V5PiBzZWNvbmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIHNl
Y29uZFZhbHVlKTsKLQotICAgIEFTU0VSVChmaXJzdCk7Ci0gICAgQVNTRVJUKHNlY29uZCk7Ci0K
LSAgICBpZiAoIWZpcnN0LT5pc1ZhbGlkKCkgfHwgIXNlY29uZC0+aXNWYWxpZCgpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PihmaXJzdC0+Y29tcGFy
ZShzZWNvbmQuZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCmluZGV4IDg2N2UzMWUuLjQ0
NmUxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
LmgKQEAgLTEsMzAgKzEsMjggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIElEQkZhY3RvcnlfaAogI2RlZmluZSBJREJG
YWN0b3J5X2gKIApAQCAtNDYsMzggKzQ0LDI3IEBAIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIElEQkZhY3RvcnkgOiBw
dWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJGYWN0b3J5PiB7Citj
bGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSogZmFjdG9yeSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGlsZSB0
aGUgZmVhdHVyZSBpcyB1bmRlciBkZXZlbG9wbWVudCB3ZSdsbCBoYW5kbGUgYSBudWxsIGZhY3Rv
cnkgYmFja2VuZCBoZXJlLAotICAgICAgICAvLyByZXR1cm5pbmcgbnVsbCwgc28gamF2YXNjcmlw
dCBjYW4ndCB0cnkgdG8gdXNlIHRoZSBmZWF0dXJlLgotICAgICAgICAvLyBPbmNlIHRoZSBmZWF0
dXJlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgbnVsbCBmYWN0b3J5
IGJhY2tlbmQuCi0gICAgICAgIHJldHVybiBmYWN0b3J5ID8gYWRvcHRSZWYobmV3IElEQkZhY3Rv
cnkoZmFjdG9yeSkpIDogbnVsbHB0cjsKLSAgICB9Ci0gICAgfklEQkZhY3RvcnkoKTsKKyAgICB2
aXJ0dWFsIH5JREJGYWN0b3J5KCkgeyB9CiAKICAgICAvLyBGSVhNRTogZ2V0RGF0YWJhc2VOYW1l
cyBpcyBubyBsb25nZXIgYSB3ZWItZmFjaW5nIEFQSSwgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZy
b20gSURCRmFjdG9yeS4KICAgICAvLyBUaGUgV2ViIEluc3BlY3RvciBjdXJyZW50bHkgdXNlcyB0
aGlzIHRvIGVudW1lcmF0ZSB0aGUgbGlzdCBvZiBkYXRhYmFzZXMsIGJ1dCBpcyBtb3JlIGNvbXBs
aWNhdGVkIGFzIGEgcmVzdWx0LgogICAgIC8vIFdlIHNob3VsZCBwcm92aWRlIGEgc2ltcGxlciBB
UEkgdG8gdGhlIFdlYiBJbnNwZWN0b3IgdGhlbiByZW1vdmUgZ2V0RGF0YWJhc2VOYW1lcy4KLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBhc3NSZWZQdHI8SURCT3BlbkRCUmVx
dWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcg
bG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJPcGVuREJS
ZXF1ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzaG9ydCBjbXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdCwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCi1wcml2YXRlOgotICAgIElEQkZh
Y3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJikg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBkZWxldGVEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJikgPSAwOwogCi0gICAgUGFzc1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0
X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHNob3J0IGNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgc2Vjb25kLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCi0gICAgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Citwcm90ZWN0ZWQ6CisgICAgSURCRmFjdG9yeSgp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKIAotI2VuZGlmIC8vIElE
QkZhY3RvcnlfaAorI2VuZGlmIC8vIExlZ2FjeUZhY3RvcnlfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbAppbmRleCA4NTI3MzIyLi5jODdjZTE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmlk
bApAQCAtMjUsOCArMjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RSwKLSAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlLAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9
SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCRmFj
dG9yeSB7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJhaXNlc0V4Y2Vw
dGlvbl0gSURCT3BlbkRCUmVxdWVzdCBvcGVuKERPTVN0cmluZyBuYW1lLCBbRW5mb3JjZVJhbmdl
XSBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbik7CiAgICAgW0NhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJhaXNlc0V4Y2VwdGlvbl0gSURCT3BlbkRCUmVxdWVzdCBk
ZWxldGVEYXRhYmFzZShET01TdHJpbmcgbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5OTAxOS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Vf
aAotI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCi0KLSNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKLQotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkN1cnNv
ckJhY2tlbmQ7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZDsK
LWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5k
OwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owot
Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBi
eSBJREJGYWN0b3J5IChhc3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5jKS4KLS8vIFRoaXMg
aXMgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90
aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKLS8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJz
KS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQK
LS8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KLWNs
YXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFt
ZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3Blbmlu
Z09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBtYWlu
RnJhbWVPcmlnaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpID0gMDsK
LQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2VfaAotCi0jZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Vf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4
IGU2ZmRmNWMuLmEyYjRlMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleC5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgpAQCAtMjgsMTgxICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUg
IklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkluZGV4OjpJREJJbmRleChjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX21ldGFkYXRhKG1ldGFkYXRh
KQotICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAsIG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fb2Jq
ZWN0U3RvcmUpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQobV9tZXRh
ZGF0YS5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi1JREJJbmRleDo6
fklEQkluZGV4KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCSW5kZXg6Om9wZW5DdXJzb3Ii
KTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNv
cjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYyk7Ci0gICAgaWYgKGVjKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKLSAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vy
c29yVHlwZTo6S2V5QW5kVmFsdWUsIGRpcmVjdGlvbik7Ci0gICAgYmFja2VuZERCKCktPm9wZW5D
dXJzb3IobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0
YS5pZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgZmFsc2UsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9y
bWFsVGFzaywgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCSW5kZXg6Om9wZW5DdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5y
ZWxlYXNlKCksIGRpcmVjdGlvbiwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJJREJJbmRleDo6Y291bnQiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2Fj
dGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2Us
IHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkluZGV4Ojpjb3VudCIpOwotICAgIFJlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKLSAg
ICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb3VudChjb250ZXh0LCBr
ZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJ
bmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJp
bmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCSW5kZXg6
Om9wZW5LZXlDdXJzb3IiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYyk7
Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxz
KEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSwgZGlyZWN0aW9uKTsKLSAgICBiYWNrZW5k
REIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgp
LCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJh
Y2tlbmQ6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1Q
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7Ci0gICAgUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOwot
ICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9wZW5LZXlDdXJzb3Io
Y29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBkaXJlY3Rpb24sIGVjKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCSW5kZXg6OmdldCIpOwotICAgIFJlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXks
IGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXQoY29u
dGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJJREJJbmRleDo6Z2V0Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZl
RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWtleVJhbmdlKSB7Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwotICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmpl
Y3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsK
LSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRl
eDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCSW5kZXg6OmdldEtleSIpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKLSAgICBpZiAoZWMp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdldEtleShjb250ZXh0LCBrZXlSYW5n
ZS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6
Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkluZGV4OjpnZXRLZXkiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICgha2V5UmFuZ2UpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNy
ZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3Jl
LT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgdHJ1ZSwgcmVxdWVzdCk7Ci0gICAgcmV0
dXJuIHJlcXVlc3Q7Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZCogSURCSW5kZXg6OmJhY2tlbmRE
QigpIGNvbnN0CitJREJJbmRleDo6SURCSW5kZXgoKQogewotICAgIHJldHVybiBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kREIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKaW5kZXggMWE5ZTQ3Ni4uYmFhODVl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCkBAIC0x
LDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSURCSW5kZXhfaApAQCAtNDMs
NTUgKzQzLDQzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmU7
CiAKLWNsYXNzIElEQkluZGV4IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNv
dW50ZWQ8SURCSW5kZXg+IHsKK2NsYXNzIElEQkluZGV4IDogcHVibGljIFJlZkNvdW50ZWQ8SURC
SW5kZXg+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQkluZGV4PiBjcmVhdGUoY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwg
SURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSURCSW5kZXgobWV0YWRhdGEsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbikpOwot
ICAgIH0KLSAgICB+SURCSW5kZXgoKTsKKyAgICB2aXJ0dWFsIH5JREJJbmRleCgpIHsgfQogCiAg
ICAgLy8gSW1wbGVtZW50IHRoZSBJREwKLSAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG9iamVjdFN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZTsgfQotICAgIFBhc3NS
ZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgeyByZXR1cm4gSURCQW55OjpjcmVhdGUo
bV9tZXRhZGF0YS5rZXlQYXRoKTsgfQotICAgIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQotICAgIGJvb2wgdW5pcXVlKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhZGF0YS51bmlxdWU7IH0KLSAgICBib29sIG11bHRpRW50cnkoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLm11bHRpRW50cnk7IH0KLSAgICBpbnQ2NF90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQotCi0gICAgLy8gRklYTUU6IFRyeSB0byBt
b2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgaXMgdW5uZWVkZWQuCi0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgp
LCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJ
REJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMp
OyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4
dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpk
aXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Blbktl
eUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1
cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9
IHRydWU7IH0KLQotICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgSURCSW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIElEQk9iamVj
dFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKLQotICAgIElEQkluZGV4TWV0YWRhdGEgbV9tZXRh
ZGF0YTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIGJvb2wgbV9kZWxldGVkOwor
ICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCB1bmlxdWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG11bHRpRW50cnkoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGlkKCkgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25D
b2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAwOworCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
Y29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYg
ZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKK3By
b3RlY3RlZDoKKyAgICBJREJJbmRleCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCmluZGV4IGM3
NWJlNzAuLjk1YTEwNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleC5pZGwKQEAgLTI1LDggKzI1LDggQEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVY
RURfREFUQUJBU0UsCi0gICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBFbmFibGVk
QXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJm
YWNlIElEQkluZGV4IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IGE2ZDI4MTQuLjRhMDY0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgsNTQ1ICsyOCwxMCBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0j
aW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgot
I2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleURhdGEuaCIKLSNpbmNsdWRlICJJ
REJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCT2JqZWN0U3Rv
cmU6OklEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRh
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX21ldGFkYXRhKG1ldGFkYXRh
KQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fZGVsZXRlZChmYWxz
ZSkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgLy8gV2UgcGFzcyBhIHJlZmVy
ZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhB
ZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURC
T2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
aW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgaW5k
ZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpCi0gICAgICAgIGluZGV4TmFtZXMtPmFw
cGVuZChpbmRleC5uYW1lKTsKLSAgICBpbmRleE5hbWVzLT5zb3J0KCk7Ci0gICAgcmV0dXJuIGlu
ZGV4TmFtZXMucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmdldCIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWtleVJhbmdlKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIGtleVJhbmdlLCBmYWxzZSwgcmVxdWVzdCk7Ci0g
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRl
eHQsIGtleSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9i
amVjdFN0b3JlOjphZGQiKTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRk
T25seSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwga2V5LCBlYyk7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6YWRkIik7Ci0gICAg
cmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCBzdGF0ZSwgdmFsdWUsIHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6cHV0Iik7Ci0gICAgcmV0dXJuIHB1dChJREJEYXRh
YmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZh
bHVlLCBrZXksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVj
dFN0b3JlOjpwdXQiKTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT3JV
cGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIHN0YXRpY19jYXN0PElE
QktleSo+KG51bGxwdHIpLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHN0YXRlKTsKLSAgICBE
T01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOwotICAg
IHJldHVybiBwdXQocHV0TW9kZSwgc291cmNlLCBzdGF0ZSwgdmFsdWUsIGtleS5yZWxlYXNlKCks
IGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElE
QkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291
cmNlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
UmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1fdHJh
bnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUuanNWYWx1ZSgpLCBudWxscHRyLCBu
dWxscHRyKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Jsb2JVUkxzKCkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG1fbWV0
YWRhdGEua2V5UGF0aDsKLSAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGgu
aXNOdWxsKCk7Ci0gICAgY29uc3QgYm9vbCBoYXNLZXlHZW5lcmF0b3IgPSBhdXRvSW5jcmVtZW50
KCk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoc3RhdGUpOwotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1
ZXN0U3RhdGUoY29udGV4dCk7Ci0KLSAgICBpZiAocHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tl
bmQ6OkN1cnNvclVwZGF0ZSAmJiB1c2VzSW5MaW5lS2V5cyAmJiBrZXkpIHsKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgaWYgKCF1c2VzSW5MaW5lS2V5cyAmJiAhaGFzS2V5R2VuZXJhdG9yICYm
ICFrZXkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7
Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKHJlcXVlc3RTdGF0ZS5leGVjKCksIHZhbHVlLCBrZXlQYXRoKTsK
LSAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgewotICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXNLZXlHZW5lcmF0
b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAg
IGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIHZhbHVl
LCBrZXlQYXRoKSkgewotICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoa2V5UGF0aEtleSkKLSAgICAgICAgICAgIGtleSA9
IGtleVBhdGhLZXk7Ci0gICAgfQotICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzOwotICAg
IFZlY3RvcjxJbmRleEtleXM+IGluZGV4S2V5czsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9t
ZXRhZGF0YS5pbmRleGVzKSB7Ci0gICAgICAgIFZlY3RvcjxJREJLZXlEYXRhPiBrZXlEYXRhczsK
LSAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0U3RhdGUuZXhlYygpLCBp
bmRleC52YWx1ZSwgdmFsdWUsIGtleURhdGFzKTsKLSAgICAgICAgaW5kZXhJZHMuYXBwZW5kKGlu
ZGV4LmtleSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IE11Y2ggb2YgdGhlIEluZGV4ZWQgREIgY29k
ZSBuZWVkcyB0byB1c2UgSURCS2V5RGF0YSBkaXJlY3RseSB0byBhdm9pZCB3YXN0ZWZ1bCBjb252
ZXJzaW9ucyBsaWtlIHRoaXMuCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4ga2V5czsK
LSAgICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDoga2V5RGF0YXMpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKLSAgICAgICAg
ICAgIGlmIChrZXkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1
ZUJ5dGVzID0gc2VyaWFsaXplZFZhbHVlLT50b1dpcmVCeXRlcygpOwotICAgIC8vIFRoaXMgaXMg
YSBoYWNrIHRvIGFjY291bnQgZm9yIGRpc2FncmVlbWVudHMgYWJvdXQgd2hldGhlciBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgc2hvdWxkIGRlYWwgaW4gVmVjdG9yPHVpbnQ4X3Q+IG9yIFZlY3Rvcjxj
aGFyPi4KLSAgICAvLyBTZWUgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJr
aXQtZGV2LzIwMTMtRmVicnVhcnkvMDIzNjgyLmh0bWwKLSAgICBWZWN0b3I8Y2hhcj4qIHZhbHVl
Qnl0ZXNTaWduZWQgPSByZWludGVycHJldF9jYXN0PFZlY3RvcjxjaGFyPio+KCZ2YWx1ZUJ5dGVz
KTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6
YWRvcHRWZWN0b3IoKnZhbHVlQnl0ZXNTaWduZWQpOwotICAgIGJhY2tlbmREQigpLT5wdXQobV90
cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZmZXIsIGtleS5yZWxlYXNlKCksIHN0YXRp
Y19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZT4ocHV0TW9kZSksIHJlcXVlc3QsIGlu
ZGV4SWRzLCBpbmRleEtleXMpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2Jq
ZWN0U3RvcmU6OmRlbGV0ZSIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHko
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFrZXlSYW5nZSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBiYWNrZW5kREIoKS0+ZGVsZXRlUmFuZ2UobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwg
a2V5UmFuZ2UsIHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOwotICAgIGlmIChl
YykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlbGV0ZUZ1bmN0aW9uKGNvbnRleHQs
IGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjpj
bGVhciIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+
aWQoKSwgaWQoKSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQot
Ci1uYW1lc3BhY2UgewotLy8gVGhpcyBjbGFzcyBjcmVhdGVzIHRoZSBpbmRleCBrZXlzIGZvciBh
IGdpdmVuIGluZGV4IGJ5IGV4dHJhY3RpbmcKLS8vIHRoZW0gZnJvbSB0aGUgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLCBmb3IgYWxsIHRoZSBleGlzdGluZyB2YWx1ZXMgaW4KLS8vIHRoZSBvYmplY3RT
dG9yZS4gSXQgb25seSBuZWVkcyB0byBiZSBrZXB0IGFsaXZlIGJ5IHZpcnR1ZSBvZiBiZWluZwot
Ly8gYSBsaXN0ZW5lciBvbiBhbiBJREJSZXF1ZXN0IG9iamVjdCwgaW4gdGhlIHNhbWUgd2F5IHRo
YXQgSmF2YVNjcmlwdAotLy8gY3Vyc29yIHN1Y2Nlc3MgaGFuZGxlcnMgYXJlIGtlcHQgYWxpdmUu
Ci1jbGFzcyBJbmRleFBvcHVsYXRvciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEluZGV4UG9wdWxhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5kZXhQb3B1bGF0b3IoYmFja2VuZCwgdHJh
bnNhY3Rpb25JZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMgPT0gJm90aGVyOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBJbmRleFBvcHVsYXRvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwg
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAgIDogRXZlbnRMaXN0ZW5lcihDUFBF
dmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlQmFja2VuZChiYWNrZW5kKQot
ICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRl
eE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpOwotICAgICAg
ICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpOwotICAgICAgICBJREJSZXF1
ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8SURCUmVxdWVzdCo+KHRhcmdldCk7Ci0KLSAgICAg
ICAgUmVmUHRyPElEQkFueT4gY3Vyc29yQW55ID0gcmVxdWVzdC0+cmVzdWx0KEFTU0VSVF9OT19F
WENFUFRJT04pOwotICAgICAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBjdXJzb3I7Ci0g
ICAgICAgIGlmIChjdXJzb3JBbnktPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1
ZVR5cGUpCi0gICAgICAgICAgICBjdXJzb3IgPSBjdXJzb3JBbnktPmlkYkN1cnNvcldpdGhWYWx1
ZSgpOwotCi0gICAgICAgIFZlY3RvcjxpbnQ2NF90LCAxPiBpbmRleElkczsKLSAgICAgICAgaW5k
ZXhJZHMuYXBwZW5kKG1faW5kZXhNZXRhZGF0YS5pZCk7Ci0gICAgICAgIGlmIChjdXJzb3IpIHsK
LSAgICAgICAgICAgIGN1cnNvci0+Y29udGludWVGdW5jdGlvbihzdGF0aWNfY2FzdDxJREJLZXkq
PihudWxscHRyKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkgPSBjdXJzb3ItPmlkYlByaW1hcnlLZXkoKTsKLSAgICAgICAgICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gY3Vyc29yLT52YWx1ZSgpOwotCi0gICAg
ICAgICAgICBWZWN0b3I8SURCS2V5RGF0YT4gaW5kZXhLZXlEYXRhczsKLSAgICAgICAgICAgIGdl
bmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUocmVxdWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwg
bV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwgaW5kZXhLZXlEYXRhcyk7Ci0KLSAgICAgICAgICAgIFZl
Y3RvcjxSZWZQdHI8SURCS2V5Pj4gaW5kZXhLZXlzOwotICAgICAgICAgICAgZm9yIChhdXRvJiBp
bmRleEtleURhdGEgOiBpbmRleEtleURhdGFzKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5ID0gaW5kZXhLZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGtleSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXku
cmVsZWFzZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFZlY3RvcjxJREJPYmplY3RT
dG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNMaXN0OwotICAgICAgICAgICAgaW5kZXhLZXlz
TGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKLQotICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmQt
PnNldEluZGV4S2V5cyhtX3RyYW5zYWN0aW9uSWQsIG1fb2JqZWN0U3RvcmVJZCwgcHJpbWFyeUtl
eSwgaW5kZXhJZHMsIGluZGV4S2V5c0xpc3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5kZXhpbmcsIHRlbGwgdGhlIGJhY2tlbmQgdG8g
Z28KLSAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJvY2Vzc2luZyB0YXNrcyBvZiB0eXBlIE5vcm1h
bFRhc2suCi0gICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5KG1f
dHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBpbmRleElkcyk7Ci0gICAgICAgICAgICBt
X2RhdGFiYXNlQmFja2VuZCA9IG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2VCYWNrZW5kOwotICAgIGNvbnN0IGlu
dDY0X3QgbV90cmFuc2FjdGlvbklkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlk
OwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotfTsKLX0KLQot
UGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKLSAgICBvcHRpb25zLmdldCgidW5pcXVl
IiwgdW5pcXVlKTsKLQotICAgIGJvb2wgbXVsdGlFbnRyeSA9IGZhbHNlOwotICAgIG9wdGlvbnMu
Z2V0KCJtdWx0aUVudHJ5IiwgbXVsdGlFbnRyeSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlSW5kZXgo
Y29udGV4dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBlYyk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBh
dGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4
Iik7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSB8fCBtX2RlbGV0
ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rp
b25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFrZXlQ
YXRoLmlzVmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpTeW50
YXhFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChuYW1lLmlzTnVsbCgp
KSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgaWYgKGNvbnRhaW5zSW5kZXgobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlICYmIG11bHRpRW50
cnkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vy
cm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IGluZGV4SWQgPSBt
X21ldGFkYXRhLm1heEluZGV4SWQgKyAxOwotICAgIGJhY2tlbmREQigpLT5jcmVhdGVJbmRleCht
X3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRleElkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUs
IG11bHRpRW50cnkpOwotCi0gICAgKyttX21ldGFkYXRhLm1heEluZGV4SWQ7Ci0KLSAgICBJREJJ
bmRleE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSk7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUo
bWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAuc2V0
KG5hbWUsIGluZGV4KTsKLSAgICBtX21ldGFkYXRhLmluZGV4ZXMuc2V0KGluZGV4SWQsIG1ldGFk
YXRhKTsKLQotICAgIEFTU0VSVCghZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQpOwotICAgIHJldHVybiBpbmRl
eC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpp
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhT
dG9yYWdlQVBJLCAiSURCT2JqZWN0U3RvcmU6OmluZGV4Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc0Zpbmlz
aGVkKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRl
RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIElEQkluZGV4TWFwOjppdGVy
YXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9pbmRleE1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQotICAgIGludDY0X3QgaW5kZXhJ
ZCA9IGZpbmRJbmRleElkKG5hbWUpOwotICAgIGlmIChpbmRleElkID09IElEQkluZGV4TWV0YWRh
dGE6OkludmFsaWRJZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RG
b3VuZEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhKiBpbmRleE1ldGFkYXRhKG51bGxwdHIpOwotICAgIGZvciAoYXV0byYgaW5kZXgg
OiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKGluZGV4Lm5hbWUg
PT0gbmFtZSkgewotICAgICAgICAgICAgaW5kZXhNZXRhZGF0YSA9ICZpbmRleDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChpbmRleE1ldGFkYXRhKTsK
LSAgICBBU1NFUlQoaW5kZXhNZXRhZGF0YS0+aWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxp
ZElkKTsKLQotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKCpp
bmRleE1ldGFkYXRhLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2luZGV4TWFw
LnNldChuYW1lLCBpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9p
ZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjpkZWxl
dGVJbmRleCIpOwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkgfHwg
bV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRT
dGF0ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50NjRf
dCBpbmRleElkID0gZmluZEluZGV4SWQobmFtZSk7Ci0gICAgaWYgKGluZGV4SWQgPT0gSURCSW5k
ZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBiYWNrZW5k
REIoKS0+ZGVsZXRlSW5kZXgobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgaW5kZXhJZCk7Ci0K
LSAgICBtX21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwotICAgIElEQkluZGV4TWFw
OjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9p
bmRleE1hcC5lbmQoKSkgewotICAgICAgICBpdC0+dmFsdWUtPm1hcmtEZWxldGVkKCk7Ci0gICAg
ICAgIG1faW5kZXhNYXAucmVtb3ZlKG5hbWUpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gb3BlbkN1cnNvcihj
b250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtl
eVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOwotfQotCi1QYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwgSURC
Q3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQs
IHJhbmdlLCBkaXJlY3Rpb24sIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgZWMpOwot
fQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kOjpU
YXNrVHlwZSB0YXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJl
Y3Rpb25TdHJpbmcsIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3Qt
PnNldEN1cnNvckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlBbmRWYWx1ZSwgZGly
ZWN0aW9uKTsKLQotICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlk
KCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwgcmFuZ2UsIGRpcmVjdGlvbiwg
ZmFsc2UsIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGU+KHRhc2tUeXBl
KSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBl
Yyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gb3BlbkN1cnNv
cihjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGRpcmVjdGlvbiwgZWMpOwotfQotCi1QYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6Y291bnQi
KTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAg
ICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Qu
cmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpj
b3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7Ci0g
ICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY291bnQoY29udGV4dCwg
a2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmU6OnRyYW5z
YWN0aW9uRmluaXNoZWQoKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVk
KCkpOwotCi0gICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2luZGV4TWFwLmNs
ZWFyKCk7Ci19Ci0KLWludDY0X3QgSURCT2JqZWN0U3RvcmU6OmZpbmRJbmRleElkKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9tZXRhZGF0YS5p
bmRleGVzKSB7Ci0gICAgICAgIGlmIChpbmRleC52YWx1ZS5uYW1lID09IG5hbWUpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpbmRleC5rZXkgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsK
LSAgICAgICAgICAgIHJldHVybiBpbmRleC5rZXk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5k
KiBJREJPYmplY3RTdG9yZTo6YmFja2VuZERCKCkgY29uc3QKK0lEQk9iamVjdFN0b3JlOjpJREJP
YmplY3RTdG9yZSgpCiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmREQigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA1NzY2YmUwLi4yODY2NTA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgK
QEAgLTEsNDEgKzEsMzQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJPYmplY3RTdG9y
ZV9oCiAjZGVmaW5lIElEQk9iamVjdFN0b3JlX2gKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIK
LSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgi
Ci0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsODUgKzM2LDY1IEBACiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAorbmFtZXNwYWNlIERlcHJlY2F0ZWQgeworY2xhc3MgU2NyaXB0VmFsdWU7
Cit9CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhlY1N0YXRlOworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBJREJBbnk7Ci0KLWNsYXNz
IElEQk9iamVjdFN0b3JlIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50
ZWQ8SURCT2JqZWN0U3RvcmU+IHsKK2NsYXNzIElEQkluZGV4OworY2xhc3MgSURCS2V5UGF0aDsK
K2NsYXNzIElEQktleVJhbmdlOworY2xhc3MgSURCUmVxdWVzdDsKK2NsYXNzIElEQlRyYW5zYWN0
aW9uOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgSURCT2JqZWN0U3Rv
cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZT4gewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBtZXRhZGF0YSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCT2JqZWN0U3RvcmUobWV0YWRhdGEsIHRyYW5zYWN0
aW9uKSk7Ci0gICAgfQotICAgIH5JREJPYmplY3RTdG9yZSgpIHsgfQorICAgIHZpcnR1YWwgfklE
Qk9iamVjdFN0b3JlKCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9iamVjdFN0b3Jl
IElETAotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0g
ICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0K
LSAgICBQYXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0IHsgcmV0dXJuIElEQkFu
eTo6Y3JlYXRlKG1fbWV0YWRhdGEua2V5UGF0aCk7IH0KLSAgICBjb25zdCBJREJLZXlQYXRoIGtl
eVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb247
IH0KLSAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmF1
dG9JbmNyZW1lbnQ7IH0KLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhl
Y1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRp
cmVjdGlvbiwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUq
LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChK
U0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gY3JlYXRlSW5kZXgoY29udGV4dCwgbmFtZSwgSURCS2V5UGF0aChrZXlQYXRoKSwgb3B0aW9u
cywgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUluZGV4KGNvbnRleHQsIG5hbWUsIElEQktleVBhdGgoa2V5
UGF0aCksIG9wdGlvbnMsIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUlu
ZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NS
ZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0
aUVudHJ5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZUlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5
UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFzZUJh
Y2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRl
KiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQo
SURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBK
U0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVk
ID0gdHJ1ZTsgfQotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOwotCi0gICAgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0K
LSAgICB2b2lkIHNldE1ldGFkYXRhKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFk
YXRhKSB7IG1fbWV0YWRhdGEgPSBtZXRhZGF0YTsgfQotCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPElEQktleT4+IEluZGV4S2V5czsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJbmRl
eEtleXM+IEluZGV4S2V5TWFwOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIo
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiwgSURCVHJhbnNhY3Rpb24qKTsKLQotICAgIGludDY0X3QgZmluZEluZGV4
SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbmRJbmRleElk
KG5hbWUpICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKLSAgICB9Ci0KLSAgICBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
PiBtX3RyYW5zYWN0aW9uOwotICAgIGJvb2wgbV9kZWxldGVkOwotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4Pj4gSURCSW5kZXhNYXA7Ci0gICAgSURCSW5kZXhN
YXAgbV9pbmRleE1hcDsKKyAgICB2aXJ0dWFsIGludDY0X3QgaWQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3Qg
SURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29u
c3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUq
LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleD4g
aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKK3Byb3RlY3Rl
ZDoKKyAgICBJREJPYmplY3RTdG9yZSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aWRsCmluZGV4IGZkZmNhOGEuLmFmMDIwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTI1LDggKzI1LDggQEAKIAog
WwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgSW1wbGVtZW50YXRpb25M
YWNrc1ZUYWJsZSwKICAgICBFbmFibGVkQXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRh
YmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIElEQk9iamVjdFN0b3JlIHsKICAgICBbVHJlYXRS
ZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5h
bWU7CiAgICAgW0ltcGxlbWVudGVkQXM9a2V5UGF0aEFueV0gcmVhZG9ubHkgYXR0cmlidXRlIElE
QkFueSBrZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPcGVuREJSZXF1ZXN0LmNwcAppbmRleCA3MTU3OWIwLi5hZGY4YTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNw
cApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CkBAIC0yOCwxMjggKzI4LDEzIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAot
I2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2luY2x1
ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UmVmPElEQk9wZW5EQlJlcXVlc3Q+IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbiwgSW5kZXhl
ZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzKQotewotICAgIFJlZjxJREJPcGVu
REJSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcgSURCT3BlbkRCUmVxdWVzdChjb250ZXh0
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24sIHZlcnNpb25OdWxsbmVzcykpKTsK
LSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0K
LQotSURCT3BlbkRCUmVxdWVzdDo6SURCT3BlbkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJz
aW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzKQotICAgIDogSURCUmVxdWVzdChjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZU51bGwoKSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCAwKQot
ICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgLCBtX3RyYW5zYWN0aW9u
SWQodHJhbnNhY3Rpb25JZCkKLSAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICwgbV92ZXJz
aW9uTnVsbG5lc3ModmVyc2lvbk51bGxuZXNzKQotewotICAgIEFTU0VSVCghbV9yZXN1bHQpOwot
fQotCi1JREJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCgpCi17Ci19Ci0KLUV2ZW50
VGFyZ2V0SW50ZXJmYWNlIElEQk9wZW5EQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURCT3BlbkRCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNl
VHlwZTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkJsb2NrZWQodWludDY0X3Qgb2xk
VmVyc2lvbikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uQmxv
Y2tlZCgpIik7Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShv
bGRWZXJzaW9uLCBtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKLX0KLQot
dm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHBycERhdGFiYXNlQmFja2VuZCwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCitJREJPcGVuREJSZXF1ZXN0OjpJREJP
cGVuREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBJREJS
ZXF1ZXN0KGNvbnRleHQpCiB7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJPcGVuREJSZXF1ZXN0
OjpvblVwZ3JhZGVOZWVkZWQoKSIpOwotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZD4gZGIgPSBwcnBEYXRhYmFzZUJhY2tlbmQ7Ci0gICAgICAgIGRiLT5hYm9ydChtX3RyYW5zYWN0
aW9uSWQpOwotICAgICAgICBkYi0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFja3MpOwotCi0gICAgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2VCYWNrZW5kID0gcHJwRGF0YWJhc2VCYWNrZW5k
OwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IElEQkRhdGFiYXNlOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBkYXRhYmFzZUJhY2tlbmQsIG1fZGF0YWJh
c2VDYWxsYmFja3MpOwotICAgIGlkYkRhdGFiYXNlLT5zZXRNZXRhZGF0YShtZXRhZGF0YSk7Ci0g
ICAgbV9kYXRhYmFzZUNhbGxiYWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7Ci0gICAg
bV9kYXRhYmFzZUNhbGxiYWNrcyA9IG51bGxwdHI7Ci0KLSAgICBJREJEYXRhYmFzZU1ldGFkYXRh
IG9sZE1ldGFkYXRhKG1ldGFkYXRhKTsKLSAgICBvbGRNZXRhZGF0YS52ZXJzaW9uID0gb2xkVmVy
c2lvbjsKLQotICAgIG1fdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFuc2FjdGlvbklkLCBpZGJEYXRhYmFzZS5nZXQoKSwg
dGhpcywgb2xkTWV0YWRhdGEpOwotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0
YWJhc2UucmVsZWFzZSgpKTsKLQotICAgIGlmIChtX3ZlcnNpb25OdWxsbmVzcyA9PSBJbmRleGVk
REI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCkKLSAgICAgICAgbV92ZXJzaW9uID0gMTsKLSAgICBl
bnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbV92
ZXJzaW9uLCBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSk7Ci19Ci0KLXZvaWQgSURC
T3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBw
cnBCYWNrZW5kLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2VzcygpIik7Ci0gICAgaWYg
KCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9IHBycEJhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlPiBpZGJEYXRhYmFzZTsKLSAgICBpZiAobV9yZXN1bHQpIHsKLSAgICAgICAgaWRiRGF0
YWJhc2UgPSBtX3Jlc3VsdC0+aWRiRGF0YWJhc2UoKTsKLSAgICAgICAgQVNTRVJUKGlkYkRhdGFi
YXNlKTsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAgIGlkYkRhdGFi
YXNlID0gSURCRGF0YWJhc2U6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tl
bmQucmVsZWFzZSgpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICAgICAgbV9kYXRhYmFzZUNh
bGxiYWNrcy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIG1fZGF0YWJhc2VD
YWxsYmFja3MgPSBudWxscHRyOwotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGlk
YkRhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0gICAgaWRiRGF0YWJhc2UtPnNldE1ldGFkYXRhKG1l
dGFkYXRhKTsKLSAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3Vj
Y2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLX0KLQotYm9vbCBJREJPcGVuREJSZXF1ZXN0Ojpz
aG91bGRFbnF1ZXVlRXZlbnQoKSBjb25zdAotewotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8
ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwot
ICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCT3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQg
YmV0d2VlbiBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBvZiB0aGUgInN1Y2Nlc3Mi
IGV2ZW50LAotICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJlIGZpcmVkIGluc3RlYWQu
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAmJiBt
X3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6SURCRGF0YWJhc2VUeXBlICYmIG1fcmVzdWx0LT5p
ZGJEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7Ci0gICAgICAgIG1fcmVzdWx0ID0gbnVs
bHB0cjsKLSAgICAgICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBJREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaAppbmRleCA5MWQ0YjAx
Li5hMTAxNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPcGVuREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT3BlbkRCUmVxdWVzdC5oCkBAIC0xLDI2ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNp
Zm5kZWYgSURCT3BlbkRCUmVxdWVzdF9oCkBAIC0zMywzMyArMzMsMTIgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLQogY2xhc3MgSURCT3Bl
bkRCUmVxdWVzdCA6IHB1YmxpYyBJREJSZXF1ZXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PElEQk9wZW5EQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0
X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MpOwotICAgIHZpcnR1YWwgfklE
Qk9wZW5EQlJlcXVlc3QoKTsKLQotICAgIHVzaW5nIElEQlJlcXVlc3Q6Om9uU3VjY2VzczsKLQot
ICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQodWludDY0X3QgZXhpc3RpbmdWZXJzaW9uKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKHVpbnQ2NF90IG9sZFZlcnNp
b24sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRh
ZGF0YSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikgb3ZlcnJpZGU7
Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB+
SURCT3BlbkRCUmVxdWVzdCgpIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZEVucXVldWVFdmVudCgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIElEQk9w
ZW5EQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIElu
ZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzKTsKLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKLSAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rp
b25JZDsKLSAgICB1aW50NjRfdCBtX3ZlcnNpb247Ci0gICAgSW5kZXhlZERCOjpWZXJzaW9uTnVs
bG5lc3MgbV92ZXJzaW9uTnVsbG5lc3M7CisgICAgSURCT3BlbkRCUmVxdWVzdChTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCmlu
ZGV4IDU5YTY2MDEuLjU0Njk3ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCkBAIC0yOSw2ICsyOSw3IEBACiAgICAg
SlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAogICAg
IEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAorICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAog
XSBpbnRlcmZhY2UgSURCT3BlbkRCUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgIGF0dHJpYnV0
ZSBFdmVudEhhbmRsZXIgb25ibG9ja2VkOwogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb251
cGdyYWRlbmVlZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlBlbmRpbmdEZWxldGVDYWxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRmYmEyZTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUGVuZGluZ0RlbGV0ZUNhbGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIElEQlBlbmRpbmdEZWxldGVDYWxsX2gKLSNkZWZpbmUgSURCUGVu
ZGluZ0RlbGV0ZUNhbGxfaAotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCUGVuZGluZ0RlbGV0ZUNhbGwgewotcHVibGljOgotICAg
IGV4cGxpY2l0IElEQlBlbmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi0gICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9
Ci0KLSAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzLmdl
dCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJQZW5kaW5nRGVsZXRlQ2FsbF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nT3BlbkNhbGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdPcGVuQ2FsbC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjUzZWY5Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdPcGVuQ2FsbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCUGVuZGluZ09w
ZW5DYWxsX2gKLSNkZWZpbmUgSURCUGVuZGluZ09wZW5DYWxsX2gKLQotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tz
OwotCi1jbGFzcyBJREJQZW5kaW5nT3BlbkNhbGwgewotcHVibGljOgotICAgIElEQlBlbmRpbmdP
cGVuQ2FsbChJREJDYWxsYmFja3MmIGNhbGxiYWNrcywgSURCRGF0YWJhc2VDYWxsYmFja3MmIGRh
dGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24p
Ci0gICAgICAgIDogbV9jYWxsYmFja3MoJmNhbGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNl
Q2FsbGJhY2tzKCZkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lv
bikKLSAgICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAgICB7Ci0gICAg
fQotCi0gICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrcy5n
ZXQoKTsgfQotICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIHsg
cmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KLSAgICB1aW50NjRfdCB2ZXJzaW9u
KCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgaW50NjRfdCB0cmFuc2FjdGlvbklkKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklkOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotICAgIHVpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICBjb25z
dCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQlBlbmRp
bmdPcGVuQ2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyZjczZDNmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0jaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb24uaCIKLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lm
aWMuaD4KLQotdXNpbmcgV1RGOjpUaHJlYWRTcGVjaWZpYzsKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4+IFRyYW5zYWN0aW9uTGlzdDsKLQotc3RhdGljIFRocmVhZFNwZWNp
ZmljPFRyYW5zYWN0aW9uTGlzdD4mIHRyYW5zYWN0aW9ucygpCi17Ci0gICAgLy8gRklYTUU6IE1v
dmUgdGhlIFZlY3RvciB0byBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHRvIGF2b2lkIGRlYWxpbmcg
d2l0aAotICAgIC8vIHRocmVhZC1sb2NhbCBzdG9yYWdlLgotICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0
PiogdHJhbnNhY3Rpb25zOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAg
ICAgdHJhbnNhY3Rpb25zID0gbmV3IFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9uTGlzdD47Ci0g
ICAgfSk7Ci0KLSAgICByZXR1cm4gKnRyYW5zYWN0aW9uczsKLX0KLQotdm9pZCBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbikKLXsKLSAgICB0cmFuc2FjdGlvbnMoKS0+YXBwZW5kKHRyYW5z
YWN0aW9uKTsKLX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpkZWFjdGl2
YXRlTmV3VHJhbnNhY3Rpb25zKCkKLXsKLSAgICBUaHJlYWRTcGVjaWZpYzxUcmFuc2FjdGlvbkxp
c3Q+JiBsaXN0ID0gdHJhbnNhY3Rpb25zKCk7Ci0gICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6
ICpsaXN0KQotICAgICAgICB0cmFuc2FjdGlvbi0+c2V0QWN0aXZlKGZhbHNlKTsKLSAgICAvLyBG
SVhNRTogRXhlcmNpc2UgdGhpcyBjYWxsIHRvIGNsZWFyKCkgaW4gYSBsYXlvdXQgdGVzdC4KLSAg
ICBsaXN0LT5jbGVhcigpOwotfQotCi19OwotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmZWY1NWZlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Jf
aAotI2RlZmluZSBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yX2gKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlRyYW5z
YWN0aW9uOwotCi0vLyBUaGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSB0cmFuc2FjdGlvbnMg
Y3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQKLS8vIEphdmFzY3JpcHQgZXhlY3V0aW9uIGNvbnRl
eHQuIFRyYW5zYWN0aW9ucyBoYXZlIGFuIGludGVybmFsIHxhY3RpdmV8IGZsYWcKLS8vIHdoaWNo
IGlzIHNldCB0byB0cnVlIG9uIGNyZWF0aW9uLCBidXQgbXVzdCBiZSBzZXQgdG8gZmFsc2Ugd2hl
biBjb250cm9sCi0vLyByZXR1cm5zIHRvIHRoZSBldmVudCBsb29wLgotCi1jbGFzcyBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhZGROZXdU
cmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPik7Ci0gICAgc3RhdGljIHZvaWQg
ZGVhY3RpdmF0ZU5ld1RyYW5zYWN0aW9ucygpOwotCi1wcml2YXRlOgotICAgIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwCmluZGV4IDg2NGRlNTMuLmM2YThiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0xLDI5ICsxLDI2IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEsNTQ3ICsyOCwxMyBAQAogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAi
RXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2lu
Y2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5k
LmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2UuaCIKLSNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUmVmPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QoYWRvcHRS
ZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpO
b3JtYWxUYXNrLCB0cmFuc2FjdGlvbikpKTsKLSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQo
KTsKLSAgICAvLyBSZXF1ZXN0cyBhc3NvY2lhdGVkIHdpdGggSURCRmFjdG9yeSAob3Blbi9kZWxl
dGVEYXRhYmFzZS9nZXREYXRhYmFzZU5hbWVzKSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCB0cmFu
c2FjdGlvbnMuCi0gICAgaWYgKHRyYW5zYWN0aW9uKQotICAgICAgICB0cmFuc2FjdGlvbi0+cmVn
aXN0ZXJSZXF1ZXN0KHJlcXVlc3QucHRyKCkpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1S
ZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBS
ZWY8SURCUmVxdWVzdD4gcmVxdWVzdChhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29udGV4dCwg
c291cmNlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24pKSk7Ci0gICAgcmVxdWVzdC0+c3VzcGVuZElm
TmVlZGVkKCk7Ci0gICAgLy8gUmVxdWVzdHMgYXNzb2NpYXRlZCB3aXRoIElEQkZhY3RvcnkgKG9w
ZW4vZGVsZXRlRGF0YWJhc2UvZ2V0RGF0YWJhc2VOYW1lcykgYXJlIG5vdCBhc3NvY2lhdGVkIHdp
dGggdHJhbnNhY3Rpb25zLgotICAgIGlmICh0cmFuc2FjdGlvbikKLSAgICAgICAgdHJhbnNhY3Rp
b24tPnJlZ2lzdGVyUmVxdWVzdChyZXF1ZXN0LnB0cigpKTsKLSAgICByZXR1cm4gcmVxdWVzdDsK
LX0KLQotSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCitJREJSZXF1ZXN0OjpJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVE
T01PYmplY3QoY29udGV4dCkKLSAgICAsIG1fcmVzdWx0KG51bGxwdHIpCi0gICAgLCBtX2Vycm9y
Q29kZSgwKQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLSAgICAsIG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCi0gICAgLCBtX3JlYWR5U3RhdGUoUEVORElORykKLSAgICAsIG1fcmVx
dWVzdEFib3J0ZWQoZmFsc2UpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3Rhc2tU
eXBlKHRhc2tUeXBlKQotICAgICwgbV9oYXNQZW5kaW5nQWN0aXZpdHkodHJ1ZSkKLSAgICAsIG1f
Y3Vyc29yVHlwZShJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlKQotICAgICwgbV9j
dXJzb3JEaXJlY3Rpb24oSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHQpCi0gICAgLCBt
X2N1cnNvckZpbmlzaGVkKGZhbHNlKQotICAgICwgbV9wZW5kaW5nQ3Vyc29yKG51bGxwdHIpCi0g
ICAgLCBtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQoZmFsc2UpCi0gICAgLCBtX3ByZXZlbnRQ
cm9wYWdhdGlvbihmYWxzZSkKLSAgICAsIG1fcmVxdWVzdFN0YXRlKGNvbnRleHQpCi17Ci19Ci0K
LUlEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJREJBbnk+IElE
QlJlcXVlc3Q6OnJlc3VsdChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAobV9y
ZWFkeVN0YXRlICE9IERPTkUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4g
bV9yZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8RE9NRXJyb3I+IElEQlJlcXVlc3Q6OmVycm9yKEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX2Vycm9yOwotfQotCi11bnNp
Z25lZCBzaG9ydCBJREJSZXF1ZXN0OjplcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1fZXJyb3JDb2RlOwotfQotCi1QYXNzUmVmUHRyPElEQkFueT4gSURC
UmVxdWVzdDo6c291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zb3VyY2U7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6OnRyYW5zYWN0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKLX0KLQotY29uc3QgU3RyaW5nJiBJREJSZXF1
ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBF
TkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBlbmRpbmcsICgicGVuZGluZyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBkb25lLCAoImRvbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpCi0gICAg
ICAgIHJldHVybiBwZW5kaW5nOwotCi0gICAgcmV0dXJuIGRvbmU7Ci19Ci0KLXZvaWQgSURCUmVx
dWVzdDo6bWFya0Vhcmx5RGVhdGgoKQotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVO
RElORyk7Ci0gICAgbV9yZWFkeVN0YXRlID0gRWFybHlEZWF0aDsKLSAgICBpZiAobV90cmFuc2Fj
dGlvbikKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVlc3QodGhpcyk7Ci19
Ci0KLXZvaWQgSURCUmVxdWVzdDo6YWJvcnQoKQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0QWJv
cnRlZCk7Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElO
RyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBET05F
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnF1ZXVlZCBldmVudHMgbWF5IGJlIHRoZSBv
bmx5IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdC4KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gc2Vs
Zih0aGlzKTsKLQotICAgIEV2ZW50UXVldWUmIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVl
ZEV2ZW50cykgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50
KCpldmVudCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAg
fQotICAgIG1fZW5xdWV1ZWRFdmVudHMuY2xlYXIoKTsKLQotICAgIG1fZXJyb3JDb2RlID0gMDsK
LSAgICBtX2Vycm9yID0gbnVsbHB0cjsKLSAgICBtX2Vycm9yTWVzc2FnZSA9IFN0cmluZygpOwot
ICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKLSAgICBvbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwotICAgIG1fcmVxdWVzdEFi
b3J0ZWQgPSB0cnVlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldEN1cnNvckRldGFpbHMoSW5k
ZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
IGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAg
IEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKLSAgICBtX2N1cnNvclR5cGUgPSBjdXJzb3JUeXBl
OwotICAgIG1fY3Vyc29yRGlyZWN0aW9uID0gZGlyZWN0aW9uOwotfQotCi12b2lkIElEQlJlcXVl
c3Q6OnNldFBlbmRpbmdDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKLXsKLSAg
ICBBU1NFUlQobV9yZWFkeVN0YXRlID09IERPTkUpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1f
cGVuZGluZ0N1cnNvcik7Ci0gICAgQVNTRVJUKGN1cnNvciA9PSBnZXRSZXN1bHRDdXJzb3IoKSk7
Ci0KLSAgICBtX3BlbmRpbmdDdXJzb3IgPSBjdXJzb3I7Ci0gICAgbV9yZXN1bHQgPSBudWxscHRy
OwotICAgIG1fcmVhZHlTdGF0ZSA9IFBFTkRJTkc7Ci0gICAgbV9lcnJvckNvZGUgPSAwOwotICAg
IG1fZXJyb3IgPSBudWxscHRyOwotICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7Ci0gICAg
bV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOwotfQotCi1SZWZQdHI8SURCQ3Vy
c29yPiBJREJSZXF1ZXN0OjpnZXRSZXN1bHRDdXJzb3IoKQotewotICAgIGlmICghbV9yZXN1bHQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChtX3Jlc3VsdC0+dHlwZSgpID09IElE
QkFueTo6SURCQ3Vyc29yVHlwZSkKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5pZGJDdXJzb3Io
KTsKLSAgICBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1
ZVR5cGUpCi0gICAgICAgIHJldHVybiBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0aFZhbHVlKCk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29y
KFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKLSAgICBt
X2N1cnNvcktleSA9IGtleTsKLSAgICBtX2N1cnNvclByaW1hcnlLZXkgPSBwcmltYXJ5S2V5Owot
ICAgIG1fY3Vyc29yVmFsdWUgPSB2YWx1ZTsKLQotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5k
ZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5KSB7Ci0gICAgICAgIG1fcmVzdWx0ID0gSURCQW55
OjpjcmVhdGUoY3Vyc29yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yV2l0aFZhbHVlOjpmcm9tQ3Vyc29yKGN1cnNvcikp
OwotfQotCi12b2lkIElEQlJlcXVlc3Q6OmZpbmlzaEN1cnNvcigpCi17Ci0gICAgbV9jdXJzb3JG
aW5pc2hlZCA9IHRydWU7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBQRU5ESU5HKQotICAgICAg
ICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOwotfQotCi1ib29sIElEQlJlcXVlc3Q6OnNo
b3VsZEVucXVldWVFdmVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwg
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFT
U0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7Ci0g
ICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYg
bV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fZXJyb3IgJiYgIW1fcmVzdWx0KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJSZXF1ZXN0
OjpvbkVycm9yKCkgKCVzKSAnJXMnIiwgZXJyb3ItPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBlcnJv
ci0+bWVzc2FnZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXJyb3JDb2RlID0gZXJyb3ItPmNvZGUoKTsK
LSAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yLT5tZXNzYWdlKCk7Ci0gICAgbV9lcnJvciA9IERP
TUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShlcnJvci0+
aWRiQ29kZSgpKSk7Ci0gICAgbV9wZW5kaW5nQ3Vyc29yID0gbnVsbHB0cjsKLSAgICBlbnF1ZXVl
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkp
OwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxFdmVudD4gY3JlYXRlU3VjY2Vzc0V2ZW50KCkKLXsK
LSAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxz
ZSwgZmFsc2UpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoRE9NU3RyaW5nTGlzdCkiKTsKLSAgICBpZiAoIXNob3VsZEVucXVl
dWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3Jl
YXRlKGRvbVN0cmluZ0xpc3QpOwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQo
KSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZD4gcHJwQmFja2VuZCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6
Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3Jl
cXVlc3RTdGF0ZSk7Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCA9IHBy
cEJhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gYmFja2VuZC0+a2V5KCk7Ci0gICAg
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGJhY2tlbmQtPnByaW1hcnlLZXkoKTsKLQotICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZl
cihyZXF1ZXN0U3RhdGUoKSwgYmFja2VuZC0+dmFsdWVCdWZmZXIoKSwgISFrZXkpOwotCi0gICAg
QVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsK
LSAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgewotICAgIGNhc2UgSW5kZXhlZERCOjpDdXJzb3JU
eXBlOjpLZXlPbmx5OgotICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5k
LnJlbGVhc2UoKSwgbV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1fc291cmNlLmdldCgpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmRleGVkREI6OkN1
cnNvclR5cGU6OktleUFuZFZhbHVlOgotICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRoVmFs
dWU6OmNyZWF0ZShiYWNrZW5kLnJlbGVhc2UoKSwgbV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1f
c291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHNldFJl
c3VsdEN1cnNvcihjdXJzb3IsIGtleS5yZWxlYXNlKCksIHByaW1hcnlLZXkucmVsZWFzZSgpLCB2
YWx1ZSk7Ci0KLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi12
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5KQogewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsKLSAg
ICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aWRiS2V5ICYmIGlkYktleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIERPTVJlcXVlc3RTdGF0ZTo6
U2NvcGUgc2NvcGUobV9yZXF1ZXN0U3RhdGUpOwotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6
Y3JlYXRlKGlkYktleVRvU2NyaXB0VmFsdWUocmVxdWVzdFN0YXRlKCksIGlkYktleSkpOwotICAg
IH0gZWxzZQotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpOwotICAg
IGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVz
dDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlcikKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhTaGFyZWRCdWZmZXIpIik7
Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0KLSAgICAvLyBG
SVhNRTogQnkgbm90IGtub3dpbmcgd2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkZWZpbmVkIGhl
cmUsIHdlIGRvbid0IGtub3cKLSAgICAvLyBpZiBhIG51bGwgdmFsdWVCdWZmZXIgbWVhbnMgdGhl
IHZhbHVlIGlzIG51bGwgb3IgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIocmVxdWVzdFN0
YXRlKCksIHZhbHVlQnVmZmVyLCB0cnVlKTsKLSAgICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7
Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4g
ZWZmZWN0aXZlT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSkKLXsKLSAgICBp
ZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9yZVR5cGUpCi0gICAgICAg
IHJldHVybiBzb3VyY2UtPmlkYk9iamVjdFN0b3JlKCk7Ci0gICAgaWYgKHNvdXJjZS0+dHlwZSgp
ID09IElEQkFueTo6SURCSW5kZXhUeXBlKQotICAgICAgICByZXR1cm4gc291cmNlLT5pZGJJbmRl
eCgpLT5vYmplY3RTdG9yZSgpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0jZW5kaWYKLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhTaGFyZWRCdWZmZXIsIElEQktleSwgSURCS2V5UGF0aCki
KTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKGtleVBhdGggPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUo
bV9zb3VyY2UpLT5rZXlQYXRoKCkpOwotI2VuZGlmCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29w
ZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0KLSAgICAvLyBGSVhNRTogQnkgbm90IGtub3dpbmcg
d2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkZWZpbmVkIGhlcmUsIHdlIGRvbid0IGtub3cKLSAg
ICAvLyBpZiBhIG51bGwgdmFsdWVCdWZmZXIgbWVhbnMgdGhlIHZhbHVlIGlzIG51bGwgb3IgdGhl
IHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSA9
IGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIocmVxdWVzdFN0YXRlKCksIHZhbHVlQnVmZmVyLCB0
cnVlKTsKLQotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5Owot
Ci0gICAgaWYgKCFrZXlQYXRoLmlzTnVsbCgpKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBS
ZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgocmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwgdmFsdWUsIGtleVBhdGgpOwotICAgICAg
ICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFsKHByaW1hcnlLZXku
Z2V0KCkpKTsKLSNlbmRpZgotICAgICAgICBib29sIGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlKHJlcXVlc3RTdGF0ZSgpLCBwcmltYXJ5S2V5LCB2YWx1ZSwga2V5UGF0aCk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaW5qZWN0ZWQsIGluamVjdGVkKTsKLSAgICB9Ci0KLSAg
ICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKGludDY0X3QgdmFsdWUpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJSZXF1ZXN0Ojpv
blN1Y2Nlc3MoaW50NjRfdCkiKTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6bnVtYmVyVmFsdWUodmFsdWUpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1
Y2Nlc3MoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzKCki
KTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
cmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVk
VmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzSW50ZXJuYWwoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQotewotICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7Ci0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RT
dGF0ZSk7Ci0gICAgcmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKGRlc2VyaWFsaXplSURCVmFsdWUo
cmVxdWVzdFN0YXRlKCksIHZhbHVlKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
SW50ZXJuYWwoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQotewotICAgIG1f
cmVzdWx0ID0gSURCQW55OjpjcmVhdGUodmFsdWUpOwotICAgIGlmIChtX3BlbmRpbmdDdXJzb3Ip
IHsKLSAgICAgICAgbV9wZW5kaW5nQ3Vyc29yLT5jbG9zZSgpOwotICAgICAgICBtX3BlbmRpbmdD
dXJzb3IgPSBudWxscHRyOwotICAgIH0KLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2
ZW50KCkpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlcikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlJlcXVlc3Q6Om9uU3Vj
Y2VzcyhrZXksIHByaW1hcnlLZXksIHZhbHVlQnVmZmVyKSIpOwotICAgIGlmICghc2hvdWxkRW5x
dWV1ZUV2ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTVJlcXVlc3RTdGF0ZTo6U2Nv
cGUgc2NvcGUobV9yZXF1ZXN0U3RhdGUpOwotCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
dmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0ZSgpLCBidWZmZXIs
ICEha2V5KTsKLQotICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOwotICAgIHNldFJlc3VsdEN1
cnNvcihtX3BlbmRpbmdDdXJzb3IucmVsZWFzZSgpLCBrZXksIHByaW1hcnlLZXksIHZhbHVlKTsK
LSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi1ib29sIElEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEluIGFu
IGlkZWFsIHdvcmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFz
IGEgb3IgY2FuCi0gICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBl
dmVudCBsaXN0ZW5lcnMuIFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCi0gICAgLy8gICAgICAgIHVz
ZXIgZ2VuZXJhdGVkIGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0
aXZpdHkgJiYgIW1fY29udGV4dFN0b3BwZWQ7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c3RvcCgp
Ci17Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dFN0b3BwZWQgPSB0cnVlOwotICAgIG1fcmVxdWVzdFN0YXRlLmNsZWFyKCk7Ci0gICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKQotICAgICAgICBtYXJrRWFybHlEZWF0aCgpOwot
fQotCi1ib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAotewot
ICAgIHJldHVybiAhbV9oYXNQZW5kaW5nQWN0aXZpdHk7Ci19Ci0KLWNvbnN0IGNoYXIqIElEQlJl
cXVlc3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURCUmVx
dWVzdCI7Ci19Ci0KLUV2ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50
ZXJmYWNlVHlwZTsKLX0KLQotYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudCIpOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7Ci0gICAg
QVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZp
dHkpOwotICAgIEFTU0VSVChtX2VucXVldWVkRXZlbnRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0
aGlzKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8IERPTkUsICJXaGVu
IGRpc3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05FKCVkKSwgd2FzICVkIiwg
ZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBET05FLCBtX3JlYWR5U3RhdGUp
OwotCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0K
LSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQotICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZl
bnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQotICAgICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50
cy5yZW1vdmUoaSk7Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7Ci0gICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24g
JiYgIW1fcHJldmVudFByb3BhZ2F0aW9uKSB7Ci0gICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJh
bnNhY3Rpb24pOwotICAgICAgICAvLyBJZiB0aGVyZSBldmVyIGFyZSBldmVudHMgdGhhdCBhcmUg
YXNzb2NpYXRlZCB3aXRoIGEgZGF0YWJhc2UgYnV0Ci0gICAgICAgIC8vIHRoYXQgZG8gbm90IGhh
dmUgYSB0cmFuc2FjdGlvbiwgdGhlbiB0aGlzIHdpbGwgbm90IHdvcmsgYW5kIHdlIG5lZWQKLSAg
ICAgICAgLy8gdGhpcyBvYmplY3QgdG8gYWN0dWFsbHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUg
ZGF0YWJhc2UgKHRvIGVuc3VyZQotICAgICAgICAvLyBpdCBzdGF5cyBhbGl2ZSkuCi0gICAgICAg
IHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24tPmRiKCkpOwotICAgIH0KLQotICAgIC8vIEN1
cnNvciBwcm9wZXJ0aWVzIHNob3VsZCBub3QgdXBkYXRlZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVu
dCBpcyBiZWluZyBkaXNwYXRjaGVkLgotICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvclRvTm90
aWZ5OwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQp
IHsKLSAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRSZXN1bHRDdXJzb3IoKTsKLSAgICAgICAg
aWYgKGN1cnNvclRvTm90aWZ5KSB7Ci0gICAgICAgICAgICBjdXJzb3JUb05vdGlmeS0+c2V0VmFs
dWVSZWFkeShyZXF1ZXN0U3RhdGUoKSwgbV9jdXJzb3JLZXkucmVsZWFzZSgpLCBtX2N1cnNvclBy
aW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVlKTsKLSAgICAgICAgICAgIG1fY3Vyc29y
VmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKLSAgICAgICAgQVNTRVJUKCFt
X2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQpOwotICAgICAgICBtX2RpZEZpcmVVcGdyYWRlTmVl
ZGVkRXZlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaGVuIHdlIGFsbG93IGN1
c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5IG5lZWQgdG8gY2hhbmdl
LgotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCwgImV2ZW50IHR5cGUgd2Fz
ICVzIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBjb25zdCBi
b29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAmJiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJv
cnRFcnJvcikpOwotCi0gICAgaWYgKHNldFRyYW5zYWN0aW9uQWN0aXZlKQotICAgICAgICBtX3Ry
YW5zYWN0aW9uLT5zZXRBY3RpdmUodHJ1ZSk7Ci0KLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVs
dCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOwot
Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBE
T05FKQotICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVlc3QodGhpcyk7
Ci0KLSAgICAgICAgLy8gUG9zc2libHkgYWJvcnQgdGhlIHRyYW5zYWN0aW9uLiBUaGlzIG11c3Qg
b2NjdXIgYWZ0ZXIgdW5yZWdpc3RlcmluZyAoc28gdGhpcyByZXF1ZXN0Ci0gICAgICAgIC8vIGRv
ZXNuJ3QgcmVjZWl2ZSBhIHNlY29uZCBlcnJvcikgYW5kIGJlZm9yZSBkZWFjdGl2YXRpbmcgKHdo
aWNoIG1pZ2h0IHRyaWdnZXIgY29tbWl0KS4KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9udFByZXZlbnREZWZhdWx0ICYmICFtX3JlcXVl
c3RBYm9ydGVkKSB7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihtX2Vycm9y
LCBtX2Vycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChJR05P
UkVfRVhDRVBUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBs
YXN0IHJlcXVlc3QgaW4gdGhlIHRyYW5zYWN0aW9uJ3MgbGlzdCwgaXQgbWF5IGNvbW1pdCBoZXJl
LgotICAgICAgICBpZiAoc2V0VHJhbnNhY3Rpb25BY3RpdmUpCi0gICAgICAgICAgICBtX3RyYW5z
YWN0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjdXJzb3JUb05vdGlm
eSkKLSAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7
Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlID09IERPTkUgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBt
X2N1cnNvckZpbmlzaGVkKSAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS51cGdyYWRl
bmVlZGVkRXZlbnQpCi0gICAgICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnVuY2F1
Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQotewotICAgIGlmIChtX3RyYW5zYWN0aW9uICYm
ICFtX3JlcXVlc3RBYm9ydGVkKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKERP
TUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpLCAiVW5jYXVnaHQgZXhjZXB0aW9uIGluIGV2ZW50
IGhhbmRsZXIuIik7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENFUFRJ
T04pOwotICAgIH0KLX0KLQotdm9pZCBJREJSZXF1ZXN0Ojp0cmFuc2FjdGlvbkRpZEZpbmlzaEFu
ZERpc3BhdGNoKCkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgQVNTRVJUKG1f
dHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKTsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRl
ID09IERPTkUpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIG1f
dHJhbnNhY3Rpb24gPSBudWxscHRyOwotICAgIG1fcmVhZHlTdGF0ZSA9IFBFTkRJTkc7Ci19Ci0K
LXZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQot
ewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0g
RE9ORSk7Ci0KLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVh
ZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCwgIldoZW4g
cXVldWVpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSB3YXMgJWQiLCBldmVudC0+dHlwZSgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fcmVhZHlTdGF0ZSk7Ci0KLSAgICBldmVudC0+c2V0VGFy
Z2V0KHRoaXMpOwotCi0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudChldmVudC5nZXQoKSkpCi0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMu
YXBwZW5kKGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAppbmRleCAwZWE3ZTJmLi40NGZiOWUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCkBAIC0xLDI5ICsx
LDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBJREJSZXF1ZXN0X2gKQEAgLTM5LDEwICszNiw3IEBACiAjaW5jbHVk
ZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAi
SURCQW55LmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29y
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VDYWxsYmFja3MuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTEsMTggKzQ1LDE1IEBAIGNsYXNzIElEQlRyYW5zYWN0aW9uOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFNj
cmlwdFdyYXBwYWJsZSwgcHVibGljIElEQkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgSURCUmVxdWVzdCA6
IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRh
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlJl
cXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwg
SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2aXJ0
dWFsIH5JREJSZXF1ZXN0KCk7CisgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpIHsgfQogCi0gICAg
UGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdChFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgdW5z
aWduZWQgc2hvcnQgZXJyb3JDb2RlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBQYXNzUmVm
UHRyPERPTUVycm9yPiBlcnJvcihFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxJREJBbnk+IHNvdXJjZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBwcmV2ZW50UHJvcGFnYXRpb24oKSB7IG1f
cHJldmVudFByb3BhZ2F0aW9uID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJB
bnk+IHJlc3VsdChFeGNlcHRpb25Db2RlJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgZXJyb3JDb2RlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJvcihFeGNlcHRpb25Db2RlJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgPSAw
OwogCiAgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCiAgICAgZW51bSBSZWFkeVN0YXRlIHsKQEAg
LTcxLDk2ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEVhcmx5RGVhdGggPSAzCiAgICAgfTsK
IAotICAgIGNvbnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBtYXJr
RWFybHlEZWF0aCgpOwotICAgIHZvaWQgc2V0Q3Vyc29yRGV0YWlscyhJbmRleGVkREI6OkN1cnNv
clR5cGUsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2b2lkIHNldFBlbmRpbmdD
dXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2b2lkIGZpbmlzaEN1cnNvcigpOwot
ICAgIHZvaWQgYWJvcnQoKTsKLQotICAgIC8vIElEQkNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9p
ZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5
Pikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0IElEQktleVBhdGgmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGludDY0X3QpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFdmVudFRh
cmdldAotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBB
Y3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkgb3ZlcnJpZGUgZmluYWw7Ci0K
LSAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRy
YW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0Y2goKTsKLQotICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCQ2FsbGJhY2tzPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6
ZGVyZWY7Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgeyBy
ZXR1cm4gbV90YXNrVHlwZTsgfQotCi0gICAgRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUo
KSB7IHJldHVybiAmbV9yZXF1ZXN0U3RhdGU7IH0KLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdCBB
UEkuCi0gICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVk
OgotICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
QW55PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9u
Kik7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRFbnF1ZXVlRXZlbnQoKSBjb25zdDsKLSAgICB2b2lkIG9uU3VjY2Vzc0lu
dGVybmFsKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7Ci0gICAgdm9pZCBvblN1
Y2Nlc3NJbnRlcm5hbChjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwotCi0gICAgUmVm
UHRyPElEQkFueT4gbV9yZXN1bHQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9lcnJvckNvZGU7Ci0g
ICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotICAgIFJlZlB0cjxET01FcnJvcj4gbV9lcnJvcjsK
LSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBt
X3RyYW5zYWN0aW9uOwotICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGJvb2wgbV9y
ZXF1ZXN0QWJvcnRlZDsgLy8gTWF5IGJlIGFib3J0ZWQgYnkgdHJhbnNhY3Rpb24gdGhlbiByZWNl
aXZlIGFzeW5jIG9uc3VjY2VzczsgaWdub3JlIHZzLiBhc3NlcnQuCi0KLXByaXZhdGU6Ci0gICAg
Ly8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLSAgICBj
b25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFdmVu
dFRhcmdldCBBUEkuCi0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUg
ZmluYWwgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3Zl
cnJpZGUgZmluYWwgeyBkZXJlZigpOyB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yPiBnZXRSZXN1
bHRDdXJzb3IoKTsKLSAgICB2b2lkIHNldFJlc3VsdEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNv
cj4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7Ci0KLSAgICBSZWZQdHI8SURCQW55PiBtX3Nv
dXJjZTsKLSAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7
Ci0KLSAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OwotICAgIFZlY3RvcjxSZWZQdHI8RXZl
bnQ+PiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQg
dHlwZSB3aWxsIGJlIGEgY3Vyc29yLgotICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNv
clR5cGU7Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9jdXJzb3JEaXJlY3Rpb247
Ci0gICAgYm9vbCBtX2N1cnNvckZpbmlzaGVkOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fcGVu
ZGluZ0N1cnNvcjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnNvcktleTsKLSAgICBSZWZQdHI8
SURCS2V5PiBtX2N1cnNvclByaW1hcnlLZXk7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
bV9jdXJzb3JWYWx1ZTsKLSAgICBib29sIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudDsKLSAg
ICBib29sIG1fcHJldmVudFByb3BhZ2F0aW9uOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlIG1fcmVx
dWVzdFN0YXRlOworICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKLSNlbmRpZiAvLyBJREJSZXF1ZXN0X2gKKyNlbmRpZiAvLyBMZWdhY3lSZXF1ZXN0
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwK
aW5kZXggZWY2ZTJiNi4uM2RiZGY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5pZGwKQEAgLTMzLDcgKzMzLDggQEAKICAgICBBY3RpdmVET01P
YmplY3QsCiAgICAgRXZlbnRUYXJnZXQsCiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAg
SlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0CisgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAor
ICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCA6IEV2ZW50
VGFyZ2V0IHsKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUg
SURCQW55IHJlc3VsdDsKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgRE9NRXJyb3IgZXJyb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNmVjMjlmYS4uNTE3MDc3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNw
cApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CkBAIC0yOCwzNCArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0j
aW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkV2ZW50
RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90IGlkLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGUgbW9kZSwgSURCRGF0YWJhc2UqIGRiKQotewotICAgIElEQk9wZW5EQlJlcXVlc3Qq
IG9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb24oYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBpZCwgb2JqZWN0U3Rv
cmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSkp
KTsKLSAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHRyYW5z
YWN0aW9uOwotfQotCi1SZWY8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50NjRfdCBpZCwgSURCRGF0YWJhc2Uq
IGRiLCBJREJPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0LCBjb25zdCBJREJEYXRhYmFzZU1l
dGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQorSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBBY3RpdmVET01PYmplY3Qo
Y29udGV4dCkKIHsKLSAgICBSZWY8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVm
KCpuZXcgSURCVHJhbnNhY3Rpb24oY29udGV4dCwgaWQsIFZlY3RvcjxTdHJpbmc+KCksIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlLCBkYiwgb3BlbkRCUmVxdWVzdCwg
cHJldmlvdXNNZXRhZGF0YSkpKTsKLSAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7
Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIElEQlRy
YW5zYWN0aW9uOjptb2RlUmVhZE9ubHkoKQpAQCAtODgsMjQ5ICs2Nyw2IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkV3JpdGVMZWdhY3koKQogICAgIHJldHVy
biByZWFkd3JpdGU7CiB9CiAKLQotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGludDY0X3QgaWQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvYmplY3RTdG9yZU5hbWVzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlLCBJ
REJEYXRhYmFzZSogZGIsIElEQk9wZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QsIGNvbnN0IElE
QkRhdGFiYXNlTWV0YWRhdGEmIHByZXZpb3VzTWV0YWRhdGEpCi0gICAgOiBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCkKLSAgICAsIG1faWQoaWQpCi0gICAgLCBtX2RhdGFiYXNlKGRiKQotICAgICwg
bV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlTmFtZXMpCi0gICAgLCBtX29wZW5EQlJlcXVl
c3Qob3BlbkRCUmVxdWVzdCkKLSAgICAsIG1fbW9kZShtb2RlKQotICAgICwgbV9zdGF0ZShBY3Rp
dmUpCi0gICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQotICAgICwgbV9jb250ZXh0U3Rv
cHBlZChmYWxzZSkKLSAgICAsIG1fcHJldmlvdXNNZXRhZGF0YShwcmV2aW91c01ldGFkYXRhKQot
ewotICAgIGlmIChtb2RlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hh
bmdlKSB7Ci0gICAgICAgIC8vIE5vdCBhY3RpdmUgdW50aWwgdGhlIGNhbGxiYWNrLgotICAgICAg
ICBtX3N0YXRlID0gSW5hY3RpdmU7Ci0gICAgfQotCi0gICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5j
ZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhBZG9w
dGlvblJlcXVpcmVtZW50KCk7Ci0gICAgaWYgKG1fc3RhdGUgPT0gQWN0aXZlKQotICAgICAgICBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFuc2FjdGlvbih0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNyZWF0ZWQodGhpcyk7Ci19Ci0KLUlEQlRyYW5zYWN0
aW9uOjp+SURCVHJhbnNhY3Rpb24oKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVk
IHx8IG1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVChtX3JlcXVlc3RMaXN0LmlzRW1wdHko
KSB8fCBtX2NvbnRleHRTdG9wcGVkKTsKLX0KLQotY29uc3QgU3RyaW5nJiBJREJUcmFuc2FjdGlv
bjo6bW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1vZGVUb1N0cmluZyhtX21vZGUpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjpzZXRFcnJvcihQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJv
ciwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0g
RmluaXNoZWQpOwotICAgIEFTU0VSVChlcnJvcik7Ci0KLSAgICAvLyBUaGUgZmlyc3QgZXJyb3Ig
dG8gYmUgc2V0IGlzIHRoZSB0cnVlIGNhdXNlIG9mIHRoZQotICAgIC8vIHRyYW5zYWN0aW9uIGFi
b3J0LgotICAgIGlmICghbV9lcnJvcikgewotICAgICAgICBtX2Vycm9yID0gZXJyb3I7Ci0gICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlOwotICAgIH0KLX0KLQotUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNo
ZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIElEQk9iamVjdFN0b3JlTWFwOjpp
dGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0g
bV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQotICAg
IGlmICghaXNWZXJzaW9uQ2hhbmdlKCkgJiYgIW1fb2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhu
YW1lKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9y
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQg
PSBtX2RhdGFiYXNlLT5maW5kT2JqZWN0U3RvcmVJZChuYW1lKTsKLSAgICBpZiAob2JqZWN0U3Rv
cmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNT
RVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEgPSBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpOwot
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGUobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKSwgdGhpcyk7
Ci0gICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICByZXR1cm4g
b2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpvYmplY3RT
dG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBwcnBPYmplY3RTdG9yZSkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7Ci0g
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IHBycE9iamVjdFN0b3JlOwot
ICAgIG1fb2JqZWN0U3RvcmVNYXAuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICBpZiAoaXNW
ZXJzaW9uQ2hhbmdlKCkpCi0gICAgICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLnNldChvYmpl
Y3RTdG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VS
VChtX3N0YXRlICE9IEZpbmlzaGVkKTsKLSAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwot
ICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmlu
ZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkgewotICAgICAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gaXQtPnZhbHVlOwotICAgICAg
ICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShuYW1lKTsKLSAgICAgICAgb2JqZWN0U3RvcmUtPm1h
cmtEZWxldGVkKCk7Ci0gICAgICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLnNldChvYmplY3RT
dG9yZSwgb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkpOwotICAgICAgICBtX2RlbGV0ZWRPYmplY3RT
dG9yZXMuYWRkKG9iamVjdFN0b3JlKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246
OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5z
YWN0aW9uOjpzZXRBY3RpdmUoJXMpIGZvciB0cmFuc2FjdGlvbiBpZCAlbGxpIiwgYWN0aXZlID8g
InRydWUiIDogImZhbHNlIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSk7Ci0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVkLCAiQSBmaW5pc2hlZCB0cmFuc2Fj
dGlvbiB0cmllZCB0byBzZXRBY3RpdmUoJXMpIiwgYWN0aXZlID8gInRydWUiIDogImZhbHNlIik7
Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKGFjdGl2ZSAhPSAobV9zdGF0ZSA9PSBBY3RpdmUpKTsKLSAgICBtX3N0YXRlID0gYWN0aXZl
ID8gQWN0aXZlIDogSW5hY3RpdmU7Ci0KLSAgICBpZiAoIWFjdGl2ZSAmJiBtX3JlcXVlc3RMaXN0
LmlzRW1wdHkoKSkKLSAgICAgICAgYmFja2VuZERCKCktPmNvbW1pdChtX2lkKTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKG1f
c3RhdGUgPT0gRmluaXNoaW5nIHx8IG1fc3RhdGUgPT0gRmluaXNoZWQpIHsKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoaW5nOwotCi0gICAgd2hpbGUgKCFtX3Jl
cXVlc3RMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9ICptX3JlcXVlc3RMaXN0LmJlZ2luKCk7Ci0gICAgICAgIG1fcmVxdWVzdExpc3QucmVtb3Zl
KHJlcXVlc3QpOwotICAgICAgICByZXF1ZXN0LT5hYm9ydCgpOwotICAgIH0KLQotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4gc2VsZlJlZiA9IHRoaXM7Ci0gICAgYmFja2VuZERCKCktPmFib3J0
KG1faWQpOwotfQotCi1JREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyOjpPcGVuQ3Vy
c29yTm90aWZpZXIoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24sIElEQkN1
cnNvciogY3Vyc29yKQotICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbiksCi0gICAgICBt
X2N1cnNvcihjdXJzb3IpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29y
KG1fY3Vyc29yKTsKLX0KLQotSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6fk9w
ZW5DdXJzb3JOb3RpZmllcigpCi17Ci0gICAgaWYgKG1fY3Vyc29yKQotICAgICAgICBtX3RyYW5z
YWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcihtX2N1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6Y3Vyc29yRmluaXNoZWQoKQotewotICAgIGlm
IChtX2N1cnNvcikgewotICAgICAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNv
cihtX2N1cnNvcik7Ci0gICAgICAgIG1fY3Vyc29yID0gbnVsbHB0cjsKLSAgICAgICAgbV90cmFu
c2FjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdp
c3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5h
ZGQoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29y
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCi17Ci0gICAg
SGFzaFNldDxJREJDdXJzb3IqPiBjdXJzb3JzOwotICAgIGN1cnNvcnMuc3dhcChtX29wZW5DdXJz
b3JzKTsKLSAgICBmb3IgKGF1dG8mIGN1cnNvciA6IGN1cnNvcnMpCi0gICAgICAgIGN1cnNvci0+
Y2xvc2UoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJSZXF1ZXN0KElEQlJl
cXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKHJlcXVlc3QpOwotICAgIEFTU0VSVChtX3N0
YXRlID09IEFjdGl2ZSk7Ci0gICAgbV9yZXF1ZXN0TGlzdC5hZGQocmVxdWVzdCk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVlc3QqIHJlcXVlc3Qp
Ci17Ci0gICAgQVNTRVJUKHJlcXVlc3QpOwotICAgIC8vIElmIHdlIGFib3J0ZWQgdGhlIHJlcXVl
c3QsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZC4KLSAgICBtX3JlcXVlc3RMaXN0
LnJlbW92ZShyZXF1ZXN0KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydChQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCVHJhbnNhY3Rpb246Om9uQWJvcnQiKTsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gZXJyb3IgPSBwcnBFcnJvcjsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7Ci0K
LSAgICBpZiAobV9zdGF0ZSAhPSBGaW5pc2hpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVycm9yLmdl
dCgpKTsKLSAgICAgICAgc2V0RXJyb3IoRE9NRXJyb3I6OmNyZWF0ZShlcnJvci0+bmFtZSgpKSwg
ZXJyb3ItPm1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgLy8gQWJvcnQgd2FzIG5vdCB0cmlnZ2VyZWQg
YnkgZnJvbnQtZW5kLCBzbyBvdXRzdGFuZGluZyByZXF1ZXN0cyBtdXN0Ci0gICAgICAgIC8vIGJl
IGFib3J0ZWQgbm93LgotICAgICAgICB3aGlsZSAoIW1fcmVxdWVzdExpc3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9ICptX3JlcXVlc3RMaXN0
LmJlZ2luKCk7Ci0gICAgICAgICAgICBtX3JlcXVlc3RMaXN0LnJlbW92ZShyZXF1ZXN0KTsKLSAg
ICAgICAgICAgIHJlcXVlc3QtPmFib3J0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdGF0ZSA9
IEZpbmlzaGluZzsKLSAgICB9Ci0KLSAgICBpZiAoaXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwKQotICAg
ICAgICAgICAgb2JqZWN0U3RvcmUua2V5LT5zZXRNZXRhZGF0YShvYmplY3RTdG9yZS52YWx1ZSk7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNldE1ldGFkYXRhKG1fcHJldmlvdXNNZXRhZGF0YSk7Ci0g
ICAgICAgIG1fZGF0YWJhc2UtPmNsb3NlKCk7Ci0gICAgfQotICAgIG1fb2JqZWN0U3RvcmVDbGVh
bnVwTWFwLmNsZWFyKCk7Ci0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAgLy8gRW5xdWV1
ZSBldmVudHMgYmVmb3JlIG5vdGlmeWluZyBkYXRhYmFzZSwgYXMgZGF0YWJhc2UgbWF5IGNsb3Nl
IHdoaWNoIGVucXVldWVzIG1vcmUgZXZlbnRzIGFuZCBvcmRlciBtYXR0ZXJzLgotICAgIGVucXVl
dWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxz
ZSkpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUiKTsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBGaW5p
c2hlZCk7Ci0gICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKLSAgICBtX29iamVjdFN0b3JlQ2xlYW51
cE1hcC5jbGVhcigpOwotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIC8vIEVucXVldWUg
ZXZlbnRzIGJlZm9yZSBub3RpZnlpbmcgZGF0YWJhc2UsIGFzIGRhdGFiYXNlIG1heSBjbG9zZSB3
aGljaCBlbnF1ZXVlcyBtb3JlIGV2ZW50cyBhbmQgb3JkZXIgbWF0dGVycy4KLSAgICBlbnF1ZXVl
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZh
bHNlKSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLX0KLQot
Ym9vbCBJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25n
IGFzIGFueW9uZSBoYXMgYSBvciBjYW4KLSAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVz
IG9yIGFueSBjaGlsZCByZXF1ZXN0IG9iamVjdCBhbmQgYW55IG9mIHRob3NlIGhhdmUKLSAgICAv
LyAgICAgICAgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlzICBpbiBvcmRlciB0byBoYW5kbGUgdXNl
ciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5LgotICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rp
dml0eSAmJiAhbV9jb250ZXh0U3RvcHBlZDsKLX0KLQogSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUgSURCVHJhbnNhY3Rpb246OnN0cmluZ1RvTW9kZShjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtb2RlU3RyaW5nLmlzTnVsbCgpCkBAIC0z
NjAsNzQgKzk2LDYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVRv
U3RyaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUKICAgICByZXR1cm4gSURCVHJh
bnNhY3Rpb246Om1vZGVSZWFkT25seSgpOwogfQogCi1ib29sIElEQlRyYW5zYWN0aW9uOjpkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKLSAgICBBU1NFUlQobV9zdGF0ZSAh
PSBGaW5pc2hlZCk7Ci0gICAgQVNTRVJUKG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgp
ID09IHRoaXMpOwotICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKLQotICAgIC8vIEJyZWFrIHJlZmVy
ZW5jZSBjeWNsZXMuCi0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVN
YXApCi0gICAgICAgIG9iamVjdFN0b3JlLnZhbHVlLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7Ci0g
ICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOwotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUg
OiBtX2RlbGV0ZWRPYmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVjdFN0b3JlLT50cmFuc2FjdGlv
bkZpbmlzaGVkKCk7Ci0gICAgbV9kZWxldGVkT2JqZWN0U3RvcmVzLmNsZWFyKCk7Ci0KLSAgICBW
ZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVuZCh0
aGlzKTsKLSAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKLQotICAgIC8vIEZJWE1FOiBXaGVuIHdl
IGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5IG5lZWQg
dG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb21w
bGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwot
ICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50
LmdldCgpLCB0YXJnZXRzKTsKLSAgICAvLyBGSVhNRTogVHJ5IHRvIGNvbnN0cnVjdCBhIHRlc3Qg
d2hlcmUgfHRoaXN8IG91dGxpdmVzIG9wZW5EQlJlcXVlc3QgYW5kIHdlCi0gICAgLy8gZ2V0IGEg
Y3Jhc2guCi0gICAgaWYgKG1fb3BlbkRCUmVxdWVzdCkgewotICAgICAgICBBU1NFUlQoaXNWZXJz
aW9uQ2hhbmdlKCkpOwotICAgICAgICBtX29wZW5EQlJlcXVlc3QtPnRyYW5zYWN0aW9uRGlkRmlu
aXNoQW5kRGlzcGF0Y2goKTsKLSAgICB9Ci0gICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxz
ZTsKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246OmNh
blN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUZWNobmljYWxs
eSB3ZSBjYW4gc3VzcGVuZCBiZWZvcmUgdGhlIGZpcnN0IHJlcXVlc3QgaXMgc2NoZWR1bGUKLSAg
ICAvLyAgICAgICAgYW5kIGFmdGVyIHRoZSBjb21wbGV0ZS9hYm9ydCBldmVudCBpcyBlbnF1ZXVl
ZC4KLSAgICByZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsKLX0KLQotdm9pZCBJREJUcmFuc2Fj
dGlvbjo6c3RvcCgpCi17Ci0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Ci0KLSAgICBhYm9y
dChJR05PUkVfRVhDRVBUSU9OKTsKLX0KLQotY29uc3QgY2hhciogSURCVHJhbnNhY3Rpb246OmFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURCVHJhbnNhY3Rpb24i
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVk
LCAiQSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5
cGUgJXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAo
bV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudCk7Ci19Ci0KLUlEQkRh
dGFiYXNlQmFja2VuZCogSURCVHJhbnNhY3Rpb246OmJhY2tlbmREQigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGRiKCktPmJhY2tlbmQoKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAppbmRleCA5ZjM0MzE0Li4wNTg4
ZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmgKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJREJU
cmFuc2FjdGlvbl9oCkBAIC0yOSwxMSArMjksNyBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NRXJyb3Iu
aCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKICNp
bmNsdWRlICJJbmRleGVkREIuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNDEsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIERPTUVycm9yOwogY2xhc3MgSURCQ3Vyc29yOwogY2xhc3MgSURCRGF0YWJh
c2U7CiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7CkBAIC00OSwxMSArNDYsOSBAQCBjbGFzcyBJ
REJPYmplY3RTdG9yZTsKIGNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CiBzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTsKIAotY2xhc3MgSURCVHJhbnNhY3Rpb24gZmluYWwgOiBwdWJsaWMgU2Ny
aXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbj4sIHB1YmxpYyBF
dmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNz
IElEQlRyYW5zYWN0aW9uIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50
ZWQ8SURCVHJhbnNhY3Rpb24+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVi
bGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJUcmFuc2Fj
dGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUs
IElEQkRhdGFiYXNlKik7Ci0gICAgc3RhdGljIFJlZjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJl
cXVlc3QqLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKTsKLSAg
ICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbigpOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9u
KCkgeyB9CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZE9ubHkoKTsK
ICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlUmVhZFdyaXRlKCk7CkBAIC02NCwx
MDMgKzU5LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUgc3RyaW5nVG9Nb2RlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0
aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlVG9TdHJpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUpOwogCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIoKSBjb25zdDsKLQot
ICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgYm9vbCBpc0FjdGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gQWN0aXZlOyB9Ci0gICAgYm9vbCBpc0Zpbmlz
aGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsgfQotICAgIGJvb2wgaXNS
ZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6UmVhZE9ubHk7IH0KLSAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZTsg
fQotCiAgICAgLy8gSW1wbGVtZW50IHRoZSBJREJUcmFuc2FjdGlvbiBJREwKLSAgICBjb25zdCBT
dHJpbmcmIG1vZGUoKSBjb25zdDsKLSAgICBJREJEYXRhYmFzZSogZGIoKSBjb25zdCB7IHJldHVy
biBtX2RhdGFiYXNlLmdldCgpOyB9Ci0gICAgUGFzc1JlZlB0cjxET01FcnJvcj4gZXJyb3IoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBhYm9ydChFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBjbGFzcyBPcGVuQ3Vyc29yTm90aWZpZXIg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgT3BlbkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb24+LCBJREJDdXJzb3IqKTsKLSAgICAgICAgfk9wZW5DdXJzb3JOb3RpZmllcigp
OwotICAgICAgICB2b2lkIGN1cnNvckZpbmlzaGVkKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgICAgICBJREJDdXJzb3Iq
IG1fY3Vyc29yOwotICAgIH07Ci0KLSAgICB2b2lkIHJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0
Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0Kik7Ci0gICAgdm9pZCBv
YmplY3RTdG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4pOwotICAgIHZvaWQgb2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgc2V0QWN0aXZlKGJvb2wpOwotICAgIHZvaWQgc2V0RXJyb3IoUGFzc1JlZlB0cjxET01FcnJv
cj4sIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLQotICAgIHZvaWQgb25BYm9ydChQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKLSAgICB2b2lkIG9uQ29tcGxldGUoKTsKLQotICAg
IC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIElEQlRyYW5zYWN0aW9uRXZl
bnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWN0
aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAgIHVzaW5nIEV2
ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAot
ICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJREJEYXRhYmFz
ZSogZGIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJv
cigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHVzaW5nIFJlZkNv
dW50ZWQ8SURCVHJhbnNhY3Rpb24+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFu
c2FjdGlvbj46OmRlcmVmOwogCi1wcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlLCBJREJEYXRhYmFzZSosIElEQk9wZW5EQlJlcXVlc3QqLCBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJik7Ci0KLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICB2b2lkIHJl
Z2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vy
c29yKElEQkN1cnNvciopOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICBib29s
IGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3Ao
KSBvdmVycmlkZTsKLSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICAvLyBFdmVudFRhcmdldCBBUEkuCi0gICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9Ci0KLSAgICBlbnVtIFN0YXRlIHsK
LSAgICAgICAgSW5hY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRlZCwgYnV0IG5vdCBpbiBhbiBl
dmVudCBjYWxsYmFjawotICAgICAgICBBY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRlZCwgaW4g
Y3JlYXRpb24gc2NvcGUgb3IgYW4gZXZlbnQgY2FsbGJhY2sKLSAgICAgICAgRmluaXNoaW5nLCAv
LyBJbiB0aGUgcHJvY2VzcyBvZiBhYm9ydGluZyBvciBjb21wbGV0aW5nLgotICAgICAgICBGaW5p
c2hlZCwgLy8gTm8gbW9yZSBldmVudHMgd2lsbCBmaXJlIGFuZCBubyBuZXcgcmVxdWVzdHMgbWF5
IGJlIGZpbGVkLgotICAgIH07Ci0KLSAgICBpbnQ2NF90IG1faWQ7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlPiBtX2RhdGFiYXNlOwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fb2JqZWN0U3Rv
cmVOYW1lczsKLSAgICBJREJPcGVuREJSZXF1ZXN0KiBtX29wZW5EQlJlcXVlc3Q7Ci0gICAgY29u
c3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOwotICAgIFN0YXRlIG1fc3RhdGU7
Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKLSAgICBib29sIG1fY29udGV4dFN0b3Bw
ZWQ7Ci0gICAgUmVmUHRyPERPTUVycm9yPiBtX2Vycm9yOwotICAgIFN0cmluZyBtX2Vycm9yTWVz
c2FnZTsKLQotICAgIExpc3RIYXNoU2V0PFJlZlB0cjxJREJSZXF1ZXN0Pj4gbV9yZXF1ZXN0TGlz
dDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4+
IElEQk9iamVjdFN0b3JlTWFwOwotICAgIElEQk9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVN
YXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPElEQk9iamVjdFN0b3JlPj4gSURCT2Jq
ZWN0U3RvcmVTZXQ7Ci0gICAgSURCT2JqZWN0U3RvcmVTZXQgbV9kZWxldGVkT2JqZWN0U3RvcmVz
OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE+IElEQk9iamVjdFN0b3JlTWV0YWRhdGFNYXA7Ci0gICAgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YU1hcCBtX29iamVjdFN0b3JlQ2xlYW51cE1hcDsKLSAgICBJREJEYXRhYmFz
ZU1ldGFkYXRhIG1fcHJldmlvdXNNZXRhZGF0YTsKLQotICAgIEhhc2hTZXQ8SURCQ3Vyc29yKj4g
bV9vcGVuQ3Vyc29yczsKK3Byb3RlY3RlZDoKKyAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKaW5kZXgg
ZWI2Mjg3MS4uY2M4OWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbApAQCAtMzEsNiArMzEsNyBAQAogICAgIEpTR2VuZXJh
dGVUb0pTT2JqZWN0LAogICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKICAgICBFbmFibGVk
QXRSdW50aW1lPUluZGV4ZWREQiwKKyAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJm
YWNlIElEQlRyYW5zYWN0aW9uIDogRXZlbnRUYXJnZXQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbW9kZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCRGF0YWJhc2UgZGI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzliYTg3
Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgi
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0j
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1SZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNy
ZWF0ZShJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQot
ewotICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0U3RvcmVIYXNoU2V0OwotICAgIGZvciAoYXV0
byYgaWQgOiBvYmplY3RTdG9yZUlkcykKLSAgICAgICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFkZChp
ZCk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmQoZGF0
YWJhc2VCYWNrZW5kLCBpZCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUpKTsK
LX0KLQotSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0
YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi0gICAgOiBtX29i
amVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQotICAgICwgbV9tb2RlKG1vZGUpCi0gICAgLCBt
X3N0YXRlKFVub3BlbmVkKQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9j
YWxsYmFja3MoY2FsbGJhY2tzKQotICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZUJhY2tlbmQpCi0g
ICAgLCBtX3Rhc2tUaW1lcigqdGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVy
RmlyZWQpCi0gICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCi0gICAgLCBtX2lkKGlk
KQotewotICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0
IGNhbiBiZSBhZG9wdGVkLgotICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotCi0gICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlv
bih0aGlzKTsKLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQodGhp
cyk7Ci0gICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLm9wZW5UcmFuc2FjdGlvbihp
ZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUsIFtiYWNrZW5kXShib29sIHN1Y2Nlc3MpIHsKLSAgICAg
ICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtiYWNrZW5k
XSgpIHsKLSAgICAgICAgICAgICAgICBiYWNrZW5kLT5hYm9ydCgpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgdGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGJlZm9yZSB0aGUgc2VydmVy
IGNvbm5lY3Rpb24gZmluaXNoZWQgb3BlbmluZyB0aGUgdHJhbnNhY3Rpb24uCi0gICAgICAgIGlm
IChiYWNrZW5kLT5tX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGJhY2tlbmQtPm1fc3RhdGUgPSBVbnVzZWQ7Ci0gICAgICAgIGlmIChiYWNrZW5kLT5o
YXNQZW5kaW5nVGFza3MoKSkKLSAgICAgICAgICAgIGJhY2tlbmQtPnN0YXJ0KCk7Ci0gICAgfSk7
Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZCgpCi17
Ci0gICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBnZXQg
ZGVsZXRlZCB1bmxlc3MgaXQncyB1bnVzZWQsIGNvbXBsZXRlLCBvciBhYm9ydGVkLgotICAgIEFT
U0VSVChtX3N0YXRlID09IEZpbmlzaGVkIHx8IG1fc3RhdGUgPT0gVW51c2VkKTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6
OlRhc2tUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRy
PElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBhYm9ydFRhc2spCi17Ci0gICAgaWYgKG1fc3RhdGUg
PT0gRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0eXBlID09IElEQkRhdGFi
YXNlQmFja2VuZDo6Tm9ybWFsVGFzaykKLSAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2sp
OwotICAgIGVsc2UKLSAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsK
LQotICAgIGlmIChhYm9ydFRhc2spCi0gICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChh
Ym9ydFRhc2spOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gVW5vcGVuZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKLSAgICAgICAgc3RhcnQoKTsKLSAgICBl
bHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmFib3J0KCkKLXsKLSAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yICh1
bmtub3duIGNhdXNlKSIpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIGlmIChlcnJvcikKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmFib3J0IC0gKCVzKSAlcyIsIGVycm9yLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZXJy
b3ItPm1lc3NhZ2UoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydCAobm8gZXJyb3IpIik7Ci0jZW5k
aWYKLQotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7Ci0KLSAgICAvLyBUaGUgbGFz
dCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1p
bmcgdGhlCi0gICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2Vs
ZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRp
bmcgdGhpcyBtZXRob2QuCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0gICAgbV90YXNrVGltZXIuc3RvcCgp
OwotCi0gICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5l
Y3Rpb24oKS5yb2xsYmFja1RyYW5zYWN0aW9uU3luYyhtX2lkKTsKLQotICAgIC8vIFJ1biB0aGUg
YWJvcnQgdGFza3MsIGlmIGFueS4KLSAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gdGFzayhtX2Fi
b3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybSgpOwotICAg
IH0KLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBt
dXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgLy8gYXJlIGZpcmVk
LCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxv
dyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9y
ZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIG1fZGF0YWJh
c2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uU3luYyhtX2lkKTsKLQotICAg
IC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUg
dGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKLSAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY29t
cGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4KLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0
aW9uKHRoaXMpOwotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpLT5pc0FjdGl2ZSh0aGlzKSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCh0aGlzKTsKLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlID0gbV9k
YXRhYmFzZS5yZWxlYXNlKCk7Ci0KLSAgICBpZiAobV9jYWxsYmFja3MpCi0gICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkFib3J0KGlkKCksIGVycm9yKTsKLQotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlv
bkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmlzVGFza1F1ZXVlRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByZWVtcHRp
dmVUYXNrUXVldWUuaXNFbXB0eSgpICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsKLX0KLQotYm9v
bCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6Omhhc1BlbmRpbmdUYXNrcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHkoKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJD
dXJzb3JCYWNrZW5kKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElE
QkN1cnNvckJhY2tlbmQqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLnJlbW92ZShjdXJz
b3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6cnVuKCkKLXsKLSAgICAvLyBU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRoaXMgdHJhbnNhY3Rpb24uIFNjaGVk
dWxlIGEgdGltZXIKLSAgICAvLyB0byBwcm9jZXNzIHRoZSBmaXJzdCB0YXNrLgotICAgIEFTU0VS
VChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIEFT
U0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICBtX3Rhc2tUaW1lci5zdGFydE9u
ZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzdGFydCgpCi17Ci0g
ICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKLQotICAgIG1fc3RhdGUgPSBTdGFydFBlbmRp
bmc7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRy
YW5zYWN0aW9uKHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlz
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCgpCi17Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCB0cmFuc2FjdGlvbiAl
bGxpIGluIHN0YXRlICV1Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSwgbV9zdGF0ZSk7
Ci0KLSAgICAvLyBJbiBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1
ZXN0ZWQgYSBjb21taXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5Ci0gICAgLy8gYmVlbiBpbml0
aWF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgotICAgIGlmIChtX3N0YXRlID09
IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbm9w
ZW5lZCB8fCBtX3N0YXRlID09IFVudXNlZCB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIG1f
Y29tbWl0UGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBGcm9udC1lbmQgaGFzIHJlcXVlc3RlZCBh
IGNvbW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNrcyBsaWtlIGNyZWF0ZUluZGV4IHdoaWNoCi0g
ICAgLy8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25vdXMgYnkgdGhlIGZyb250LWVuZCBidXQgYXJl
IHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KLSAgICBpZiAoaGFzUGVuZGluZ1Rhc2tzKCkpIHsK
LSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCAt
IE5vdCBjb21taXR0aW5nIG5vdywgdHJhbnNhY3Rpb24gc3RpbGwgaGFzIHBlbmRpbmcgdGFza3Mg
KFRyYW5zYWN0aW9uICVsbGkpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBv
YmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gY29tbWl0
IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAg
b3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQodGhpcyk7Ci0KLSAgICBib29s
IHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gVW5vcGVuZWQ7Ci0gICAg
bV9zdGF0ZSA9IEZpbmlzaGVkOwotCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQ7Ci0KLSAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24obV9pZCwg
W2JhY2tlbmQsIHRoaXMsIGNvbW1pdHRlZCwgdW51c2VkXShib29sIHN1Y2Nlc3MpIG11dGFibGUg
ewotICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGNvbW1pdFRyYW5zYWN0aW9uIHJlcXVlc3QgYWJv
cnRpbmcgZHVyaW5nIG9yIGFmdGVyIHN5bmNocm9ub3VzIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
YWJvcnQoKSBjYWxsLgotICAgICAgICAvLyBUaGlzIGNhbiBlYXNpbHkgaGFwcGVuIGlmIHRoZSBw
YWdlIGlzIG5hdmlnYXRlZCBiZWZvcmUgYWxsIHRyYW5zYWN0aW9ucyBmaW5pc2guCi0gICAgICAg
IC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIGZ1cnRoZXIgY2xlYW51cCBhbmQgZG9uJ3QgbmVl
ZCB0byBtYWtlIGFueSBjYWxsYmFja3MuCi0gICAgICAgIGlmICghbV9kYXRhYmFzZSkgewotICAg
ICAgICAgICAgQVNTRVJUKCFzdWNjZXNzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNvbW1pdHRlZCB8PSBzdWNjZXNzOwotCi0gICAgICAgIC8vIEJhY2tpbmcg
c3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9y
ZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBj
YWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3Rv
cmUKLSAgICAgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGlj
YWwuCi0gICAgICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgICAgICBtX2RhdGFiYXNlLT5z
ZXJ2ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7Ci0KLSAg
ICAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJl
Zm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcwotICAgICAgICAvLyB0aGUgdHJhbnNh
Y3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0
aW9ucy4KLSAgICAgICAgaWYgKCF1bnVzZWQpCi0gICAgICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAgICAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwotCi0gICAgICAgIGlmIChj
b21taXR0ZWQpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkpOwot
ICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmly
ZWQodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25B
Ym9ydChpZCgpLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikp
OwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0Rmly
ZWQodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKLSAg
ICB9KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKCkK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVy
RmlyZWQiKTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgewotICAgICAgICBt
X2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuYmVnaW5UcmFuc2FjdGlvbihtX2lkLCBbXSgp
IHsgfSk7Ci0gICAgICAgIG1fc3RhdGUgPSBSdW5uaW5nOwotICAgIH0KLQotICAgIC8vIFRoZSBs
YXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9y
bWluZyBhIHRhc2suCi0gICAgLy8gVGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBv
YmplY3QgYWxpdmUgc28gdGhhdCB0YXNrcyBjYW4KLSAgICAvLyBzdWNjZXNzZnVsbHkgbWFrZSB0
aGVpciBjb21wbGV0aW9uIGNhbGxiYWNrcy4KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kPiBzZWxmKHRoaXMpOwotCi0gICAgVGFza1F1ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsK
LSAgICBpZiAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQpIHsK
LSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgICAgIFJlZlB0cjxJREJP
cGVyYXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtlRmlyc3QoKSk7Ci0gICAgICAgIHRhc2stPnBl
cmZvcm0oW3NlbGYsIHRoaXMsIHRhc2tdKCkgewotICAgICAgICAgICAgbV90YXNrVGltZXIuc3Rh
cnRPbmVTaG90KDApOwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdlIGhhdmVuJ3QgYWxyZWFkeSBj
b21taXR0ZWQvYWJvcnRlZCwKLSAgICAvLyBhbmQgdGhlIGZyb250LWVuZCByZXF1ZXN0ZWQgYSBj
b21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgotICAgIGlmICghaGFzUGVuZGluZ1Rhc2tz
KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIGNv
bW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y2xvc2VPcGVuQ3Vyc29y
cygpCi17Ci0gICAgZm9yIChhdXRvJiBjdXJzb3IgOiBtX29wZW5DdXJzb3JzKQotICAgICAgICBj
dXJzb3ItPmNsb3NlKCk7Ci0gICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotewotICAg
IHNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlTWV0YWRhdGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotewotICAgIHNjaGVkdWxl
VGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jl
TWV0YWRhdGEpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
b2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
IG1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFj
a3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdl
QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52ZXJz
aW9uKSwgbWV0YWRhdGEudmVyc2lvbikpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNr
KENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhN
ZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhLmlkKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLXsKLSAgICBzY2hlZHVsZVRh
c2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRl
eE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVj
dFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFk
YXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhH
ZXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUg
cHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
LXsKLSAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3Rv
cmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5k
ZXhLZXlzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVNldElu
ZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKLXsKLSAgICBzY2hlZHVsZVRh
c2soSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0aXZlVGFzaywgU2V0SW5kZXhlc1JlYWR5T3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXhDb3VudCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVsZVRhc2soT3Bl
bkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ291bnRPcGVyYXRpb24oaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAg
IHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVsZVRhc2soRGVsZXRlUmFuZ2VPcGVyYXRp
b246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVP
cGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Ci19Ci0KLX07Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYjllZjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5k
X2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kX2gKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSURCQ3Vyc29yQmFja2VuZDsKLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotCi1jbGFz
cyBJREJUcmFuc2FjdGlvbkJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gY3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKLSAgICB+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kKCk7Ci0KLSAgICB2b2lkIGNvbW1pdCgpOwotICAgIHZvaWQgYWJvcnQoKTsK
LSAgICB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotCi0gICAgdm9p
ZCBydW4oKTsKLSAgICBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgIHsg
cmV0dXJuIG1fbW9kZTsgfQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29u
c3QgIHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KLQotICAgIHZvaWQgc2NoZWR1bGVUYXNr
KFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3Vz
T3BlcmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHNjaGVkdWxlVGFzayhJREJEYXRhYmFz
ZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KLSAgICB2b2lkIHNjaGVk
dWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQk9wZXJh
dGlvbj4sIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGFib3J0VGFzayA9IG51
bGxwdHIpOwotCi0gICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCop
OwotICAgIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwotCi0g
ICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
Kys7IH0KLSAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5kaW5n
UHJlZW1wdGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAw
KTsgfQotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJldHVy
biAqbV9kYXRhYmFzZTsgfQotCi0gICAgdm9pZCBzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKLSAgICB2b2lkIHNjaGVkdWxl
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYp
OwotICAgIHZvaWQgc2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVz
dGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpOwotICAgIHZvaWQgc2No
ZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmKTsKLSAgICB2b2lkIHNjaGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRpb24o
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7Ci0gICAgdm9p
ZCBzY2hlZHVsZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAg
dm9pZCBzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIElEQkRh
dGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpOwotICAg
IHZvaWQgc2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQp
OwotICAgIHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHNjaGVk
dWxlQ291bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAg
IHZvaWQgc2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAg
IHZvaWQgc2NoZWR1bGVDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLQotICAgIGludDY0X3QgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
KElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUpOwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVub3Bl
bmVkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgY3JlYXRlZC4KLSAgICAg
ICAgVW51c2VkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGNyZWF0ZWQsIGJ1dCBubyB0
YXNrcyB5ZXQuCi0gICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBi
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KLSAgICAgICAgUnVubmlu
ZywgLy8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlz
aGVkLgotICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgot
ICAgIH07Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0KLSAgICBib29sIGlzVGFza1F1ZXVlRW1wdHko
KSBjb25zdDsKLSAgICBib29sIGhhc1BlbmRpbmdUYXNrcygpIGNvbnN0OwotCi0gICAgdm9pZCB0
YXNrVGltZXJGaXJlZCgpOwotICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAgY29u
c3QgSGFzaFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOwotICAgIGNvbnN0IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1fbW9kZTsKLQotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgYm9v
bCBtX2NvbW1pdFBlbmRpbmc7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBtX2RhdGFiYXNlOwotCi0g
ICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8SURCT3BlcmF0aW9uPj4gVGFza1F1ZXVlOwotICAgIFRh
c2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKLSAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVl
OwotICAgIERlcXVlPFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4+IG1fYWJvcnRUYXNr
UXVldWU7Ci0KLSAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhy
ZWFkcyBpbnN0ZWFkLgotICAgIFRpbWVyIG1fdGFza1RpbWVyOwotICAgIGludCBtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kKj4gbV9vcGVu
Q3Vyc29yczsKLQotICAgIGludDY0X3QgbV9pZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURC
VHJhbnNhY3Rpb25CYWNrZW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZjY4N2EuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3Bl
cmF0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVy
YXRpb25zLmgiCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUg
IklEQlJlY29yZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZGVmaW5lIFNUQU5EQVJEX0RBVEFCQVNF
X0VSUk9SX0NBTExCQUNLIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gb3BlcmF0aW9uQ2FsbGJhY2sgPSBcCi0gICAgW29wZXJhdGlvbiwgY29tcGxldGlv
bkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7IFwKLSAgICAg
ICAgaWYgKGVycm9yKSBcCi0gICAgICAgICAgICBvcGVyYXRpb24tPm1fdHJhbnNhY3Rpb24tPmFi
b3J0KGVycm9yKTsgXAotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsgXAotICAgIH07Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLQotICAgIFJl
ZlB0cjxDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIFNU
QU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rp
b24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Ci19Ci0KLXZvaWQgQ3JlYXRlSW5kZXhPcGVy
YXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7Ci0KLSAgICBS
ZWZQdHI8Q3JlYXRlSW5kZXhPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLSAgICBTVEFOREFS
RF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKLQotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmNyZWF0ZUluZGV4KCptX3RyYW5zYWN0aW9uLCAqdGhpcywg
b3BlcmF0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246
OnBlcmZvcm0oKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlSW5kZXhBYm9ydE9wZXJh
dGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlSW5kZXgobV9vYmpl
Y3RTdG9yZUlELCBtX2luZGV4SUQpOwotfQotCi12b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPERl
bGV0ZUluZGV4T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgU1RBTkRBUkRfREFUQUJB
U0VfRVJST1JfQ0FMTEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZWxldGVJbmRleCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlv
bkNhbGxiYWNrKTsKLX0KLQotdm9pZCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3Jt
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsK
LSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJRCwg
bV9pbmRleE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi12b2lk
IEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiR2V0T3BlcmF0aW9uIik7Ci0KLSAgICBS
ZWZQdHI8R2V0T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgU1RBTkRBUkRfREFUQUJB
U0VfRVJST1JfQ0FMTEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5nZXQoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBbdGhpcywgb3BlcmF0aW9u
LCBvcGVyYXRpb25DYWxsYmFja10oY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7Ci0KLSAgICAgICAgaWYgKGVycm9yKQotICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0LnZhbHVlQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5rZXlEYXRhLmlzTnVsbCkKLSAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcygpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhyZXN1bHQua2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQua2V5RGF0
YS5pc051bGwpCi0gICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MocmVz
dWx0LnZhbHVlQnVmZmVyLCByZXN1bHQua2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpLCByZXN1
bHQua2V5UGF0aCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKHJlc3VsdC52YWx1ZUJ1ZmZlci5nZXQoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBvcGVyYXRpb25DYWxsYmFjayhlcnJvci5yZWxl
YXNlKCkpOwotICAgIH0pOwotfQotCi12b2lkIFB1dE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiUHV0T3BlcmF0aW9uIik7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotICAgIEFTU0VSVChtX2luZGV4
SURzLnNpemUoKSA9PSBtX2luZGV4S2V5cy5zaXplKCkpOwotCi0gICAgbV90cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkucHV0KCptX3RyYW5zYWN0aW9uLCAqdGhpcywg
W3RoaXMsIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPiBwcnBFcnJvcikgewotICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IgPSBwcnBFcnJvcjsKLSAgICAgICAgaWYgKGtleSkgewotICAgICAg
ICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KGtleSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXJyb3IpOwotICAg
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICB9Ci0gICAgICAg
IGNvbXBsZXRpb25DYWxsYmFjaygpOwotICAgIH0pOwotfQotCi12b2lkIFNldEluZGV4ZXNSZWFk
eU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxi
YWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uIik7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhDb3VudDsgKytpKQotICAgICAg
ICBtX3RyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwotCi0gICAgY2Fs
bE9uTWFpblRocmVhZChjb21wbGV0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIE9wZW5DdXJzb3JP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKLQotICAg
IFJlZlB0cjxPcGVuQ3Vyc29yT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgYXV0byBj
YWxsYmFjayA9IFt0aGlzLCBvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oaW50NjRfdCBj
dXJzb3JJRCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlciwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgfSBlbHNlIGlmICgha2V5
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNvIG5vIGtleSwg
dGhlbiB0aGUgY3Vyc29yIGhhZCBubyByZWNvcmRzLgotICAgICAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihudWxscHRyKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yID0g
SURCQ3Vyc29yQmFja2VuZDo6Y3JlYXRlKGN1cnNvcklELCBtX2N1cnNvclR5cGUsIG1fdGFza1R5
cGUsICptX3RyYW5zYWN0aW9uLCBtX29iamVjdFN0b3JlSUQpOwotICAgICAgICAgICAgY3Vyc29y
LT51cGRhdGVDdXJzb3JEYXRhKGtleS5nZXQoKSwgcHJpbWFyeUtleS5nZXQoKSwgdmFsdWVCdWZm
ZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IucmVs
ZWFzZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOwotICAg
IH07Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5v
cGVuQ3Vyc29yKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgY2FsbGJhY2spOwotfQotCi12b2lkIENv
dW50T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJDb3VudE9wZXJhdGlvbiIpOwotCi0gICAg
UmVmUHRyPENvdW50T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgYXV0byBjYWxsYmFj
ayA9IFt0aGlzLCBvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oaW50NjRfdCBjb3VudCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgewotICAgICAgICAvLyBGSVhNRTogVGhlIExl
dmVsREIgcG9ydCBuZXZlciBoYWQgYW4gZXJyb3IgY29uZGl0aW9uIGZvciB0aGUgY291bnQgb3Bl
cmF0aW9uLgotICAgICAgICAvLyBXZSBwcm9iYWJseSBuZWVkIHRvIHN1cHBvcnQgYW4gZXJyb3Ig
Zm9yIHRoZSBjb3VudCBvcGVyYXRpb24sIGJyZWFraW5nIHRoZSBMZXZlbERCIHBvcnQuCi0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotCi0gICAgICAgIGNvbXBsZXRpb25D
YWxsYmFjaygpOwotICAgIH07Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5jb3VudCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIGNhbGxiYWNrKTsKLX0K
LQotdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlUmFu
Z2VPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxEZWxldGVSYW5nZU9wZXJhdGlvbj4gb3BlcmF0
aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0
aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsKLSAgICAg
ICAgaWYgKGVycm9yKQotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0KLSAg
ICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAgfTsKLQotICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZVJhbmdlKCptX3RyYW5zYWN0aW9u
LCAqdGhpcywgY2FsbGJhY2spOwotfQotCi12b2lkIENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb246
OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIkNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLQotICAgIFJl
ZlB0cjxDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0KLSAgICBh
dXRvIGNsZWFyQ2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2td
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsKLSAgICAgICAgUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7Ci0KLSAgICAgICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgICAg
ICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLQotICAgICAgICBjb21wbGV0
aW9uQ2FsbGJhY2soKTsKLSAgICB9OwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5z
ZXJ2ZXJDb25uZWN0aW9uKCkuY2xlYXJPYmplY3RTdG9yZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMs
IGNsZWFyQ2FsbGJhY2spOwotfQotCi12b2lkIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotCi0gICAgUmVm
UHRyPERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Ci0gICAgU1RB
TkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVPYmplY3RTdG9yZSgqbV90cmFuc2FjdGlv
biwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFu
Z2VPcGVyYXRpb24iKTsKLQotICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLm1ldGFkYXRhKCkudmVyc2lvbjsKLSAgICBpZiAob2xkVmVyc2lvbiA9PSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCi0gICAgICAgIG9sZFZlcnNpb24gPSAw
OwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlv
bj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1aW50NjRfdD4obV92
ZXJzaW9uKSA+IG9sZFZlcnNpb24pOwotCi0gICAgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiBvcGVyYXRpb25DYWxsYmFjayA9IFtvbGRWZXJzaW9uLCBv
cGVyYXRpb24sIHRoaXMsIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBwcnBFcnJvcikgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IgPSBwcnBFcnJvcjsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChl
cnJvcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuaGFzUGVuZGluZ1NlY29uZEhhbGZPcGVuKCkpOwotICAgICAgICAgICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXRDdXJyZW50VmVyc2lvbihtX3ZlcnNpb24pOwot
ICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXRQZW5kaW5nU2Vjb25kSGFs
Zk9wZW4oc3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nT3BlbkNhbGw+KCptX2NhbGxiYWNrcywg
Km1fZGF0YWJhc2VDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fdmVyc2lvbikpOwot
ICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCAmbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5tZXRhZGF0
YSgpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKLSAgICB9Owot
Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY2hhbmdl
RGF0YWJhc2VWZXJzaW9uKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2sp
OwotfQotCi12b2lkIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIp
OwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlT2JqZWN0U3RvcmUobV9vYmpl
Y3RTdG9yZUlEKTsKLX0KLQotdm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpw
ZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmFkZE9iamVjdFN0b3Jl
KG1fb2JqZWN0U3RvcmVNZXRhZGF0YSwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElk
KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNldEN1cnJlbnRW
ZXJzaW9uKG1fcHJldmlvdXNJbnRWZXJzaW9uKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRPcGVyYXRpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTA5Nzku
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaAot
I2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zX2gKLQotI2luY2x1ZGUgIklE
QkRhdGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCU2VydmVyQ29ubmVjdGlvbjsKLQot
Y2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0
YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdFN0b3JlTWV0YWRhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVj
dFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwotfTsKLQotY2xhc3MgRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBv
dmVycmlkZSBmaW5hbDsKLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9Ci0gICAgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0U3RvcmVNZXRhZGF0YTsgfQotCi1wcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgICAgIDogbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2Jq
ZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNh
bGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZlcnNpb25DaGFu
Z2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5n
ZXQoKTsgfQotICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsg
fQotICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
LSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9kYXRhYmFzZUNh
bGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBpbnQ2NF90IG1fdmVyc2lv
bjsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci19OwotCi1jbGFzcyBDcmVh
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0
aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBj
cmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFsOwotcHJpdmF0ZToKLSAg
ICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLSAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlk
KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3Ry
YW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotfTsKLQotY2xh
c3MgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91
c09wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJh
dGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlv
biwgb2JqZWN0U3RvcmUpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBvdmVy
cmlkZSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3Jl
TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0
b3JlTWV0YWRhdGE7Ci19OwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFu
Z2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJz
aW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgcHJl
dmlvdXNWZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oKSBvdmVycmlkZSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgVmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0
IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKLSAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fcHJldmlvdXNW
ZXJzaW9uKHByZXZpb3VzVmVyc2lvbikKLSAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihw
cmV2aW91c0ludFZlcnNpb24pCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9u
OwotICAgIGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247Ci19OwotCi1jbGFzcyBDcmVhdGVJ
bmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlSW5k
ZXhPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1
Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLSAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpZGJJbmRleE1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleE1ldGFk
YXRhOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCi0gICAg
ICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2lu
ZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVi
bGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElE
QlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKCkgb3ZlcnJpZGUgZmluYWw7Ci1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4
QWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi0gICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkK
LSAgICAgICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKLX07
Ci0KLWNsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQot
ICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4TWV0YWRhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleE9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2Jq
ZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2Fj
dGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBJREJJ
bmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIERlbGV0ZUluZGV4QWJv
cnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KCkgb3ZlcnJpZGUgZmluYWw7Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVj
dFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rp
b247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBHZXRPcGVyYXRpb24gOiBw
dWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkRh
dGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2V0T3BlcmF0aW9uKHRyYW5zYWN0
aW9uLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5
cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQot
ICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRDsgfQotICAgIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JU
eXBlOyB9Ci0gICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlS
YW5nZS5nZXQoKTsgfQotICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXV0b0luY3JlbWVudDsgfQotICAgIElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5UGF0aDsgfQotCi1wcml2YXRlOgotICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0
YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQot
ICAgICAgICAsIG1faW5kZXhJRChpbmRleElkKQotICAgICAgICAsIG1fa2V5UGF0aChtZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCi0gICAgICAgICwgbV9h
dXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0
b0luY3JlbWVudCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1f
Y3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2Jq
ZWN0U3RvcmVJZCkpOwotICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChv
YmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3Qg
bV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOwotICAgIGNvbnN0
IElEQktleVBhdGggbV9rZXlQYXRoOwotICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50Owot
ICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBjb25zdCBJbmRl
eGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9k
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGlu
ZGV4S2V5cykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIElEQkRhdGFi
YXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wdXRNb2RlOyB9
Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlOyB9Ci0gICAgSURCS2V5KiBrZXkoKSBjb25zdCB7IHJldHVy
biBtX2tleS5nZXQoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4SURzOyB9Ci0gICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhLZXlzOyB9Ci0gICAgU2hhcmVkQnVm
ZmVyKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLQotcHJpdmF0ZToK
LSAgICBQdXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2Vu
ZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQot
ICAgICAgICAsIG1fa2V5KGtleSkKLSAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKLSAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9pbmRleElEcyhpbmRleElk
cykKLSAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOwotICAgIGNvbnN0IFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1fdmFsdWU7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7Ci0g
ICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIG1fcHV0TW9kZTsKLSAgICBjb25z
dCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBjb25zdCBWZWN0b3I8aW50
NjRfdD4gbV9pbmRleElEczsKLSAgICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiBtX2luZGV4S2V5
czsKLX07Ci0KLWNsYXNzIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVy
YXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIGluZGV4Q291bnQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7
Ci1wcml2YXRlOgotICAgIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkKLSAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1faW5kZXhDb3VudChpbmRleENvdW50KQot
ICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5z
YWN0aW9uOwotICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7Ci19OwotCi1jbGFzcyBPcGVu
Q3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJy
aWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCB0cmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2FjdGlvbi0+aWQoKTsgfQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQotICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXhJRDsgfQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRp
cmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9Ci0gICAgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIGN1cnNvclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KLSAg
ICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV90YXNrVHlwZTsgfQotICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5UmFuZ2UuZ2V0KCk7IH0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJz
b3JEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQotCi1wcml2YXRlOgot
ICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24s
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRh
c2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9y
ZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCi0gICAgICAg
ICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24p
Ci0gICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0gICAgICAgICwgbV90YXNrVHlw
ZSh0YXNrVHlwZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0g
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2lu
ZGV4SUQ7Ci0gICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAg
ICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBjb25z
dCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGlj
IElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDb3VudE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlk
ZSBmaW5hbDsKLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJRDsgfQotICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXhJRDsgfQotICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UmFuZ2UuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBDb3VudE9wZXJhdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAg
LCBtX2luZGV4SUQoaW5kZXhJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAg
ICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKLSAgICBjb25z
dCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6
IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0g
ICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlE
OyB9Ci0gICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5n
ZS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJh
bmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25z
dCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+
IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Ci19OwotCi1jbGFzcyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJh
dGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0K
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2FjdGlvbi5nZXQoKTsgfQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQotCi1wcml2YXRlOgotICAgIENsZWFyT2JqZWN0
U3RvcmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9y
ZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCVHJh
bnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9uc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDY5ZTBhLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgot
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUlEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KQotewotfQotCi1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjp+SURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpCi17Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkQ3Jl
YXRlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgbV90
cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5z
YWN0aW9uKTsKLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb24pKSB7Ci0gICAgICAgIEFTU0VSVCghbV9zdGFydGVkVHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgICAgIG1fcXVldWVkVHJhbnNhY3Rpb25z
LnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0gICAgfSBlbHNlIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24pKQotICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMu
cmVtb3ZlKHRyYW5zYWN0aW9uKTsKLQotICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2Fj
dGlvbik7Ci0KLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotLy8gVmVyaWZpZXMgaW50ZXJuYWwgY29uc2lzdGllbmN5IHdoaWxlIHJldHVybmlu
ZyB3aGV0aGVyIGFueXRoaW5nIGlzIGZvdW5kLgotYm9vbCBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjppc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQotewotICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb24pKQotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgaWYgKG1fc3RhcnRl
ZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKLSAgICAgICAgQVNTRVJUKCFm
b3VuZCk7Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICB9Ci0gICAgQVNTRVJUKGZvdW5kID09
IG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgcmV0dXJuIGZvdW5k
OwotfQotI2VuZGlmCi0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1N0
YXJ0ZWRUcmFuc2FjdGlvbnMoKQotewotICAgIGlmIChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXJ0ZWRUcmFuc2FjdGlv
bnMuaXNFbXB0eSgpIHx8ICgqbV9zdGFydGVkVHJhbnNhY3Rpb25zLmJlZ2luKCkpLT5tb2RlKCkg
IT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgTGlz
dEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9x
dWV1ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXQgIT0gbV9xdWV1ZWRUcmFu
c2FjdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiA9ICppdDsKLSAgICAgICAgKytpdDsKLSAgICAgICAgaWYgKGNhblJ1blRyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKSkgewotICAgICAgICAgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMucmVtb3Zl
KHRyYW5zYWN0aW9uKTsKLSAgICAgICAgICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5hZGQodHJh
bnNhY3Rpb24pOwotICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnJ1bigpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNhblJ1blRyYW5zYWN0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1f
cXVldWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAgICBVTlVTRURf
UEFSQU0odHJhbnNhY3Rpb24pOwotICAgIHJldHVybiAhbV9zdGFydGVkVHJhbnNhY3Rpb25zLnNp
emUoKTsKLX0KLQotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDU1NDM4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAotI2RlZmluZSBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZDsKLQotLy8gVHJhbnNhY3Rpb25zIGFy
ZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KLWNsYXNzIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IgewotcHVibGljOgotICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0KLSAgICAv
LyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlzaC4KLSAgICB2
b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotICAgIHZv
aWQgZGlkT3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCop
OwotICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsK
LSAgICB2b2lkIGRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwot
Ci0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
Kik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2b2lkIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rp
b25zKCk7Ci0gICAgYm9vbCBjYW5SdW5UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQq
KTsKLQotICAgIC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQgd2F5IHRvIGtlZXAgcmVmZXJl
bmNlcyB0byBhbGwgdHJhbnNhY3Rpb25zLgotICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gPiBtX3RyYW5zYWN0aW9uczsKLSAg
ICAvLyBUcmFuc2FjdGlvbnMgaW4gZGlmZmVyZW50IHN0YXRlcyBhcmUgZ3JvdXBlZCBiZWxvdy4K
LSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBtX3F1ZXVlZFRyYW5zYWN0
aW9uczsKLSAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZCo+IG1fc3RhcnRlZFRyYW5z
YWN0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcAppbmRleCBkMTMzYzZkLi40ZDQ2NGNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAKQEAgLTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgpAQCAtMzAsMjIgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQodW5zaWduZWQgbG9u
ZyBsb25nIG9sZFZlcnNpb24sIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdWZXJzaW9uLCBjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UgLypj
YW5CdWJibGUqLywgZmFsc2UgLypjYW5jZWxhYmxlKi8pCi0gICAgLCBtX29sZFZlcnNpb24ob2xk
VmVyc2lvbikKLSAgICAsIG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uKQotewotfQotCi1JREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6On5JREJWZXJzaW9uQ2hhbmdlRXZlbnQoKQotewotfQotCi1FdmVudElu
dGVyZmFjZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKK0lE
QlZlcnNpb25DaGFuZ2VFdmVudDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKKyAgICA6IEV2ZW50KG5hbWUsIGZhbHNlIC8qY2FuQnViYmxlKi8sIGZhbHNl
IC8qY2FuY2VsYWJsZSovKQogewotICAgIHJldHVybiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaAppbmRleCBkYmFkNWNk
Li4xMjk5ZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaApAQCAtMSwyNiArMSwyNiBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaWZuZGVmIElEQlZlcnNpb25DaGFuZ2VFdmVudF9oCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJFdmVudC5oIgotI2lu
Y2x1ZGUgIkluZGV4ZWREQi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzgs
MjMgKzM3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCVmVyc2lvbkNoYW5n
ZUV2ZW50IDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlZlcnNp
b25DaGFuZ2VFdmVudD4gY3JlYXRlKHVuc2lnbmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uID0gMCwg
dW5zaWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb24gPSAwLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSA9IEF0b21pY1N0cmluZygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSURCVmVyc2lvbkNoYW5nZUV2ZW50KG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50
VHlwZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfklEQlZlcnNpb25DaGFuZ2VFdmVudCgpOwot
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgb2xkVmVyc2lvbigpIHsgcmV0dXJuIG1f
b2xkVmVyc2lvbjsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb24o
KSB7IHJldHVybiBtX25ld1ZlcnNpb247IH0KLQotICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2Ug
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlRXZl
bnQoKSB7IH0KIAotcHJpdmF0ZToKLSAgICBJREJWZXJzaW9uQ2hhbmdlRXZlbnQodW5zaWduZWQg
bG9uZyBsb25nIG9sZFZlcnNpb24sIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdWZXJzaW9uLCBjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CisgICAgdmlydHVhbCB1aW50NjRfdCBvbGRWZXJz
aW9uKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDY0X3QgbmV3VmVyc2lvbigpIGNvbnN0
ID0gMDsKIAotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX29sZFZlcnNpb247Ci0gICAgdW5zaWdu
ZWQgbG9uZyBsb25nIG1fbmV3VmVyc2lvbjsKK3Byb3RlY3RlZDoKKyAgICBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCQ2FsbGJhY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1NzJm
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJDYWxsYmFja3MuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkNhbGxiYWNrc19oCisjZGVm
aW5lIElEQkNhbGxiYWNrc19oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5j
bHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmQ7
CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK3N0cnVj
dCBJREJEYXRhYmFzZU1ldGFkYXRhOworCitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgUmVm
Q291bnRlZDxJREJDYWxsYmFja3M+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJDYWxsYmFj
a3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pID0gMDsKKyAgICAvLyBGcm9tIElEQkZhY3Rvcnkud2Via2l0R2V0RGF0YWJhc2VO
YW1lcygpCisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xp
c3Q+KSA9IDA7CisgICAgLy8gRnJvbSBJREJPYmplY3RTdG9yZS9JREJJbmRleC5vcGVuQ3Vyc29y
KCksIElEQkluZGV4Lm9wZW5LZXlDdXJzb3IoKQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPikgPSAwOworICAgIC8vIEZyb20gSURCT2JqZWN0
U3RvcmUuYWRkKCkvcHV0KCksIElEQkluZGV4LmdldEtleSgpCisgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4pID0gMDsKKyAgICAvLyBGcm9tIElEQk9iamVjdFN0
b3JlL0lEQkluZGV4LmdldCgpL2NvdW50KCksIGFuZCB2YXJpb3VzIG1ldGhvZHMgdGhhdCB5aWVs
ZCBudWxsL3VuZGVmaW5lZC4KKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPikgPSAwOworICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXgu
Z2V0KCkgKHdpdGgga2V5IGluamVjdGlvbikKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQ
YXRoJikgPSAwOworICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXguY291bnQoKQor
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoaW50NjRfdCB2YWx1ZSkgPSAwOworCisgICAgLy8g
RnJvbSBJREJGYWN0b3IuZGVsZXRlRGF0YWJhc2UoKSwgSURCT2JqZWN0U3RvcmUvSURCSW5kZXgu
Z2V0KCksIElEQk9iamVjdFN0b3JlLmRlbGV0ZSgpLCBJREJPYmplY3RTdG9yZS5jbGVhcigpCisg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcygpID0gMDsKKworICAgIC8vIEZyb20gSURCQ3Vyc29y
LmFkdmFuY2UoKS9jb250aW51ZSgpCisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4pID0gMDsKKworICAgIC8vIEZyb20gSURCRmFjdG9yeS5vcGVuKCkvZGVsZXRl
RGF0YWJhc2UoKQorICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQodWludDY0X3QgLyogZXhpc3Rp
bmdWZXJzaW9uICovKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgLy8gRnJvbSBJREJG
YWN0b3J5Lm9wZW4oKQorICAgIHZpcnR1YWwgdm9pZCBvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qg
Lyogb2xkVmVyc2lvbiAqLywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkNhbGxiYWNrc19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURC
Q3Vyc29yQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCQ3Vyc29yQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzgwMWM3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5o
IgorI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURC
Q3Vyc29yQmFja2VuZDo6SURCQ3Vyc29yQmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRleGVk
REI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlEKQorICAgIDogbV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAsIG1fY3Vyc29yVHlw
ZShjdXJzb3JUeXBlKQorICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24pCisgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJRCkKKyAgICAsIG1fY3Vyc29ySUQoY3Vyc29ySUQp
CisgICAgLCBtX3NhdmVkQ3Vyc29ySUQoMCkKKyAgICAsIG1fY2xvc2VkKGZhbHNlKQoreworICAg
IG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKK30KKworSURCQ3Vyc29y
QmFja2VuZDo6fklEQkN1cnNvckJhY2tlbmQoKQoreworICAgIG1fdHJhbnNhY3Rpb24tPnVucmVn
aXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNvbnRp
bnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJJREJDdXJzb3JCYWNrZW5kOjpjb250aW51ZSIpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2sobV90YXNrVHlwZSwgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5
LCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kOjphZHZhbmNlKHVuc2ln
bmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4
Y2VwdGlvbkNvZGUmKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFja2VuZDo6
YWR2YW5jZSIpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKKyAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3Vyc29yQWR2YW5jZU9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIGNvdW50LCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJDdXJz
b3JCYWNrZW5kOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkN1cnNv
ckJhY2tlbmQ6OmRlbGV0ZSIpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKKyAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6OmNyZWF0ZShwcmltYXJ5S2V5KCkpOworICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuZGVsZXRlUmFuZ2UobV90cmFuc2FjdGlvbi0+aWQo
KSwgbV9vYmplY3RTdG9yZUlELCBrZXlSYW5nZS5yZWxlYXNlKCksIHBycENhbGxiYWNrcyk7Cit9
CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Y2xvc2UoKQoreworICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCQ3Vyc29yQmFja2VuZDo6Y2xvc2UiKTsKKyAgICBjbGVhcigpOworICAgIG1fY2xvc2Vk
ID0gdHJ1ZTsKKyAgICBtX3NhdmVkQ3Vyc29ySUQgPSAwOworfQorCit2b2lkIElEQkN1cnNvckJh
Y2tlbmQ6OnVwZGF0ZUN1cnNvckRhdGEoSURCS2V5KiBrZXksIElEQktleSogcHJpbWFyeUtleSwg
U2hhcmVkQnVmZmVyKiB2YWx1ZUJ1ZmZlcikKK3sKKyAgICBtX2N1cnJlbnRLZXkgPSBrZXk7Cisg
ICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IHByaW1hcnlLZXk7CisgICAgbV9jdXJyZW50VmFsdWVC
dWZmZXIgPSB2YWx1ZUJ1ZmZlcjsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kOjpjbGVhcigp
Cit7CisgICAgbV9jdXJzb3JJRCA9IDA7CisgICAgbV9jdXJyZW50S2V5ID0gbnVsbHB0cjsKKyAg
ICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZl
ciA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ZDFmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmgKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kX2gKKyNkZWZpbmUg
SURCQ3Vyc29yQmFja2VuZF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJREJLZXlSYW5nZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSURCQ3Vy
c29yQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkN1cnNvckJhY2tlbmQ+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShpbnQ2NF90IGN1cnNv
cklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwgY3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJRCkpOworICAgIH0KKyAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShp
bnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlEKSk7CisgICAgfQorICAgIH5JREJDdXJz
b3JCYWNrZW5kKCk7CisKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNr
KCkgeyB9CisKKyAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleS5n
ZXQoKTsgfQorICAgIElEQktleSogcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dFByaW1hcnlLZXkuZ2V0KCk7IH0KKyAgICBTaGFyZWRCdWZmZXIqIHZhbHVlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9u
bHkpID8gbnVsbHB0ciA6IG1fY3VycmVudFZhbHVlQnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCB1
cGRhdGVDdXJzb3JEYXRhKElEQktleSosIElEQktleSogcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVy
KiB2YWx1ZUJ1ZmZlcik7CisKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBJbmRleGVkREI6OkN1
cnNvclR5cGUgY3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQorCisg
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29ySUQ7IH0KKworICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24oKSB7IHJldHVybiAqbV90cmFuc2FjdGlvbjsg
fQorCisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgc2V0U2F2ZWRDdXJzb3JJRChpbnQ2NF90
IGN1cnNvcklEKSB7IG1fc2F2ZWRDdXJzb3JJRCA9IGN1cnNvcklEOyB9CisKK3ByaXZhdGU6Cisg
ICAgSURCQ3Vyc29yQmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5
cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZCYs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCk7CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIG1fdGFza1R5cGU7CisgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworCisgICAgaW50NjRfdCBtX2N1cnNvcklEOwor
ICAgIGludDY0X3QgbV9zYXZlZEN1cnNvcklEOworCisgICAgUmVmUHRyPElEQktleT4gbV9jdXJy
ZW50S2V5OworICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1hcnlLZXk7CisgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV9jdXJyZW50VmFsdWVCdWZmZXI7CisKKyAgICBib29sIG1fY2xv
c2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVmOGE1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCkBA
IC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1
cnNvckJhY2tlbmRPcGVyYXRpb25zLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8
Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIGF1dG8gY2FsbGJh
Y2sgPSBbdGhpcywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ip
IHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBtX2N1cnNvci0+Y2xlYXIoKTsK
KyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgfSBlbHNl
IGlmICgha2V5KSB7CisgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNv
IG5vIGtleSwgdGhlbiB0aGUgY3Vyc29yIHJlYWNoZWQgdGhlIGVuZC4KKyAgICAgICAgICAgIG1f
Y3Vyc29yLT5jbGVhcigpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0
aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihudWxscHRyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX2N1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShrZXkuZ2V0KCksIHByaW1hcnlLZXku
Z2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3Moa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogQ3Vyc29yIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gcGFzcyBhbG9u
ZyBhbiBlcnJvciBpbnN0ZWFkIG9mIHN1Y2Nlc3MKKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNr
KCk7CisgICAgfTsKKworICAgIG1fY3Vyc29yLT50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmN1cnNvckFkdmFuY2UoKm1fY3Vyc29yLCAqdGhpcywgY2FsbGJhY2sp
OworfQorCit2b2lkIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAi
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8Q3Vyc29ySXRlcmF0aW9u
T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgYXV0byBjYWxsYmFjayA9IFt0aGlzLCBv
cGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZUJ1ZmZlciwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikgeworICAgICAgICBp
ZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIG1fY3Vyc29yLT5jbGVhcigpOworICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICB9IGVsc2UgaWYgKCFrZXkpIHsK
KyAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZXJyb3IgYnV0IGFsc28gbm8ga2V5LCB0aGVu
IHRoZSBjdXJzb3IgcmVhY2hlZCB0aGUgZW5kLgorICAgICAgICAgICAgbV9jdXJzb3ItPmNsZWFy
KCk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJl
ZEJ1ZmZlcio+KG51bGxwdHIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fY3Vy
c29yLT51cGRhdGVDdXJzb3JEYXRhKGtleS5nZXQoKSwgcHJpbWFyeUtleS5nZXQoKSwgdmFsdWVC
dWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXksIHBy
aW1hcnlLZXksIHZhbHVlQnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBD
dXJzb3Igb3BlcmF0aW9ucyBzaG91bGQgYmUgYWJsZSB0byBwYXNzIGFsb25nIGFuIGVycm9yIGlu
c3RlYWQgb2Ygc3VjY2VzcworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9Owor
CisgICAgbV9jdXJzb3ItPnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9u
KCkuY3Vyc29ySXRlcmF0ZSgqbV9jdXJzb3IsICp0aGlzLCBjYWxsYmFjayk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRUQoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjI3OTc3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5o
CkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9u
c19oCisjZGVmaW5lIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zX2gKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgorI2luY2x1
ZGUgIklEQk9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1cnNv
ckl0ZXJhdGlvbk9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDdXJz
b3JJdGVyYXRpb25PcGVyYXRpb24oY3Vyc29yLCBrZXksIGNhbGxiYWNrcykpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0X3QgY3Vyc29ySUQoKSBjb25zdCB7
IHJldHVybiBtX2N1cnNvci0+aWQoKTsgfQorICAgIElEQktleSoga2V5KCkgY29uc3QgeyByZXR1
cm4gbV9rZXkuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9j
dXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2NhbGxiYWNr
cyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5k
PiBtX2N1cnNvcjsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2tleTsKKyAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb24g
OiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yLCB1bnNpZ25l
ZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbihjdXJz
b3IsIGNvdW50LCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7
CisKKyAgICBpbnQ2NF90IGN1cnNvcklEKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPmlkKCk7
IH0KKyAgICB1bnNpZ25lZCBsb25nIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQor
Citwcml2YXRlOgorICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPiBjdXJzb3IsIHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAs
IG1fY291bnQoY291bnQpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gbV9jdXJzb3I7CisgICAgdW5z
aWduZWQgbG9uZyBtX2NvdW50OworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisjZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnNfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFi
YXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCRGF0YWJhc2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wOWU0ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw2MjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlY29yZElkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmPElEQkRhdGFiYXNlQmFja2VuZD4gSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBJREJTZXJ2ZXJDb25uZWN0aW9uJiBzZXJ2ZXJDb25u
ZWN0aW9uKQoreworICAgIFJlZjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQgPSBhZG9wdFJl
ZigqbmV3IElEQkRhdGFiYXNlQmFja2VuZChuYW1lLCB1bmlxdWVJZGVudGlmaWVyLCBmYWN0b3J5
LCBzZXJ2ZXJDb25uZWN0aW9uKSk7CisgICAgYmFja2VuZC0+b3BlbkludGVybmFsQXN5bmMoKTsK
KyAgICAKKyAgICByZXR1cm4gYmFja2VuZDsKK30KKworSURCRGF0YWJhc2VCYWNrZW5kOjpJREJE
YXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlk
ZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBJREJTZXJ2ZXJD
b25uZWN0aW9uJiBzZXJ2ZXJDb25uZWN0aW9uKQorICAgIDogbV9tZXRhZGF0YShuYW1lLCBJbnZh
bGlkSWQsIDAsIEludmFsaWRJZCkKKyAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVy
KQorICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCisgICAgLCBtX3NlcnZlckNvbm5lY3Rpb24oc2Vy
dmVyQ29ubmVjdGlvbikKKyAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihzdGQ6Om1ha2Vf
dW5pcXVlPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+KCkpCisgICAgLCBtX2Nsb3NpbmdDb25u
ZWN0aW9uKGZhbHNlKQorICAgICwgbV9kaWRPcGVuSW50ZXJuYWwoZmFsc2UpCit7CisgICAgQVNT
RVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0
U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQoIW1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlkKSk7CisgICAgaWYgKG5l
d01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKSB7
CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPCBuZXdNYXhPYmpl
Y3RTdG9yZUlkKTsKKyAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkID0gbmV3TWF4
T2JqZWN0U3RvcmVJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9i
amVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
OjpyZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCit7CisgICAg
QVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsK
KyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5p
bmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7CisgICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQo
aW5kZXguaWQsIGluZGV4KTsKKyAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQg
PCBuZXdNYXhJbmRleElkKTsKKyAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01h
eEluZGV4SWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RT
dG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpyZW1v
dmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBB
U1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwor
ICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5k
ZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5yZW1vdmUo
aW5kZXhJZCk7CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQs
IG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5JbnRlcm5h
bEFzeW5jKCkKK3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBzZWxmID0gdGhpczsK
KyAgICBtX3NlcnZlckNvbm5lY3Rpb24tPmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0
YShbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2Vz
cykgeworICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJuYWxBc3luYyhtZXRhZGF0YSwgc3VjY2Vz
cyk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkaWRPcGVuSW50ZXJu
YWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9vbCBzdWNjZXNz
KQoreworICAgIG1fZGlkT3BlbkludGVybmFsID0gdHJ1ZTsKKworICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyhmYWxzZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX21ldGFkYXRhID0gbWV0YWRhdGE7CisKKyAgICBwcm9jZXNzUGVu
ZGluZ0NhbGxzKCk7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZDo6fklEQkRhdGFiYXNlQmFja2Vu
ZCgpCit7CisgICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQobV9pZGVudGlm
aWVyKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK3sK
KyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7CisKKyAgICBBU1NFUlQoIW1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCwgSURCRGF0YWJhc2VCYWNrZW5kOjpNaW5pbXVtSW5kZXhJZCk7CisK
KyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihvYmpl
Y3RTdG9yZU1ldGFkYXRhKTsKKyAgICBhZGRPYmplY3RTdG9yZShvYmplY3RTdG9yZU1ldGFkYXRh
LCBvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZU9i
amVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQor
eworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVPYmplY3RT
dG9yZSIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZURl
bGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEpOworICAgIHJlbW92
ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVJbmRleCIpOworICAgIElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rp
b25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJz
aW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlu
cyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmpl
Y3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKwor
ICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBh
dGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVh
dGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsKKworICAgIGFk
ZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgiKTsKKyAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
SWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lv
bkNoYW5nZSk7CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0
U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAg
ICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmluZGV4ZXMu
Z2V0KGluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRlSW5kZXhPcGVy
YXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7CisKKyAgICByZW1vdmVJbmRleChv
YmplY3RTdG9yZUlkLCBpbmRleElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNv
bW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dl
c3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQg
YW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9y
dCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxs
IGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYgKG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQoreworICAgIC8vIElmIHRoZSB0cmFuc2FjdGlv
biBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFj
a2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgorICAgIGlm
IChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+IGVycm9yKQoreworICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyB1bmtu
b3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFja2VuZCBiZWZv
cmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgorICAgIGlmIChtX3RyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wg
a2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Z2V0Iik7CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVHZXRPcGVyYXRpb24obV9tZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwga2V5UmFuZ2UsIGtleU9ubHkgPyBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkg
OiBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFi
YXNlQmFja2VuZDo6cHV0Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKKworICAgIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZU1ldGFk
YXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2Rl
LCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9y
PGludDY0X3QsIDE+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cywgMT4mIGluZGV4
S2V5cykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5k
ZXhLZXlzIik7CisgICAgQVNTRVJUKHBycFByaW1hcnlLZXkpOworICAgIEFTU0VSVChtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7CisKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklEKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGU6OlZlcnNpb25DaGFuZ2UpOworCisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBy
cFByaW1hcnlLZXk7CisgICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5zZXRJbmRleEtleXModHJhbnNh
Y3Rpb25JRCwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJRCwgbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSUQpLCAqcHJpbWFyeUtleSwgaW5kZXhJRHMsIGluZGV4S2V5
cywgW3RyYW5zYWN0aW9uXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7Cisg
ICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7
CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRleGVzUmVhZHko
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdCwgMT4m
IGluZGV4SWRzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpz
ZXRJbmRleGVzUmVhZHkiKTsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2Fj
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlU2V0SW5k
ZXhlc1JlYWR5T3BlcmF0aW9uKGluZGV4SWRzLnNpemUoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwg
VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7
CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5DdXJzb3IiKTsK
KyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24ob2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZTo6S2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFs
dWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRh
YmFzZUJhY2tlbmQ6OmNvdW50Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5z
YWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFj
a3MpOworfQorCisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVSYW5nZShpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJhbmdlIik7Cisg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGU6OlJlYWRPbmx5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZURlbGV0ZVJhbmdl
T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJP
YmplY3RTdG9yZSAlbGxpIGluIHRyYW5zYWN0aW9uICVsbGkiLCBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KG9iamVjdFN0b3JlSWQpLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHRyYW5zYWN0aW9uSWQp
KTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZTo6UmVhZE9ubHkpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ2xlYXJP
YmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJU
KCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOworICAgICAgICBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogcmF3VHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uLT5pZCgpKSA9PSB0cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV90
cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLT5pZCgpKTsKKyAgICBpZiAodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkg
eworICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
Ojp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHJhd1RyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRy
YW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAg
Ly8gSWYgdGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBh
ICJzZWNvbmQKKyAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMuCisgICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBz
dXBwb3J0IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCisgICAgICAgIGlmIChtX3Bl
bmRpbmdTZWNvbmRIYWxmT3BlbikgeworICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdh
cyBhYm9ydGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7CisgICAgICAgICAg
ICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAg
cHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogcmF3VHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1v
ZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkKKyAgICAg
ICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworfQorCitzaXplX3QgSURCRGF0YWJhc2VCYWNrZW5k
Ojpjb25uZWN0aW9uQ291bnQoKQoreworICAgIC8vIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBwZW5k
aW5nIG9wZW4gY2FsbHMsIGFzIHRob3NlIHNob3VsZCBub3QgYmxvY2sgdmVyc2lvbiBjaGFuZ2Vz
IGFuZCBkZWxldGVzLgorICAgIHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQorewor
ICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBv
cGVuSW50ZXJuYWxBc3luYygpIGNvbXBsZXRlcy4KKyAgICBpZiAoIW1fZGlkT3BlbkludGVybmFs
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsK
KyAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT52ZXJzaW9uKCkgPT0gbV9t
ZXRhZGF0YS52ZXJzaW9uKTsKKyAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxp
ZElkKTsKKyAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vblN1
Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuID0gbnVsbHB0cjsKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHdoZW4gY29tcGxldGUs
IGFzIHBlbmRpbmcgZGVsZXRlcyBtYXkgYmUgKHBhcnRpYWxseSkgdW5ibG9ja2VkLgorICAgIH0K
KworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uIHRv
IHJlZHVjZSBxdWV1ZS1jaHVybiBhbmQKKyAgICAvLyBub3QgbmVjZXNzYXJ5IGZvciBjb3JyZWN0
bmVzczsgZGVsZXRlRGF0YWJhc2UgYW5kIG9wZW5Db25uZWN0aW9uIHdpbGwKKyAgICAvLyByZXF1
ZXVlIHRoZWlyIGNhbGxzIGlmIHRoaXMgY29uZGl0aW9uIGlzIHRydWUuCisgICAgaWYgKG1fcnVu
bmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkgJiYgaXNEZWxldGVEYXRhYmFzZUJsb2Nr
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nRGVsZXRlQ2Fs
bD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBtX3BlbmRpbmdEZWxldGVDYWxscy50YWtlRmlyc3QoKTsK
KyAgICAgICAgbV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5hZGQocGVuZGluZ0Rl
bGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICAgICAgZGVsZXRlRGF0YWJhc2VBc3luYyhwZW5k
aW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0KKworICAgIC8vIGRlbGV0ZURhdGFi
YXNlQXN5bmMgc2hvdWxkIG5ldmVyIHJlLXF1ZXVlIGNhbGxzLgorICAgIEFTU0VSVChtX3BlbmRp
bmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBkYXRh
YmFzZSBkZWxldGlvbnMgd2FpdGluZyBmb3IgY29tcGxldGlvbiwgd2UncmUgZG9uZSBmb3Igbm93
LgorICAgIC8vIEZ1cnRoZXIgY2FsbGJhY2tzIHdpbGwgYmUgaGFuZGxlZCBpbiBhIGZ1dHVyZSBj
YWxsIHRvIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKS4KKyAgICBpZiAoIW1fZGVsZXRlQ2FsbGJhY2tz
V2FpdGluZ0NvbXBsZXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyh0cnVlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmQ6OnByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGJvb2wgc3VjY2VzcykKK3sKKyAgICAvLyBP
cGVuIGNhbGxzIGNhbiBiZSByZXF1ZXVlZCBpZiBhbiBvcGVuIGNhbGwgc3RhcnRlZCBhIHZlcnNp
b24gY2hhbmdlIHRyYW5zYWN0aW9uIG9yIGRlbGV0ZXMgdGhlIGRhdGFiYXNlLgorICAgIERlcXVl
PHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBwZW5kaW5nT3BlbkNhbGxzOwor
ICAgIG1fcGVuZGluZ09wZW5DYWxscy5zd2FwKHBlbmRpbmdPcGVuQ2FsbHMpOworCisgICAgd2hp
bGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SURCUGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxz
LnRha2VGaXJzdCgpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKG1f
bWV0YWRhdGEuaWQgPT0gSW52YWxpZElkKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBkYXRh
YmFzZSB3YXMgZGVsZXRlZCB0aGVuIHF1aWNrbHkgcmUtb3BlbmVkLgorICAgICAgICAgICAgICAg
IC8vIG9wZW5JbnRlcm5hbEFzeW5jKCkgd2lsbCByZWNyZWF0ZSBpdCBpbiB0aGUgYmFja2luZyBz
dG9yZSBhbmQgdGhlbiByZXN1bWUgcHJvY2Vzc2luZyBwZW5kaW5nIGNhbGxiYWNrcy4KKyAgICAg
ICAgICAgICAgICBwZW5kaW5nT3BlbkNhbGxzLnByZXBlbmQoV1RGOjptb3ZlKHBlbmRpbmdPcGVu
Q2FsbCkpOworICAgICAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbHMuc3dhcChtX3BlbmRpbmdP
cGVuQ2FsbHMpOworCisgICAgICAgICAgICAgICAgb3BlbkludGVybmFsQXN5bmMoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVuQ29ubmVj
dGlvbkludGVybmFsKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2Fs
bC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2FjdGlvbklkKCks
IHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFN0cmluZyBtZXNzYWdlOworICAgICAgICAgICAgaWYgKHBlbmRpbmdPcGVuQ2FsbC0+dmVy
c2lvbigpID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgICAg
ICAgICBtZXNzYWdlID0gIkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2
ZXJzaW9uIHNwZWNpZmllZC4iOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3
aXRoIHZlcnNpb24gJWxsdSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4ocGVuZGlu
Z09wZW5DYWxsLT52ZXJzaW9uKCkpKTsKKyAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbC0+Y2Fs
bGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNh
Y3Rpb25JRCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSURzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSBtb2RlKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JRCwg
Y2FsbGJhY2tzLCBvYmplY3RTdG9yZUlEcywgbW9kZSk7CisKKyAgICBBU1NFUlQoIW1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSUQpKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5hZGQo
dHJhbnNhY3Rpb25JRCwgdHJhbnNhY3Rpb24uZ2V0KCkpOworfQorCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFj
a3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbikKK3sKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJh
Y2tzOworCisgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPElE
QlBlbmRpbmdPcGVuQ2FsbD4oKmNhbGxiYWNrcywgKmRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbklkLCB2ZXJzaW9uKSk7CisKKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVjdGlvbkludGVybmFsKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90
IHZlcnNpb24pCit7CisgICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7
CisgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOworCisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNh
bGxiYWNrczsKKworICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlz
dCBmcm9tIGl0cyBsYWNrIG9mIHZlcnNpb24uCisgICAgYm9vbCBpc05ld0RhdGFiYXNlID0gbV9t
ZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKKwor
ICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9u
ICYmICFpc05ld0RhdGFiYXNlKSB7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRk
KGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywg
dGhpcy0+bWV0YWRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNO
ZXdEYXRhYmFzZSAmJiB2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRW
ZXJzaW9uKSB7CisgICAgICAgIC8vIFNwZWMgc2F5czogSWYgbm8gdmVyc2lvbiBpcyBzcGVjaWZp
ZWQgYW5kIG5vIGRhdGFiYXNlIGV4aXN0cywgc2V0IGRhdGFiYXNlIHZlcnNpb24gdG8gMS4KKyAg
ICAgICAgdmVyc2lvbiA9IDE7CisgICAgfQorCisgICAgaWYgKHZlcnNpb24gPiBtX21ldGFkYXRh
LnZlcnNpb24gfHwgbV9tZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5v
SW50VmVyc2lvbikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2Fs
bGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA8IG1fbWV0YWRhdGEudmVyc2lv
biAmJiBtX21ldGFkYXRhLnZlcnNpb24gIT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIlRo
ZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJWxsdSkgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJz
aW9uICglbGx1KS4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHZlcnNpb24pLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fbWV0YWRhdGEudmVyc2lvbikpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX21ldGFkYXRh
LnZlcnNpb24pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJh
Y2tzKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCit7CisgICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKKyAgICBB
U1NFUlQoY2FsbGJhY2tzKTsKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9kYXRhYmFzZUNh
bGxiYWNrc1NldCkgeworICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMg
bm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgorICAg
ICAgICBpZiAoY2FsbGJhY2sgIT0gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAgICBjYWxs
YmFjay0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEudmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lv
bik7CisgICAgfQorICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwgYWxsIHRo
ZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCisgICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVuIGNo
ZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZworICAgIC8v
IG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3VsZCBiZSBjb25z
aXN0ZW50IHdpdGggaG93CisgICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNvcnJlY3RseSkg
ZGlkIGl0LgorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNhbGwgdG8gb25CbG9ja2VkIGFuZCBp
bnN0ZWFkIHdhaXQgdW50aWwgdGhlIGZyb250ZW5kCisgICAgLy8gdGVsbHMgdXMgdGhhdCBhbGwg
dGhlIGJsb2NrZWQgZXZlbnRzIGhhdmUgYmVlbiBkZWxpdmVyZWQuIFNlZQorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChjb25uZWN0
aW9uQ291bnQoKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS52ZXJz
aW9uKTsKKyAgICAvLyBGSVhNRTogQWRkIHRlc3QgZm9yIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbi4KKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8
IGNvbm5lY3Rpb25Db3VudCgpKSB7CisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nT3BlbkNhbGw+KCpjYWxsYmFja3MsICpkYXRhYmFz
ZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOworICAg
IGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmpl
Y3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbihyZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKKworICAgIEFTU0VSVCghbV9wZW5kaW5nU2Vjb25kSGFs
Zk9wZW4pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tz
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxv
Y2tlZCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0KSB7CisgICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMg
bm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgorICAg
ICAgICAgICAgY2FsbGJhY2stPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIDAp
OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRo
ZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgICAgICAvLyBWZXJzaW9uQ2hh
bmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgICAg
ICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLnZlcnNpb24pOworICAgICAgICBtX3Bl
bmRpbmdEZWxldGVDYWxscy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJREJQZW5kaW5nRGVsZXRl
Q2FsbD4oY2FsbGJhY2tzLnJlbGVhc2UoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGRlbGV0ZURhdGFiYXNlQXN5bmMoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Cit9CisKK2Jvb2wgSURC
RGF0YWJhc2VCYWNrZW5kOjppc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpCit7CisgICAgcmV0dXJu
IGNvbm5lY3Rpb25Db3VudCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRl
RGF0YWJhc2VBc3luYyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQorewor
ICAgIEFTU0VSVCghaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSk7CisKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kPiBzZWxmKHRoaXMpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBtX3NlcnZlckNvbm5lY3Rpb24tPmRlbGV0ZURh
dGFiYXNlKG1fbWV0YWRhdGEubmFtZSwgW3NlbGYsIGNhbGxiYWNrc10oYm9vbCBzdWNjZXNzKSB7
CisgICAgICAgIHNlbGYtPm1fZGVsZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb24ucmVtb3Zl
KGNhbGxiYWNrcyk7CisKKyAgICAgICAgLy8gSWYgdGhpcyBJREJEYXRhYmFzZUJhY2tlbmQgd2Fz
IGNsb3NlZCB3aGlsZSB3YWl0aW5nIGZvciBkZWxldGVEYXRhYmFzZSB0byBjb21wbGV0ZSwgbm8g
cG9pbnQgaW4gcGVyZm9ybWluZyBhbnkgY2FsbGJhY2tzLgorICAgICAgICBpZiAoIXNlbGYtPm1f
c2VydmVyQ29ubmVjdGlvbi0+aXNDbG9zZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS5pZCA9IElu
dmFsaWRJZDsKKyAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEudmVyc2lvbiA9IElEQkRhdGFi
YXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKKyAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcygp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yIGRlbGV0aW5nIGRhdGFiYXNlLiIpKTsKKworICAgICAgICBzZWxmLT5wcm9j
ZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
OjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7
CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuY29udGFpbnMoY2FsbGJhY2tz
KSk7CisKKyAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShjYWxsYmFja3MpOworICAg
IGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiAmJiBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+
ZGF0YWJhc2VDYWxsYmFja3MoKSA9PSBjYWxsYmFja3MpIHsKKyAgICAgICAgbV9wZW5kaW5nU2Vj
b25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlRoZSBjb25uZWN0aW9uIHdhcyBj
bG9zZWQuIikpOworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51bGxwdHI7Cisg
ICAgfQorCisgICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpID4gMSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gcHJvY2Vzc1BlbmRpbmdDYWxscyBhbGxvd3MgdGhlIGluc3BlY3RvciB0byBwcm9j
ZXNzIGEgcGVuZGluZyBvcGVuIGNhbGwKKyAgICAvLyBhbmQgY2FsbCBjbG9zZSwgcmVlbnRlcmlu
ZyBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlLiBUaGVuIHRoZQorICAgIC8vIGJhY2tlbmQgd291
bGQgYmUgcmVtb3ZlZCBib3RoIGJ5IHRoZSBpbnNwZWN0b3IgY2xvc2luZyBpdHMgY29ubmVjdGlv
biwgYW5kCisgICAgLy8gYnkgdGhlIGNvbm5lY3Rpb24gdGhhdCBmaXJzdCBjYWxsZWQgY2xvc2Uu
CisgICAgLy8gVG8gYXZvaWQgdGhhdCBzaXR1YXRpb24sIGRvbid0IHByb2NlZWQgaW4gY2FzZSBv
ZiByZWVudHJhbmN5LgorICAgIGlmIChtX2Nsb3NpbmdDb25uZWN0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNsb3NpbmdDb25uZWN0aW9uKG1fY2xvc2lu
Z0Nvbm5lY3Rpb24sIHRydWUpOworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKworICAgIC8v
IEZJWE1FOiBBZGQgYSB0ZXN0IGZvciB0aGUgbV9wZW5kaW5nT3BlbkNhbGxzIGNhc2VzIGJlbG93
LgorICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5zaXpl
KCkgJiYgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgeworICAgICAgICBUcmFuc2FjdGlv
bk1hcCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOworICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKKyAgICAg
ICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6IHRyYW5zYWN0aW9ucy52YWx1ZXMoKSkKKyAgICAg
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CisKKyAgICAgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICAgICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5jbG9z
ZSgpOworCisgICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFsc2UgaW4gdW5p
dCB0ZXN0cy4KKyAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7CisgICAgICAgIGlmIChtX2ZhY3Rv
cnkpCisgICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChtX2lk
ZW50aWZpZXIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxOTkyNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUJhY2tl
bmQuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5k
X2gKKyNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kX2gKKworI2luY2x1ZGUgIklEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUg
IklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCIKKyNpbmNs
dWRlICJJREJQZW5kaW5nT3BlbkNhbGwuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZTsKK2NsYXNzIElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UGF0aDsKK2NsYXNzIElE
QlNlcnZlckNvbm5lY3Rpb247CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ7CitjbGFzcyBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitzdHJ1Y3Qg
SURCRGF0YWJhc2VNZXRhZGF0YTsKK3N0cnVjdCBJREJJbmRleE1ldGFkYXRhOworc3RydWN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE7CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBJ
bmRleEtleXM7Cit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmQ+IHsKK3B1Ymxp
YzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyLCBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIElEQlNlcnZlckNvbm5lY3Rpb24mKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB+SURCRGF0YWJhc2VCYWNrZW5kKCk7CisKKyAgICBJREJTZXJ2ZXJDb25u
ZWN0aW9uJiBzZXJ2ZXJDb25uZWN0aW9uKCkgeyByZXR1cm4gbV9zZXJ2ZXJDb25uZWN0aW9uLmdl
dCgpOyB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOworICAgIGlu
dDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CisgICAgdm9pZCBhZGRP
YmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhP
YmplY3RTdG9yZUlkKTsKKyAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCk7CisgICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOworICAgIHZvaWQgcmVt
b3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIHVpbnQ2NF90IHZlcnNpb24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVsZXRlRGF0
YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIC8vIElEQkRhdGFiYXNlQmFj
a2VuZAorICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdm9pZCBjcmVh
dGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CisgICAgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPik7CisKKyAgICB2b2lkIGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQpOworICAgIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAgICB2b2lkIGFi
b3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7
CisKKyAgICB2b2lkIGNyZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOworICAgIHZvaWQgZGVs
ZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCk7CisKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmdldCgpOyB9CisgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKik7CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCopOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKik7CisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRG
aXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKworICAgIGVudW0gVGFza1R5cGUgeworICAg
ICAgICBOb3JtYWxUYXNrID0gMCwKKyAgICAgICAgUHJlZW1wdGl2ZVRhc2sKKyAgICB9OworCisg
ICAgZW51bSBQdXRNb2RlIHsKKyAgICAgICAgQWRkT3JVcGRhdGUsCisgICAgICAgIEFkZE9ubHks
CisgICAgICAgIEN1cnNvclVwZGF0ZQorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRf
dCBNaW5pbXVtSW5kZXhJZCA9IDMwOworCisgICAgdm9pZCBnZXQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAg
ICB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKKyAgICB2b2lkIHNldEluZGV4S2V5cyhp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90LCAxPiYgaW5kZXhJZHMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXMsIDE+Jik7CisgICAgdm9pZCBzZXRJbmRleGVzUmVhZHko
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90LCAxPiYgaW5kZXhJZHMpOworICAgIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5
T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBjb3Vu
dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKKyAgICB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisKKyAg
ICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWV0YWRhdGE7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRWZXJzaW9uKHVpbnQ2NF90IHZlcnNpb24p
IHsgbV9tZXRhZGF0YS52ZXJzaW9uID0gdmVyc2lvbjsgfQorCisgICAgYm9vbCBoYXNQZW5kaW5n
U2Vjb25kSGFsZk9wZW4oKSB7IHJldHVybiBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5nZXQoKTsg
fQorICAgIHZvaWQgc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKHN0ZDo6dW5pcXVlX3B0cjxJREJQ
ZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCkgeyBtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
biA9IFdURjo6bW92ZShwZW5kaW5nT3BlbkNhbGwpOyB9CisKKyAgICBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZSYgZmFjdG9yeUJhY2tlbmQoKSB7IHJldHVybiAqbV9mYWN0b3J5OyB9CisKKyAg
ICBjbGFzcyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOworICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbjsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiwgSURCU2VydmVyQ29ubmVjdGlvbiYpOworCisgICAgdm9pZCBvcGVu
Q29ubmVjdGlvbkludGVybmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVy
c2lvbik7CisKKyAgICB2b2lkIG9wZW5JbnRlcm5hbEFzeW5jKCk7CisgICAgdm9pZCBkaWRPcGVu
SW50ZXJuYWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKTsK
KworICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAgICBzaXplX3QgY29ubmVj
dGlvbkNvdW50KCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ09wZW5DYWxscyhib29sIHN1Y2Nlc3MpOworCisgICAgYm9vbCBpc0RlbGV0
ZURhdGFiYXNlQmxvY2tlZCgpOworICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VBc3luYyhQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFkYXRh
OworCisgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKKworICAgIFJlZlB0cjxJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4gbV9mYWN0b3J5OworICAgIFJlZjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBt
X3NlcnZlckNvbm5lY3Rpb247CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmQ+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBUcmFuc2Fj
dGlvbk1hcDsKKyAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKKworICAgIERlcXVl
PHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW47CisKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ0RlbGV0ZUNh
bGw+PiBtX3BlbmRpbmdEZWxldGVDYWxsczsKKyAgICBIYXNoU2V0PFJlZlB0cjxJREJDYWxsYmFj
a3M+PiBtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uOworCisgICAgdHlwZWRlZiBM
aXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBEYXRhYmFzZUNhbGxiYWNr
c1NldDsKKyAgICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0Owor
CisgICAgYm9vbCBtX2Nsb3NpbmdDb25uZWN0aW9uOworICAgIGJvb2wgbV9kaWRPcGVuSW50ZXJu
YWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VD
YWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1
YzBlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3MuaApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJREJEYXRhYmFzZUNhbGxiYWNrc19oCisjZGVmaW5lIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTGVnYWN5RGF0YWJhc2U7CisKK2NsYXNzIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VDYWxsYmFja3M+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUNhbGxiYWNrcygpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIG9uRm9yY2VkQ2xvc2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNo
YW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZShpbnQ2
NF90IHRyYW5zYWN0aW9uSWQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KExlZ2Fj
eURhdGFiYXNlKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KworI2VuZGlmIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYz
ZGRlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkxlZ2Fj
eURhdGFiYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbD4gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpjcmVhdGUoKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpKTsKK30KKworSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsOjpJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKQorICAgIDog
bV9kYXRhYmFzZShudWxscHRyKQoreworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5J
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKQoreworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbDo6b25Gb3JjZWRDbG9zZSgpCit7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAg
IG1fZGF0YWJhc2UtPmZvcmNlQ2xvc2UoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGw6Om9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdW
ZXJzaW9uKQoreworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5vblZl
cnNpb25DaGFuZ2Uob2xkVmVyc2lvbiwgbmV3VmVyc2lvbik7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsOjpjb25uZWN0KExlZ2FjeURhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAg
ICBBU1NFUlQoIW1fZGF0YWJhc2UpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgbV9kYXRh
YmFzZSA9IGRhdGFiYXNlOworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6b25B
Ym9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
ZXJyb3IpCit7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2UtPm9uQWJv
cnQodHJhbnNhY3Rpb25JZCwgZXJyb3IpOworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbDo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgaWYgKG1fZGF0
YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2UtPm9uQ29tcGxldGUodHJhbnNhY3Rpb25JZCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzYjBj
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaAorI2RlZmluZSBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGxfaAorCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTGVnYWN5RGF0YWJhc2U7CisKK2NsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCBm
aW5hbCA6IHB1YmxpYyBJREJEYXRhYmFzZUNhbGxiYWNrcyB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgfklE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpIG92ZXJyaWRlOworCisgICAgLy8gSURCRGF0YWJhc2VD
YWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25Gb3JjZWRDbG9zZSgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0
X3QgbmV3VmVyc2lvbikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkgb3Zl
cnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChMZWdhY3lEYXRhYmFzZSopIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpOworCisgICAg
Ly8gVGhlIGluaXRpYWwgSURCT3BlbkRCUmVxdWVzdCBvciBmaW5hbCBJREJEYXRhYmFzZSBtYWlu
dGFpbnMgYSBSZWZQdHIgdG8gdGhpcworICAgIExlZ2FjeURhdGFiYXNlKiBtX2RhdGFiYXNlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOTkwMTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZV9oCisjZGVmaW5lIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlX2gKKworI2luY2x1
ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgorCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3Mg
SURCQ3Vyc29yQmFja2VuZDsKK2NsYXNzIElEQkRhdGFiYXNlOworY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kOworY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7CitjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKKy8vIFRoaXMgY2xhc3MgaXMg
c2hhcmVkIGJ5IElEQkZhY3RvcnkgKGFzeW5jKSBhbmQgSURCRmFjdG9yeVN5bmMgKHN5bmMpLgor
Ly8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJGYWN0b3J5QmFja2VuZEltcGwgYW5kIG9wdGlv
bmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBwcm94eQorLy8gY2FsbHMgYWNyb3NzIHByb2Nlc3Mg
YmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUgbm9uLWJsb2Nr
aW5nIGFuZAorLy8gdHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaWYgbmVjZXNz
YXJ5LgorY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4geworcHVibGljOgorICAgIHZpcnR1YWwgfklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFNlY3VyaXR5T3JpZ2lu
JiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmln
aW4mIG1haW5GcmFtZU9yaWdpbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5nT3JpZ2lu
LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cikgPSAwOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZV9oCisKKyNlbmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nRGVsZXRlQ2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRmYmEyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaApAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJQZW5kaW5nRGVsZXRlQ2FsbF9oCisj
ZGVmaW5lIElEQlBlbmRpbmdEZWxldGVDYWxsX2gKKworI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQlBlbmRpbmdEZWxldGVDYWxsIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBJREJQZW5kaW5nRGVsZXRlQ2FsbChQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
KyAgICB7CisgICAgfQorCisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSB7IHJldHVybiBt
X2NhbGxiYWNrcy5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IG1fY2FsbGJhY2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjZW5kaWYgLy8gSURCUGVuZGluZ0RlbGV0ZUNhbGxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lE
QlBlbmRpbmdPcGVuQ2FsbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0lEQlBlbmRpbmdPcGVuQ2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjliNTNlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ09wZW5DYWxsLmgKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSURCUGVuZGluZ09wZW5DYWxsX2gKKyNkZWZpbmUgSURCUGVuZGlu
Z09wZW5DYWxsX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkNhbGxiYWNr
czsKK2NsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOworCitjbGFzcyBJREJQZW5kaW5nT3BlbkNh
bGwgeworcHVibGljOgorICAgIElEQlBlbmRpbmdPcGVuQ2FsbChJREJDYWxsYmFja3MmIGNhbGxi
YWNrcywgSURCRGF0YWJhc2VDYWxsYmFja3MmIGRhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pCisgICAgICAgIDogbV9jYWxsYmFja3MoJmNh
bGxiYWNrcykKKyAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKCZkYXRhYmFzZUNhbGxiYWNr
cykKKyAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKKyAgICAgICAgLCBtX3RyYW5zYWN0aW9u
SWQodHJhbnNhY3Rpb25JZCkKKyAgICB7CisgICAgfQorCisgICAgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorICAgIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3Mu
Z2V0KCk7IH0KKyAgICB1aW50NjRfdCB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Cisg
ICAgaW50NjRfdCB0cmFuc2FjdGlvbklkKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklk
OyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cisg
ICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOworICAg
IHVpbnQ2NF90IG1fdmVyc2lvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorI2VuZGlmIC8vIElEQlBlbmRpbmdPcGVuQ2FsbF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTlkNjYwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcApA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKKworI2luY2x1ZGUgIkxlZ2FjeVRyYW5zYWN0
aW9uLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CisKK3VzaW5nIFdURjo6VGhyZWFkU3BlY2lmaWM7CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGVn
YWN5VHJhbnNhY3Rpb24+PiBUcmFuc2FjdGlvbkxpc3Q7CisKK3N0YXRpYyBUaHJlYWRTcGVjaWZp
YzxUcmFuc2FjdGlvbkxpc3Q+JiB0cmFuc2FjdGlvbnMoKQoreworICAgIC8vIEZJWE1FOiBNb3Zl
IHRoZSBWZWN0b3IgdG8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0byBhdm9pZCBkZWFsaW5nIHdp
dGgKKyAgICAvLyB0aHJlYWQtbG9jYWwgc3RvcmFnZS4KKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9uTGlzdD4q
IHRyYW5zYWN0aW9uczsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAg
ICB0cmFuc2FjdGlvbnMgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0PjsKKyAg
ICB9KTsKKworICAgIHJldHVybiAqdHJhbnNhY3Rpb25zOworfQorCit2b2lkIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3I6OmFkZE5ld1RyYW5zYWN0aW9uKFBhc3NSZWZQdHI8TGVnYWN5VHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKQoreworICAgIHRyYW5zYWN0aW9ucygpLT5hcHBlbmQodHJh
bnNhY3Rpb24pOworfQorCit2b2lkIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmRlYWN0
aXZhdGVOZXdUcmFuc2FjdGlvbnMoKQoreworICAgIFRocmVhZFNwZWNpZmljPFRyYW5zYWN0aW9u
TGlzdD4mIGxpc3QgPSB0cmFuc2FjdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9u
IDogKmxpc3QpCisgICAgICAgIHRyYW5zYWN0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOworICAgIC8v
IEZJWE1FOiBFeGVyY2lzZSB0aGlzIGNhbGwgdG8gY2xlYXIoKSBpbiBhIGxheW91dCB0ZXN0Lgor
ICAgIGxpc3QtPmNsZWFyKCk7Cit9CisKK307CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZlMjczCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yX2gKKyNkZWZpbmUgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
cl9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBMZWdhY3lUcmFuc2FjdGlvbjsKKworLy8gVGhpcyBjbGFzcyBrZWVwcyB0cmFj
ayBvZiB0aGUgdHJhbnNhY3Rpb25zIGNyZWF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50CisvLyBKYXZh
c2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBUcmFuc2FjdGlvbnMgaGF2ZSBhbiBpbnRlcm5hbCB8
YWN0aXZlfCBmbGFnCisvLyB3aGljaCBpcyBzZXQgdG8gdHJ1ZSBvbiBjcmVhdGlvbiwgYnV0IG11
c3QgYmUgc2V0IHRvIGZhbHNlIHdoZW4gY29udHJvbAorLy8gcmV0dXJucyB0byB0aGUgZXZlbnQg
bG9vcC4KKworY2xhc3MgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcik7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgYWRkTmV3VHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxMZWdhY3lUcmFuc2Fj
dGlvbj4pOworICAgIHN0YXRpYyB2b2lkIGRlYWN0aXZhdGVOZXdUcmFuc2FjdGlvbnMoKTsKKwor
cHJpdmF0ZToKKyAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yKCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2VuZGlmIC8vIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
OWJhODdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNv
ckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OmNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2Rl
KQoreworICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0U3RvcmVIYXNoU2V0OworICAgIGZvciAo
YXV0byYgaWQgOiBvYmplY3RTdG9yZUlkcykKKyAgICAgICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFk
ZChpZCk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmQo
ZGF0YWJhc2VCYWNrZW5kLCBpZCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUp
KTsKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURC
RGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYg
b2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCisgICAgOiBt
X29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAg
LCBtX3N0YXRlKFVub3BlbmVkKQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwg
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZUJhY2tlbmQp
CisgICAgLCBtX3Rhc2tUaW1lcigqdGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1Rp
bWVyRmlyZWQpCisgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCisgICAgLCBtX2lk
KGlkKQoreworICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3Jl
IGl0IGNhbiBiZSBhZG9wdGVkLgorICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCisg
ICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2Fj
dGlvbih0aGlzKTsKKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQo
dGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLm9wZW5UcmFuc2FjdGlv
bihpZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUsIFtiYWNrZW5kXShib29sIHN1Y2Nlc3MpIHsKKyAg
ICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtiYWNr
ZW5kXSgpIHsKKyAgICAgICAgICAgICAgICBiYWNrZW5kLT5hYm9ydCgpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgdGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGJlZm9yZSB0aGUgc2Vy
dmVyIGNvbm5lY3Rpb24gZmluaXNoZWQgb3BlbmluZyB0aGUgdHJhbnNhY3Rpb24uCisgICAgICAg
IGlmIChiYWNrZW5kLT5tX3N0YXRlID09IEZpbmlzaGVkKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGJhY2tlbmQtPm1fc3RhdGUgPSBVbnVzZWQ7CisgICAgICAgIGlmIChiYWNrZW5k
LT5oYXNQZW5kaW5nVGFza3MoKSkKKyAgICAgICAgICAgIGJhY2tlbmQtPnN0YXJ0KCk7CisgICAg
fSk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZCgp
Cit7CisgICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBn
ZXQgZGVsZXRlZCB1bmxlc3MgaXQncyB1bnVzZWQsIGNvbXBsZXRlLCBvciBhYm9ydGVkLgorICAg
IEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkIHx8IG1fc3RhdGUgPT0gVW51c2VkKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tl
bmQ6OlRhc2tUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVm
UHRyPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBhYm9ydFRhc2spCit7CisgICAgaWYgKG1fc3Rh
dGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlID09IElEQkRh
dGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaykKKyAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRh
c2spOworICAgIGVsc2UKKyAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNr
KTsKKworICAgIGlmIChhYm9ydFRhc2spCisgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVu
ZChhYm9ydFRhc2spOworCisgICAgaWYgKG1fc3RhdGUgPT0gVW5vcGVuZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKKyAgICAgICAgc3RhcnQoKTsKKyAg
ICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmQ6OmFib3J0KCkKK3sKKyAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
ICh1bmtub3duIGNhdXNlKSIpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFi
b3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCit7CisjaWZuZGVmIE5ERUJV
RworICAgIGlmIChlcnJvcikKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OmFib3J0IC0gKCVzKSAlcyIsIGVycm9yLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwg
ZXJyb3ItPm1lc3NhZ2UoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kOjphYm9ydCAobm8gZXJyb3IpIik7Cisj
ZW5kaWYKKworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7CisKKyAgICAvLyBUaGUg
bGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZv
cm1pbmcgdGhlCisgICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEg
c2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKKyAgICAvLyBhbGl2ZSB3aGlsZSBleGVj
dXRpbmcgdGhpcyBtZXRob2QuCisgICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBtX3N0YXRlID0gRmluaXNoZWQ7CisgICAgbV90YXNrVGltZXIuc3Rv
cCgpOworCisgICAgaWYgKHdhc1J1bm5pbmcpCisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNv
bm5lY3Rpb24oKS5yb2xsYmFja1RyYW5zYWN0aW9uU3luYyhtX2lkKTsKKworICAgIC8vIFJ1biB0
aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KKyAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gdGFzayht
X2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSgpOwor
ICAgIH0KKworICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3Jz
KSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCisgICAgLy8gYXJlIGZp
cmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBh
bGxvdyB0aGUgYmFja2luZyBzdG9yZQorICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5k
IG9yZGVyIGlzIGNyaXRpY2FsLgorICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgIG1fZGF0
YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uU3luYyhtX2lkKTsKKwor
ICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZv
cmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKKyAgICAvLyB0aGUgdHJhbnNhY3Rpb24g
Y29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4K
KyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5z
YWN0aW9uKHRoaXMpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5p
c2hlZCh0aGlzKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlID0g
bV9kYXRhYmFzZS5yZWxlYXNlKCk7CisKKyAgICBpZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIGVycm9yKTsKKworICAgIGRhdGFiYXNlLT50cmFuc2Fj
dGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKK30KKworYm9vbCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OmlzVGFza1F1ZXVlRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWVt
cHRpdmVUYXNrUXVldWUuaXNFbXB0eSgpICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsKK30KKwor
Ym9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6Omhhc1BlbmRpbmdUYXNrcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHko
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnJlZ2lzdGVyT3BlbkN1cnNvcihJ
REJDdXJzb3JCYWNrZW5kKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29y
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnVucmVnaXN0ZXJPcGVuQ3Vyc29y
KElEQkN1cnNvckJhY2tlbmQqIGN1cnNvcikKK3sKKyAgICBtX29wZW5DdXJzb3JzLnJlbW92ZShj
dXJzb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6cnVuKCkKK3sKKyAgICAv
LyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRoaXMgdHJhbnNhY3Rpb24uIFNj
aGVkdWxlIGEgdGltZXIKKyAgICAvLyB0byBwcm9jZXNzIHRoZSBmaXJzdCB0YXNrLgorICAgIEFT
U0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOworICAg
IEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7CisKKyAgICBtX3Rhc2tUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzdGFydCgpCit7
CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKworICAgIG1fc3RhdGUgPSBTdGFydFBl
bmRpbmc7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFy
dFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0
aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCgpCit7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCB0cmFuc2FjdGlv
biAlbGxpIGluIHN0YXRlICV1Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSwgbV9zdGF0
ZSk7CisKKyAgICAvLyBJbiBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSBy
ZXF1ZXN0ZWQgYSBjb21taXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5CisgICAgLy8gYmVlbiBp
bml0aWF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgorICAgIGlmIChtX3N0YXRl
ID09IEZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBV
bm9wZW5lZCB8fCBtX3N0YXRlID09IFVudXNlZCB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOworICAg
IG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisKKyAgICAvLyBGcm9udC1lbmQgaGFzIHJlcXVlc3Rl
ZCBhIGNvbW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNrcyBsaWtlIGNyZWF0ZUluZGV4IHdoaWNo
CisgICAgLy8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25vdXMgYnkgdGhlIGZyb250LWVuZCBidXQg
YXJlIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KKyAgICBpZiAoaGFzUGVuZGluZ1Rhc2tzKCkp
IHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1p
dCAtIE5vdCBjb21taXR0aW5nIG5vdywgdHJhbnNhY3Rpb24gc3RpbGwgaGFzIHBlbmRpbmcgdGFz
a3MgKFRyYW5zYWN0aW9uICVsbGkpIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX2lkKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhp
cyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCisgICAgLy8gY29t
bWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtl
ZXAgb3Vyc2VsdmVzCisgICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQodGhpcyk7CisKKyAgICBi
b29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gVW5vcGVuZWQ7Cisg
ICAgbV9zdGF0ZSA9IEZpbmlzaGVkOworCisgICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQ7CisK
KyAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24obV9p
ZCwgW2JhY2tlbmQsIHRoaXMsIGNvbW1pdHRlZCwgdW51c2VkXShib29sIHN1Y2Nlc3MpIG11dGFi
bGUgeworICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGNvbW1pdFRyYW5zYWN0aW9uIHJlcXVlc3Qg
YWJvcnRpbmcgZHVyaW5nIG9yIGFmdGVyIHN5bmNocm9ub3VzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6YWJvcnQoKSBjYWxsLgorICAgICAgICAvLyBUaGlzIGNhbiBlYXNpbHkgaGFwcGVuIGlmIHRo
ZSBwYWdlIGlzIG5hdmlnYXRlZCBiZWZvcmUgYWxsIHRyYW5zYWN0aW9ucyBmaW5pc2guCisgICAg
ICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIGZ1cnRoZXIgY2xlYW51cCBhbmQgZG9uJ3Qg
bmVlZCB0byBtYWtlIGFueSBjYWxsYmFja3MuCisgICAgICAgIGlmICghbV9kYXRhYmFzZSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFzdWNjZXNzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbW1pdHRlZCB8PSBzdWNjZXNzOworCisgICAgICAgIC8vIEJhY2tp
bmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJl
Zm9yZSBzY3JpcHQgY2FsbGJhY2tzCisgICAgICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlw
dCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcg
c3RvcmUKKyAgICAgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3Jp
dGljYWwuCisgICAgICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgICAgICBtX2RhdGFiYXNl
LT5zZXJ2ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7CisK
KyAgICAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVk
IGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAgICAgICAvLyB0aGUgdHJh
bnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25u
ZWN0aW9ucy4KKyAgICAgICAgaWYgKCF1bnVzZWQpCisgICAgICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAg
ICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworCisgICAgICAgIGlm
IChjb21taXR0ZWQpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkp
OworICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRl
RmlyZWQodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25BYm9ydChpZCgpLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24u
IikpOworICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0
RmlyZWQodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsK
KyAgICB9KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVk
KCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1Rp
bWVyRmlyZWQiKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgeworICAgICAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuYmVnaW5UcmFuc2FjdGlvbihtX2lkLCBb
XSgpIHsgfSk7CisgICAgICAgIG1fc3RhdGUgPSBSdW5uaW5nOworICAgIH0KKworICAgIC8vIFRo
ZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVy
Zm9ybWluZyBhIHRhc2suCisgICAgLy8gVGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgdGhp
cyBvYmplY3QgYWxpdmUgc28gdGhhdCB0YXNrcyBjYW4KKyAgICAvLyBzdWNjZXNzZnVsbHkgbWFr
ZSB0aGVpciBjb21wbGV0aW9uIGNhbGxiYWNrcy4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kPiBzZWxmKHRoaXMpOworCisgICAgVGFza1F1ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRp
bmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1
ZTsKKyAgICBpZiAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQp
IHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAgICAgIFJlZlB0cjxJ
REJPcGVyYXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtlRmlyc3QoKSk7CisgICAgICAgIHRhc2st
PnBlcmZvcm0oW3NlbGYsIHRoaXMsIHRhc2tdKCkgeworICAgICAgICAgICAgbV90YXNrVGltZXIu
c3RhcnRPbmVTaG90KDApOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdlIGhhdmVuJ3QgYWxyZWFk
eSBjb21taXR0ZWQvYWJvcnRlZCwKKyAgICAvLyBhbmQgdGhlIGZyb250LWVuZCByZXF1ZXN0ZWQg
YSBjb21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgorICAgIGlmICghaGFzUGVuZGluZ1Rh
c2tzKCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBlbmRpbmcpCisgICAgICAg
IGNvbW1pdCgpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y2xvc2VPcGVuQ3Vy
c29ycygpCit7CisgICAgZm9yIChhdXRvJiBjdXJzb3IgOiBtX29wZW5DdXJzb3JzKQorICAgICAg
ICBjdXJzb3ItPmNsb3NlKCk7CisgICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
bihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorewor
ICAgIHNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG9iamVjdFN0b3JlTWV0YWRhdGEpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpj
cmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQoreworICAgIHNjaGVk
dWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0
b3JlTWV0YWRhdGEpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhKQoreworICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlZl
cnNpb25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hh
bmdlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBTdHJpbmc6Om51bWJlcihtZXRhZGF0YS52
ZXJzaW9uKSwgbWV0YWRhdGEudmVyc2lvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCit7CisgICAgc2NoZWR1bGVU
YXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhNZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLmlkKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKK3sKKyAgICBzY2hlZHVs
ZVRhc2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1l
dGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFz
ayhHZXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1v
ZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5
cykKK3sKKyAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywg
aW5kZXhLZXlzKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKK3sKKyAgICBzY2hlZHVs
ZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0aXZlVGFzaywgU2V0SW5kZXhlc1JlYWR5
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXhDb3VudCkpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNv
clR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2so
T3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ291bnRPcGVyYXRpb24o
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorewor
ICAgIHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBzY2hlZHVsZVRhc2soRGVsZXRlUmFuZ2VPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNsZWFyT2JqZWN0U3Rv
cmVPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFzayhDbGVhck9iamVjdFN0b3JlT3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Cit9CisKK307CisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I5ZWYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRfaAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRfaAor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiSURCT3Bl
cmF0aW9uLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kOworY2xhc3MgSURCRGF0YWJh
c2VDYWxsYmFja3M7CisKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZCA6IHB1YmxpYyBSZWZD
b3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kKiwgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUpOworICAgIH5JREJUcmFuc2FjdGlvbkJhY2tlbmQoKTsKKworICAgIHZvaWQgY29tbWl0KCk7
CisgICAgdm9pZCBhYm9ydCgpOworICAgIHZvaWQgYWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik7CisKKyAgICB2b2lkIHJ1bigpOworICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlIG1vZGUoKSBjb25zdCAgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgY29uc3QgSGFzaFNldDxp
bnQ2NF90PiYgc2NvcGUoKSBjb25zdCAgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQorCisg
ICAgdm9pZCBzY2hlZHVsZVRhc2soUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NS
ZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2No
ZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNr
KTsgfQorICAgIHZvaWQgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUs
IFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiwgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJh
dGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7CisKKyAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNv
cihJREJDdXJzb3JCYWNrZW5kKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJD
dXJzb3JCYWNrZW5kKik7CisKKyAgICB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVu
ZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQorICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZl
RXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzID49IDApOyB9CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFi
YXNlKCkgY29uc3QgIHsgcmV0dXJuICptX2RhdGFiYXNlOyB9CisKKyAgICB2b2lkIHNjaGVkdWxl
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYp
OworICAgIHZvaWQgc2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJik7CisgICAgdm9pZCBzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFk
YXRhJik7CisgICAgdm9pZCBzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOworICAgIHZvaWQgc2NoZWR1bGVE
ZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmKTsKKyAgICB2b2lkIHNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKKyAgICB2b2lkIHNjaGVkdWxlUHV0T3BlcmF0aW9uKGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+Jik7CisgICAgdm9pZCBzY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
bihzaXplX3QgaW5kZXhDb3VudCk7CisgICAgdm9pZCBzY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRp
b24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JU
eXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pOworICAgIHZvaWQgc2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBzY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRp
b24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisg
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworcHJpdmF0ZToKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiwgaW50NjRfdCBpZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CisKKyAgICBlbnVtIFN0
YXRlIHsKKyAgICAgICAgVW5vcGVuZWQsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90
IHlldCBjcmVhdGVkLgorICAgICAgICBVbnVzZWQsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rp
b24gY3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KKyAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBF
bnF1ZXVlZCB0YXNrcywgYnV0IGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFy
dGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0
ZWQgYnV0IG5vdCB5ZXQgZmluaXNoZWQuCisgICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJv
cnRlZCBvciBjb21taXR0ZWQuCisgICAgfTsKKworICAgIHZvaWQgc3RhcnQoKTsKKworICAgIGJv
b2wgaXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0OworICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkg
Y29uc3Q7CisKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CisgICAgdm9pZCBjbG9zZU9wZW5D
dXJzb3JzKCk7CisKKyAgICBjb25zdCBIYXNoU2V0PGludDY0X3Q+IG1fb2JqZWN0U3RvcmVJZHM7
CisgICAgY29uc3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOworCisgICAgU3Rh
dGUgbV9zdGF0ZTsKKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmQ+IG1fZGF0YWJhc2U7CisKKyAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxJREJPcGVyYXRpb24+
PiBUYXNrUXVldWU7CisgICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBt
X3ByZWVtcHRpdmVUYXNrUXVldWU7CisgICAgRGVxdWU8UmVmUHRyPElEQlN5bmNocm9ub3VzT3Bl
cmF0aW9uPj4gbV9hYm9ydFRhc2tRdWV1ZTsKKworICAgIC8vIEZJWE1FOiBkZWxldGUgdGhlIHRp
bWVyIG9uY2Ugd2UgaGF2ZSB0aHJlYWRzIGluc3RlYWQuCisgICAgVGltZXIgbV90YXNrVGltZXI7
CisgICAgaW50IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHM7CisKKyAgICBIYXNoU2V0PElEQkN1
cnNvckJhY2tlbmQqPiBtX29wZW5DdXJzb3JzOworCisgICAgaW50NjRfdCBtX2lkOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ0ZjY4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9u
cy5jcHAKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIgorCisjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgi
CisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVy
LmgiCisjaW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2RlZmluZSBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSyBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IG9wZXJhdGlvbkNh
bGxiYWNrID0gXAorICAgIFtvcGVyYXRpb24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikgeyBcCisgICAgICAgIGlmIChlcnJvcikgXAorICAg
ICAgICAgICAgb3BlcmF0aW9uLT5tX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7IFwKKyAgICAg
ICAgY29tcGxldGlvbkNhbGxiYWNrKCk7IFwKKyAgICB9OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkNy
ZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJP
Ul9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVj
dGlvbigpLmNyZWF0ZU9iamVjdFN0b3JlKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9u
Q2FsbGJhY2spOworfQorCit2b2lkIENyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPENyZWF0ZUluZGV4T3Bl
cmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FM
TEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24o
KS5jcmVhdGVJbmRleCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsK
K30KKwordm9pZCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJRCwgbV9pbmRleElE
KTsKK30KKwordm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiRGVs
ZXRlSW5kZXhPcGVyYXRpb24iKTsKKworICAgIFJlZlB0cjxEZWxldGVJbmRleE9wZXJhdGlvbj4g
b3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwor
CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRl
SW5kZXgoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Cit9CisKK3Zv
aWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIik7CisgICAgbV90cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS5hZGRJbmRleChtX29iamVjdFN0b3JlSUQsIG1faW5kZXhNZXRhZGF0YSwgSURC
SW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKK30KKwordm9pZCBHZXRPcGVyYXRpb246OnBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIkdldE9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPEdldE9wZXJhdGlvbj4g
b3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwor
CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0KCpt
X3RyYW5zYWN0aW9uLCAqdGhpcywgW3RoaXMsIG9wZXJhdGlvbiwgb3BlcmF0aW9uQ2FsbGJhY2td
KGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IHBycEVycm9yKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBy
cEVycm9yOworCisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKGVycm9yKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC52
YWx1ZUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQua2V5RGF0YS5pc051bGwp
CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
cmVzdWx0LmtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmtleURhdGEuaXNOdWxsKQorICAgICAgICAg
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHJlc3VsdC52YWx1ZUJ1ZmZlciwgcmVz
dWx0LmtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKSwgcmVzdWx0LmtleVBhdGgpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhyZXN1bHQudmFsdWVCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgb3BlcmF0aW9uQ2FsbGJhY2soZXJyb3IucmVsZWFzZSgpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlB1dE9wZXJhdGlvbiIpOwor
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGU6OlJlYWRPbmx5KTsKKyAgICBBU1NFUlQobV9pbmRleElEcy5zaXplKCkgPT0gbV9pbmRl
eEtleXMuc2l6ZSgpKTsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLnB1dCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIFt0aGlzLCBjb21wbGV0aW9uQ2Fs
bGJhY2tdKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gcHJwRXJyb3IpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0g
cHJwRXJyb3I7CisgICAgICAgIGlmIChrZXkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZXJyb3Ip
OworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKGVycm9yKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tz
LT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2so
KTsKKyAgICB9KTsKK30KKwordm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2luZGV4Q291bnQ7ICsraSkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGlk
Q29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoY29tcGxl
dGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJPcGVuQ3Vyc29yT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8T3BlbkN1cnNvck9w
ZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3Bl
cmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKGludDY0X3QgY3Vyc29ySUQsIFBhc3NSZWZQdHI8
SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25F
cnJvcihlcnJvcik7CisgICAgICAgIH0gZWxzZSBpZiAoIWtleSkgeworICAgICAgICAgICAgLy8g
SWYgdGhlcmUncyBubyBlcnJvciBidXQgYWxzbyBubyBrZXksIHRoZW4gdGhlIGN1cnNvciBoYWQg
bm8gcmVjb3Jkcy4KKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nh
c3Q8U2hhcmVkQnVmZmVyKj4obnVsbHB0cikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmQ6OmNy
ZWF0ZShjdXJzb3JJRCwgbV9jdXJzb3JUeXBlLCBtX3Rhc2tUeXBlLCAqbV90cmFuc2FjdGlvbiwg
bV9vYmplY3RTdG9yZUlEKTsKKyAgICAgICAgICAgIGN1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShr
ZXkuZ2V0KCksIHByaW1hcnlLZXkuZ2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVhc2UoKSk7CisgICAgICAgIH0K
KworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9OworCisgICAgbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkub3BlbkN1cnNvcigqbV90cmFuc2Fj
dGlvbiwgKnRoaXMsIGNhbGxiYWNrKTsKK30KKwordm9pZCBDb3VudE9wZXJhdGlvbjo6cGVyZm9y
bShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhT
dG9yYWdlQVBJLCAiQ291bnRPcGVyYXRpb24iKTsKKworICAgIFJlZlB0cjxDb3VudE9wZXJhdGlv
bj4gb3BlcmF0aW9uKHRoaXMpOworICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9u
LCBjb21wbGV0aW9uQ2FsbGJhY2tdKGludDY0X3QgY291bnQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pIHsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBMZXZlbERCIHBvcnQgbmV2ZXIgaGFk
IGFuIGVycm9yIGNvbmRpdGlvbiBmb3IgdGhlIGNvdW50IG9wZXJhdGlvbi4KKyAgICAgICAgLy8g
V2UgcHJvYmFibHkgbmVlZCB0byBzdXBwb3J0IGFuIGVycm9yIGZvciB0aGUgY291bnQgb3BlcmF0
aW9uLCBicmVha2luZyB0aGUgTGV2ZWxEQiBwb3J0LgorICAgICAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKGNvdW50KTsKKworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9Owor
CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY291bnQo
Km1fdHJhbnNhY3Rpb24sICp0aGlzLCBjYWxsYmFjayk7Cit9CisKK3ZvaWQgRGVsZXRlUmFuZ2VP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7CisKKyAg
ICBSZWZQdHI8RGVsZXRlUmFuZ2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBhdXRv
IGNhbGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAg
ICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworCisgICAgICAgIGNvbXBsZXRpb25DYWxs
YmFjaygpOworICAgIH07CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNv
bm5lY3Rpb24oKS5kZWxldGVSYW5nZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIGNhbGxiYWNrKTsK
K30KKwordm9pZCBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJD
bGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8Q2xlYXJPYmplY3RTdG9y
ZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworCisgICAgYXV0byBjbGVhckNhbGxiYWNrID0g
W3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IHBycEVycm9yKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBl
cnJvciA9IHBycEVycm9yOworCisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJv
cnQoZXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKCk7CisKKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7CisgICAg
fTsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNs
ZWFyT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBjbGVhckNhbGxiYWNrKTsKK30K
Kwordm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKKworICAgIFJlZlB0cjxEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9S
X0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVsZXRlT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25D
YWxsYmFjayk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3Bl
cmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2sp
Cit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIik7CisKKyAg
ICB1aW50NjRfdCBvbGRWZXJzaW9uID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5tZXRhZGF0
YSgpLnZlcnNpb247CisgICAgaWYgKG9sZFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6
Tm9JbnRWZXJzaW9uKQorICAgICAgICBvbGRWZXJzaW9uID0gMDsKKworICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmVyc2lvbikgPiBvbGRWZXJzaW9u
KTsKKworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KT4gb3BlcmF0aW9uQ2FsbGJhY2sgPSBbb2xkVmVyc2lvbiwgb3BlcmF0aW9uLCB0aGlzLCBjb21w
bGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsK
KyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7CisgICAg
ICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3Ip
OworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmhhc1Bl
bmRpbmdTZWNvbmRIYWxmT3BlbigpKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2V0Q3VycmVudFZlcnNpb24obV92ZXJzaW9uKTsKKyAgICAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKHN0ZDo6bWFrZV91bmlx
dWU8SURCUGVuZGluZ09wZW5DYWxsPigqbV9jYWxsYmFja3MsICptX2RhdGFiYXNlQ2FsbGJhY2tz
LCBtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX3ZlcnNpb24pKTsKKyAgICAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgJm1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkubWV0YWRhdGEoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7CisgICAgfTsKKworICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNoYW5nZURhdGFiYXNlVmVyc2lvbigqbV90
cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQ
SSwgIkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKKyAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnJlbW92ZU9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVJRCk7Cit9CisKK3Zv
aWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIik7CisgICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5hZGRPYmplY3RTdG9yZShtX29iamVjdFN0b3JlTWV0YWRh
dGEsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQorewor
ICAgIExPRyhTdG9yYWdlQVBJLCAiVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIik7CisgICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXRDdXJyZW50VmVyc2lvbihtX3ByZXZpb3VzSW50
VmVyc2lvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRP
cGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxMDk3OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaAorI2Rl
ZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zX2gKKworI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCU2VydmVyQ29ubmVjdGlvbjsKKworY2xh
c3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
c3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29iamVj
dFN0b3JlTWV0YWRhdGE7IH0KKworcHJpdmF0ZToKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0
b3JlTWV0YWRhdGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOworfTsKKworY2xhc3MgRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24s
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
bih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVy
cmlkZSBmaW5hbDsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CisgICAgY29uc3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmVNZXRhZGF0YTsgfQorCitwcml2YXRlOgorICAgIERlbGV0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0
U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZDo6
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxi
YWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZlcnNpb25DaGFuZ2VP
cGVyYXRpb24odHJhbnNhY3Rpb24sIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQo
KTsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQor
ICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBWZXJzaW9u
Q2hhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0
X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKKyAg
ICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwgbV9kYXRhYmFzZUNhbGxi
YWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsK
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCitjbGFzcyBDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVh
dGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFsOworcHJpdmF0ZToKKyAgICBD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5z
YWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworfTsKKworY2xhc3Mg
RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmUpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBvdmVycmlk
ZSBmaW5hbDsKK3ByaXZhdGU6CisgICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0
YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IG1fdHJhbnNhY3Rpb247CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3Jl
TWV0YWRhdGE7Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9u
LCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgcHJldmlv
dXNWZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oKSBvdmVycmlkZSBmaW5hbDsKK3ByaXZhdGU6CisgICAgVmVyc2lvbkNoYW5nZUFi
b3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0
cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKKyAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1fcHJldmlvdXNWZXJz
aW9uKHByZXZpb3VzVmVyc2lvbikKKyAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihwcmV2
aW91c0ludFZlcnNpb24pCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9uOwor
ICAgIGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247Cit9OworCitjbGFzcyBDcmVhdGVJbmRl
eE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlSW5kZXhP
cGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nl
c3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KKyAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpZGJJbmRleE1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleE1ldGFkYXRh
OyB9CisKK3ByaXZhdGU6CisgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAg
ICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4
TWV0YWRhdGE7Cit9OworCitjbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGlj
IElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQlN5
bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKCkgb3ZlcnJpZGUgZmluYWw7Citwcml2YXRlOgorICAgIENyZWF0ZUluZGV4QWJv
cnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAg
ICAgICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKK307CisK
K2NsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0
X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAg
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4TWV0YWRhdGE7IH0KKworcHJpdmF0ZToKKyAgICBEZWxldGVJbmRleE9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0
U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlv
bjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisKK2NsYXNzIERlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkg
b3ZlcnJpZGUgZmluYWw7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0
b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgewor
ICAgIH0KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247
CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCitjbGFzcyBHZXRPcGVyYXRpb24gOiBwdWJs
aWMgSURCT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4g
Y3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29y
VHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2V0T3BlcmF0aW9uKHRyYW5zYWN0aW9u
LCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUs
IGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGludDY0
X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAg
IGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRDsgfQorICAgIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JUeXBl
OyB9CisgICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5n
ZS5nZXQoKTsgfQorICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0
b0luY3JlbWVudDsgfQorICAgIElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UGF0aDsgfQorCitwcml2YXRlOgorICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1faW5kZXhJRChpbmRleElkKQorICAgICAgICAsIG1fa2V5UGF0aChtZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCisgICAgICAgICwgbV9hdXRv
SW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0b0lu
Y3JlbWVudCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY3Vy
c29yVHlwZShjdXJzb3JUeXBlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOworICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmpl
Y3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IGludDY0X3QgbV9v
YmplY3RTdG9yZUlEOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOworICAgIGNvbnN0IElE
QktleVBhdGggbV9rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAg
IGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJbmRleGVk
REI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElEQk9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4
S2V5cykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKKworICAgIElEQkRhdGFiYXNl
QmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wdXRNb2RlOyB9Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUoKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdFN0b3JlOyB9CisgICAgSURCS2V5KiBrZXkoKSBjb25zdCB7IHJldHVybiBt
X2tleS5nZXQoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4SURzOyB9CisgICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhLZXlzOyB9CisgICAgU2hhcmVkQnVmZmVy
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAg
ICBQdXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwg
bV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAg
ICAgICAsIG1fa2V5KGtleSkKKyAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKKyAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwgbV9pbmRleElEcyhpbmRleElkcykK
KyAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCisgICAgeworICAgIH0KKworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1fdmFsdWU7CisgICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7CisgICAg
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIG1fcHV0TW9kZTsKKyAgICBjb25zdCBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBjb25zdCBWZWN0b3I8aW50NjRf
dD4gbV9pbmRleElEczsKKyAgICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiBtX2luZGV4S2V5czsK
K307CisKK2NsYXNzIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRp
b24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24odHJh
bnNhY3Rpb24sIGluZGV4Q291bnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Citw
cml2YXRlOgorICAgIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhDb3VudCkKKyAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAsIG1faW5kZXhDb3VudChpbmRleENvdW50KQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uOworICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7Cit9OworCitjbGFzcyBPcGVuQ3Vy
c29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRl
IGZpbmFsOworCisgICAgaW50NjRfdCB0cmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbi0+aWQoKTsgfQorICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhJRDsgfQorICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgSW5kZXhlZERCOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KKyAgICBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
YXNrVHlwZTsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UmFuZ2UuZ2V0KCk7IH0KKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorCitwcml2YXRlOgorICAg
IE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlE
KG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCisgICAgICAgICwg
bV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisg
ICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV90YXNrVHlwZSh0
YXNrVHlwZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0K
KworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CisgICAg
Y29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4
SUQ7CisgICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBj
b25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBjb25zdCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IElEQkRhdGFiYXNl
QmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDb3VudE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBm
aW5hbDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmVJRDsgfQorICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXhJRDsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
UmFuZ2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBDb3VudE9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlv
bikKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBt
X2luZGV4SUQoaW5kZXhJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKKyAgICBjb25zdCBS
ZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1
YmxpYyBJREJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9u
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBrZXlS
YW5nZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOworCisgICAg
aW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9
CisgICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5nZS5n
ZXQoKTsgfQorCitwcml2YXRlOgorICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX29i
amVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdl
KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1f
a2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9
OworCitjbGFzcyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZUlkLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7CisKKyAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbi5nZXQoKTsgfQorICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorCitwcml2YXRlOgorICAgIENsZWFyT2JqZWN0U3Rv
cmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlE
KG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9u
OworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAgIGNvbnN0IFJlZlB0cjxJ
REJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjZW5kaWYgLy8gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9uc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2OWUwYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6SURCVHJhbnNhY3Rp
b25Db29yZGluYXRvcigpCit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKK3sKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b24pKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRTdGFydFRyYW5zYWN0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBtX3F1ZXVlZFRyYW5zYWN0
aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQobV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKworICAgIGlmIChtX3F1ZXVlZFRy
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0
YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKyAgICAgICAgbV9xdWV1
ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2UgaWYgKG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAgIG1fc3RhcnRl
ZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgbV90cmFuc2FjdGlvbnMu
cmVtb3ZlKHRyYW5zYWN0aW9uKTsKKworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7
Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBWZXJpZmllcyBpbnRlcm5hbCBjb25zaXN0aWVuY3kg
d2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCitib29sIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24pCit7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGlmIChtX3F1ZXVlZFRyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAg
ICAgICBBU1NFUlQoIWZvdW5kKTsKKyAgICAgICAgZm91bmQgPSB0cnVlOworICAgIH0KKyAgICBB
U1NFUlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKyAg
ICByZXR1cm4gZm91bmQ7Cit9CisjZW5kaWYKKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpCit7CisgICAgaWYgKG1fcXVldWVkVHJh
bnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwgKCptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVn
aW4oKSktPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5n
ZSk7CisKKyAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdpbigpOworICAgIHdoaWxlIChpdCAh
PSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uID0gKml0OworICAgICAgICArK2l0OworICAgICAgICBpZiAoY2Fu
UnVuVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKSB7CisgICAgICAgICAgICBtX3F1ZXVlZFRyYW5z
YWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworICAgICAgICAgICAgbV9zdGFydGVkVHJhbnNh
Y3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+cnVuKCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBBU1NFUlQobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsK
KworICAgIFVOVVNFRF9QQVJBTSh0cmFuc2FjdGlvbik7CisgICAgcmV0dXJuICFtX3N0YXJ0ZWRU
cmFuc2FjdGlvbnMuc2l6ZSgpOworfQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDU1NDM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ7CisKKy8vIFRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRo
ZSB3ZXJlIGNyZWF0ZWQuCitjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsKK3B1Ymxp
YzoKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CisgICAgdmlydHVhbCB+SURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcigpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRyYW5zYWN0aW9ucyBh
cyB0aGV5IHN0YXJ0IGFuZCBmaW5pc2guCisgICAgdm9pZCBkaWRDcmVhdGVUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7CisgICAgdm9pZCBkaWRGaW5pc2hUcmFuc2Fj
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBib29s
IGlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOworI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOworICAgIGJvb2wgY2FuUnVuVHJh
bnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7CisKKyAgICAvLyBUaGlzIGlzIGp1c3Qg
YW4gZWZmaWNpZW50IHdheSB0byBrZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4K
KyAgICBIYXNoTWFwPElEQlRyYW5zYWN0aW9uQmFja2VuZCosIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+ID4gbV90cmFuc2FjdGlvbnM7CisgICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZl
cmVudCBzdGF0ZXMgYXJlIGdyb3VwZWQgYmVsb3cuCisgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kKj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7CisgICAgSGFzaFNldDxJREJUcmFu
c2FjdGlvbkJhY2tlbmQqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2Vu
ZGlmIC8vIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU4OWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHAKQEAgLTAsMCAr
MSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5QW55
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmlu
Z0xpc3QuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiTGVnYWN5Q3Vyc29y
V2l0aFZhbHVlLmgiCisjaW5jbHVkZSAiTGVnYWN5RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMZWdh
Y3lGYWN0b3J5LmgiCisjaW5jbHVkZSAiTGVnYWN5SW5kZXguaCIKKyNpbmNsdWRlICJMZWdhY3lP
YmplY3RTdG9yZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TGVnYWN5
QW55PiBMZWdhY3lBbnk6OmNyZWF0ZUludmFsaWQoKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTGVnYWN5QW55KFVuZGVmaW5lZFR5cGUpKTsKK30KKworUGFzc1JlZlB0cjxMZWdhY3lBbnk+
IExlZ2FjeUFueTo6Y3JlYXRlTnVsbCgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZWdh
Y3lBbnkoTnVsbFR5cGUpKTsKK30KKworUGFzc1JlZlB0cjxMZWdhY3lBbnk+IExlZ2FjeUFueTo6
Y3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBMZWdhY3lBbnkodmFsdWUpKTsKK30KKworTGVnYWN5QW55OjpMZWdhY3lBbnkoVHlwZSB0
eXBlKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKKyAgICBBU1NF
UlQodHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8IHR5cGUgPT0gTnVsbFR5cGUpOworfQorCitMZWdh
Y3lBbnk6On5MZWdhY3lBbnkoKQoreworfQorCitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IExl
Z2FjeUFueTo6ZG9tU3RyaW5nTGlzdCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBET01TdHJp
bmdMaXN0VHlwZSk7CisgICAgcmV0dXJuIG1fZG9tU3RyaW5nTGlzdDsKK30KKworUGFzc1JlZlB0
cjxJREJDdXJzb3I+IExlZ2FjeUFueTo6aWRiQ3Vyc29yKCkKK3sKKyAgICBBU1NFUlQobV90eXBl
ID09IElEQkN1cnNvclR5cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNvcjsKK30KKworUGFzc1Jl
ZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IExlZ2FjeUFueTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvcldpdGhWYWx1ZVR5cGUpOworICAgIHJl
dHVybiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKK30KKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4g
TGVnYWN5QW55OjppZGJEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJEYXRh
YmFzZVR5cGUpOworICAgIHJldHVybiBtX2lkYkRhdGFiYXNlOworfQorCitQYXNzUmVmUHRyPElE
QkZhY3Rvcnk+IExlZ2FjeUFueTo6aWRiRmFjdG9yeSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBJREJGYWN0b3J5VHlwZSk7CisgICAgcmV0dXJuIG1faWRiRmFjdG9yeTsKK30KKworUGFzc1Jl
ZlB0cjxJREJJbmRleD4gTGVnYWN5QW55OjppZGJJbmRleCgpCit7CisgICAgQVNTRVJUKG1fdHlw
ZSA9PSBJREJJbmRleFR5cGUpOworICAgIHJldHVybiBtX2lkYkluZGV4OworfQorCitQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBMZWdhY3lBbnk6OmlkYk9iamVjdFN0b3JlKCkKK3sKKyAgICBB
U1NFUlQobV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7CisgICAgcmV0dXJuIG1faWRiT2Jq
ZWN0U3RvcmU7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeUFueTo6aWRi
VHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCVHJhbnNhY3Rpb25UeXBl
KTsKKyAgICByZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKK30KKworY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIExlZ2FjeUFueTo6c2NyaXB0VmFsdWUoKQoreworICAgIEFTU0VSVChtX3R5
cGUgPT0gU2NyaXB0VmFsdWVUeXBlKTsKKyAgICByZXR1cm4gbV9zY3JpcHRWYWx1ZTsKK30KKwor
Y29uc3QgU3RyaW5nJiBMZWdhY3lBbnk6OnN0cmluZygpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9CisKK2ludDY0X3QgTGVnYWN5
QW55OjppbnRlZ2VyKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IEludGVnZXJUeXBlKTsKKyAg
ICByZXR1cm4gbV9pbnRlZ2VyOworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IHZhbHVlKQorICAgIDogbV90eXBlKERPTVN0cmluZ0xpc3RUeXBlKQor
ICAgICwgbV9kb21TdHJpbmdMaXN0KHZhbHVlKQorICAgICwgbV9pbnRlZ2VyKDApCit7Cit9CisK
K0xlZ2FjeUFueTo6TGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiB2
YWx1ZSkKKyAgICA6IG1fdHlwZShJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQorICAgICwgbV9pZGJD
dXJzb3JXaXRoVmFsdWUodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5
QW55OjpMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+IHZhbHVlKQorICAgIDogbV90
eXBlKElEQkN1cnNvclR5cGUpCisgICAgLCBtX2lkYkN1cnNvcih2YWx1ZSkKKyAgICAsIG1faW50
ZWdlcigwKQoreworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeURh
dGFiYXNlPiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJEYXRhYmFzZVR5cGUpCisgICAgLCBtX2lk
YkRhdGFiYXNlKHZhbHVlKQorICAgICwgbV9pbnRlZ2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6
TGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5RmFjdG9yeT4gdmFsdWUpCisgICAgOiBtX3R5cGUo
SURCRmFjdG9yeVR5cGUpCisgICAgLCBtX2lkYkZhY3RvcnkodmFsdWUpCisgICAgLCBtX2ludGVn
ZXIoMCkKK3sKK30KKworTGVnYWN5QW55OjpMZWdhY3lBbnkoUGFzc1JlZlB0cjxMZWdhY3lJbmRl
eD4gdmFsdWUpCisgICAgOiBtX3R5cGUoSURCSW5kZXhUeXBlKQorICAgICwgbV9pZGJJbmRleCh2
YWx1ZSkKKyAgICAsIG1faW50ZWdlcigwKQoreworfQorCitMZWdhY3lBbnk6OkxlZ2FjeUFueShQ
YXNzUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJUcmFu
c2FjdGlvblR5cGUpCisgICAgLCBtX2lkYlRyYW5zYWN0aW9uKHZhbHVlKQorICAgICwgbV9pbnRl
Z2VyKDApCit7Cit9CisKK0xlZ2FjeUFueTo6TGVnYWN5QW55KFBhc3NSZWZQdHI8TGVnYWN5T2Jq
ZWN0U3RvcmU+IHZhbHVlKQorICAgIDogbV90eXBlKElEQk9iamVjdFN0b3JlVHlwZSkKKyAgICAs
IG1faWRiT2JqZWN0U3RvcmUodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVn
YWN5QW55OjpMZWdhY3lBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQor
ICAgIDogbV90eXBlKFNjcmlwdFZhbHVlVHlwZSkKKyAgICAsIG1fc2NyaXB0VmFsdWUodmFsdWUp
CisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5QW55OjpMZWdhY3lBbnkoY29uc3Qg
SURCS2V5UGF0aCYgdmFsdWUpCisgICAgOiBtX3R5cGUoS2V5UGF0aFR5cGUpCisgICAgLCBtX2lk
YktleVBhdGgodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5QW55OjpM
ZWdhY3lBbnkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICA6IG1fdHlwZShTdHJpbmdUeXBlKQor
ICAgICwgbV9zdHJpbmcodmFsdWUpCisgICAgLCBtX2ludGVnZXIoMCkKK3sKK30KKworTGVnYWN5
QW55OjpMZWdhY3lBbnkoaW50NjRfdCB2YWx1ZSkKKyAgICA6IG1fdHlwZShJbnRlZ2VyVHlwZSkK
KyAgICAsIG1faW50ZWdlcih2YWx1ZSkKK3sKK30KKworTGVnYWN5Q3Vyc29yKiBMZWdhY3lBbnk6
OmxlZ2FjeUN1cnNvcigpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JUeXBlKTsK
KyAgICByZXR1cm4gbV9pZGJDdXJzb3IuZ2V0KCk7Cit9CisKK0xlZ2FjeUN1cnNvcldpdGhWYWx1
ZSogTGVnYWN5QW55OjpsZWdhY3lDdXJzb3JXaXRoVmFsdWUoKQoreworICAgIEFTU0VSVChtX3R5
cGUgPT0gSURCQ3Vyc29yV2l0aFZhbHVlVHlwZSk7CisgICAgcmV0dXJuIG1faWRiQ3Vyc29yV2l0
aFZhbHVlLmdldCgpOworfQorCitMZWdhY3lEYXRhYmFzZSogTGVnYWN5QW55OjpsZWdhY3lEYXRh
YmFzZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJEYXRhYmFzZVR5cGUpOworICAgIHJl
dHVybiBtX2lkYkRhdGFiYXNlLmdldCgpOworfQorCitMZWdhY3lGYWN0b3J5KiBMZWdhY3lBbnk6
OmxlZ2FjeUZhY3RvcnkoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCRmFjdG9yeVR5cGUp
OworICAgIHJldHVybiBtX2lkYkZhY3RvcnkuZ2V0KCk7Cit9CisKK0xlZ2FjeUluZGV4KiBMZWdh
Y3lBbnk6OmxlZ2FjeUluZGV4KCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkluZGV4VHlw
ZSk7CisgICAgcmV0dXJuIG1faWRiSW5kZXguZ2V0KCk7Cit9CisKK0xlZ2FjeU9iamVjdFN0b3Jl
KiBMZWdhY3lBbnk6OmxlZ2FjeU9iamVjdFN0b3JlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09
IElEQk9iamVjdFN0b3JlVHlwZSk7CisgICAgcmV0dXJuIG1faWRiT2JqZWN0U3RvcmUuZ2V0KCk7
Cit9CisKK0xlZ2FjeVRyYW5zYWN0aW9uKiBMZWdhY3lBbnk6OmxlZ2FjeVRyYW5zYWN0aW9uKCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQlRyYW5zYWN0aW9uVHlwZSk7CisgICAgcmV0dXJu
IG1faWRiVHJhbnNhY3Rpb24uZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2YWIwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lBbnkuaApAQCAtMCwwICsxLDE0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5QW55X2gKKyNkZWZpbmUgTGVnYWN5QW55X2gKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5j
bHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1
ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgSURCQ3Vyc29yOworY2xhc3MgSURCQ3Vyc29yV2l0
aFZhbHVlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJGYWN0b3J5OworY2xhc3MgSURC
SW5kZXg7CitjbGFzcyBJREJLZXlQYXRoOworY2xhc3MgSURCT2JqZWN0U3RvcmU7CitjbGFzcyBJ
REJUcmFuc2FjdGlvbjsKKworY2xhc3MgTGVnYWN5Q3Vyc29yOworY2xhc3MgTGVnYWN5Q3Vyc29y
V2l0aFZhbHVlOworY2xhc3MgTGVnYWN5RGF0YWJhc2U7CitjbGFzcyBMZWdhY3lGYWN0b3J5Owor
Y2xhc3MgTGVnYWN5SW5kZXg7CitjbGFzcyBMZWdhY3lPYmplY3RTdG9yZTsKK2NsYXNzIExlZ2Fj
eVRyYW5zYWN0aW9uOworCitjbGFzcyBMZWdhY3lBbnkgOiBwdWJsaWMgSURCQW55IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZUludmFsaWQoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZU51bGwoKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeUFueT4gY3Jl
YXRlKFQqIGlkYk9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGVn
YWN5QW55KGlkYk9iamVjdCkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeUFueT4gY3JlYXRlKGNvbnN0IFQmIGlkYk9iamVjdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGVnYWN5QW55KGlkYk9iamVjdCkp
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExlZ2FjeUFueT4gY3JlYXRlKFBhc3NSZWZQdHI8VD4gaWRiT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZWdhY3lBbnkoaWRiT2JqZWN0KSk7CisgICAgfQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExlZ2FjeUFueT4gY3JlYXRlKGludDY0X3QgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExlZ2FjeUFueSh2YWx1ZSkpOworICAgIH0K
KyAgICB+TGVnYWN5QW55KCk7CisKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJy
aWRlIGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIC8vIFVzZSB0eXBlKCkgdG8gZmlndXJl
IG91dCB3aGljaCBvbmUgb2YgdGhlc2UgeW91J3JlIGFsbG93ZWQgdG8gY2FsbC4KKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCgpIG92ZXJyaWRlIGZp
bmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNvcigpIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlk
YkN1cnNvcldpdGhWYWx1ZSgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpIG92ZXJyaWRlIGZpbmFsOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKSBvdmVycmlkZSBmaW5hbDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCkg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBp
ZGJUcmFuc2FjdGlvbigpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmly
dHVhbCBpbnQ2NF90IGludGVnZXIoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKCkgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9pZGJLZXlQYXRoOyB9
OworCisgICAgTGVnYWN5Q3Vyc29yKiBsZWdhY3lDdXJzb3IoKTsKKyAgICBMZWdhY3lDdXJzb3JX
aXRoVmFsdWUqIGxlZ2FjeUN1cnNvcldpdGhWYWx1ZSgpOworICAgIExlZ2FjeURhdGFiYXNlKiBs
ZWdhY3lEYXRhYmFzZSgpOworICAgIExlZ2FjeUZhY3RvcnkqIGxlZ2FjeUZhY3RvcnkoKTsKKyAg
ICBMZWdhY3lJbmRleCogbGVnYWN5SW5kZXgoKTsKKyAgICBMZWdhY3lPYmplY3RTdG9yZSogbGVn
YWN5T2JqZWN0U3RvcmUoKTsKKyAgICBMZWdhY3lUcmFuc2FjdGlvbiogbGVnYWN5VHJhbnNhY3Rp
b24oKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoVHlwZSk7CisgICAgZXhw
bGljaXQgTGVnYWN5QW55KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOworICAgIGV4cGxpY2l0
IExlZ2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeUN1cnNvcj4pOworICAgIGV4cGxpY2l0IExlZ2Fj
eUFueShQYXNzUmVmUHRyPExlZ2FjeUN1cnNvcldpdGhWYWx1ZT4pOworICAgIGV4cGxpY2l0IExl
Z2FjeUFueShQYXNzUmVmUHRyPExlZ2FjeURhdGFiYXNlPik7CisgICAgZXhwbGljaXQgTGVnYWN5
QW55KFBhc3NSZWZQdHI8TGVnYWN5RmFjdG9yeT4pOworICAgIGV4cGxpY2l0IExlZ2FjeUFueShQ
YXNzUmVmUHRyPExlZ2FjeUluZGV4Pik7CisgICAgZXhwbGljaXQgTGVnYWN5QW55KFBhc3NSZWZQ
dHI8TGVnYWN5T2JqZWN0U3RvcmU+KTsKKyAgICBleHBsaWNpdCBMZWdhY3lBbnkoUGFzc1JlZlB0
cjxMZWdhY3lUcmFuc2FjdGlvbj4pOworICAgIGV4cGxpY2l0IExlZ2FjeUFueShjb25zdCBJREJL
ZXlQYXRoJik7CisgICAgZXhwbGljaXQgTGVnYWN5QW55KGNvbnN0IFN0cmluZyYpOworICAgIGV4
cGxpY2l0IExlZ2FjeUFueShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgIGV4
cGxpY2l0IExlZ2FjeUFueShpbnQ2NF90KTsKKworICAgIGNvbnN0IFR5cGUgbV90eXBlOworCisg
ICAgLy8gT25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaG91bGQgZXZlciBiZSBpbiB1c2UgYXQg
YW55IGdpdmVuIHRpbWUuCisgICAgY29uc3QgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fZG9tU3Ry
aW5nTGlzdDsKKyAgICBjb25zdCBSZWZQdHI8TGVnYWN5Q3Vyc29yPiBtX2lkYkN1cnNvcjsKKyAg
ICBjb25zdCBSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBtX2lkYkN1cnNvcldpdGhWYWx1
ZTsKKyAgICBjb25zdCBSZWZQdHI8TGVnYWN5RGF0YWJhc2U+IG1faWRiRGF0YWJhc2U7CisgICAg
Y29uc3QgUmVmUHRyPExlZ2FjeUZhY3Rvcnk+IG1faWRiRmFjdG9yeTsKKyAgICBjb25zdCBSZWZQ
dHI8TGVnYWN5SW5kZXg+IG1faWRiSW5kZXg7CisgICAgY29uc3QgUmVmUHRyPExlZ2FjeU9iamVj
dFN0b3JlPiBtX2lkYk9iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0cjxMZWdhY3lUcmFuc2Fj
dGlvbj4gbV9pZGJUcmFuc2FjdGlvbjsKKyAgICBjb25zdCBJREJLZXlQYXRoIG1faWRiS2V5UGF0
aDsKKyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX3NjcmlwdFZhbHVlOworICAg
IGNvbnN0IFN0cmluZyBtX3N0cmluZzsKKyAgICBjb25zdCBpbnQ2NF90IG1faW50ZWdlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCisjZW5kaWYgLy8gTGVnYWN5QW55X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlOTU1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwCkBA
IC0wLDAgKzEsMjc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxl
Z2FjeUN1cnNvci5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRl
ICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
SURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgorI2luY2x1ZGUg
IklEQktleS5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlZjxMZWdhY3lDdXJzb3I+IExlZ2FjeUN1cnNvcjo6Y3JlYXRlKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b24gZGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiByZXF1ZXN0LCBMZWdhY3lBbnkqIHNvdXJjZSwg
TGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IExlZ2FjeUN1cnNvcihiYWNrZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJh
bnNhY3Rpb24pKTsKK30KKworTGVnYWN5Q3Vyc29yOjpMZWdhY3lDdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24sIExlZ2FjeVJlcXVlc3QqIHJlcXVlc3QsIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgOiBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAs
IG1fcmVxdWVzdChyZXF1ZXN0KQorICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICwg
bV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAs
IG1fdHJhbnNhY3Rpb25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKKyAgICAsIG1fZ290VmFs
dWUoZmFsc2UpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgQVNTRVJUKG1fcmVxdWVz
dCk7CisgICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9y
ZVR5cGUgfHwgbV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQkluZGV4VHlwZSk7CisgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb24pOworfQorCitMZWdhY3lDdXJzb3I6On5MZWdhY3lDdXJzb3Io
KQoreworfQorCitjb25zdCBTdHJpbmcmIExlZ2FjeUN1cnNvcjo6ZGlyZWN0aW9uKCkgY29uc3QK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6ZGlyZWN0aW9uIik7CisgICAg
cmV0dXJuIGRpcmVjdGlvblRvU3RyaW5nKG1fZGlyZWN0aW9uKTsKK30KKworY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIExlZ2FjeUN1cnNvcjo6a2V5KCkgY29uc3QKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6a2V5Iik7CisgICAgcmV0dXJuIG1fY3VycmVudEtl
eVZhbHVlOworfQorCitjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgTGVnYWN5Q3Vyc29y
OjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNv
cjo6cHJpbWFyeUtleSIpOworICAgIHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5VmFsdWU7Cit9
CisKK2NvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBMZWdhY3lDdXJzb3I6OnZhbHVlKCkg
Y29uc3QKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6dmFsdWUiKTsKKyAg
ICByZXR1cm4gbV9jdXJyZW50VmFsdWU7Cit9CisKK0lEQkFueSogTGVnYWN5Q3Vyc29yOjpzb3Vy
Y2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKK30KKworUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBMZWdhY3lDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6OnVwZGF0ZSIpOworCisgICAgaWYgKCFt
X2dvdFZhbHVlIHx8IGlzS2V5Q3Vyc29yKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKKyAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
ID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aDsKKyAgICBjb25zdCBib29sIHVzZXNJ
bkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxsKCk7CisgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7
CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKG1fcmVxdWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwgdmFs
dWUsIGtleVBhdGgpOworICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlz
RXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5wdXQoSURCRGF0YWJhc2VC
YWNrZW5kOjpDdXJzb3JVcGRhdGUsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFs
dWUsIG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKK30KKwordm9pZCBMZWdhY3lDdXJzb3I6OmFk
dmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMg
PSAwOworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5Q3Vyc29yOjphZHZhbmNlIik7CisgICAg
aWYgKCFtX2dvdFZhbHVlKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghY291bnQpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3JlcXVlc3QtPnNldFBlbmRpbmdDdXJzb3IodGhpcyk7CisgICAg
bV9nb3RWYWx1ZSA9IGZhbHNlOworICAgIG1fYmFja2VuZC0+YWR2YW5jZShjb3VudCwgbV9yZXF1
ZXN0LCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjpjb250
aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
RE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKKyAg
ICBjb250aW51ZUZ1bmN0aW9uKGtleS5yZWxlYXNlKCksIGVjKTsKK30KKwordm9pZCBMZWdhY3lD
dXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5Q3Vy
c29yOjpjb250aW51ZSIpOworICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fZ290VmFsdWUpIHsKKyAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5KSB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRL
ZXkpOworICAgICAgICBpZiAobV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b246Ok5leHQgfHwgbV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5l
eHROb0R1cGxpY2F0ZSkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRLZXktPmlzTGVzc1Ro
YW4oa2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWtleS0+aXNMZXNzVGhhbihtX2N1cnJl
bnRLZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6RGF0YUVycm9yOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRl
eHQgZnJvbSB3aGVuIGNvbnRpbnVlIHdhcyBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFj
aworICAgIC8vICAgICAgICB3aWxsIGJlIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJz
b3Igd2FzIGNhbGxlZCBvbi4gSXMgdGhpcyByaWdodD8KKyAgICBtX3JlcXVlc3QtPnNldFBlbmRp
bmdDdXJzb3IodGhpcyk7CisgICAgbV9nb3RWYWx1ZSA9IGZhbHNlOworICAgIG1fYmFja2VuZC0+
Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOworICAgIEFTU0VSVCghZWMpOwor
fQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgZWMgPSAwOworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5Q3Vyc29yOjpkZWxldGUiKTsK
KyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1
ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRo
aXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9u
KHJlcXVlc3QsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjpwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFj
aygpCit7CisgICAgbV9iYWNrZW5kLT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOworfQor
Cit2b2lkIExlZ2FjeUN1cnNvcjo6Y2xvc2UoKQoreworICAgIG1fdHJhbnNhY3Rpb25Ob3RpZmll
ci5jdXJzb3JGaW5pc2hlZCgpOworICAgIGlmIChtX3JlcXVlc3QpIHsKKyAgICAgICAgbV9yZXF1
ZXN0LT5maW5pc2hDdXJzb3IoKTsKKyAgICAgICAgbV9yZXF1ZXN0ID0gbnVsbHB0cjsKKyAgICB9
Cit9CisKK3ZvaWQgTGVnYWN5Q3Vyc29yOjpzZXRWYWx1ZVJlYWR5KERPTVJlcXVlc3RTdGF0ZSog
c3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUpCit7CisgICAgbV9jdXJyZW50S2V5
ID0ga2V5OworICAgIG1fY3VycmVudEtleVZhbHVlID0gaWRiS2V5VG9TY3JpcHRWYWx1ZShzdGF0
ZSwgbV9jdXJyZW50S2V5KTsKKworICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBwcmltYXJ5S2V5
OworICAgIG1fY3VycmVudFByaW1hcnlLZXlWYWx1ZSA9IGlkYktleVRvU2NyaXB0VmFsdWUoc3Rh
dGUsIG1fY3VycmVudFByaW1hcnlLZXkpOworCisgICAgaWYgKCFpc0tleUN1cnNvcigpKSB7Cisg
ICAgICAgIFJlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVP
YmplY3RTdG9yZSgpOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFk
YXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7CisgICAgICAgIGlmIChtZXRhZGF0YS5hdXRv
SW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7CisjaWZuZGVmIE5ERUJV
RworICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlG
cm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKG1fcmVxdWVzdC0+cmVxdWVzdFN0YXRlKCktPmV4ZWMo
KSwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgQVNTRVJUKCFleHBlY3Rl
ZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSk7
CisjZW5kaWYKKyAgICAgICAgICAgIGJvb2wgaW5qZWN0ZWQgPSBpbmplY3RJREJLZXlJbnRvU2Ny
aXB0VmFsdWUobV9yZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKSwgbV9jdXJyZW50UHJpbWFyeUtleSwg
dmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlz
IG5vIHdheSB0byByZXBvcnQgZXJyb3JzIGhlcmUuIE1vdmUgdGhpcyBpbnRvIG9uU3VjY2Vzc1dp
dGhDb250aW51YXRpb24gc28gdGhhdCB3ZSBjYW4gYWJvcnQgdGhlIHRyYW5zYWN0aW9uIHRoZXJl
LiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3OAorICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChpbmplY3RlZCwgaW5qZWN0ZWQpOworICAgICAgICB9Cisg
ICAgfQorICAgIG1fY3VycmVudFZhbHVlID0gdmFsdWU7CisKKyAgICBtX2dvdFZhbHVlID0gdHJ1
ZTsKK30KKworUGFzc1JlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gTGVnYWN5Q3Vyc29yOjplZmZl
Y3RpdmVPYmplY3RTdG9yZSgpCit7CisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55
OjpJREJPYmplY3RTdG9yZVR5cGUpCisgICAgICAgIHJldHVybiBtX3NvdXJjZS0+bGVnYWN5T2Jq
ZWN0U3RvcmUoKTsKKyAgICBSZWZQdHI8TGVnYWN5SW5kZXg+IGluZGV4ID0gbV9zb3VyY2UtPmxl
Z2FjeUluZGV4KCk7CisgICAgcmV0dXJuIGluZGV4LT5sZWdhY3lPYmplY3RTdG9yZSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lDdXJzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRi
YjMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvci5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBM
ZWdhY3lDdXJzb3JfaAorI2RlZmluZSBMZWdhY3lDdXJzb3JfaAorCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRl
ICJJREJLZXkuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZWdhY3lPYmpl
Y3RTdG9yZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2Ny
aXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVJl
cXVlc3RTdGF0ZTsKK2NsYXNzIElEQkFueTsKK2NsYXNzIElEQkNhbGxiYWNrczsKK2NsYXNzIElE
QkN1cnNvckJhY2tlbmQ7CitjbGFzcyBMZWdhY3lSZXF1ZXN0OworY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgTGVnYWN5
Q3Vyc29yIDogcHVibGljIElEQkN1cnNvcldpdGhWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxMZWdhY3lDdXJzb3I+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+LCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgTGVnYWN5UmVxdWVzdCosIExlZ2FjeUFueSogc291
cmNlLCBMZWdhY3lUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgfkxlZ2FjeUN1cnNvcigpOwor
CisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAgICBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbigp
IGNvbnN0OworICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXkoKSBjb25zdDsK
KyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgcHJpbWFyeUtleSgpIGNvbnN0Owor
ICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0OworICAgIElE
QkFueSogc291cmNlKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0
ZShKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgb3Zl
cmxvYWQgaXMgdW5uZWVkZWQuCisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJiBlYykgeyBjb250aW51ZUZ1bmN0aW9uKHN0YXRp
Y19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICB2b2lkIGNvbnRpbnVlRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOworICAgIHZvaWQgY2xv
c2UoKTsKKyAgICB2b2lkIHNldFZhbHVlUmVhZHkoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gaWRiUHJpbWFyeUtleSgpIHsgcmV0
dXJuIG1fY3VycmVudFByaW1hcnlLZXk7IH0KKworcHJvdGVjdGVkOgorICAgIExlZ2FjeUN1cnNv
cihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
biwgTGVnYWN5UmVxdWVzdCosIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lUcmFuc2FjdGlvbiop
OworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiBlZmZlY3RpdmVP
YmplY3RTdG9yZSgpOworCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IG1fYmFja2VuZDsK
KyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gbV9yZXF1ZXN0OworICAgIGNvbnN0IEluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIFJlZlB0cjxMZWdhY3lBbnk+IG1f
c291cmNlOworICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAg
ICBMZWdhY3lUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyIG1fdHJhbnNhY3Rpb25Ob3Rp
ZmllcjsKKyAgICBib29sIG1fZ290VmFsdWU7CisgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBoZWxk
IGJlY2F1c2UgbV9iYWNrZW5kIG1heSBhZHZhbmNlIHdoaWxlIHRoZXkKKyAgICAvLyBhcmUgc3Rp
bGwgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHN1Y2Nlc3MgaGFuZGxlcnMuCisgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgbV9jdXJyZW50S2V5VmFsdWU7CisgICAgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUgbV9jdXJyZW50UHJpbWFyeUtleVZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IG1fY3Vy
cmVudEtleTsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRQcmltYXJ5S2V5OworICAgIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudFZhbHVlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIExlZ2FjeUN1cnNvcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29y
V2l0aFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9M
ZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjMxY2QxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcApAQCAtMCwwICsxLDU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxlZ2FjeUN1cnNvcldpdGhW
YWx1ZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJD
dXJzb3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IExlZ2FjeUN1cnNvcldpdGhW
YWx1ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiByZXF1ZXN0LCBM
ZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlKGJhY2tlbmQsIGRpcmVj
dGlvbiwgcmVxdWVzdCwgc291cmNlLCB0cmFuc2FjdGlvbikpOworfQorCitQYXNzUmVmUHRyPExl
Z2FjeUN1cnNvcldpdGhWYWx1ZT4gTGVnYWN5Q3Vyc29yV2l0aFZhbHVlOjpmcm9tQ3Vyc29yKFBh
c3NSZWZQdHI8TGVnYWN5Q3Vyc29yPiBwcnBDdXJzb3IpCit7CisgICAgUmVmUHRyPExlZ2FjeUN1
cnNvcldpdGhWYWx1ZT4gY3Vyc29yV2l0aFZhbHVlKHN0YXRpY19jYXN0PExlZ2FjeUN1cnNvcldp
dGhWYWx1ZSo+KHBycEN1cnNvci5nZXQoKSkpOworICAgIHJldHVybiBjdXJzb3JXaXRoVmFsdWUu
cmVsZWFzZSgpOworfQorCitMZWdhY3lDdXJzb3JXaXRoVmFsdWU6OkxlZ2FjeUN1cnNvcldpdGhW
YWx1ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGJhY2tlbmQsIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGVnYWN5UmVxdWVzdCogcmVxdWVzdCwgTGVnYWN5QW55
KiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IExlZ2FjeUN1
cnNvcihiYWNrZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pCit7
Cit9CisKK0xlZ2FjeUN1cnNvcldpdGhWYWx1ZTo6fkxlZ2FjeUN1cnNvcldpdGhWYWx1ZSgpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQ4N2IxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmgKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlX2gKKyNk
ZWZpbmUgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiTGVnYWN5Q3Vyc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlIDogcHVibGljIExlZ2FjeUN1cnNvciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b24sIExlZ2FjeVJlcXVlc3QqLCBMZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24q
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IGZyb21DdXJz
b3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+KTsKKyAgICB2aXJ0dWFsIH5MZWdhY3lDdXJzb3JX
aXRoVmFsdWUoKTsKKworICAgIC8vIFRoZSB2YWx1ZSBhdHRyaWJ1dGUgZGVmaW5lZCBpbiB0aGUg
SURMIGlzIHNpbXBseSBpbXBsZW1lbnRlZCBpbiBMZWdhY3lDdXJzb3IgKGJ1dCBub3QgZXhwb3Nl
ZCB2aWEKKyAgICAvLyBpdHMgSURMKS4gVGhpcyBpcyB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlv
biBtb3JlIHNpbXBsZSB3aGlsZSBtYXRjaGluZyB3aGF0IHRoZSBzcGVjIHNheXMuCisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3IoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIExlZ2FjeUN1cnNvcldpdGhWYWx1ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgTGVn
YWN5UmVxdWVzdCosIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lUcmFuc2FjdGlvbiopOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIExlZ2FjeUN1
cnNvcldpdGhWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43ZTE3NDkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcApAQCAtMCwwICsxLDQw
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lEYXRhYmFz
ZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJET01TdHJp
bmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUg
IklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAi
SURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNs
dWRlICJMZWdhY3lPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVZlcnNpb25DaGFuZ2VF
dmVudC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRD
YWxsU3RhY2suaD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8TGVnYWN5RGF0YWJhc2U+IExlZ2FjeURhdGFi
YXNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit7CisgICAgUmVmPExlZ2FjeURhdGFiYXNlPiBsZWdhY3lEYXRhYmFz
ZShhZG9wdFJlZigqbmV3IExlZ2FjeURhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjYWxsYmFj
a3MpKSk7CisgICAgbGVnYWN5RGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVy
biBsZWdhY3lEYXRhYmFzZTsKK30KKworTGVnYWN5RGF0YWJhc2U6OkxlZ2FjeURhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kPiBiYWNrZW5kLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CisgICAgOiBJREJEYXRhYmFzZShjb250ZXh0KQorICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCisg
ICAgLCBtX2Nsb3NlUGVuZGluZyhmYWxzZSkKKyAgICAsIG1faXNDbG9zZWQoZmFsc2UpCisgICAg
LCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhjYWxs
YmFja3MpCit7CisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZv
cmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Cit9
CisKK0xlZ2FjeURhdGFiYXNlOjp+TGVnYWN5RGF0YWJhc2UoKQoreworICAgIC8vIFRoaXMgZG9l
cyB3aGF0IExlZ2FjeURhdGFiYXNlOjpjbG9zZSBkb2VzLCBidXQgd2l0aG91dCBhbnkgcmVmL2Rl
cmVmIG9mIHRoZQorICAgIC8vIGRhdGFiYXNlIHNpbmNlIGl0IGlzIGFscmVhZHkgaW4gdGhlIHBy
b2Nlc3Mgb2YgYmVpbmcgZGVsZXRlZC4gVGhlIGxvZ2ljIGhlcmUKKyAgICAvLyBpcyBhbHNvIHNp
bXBsZXIgc2luY2Ugd2Uga25vdyB0aGVyZSBhcmUgbm8gdHJhbnNhY3Rpb25zIChzaW5jZSB0aGV5
IHJlZiB0aGUKKyAgICAvLyBkYXRhYmFzZSB3aGVuIHRoZXkgYXJlIGFsaXZlKS4KKworICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOworCisgICAgaWYgKCFtX2Nsb3NlUGVuZGlu
ZykgeworICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7CisgICAgICAgIG1fYmFja2VuZC0+
Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgfQorCisgICAgaWYgKGF1dG8qIGNvbnRl
eHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBw
ZW5kaW5nIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMKKyAg
ICAgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRo
ZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgorICAgICAgICAvLyBjb25uZWN0aW9uIGNhbGxlZCBzZXRW
ZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rpb24gaXMgYmVpbmcKKyAgICAgICAgLy8g
Y2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQg
OiBtX2VucXVldWVkRXZlbnRzKQorICAgICAgICAgICAgY29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNh
bmNlbEV2ZW50KCpldmVudCk7CisgICAgfQorfQorCitpbnQ2NF90IExlZ2FjeURhdGFiYXNlOjpu
ZXh0VHJhbnNhY3Rpb25JZCgpCit7CisgICAgLy8gT25seSBrZWVwIGEgMzItYml0IGNvdW50ZXIg
dG8gYWxsb3cgcG9ydHMgdG8gdXNlIHRoZSBvdGhlciAzMgorICAgIC8vIGJpdHMgb2YgdGhlIGlk
LgorICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4gY3VycmVudFRyYW5zYWN0aW9uSWQ7
CisKKyAgICByZXR1cm4gKytjdXJyZW50VHJhbnNhY3Rpb25JZDsKK30KKwordm9pZCBMZWdhY3lE
YXRhYmFzZTo6dHJhbnNhY3Rpb25DcmVhdGVkKExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24pOworICAgIEFTU0VSVCghbV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5hZGQo
dHJhbnNhY3Rpb24tPmlkKCksIHRyYW5zYWN0aW9uKTsKKworICAgIGlmICh0cmFuc2FjdGlvbi0+
aXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbik7CisgICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rp
b247CisgICAgfQorfQorCit2b2lkIExlZ2FjeURhdGFiYXNlOjp0cmFuc2FjdGlvbkZpbmlzaGVk
KExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rp
b24pOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQo
KSkpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09
IHRyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlk
KCkpOworCisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAg
ICBBU1NFUlQobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pOworICAg
ICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAg
aWYgKG1fY2xvc2VQZW5kaW5nICYmIG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAg
Y2xvc2VDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6Om9uQWJvcnQoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQor
eworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7Cisg
ICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5vbkFib3J0KGVycm9yKTsKK30K
Kwordm9pZCBMZWdhY3lEYXRhYmFzZTo6b25Db21wbGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQp
Cit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsK
KyAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPm9uQ29tcGxldGUoKTsKK30K
KworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBMZWdhY3lEYXRhYmFzZTo6b2JqZWN0U3RvcmVO
YW1lcygpIGNvbnN0Cit7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFt
ZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3Jl
IDogbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMudmFsdWVzKCkpCisgICAgICAgIG9iamVjdFN0b3Jl
TmFtZXMtPmFwcGVuZChvYmplY3RTdG9yZS5uYW1lKTsKKyAgICBvYmplY3RTdG9yZU5hbWVzLT5z
b3J0KCk7CisgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXMucmVsZWFzZSgpOworfQorCit1aW50
NjRfdCBMZWdhY3lEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Cit7CisgICAgLy8gTm9JbnRWZXJz
aW9uIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHNob3VsZG4n
dCBiZSBleHBvc2VkIHRvIHNjcmlwdC4KKyAgICAvLyBEZWZhdWx0SW50VmVyc2lvbiBzaG91bGQg
YmUgZXhwb3NlZCBpbnN0ZWFkLgorICAgIHJldHVybiBtX21ldGFkYXRhLnZlcnNpb24gIT0gSURC
RGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uID8gbV9tZXRhZGF0YS52ZXJzaW9uIDogc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9u
KTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gTGVnYWN5RGF0YWJhc2U6OmNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9u
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCS2V5UGF0aCBrZXlQYXRoOworICAgIGJv
b2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOworICAgIGlmICghb3B0aW9ucy5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CisgICAgICAgIFN0cmluZyBrZXlQYXRoU3RyaW5nOworICAgICAgICBWZWN0b3I8
U3RyaW5nPiBrZXlQYXRoQXJyYXk7CisgICAgICAgIGlmIChvcHRpb25zLmdldCgia2V5UGF0aCIs
IGtleVBhdGhBcnJheSkpCisgICAgICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aChrZXlQYXRo
QXJyYXkpOworICAgICAgICBlbHNlIGlmIChvcHRpb25zLmdldFdpdGhVbmRlZmluZWRPck51bGxD
aGVjaygia2V5UGF0aCIsIGtleVBhdGhTdHJpbmcpKQorICAgICAgICAgICAga2V5UGF0aCA9IElE
QktleVBhdGgoa2V5UGF0aFN0cmluZyk7CisKKyAgICAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNy
ZW1lbnQiLCBhdXRvSW5jcmVtZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlT2JqZWN0
U3RvcmUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgZWMpOworfQorCitQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlPiBMZWdhY3lEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5RGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBpZiAoY29udGFpbnNPYmplY3RTdG9yZShuYW1lKSkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3I7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGlmICgha2V5UGF0aC5pc051bGwoKSAmJiAha2V5UGF0aC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChhdXRvSW5jcmVtZW50ICYmICgoa2V5
UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiBrZXlQYXRoLnN0cmluZygp
LmlzRW1wdHkoKSkgfHwga2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9
IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDE7CisgICAgbV9iYWNrZW5kLT5jcmVhdGVP
YmplY3RTdG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwgb2JqZWN0U3RvcmVJ
ZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisKKyAgICBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1l
bnQsIElEQkRhdGFiYXNlQmFja2VuZDo6TWluaW11bUluZGV4SWQpOworICAgIFJlZlB0cjxMZWdh
Y3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBMZWdhY3lPYmplY3RTdG9yZTo6Y3JlYXRlKG1l
dGFkYXRhLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7CisgICAgKyttX21ldGFk
YXRhLm1heE9iamVjdFN0b3JlSWQ7CisKKyAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+
b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKKyAgICByZXR1cm4gb2JqZWN0
U3RvcmUucmVsZWFzZSgpOworfQorCit2b2lkIExlZ2FjeURhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhT
dG9yYWdlQVBJLCAiTGVnYWN5RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlIik7CisgICAgaWYg
KCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRP
YmplY3RTdG9yZUlkKG5hbWUpOworICAgIGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0
b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNr
ZW5kLT5kZWxldGVPYmplY3RTdG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aWQoKSwg
b2JqZWN0U3RvcmVJZCk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0
b3JlRGVsZXRlZChuYW1lKTsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2Jq
ZWN0U3RvcmVJZCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeURhdGFi
YXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6dHJhbnNh
Y3Rpb24iKTsKKyAgICBpZiAoIXNjb3BlLnNpemUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlv
bjo6c3RyaW5nVG9Nb2RlKG1vZGVTdHJpbmcsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IG1fY2xvc2VQ
ZW5kaW5nKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0
ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50NjRfdD4g
b2JqZWN0U3RvcmVJZHM7CisgICAgZm9yIChhdXRvJiBuYW1lIDogc2NvcGUpIHsKKyAgICAgICAg
aW50NjRfdCBvYmplY3RTdG9yZUlkID0gZmluZE9iamVjdFN0b3JlSWQobmFtZSk7CisgICAgICAg
IGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkg
eworICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG9iamVjdFN0b3JlSWRz
LmFwcGVuZChvYmplY3RTdG9yZUlkKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQgPSBuZXh0VHJhbnNhY3Rpb25JZCgpOworICAgIG1fYmFja2VuZC0+Y3JlYXRlVHJhbnNhY3Rp
b24odHJhbnNhY3Rpb25JZCwgbV9kYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIG1v
ZGUpOworCisgICAgUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IExlZ2Fj
eVRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25JZCwgc2NvcGUsIG1vZGUs
IHRoaXMpOworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeURhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gc3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIHN0b3JlTmFtZXMt
PmFwcGVuZChzdG9yZU5hbWUpOworICAgIHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCBzdG9y
ZU5hbWVzLCBtb2RlLCBlYyk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmZvcmNlQ2xvc2Uo
KQoreworICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBtX3RyYW5zYWN0aW9ucy52YWx1ZXMo
KSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENFUFRJT04pOworICAgIHRo
aXMtPmNsb3NlKCk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3NlKCkKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpjbG9zZSIpOworICAgIGlmIChtX2Nsb3Nl
UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbG9zZVBlbmRpbmcgPSB0cnVlOwor
CisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgY2xvc2VDb25uZWN0
aW9uKCk7Cit9CisKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbigpCit7Cisg
ICAgQVNTRVJUKG1fY2xvc2VQZW5kaW5nKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNF
bXB0eSgpKTsKKworICAgIC8vIENsb3NpbmcgbWF5IHJlc3VsdCBpbiBkZWFsbG9jYXRpbmcgdGhl
IGxhc3QgdHJhbnNhY3Rpb24sIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkZWxldGluZworICAgIC8v
IHRoaXMgTGVnYWN5RGF0YWJhc2UuIFdlIG5lZWQgdGhlIGRlYWxsb2NhdGlvbiB0byBoYXBwZW4g
YWZ0ZXIgd2UgYXJlIHRocm91Z2guCisgICAgUmVmPExlZ2FjeURhdGFiYXNlPiBwcm90ZWN0KCp0
aGlzKTsKKworICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7CisKKyAg
ICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBFdmVudFF1ZXVlJiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CisgICAgLy8gUmVtb3ZlIGFueSBwZW5kaW5nIHZl
cnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMKKyAgICAvLyBjb25u
ZWN0aW9uLiBUaGV5IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgdGhlIGJhY2tlbmQgd2hl
biBhbm90aGVyCisgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBm
cm9udGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCisgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNv
dWxkIGZpcmUuCisgICAgZm9yIChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKKyAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOworICAgIH0KKworICAgIG1faXND
bG9zZWQgPSB0cnVlOworfQorCit2b2lkIExlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2Uo
dWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UiKTsKKyAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChuZXdWZXJzaW9uICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Cisg
ICAgZW5xdWV1ZUV2ZW50KExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNp
b24sIG5ld1ZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKK30KKwor
dm9pZCBMZWdhY3lEYXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQoreworICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CisgICAgQVNTRVJUKCFtX2lzQ2xv
c2VkKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudChldmVudC5nZXQoKSk7CisgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBl
bmQoZXZlbnQpOworfQorCitib29sIExlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5RGF0YWJh
c2U6OmRpc3BhdGNoRXZlbnQiKTsKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVu
dHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0KCkpCisgICAgICAgICAgICBtX2VucXVldWVkRXZlbnRz
LnJlbW92ZShpKTsKKyAgICB9CisgICAgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50
KGV2ZW50LmdldCgpKTsKK30KKworaW50NjRfdCBMZWdhY3lEYXRhYmFzZTo6ZmluZE9iamVjdFN0
b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGZvciAoYXV0byYgb2JqZWN0
U3RvcmUgOiBtX21ldGFkYXRhLm9iamVjdFN0b3JlcykgeworICAgICAgICBpZiAob2JqZWN0U3Rv
cmUudmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUu
a2V5ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CisgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0U3RvcmUua2V5OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQ7Cit9CisKK2Jvb2wgTGVnYWN5RGF0YWJhc2U6
Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgLy8gVGhlIHNjcmlwdCB3cmFwcGVy
IG11c3Qgbm90IGJlIGNvbGxlY3RlZCBiZWZvcmUgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3IKKyAg
ICAvLyB3ZSBjYW4ndCBmaXJlIGEgInZlcnNpb25jaGFuZ2UiIGV2ZW50IHRvIGxldCBzY3JpcHQg
bWFudWFsbHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgcmV0dXJuICFtX2Nsb3NlUGVuZGlu
ZyAmJiBoYXNFdmVudExpc3RlbmVycygpICYmICFtX2NvbnRleHRTdG9wcGVkOworfQorCit2b2lk
IExlZ2FjeURhdGFiYXNlOjpzdG9wKCkKK3sKKyAgICAvLyBTdG9wIGZpcmVzIGF0IGEgZGV0ZXJt
aW5pc3RpYyB0aW1lLCBzbyB3ZSBuZWVkIHRvIGNhbGwgY2xvc2UgaW4gaXQuCisgICAgY2xvc2Uo
KTsKKworICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOworfQorCitjb25zdCBjaGFyKiBMZWdh
Y3lEYXRhYmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJM
ZWdhY3lEYXRhYmFzZSI7Cit9CisKK2Jvb2wgTGVnYWN5RGF0YWJhc2U6OmNhblN1c3BlbmRGb3JQ
YWdlQ2FjaGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzQ2xvc2VkOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lE
YXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eURhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2YzE2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lEYXRhYmFzZS5oCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZWdh
Y3lEYXRhYmFzZV9oCisjZGVmaW5lIExlZ2FjeURhdGFiYXNlX2gKKworI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3Mu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZWdhY3lUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMZWdhY3lUcmFuc2FjdGlvbjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIExlZ2FjeURhdGFi
YXNlIGZpbmFsIDogcHVibGljIElEQkRhdGFiYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PExlZ2FjeURhdGFiYXNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4p
OworICAgIH5MZWdhY3lEYXRhYmFzZSgpOworCisgICAgdm9pZCBzZXRNZXRhZGF0YShjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkgeyBtX21ldGFkYXRhID0gbWV0YWRhdGE7IH0K
KyAgICB2b2lkIHRyYW5zYWN0aW9uQ3JlYXRlZChMZWdhY3lUcmFuc2FjdGlvbiopOworICAgIHZv
aWQgdHJhbnNhY3Rpb25GaW5pc2hlZChMZWdhY3lUcmFuc2FjdGlvbiopOworCisgICAgLy8gSW1w
bGVtZW50IHRoZSBJREwKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWwgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9CisgICAgdmlydHVhbCB1aW50
NjRfdCB2ZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdCBvdmVycmlkZSBmaW5h
bDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29k
ZSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmIG1v
ZGUsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lk
IGNsb3NlKCkgb3ZlcnJpZGUgZmluYWw7CisKKyAgICAvLyBJREJEYXRhYmFzZUNhbGxiYWNrcwor
ICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWlu
dDY0X3QgbmV3VmVyc2lvbik7CisgICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoaW50NjRfdCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7CisgICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUo
aW50NjRfdCk7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJ
bnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJl
dHVybiBJREJEYXRhYmFzZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQorICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOyB9CisKKyAgICBib29sIGlzQ2xvc2VQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9j
bG9zZVBlbmRpbmc7IH0KKyAgICB2b2lkIGZvcmNlQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJl
dHVybiBtX21ldGFkYXRhOyB9CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworCisgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7CisgICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworCisgICAg
aW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAg
IGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW52YWxpZElkOworICAgIH0KKworICAgIElEQkRhdGFiYXNlQmFja2VuZCog
YmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgc3RhdGlj
IGludDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdCBB
UEkuCisgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBMZWdhY3lEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
Pik7CisKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHNjb3Bl
LCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFuc2Fj
dGlvbihjb250ZXh0LCAqc2NvcGUsIG1vZGUsIGVjKTsgfQorCisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0IEFQSS4KKyAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBhY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5TdXNwZW5kRm9y
UGFnZUNhY2hlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZp
cnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgcmVmKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYo
KTsgfQorCisgICAgdm9pZCBjbG9zZUNvbm5lY3Rpb24oKTsKKworICAgIElEQkRhdGFiYXNlTWV0
YWRhdGEgbV9tZXRhZGF0YTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBtX2JhY2tl
bmQ7CisgICAgUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiBtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgTGVnYWN5VHJhbnNhY3Rpb24qPiBU
cmFuc2FjdGlvbk1hcDsKKyAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKKworICAg
IGJvb2wgbV9jbG9zZVBlbmRpbmc7CisgICAgYm9vbCBtX2lzQ2xvc2VkOworICAgIGJvb2wgbV9j
b250ZXh0U3RvcHBlZDsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIHZlcnNpb25jaGFuZ2Ug
ZXZlbnRzIHdhaXRpbmcgdG8gYmUgZmlyZWQgb24gdGhpcworICAgIC8vIGRhdGFiYXNlIHNvIHRo
YXQgd2UgY2FuIGNhbmNlbCB0aGVtIGlmIHRoZSBkYXRhYmFzZSBjbG9zZXMuCisgICAgVmVjdG9y
PFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CisKKyAgICBSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gTGVnYWN5RGF0YWJhc2VfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3Rvcnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3Rv
cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODkxOTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5RmFjdG9yeS5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJM
ZWdhY3lGYWN0b3J5LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJL
ZXkuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIkxlZ2FjeUFueS5oIgor
I2luY2x1ZGUgIkxlZ2FjeURhdGFiYXNlLmgiCisjaW5jbHVkZSAiTGVnYWN5T3BlbkRCUmVxdWVz
dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAi
V29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitMZWdhY3lGYWN0b3J5OjpMZWdhY3lGYWN0b3J5KElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQorICAgIDogbV9iYWNrZW5kKGZhY3RvcnkpCit7Cisg
ICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJl
IGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Cit9CisKK0xlZ2FjeUZh
Y3Rvcnk6On5MZWdhY3lGYWN0b3J5KCkKK3sKK30KKworc3RhdGljIGJvb2wgaXNDb250ZXh0VmFs
aWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaXM8RG9j
dW1lbnQ+KCpjb250ZXh0KSB8fCBjb250ZXh0LT5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOworICAg
IGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKSB7CisgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgIHJldHVybiBkb2N1bWVu
dC5mcmFtZSgpICYmIGRvY3VtZW50LnBhZ2UoKSAmJiAoIWRvY3VtZW50LnBhZ2UoKS0+dXNlc0Vw
aGVtZXJhbFNlc3Npb24oKSB8fCBTY2hlbWVSZWdpc3RyeTo6YWxsb3dzRGF0YWJhc2VBY2Nlc3NJ
blByaXZhdGVCcm93c2luZyhkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpKSk7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExl
Z2FjeUZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lG
YWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzIik7CisgICAgaWYgKCFpc0NvbnRleHRWYWxpZChjb250
ZXh0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsKKyAgICAgICAg
ZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0
cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICBtX2JhY2tlbmQtPmdldERhdGFiYXNl
TmFtZXMocmVxdWVzdCwgKihjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpKSwgKihjb250ZXh0LT50
b3BPcmlnaW4oKSksIGNvbnRleHQpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVm
UHRyPElEQk9wZW5EQlJlcXVlc3Q+IExlZ2FjeUZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUZhY3Rvcnk6Om9wZW4iKTsKKyAgICByZXR1
cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIDAsIEluZGV4ZWREQjo6VmVyc2lvbk51bGxu
ZXNzOjpOdWxsLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gTGVnYWN5
RmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUZhY3Rvcnk6Om9wZW4iKTsKKyAgICBpZiAo
IXZlcnNpb24pIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICByZXR1cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIElu
ZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOb25OdWxsLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8
SURCT3BlbkRCUmVxdWVzdD4gTGVnYWN5RmFjdG9yeTo6b3BlbkludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lv
biwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBBU1NFUlQodmVyc2lvbiA+PSAxIHx8IHZlcnNpb25OdWxsbmVzcyA9
PSBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCk7CisgICAgaWYgKG5hbWUuaXNOdWxs
KCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAoIWlzQ29udGV4dFZhbGlkKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRl
eHQtPnRvcE9yaWdpbigpKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRh
YmFzZUNhbGxiYWNrcyA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKCk7CisgICAg
aW50NjRfdCB0cmFuc2FjdGlvbklkID0gTGVnYWN5RGF0YWJhc2U6Om5leHRUcmFuc2FjdGlvbklk
KCk7CisgICAgUmVmUHRyPExlZ2FjeU9wZW5EQlJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lPcGVu
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9u
SWQsIHZlcnNpb24sIHZlcnNpb25OdWxsbmVzcyk7CisgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUs
IHZlcnNpb24sIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3QsIGRhdGFiYXNlQ2FsbGJhY2tzLCAqKGNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpLCAqKGNvbnRleHQtPnRvcE9yaWdpbigpKSk7CisgICAg
cmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gTGVnYWN5
RmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBXVEZMb2dBbHdh
eXMoInlhaCBkdWRlIik7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lGYWN0b3J5OjpkZWxl
dGVEYXRhYmFzZSIpOworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gVHlw
ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFpc0NvbnRleHRWYWxp
ZChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IFJlZlB0cjxMZWdhY3lPcGVuREJSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5T3BlbkRCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIDAsIDAsIDAsIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpO
dWxsKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsICpjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLCAqY29udGV4dC0+dG9wT3JpZ2luKCksIHJlcXVlc3QsIGNvbnRleHQpOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCitzaG9ydCBMZWdhY3lGYWN0b3J5OjpjbXAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGZpcnN0VmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmRWYWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShj
b250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBmaXJzdCA9IHNjcmlwdFZhbHVlVG9JREJLZXko
JnJlcXVlc3RTdGF0ZSwgZmlyc3RWYWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4gc2Vjb25kID0g
c2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBzZWNvbmRWYWx1ZSk7CisKKyAgICBB
U1NFUlQoZmlyc3QpOworICAgIEFTU0VSVChzZWNvbmQpOworCisgICAgaWYgKCFmaXJzdC0+aXNW
YWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBhcmUoc2Vjb25kLmdldCgpKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lGYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTM1YjE3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lGYWN0b3J5LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgTGVnYWN5RmFjdG9yeV9o
CisjZGVmaW5lIExlZ2FjeUZhY3RvcnlfaAorCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorI2lu
Y2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK3R5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIExlZ2FjeUZhY3RvcnkgOiBwdWJsaWMgU2NyaXB0
V3JhcHBhYmxlLCBwdWJsaWMgSURCRmFjdG9yeSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGVnYWN5RmFjdG9yeT4gY3JlYXRlKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBm
YWN0b3J5KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdoaWxlIHRoZSBmZWF0dXJlIGlzIHVu
ZGVyIGRldmVsb3BtZW50IHdlJ2xsIGhhbmRsZSBhIG51bGwgZmFjdG9yeSBiYWNrZW5kIGhlcmUs
CisgICAgICAgIC8vIHJldHVybmluZyBudWxsLCBzbyBqYXZhc2NyaXB0IGNhbid0IHRyeSB0byB1
c2UgdGhlIGZlYXR1cmUuCisgICAgICAgIC8vIE9uY2UgdGhlIGZlYXR1cmUgaXMgZnVsbHkgZnVu
Y3Rpb25hbCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBudWxsIGZhY3RvcnkgYmFja2VuZC4KKyAgICAg
ICAgcmV0dXJuIGZhY3RvcnkgPyBhZG9wdFJlZihuZXcgTGVnYWN5RmFjdG9yeShmYWN0b3J5KSkg
OiBudWxscHRyOworICAgIH0KKyAgICB+TGVnYWN5RmFjdG9yeSgpOworCisgICAgLy8gRklYTUU6
IGdldERhdGFiYXNlTmFtZXMgaXMgbm8gbG9uZ2VyIGEgd2ViLWZhY2luZyBBUEksIGFuZCBzaG91
bGQgYmUgcmVtb3ZlZCBmcm9tIExlZ2FjeUZhY3RvcnkuCisgICAgLy8gVGhlIFdlYiBJbnNwZWN0
b3IgY3VycmVudGx5IHVzZXMgdGhpcyB0byBlbnVtZXJhdGUgdGhlIGxpc3Qgb2YgZGF0YWJhc2Vz
LCBidXQgaXMgbW9yZSBjb21wbGljYXRlZCBhcyBhIHJlc3VsdC4KKyAgICAvLyBXZSBzaG91bGQg
cHJvdmlkZSBhIHNpbXBsZXIgQVBJIHRvIHRoZSBXZWIgSW5zcGVjdG9yIHRoZW4gcmVtb3ZlIGdl
dERhdGFiYXNlTmFtZXMuCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5h
bWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBQYXNz
UmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCT3Bl
bkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBh
c3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgc2hv
cnQgY21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgZmlyc3QsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmQsIEV4Y2Vw
dGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICBMZWdhY3lGYWN0b3J5KElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlKik7CisKKyAgICBQYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW5J
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50
NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcywgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gTGVnYWN5
RmFjdG9yeV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5SW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUluZGV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYmJlNzIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmNwcApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lJbmRleC5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgor
I2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAi
SURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xlZ2FjeUluZGV4OjpM
ZWdhY3lJbmRleChjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgTGVnYWN5T2JqZWN0
U3RvcmUqIG9iamVjdFN0b3JlLCBMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAg
OiBtX21ldGFkYXRhKG1ldGFkYXRhKQorICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
KyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX2RlbGV0ZWQoZmFsc2Up
Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
KTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpOworfQorCitMZWdhY3lJbmRleDo6fkxlZ2FjeUluZGV4KCkKK3sKK30KKworUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3Ry
aW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5SW5kZXg6Om9wZW5DdXJzb3IiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGly
ZWN0aW9uU3RyaW5nLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAg
ICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5k
VmFsdWUsIGRpcmVjdGlvbik7CisgICAgYmFja2VuZERCKCktPm9wZW5DdXJzb3IobV90cmFuc2Fj
dGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwgZmFsc2UsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgcmVxdWVz
dCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVn
YWN5SW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6
Om9wZW5DdXJzb3IiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5
UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCks
IGRpcmVjdGlvbiwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUluZGV4
Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lJbmRleDo6Y291bnQiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJv
cjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiBy
ZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRl
KHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+Y291bnQobV90
cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5
UmFuZ2UsIHJlcXVlc3QpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IExlZ2FjeUluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4Ojpjb3VudCIpOworICAgIFJl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBr
ZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb3Vu
dChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdl
QVBJLCAiTGVnYWN5SW5kZXg6Om9wZW5LZXlDdXJzb3IiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGly
ZWN0aW9uU3RyaW5nLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAg
ICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25s
eSwgZGlyZWN0aW9uKTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9u
LT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGly
ZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUlu
ZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4Ojpv
cGVuS2V5Q3Vyc29yIik7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktl
eVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UucmVsZWFz
ZSgpLCBkaXJlY3Rpb24sIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJ
bmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5SW5kZXg6OmdldCIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBnZXQoY29udGV4dCwga2V5UmFuZ2UucmVs
ZWFzZSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6Omdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lJbmRleDo6Z2V0Iik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIWtleVJhbmdlKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0
KCkpOworICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RT
dG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKKyAg
ICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRl
eDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5SW5kZXg6OmdldEtleSIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdldEtleShjb250ZXh0LCBrZXlS
YW5nZS5yZWxlYXNlKCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJ
bmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpnZXRLZXkiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgha2V5UmFuZ2UpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExl
Z2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5p
ZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgdHJ1ZSwg
cmVxdWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZCog
TGVnYWN5SW5kZXg6OmJhY2tlbmREQigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rp
b24tPmJhY2tlbmREQigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzM0NTg4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5oCkBAIC0wLDAgKzEsMTA1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBMZWdhY3lJbmRleF9oCisjZGVmaW5lIExlZ2FjeUluZGV4X2gKKwor
I2luY2x1ZGUgIklEQkN1cnNvci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJM
ZWdhY3lBbnkuaCIKKyNpbmNsdWRlICJMZWdhY3lPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkxl
Z2FjeVJlcXVlc3QuaCIKKyNpbmNsdWRlICJMZWdhY3lUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUg
IlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3MgTGVn
YWN5SW5kZXggOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgSURCSW5kZXggeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8TGVnYWN5SW5kZXg+IGNyZWF0ZShjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBtZXRhZGF0YSwgTGVnYWN5T2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlLCBMZWdhY3lU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBMZWdhY3lJbmRleChtZXRhZGF0YSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7Cisg
ICAgfQorICAgIH5MZWdhY3lJbmRleCgpOworCisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAg
ICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1
cm4gbV9tZXRhZGF0YS5uYW1lOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0
U3RvcmU7IH0KKyAgICBQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiBsZWdhY3lPYmplY3RT
dG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4g
TGVnYWN5QW55OjpjcmVhdGUobV9tZXRhZGF0YS5rZXlQYXRoKTsgfQorICAgIHZpcnR1YWwgY29u
c3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9t
ZXRhZGF0YS5rZXlQYXRoOyB9CisgICAgdmlydHVhbCBib29sIHVuaXF1ZSgpIGNvbnN0IG92ZXJy
aWRlIGZpbmFsIHsgcmV0dXJuIG1fbWV0YWRhdGEudW5pcXVlOyB9CisgICAgdmlydHVhbCBib29s
IG11bHRpRW50cnkoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX21ldGFkYXRhLm11
bHRpRW50cnk7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgaWQoKSBjb25zdCBvdmVycmlkZSBmaW5h
bCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlm
eSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gb3BlbkN1
cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29u
dGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0
LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2Rl
Jikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlS
YW5nZSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmlu
YWwgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5n
ZSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGly
ZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgb3ZlcnJpZGUgZmlu
YWwgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0
aW9uTmV4dCgpLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmlu
YWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4
Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBm
aW5hbDsKKworICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KKwor
ICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgTGVnYWN5SW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIExlZ2FjeU9iamVjdFN0b3Jl
KiwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKKworICAgIElEQkluZGV4TWV0YWRhdGEgbV9tZXRhZGF0
YTsKKyAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVm
UHRyPExlZ2FjeVRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworICAgIGJvb2wgbV9kZWxldGVk
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIExl
Z2FjeUluZGV4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBiM2U2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuY3BwCkBAIC0wLDAg
KzEsNTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxlZ2FjeU9i
amVjdFN0b3JlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKKyNpbmNsdWRlICJJREJL
ZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgIkxlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oIgorI2luY2x1ZGUgIkxl
Z2FjeUluZGV4LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMZWdhY3lPYmpl
Y3RTdG9yZTo6TGVnYWN5T2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
bWV0YWRhdGEsIExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IG1fbWV0YWRh
dGEobWV0YWRhdGEpCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICwgbV9k
ZWxldGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICAvLyBXZSBw
YXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4K
KyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30KKworUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0Cit7CisgICAgTE9H
KFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyIpOworICAgIFJlZlB0
cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Cisg
ICAgZm9yIChhdXRvJiBpbmRleCA6IG1fbWV0YWRhdGEuaW5kZXhlcy52YWx1ZXMoKSkKKyAgICAg
ICAgaW5kZXhOYW1lcy0+YXBwZW5kKGluZGV4Lm5hbWUpOworICAgIGluZGV4TmFtZXMtPnNvcnQo
KTsKKyAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURC
UmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6Z2V0Iik7Cisg
ICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgha2V5
UmFuZ2UpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxMZWdhY3lS
ZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+
Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmdldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2V0KGNvbnRleHQsIGtleVJhbmdl
LnJlbGVhc2UoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVj
dFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3RvcmU6OmFkZCIp
OworICAgIHJldHVybiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5LCBMZWdhY3lBbnk6
OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBrZXksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjphZGQiKTsKKyAgICByZXR1cm4g
cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyks
IHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURCS2V5Kj4obnVsbHB0ciksIGVjKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpwdXQiKTsKKyAgICByZXR1cm4gcHV0KElEQkRh
dGFiYXNlQmFja2VuZDo6QWRkT3JVcGRhdGUsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0
ZSwgdmFsdWUsIGtleSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9i
amVjdFN0b3JlOjpwdXQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAi
TGVnYWN5T2JqZWN0U3RvcmU6OnB1dCIpOworICAgIHJldHVybiBwdXQoSURCRGF0YWJhc2VCYWNr
ZW5kOjpBZGRPclVwZGF0ZSwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwg
c3RhdGljX2Nhc3Q8SURCS2V5Kj4obnVsbHB0ciksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVj
U3RhdGUoc3RhdGUpOworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7
CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0
YXRlLCBrZXlWYWx1ZSk7CisgICAgcmV0dXJuIHB1dChwdXRNb2RlLCBzb3VyY2UsIHN0YXRlLCB2
YWx1ZSwga2V5LnJlbGVhc2UoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExl
Z2FjeU9iamVjdFN0b3JlOjpwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Cisg
ICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2
YWx1ZS5qc1ZhbHVlKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGlmIChzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHNlcmlhbGl6ZWRW
YWx1ZS0+aGFzQmxvYlVSTHMoKSkgeworICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9G
aWxlTGlzdCBzdXBwb3J0CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFD
bG9uZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoID0gbV9tZXRhZGF0YS5rZXlQYXRoOworICAgIGNvbnN0IGJvb2wg
dXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKKyAgICBjb25zdCBib29sIGhhc0tl
eUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZShzdGF0ZSk7
CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKKworICAgIGlmIChw
dXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIHVzZXNJbkxpbmVL
ZXlzICYmIGtleSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoIXVzZXNJbkxpbmVL
ZXlzICYmICFoYXNLZXlHZW5lcmF0b3IgJiYgIWtleSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBpZiAodXNlc0luTGluZUtleXMpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0
aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgocmVxdWVzdFN0YXRl
LmV4ZWMoKSwgdmFsdWUsIGtleVBhdGgpOworICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5
UGF0aEtleS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgeworICAgICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc0tleUdlbmVyYXRvciAmJiAh
a2V5UGF0aEtleSkgeworICAgICAgICAgICAgaWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUoJnJlcXVlc3RTdGF0ZSwgdmFsdWUsIGtleVBhdGgpKSB7CisgICAgICAgICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChrZXlQ
YXRoS2V5KQorICAgICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKKyAgICB9CisgICAgaWYgKGtl
eSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6RGF0YUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0
b3I8aW50NjRfdD4gaW5kZXhJZHM7CisgICAgVmVjdG9yPEluZGV4S2V5cz4gaW5kZXhLZXlzOwor
ICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21ldGFkYXRhLmluZGV4ZXMpIHsKKyAgICAgICAgVmVj
dG9yPElEQktleURhdGE+IGtleURhdGFzOworICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZh
bHVlKHJlcXVlc3RTdGF0ZS5leGVjKCksIGluZGV4LnZhbHVlLCB2YWx1ZSwga2V5RGF0YXMpOwor
ICAgICAgICBpbmRleElkcy5hcHBlbmQoaW5kZXgua2V5KTsKKworICAgICAgICAvLyBGSVhNRTog
TXVjaCBvZiB0aGUgSW5kZXhlZCBEQiBjb2RlIG5lZWRzIHRvIHVzZSBJREJLZXlEYXRhIGRpcmVj
dGx5IHRvIGF2b2lkIHdhc3RlZnVsIGNvbnZlcnNpb25zIGxpa2UgdGhpcy4KKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxJREJLZXk+PiBrZXlzOworICAgICAgICBmb3IgKGF1dG8mIGtleURhdGEgOiBr
ZXlEYXRhcykgeworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0YS5tYXli
ZUNyZWF0ZUlEQktleSgpOworICAgICAgICAgICAgaWYgKGtleSkKKyAgICAgICAgICAgICAgICBr
ZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpbmRleEtleXMu
YXBwZW5kKGtleXMpOworICAgIH0KKworICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0
ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNvdXJjZSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnl0ZXMgPSBzZXJpYWxpemVkVmFsdWUt
PnRvV2lyZUJ5dGVzKCk7CisgICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gYWNjb3VudCBmb3IgZGlz
YWdyZWVtZW50cyBhYm91dCB3aGV0aGVyIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzaG91bGQgZGVh
bCBpbiBWZWN0b3I8dWludDhfdD4gb3IgVmVjdG9yPGNoYXI+LgorICAgIC8vIFNlZSBodHRwczov
L2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAxMy1GZWJydWFyeS8wMjM2
ODIuaHRtbAorICAgIFZlY3RvcjxjaGFyPiogdmFsdWVCeXRlc1NpZ25lZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJnZhbHVlQnl0ZXMpOworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IHZhbHVlQnVmZmVyID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcigqdmFsdWVCeXRlc1Np
Z25lZCk7CisgICAgYmFja2VuZERCKCktPnB1dChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCB2
YWx1ZUJ1ZmZlciwga2V5LnJlbGVhc2UoKSwgc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5k
OjpQdXRNb2RlPihwdXRNb2RlKSwgcmVxdWVzdCwgaW5kZXhJZHMsIGluZGV4S2V5cyk7CisgICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExl
Z2FjeU9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6ZGVsZXRlIik7
CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBpZiAoIWtleVJhbmdlKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRy
PExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
TGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIGJhY2tl
bmREQigpLT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBrZXlSYW5nZSwg
cmVxdWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZGVsZXRlRnVuY3Rpb24oY29udGV4dCwga2V5UmFu
Z2UucmVsZWFzZSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2Jq
ZWN0U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3RvcmU6OmNs
ZWFyIik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKKyAgICBiYWNrZW5kREIoKS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5z
YWN0aW9uLT5pZCgpLCBpZCgpLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNl
KCk7Cit9CisKK25hbWVzcGFjZSB7CisvLyBUaGlzIGNsYXNzIGNyZWF0ZXMgdGhlIGluZGV4IGtl
eXMgZm9yIGEgZ2l2ZW4gaW5kZXggYnkgZXh0cmFjdGluZworLy8gdGhlbSBmcm9tIHRoZSBTZXJp
YWxpemVkU2NyaXB0VmFsdWUsIGZvciBhbGwgdGhlIGV4aXN0aW5nIHZhbHVlcyBpbgorLy8gdGhl
IG9iamVjdFN0b3JlLiBJdCBvbmx5IG5lZWRzIHRvIGJlIGtlcHQgYWxpdmUgYnkgdmlydHVlIG9m
IGJlaW5nCisvLyBhIGxpc3RlbmVyIG9uIGFuIElEQlJlcXVlc3Qgb2JqZWN0LCBpbiB0aGUgc2Ft
ZSB3YXkgdGhhdCBKYXZhU2NyaXB0CisvLyBjdXJzb3Igc3VjY2VzcyBoYW5kbGVycyBhcmUga2Vw
dCBhbGl2ZS4KK2NsYXNzIEluZGV4UG9wdWxhdG9yIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8SW5kZXhQb3B1bGF0b3I+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmRleFBvcHVsYXRvcihiYWNr
ZW5kLCB0cmFuc2FjdGlvbklkLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3Ro
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcyA9PSAmb3RoZXI7CisgICAgfQorCitwcml2
YXRlOgorICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBi
YWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgOiBFdmVudExpc3Rl
bmVyKENQUEV2ZW50TGlzdGVuZXJUeXBlKQorICAgICAgICAsIG1fZGF0YWJhc2VCYWNrZW5kKGJh
Y2tlbmQpCisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFk
YXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCk7
CisgICAgICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CisgICAgICAg
IExlZ2FjeVJlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxMZWdhY3lSZXF1ZXN0Kj4odGFy
Z2V0KTsKKworICAgICAgICBSZWZQdHI8TGVnYWN5QW55PiBjdXJzb3JBbnkgPSByZXF1ZXN0LT5s
ZWdhY3lSZXN1bHQoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIFJlZlB0cjxMZWdhY3lD
dXJzb3JXaXRoVmFsdWU+IGN1cnNvcjsKKyAgICAgICAgaWYgKGN1cnNvckFueS0+dHlwZSgpID09
IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKKyAgICAgICAgICAgIGN1cnNvciA9IGN1
cnNvckFueS0+bGVnYWN5Q3Vyc29yV2l0aFZhbHVlKCk7CisKKyAgICAgICAgVmVjdG9yPGludDY0
X3QsIDE+IGluZGV4SWRzOworICAgICAgICBpbmRleElkcy5hcHBlbmQobV9pbmRleE1ldGFkYXRh
LmlkKTsKKyAgICAgICAgaWYgKGN1cnNvcikgeworICAgICAgICAgICAgY3Vyc29yLT5jb250aW51
ZUZ1bmN0aW9uKHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKKworICAgICAgICAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGN1cnNvci0+
aWRiUHJpbWFyeUtleSgpOworICAgICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFs
dWUgPSBjdXJzb3ItPnZhbHVlKCk7CisKKyAgICAgICAgICAgIFZlY3RvcjxJREJLZXlEYXRhPiBp
bmRleEtleURhdGFzOworICAgICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1
ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCBtX2luZGV4TWV0YWRhdGEsIHZhbHVlLCBpbmRl
eEtleURhdGFzKTsKKworICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBpbmRleEtl
eXM7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4S2V5RGF0YSA6IGluZGV4S2V5RGF0YXMp
IHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBpbmRleEtleURhdGEubWF5
YmVDcmVhdGVJREJLZXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoa2V5KQorICAgICAgICAgICAg
ICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleS5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVmVjdG9yPExlZ2FjeU9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGluZGV4
S2V5c0xpc3Q7CisgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMpOwor
CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5kZXhLZXlzKG1fdHJhbnNhY3Rp
b25JZCwgbV9vYmplY3RTdG9yZUlkLCBwcmltYXJ5S2V5LCBpbmRleElkcywgaW5kZXhLZXlzTGlz
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBhcmUgZG9u
ZSBpbmRleGluZywgdGVsbCB0aGUgYmFja2VuZCB0byBnbworICAgICAgICAgICAgLy8gYmFjayB0
byBwcm9jZXNzaW5nIHRhc2tzIG9mIHR5cGUgTm9ybWFsVGFzay4KKyAgICAgICAgICAgIG1fZGF0
YWJhc2VCYWNrZW5kLT5zZXRJbmRleGVzUmVhZHkobV90cmFuc2FjdGlvbklkLCBtX29iamVjdFN0
b3JlSWQsIGluZGV4SWRzKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kID0gbnVsbHB0
cjsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4g
bV9kYXRhYmFzZUJhY2tlbmQ7CisgICAgY29uc3QgaW50NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Cisg
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworfQorCitQYXNzUmVmUHRyPElEQkluZGV4PiBMZWdh
Y3lPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBjb25zdCBE
aWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBib29sIHVuaXF1
ZSA9IGZhbHNlOworICAgIG9wdGlvbnMuZ2V0KCJ1bmlxdWUiLCB1bmlxdWUpOworCisgICAgYm9v
bCBtdWx0aUVudHJ5ID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXQoIm11bHRpRW50cnkiLCBtdWx0
aUVudHJ5KTsKKworICAgIHJldHVybiBjcmVhdGVJbmRleChjb250ZXh0LCBuYW1lLCBrZXlQYXRo
LCB1bmlxdWUsIG11bHRpRW50cnksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gTGVn
YWN5T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgiKTsKKyAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpIHx8IG1fZGVsZXRlZCkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIWtleVBhdGguaXNWYWxpZCgpKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlN5bnRheEVycm9yOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMg
PSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoY29udGFpbnNJ
bmRleChuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJh
aW50RXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChrZXlQYXRoLnR5
cGUoKSA9PSBJREJLZXlQYXRoOjpBcnJheVR5cGUgJiYgbXVsdGlFbnRyeSkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIGludDY0X3QgaW5kZXhJZCA9IG1fbWV0YWRhdGEubWF4SW5k
ZXhJZCArIDE7CisgICAgYmFja2VuZERCKCktPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmlk
KCksIGlkKCksIGluZGV4SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisK
KyAgICArK21fbWV0YWRhdGEubWF4SW5kZXhJZDsKKworICAgIElEQkluZGV4TWV0YWRhdGEgbWV0
YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBS
ZWZQdHI8TGVnYWN5SW5kZXg+IGluZGV4ID0gTGVnYWN5SW5kZXg6OmNyZWF0ZShtZXRhZGF0YSwg
dGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5k
ZXgpOworICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5zZXQoaW5kZXhJZCwgbWV0YWRhdGEpOworCisg
ICAgQVNTRVJUKCFlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dCk7CisgICAgcmV0dXJuIGluZGV4LnJlbGVhc2Uo
KTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gTGVnYWN5T2JqZWN0U3RvcmU6OmluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lPYmplY3RTdG9yZTo6aW5kZXgiKTsKKyAgICBpZiAobV9kZWxldGVkKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzRmluaXNoZWQo
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVu
ZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgaW50NjRfdCBpbmRleElkID0g
ZmluZEluZGV4SWQobmFtZSk7CisgICAgaWYgKGluZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6
SW52YWxpZElkKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5k
RXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEqIGluZGV4TWV0YWRhdGEobnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBpbmRleCA6IG1f
bWV0YWRhdGEuaW5kZXhlcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW5kZXgubmFtZSA9PSBu
YW1lKSB7CisgICAgICAgICAgICBpbmRleE1ldGFkYXRhID0gJmluZGV4OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOworICAg
IEFTU0VSVChpbmRleE1ldGFkYXRhLT5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
OworCisgICAgUmVmUHRyPExlZ2FjeUluZGV4PiBpbmRleCA9IExlZ2FjeUluZGV4OjpjcmVhdGUo
KmluZGV4TWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1faW5kZXhN
YXAuc2V0KG5hbWUsIGluZGV4KTsKKyAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOworfQorCit2
b2lkIExlZ2FjeU9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T2JqZWN0U3Rv
cmU6OmRlbGV0ZUluZGV4Iik7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFu
Z2UoKSB8fCBtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpbnQ2NF90IGluZGV4SWQgPSBmaW5kSW5kZXhJZChuYW1lKTsKKyAgICBpZiAoaW5kZXhJZCA9
PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJhY2tlbmREQigpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRl
eElkKTsKKworICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7CisgICAgSURC
SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChp
dCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7CisgICAgICAgIGl0LT52YWx1ZS0+bWFya0RlbGV0ZWQo
KTsKKyAgICAgICAgbV9pbmRleE1hcC5yZW1vdmUobmFtZSk7CisgICAgfQorfQorCitQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBv
cGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVj
KTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6b3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIG9wZW5DdXJz
b3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIG9wZW5DdXJzb3Io
Y29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOworfQorCitQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBj
b25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJu
IG9wZW5DdXJzb3IoY29udGV4dCwgcmFuZ2UsIGRpcmVjdGlvbiwgSURCRGF0YWJhc2VCYWNrZW5k
OjpOb3JtYWxUYXNrLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2Jq
ZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5n
LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29y
Iik7CisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJDdXJz
b3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9
IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJbmRl
eGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCBkaXJlY3Rpb24pOworCisgICAgYmFja2Vu
ZERCKCktPm9wZW5DdXJzb3IobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRh
ZGF0YTo6SW52YWxpZElkLCByYW5nZSwgZGlyZWN0aW9uLCBmYWxzZSwgc3RhdGljX2Nhc3Q8SURC
RGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZT4odGFza1R5cGUpLCByZXF1ZXN0KTsKKyAgICByZXR1
cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5
T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdl
LnJlbGVhc2UoKSwgZGlyZWN0aW9uLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4g
TGVnYWN5T2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpjb3VudCIpOworICAgIGlmICht
X2RlbGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0
YXRlRXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUmVm
UHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIGJh
Y2tlbmREQigpLT5jb3VudChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQsIHJhbmdlLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb3VudChjb250ZXh0LCBr
ZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKK30KKwordm9pZCBMZWdhY3lPYmplY3RTdG9yZTo6dHJh
bnNhY3Rpb25GaW5pc2hlZCgpCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPmlzRmluaXNo
ZWQoKSk7CisKKyAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1faW5kZXhNYXAu
Y2xlYXIoKTsKK30KKworaW50NjRfdCBMZWdhY3lPYmplY3RTdG9yZTo6ZmluZEluZGV4SWQoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGZvciAoYXV0byYgaW5kZXggOiBtX21ldGFk
YXRhLmluZGV4ZXMpIHsKKyAgICAgICAgaWYgKGluZGV4LnZhbHVlLm5hbWUgPT0gbmFtZSkgewor
ICAgICAgICAgICAgQVNTRVJUKGluZGV4LmtleSAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpOworICAgICAgICAgICAgcmV0dXJuIGluZGV4LmtleTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkOworfQorCitJREJEYXRhYmFzZUJh
Y2tlbmQqIExlZ2FjeU9iamVjdFN0b3JlOjpiYWNrZW5kREIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kREIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9y
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWFlYjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
T2JqZWN0U3RvcmUuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5T2Jq
ZWN0U3RvcmVfaAorI2RlZmluZSBMZWdhY3lPYmplY3RTdG9yZV9oCisKKyNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VC
YWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklE
QkluZGV4LmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIK
KyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGVnYWN5SW5kZXguaCIKKyNpbmNs
dWRlICJMZWdhY3lUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgor
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0
OworY2xhc3MgSURCQW55OworY2xhc3MgTGVnYWN5SW5kZXg7CisKK2NsYXNzIExlZ2FjeU9iamVj
dFN0b3JlIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIElEQk9iamVjdFN0b3JlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPExlZ2FjeU9iamVjdFN0b3JlPiBjcmVhdGUoY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgbWV0YWRhdGEsIExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExlZ2FjeU9iamVj
dFN0b3JlKG1ldGFkYXRhLCB0cmFuc2FjdGlvbikpOworICAgIH0KKyAgICB+TGVnYWN5T2JqZWN0
U3RvcmUoKSB7IH0KKworICAgIC8vIEltcGxlbWVudCB0aGUgSURCT2JqZWN0U3RvcmUgSURMCisg
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICBjb25z
dCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQorICAgIFBh
c3NSZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgeyByZXR1cm4gTGVnYWN5QW55Ojpj
cmVhdGUobV9tZXRhZGF0YS5rZXlQYXRoKTsgfQorICAgIGNvbnN0IElEQktleVBhdGgga2V5UGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQorICAgIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQor
ICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0lu
Y3JlbWVudDsgfQorCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3Rh
dGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVj
dGlvbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSosIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6
RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFu
eT4sIEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1
dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3Vy
Y2UsIEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGNyZWF0ZUluZGV4KGNvbnRleHQsIG5hbWUsIElEQktleVBhdGgoa2V5UGF0aCks
IG9wdGlvbnMsIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGtleVBhdGgsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVJbmRleChjb250ZXh0LCBuYW1lLCBJREJLZXlQ
YXRoKGtleVBhdGgpLCBvcHRpb25zLCBlYyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBj
cmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJJbmRl
eD4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBk
ZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVkID0g
dHJ1ZTsgfQorICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOworCisgICAgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KKyAg
ICB2b2lkIHNldE1ldGFkYXRhKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRh
KSB7IG1fbWV0YWRhdGEgPSBtZXRhZGF0YTsgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PElEQktleT4+IEluZGV4S2V5czsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJbmRleEtl
eXM+IEluZGV4S2V5TWFwOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBMZWdhY3lPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKKworICAgIGludDY0X3QgZmluZElu
ZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmRJbmRl
eElkKG5hbWUpICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKKyAgICB9CisKKyAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7CisgICAgUmVmUHRyPExlZ2FjeVRyYW5z
YWN0aW9uPiBtX3RyYW5zYWN0aW9uOworICAgIGJvb2wgbV9kZWxldGVkOworCisgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPExlZ2FjeUluZGV4Pj4gSURCSW5kZXhNYXA7CisgICAg
SURCSW5kZXhNYXAgbV9pbmRleE1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCisKKyNlbmRpZiAvLyBMZWdhY3lPYmplY3RTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRC
UmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3MjNlOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lPcGVuREJSZXF1ZXN0LmgiCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbC5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKKyNpbmNs
dWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJMZWdhY3lEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkxlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVmPExlZ2FjeU9wZW5EQlJlcXVlc3Q+IExlZ2FjeU9wZW5EQlJlcXVlc3Q6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0
X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzKQor
eworICAgIFJlZjxMZWdhY3lPcGVuREJSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcgTGVn
YWN5T3BlbkRCUmVxdWVzdChjb250ZXh0LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24sIHZlcnNpb25OdWxsbmVzcykpKTsKKyAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsK
KyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworTGVnYWN5T3BlbkRCUmVxdWVzdDo6TGVnYWN5T3Bl
bkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWlu
dDY0X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNz
KQorICAgIDogTGVnYWN5UmVxdWVzdChjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZU51bGwoKSwg
SURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCAwKQorICAgICwgbV9kYXRhYmFzZUNhbGxi
YWNrcyhjYWxsYmFja3MpCisgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKKyAg
ICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICwgbV92ZXJzaW9uTnVsbG5lc3ModmVyc2lvbk51
bGxuZXNzKQoreworICAgIEFTU0VSVCghbV9yZXN1bHQpOworfQorCitMZWdhY3lPcGVuREJSZXF1
ZXN0Ojp+TGVnYWN5T3BlbkRCUmVxdWVzdCgpCit7Cit9CisKK0V2ZW50VGFyZ2V0SW50ZXJmYWNl
IExlZ2FjeU9wZW5EQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSURCT3BlbkRCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKK30KKwor
dm9pZCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpvbkJsb2NrZWQodWludDY0X3Qgb2xkVmVyc2lvbikK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9wZW5EQlJlcXVlc3Q6Om9uQmxvY2tlZCgp
Iik7CisgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGVucXVldWVFdmVudChMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRW
ZXJzaW9uLCBtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKK30KKwordm9p
ZCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHBycERhdGFiYXNlQmFja2VuZCwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCit7CisgICAgTE9HKFN0b3JhZ2VBUEks
ICJMZWdhY3lPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoKSIpOworICAgIGlmIChtX2Nv
bnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZD4gZGIgPSBwcnBEYXRhYmFzZUJhY2tlbmQ7CisgICAgICAg
IGRiLT5hYm9ydChtX3RyYW5zYWN0aW9uSWQpOworICAgICAgICBkYi0+Y2xvc2UobV9kYXRhYmFz
ZUNhbGxiYWNrcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFzaG91bGRFbnF1
ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZGF0YWJhc2VDYWxs
YmFja3MpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2VCYWNrZW5k
ID0gcHJwRGF0YWJhc2VCYWNrZW5kOworCisgICAgUmVmUHRyPExlZ2FjeURhdGFiYXNlPiBpZGJE
YXRhYmFzZSA9IExlZ2FjeURhdGFiYXNlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBkYXRhYmFzZUJhY2tlbmQsIG1fZGF0YWJhc2VDYWxsYmFja3MpOworICAgIGlkYkRhdGFiYXNl
LT5zZXRNZXRhZGF0YShtZXRhZGF0YSk7CisgICAgbV9kYXRhYmFzZUNhbGxiYWNrcy0+Y29ubmVj
dChpZGJEYXRhYmFzZS5nZXQoKSk7CisgICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9IG51bGxwdHI7
CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG9sZE1ldGFkYXRhKG1ldGFkYXRhKTsKKyAgICBv
bGRNZXRhZGF0YS52ZXJzaW9uID0gb2xkVmVyc2lvbjsKKworICAgIG1fdHJhbnNhY3Rpb24gPSBM
ZWdhY3lUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFu
c2FjdGlvbklkLCBpZGJEYXRhYmFzZS5nZXQoKSwgdGhpcywgb2xkTWV0YWRhdGEpOworICAgIG1f
cmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoaWRiRGF0YWJhc2UucmVsZWFzZSgpKTsKKworICAg
IGlmIChtX3ZlcnNpb25OdWxsbmVzcyA9PSBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVs
bCkKKyAgICAgICAgbV92ZXJzaW9uID0gMTsKKyAgICBlbnF1ZXVlRXZlbnQoTGVnYWN5VmVyc2lv
bkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbV92ZXJzaW9uLCBldmVudE5hbWVzKCku
dXBncmFkZW5lZWRlZEV2ZW50KSk7Cit9CisKK3ZvaWQgTGVnYWN5T3BlbkRCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBwcnBCYWNrZW5kLCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxl
Z2FjeU9wZW5EQlJlcXVlc3Q6Om9uU3VjY2VzcygpIik7CisgICAgaWYgKCFzaG91bGRFbnF1ZXVl
RXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZD4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisgICAgUmVmUHRyPExlZ2FjeURhdGFiYXNlPiBpZGJE
YXRhYmFzZTsKKyAgICBpZiAobV9yZXN1bHQpIHsKKyAgICAgICAgaWRiRGF0YWJhc2UgPSBtX3Jl
c3VsdC0+bGVnYWN5RGF0YWJhc2UoKTsKKyAgICAgICAgQVNTRVJUKGlkYkRhdGFiYXNlKTsKKyAg
ICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIGlkYkRhdGFiYXNlID0gTGVn
YWN5RGF0YWJhc2U6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQucmVs
ZWFzZSgpLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
cy0+Y29ubmVjdChpZGJEYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFj
a3MgPSBudWxscHRyOworICAgICAgICBtX3Jlc3VsdCA9IExlZ2FjeUFueTo6Y3JlYXRlKGlkYkRh
dGFiYXNlLmdldCgpKTsKKyAgICB9CisgICAgaWRiRGF0YWJhc2UtPnNldE1ldGFkYXRhKG1ldGFk
YXRhKTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKworYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0Ojpz
aG91bGRFbnF1ZXVlRXZlbnQoKSBjb25zdAoreworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8
ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwor
ICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBjbG9z
ZWQgYmV0d2VlbiBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBvZiB0aGUgInN1Y2Nl
c3MiIGV2ZW50LAorICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJlIGZpcmVkIGluc3Rl
YWQuCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAm
JiBtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6SURCRGF0YWJhc2VUeXBlICYmIG1fcmVzdWx0
LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7CisgICAgICAgIG1fcmVzdWx0
ID0gbnVsbHB0cjsKKyAgICAgICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2Vk
LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBMZWdhY3lS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjVhNTkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIExlZ2FjeU9wZW5EQlJlcXVlc3RfaAorI2RlZmluZSBM
ZWdhY3lPcGVuREJSZXF1ZXN0X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
aW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVl
c3QuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7CisK
K2NsYXNzIExlZ2FjeU9wZW5EQlJlcXVlc3QgOiBwdWJsaWMgTGVnYWN5UmVxdWVzdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxMZWdhY3lPcGVuREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lvbk51bGxu
ZXNzKTsKKyAgICB2aXJ0dWFsIH5MZWdhY3lPcGVuREJSZXF1ZXN0KCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgb25CbG9ja2VkKHVpbnQ2NF90IGV4aXN0aW5nVmVyc2lvbikgb3ZlcnJpZGUgZmluYWw7
CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpIG92ZXJyaWRl
IGZpbmFsOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAg
dmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZp
bmFsOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVldWVFdmVudCgp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIExlZ2FjeU9wZW5EQlJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lv
bk51bGxuZXNzKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFz
ZUNhbGxiYWNrczsKKyAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKKyAgICB1aW50
NjRfdCBtX3ZlcnNpb247CisgICAgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgbV92ZXJzaW9u
TnVsbG5lc3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIExlZ2FjeU9wZW5EQlJlcXVlc3RfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeVJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGVl
OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJD
dXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklE
QkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAiTGVn
YWN5Q3Vyc29yLmgiCisjaW5jbHVkZSAiTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVk
ZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxMZWdhY3lSZXF1ZXN0PiBMZWdhY3lSZXF1ZXN0Ojpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxMZWdhY3lB
bnk+IHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIFJlZjxM
ZWdhY3lSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcgTGVnYWN5UmVxdWVzdChjb250ZXh0
LCBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24pKSk7
CisgICAgcmVxdWVzdC0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgLy8gUmVxdWVzdHMgYXNzb2Np
YXRlZCB3aXRoIElEQkZhY3RvcnkgKG9wZW4vZGVsZXRlRGF0YWJhc2UvZ2V0RGF0YWJhc2VOYW1l
cykgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggdHJhbnNhY3Rpb25zLgorICAgIGlmICh0cmFuc2Fj
dGlvbikKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJlZ2lzdGVyUmVxdWVzdChyZXF1ZXN0LnB0cigp
KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworUmVmPExlZ2FjeVJlcXVlc3Q+IExlZ2FjeVJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PExlZ2FjeUFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBl
LCBMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgUmVmPExlZ2FjeVJlcXVl
c3Q+IHJlcXVlc3QoYWRvcHRSZWYoKm5ldyBMZWdhY3lSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwg
dGFza1R5cGUsIHRyYW5zYWN0aW9uKSkpOworICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgp
OworICAgIC8vIFJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCBJREJGYWN0b3J5IChvcGVuL2RlbGV0
ZURhdGFiYXNlL2dldERhdGFiYXNlTmFtZXMpIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIHRyYW5z
YWN0aW9ucy4KKyAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgICAgIHRyYW5zYWN0aW9uLT5yZWdp
c3RlclJlcXVlc3QocmVxdWVzdC5wdHIoKSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK0xl
Z2FjeVJlcXVlc3Q6OkxlZ2FjeVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIDogSURC
T3BlbkRCUmVxdWVzdChjb250ZXh0KQorICAgICwgbV9yZXN1bHQobnVsbHB0cikKKyAgICAsIG1f
ZXJyb3JDb2RlKDApCisgICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQorICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fcmVhZHlTdGF0ZShQRU5ESU5HKQorICAgICwg
bV9yZXF1ZXN0QWJvcnRlZChmYWxzZSkKKyAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1f
dGFza1R5cGUodGFza1R5cGUpCisgICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQorICAg
ICwgbV9jdXJzb3JUeXBlKEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWUpCisgICAg
LCBtX2N1cnNvckRpcmVjdGlvbihJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbjo6TmV4dCkKKyAg
ICAsIG1fY3Vyc29yRmluaXNoZWQoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdDdXJzb3IobnVsbHB0
cikKKyAgICAsIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudChmYWxzZSkKKyAgICAsIG1fcHJl
dmVudFByb3BhZ2F0aW9uKGZhbHNlKQorICAgICwgbV9yZXF1ZXN0U3RhdGUoY29udGV4dCkKK3sK
K30KKworTGVnYWN5UmVxdWVzdDo6fkxlZ2FjeVJlcXVlc3QoKQoreworfQorCitQYXNzUmVmUHRy
PElEQkFueT4gTGVnYWN5UmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAor
eworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIHJldHVybiBtX3Jlc3VsdDsKK30KKworUGFzc1JlZlB0cjxET01FcnJvcj4gTGVnYWN5
UmVxdWVzdDo6ZXJyb3IoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVh
ZHlTdGF0ZSAhPSBET05FKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1f
ZXJyb3I7Cit9CisKK3Vuc2lnbmVkIHNob3J0IExlZ2FjeVJlcXVlc3Q6OmVycm9yQ29kZShFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IERPTkUpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbV9lcnJvckNvZGU7Cit9CisKK1Bh
c3NSZWZQdHI8SURCQW55PiBMZWdhY3lSZXF1ZXN0Ojpzb3VyY2UoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3NvdXJjZTsKK30KKworUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gTGVnYWN5UmVx
dWVzdDo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uOwor
fQorCitjb25zdCBTdHJpbmcmIExlZ2FjeVJlcXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9O
RSk7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcGVu
ZGluZywgKCJwZW5kaW5nIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwor
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGRvbmUsICgi
ZG9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKworICAgIGlmICht
X3JlYWR5U3RhdGUgPT0gUEVORElORykKKyAgICAgICAgcmV0dXJuIHBlbmRpbmc7CisKKyAgICBy
ZXR1cm4gZG9uZTsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjptYXJrRWFybHlEZWF0aCgpCit7
CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKKyAgICBtX3JlYWR5U3RhdGUg
PSBFYXJseURlYXRoOworICAgIGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAgICBtX3RyYW5zYWN0
aW9uLT51bnJlZ2lzdGVyUmVxdWVzdCh0aGlzKTsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0Ojph
Ym9ydCgpCit7CisgICAgQVNTRVJUKCFtX3JlcXVlc3RBYm9ydGVkKTsKKyAgICBpZiAobV9jb250
ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBE
T05FKTsKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IERPTkUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEVucXVldWVkIGV2ZW50cyBtYXkgYmUgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoaXMg
b2JqZWN0LgorICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiBzZWxmKHRoaXMpOworCisgICAgRXZl
bnRRdWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpOworICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7CisgICAgICAg
IGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICB9CisgICAgbV9lbnF1ZXVlZEV2
ZW50cy5jbGVhcigpOworCisgICAgbV9lcnJvckNvZGUgPSAwOworICAgIG1fZXJyb3IgPSBudWxs
cHRyOworICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7CisgICAgbV9yZXN1bHQgPSBudWxs
cHRyOworICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpBYm9ydEVycm9yKSk7CisgICAgbV9yZXF1ZXN0QWJvcnRlZCA9IHRydWU7Cit9CisK
K3ZvaWQgTGVnYWN5UmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhJbmRleGVkREI6OkN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CisgICAgQVNTRVJUKCFtX3BlbmRp
bmdDdXJzb3IpOworICAgIG1fY3Vyc29yVHlwZSA9IGN1cnNvclR5cGU7CisgICAgbV9jdXJzb3JE
aXJlY3Rpb24gPSBkaXJlY3Rpb247Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6c2V0UGVuZGlu
Z0N1cnNvcihQYXNzUmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vyc29yKQoreworICAgIEFTU0VSVCht
X3JlYWR5U3RhdGUgPT0gRE9ORSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVCghbV9wZW5kaW5nQ3Vy
c29yKTsKKyAgICBBU1NFUlQoY3Vyc29yID09IGdldFJlc3VsdEN1cnNvcigpKTsKKworICAgIG1f
cGVuZGluZ0N1cnNvciA9IGN1cnNvcjsKKyAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CisgICAgbV9y
ZWFkeVN0YXRlID0gUEVORElORzsKKyAgICBtX2Vycm9yQ29kZSA9IDA7CisgICAgbV9lcnJvciA9
IG51bGxwdHI7CisgICAgbV9lcnJvck1lc3NhZ2UgPSBTdHJpbmcoKTsKKyAgICBtX3RyYW5zYWN0
aW9uLT5yZWdpc3RlclJlcXVlc3QodGhpcyk7Cit9CisKK1JlZlB0cjxMZWdhY3lDdXJzb3I+IExl
Z2FjeVJlcXVlc3Q6OmdldFJlc3VsdEN1cnNvcigpCit7CisgICAgaWYgKCFtX3Jlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55
OjpJREJDdXJzb3JUeXBlKQorICAgICAgICByZXR1cm4gbV9yZXN1bHQtPmxlZ2FjeUN1cnNvcigp
OworICAgIGlmIChtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVl
VHlwZSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5sZWdhY3lDdXJzb3JXaXRoVmFsdWUoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpzZXRSZXN1bHRD
dXJzb3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcp
OworICAgIG1fY3Vyc29yS2V5ID0ga2V5OworICAgIG1fY3Vyc29yUHJpbWFyeUtleSA9IHByaW1h
cnlLZXk7CisgICAgbV9jdXJzb3JWYWx1ZSA9IHZhbHVlOworCisgICAgaWYgKG1fY3Vyc29yVHlw
ZSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkpIHsKKyAgICAgICAgbV9yZXN1bHQg
PSBMZWdhY3lBbnk6OmNyZWF0ZShjdXJzb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9yZXN1bHQgPSBMZWdhY3lBbnk6OmNyZWF0ZShMZWdhY3lDdXJzb3JXaXRoVmFsdWU6OmZy
b21DdXJzb3IoY3Vyc29yKSk7Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6ZmluaXNoQ3Vyc29y
KCkKK3sKKyAgICBtX2N1cnNvckZpbmlzaGVkID0gdHJ1ZTsKKyAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IFBFTkRJTkcpCisgICAgICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7Cit9CisK
K2Jvb2wgTGVnYWN5UmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3QKK3sKKyAgICBp
ZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1f
cmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CisgICAg
QVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9lcnJv
ciAmJiAhbV9yZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIExlZ2FjeVJlcXVl
c3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKK3sKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uRXJyb3IoKSAoJXMpICclcyciLCBlcnJv
ci0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9lcnJvckNvZGUgPSBlcnJvci0+Y29kZSgpOworICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3It
Pm1lc3NhZ2UoKTsKKyAgICBtX2Vycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKGVycm9yLT5pZGJDb2RlKCkpKTsKKyAgICBtX3BlbmRpbmdD
dXJzb3IgPSBudWxscHRyOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2
ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQoreworICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgTGVnYWN5
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlz
dCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhET01T
dHJpbmdMaXN0KSIpOworICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoZG9tU3RyaW5nTGlzdCk7
CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwordm9pZCBMZWdh
Y3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBwcnBCYWNr
ZW5kKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKElE
QkN1cnNvcikiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsK
KworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kID0gcHJwQmFja2VuZDsKKyAg
ICBSZWZQdHI8SURCS2V5PiBrZXkgPSBiYWNrZW5kLT5rZXkoKTsKKyAgICBSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5ID0gYmFja2VuZC0+cHJpbWFyeUtleSgpOworCisgICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0
ZSgpLCBiYWNrZW5kLT52YWx1ZUJ1ZmZlcigpLCAhIWtleSk7CisKKyAgICBBU1NFUlQoIW1fcGVu
ZGluZ0N1cnNvcik7CisgICAgUmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vyc29yOworICAgIHN3aXRj
aCAobV9jdXJzb3JUeXBlKSB7CisgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9u
bHk6CisgICAgICAgIGN1cnNvciA9IExlZ2FjeUN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQucmVsZWFz
ZSgpLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZTo6S2V5QW5kVmFsdWU6CisgICAgICAgIGN1cnNvciA9IExlZ2FjeUN1cnNvcldpdGhWYWx1ZTo6
Y3JlYXRlKGJhY2tlbmQucmVsZWFzZSgpLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3Vy
Y2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgc2V0UmVzdWx0
Q3Vyc29yKGN1cnNvciwga2V5LnJlbGVhc2UoKSwgcHJpbWFyeUtleS5yZWxlYXNlKCksIHZhbHVl
KTsKKworICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQg
TGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCS2V5KSIpOwor
ICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChpZGJLZXkgJiYgaWRiS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgRE9NUmVxdWVzdFN0YXRl
OjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisgICAgICAgIG1fcmVzdWx0ID0gTGVnYWN5
QW55OjpjcmVhdGUoaWRiS2V5VG9TY3JpcHRWYWx1ZShyZXF1ZXN0U3RhdGUoKSwgaWRiS2V5KSk7
CisgICAgfSBlbHNlCisgICAgICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGVJbnZhbGlk
KCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwordm9pZCBM
ZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVm
ZmVyKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFNo
YXJlZEJ1ZmZlcikiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRl
KTsKKworICAgIC8vIEZJWE1FOiBCeSBub3Qga25vd2luZyB3aGV0aGVyIG9yIG5vdCB0aGUga2V5
IGlzIGRlZmluZWQgaGVyZSwgd2UgZG9uJ3Qga25vdworICAgIC8vIGlmIGEgbnVsbCB2YWx1ZUJ1
ZmZlciBtZWFucyB0aGUgdmFsdWUgaXMgbnVsbCBvciB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLgor
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZUJ1
ZmZlcihyZXF1ZXN0U3RhdGUoKSwgdmFsdWVCdWZmZXIsIHRydWUpOworICAgIG9uU3VjY2Vzc0lu
dGVybmFsKHZhbHVlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZShMZWdhY3lBbnkqIHNvdXJjZSkKK3sK
KyAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9yZVR5cGUpCisg
ICAgICAgIHJldHVybiBzb3VyY2UtPmlkYk9iamVjdFN0b3JlKCk7CisgICAgaWYgKHNvdXJjZS0+
dHlwZSgpID09IElEQkFueTo6SURCSW5kZXhUeXBlKQorICAgICAgICByZXR1cm4gc291cmNlLT5p
ZGJJbmRleCgpLT5vYmplY3RTdG9yZSgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQYXNzUmVmUHRyPElEQktleT4g
cHJwUHJpbWFyeUtleSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhTaGFyZWRCdWZmZXIsIElEQktleSwg
SURCS2V5UGF0aCkiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKGtleVBhdGggPT0gZWZmZWN0aXZl
T2JqZWN0U3RvcmUobV9zb3VyY2UuZ2V0KCkpLT5rZXlQYXRoKCkpOworI2VuZGlmCisgICAgRE9N
UmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisKKyAgICAvLyBGSVhN
RTogQnkgbm90IGtub3dpbmcgd2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkZWZpbmVkIGhlcmUs
IHdlIGRvbid0IGtub3cKKyAgICAvLyBpZiBhIG51bGwgdmFsdWVCdWZmZXIgbWVhbnMgdGhlIHZh
bHVlIGlzIG51bGwgb3IgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIocmVxdWVzdFN0YXRl
KCksIHZhbHVlQnVmZmVyLCB0cnVlKTsKKworICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkg
PSBwcnBQcmltYXJ5S2V5OworCisgICAgaWYgKCFrZXlQYXRoLmlzTnVsbCgpKSB7CisjaWZuZGVm
IE5ERUJVRworICAgICAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgocmVxdWVzdFN0YXRlKCktPmV4ZWMoKSwgdmFsdWUs
IGtleVBhdGgpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5p
c0VxdWFsKHByaW1hcnlLZXkuZ2V0KCkpKTsKKyNlbmRpZgorICAgICAgICBib29sIGluamVjdGVk
ID0gaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHJlcXVlc3RTdGF0ZSgpLCBwcmltYXJ5S2V5
LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5qZWN0ZWQsIGluamVj
dGVkKTsKKyAgICB9CisKKyAgICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7Cit9CisKK3ZvaWQg
TGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKGludDY0X3QgdmFsdWUpCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoaW50NjRfdCkiKTsKKyAgICBpZiAoIXNo
b3VsZEVucXVldWVFdmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG9uU3VjY2Vz
c0ludGVybmFsKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUodmFsdWUpKTsKK30K
Kwordm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoKQoreworICAgIExPRyhTdG9yYWdlQVBJ
LCAiTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKCkiKTsKKyAgICBpZiAoIXNob3VsZEVucXVldWVF
dmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG9uU3VjY2Vzc0ludGVybmFsKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK3ZvaWQgTGVnYWN5
UmVxdWVzdDo6b25TdWNjZXNzSW50ZXJuYWwoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CisgICAgRE9NUmVx
dWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CisgICAgcmV0dXJuIG9uU3Vj
Y2Vzc0ludGVybmFsKGRlc2VyaWFsaXplSURCVmFsdWUocmVxdWVzdFN0YXRlKCksIHZhbHVlKSk7
Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzSW50ZXJuYWwoY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55Ojpj
cmVhdGUodmFsdWUpOworICAgIGlmIChtX3BlbmRpbmdDdXJzb3IpIHsKKyAgICAgICAgbV9wZW5k
aW5nQ3Vyc29yLT5jbG9zZSgpOworICAgICAgICBtX3BlbmRpbmdDdXJzb3IgPSBudWxscHRyOwor
ICAgIH0KKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lk
IExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhrZXksIHBy
aW1hcnlLZXksIHZhbHVlQnVmZmVyKSIpOworICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9y
ZXF1ZXN0U3RhdGUpOworCisgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNl
cmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0ZSgpLCBidWZmZXIsICEha2V5KTsKKwor
ICAgIEFTU0VSVChtX3BlbmRpbmdDdXJzb3IpOworICAgIHNldFJlc3VsdEN1cnNvcihtX3BlbmRp
bmdDdXJzb3IucmVsZWFzZSgpLCBrZXksIHByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBlbnF1ZXVl
RXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lkIExlZ2FjeVJlcXVlc3Q6Om9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEmKQoreworICAgIC8vIE9ubHkgdGhlIExlZ2FjeU9wZW5EQlJlcXVlc3QgdmVyc2lv
biBvZiB0aGlzIHNob3VsZCBldmVyIGJlIGNhbGxlZDsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworYm9vbCBMZWdhY3lSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugc2hvdWxkIHJldHVybiB0cnVl
IGFzIGxvbmcgYXMgYW55b25lIGhhcyBhIG9yIGNhbgorICAgIC8vICAgICAgICBnZXQgYSBoYW5k
bGUgdG8gdXMgYW5kIHdlIGhhdmUgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlzIG9yZGVyIHRvIGhh
bmRsZQorICAgIC8vICAgICAgICB1c2VyIGdlbmVyYXRlZCBldmVudHMgcHJvcGVybHkuCisgICAg
cmV0dXJuIG1faGFzUGVuZGluZ0FjdGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOworfQorCit2
b2lkIExlZ2FjeVJlcXVlc3Q6OnN0b3AoKQoreworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKKyAgICBtX3Jl
cXVlc3RTdGF0ZS5jbGVhcigpOworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gUEVORElORykKKyAg
ICAgICAgbWFya0Vhcmx5RGVhdGgoKTsKK30KKworYm9vbCBMZWdhY3lSZXF1ZXN0OjpjYW5TdXNw
ZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faGFzUGVuZGluZ0FjdGl2
aXR5OworfQorCitjb25zdCBjaGFyKiBMZWdhY3lSZXF1ZXN0OjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIkxlZ2FjeVJlcXVlc3QiOworfQorCitFdmVudFRhcmdl
dEludGVyZmFjZSBMZWdhY3lSZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIElEQlJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7Cit9CisKK2Jv
b2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
K3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOworICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7CisgICAgQVNTRVJUKG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKKyAgICBBU1NF
UlQobV9lbnF1ZXVlZEV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5U3RhdGUgPCBET05FLCAiV2hlbiBkaXNwYXRjaGluZyBl
dmVudCAlcywgbV9yZWFkeVN0YXRlIDwgRE9ORSglZCksIHdhcyAlZCIsIGV2ZW50LT50eXBlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgRE9ORSwgbV9yZWFkeVN0YXRlKTsKKworICAgIERPTVJl
cXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9yZXF1ZXN0U3RhdGUpOworCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICAgICAgbV9yZWFkeVN0
YXRlID0gRE9ORTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9
PSBldmVudC5nZXQoKSkKKyAgICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwor
ICAgIH0KKworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOworICAgIHRh
cmdldHMuYXBwZW5kKHRoaXMpOworICAgIGlmIChtX3RyYW5zYWN0aW9uICYmICFtX3ByZXZlbnRQ
cm9wYWdhdGlvbikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uKTsKKyAg
ICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0
aCBhIGRhdGFiYXNlIGJ1dAorICAgICAgICAvLyB0aGF0IGRvIG5vdCBoYXZlIGEgdHJhbnNhY3Rp
b24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3ZSBuZWVkCisgICAgICAgIC8vIHRoaXMg
b2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGRhdGFiYXNlICh0byBl
bnN1cmUKKyAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUpLgorICAgICAgICB0YXJnZXRzLmFwcGVu
ZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKKyAgICB9CisKKyAgICAvLyBDdXJzb3IgcHJvcGVydGll
cyBzaG91bGQgbm90IHVwZGF0ZWQgdW50aWwgdGhlIHN1Y2Nlc3MgZXZlbnQgaXMgYmVpbmcgZGlz
cGF0Y2hlZC4KKyAgICBSZWZQdHI8TGVnYWN5Q3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKKyAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50KSB7CisgICAgICAg
IGN1cnNvclRvTm90aWZ5ID0gZ2V0UmVzdWx0Q3Vyc29yKCk7CisgICAgICAgIGlmIChjdXJzb3JU
b05vdGlmeSkgeworICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnNldFZhbHVlUmVhZHkocmVx
dWVzdFN0YXRlKCksIG1fY3Vyc29yS2V5LnJlbGVhc2UoKSwgbV9jdXJzb3JQcmltYXJ5S2V5LnJl
bGVhc2UoKSwgbV9jdXJzb3JWYWx1ZSk7CisgICAgICAgICAgICBtX2N1cnNvclZhbHVlLmNsZWFy
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSB7CisgICAgICAgIEFTU0VSVCghbV9kaWRGaXJlVXBn
cmFkZU5lZWRlZEV2ZW50KTsKKyAgICAgICAgbV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQg
ZGlzcGF0Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVu
dCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQsICJldmVudCB0eXBlIHdhcyAlcyIsIGV2ZW50
LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgY29uc3QgYm9vbCBzZXRUcmFu
c2FjdGlvbkFjdGl2ZSA9IG1fdHJhbnNhY3Rpb24gJiYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdy
YWRlbmVlZGVkRXZlbnQgfHwgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZl
bnQgJiYgbV9lcnJvckNvZGUgIT0gSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsK
KworICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2ZSkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+
c2V0QWN0aXZlKHRydWUpOworCisgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKworICAgIGlmICht
X3RyYW5zYWN0aW9uKSB7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gRE9ORSkKKyAgICAg
ICAgICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworCisgICAgICAg
IC8vIFBvc3NpYmx5IGFib3J0IHRoZSB0cmFuc2FjdGlvbi4gVGhpcyBtdXN0IG9jY3VyIGFmdGVy
IHVucmVnaXN0ZXJpbmcgKHNvIHRoaXMgcmVxdWVzdAorICAgICAgICAvLyBkb2Vzbid0IHJlY2Vp
dmUgYSBzZWNvbmQgZXJyb3IpIGFuZCBiZWZvcmUgZGVhY3RpdmF0aW5nICh3aGljaCBtaWdodCB0
cmlnZ2VyIGNvbW1pdCkuCisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50ICYmIGRvbnRQcmV2ZW50RGVmYXVsdCAmJiAhbV9yZXF1ZXN0QWJvcnRlZCkg
eworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0RXJyb3IobV9lcnJvciwgbV9lcnJvck1l
c3NhZ2UpOworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoSUdOT1JFX0VYQ0VQVElP
Tik7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCByZXF1ZXN0
IGluIHRoZSB0cmFuc2FjdGlvbidzIGxpc3QsIGl0IG1heSBjb21taXQgaGVyZS4KKyAgICAgICAg
aWYgKHNldFRyYW5zYWN0aW9uQWN0aXZlKQorICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0
QWN0aXZlKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCisgICAgICAg
IGN1cnNvclRvTm90aWZ5LT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOworCisgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBET05FICYmICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5p
c2hlZCkgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50
KQorICAgICAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOworCisgICAgcmV0dXJuIGRv
bnRQcmV2ZW50RGVmYXVsdDsKK30KKwordm9pZCBMZWdhY3lSZXF1ZXN0Ojp1bmNhdWdodEV4Y2Vw
dGlvbkluRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV90cmFuc2FjdGlvbiAmJiAhbV9yZXF1
ZXN0QWJvcnRlZCkgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRFcnJvcihET01FcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0YWJhc2VFeGNl
cHRpb246OkFib3J0RXJyb3IpKSwgIlVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBldmVudCBoYW5kbGVy
LiIpOworICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNw
YXRjaCgpCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSk7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBE
T05FKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBtX3RyYW5z
YWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX3JlYWR5U3RhdGUgPSBQRU5ESU5HOworfQorCit2b2lk
IExlZ2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERP
TkUpOworCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5
U3RhdGUgPT0gUEVORElORyB8fCBtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQsICJXaGVuIHF1
ZXVlaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgd2FzICVkIiwgZXZlbnQtPnR5cGUoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBtX3JlYWR5U3RhdGUpOworCisgICAgZXZlbnQtPnNldFRhcmdl
dCh0aGlzKTsKKworICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUo
KS5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkpKQorICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFw
cGVuZChldmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVx
dWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJl
cXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdmZDUwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeVJlcXVlc3QuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZWdhY3lSZXF1ZXN0X2gKKyNkZWZpbmUg
TGVnYWN5UmVxdWVzdF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUVycm9yLmgiCisjaW5jbHVkZSAi
RE9NUmVxdWVzdFN0YXRlLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VD
YWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGVn
YWN5QW55LmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTGVnYWN5VHJhbnNhY3Rpb247CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIExlZ2FjeVJlcXVlc3QgOiBwdWJsaWMgSURCT3BlbkRCUmVxdWVzdCwg
cHVibGljIElEQkNhbGxiYWNrcyB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxMZWdhY3lSZXF1
ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0aW9uKik7CisgICAgc3RhdGljIFJlZjxMZWdhY3lSZXF1
ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIExlZ2FjeVRyYW5zYWN0aW9u
Kik7CisgICAgdmlydHVhbCB+TGVnYWN5UmVxdWVzdCgpOworCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdCBvdmVycmlkZSBmaW5hbDsK
KyAgICBQYXNzUmVmUHRyPExlZ2FjeUFueT4gbGVnYWN5UmVzdWx0KEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGVycm9yQ29kZShFeGNlcHRpb25Db2RlJikgY29u
c3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTUVycm9yPiBlcnJv
cihFeGNlcHRpb25Db2RlJikgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiByZWFkeVN0YXRlKCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWw7CisKKyAgICB2b2lkIHByZXZlbnRQcm9wYWdhdGlvbigpIHsgbV9wcmV2ZW50
UHJvcGFnYXRpb24gPSB0cnVlOyB9CisKKyAgICB2b2lkIG1hcmtFYXJseURlYXRoKCk7CisgICAg
dm9pZCBzZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24pOworICAgIHZvaWQgc2V0UGVuZGluZ0N1cnNvcihQYXNzUmVmUHRyPExl
Z2FjeUN1cnNvcj4pOworICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7CisgICAgdm9pZCBhYm9ydCgp
OworCisgICAgLy8gSURCQ2FsbGJhY2tzCisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lk
IG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KSBvdmVycmlkZSBmaW5hbDsKKyAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4pIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJL
ZXk+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIG9uU3Vj
Y2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIFBhc3NSZWZQdHI8SURCS2V5PiwgY29uc3Qg
SURCS2V5UGF0aCYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
aW50NjRfdCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcygpIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJL
ZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpIG92ZXJy
aWRlOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxl
cigpIG92ZXJyaWRlIGZpbmFsOworCisgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZl
bnQ7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92
ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCk7CisK
KyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgeyByZXR1cm4gbV90
YXNrVHlwZTsgfQorCisgICAgRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUoKSB7IHJldHVy
biAmbV9yZXF1ZXN0U3RhdGU7IH0KKworICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCisgICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHVzaW5nIElE
QkNhbGxiYWNrczo6cmVmOworICAgIHVzaW5nIElEQkNhbGxiYWNrczo6ZGVyZWY7CisKK3Byb3Rl
Y3RlZDoKKyAgICBMZWdhY3lSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPExlZ2FjeUFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBMZWdh
Y3lUcmFuc2FjdGlvbiopOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Q7CisgICAgdm9p
ZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwor
ICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
KTsKKworICAgIFJlZlB0cjxMZWdhY3lBbnk+IG1fcmVzdWx0OworICAgIHVuc2lnbmVkIHNob3J0
IG1fZXJyb3JDb2RlOworICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKKyAgICBSZWZQdHI8RE9N
RXJyb3I+IG1fZXJyb3I7CisgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOworICAgIFJlZlB0cjxM
ZWdhY3lUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKKyAgICBib29sIG1fcmVxdWVzdEFib3J0ZWQ7IC8vIE1heSBiZSBhYm9ydGVkIGJ5IHRy
YW5zYWN0aW9uIHRoZW4gcmVjZWl2ZSBhc3luYyBvbnN1Y2Nlc3M7IGlnbm9yZSB2cy4gYXNzZXJ0
LgorCitwcml2YXRlOgorICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCisgICAgdm9pZCBzdG9w
KCkgb3ZlcnJpZGU7CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gRXZlbnRUYXJnZXQgQVBJLgorICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVy
ZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQorCisgICAgUmVmUHRy
PExlZ2FjeUN1cnNvcj4gZ2V0UmVzdWx0Q3Vyc29yKCk7CisgICAgdm9pZCBzZXRSZXN1bHRDdXJz
b3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwor
CisgICAgUmVmUHRyPExlZ2FjeUFueT4gbV9zb3VyY2U7CisgICAgY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworCisgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rp
dml0eTsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9lbnF1ZXVlZEV2ZW50czsKKworICAg
IC8vIE9ubHkgdXNlZCBpZiB0aGUgcmVzdWx0IHR5cGUgd2lsbCBiZSBhIGN1cnNvci4KKyAgICBJ
bmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIG1fY3Vyc29yRGlyZWN0aW9uOworICAgIGJvb2wgbV9jdXJzb3JGaW5pc2hlZDsK
KyAgICBSZWZQdHI8TGVnYWN5Q3Vyc29yPiBtX3BlbmRpbmdDdXJzb3I7CisgICAgUmVmUHRyPElE
QktleT4gbV9jdXJzb3JLZXk7CisgICAgUmVmUHRyPElEQktleT4gbV9jdXJzb3JQcmltYXJ5S2V5
OworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3Vyc29yVmFsdWU7CisgICAgYm9vbCBt
X2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQ7CisgICAgYm9vbCBtX3ByZXZlbnRQcm9wYWdhdGlv
bjsKKworICAgIERPTVJlcXVlc3RTdGF0ZSBtX3JlcXVlc3RTdGF0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
ZW5kaWYgLy8gTGVnYWN5UmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWNmNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9u
LmNwcApAQCAtMCwwICsxLDM4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMZWdhY3lUcmFuc2FjdGlvbi5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJJREJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURC
RXZlbnREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKKyNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIK
KyNpbmNsdWRlICJMZWdhY3lDdXJzb3IuaCIKKyNpbmNsdWRlICJMZWdhY3lPYmplY3RTdG9yZS5o
IgorI2luY2x1ZGUgIkxlZ2FjeU9wZW5EQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlZjxMZWdhY3lUcmFuc2FjdGlvbj4gTGVnYWN5VHJhbnNhY3Rpb246OmNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90IGlkLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9k
ZSwgTGVnYWN5RGF0YWJhc2UqIGRiKQoreworICAgIExlZ2FjeU9wZW5EQlJlcXVlc3QqIG9wZW5E
QlJlcXVlc3QgPSBudWxscHRyOworICAgIFJlZjxMZWdhY3lUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24oYWRvcHRSZWYoKm5ldyBMZWdhY3lUcmFuc2FjdGlvbihjb250ZXh0LCBpZCwgb2JqZWN0U3Rv
cmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSkp
KTsKKyAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHRyYW5z
YWN0aW9uOworfQorCitSZWY8TGVnYWN5VHJhbnNhY3Rpb24+IExlZ2FjeVRyYW5zYWN0aW9uOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50NjRfdCBpZCwgTGVnYWN5
RGF0YWJhc2UqIGRiLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQoreworICAgIFJlZjxMZWdhY3lU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYoKm5ldyBMZWdhY3lUcmFuc2FjdGlvbihj
b250ZXh0LCBpZCwgVmVjdG9yPFN0cmluZz4oKSwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6
OlZlcnNpb25DaGFuZ2UsIGRiLCBvcGVuREJSZXF1ZXN0LCBwcmV2aW91c01ldGFkYXRhKSkpOwor
ICAgIHRyYW5zYWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gdHJhbnNhY3Rp
b247Cit9CisKK0xlZ2FjeVRyYW5zYWN0aW9uOjpMZWdhY3lUcmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90IGlkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
b2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSwgTGVnYWN5
RGF0YWJhc2UqIGRiLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiBvcGVuREJSZXF1ZXN0LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQorICAgIDogSURCVHJhbnNhY3Rp
b24oY29udGV4dCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX2RhdGFiYXNlKGRiKQorICAgICwg
bV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlTmFtZXMpCisgICAgLCBtX29wZW5EQlJlcXVl
c3Qob3BlbkRCUmVxdWVzdCkKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9zdGF0ZShBY3Rp
dmUpCisgICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQorICAgICwgbV9jb250ZXh0U3Rv
cHBlZChmYWxzZSkKKyAgICAsIG1fcHJldmlvdXNNZXRhZGF0YShwcmV2aW91c01ldGFkYXRhKQor
eworICAgIGlmIChtb2RlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hh
bmdlKSB7CisgICAgICAgIC8vIE5vdCBhY3RpdmUgdW50aWwgdGhlIGNhbGxiYWNrLgorICAgICAg
ICBtX3N0YXRlID0gSW5hY3RpdmU7CisgICAgfQorCisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5j
ZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9w
dGlvblJlcXVpcmVtZW50KCk7CisgICAgaWYgKG1fc3RhdGUgPT0gQWN0aXZlKQorICAgICAgICBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFuc2FjdGlvbih0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNyZWF0ZWQodGhpcyk7Cit9CisKK0xlZ2FjeVRyYW5z
YWN0aW9uOjp+TGVnYWN5VHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IEZp
bmlzaGVkIHx8IG1fY29udGV4dFN0b3BwZWQpOworICAgIEFTU0VSVChtX3JlcXVlc3RMaXN0Lmlz
RW1wdHkoKSB8fCBtX2NvbnRleHRTdG9wcGVkKTsKK30KKworY29uc3QgU3RyaW5nJiBMZWdhY3lU
cmFuc2FjdGlvbjo6bW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1vZGVUb1N0cmluZyhtX21v
ZGUpOworfQorCitJREJEYXRhYmFzZSogTGVnYWN5VHJhbnNhY3Rpb246OmRiKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlv
bjo6c2V0RXJyb3IoUGFzc1JlZlB0cjxET01FcnJvcj4gZXJyb3IsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKKyAgICBBU1NF
UlQoZXJyb3IpOworCisgICAgLy8gVGhlIGZpcnN0IGVycm9yIHRvIGJlIHNldCBpcyB0aGUgdHJ1
ZSBjYXVzZSBvZiB0aGUKKyAgICAvLyB0cmFuc2FjdGlvbiBhYm9ydC4KKyAgICBpZiAoIW1fZXJy
b3IpIHsKKyAgICAgICAgbV9lcnJvciA9IGVycm9yOworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IGVycm9yTWVzc2FnZTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IExl
Z2FjeVRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29i
amVjdFN0b3JlTWFwLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBpZiAoIWlzVmVyc2lvbkNo
YW5nZSgpICYmICFtX29iamVjdFN0b3JlTmFtZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbV9kYXRhYmFzZS0+Zmlu
ZE9iamVjdFN0b3JlSWQobmFtZSk7CisgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChpc1ZlcnNpb25DaGFu
Z2UoKSk7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhID0gbV9kYXRhYmFzZS0+bWV0YWRhdGEoKTsKKworICAgIFJlZlB0cjxMZWdh
Y3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBMZWdhY3lPYmplY3RTdG9yZTo6Y3JlYXRlKG1l
dGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCksIHRoaXMpOworICAgIG9iamVj
dFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgcmV0dXJuIG9iamVjdFN0b3Jl
LnJlbGVhc2UoKTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVDcmVh
dGVkKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gcHJw
T2JqZWN0U3RvcmUpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOworICAgIFJl
ZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKKyAg
ICBtX29iamVjdFN0b3JlTWFwLnNldChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgaWYgKGlzVmVy
c2lvbkNoYW5nZSgpKQorICAgICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5zZXQob2JqZWN0
U3RvcmUsIG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2Fj
dGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NF
UlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7CisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsK
KyAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZp
bmQobmFtZSk7CisgICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpIHsKKyAgICAg
ICAgUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGl0LT52YWx1ZTsKKyAg
ICAgICAgbV9vYmplY3RTdG9yZU1hcC5yZW1vdmUobmFtZSk7CisgICAgICAgIG9iamVjdFN0b3Jl
LT5tYXJrRGVsZXRlZCgpOworICAgICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5zZXQob2Jq
ZWN0U3RvcmUsIG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbV9kZWxldGVkT2Jq
ZWN0U3RvcmVzLmFkZChvYmplY3RTdG9yZSk7CisgICAgfQorfQorCit2b2lkIExlZ2FjeVRyYW5z
YWN0aW9uOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lUcmFuc2FjdGlvbjo6c2V0QWN0aXZlKCVzKSBmb3IgdHJhbnNhY3Rpb24gaWQgJWxsaSIs
IGFjdGl2ZSA/ICJ0cnVlIiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9pZCkp
OworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdGF0ZSAhPSBGaW5pc2hlZCwgIkEgZmluaXNo
ZWQgdHJhbnNhY3Rpb24gdHJpZWQgdG8gc2V0QWN0aXZlKCVzKSIsIGFjdGl2ZSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGluZykKKyAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChhY3RpdmUgIT0gKG1fc3RhdGUgPT0gQWN0aXZlKSk7CisgICAgbV9zdGF0
ZSA9IGFjdGl2ZSA/IEFjdGl2ZSA6IEluYWN0aXZlOworCisgICAgaWYgKCFhY3RpdmUgJiYgbV9y
ZXF1ZXN0TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIGJhY2tlbmREQigpLT5jb21taXQobV9pZCk7
Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmFib3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGluZyB8fCBtX3N0YXRlID09IEZpbmlzaGVkKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKKworICAg
IHdoaWxlICghbV9yZXF1ZXN0TGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPExlZ2Fj
eVJlcXVlc3Q+IHJlcXVlc3QgPSAqbV9yZXF1ZXN0TGlzdC5iZWdpbigpOworICAgICAgICBtX3Jl
cXVlc3RMaXN0LnJlbW92ZShyZXF1ZXN0KTsKKyAgICAgICAgcmVxdWVzdC0+YWJvcnQoKTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOworICAg
IGJhY2tlbmREQigpLT5hYm9ydChtX2lkKTsKK30KKworTGVnYWN5VHJhbnNhY3Rpb246Ok9wZW5D
dXJzb3JOb3RpZmllcjo6T3BlbkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8TGVnYWN5VHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uLCBMZWdhY3lDdXJzb3IqIGN1cnNvcikKKyAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX2N1cnNvcihjdXJzb3IpCit7CisgICAgbV90cmFu
c2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vyc29yKTsKK30KKworTGVnYWN5VHJhbnNh
Y3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6fk9wZW5DdXJzb3JOb3RpZmllcigpCit7CisgICAg
aWYgKG1fY3Vyc29yKQorICAgICAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNv
cihtX2N1cnNvcik7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3Rp
Zmllcjo6Y3Vyc29yRmluaXNoZWQoKQoreworICAgIGlmIChtX2N1cnNvcikgeworICAgICAgICBt
X3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcihtX2N1cnNvcik7CisgICAgICAgIG1f
Y3Vyc29yID0gbnVsbHB0cjsKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAg
fQorfQorCit2b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjpyZWdpc3Rlck9wZW5DdXJzb3IoTGVnYWN5
Q3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwor
dm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoTGVnYWN5Q3Vyc29y
KiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKK30KKwordm9p
ZCBMZWdhY3lUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCit7CisgICAgSGFzaFNldDxM
ZWdhY3lDdXJzb3IqPiBjdXJzb3JzOworICAgIGN1cnNvcnMuc3dhcChtX29wZW5DdXJzb3JzKTsK
KyAgICBmb3IgKGF1dG8mIGN1cnNvciA6IGN1cnNvcnMpCisgICAgICAgIGN1cnNvci0+Y2xvc2Uo
KTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6cmVnaXN0ZXJSZXF1ZXN0KExlZ2FjeVJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIEFTU0VSVChtX3N0
YXRlID09IEFjdGl2ZSk7CisgICAgbV9yZXF1ZXN0TGlzdC5hZGQocmVxdWVzdCk7Cit9CisKK3Zv
aWQgTGVnYWN5VHJhbnNhY3Rpb246OnVucmVnaXN0ZXJSZXF1ZXN0KExlZ2FjeVJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIC8vIElmIHdlIGFib3J0ZWQgdGhl
IHJlcXVlc3QsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICBtX3JlcXVl
c3RMaXN0LnJlbW92ZShyZXF1ZXN0KTsKK30KKwordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6b25B
Ym9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKQoreworICAgIExPRyhT
dG9yYWdlQVBJLCAiTGVnYWN5VHJhbnNhY3Rpb246Om9uQWJvcnQiKTsKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBwcnBFcnJvcjsKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBG
aW5pc2hlZCk7CisKKyAgICBpZiAobV9zdGF0ZSAhPSBGaW5pc2hpbmcpIHsKKyAgICAgICAgQVNT
RVJUKGVycm9yLmdldCgpKTsKKyAgICAgICAgc2V0RXJyb3IoRE9NRXJyb3I6OmNyZWF0ZShlcnJv
ci0+bmFtZSgpKSwgZXJyb3ItPm1lc3NhZ2UoKSk7CisKKyAgICAgICAgLy8gQWJvcnQgd2FzIG5v
dCB0cmlnZ2VyZWQgYnkgZnJvbnQtZW5kLCBzbyBvdXRzdGFuZGluZyByZXF1ZXN0cyBtdXN0Cisg
ICAgICAgIC8vIGJlIGFib3J0ZWQgbm93LgorICAgICAgICB3aGlsZSAoIW1fcmVxdWVzdExpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9
ICptX3JlcXVlc3RMaXN0LmJlZ2luKCk7CisgICAgICAgICAgICBtX3JlcXVlc3RMaXN0LnJlbW92
ZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmFib3J0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKKyAgICB9CisKKyAgICBpZiAoaXNWZXJzaW9uQ2hh
bmdlKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVD
bGVhbnVwTWFwKQorICAgICAgICAgICAgb2JqZWN0U3RvcmUua2V5LT5zZXRNZXRhZGF0YShvYmpl
Y3RTdG9yZS52YWx1ZSk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldE1ldGFkYXRhKG1fcHJldmlv
dXNNZXRhZGF0YSk7CisgICAgICAgIG1fZGF0YWJhc2UtPmNsb3NlKCk7CisgICAgfQorICAgIG1f
b2JqZWN0U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7CisgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwor
CisgICAgLy8gRW5xdWV1ZSBldmVudHMgYmVmb3JlIG5vdGlmeWluZyBkYXRhYmFzZSwgYXMgZGF0
YWJhc2UgbWF5IGNsb3NlIHdoaWNoIGVucXVldWVzIG1vcmUgZXZlbnRzIGFuZCBvcmRlciBtYXR0
ZXJzLgorICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50LCB0cnVlLCBmYWxzZSkpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQo
dGhpcyk7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246Om9uQ29tcGxldGUoKQoreworICAg
IExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5VHJhbnNhY3Rpb246Om9uQ29tcGxldGUiKTsKKyAgICBB
U1NFUlQobV9zdGF0ZSAhPSBGaW5pc2hlZCk7CisgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKKyAg
ICBtX29iamVjdFN0b3JlQ2xlYW51cE1hcC5jbGVhcigpOworICAgIGNsb3NlT3BlbkN1cnNvcnMo
KTsKKworICAgIC8vIEVucXVldWUgZXZlbnRzIGJlZm9yZSBub3RpZnlpbmcgZGF0YWJhc2UsIGFz
IGRhdGFiYXNlIG1heSBjbG9zZSB3aGljaCBlbnF1ZXVlcyBtb3JlIGV2ZW50cyBhbmQgb3JkZXIg
bWF0dGVycy4KKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29t
cGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25G
aW5pc2hlZCh0aGlzKTsKK30KKworYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNo
b3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMgYSBvciBjYW4KKyAgICAvLyAg
ICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIG9yIGFueSBjaGlsZCByZXF1ZXN0IG9iamVjdCBhbmQg
YW55IG9mIHRob3NlIGhhdmUKKyAgICAvLyAgICAgICAgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlz
ICBpbiBvcmRlciB0byBoYW5kbGUgdXNlciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5LgorICAg
IHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eSAmJiAhbV9jb250ZXh0U3RvcHBlZDsKK30KKwor
Ym9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRj
aEV2ZW50Iik7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOworICAgIEFTU0VSVCht
X2hhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CisgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKKyAgICBtX3N0YXRlID0g
RmluaXNoZWQ7CisKKyAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIGZvciAoYXV0
byYgb2JqZWN0U3RvcmUgOiBtX29iamVjdFN0b3JlTWFwKQorICAgICAgICBvYmplY3RTdG9yZS52
YWx1ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOworICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIo
KTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9kZWxldGVkT2JqZWN0U3RvcmVzKQor
ICAgICAgICBvYmplY3RTdG9yZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCgpOworICAgIG1fZGVsZXRl
ZE9iamVjdFN0b3Jlcy5jbGVhcigpOworCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+
IHRhcmdldHM7CisgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CisgICAgdGFyZ2V0cy5hcHBlbmQo
ZGIoKSk7CisKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0
Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KKyAgICBBU1NFUlQoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKKyAgICBib29sIHJldHVyblZhbHVlID0gSURC
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CisgICAgLy8g
RklYTUU6IFRyeSB0byBjb25zdHJ1Y3QgYSB0ZXN0IHdoZXJlIHx0aGlzfCBvdXRsaXZlcyBvcGVu
REJSZXF1ZXN0IGFuZCB3ZQorICAgIC8vIGdldCBhIGNyYXNoLgorICAgIGlmIChtX29wZW5EQlJl
cXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICAgICAgbV9v
cGVuREJSZXF1ZXN0LT50cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCk7CisgICAgfQor
ICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7CisgICAgcmV0dXJuIHJldHVyblZhbHVl
OworfQorCitib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgd2UgY2FuIHN1c3BlbmQgYmVmb3Jl
IHRoZSBmaXJzdCByZXF1ZXN0IGlzIHNjaGVkdWxlCisgICAgLy8gICAgICAgIGFuZCBhZnRlciB0
aGUgY29tcGxldGUvYWJvcnQgZXZlbnQgaXMgZW5xdWV1ZWQuCisgICAgcmV0dXJuIG1fc3RhdGUg
PT0gRmluaXNoZWQ7Cit9CisKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OnN0b3AoKQoreworICAg
IG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOworCisgICAgYWJvcnQoSUdOT1JFX0VYQ0VQVElPTik7
Cit9CisKK2NvbnN0IGNoYXIqIExlZ2FjeVRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIkxlZ2FjeVRyYW5zYWN0aW9uIjsKK30KKwordm9pZCBM
ZWdhY3lUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQor
eworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdGF0ZSAhPSBGaW5pc2hlZCwgIkEgZmluaXNo
ZWQgdHJhbnNhY3Rpb24gdHJpZWQgdG8gZW5xdWV1ZSBhbiBldmVudCBvZiB0eXBlICVzLiIsIGV2
ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1fY29udGV4dFN0
b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworfQorCitJREJEYXRhYmFzZUJhY2tl
bmQqIExlZ2FjeVRyYW5zYWN0aW9uOjpiYWNrZW5kREIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RhdGFiYXNlLT5iYWNrZW5kKCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jMzllOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmgKQEAgLTAsMCArMSwxNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIExlZ2FjeVRyYW5zYWN0aW9uX2gKKyNkZWZpbmUgTGVnYWN5VHJh
bnNhY3Rpb25faAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01FcnJvci5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uLmgiCisjaW5jbHVkZSAiSW5kZXhlZERCLmgiCisjaW5jbHVkZSAiTGVnYWN5RGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZDsKK2Ns
YXNzIElEQkRhdGFiYXNlRXJyb3I7CitjbGFzcyBMZWdhY3lDdXJzb3I7CitjbGFzcyBMZWdhY3lP
YmplY3RTdG9yZTsKK2NsYXNzIExlZ2FjeU9wZW5EQlJlcXVlc3Q7CitzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTsKKworY2xhc3MgTGVnYWN5VHJhbnNhY3Rpb24gZmluYWwgOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TGVnYWN5VHJhbnNhY3Rp
b24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgaW50NjRfdCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIG9iamVjdFN0b3JlTmFtZXMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlLCBM
ZWdhY3lEYXRhYmFzZSopOworICAgIHN0YXRpYyBSZWY8TGVnYWN5VHJhbnNhY3Rpb24+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgaW50NjRfdCwgTGVnYWN5RGF0YWJhc2UqLCBMZWdh
Y3lPcGVuREJSZXF1ZXN0KiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgcHJldmlvdXNNZXRh
ZGF0YSk7CisgICAgdmlydHVhbCB+TGVnYWN5VHJhbnNhY3Rpb24oKTsKKworICAgIElEQkRhdGFi
YXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7CisKKyAgICBpbnQ2NF90IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IEFjdGl2ZTsgfQorICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gRmluaXNoZWQ7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVy
biBtX21vZGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5OyB9CisgICAg
Ym9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U7IH0KKworICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nJiBtb2RlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJEYXRh
YmFzZSogZGIoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RE9NRXJyb3I+IGVycm9yKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9lcnJvcjsg
fQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmly
dHVhbCB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKKworICAgIGNs
YXNzIE9wZW5DdXJzb3JOb3RpZmllciB7CisgICAgcHVibGljOgorICAgICAgICBPcGVuQ3Vyc29y
Tm90aWZpZXIoUGFzc1JlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4sIExlZ2FjeUN1cnNvciopOwor
ICAgICAgICB+T3BlbkN1cnNvck5vdGlmaWVyKCk7CisgICAgICAgIHZvaWQgY3Vyc29yRmluaXNo
ZWQoKTsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247CisgICAgICAgIExlZ2FjeUN1cnNvciogbV9jdXJzb3I7CisgICAgfTsKKwor
ICAgIHZvaWQgcmVnaXN0ZXJSZXF1ZXN0KExlZ2FjeVJlcXVlc3QqKTsKKyAgICB2b2lkIHVucmVn
aXN0ZXJSZXF1ZXN0KExlZ2FjeVJlcXVlc3QqKTsKKyAgICB2b2lkIG9iamVjdFN0b3JlQ3JlYXRl
ZChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPExlZ2FjeU9iamVjdFN0b3JlPik7CisgICAgdm9p
ZCBvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRBY3RpdmUo
Ym9vbCk7CisgICAgdm9pZCBzZXRFcnJvcihQYXNzUmVmUHRyPERPTUVycm9yPiwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgdm9pZCBvbkFib3J0KFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4pOworICAgIHZvaWQgb25Db21wbGV0ZSgpOworCisgICAgLy8gRXZlbnRUYXJn
ZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gSURCVHJhbnNhY3Rpb25FdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7IH0KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBBY3Rp
dmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQorCisgICAgdXNpbmcgRXZl
bnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFsOworCisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOworCitwcml2YXRlOgorICAgIExlZ2FjeVRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlLCBMZWdhY3lEYXRhYmFzZSosIExlZ2FjeU9wZW5EQlJlcXVlc3QqLCBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CisKKyAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50Pik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CisKKyAgICB2b2lkIHJl
Z2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3IqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJPcGVu
Q3Vyc29yKExlZ2FjeUN1cnNvciopOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KKyAg
ICBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHN0b3AoKSBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBFdmVudFRhcmdldCBBUEkuCisgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9CisKKyAgICBlbnVtIFN0
YXRlIHsKKyAgICAgICAgSW5hY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRlZCwgYnV0IG5vdCBp
biBhbiBldmVudCBjYWxsYmFjaworICAgICAgICBBY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRl
ZCwgaW4gY3JlYXRpb24gc2NvcGUgb3IgYW4gZXZlbnQgY2FsbGJhY2sKKyAgICAgICAgRmluaXNo
aW5nLCAvLyBJbiB0aGUgcHJvY2VzcyBvZiBhYm9ydGluZyBvciBjb21wbGV0aW5nLgorICAgICAg
ICBGaW5pc2hlZCwgLy8gTm8gbW9yZSBldmVudHMgd2lsbCBmaXJlIGFuZCBubyBuZXcgcmVxdWVz
dHMgbWF5IGJlIGZpbGVkLgorICAgIH07CisKKyAgICBpbnQ2NF90IG1faWQ7CisgICAgUmVmUHRy
PExlZ2FjeURhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1f
b2JqZWN0U3RvcmVOYW1lczsKKyAgICBMZWdhY3lPcGVuREJSZXF1ZXN0KiBtX29wZW5EQlJlcXVl
c3Q7CisgICAgY29uc3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOworICAgIFN0
YXRlIG1fc3RhdGU7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKKyAgICBib29sIG1f
Y29udGV4dFN0b3BwZWQ7CisgICAgUmVmUHRyPERPTUVycm9yPiBtX2Vycm9yOworICAgIFN0cmlu
ZyBtX2Vycm9yTWVzc2FnZTsKKworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxMZWdhY3lSZXF1ZXN0
Pj4gbV9yZXF1ZXN0TGlzdDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxM
ZWdhY3lPYmplY3RTdG9yZT4+IElEQk9iamVjdFN0b3JlTWFwOworICAgIElEQk9iamVjdFN0b3Jl
TWFwIG1fb2JqZWN0U3RvcmVNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPExlZ2Fj
eU9iamVjdFN0b3JlPj4gSURCT2JqZWN0U3RvcmVTZXQ7CisgICAgSURCT2JqZWN0U3RvcmVTZXQg
bV9kZWxldGVkT2JqZWN0U3RvcmVzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxMZWdh
Y3lPYmplY3RTdG9yZT4sIElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQk9iamVjdFN0b3JlTWV0
YWRhdGFNYXA7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YU1hcCBtX29iamVjdFN0b3JlQ2xl
YW51cE1hcDsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1fcHJldmlvdXNNZXRhZGF0YTsKKwor
ICAgIEhhc2hTZXQ8TGVnYWN5Q3Vyc29yKj4gbV9vcGVuQ3Vyc29yczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
ZW5kaWYgLy8gTGVnYWN5VHJhbnNhY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWRjNWRiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCIK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50KHVuc2ln
bmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCisgICAgOiBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQoZXZlbnRUeXBlKQorICAgICwgbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24pCisgICAgLCBtX25l
d1ZlcnNpb24obmV3VmVyc2lvbikKK3sKK30KKworTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Ojp+
TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50KCkKK3sKK30KKworRXZlbnRJbnRlcmZhY2UgTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IElEQlZlcnNpb25DaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1Yjc0MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lWZXJzaW9u
Q2hhbmdlRXZlbnQuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMZWdhY3lWZXJz
aW9uQ2hhbmdlRXZlbnRfaAorI2RlZmluZSBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnRfaAorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgSURCVmVyc2lvbkNoYW5n
ZUV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVu
dD4gY3JlYXRlKHVuc2lnbmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uID0gMCwgdW5zaWduZWQgbG9u
ZyBsb25nIG5ld1ZlcnNpb24gPSAwLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IEF0
b21pY1N0cmluZygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50KG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50VHlwZSkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgfkxlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudCgpOworCisgICAg
dmlydHVhbCB1aW50NjRfdCBvbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1
cm4gbV9vbGRWZXJzaW9uOyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBuZXdWZXJzaW9uKCkgY29u
c3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9uZXdWZXJzaW9uOyB9CisKKyAgICB2aXJ0dWFs
IEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisK
K3ByaXZhdGU6CisgICAgTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50KHVuc2lnbmVkIGxvbmcgbG9u
ZyBvbGRWZXJzaW9uLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpOworCisgICAgdWludDY0X3QgbV9vbGRWZXJzaW9uOworICAgIHVp
bnQ2NF90IG1fbmV3VmVyc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gTGVnYWN5VmVyc2lv
bkNoYW5nZUV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCmluZGV4IDYxYmFjZDAuLmQzMWNiZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNjc3NSw3ICs2Nzc1LDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXERPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGlu
ZGV4ZWRkYlxJREJBbnkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxl
c1xpbmRleGVkZGJcSURCQ3Vyc29yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvckJhY2tlbmQuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcbGVnYWN5XElEQkN1cnNvckJhY2tlbmQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURC
RGF0YWJhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcSURCRmFjdG9yeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJJbmRleC5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzJmNzU4Zi4uNTRlYzg1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTkwNiwxNSArMTkwNiwxOCBAQAogCQk1MTAxOTJEMjE4QjZCOUFCMDA3RkM3QTEgLyogSW1h
Z2VDb250cm9sc1Jvb3RFbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTAxOTJEMDE4QjZCOUFCMDA3RkM3QTEgLyogSW1hZ2VDb250cm9s
c1Jvb3RFbGVtZW50TWFjLmggKi87IH07CiAJCTUxMDE5MkQ1MThCNkI5QjcwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwMTkyRDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJv
bHNSb290RWxlbWVudC5jcHAgKi87IH07CiAJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDE5MkQ0MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xz
Um9vdEVsZW1lbnQuaCAqLzsgfTsKLQkJNTEwMTk0NDQxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1
cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDE5NDQyMTgzNkY3RTQwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5jcHAgKi87IH07Ci0JCTUxMDE5NDQ1MTgzNkY3RTUwMDkyNTUyMyAvKiBJ
REJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwMTk0NDMxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNTEwNTlEREQxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEwNTlERDkxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuY3BwICovOyB9OwotCQk1MTA1OURERTE4MjBCMTc2MDBERkY5QjEgLyogSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNTlEREExODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5z
YWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MTAzQzJCMTFCQTIyRDFBMDBFMjYzMzcgLyogTGVnYWN5QW55
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1
QjZFMUJBMEE3NjEwMEY3ODlDRSAvKiBMZWdhY3lBbnkuY3BwICovOyB9OworCQk1MTAzQzJCMjFC
QTIzMTc0MDBFMjYzMzcgLyogSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNTAxQjlGODg5QjAwRjc4OUNFIC8qIElE
QlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKKwkJNTEwM0MyQjMxQkEyMzI0RDAwRTI2MzM3IC8qIElE
QkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTY0NUI1NDFCOUY4OEU4MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLzsgfTsKKwkJNTEw
M0MyQjQxQkEyMzJBRTAwRTI2MzM3IC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUI0MjFCOUY4ODlCMDBG
Nzg5Q0UgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLzsgfTsKKwkJNTEwM0MyQjUxQkEyMzJE
NDAwRTI2MzM3IC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjQ0MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJEYXRhYmFz
ZS5jcHAgKi87IH07CisJCTUxMDNDMkI2MUJBMjMzQkYwMEUyNjMzNyAvKiBJREJSZXF1ZXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjRF
MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJSZXF1ZXN0LmNwcCAqLzsgfTsKKwkJNTEwM0MyQjcxQkEy
MzNDNDAwRTI2MzM3IC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNEMxQjlGODg5QjAwRjc4OUNFIC8qIElE
Qk9wZW5EQlJlcXVlc3QuY3BwICovOyB9OworCQk1MTAzQzJCODFCQTIzNUM1MDBFMjYzMzcgLyog
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjUyMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuY3BwICovOyB9OworCQk1MTAzQzJCOTFCQTIzQTI2MDBFMjYzMzcgLyogTGVnYWN5
QW55LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUI2RjFCQTBBNzYxMDBGNzg5Q0UgLyogTGVnYWN5QW55LmggKi87IH07CiAJCTUxMDZEN0JEMThC
REI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNkQ3QkIxOEJEQjc2RjAwMEFCMTY2IC8q
IENvbnRleHRNZW51Q29udGV4dC5jcHAgKi87IH07CiAJCTUxMDZEN0JFMThCREI3NkYwMDBBQjE2
NiAvKiBDb250ZXh0TWVudUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDZEN0JDMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNv
bnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MTBBMzI2RjE4MzE4NDMxMDAzQzUzMjYgLyogSURCU2VydmVyQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQTMyNkUxODMxODQz
MTAwM0M1MzI2IC8qIElEQlNlcnZlckNvbm5lY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MTBCN0RCNzE4MkQ5RjVEMDA5QkY5NTcgLyog
SURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMEI3REI1MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmQuY3BwICovOyB9OwotCQk1MTBCN0RCODE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTBCN0RCNjE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEw
RDRBMzMxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEEyRDEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLzsgfTsKIAkJNTEwRDRBMzQx
MDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMkUxMDMxNjVFRTAwNDlFQTU0
IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5oICovOyB9OwogCQk1MTBENEEzNjEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEEzMDEwMzE2NUVFMDA0OUVBNTQgLyogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAgKi87IH07CkBAIC0xOTUyLDcgKzE5NTUsNiBAQAogCQk1
MTJERDhGQjBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291cmNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkREOEYxMEQ5MUU2QUYwMDBG
ODlFRSAvKiBBcmNoaXZlUmVzb3VyY2UuY3BwICovOyB9OwogCQk1MTJERDhGQzBEOTFFNkFGMDAw
Rjg5RUUgLyogQXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTJERDhGMjBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291
cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTEyREQ4RkQwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVGYWN0b3J5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERDhGMzBEOTFFNkFGMDAwRjg5
RUUgLyogQXJjaGl2ZUZhY3RvcnkuaCAqLzsgfTsKLQkJNTEyRUE5QkMxODFGMkVFMDAwMUQwMUUw
IC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyRUE5QkIxODFGMkVFMDAwMUQwMUUwIC8qIElEQlBlbmRpbmdPcGVu
Q2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxMkVBOUJFMTgyMDI4NTcwMDFEMDFFMCAvKiBJREJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkVBOUJEMTgyMDI4NTcwMDFEMDFF
MCAvKiBJREJPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MTMyN0Q2MDExQTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTMyN0Q1RTEx
QTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50LmggKi87IH07CiAJCTUxMzI3RDYxMTFBMzNB
MkIwMDRGOUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1
bWVudC5jcHAgKi87IH07CkBAIC0xOTg5LDE0ICsxOTkxLDM1IEBACiAJCTUxNEM3NjdEMENFOTIz
QTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVz
b3VyY2VSZXF1ZXN0QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUxNEM3NjdFMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNl
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwICovOyB9
OwogCQk1MTRDNzY3RjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjZBMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxNTdENDY0MUJBMjRBRUUwMDg1Q0Ey
RiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjQ1QjQ2MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJGYWN0b3J5LmNwcCAqLzsg
fTsKKwkJNTE1N0Q0NjUxQkEyNEFGODAwODVDQTJGIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjQ4MUI5Rjg4OUIwMEY3
ODlDRSAvKiBJREJJbmRleC5jcHAgKi87IH07CisJCTUxNTdENDY2MUJBMjRBRkQwMDg1Q0EyRiAv
KiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTY0NUI0QTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT2JqZWN0U3RvcmUuY3Bw
ICovOyB9OwogCQk1MTYwMzAwQjBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lYLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjAzMDBB
MENDNDI1MTIwMEM4QUMyNSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwICovOyB9OwogCQk1MTYwMzA2
QzBDQzQzNjIzMDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjAzMDZCMENDNDM2MjMwMEM4QUMyNSAvKiBG
aWxlU3lzdGVtQ0YuY3BwICovOyB9OwogCQk1MTYwRjQ5ODBCMEFBNzVGMDBDMUQyQUYgLyogSGlz
dG9yeUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTYwRjQ5NzBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gKi87IH07
CiAJCTUxNjJDN0Y0MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMjExRjc3RUZB
MDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwICovOyB9OwogCQk1MTYyQzdGNTExRjc3RUZC
MDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdp
c3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxNjMxMTdEMTg1MTI0MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxMTdDMTg1MTI0
MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcCAqLzsgfTsKLQkJNTE2NzMwQTMx
ODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NzMwQTExODJEOEZCQjAwM0ZBRjVDIC8q
IElEQkN1cnNvckJhY2tlbmQuY3BwICovOyB9OwotCQk1MTY3MzBBNDE4MkQ4RkJCMDAzRkFGNUMg
LyogSURCQ3Vyc29yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NzMwQTIxODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTY0
NUI1QTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjI4MUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lDdXJzb3IuY3BwICovOyB9OworCQk1MTY0NUI1QjFCOUZBNkM4MDBGNzg5Q0UgLyog
TGVnYWN5Q3Vyc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTY0NUIyOTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmggKi87IH07CisJ
CTUxNjQ1QjVDMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMkExQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgKi87IH07CisJCTUxNjQ1
QjVEMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjJCMUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCAqLzsgfTsKKwkJNTE2NDVCNUUxQjlGQTZD
ODAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjJDMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lE
YXRhYmFzZS5jcHAgKi87IH07CisJCTUxNjQ1QjVGMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lE
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2NDVCMkQxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmggKi87IH07CisJCTUx
NjQ1QjYwMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjJFMUI5RjYzOTEwMEY3ODlD
RSAvKiBMZWdhY3lGYWN0b3J5LmNwcCAqLzsgfTsKKwkJNTE2NDVCNjExQjlGQTZDODAwRjc4OUNF
IC8qIExlZ2FjeUZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjQ1QjJGMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmggKi87
IH07CisJCTUxNjQ1QjYyMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lJbmRleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzMDFCOUY2Mzkx
MDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguY3BwICovOyB9OworCQk1MTY0NUI2MzFCOUZBNkM4MDBG
Nzg5Q0UgLyogTGVnYWN5SW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjQ1QjMxMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lJbmRleC5oICov
OyB9OworCQk1MTY0NUI2NDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5T2JqZWN0U3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzIx
QjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9iamVjdFN0b3JlLmNwcCAqLzsgfTsKKwkJNTE2NDVC
NjUxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeU9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzMzFCOUY2MzkxMDBGNzg5Q0Ug
LyogTGVnYWN5T2JqZWN0U3RvcmUuaCAqLzsgfTsKKwkJNTE2NDVCNjYxQjlGQTZDODAwRjc4OUNF
IC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzQxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9wZW5E
QlJlcXVlc3QuY3BwICovOyB9OworCQk1MTY0NUI2NzFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5
T3BlbkRCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2NDVCMzUxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuaCAq
LzsgfTsKKwkJNTE2NDVCNjgxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVJlcXVlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzYxQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeVJlcXVlc3QuY3BwICovOyB9OworCQk1MTY0NUI2OTFCOUZB
NkM4MDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzcxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVJl
cXVlc3QuaCAqLzsgfTsKKwkJNTE2NDVCNkExQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVRyYW5z
YWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNjQ1QjM4MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5jcHAgKi87IH07
CisJCTUxNjQ1QjZCMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzkxQjlGNjM5
MTAwRjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmggKi87IH07CisJCTUxNjQ1QjZDMUI5RkE2
QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCM0ExQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi87IH07CisJCTUxNjQ1QjZEMUI5RkE2
QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNCMUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJNTE2OTUzOTcxMzI5QTNDODAw
QjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2OTUzOTUxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRh
YmFzZUJhc2UuY3BwICovOyB9OwogCQk1MTY5NTM5ODEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRh
dGFiYXNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE2OTUzOTYxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTZCQjc5NDBDRTkx
RTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkJCNzkyMENFOTFFNjgwMDUxMkY3OSAvKiBK
U1RyZWVXYWxrZXJDdXN0b20uY3BwICovOyB9OwpAQCAtMjAwNyw4ICsyMDMwLDYgQEAKIAkJNTE3
NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRDBCMDcyNTlBMDBFRDQ0MkMgLyog
SGlzdG9yeUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFEMEUwQjA3MjU5
QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLzsgfTsKIAkJNTE3NEUyMEExMEExRjQ0RjAw
Rjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNzRFMjA4MTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50
LmggKi87IH07Ci0JCTUxNzcxQzhFMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tl
bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3
NzFDOEMxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAgKi87IH07Ci0J
CTUxNzcxQzhGMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzcxQzhEMTgyREI0Qjcw
MDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTc5Q0UyNDE5NUM4MTQyMDAxOUMxOTggLyogR2Ft
ZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc5Q0UyMzE5NUM4MTQyMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3OUNFMjYxOTVD
ODIxRDAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc5Q0UyNTE5NUM4MjFEMDAxOUMxOTggLyogR2Ft
ZXBhZFByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJNTE3OUNFMkExOTVDOTE4NjAwMTlDMTk4IC8qIEdh
bWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE3OUNFMjkxOTVDOTE4NjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNs
aWVudC5oICovOyB9OwpAQCAtMjA0NCw3ICsyMDY1LDYgQEAKIAkJNTFBQkI1QjkxODZEMEVEMTAw
ODM5MUExIC8qIElEQk9iamVjdFN0b3JlTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJCNUI3MTg2RDBFRDEwMDgzOTFBMSAvKiBJREJP
YmplY3RTdG9yZU1ldGFkYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTFBQkY2NEQxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJG
NjRDMTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJCTUxQUY1
MDM2MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUxQjA3QTQ0MTgyMzI0OEIwMEFBOEQxQSAvKiBJREJQZW5k
aW5nRGVsZXRlQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFCMDdBNDMxODIzMjQ4QjAwQUE4RDFBIC8qIElEQlBlbmRpbmdEZWxldGVDYWxsLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFCMjQx
N0IwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIyNDE3QTBEOTMxRjNGMDBFODNG
NUMgLyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLzsgfTsKIAkJNTFCNDU0RUExQjREQUU3RDAw
ODVFQUE2IC8qIFBpbmdIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQjQ1NEU5MUI0REFFN0QwMDg1RUFBNiAvKiBQaW5nSGFuZGxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFCNDVEMjAx
QUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCNDVEMUUxQUI4RDFFMjAwMTE3Q0QyIC8q
IENvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OwpAQCAtMjA2Miw0NCArMjA4MiwxNyBAQAogCQk1
MUQ3MTlCNzE4MTEwNkUwMDAxNkRDNTEgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk2RDE4MTEw
NkRGMDAxNkRDNTEgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggKi87IH07CiAJCTUxRDcx
OUI5MTgxMTA2RTAwMDE2REM1MSAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5NkYxODExMDZERjAwMTZEQzUxIC8qIElEQkFu
eS5jcHAgKi87IH07CiAJCTUxRDcxOUJBMTgxMTA2RTAwMDE2REM1MSAvKiBJREJBbnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTcwMTgxMTA2
REYwMDE2REM1MSAvKiBJREJBbnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk1MUQ3MTlCRTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ2FsbGJhY2tz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3
NDE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ2FsbGJhY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFENzE5QkYxODExMDZFMDAwMTZEQzUxIC8q
IElEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUQ3MTk3NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yLmNwcCAqLzsgfTsKLQkJ
NTFENzE5QzAxODExMDZFMDAwMTZEQzUxIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5NzYxODExMDZERjAwMTZEQzUxIC8q
IElEQkN1cnNvci5oICovOyB9OwotCQk1MUQ3MTlDMzE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ3Vy
c29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRDcxOTc5MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3Bw
ICovOyB9OwotCQk1MUQ3MTlDNDE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3
QTE4MTEwNkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi87IH07Ci0JCTUxRDcx
OUM2MTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk3QzE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRGF0YWJhc2UuY3BwICovOyB9OwotCQk1MUQ3MTlDNzE4MTEwNkUwMDAxNkRDNTEgLyogSURC
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oICovOyB9OwotCQk1MUQ3
MTlDQTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTgwMTgxMTA2REYwMDE2
REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxRDcxOUNCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFENzE5ODExODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbC5jcHAgKi87IH07Ci0JCTUxRDcxOUNDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRDcxOTgyMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuaCAqLzsgfTsKIAkJNTFENzE5Q0QxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFi
YXNlRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUVycm9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFENzE5Q0UxODExMDZF
MDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTg0MTgxMTA2REYwMDE2REM1MSAvKiBJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCTUxRDcxOUNGMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFENzE5ODUxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
RXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTFENzE5RDAxODExMDZFMDAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4NjE4
MTEwNkRGMDAxNkRDNTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLzsgfTsKIAkJNTFENzE5
RDExODExMDZFMDAwMTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5ODcxODExMDZERjAwMTZEQzUx
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovOyB9OwotCQk1MUQ3MTlEMjE4MTEwNkUwMDAxNkRD
NTEgLyogSURCRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUQ3MTk4ODE4MTEwNkRGMDAxNkRDNTEgLyogSURCRmFjdG9yeS5jcHAgKi87
IH07Ci0JCTUxRDcxOUQzMTgxMTA2RTAwMDE2REM1MSAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4OTE4MTEwNkRGMDAx
NkRDNTEgLyogSURCRmFjdG9yeS5oICovOyB9OwotCQk1MUQ3MTlENjE4MTEwNkUwMDAxNkRDNTEg
LyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOThDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTUxRDcxOUQ4MTgxMTA2RTAwMDE2REM1MSAvKiBJREJJbmRleC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTk4RTE4
MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwICovOyB9OwotCQk1MUQ3MTlEOTE4MTEwNkUw
MDAxNkRDNTEgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRDcxOThGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJJbmRleC5oICovOyB9
OwogCQk1MUQ3MTlEQjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTkxMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJLZXkuY3BwICovOyB9OwogCQk1MUQ3MTlEQzE4MTEwNkUwMDAxNkRDNTEgLyogSURC
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3
MTk5MjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFENzE5REQxODExMDZFMDAwMTZEQzUxIC8qIElE
QktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFENzE5OTMxODExMDZFMDAwMTZEQzUxIC8qIElEQktleVBhdGguY3BwICovOyB9OwogCQk1
MUQ3MTlERTE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTQxODExMDZFMDAwMTZEQzUxIC8q
IElEQktleVBhdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MUQ3MTlERjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTUxODExMDZF
MDAwMTZEQzUxIC8qIElEQktleVJhbmdlLmNwcCAqLzsgfTsKIAkJNTFENzE5RTAxODExMDZFMDAw
MTZEQzUxIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUQ3MTk5NjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFuZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUQ3MTlF
MzE4MTEwNkUwMDAxNkRDNTEgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTkxODExMDZFMDAwMTZEQzUxIC8q
IElEQk9iamVjdFN0b3JlLmNwcCAqLzsgfTsKLQkJNTFENzE5RTQxODExMDZFMDAwMTZEQzUxIC8q
IElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUQ3MTk5QTE4MTEwNkUwMDAxNkRDNTEgLyogSURCT2JqZWN0U3RvcmUuaCAqLzsg
fTsKLQkJNTFENzE5RTYxODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OUMxODEx
MDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwICovOyB9OwotCQk1MUQ3MTlFNzE4
MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OUQxODExMDZFMDAwMTZEQzUxIC8qIElE
Qk9wZW5EQlJlcXVlc3QuaCAqLzsgfTsKLQkJNTFENzE5RTkxODExMDZFMDAwMTZEQzUxIC8qIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OUYxODExMDZFMDAwMTZEQzUxIC8qIElEQlBlbmRp
bmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovOyB9OwotCQk1MUQ3MTlFQTE4MTEwNkUwMDAxNkRD
NTEgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5QTAxODExMDZFMDAwMTZEQzUxIC8qIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLzsgfTsKLQkJNTFENzE5RUIxODExMDZFMDAw
MTZEQzUxIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFENzE5QTExODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuY3Bw
ICovOyB9OwotCQk1MUQ3MTlFQzE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5QTIxODExMDZF
MDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuaCAqLzsgfTsKLQkJNTFENzE5RUUxODExMDZFMDAwMTZE
QzUxIC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRDcxOUE0MTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlv
bi5jcHAgKi87IH07Ci0JCTUxRDcxOUVGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJUcmFuc2FjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5
QTUxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0aW9uLmggKi87IH07Ci0JCTUxRDcxOUY1
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5QUIxODExMDZFMDAwMTZE
QzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi87IH07Ci0JCTUxRDcxOUY2MTgxMTA2
RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOUFDMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJNTFENzE5RjgxODExMDZFMDAwMTZEQzUx
IC8qIEluZGV4ZWREQi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFENzE5QUUxODExMDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRDcxOUZCMTgxMTA2RTAw
MDE2REM1MSAvKiBXb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MTlCMTE4MTEwNkUwMDAx
NkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuY3BwICovOyB9OwogCQk1
MUQ3MTlGQzE4MTEwNkUwMDAxNkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcx
OUIyMTgxMTA2RTAwMDE2REM1MSAvKiBXb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5o
ICovOyB9OwpAQCAtMjEyMywxMiArMjExNiwzMSBAQAogCQk1MUUzRjlENjBEQTA1RTFEMDAyNTA5
MTEgLyogSlNTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRTNGOUQ0MERBMDVFMUQwMDI1MDkxMSAvKiBKU1N0b3JhZ2UuY3BwICovOyB9
OwogCQk1MUU0MTQzNDE2QTY1OTYzMDBDNjMzQzcgLyogUmVzb3VyY2VIYW5kbGVUeXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNDE0MzIxNkE2
NTk1MTAwQzYzM0M3IC8qIFJlc291cmNlSGFuZGxlVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUU2ODIxMDE2Mzg3MzAyMDAzQkJGM0Mg
LyogTG9hZGVyU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRTY4MjBGMTYzODczMDIwMDNCQkYzQyAvKiBMb2FkZXJTdHJhdGVneS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxRUFDNTY3
MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFDNTY1MTgxNUVEM0Uw
MDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKLQkJNTFFQUM1
NjgxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFDNTY2MTgxNUVEM0Uw
MDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFFQUM1QjIxODE2M0Y0RTAwNEYxQkE0
IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRUFDNUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVu
dGlmaWVyLmggKi87IH07CiAJCTUxRUM5MjY1MENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFFQzkyNUQwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi87IH07CiAJCTUxRUU3QjM4MUFBNTBCMDUwMEY5
MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUVFN0IzNzFBQTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2Fk
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxRUU3QjNBMUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUU3QjM5MUFBNTEyMzEw
MEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLzsgfTsKKwkJNTFGNDFBNjgxQkE3M0I1
QjAwMkUwNTNCIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNDgxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkNhbGxiYWNr
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUx
RjQxQTY5MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTQ5MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLzsgfTsKKwkJNTFGNDFBNkExQkE3M0I1QjAw
MkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTRBMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JC
YWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTFGNDFBNkIxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQx
QTRCMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi87
IH07CisJCTUxRjQxQTZDMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
NDFBNEMxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTFGNDFBNkQx
QkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE0RDFCQTczQjJDMDAyRTA1M0Ig
LyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLzsgfTsKKwkJNTFGNDFBNkUxQkE3M0I1QjAwMkUw
NTNCIC8qIElEQkRhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNEUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkRhdGFiYXNl
QmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTUxRjQxQTZGMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNDAxQjlG
Njk1RTAwRjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTFGNDFBNzAxQkE3M0I1QjAwMkUwNTNC
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzRTFCOUY2OTIzMDBGNzg5Q0UgLyogSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLzsgfTsKKwkJNTFGNDFBNzExQkE3M0I1QjAwMkUwNTNC
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCM0YxQjlGNjkyMzAwRjc4OUNFIC8qIElEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbC5oICovOyB9OworCQk1MUY0MUE3MjFCQTczQjVCMDAyRTA1M0IgLyog
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTRGMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTUxRjQxQTczMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGNDFBNTIxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgKi87
IH07CisJCTUxRjQxQTc0MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTUz
MUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUY0MUE3NTFCQTczQjVCMDAy
RTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE1NDFCQTczQjJDMDAyRTA1
M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTUxRjQx
QTc2MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE1NTFC
QTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRjQxQTc3MUJB
NzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTU2MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKKwkJNTFGNDFBNzgx
QkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTU3MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IH07CisJCTUxRjQxQTc5MUJB
NzNCNUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nRGVsZXRlQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNTAxQkE3M0IyQzAwMkUwNTNCIC8q
IElEQlBlbmRpbmdEZWxldGVDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTFGNDFBN0ExQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdP
cGVuQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGNDFBNTExQkE3M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRjQxQTdCMUJBNzNC
NUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNDMUI5RjY4Q0YwMEY3
ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLzsgfTsKKwkJNTFGNDFB
N0MxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNEMUI5RjY4
Q0YwMEY3ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi87IH07CiAJCTUx
RkEyRDc4MTUyMTMyQjMwMEMxQkEwQiAvKiBET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0ZCQTE4MTUxQUE3MUIwMEI1
Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUZCNTUwNDExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9z
ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUZCNTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi87IH07CiAJCTUxRkI1
NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8q
IEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CkBAIC05MTcxLDE1ICs5MTgzLDkgQEAKIAkJNTEwMTky
RDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3
QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTAxOTJEODE4QjdEN0FCMDA3RkM3QTEgLyogaW1hZ2VDb250cm9sc01hYy5j
c3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IGltYWdlQ29udHJvbHNNYWMuY3NzOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTAxOTQ0MjE4MzZGN0U0MDA5MjU1MjMgLyogSURC
Q3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTAxOTQ0MzE4MzZGN0U0MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFja2Vu
ZE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29y
QmFja2VuZE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwNTlE
RDkxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDU5RERB
MTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNkQ3QkIxOEJEQjc2RjAw
MEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb250ZXh0TWVudUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTA2RDdCQzE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHRNZW51Q29udGV4dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBBMzI2RTE4MzE4NDMxMDAzQzUzMjYg
LyogSURCU2VydmVyQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJREJTZXJ2ZXJDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
MEI3REI1MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwQjdEQjYxODJEOUY1RDAwOUJGOTU3
IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEEyRTEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTBENEEzMDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRTdHJlYW1I
YW5kbGVCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyMTgsNyArOTIy
NCw2IEBACiAJCTUxMkREOEYxMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJjaGl2ZVJlc291cmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyREQ4RjIwRDkxRTZBRjAwMEY4OUVF
IC8qIEFyY2hpdmVSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
cmNoaXZlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyREQ4RjMw
RDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFyY2hpdmVGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMkVBOUJCMTgxRjJFRTAwMDFEMDFFMCAvKiBJREJQZW5kaW5nT3BlbkNhbGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUGVuZGluZ09wZW5DYWxsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkVBOUJEMTgyMDI4NTcwMDFEMDFFMCAvKiBJREJP
cGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT3BlcmF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMzI3RDVFMTFBMzNBMkIwMDRGOUQ2
NSAvKiBTaW5rRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lu
a0RvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMzI3RDVGMTFBMzNB
MkIwMDRGOUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2lua0RvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTkyNjIsOCArOTI2Nyw1MyBAQAogCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2No
ZW1lUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2No
ZW1lUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYyQzdGMzEx
Rjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NoZW1lUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE2MzExN0MxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRhdGFiYXNlTWV0YWRhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VNZXRhZGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjczMEExMTgyRDhGQkIwMDNGQUY1
QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQkN1cnNvckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTY3MzBBMjE4MkQ4RkJCMDAzRkFGNUMgLyogSURCQ3Vyc29yQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjI4MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJz
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5Q3Vyc29y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMjkxQjlGNjM5MTAwRjc4
OUNFIC8qIExlZ2FjeUN1cnNvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
ZWdhY3lDdXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMkExQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIyQjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5
Q3Vyc29yV2l0aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eUN1cnNvcldpdGhWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIy
QzFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5RGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTY0NUIyRDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RGF0YWJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5RGF0YWJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMkUxQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeUZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVn
YWN5RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjJGMUI5
RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExlZ2FjeUZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTE2NDVCMzAxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUluZGV4LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzExQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUluZGV4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeUluZGV4Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjMyMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lP
YmplY3RTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdh
Y3lPYmplY3RTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjMz
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMZWdhY3lPYmplY3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MTY0NUIzNDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVxdWVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lPcGVuREJS
ZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzUxQjlGNjM5
MTAwRjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTGVnYWN5T3BlbkRCUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUIzNjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lSZXF1ZXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCMzcxQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeVJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVx
dWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzODFCOUY2MzkxMDBG
Nzg5Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGVnYWN5VHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUIzOTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5VHJhbnNhY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCM0ExQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MTY0NUIzQjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5n
ZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVZlcnNpb25D
aGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzQzFCOUY2
OENGMDBGNzg5Q0UgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCM0QxQjlGNjhDRjAwRjc4
OUNFIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTY0NUIzRTFCOUY2OTIzMDBGNzg5Q0UgLyogSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxNjQ1QjNGMUI5RjY5MjMwMEY3ODlDRSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjQwMUI5RjY5NUUwMEY3
ODlDRSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJEYXRhYmFzZUNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MTY0NUI0MTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCQ3Vyc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUI0MjFCOUY4ODlCMDBGNzg5Q0UgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvcldpdGhWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjQzMUI5Rjg4OUIwMEY3
ODlDRSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSURCQ3Vyc29yV2l0aFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxNjQ1QjQ0MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxNjQ1QjQ1MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJEYXRhYmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0NjFCOUY4ODlCMDBGNzg5Q0UgLyogSURCRmFj
dG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJGYWN0b3J5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNDcxQjlGODg5QjAwRjc4
OUNFIC8qIElEQkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURC
RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0ODFCOUY4ODlC
MDBGNzg5Q0UgLyogSURCSW5kZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0
OTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVC
NEExQjlGODg5QjAwRjc4OUNFIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9iamVjdFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNEIxQjlGODg5QjAwRjc4OUNFIC8qIElEQk9iamVjdFN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjRDMUI5Rjg4OUIwMEY3ODlDRSAvKiBJ
REJPcGVuREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElEQk9wZW5EQlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0
NUI0RDFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT3BlbkRCUmVxdWVzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxNjQ1QjRFMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJSZXF1ZXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlJlcXVlc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI0RjFCOUY4ODlCMDBGNzg5Q0UgLyogSURC
UmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJSZXF1ZXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjUwMUI5Rjg4OUIwMEY3ODlDRSAv
KiBJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1
QjUxMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY0NUI1MjFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjQ1QjUzMUI5Rjg4
OUIwMEY3ODlDRSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxNjQ1QjU0MUI5Rjg4RTgwMEY3ODlDRSAvKiBJREJDdXJzb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NDVCNkUxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2Fj
eUFueS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lBbnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY0NUI2RjFCQTBBNzYxMDBGNzg5
Q0UgLyogTGVnYWN5QW55LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eUFueS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY5NTM5NTEzMjlBM0M4MDBC
OTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJY29uRGF0YWJhc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE2OTUzOTYxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvbkRhdGFiYXNlQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVl
V2Fsa2VyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
VHJlZVdhbGtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mjc3
LDggKzkzMjcsNiBAQAogCQk1MTc0MUQwRTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpc3RvcnlJdGVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3NEUyMDgxMEExRjQ0RjAwRjk1RTZG
IC8qIFBvcFN0YXRlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9w
U3RhdGVFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc0RTIwQjEwQTFG
NDlBMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
UG9wU3RhdGVFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNzcxQzhD
MTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE3NzFDOEQxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFi
YXNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFz
ZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3OUNFMjMxOTVDODE0
MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE3OUNFMjUxOTVDODIxRDAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc5Q0UyOTE5NUM5MTg2MDAxOUMxOTggLyogR2FtZXBh
ZFByb3ZpZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhbWVw
YWRQcm92aWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTMyMyw3
ICs5MzcxLDYgQEAKIAkJNTFBQkI1QjcxODZEMEVEMTAwODM5MUExIC8qIElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCRjY0QzE2Mzky
RTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3kuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTG9hZGVyU3RyYXRlZ3kuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRlclR5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQjA3QTQzMTgyMzI0OEIwMEFBOEQxQSAv
KiBJREJQZW5kaW5nRGVsZXRlQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJREJQZW5kaW5nRGVsZXRlQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUIyNDE3QTBEOTMxRjNGMDBFODNGNUMgLyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExlZ2FjeVdlYkFyY2hpdmVNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjQ1NEU5MUI0REFFN0QwMDg1RUFBNiAv
KiBQaW5nSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpbmdIYW5k
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCNDVEMUUxQUI4RDFFMjAwMTE3
Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGVudEV4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05MzQyLDMwICs5Mzg5LDE1IEBACiAJCTUxRDcxOTZGMTgxMTA2REYwMDE2REM1MSAvKiBJ
REJBbnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQW55LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5NzAxODExMDZERjAwMTZEQzUx
IC8qIElEQkFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJBbnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5NzExODExMDZERjAwMTZEQzUxIC8q
IElEQkFueS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCQW55LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5NzQxODExMDZERjAwMTZEQzUxIC8qIElEQkNhbGxi
YWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDYWxsYmFja3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5NzUxODExMDZERjAwMTZEQzUxIC8q
IElEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJD
dXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk3NjE4MTEwNkRG
MDAxNkRDNTEgLyogSURCQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk3NzE4MTEw
NkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJD
dXJzb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk3OTE4MTEwNkRG
MDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvcldpdGhWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxRDcxOTdBMTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29yV2l0aFZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTdCMTgxMTA2REYwMDE2REM1
MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkN1
cnNvcldpdGhWYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTdD
MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUQ3MTk3RTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2UuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTFENzE5ODAxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTgxMTgxMTA2REYw
MDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5ODIxODExMDZERjAwMTZEQzUxIC8qIElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFENzE5ODMxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VFcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUQ3MTk4NDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VF
eGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0
YWJhc2VFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk4
NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5ODYxODExMDZERjAwMTZEQzUxIC8qIElEQkV2ZW50RGlz
cGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJFdmVu
dERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk4NzE4
MTEwNkRGMDAxNkRDNTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQkV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MUQ3MTk4ODE4MTEwNkRGMDAxNkRDNTEgLyogSURCRmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJGYWN0b3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5ODkxODExMDZERjAwMTZEQzUxIC8qIElEQkZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9yeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk4QTE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRmFjdG9yeS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCRmFjdG9yeS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOThDMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MUQ3MTk4RTE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MUQ3MTk4RjE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCSW5kZXguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5OTAxODExMDZFMDAwMTZEQzUxIC8qIElEQkluZGV4Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJJbmRleC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDcxOTkxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCS2V5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5OTIxODExMDZFMDAwMTZEQzUxIC8qIElEQktleS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJLZXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTkzNzQsMjIgKzk0MDYsMTAgQEAKIAkJNTFENzE5OTUxODExMDZFMDAw
MTZEQzUxIC8qIElEQktleVJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQktleVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFE
NzE5OTYxODExMDZFMDAwMTZEQzUxIC8qIElEQktleVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQktleVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxRDcxOTk3MTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5nZS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gSURCS2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MUQ3MTk5OTE4MTEwNkUwMDAxNkRDNTEgLyogSURCT2JqZWN0U3RvcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCT2JqZWN0U3RvcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTk5QTE4MTEwNkUwMDAxNkRDNTEgLyogSURC
T2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0
U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5OUIxODExMDZFMDAw
MTZEQzUxIC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJP
YmplY3RTdG9yZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOTlDMTgx
MTA2RTAwMDE2REM1MSAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9wZW5EQlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MUQ3MTk5RDE4MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTlFMTgxMTA2RTAwMDE2REM1MSAv
KiBJREJPcGVuREJSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJPcGVuREJS
ZXF1ZXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5OUYxODExMDZF
MDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOUEwMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5QTExODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUmVxdWVzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOUEyMTgxMTA2RTAwMDE2REM1MSAv
KiBJREJSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlJlcXVl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QTMxODExMDZFMDAwMTZE
QzUxIC8qIElEQlJlcXVlc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQlJlcXVlc3Qu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUQ3MTlBNDE4MTEwNkUwMDAxNkRD
NTEgLyogSURCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MUQ3MTlBNTE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFENzE5QTYxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0aW9uLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxRDcxOUFCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFE
NzE5QUMxODExMDZFMDAwMTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QUQxODExMDZFMDAwMTZEQzUxIC8qIElEQlZl
cnNpb25DaGFuZ2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QUUxODEx
MDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmRleGVkREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5QjEx
ODExMDZFMDAwMTZEQzUxIC8qIFdvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFiYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlckdsb2JhbFNjb3BlSW5k
ZXhlZERhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0MTksMTIg
Kzk0MzksMjYgQEAKIAkJNTFFM0Y5RDUwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0b3JhZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNDE0MzIxNkE2NTk1MTAwQzYzM0M3IC8qIFJlc291cmNlSGFu
ZGxlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VIYW5k
bGVUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU2ODIwRjE2Mzg3MzAy
MDAzQkJGM0MgLyogTG9hZGVyU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9hZGVyU3RyYXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFF
QUM1NjUxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRUFDNTY2MTgxNUVEM0Uw
MDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQUM1QjAxODE2M0Y0RTAwNEYxQkE0IC8qIElEQlJlY29yZElk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUmVjb3JkSWRl
bnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUVDOTI1RDBDRTkwREQ0
MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRUU3QjM3MUFBNTBC
MDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlc291cmNlTG9hZEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFFRTdCMzkxQUE1MTIzMTAwRjkyQjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkSW5mby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTQ4MUJBNzNCMkMwMDJFMDUzQiAvKiBJ
REJDYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ2FsbGJh
Y2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTQ5MUJBNzNCMkMwMDJF
MDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElEQkN1cnNvckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MUY0MUE0QTFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTRCMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJz
b3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxRjQxQTRDMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3Bl
cmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE0RDFC
QTczQjJDMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTRFMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJEYXRhYmFz
ZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjQxQTRGMUJBNzNCMkMw
MDJFMDUzQiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE1MDFCQTczQjJDMDAyRTA1M0IgLyogSURCUGVuZGlu
Z0RlbGV0ZUNhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUGVuZGlu
Z0RlbGV0ZUNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNTExQkE3
M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJREJQZW5kaW5nT3BlbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTFGNDFBNTIxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUY0MUE1MzFCQTcz
QjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MUY0MUE1NDFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25C
YWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTFGNDFBNTUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJh
bnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MUY0MUE1NjFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGNDFBNTcxQkE3
M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUY2QTNENTA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENh
bnZhc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFGNkEzRDYwNjYzQkYwNDAw
NEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUZCNTUwMjEx
M0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTY1NTIsNiArMTY1ODYsNTYgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwogCQl9OworCQk1MTY0NUIyNzFCOUY2MzdFMDBGNzg5Q0UgLyogbGVnYWN5ICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MUY0MUE0ODFCQTcz
QjJDMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggKi8sCisJCQkJNTFGNDFBNDkxQkE3M0IyQzAw
MkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmQuY3BwICovLAorCQkJCTUxRjQxQTRBMUJBNzNCMkMw
MDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmggKi8sCisJCQkJNTFGNDFBNEIxQkE3M0IyQzAw
MkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLywKKwkJCQk1MUY0MUE0
QzFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCAqLywKKwkJ
CQk1MUY0MUE0RDFCQTczQjJDMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLywK
KwkJCQk1MUY0MUE0RTFCQTczQjJDMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi8s
CisJCQkJNTE2NDVCNDAxQjlGNjk1RTAwRjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmgg
Ki8sCisJCQkJNTE2NDVCM0UxQjlGNjkyMzAwRjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbC5jcHAgKi8sCisJCQkJNTE2NDVCM0YxQjlGNjkyMzAwRjc4OUNFIC8qIElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5oICovLAorCQkJCTUxRjQxQTRGMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovLAorCQkJCTUxRjQxQTUyMUJBNzNCMkMwMDJFMDUz
QiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovLAorCQkJCTUxRjQxQTUzMUJBNzNCMkMw
MDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLywKKwkJCQk1MUY0MUE1NDFCQTcz
QjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8sCisJ
CQkJNTFGNDFBNTUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuaCAqLywKKwkJCQk1MUY0MUE1NjFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJNTFGNDFBNTcxQkE3M0IyQzAwMkUwNTNCIC8qIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKKwkJCQk1MUY0MUE1MDFCQTczQjJDMDAyRTA1
M0IgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCAqLywKKwkJCQk1MUY0MUE1MTFCQTczQjJDMDAy
RTA1M0IgLyogSURCUGVuZGluZ09wZW5DYWxsLmggKi8sCisJCQkJNTE2NDVCM0MxQjlGNjhDRjAw
Rjc4OUNFIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovLAorCQkJCTUxNjQ1
QjNEMUI5RjY4Q0YwMEY3ODlDRSAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8s
CisJCQkJNTE2NDVCNkUxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2FjeUFueS5jcHAgKi8sCisJCQkJ
NTE2NDVCNkYxQkEwQTc2MTAwRjc4OUNFIC8qIExlZ2FjeUFueS5oICovLAorCQkJCTUxNjQ1QjI4
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuY3BwICovLAorCQkJCTUxNjQ1QjI5MUI5
RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuaCAqLywKKwkJCQk1MTY0NUIyQTFCOUY2Mzkx
MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcCAqLywKKwkJCQk1MTY0NUIyQjFC
OUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmggKi8sCisJCQkJNTE2NDVC
MkMxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNwcCAqLywKKwkJCQk1MTY0NUIy
RDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuaCAqLywKKwkJCQk1MTY0NUIyRTFC
OUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5jcHAgKi8sCisJCQkJNTE2NDVCMkYxQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeUZhY3RvcnkuaCAqLywKKwkJCQk1MTY0NUIzMDFCOUY2Mzkx
MDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguY3BwICovLAorCQkJCTUxNjQ1QjMxMUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lJbmRleC5oICovLAorCQkJCTUxNjQ1QjMyMUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lPYmplY3RTdG9yZS5jcHAgKi8sCisJCQkJNTE2NDVCMzMxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeU9iamVjdFN0b3JlLmggKi8sCisJCQkJNTE2NDVCMzQxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwICovLAorCQkJCTUxNjQ1QjM1MUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmggKi8sCisJCQkJNTE2NDVCMzYxQjlGNjM5MTAw
Rjc4OUNFIC8qIExlZ2FjeVJlcXVlc3QuY3BwICovLAorCQkJCTUxNjQ1QjM3MUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmggKi8sCisJCQkJNTE2NDVCMzgxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeVRyYW5zYWN0aW9uLmNwcCAqLywKKwkJCQk1MTY0NUIzOTFCOUY2MzkxMDBGNzg5
Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uaCAqLywKKwkJCQk1MTY0NUIzQTFCOUY2MzkxMDBGNzg5
Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKKwkJCQk1MTY0NUIzQjFCOUY2
MzkxMDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCisJCQkpOworCQkJ
cGF0aCA9IGxlZ2FjeTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTUxNzQx
RDA4MEIwNzI1NzAwMEVENDQyQyAvKiBoaXN0b3J5ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE4NjUxLDMxICsxODczNSwyMiBAQAogCQk5NzEyQTU1MzE1
MDA0RTNDMDA0OEFGMTAgLyogaW5kZXhlZGRiICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk1MTY0NUIyNzFCOUY2MzdFMDBGNzg5Q0UgLyogbGVnYWN5ICov
LAogCQkJCTUxRDcxOTZDMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwICovLAogCQkJCTUxRDcxOTZEMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuaCAqLywKIAkJCQk1MUQ3MTk2RTE4MTEwNkRGMDAxNkRDNTEgLyogRE9NV2lu
ZG93SW5kZXhlZERhdGFiYXNlLmlkbCAqLywKIAkJCQk1MUQ3MTk2RjE4MTEwNkRGMDAxNkRDNTEg
LyogSURCQW55LmNwcCAqLywKIAkJCQk1MUQ3MTk3MDE4MTEwNkRGMDAxNkRDNTEgLyogSURCQW55
LmggKi8sCiAJCQkJNTFENzE5NzExODExMDZERjAwMTZEQzUxIC8qIElEQkFueS5pZGwgKi8sCi0J
CQkJNTFENzE5NzQxODExMDZERjAwMTZEQzUxIC8qIElEQkNhbGxiYWNrcy5oICovLAotCQkJCTUx
RDcxOTc1MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3IuY3BwICovLAotCQkJCTUxRDcxOTc2
MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3IuaCAqLywKKwkJCQk1MTY0NUI1NDFCOUY4OEU4
MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLywKKwkJCQk1MTY0NUI0MTFCOUY4ODlCMDBGNzg5
Q0UgLyogSURCQ3Vyc29yLmggKi8sCiAJCQkJNTFENzE5NzcxODExMDZERjAwMTZEQzUxIC8qIElE
QkN1cnNvci5pZGwgKi8sCi0JCQkJNTE2NzMwQTExODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNv
ckJhY2tlbmQuY3BwICovLAotCQkJCTUxNjczMEEyMTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJz
b3JCYWNrZW5kLmggKi8sCi0JCQkJNTEwMTk0NDIxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNv
ckJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLywKLQkJCQk1MTAxOTQ0MzE4MzZGN0U0MDA5MjU1MjMg
LyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCAqLywKLQkJCQk1MUQ3MTk3OTE4MTEwNkRG
MDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLywKLQkJCQk1MUQ3MTk3QTE4MTEw
NkRGMDAxNkRDNTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi8sCisJCQkJNTE2NDVCNDIxQjlG
ODg5QjAwRjc4OUNFIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi8sCisJCQkJNTE2NDVCNDMx
QjlGODg5QjAwRjc4OUNFIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovLAogCQkJCTUxRDcxOTdC
MTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaWRsICovLAotCQkJCTUxRDcx
OTdDMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgKi8sCi0JCQkJNTFENzE5N0Qx
ODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmggKi8sCisJCQkJNTE2NDVCNDQxQjlGODg5
QjAwRjc4OUNFIC8qIElEQkRhdGFiYXNlLmNwcCAqLywKKwkJCQk1MTY0NUI0NTFCOUY4ODlCMDBG
Nzg5Q0UgLyogSURCRGF0YWJhc2UuaCAqLywKIAkJCQk1MUQ3MTk3RTE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRGF0YWJhc2UuaWRsICovLAotCQkJCTUxNzcxQzhDMTgyREI0QjcwMDhFNzgxRSAvKiBJ
REJEYXRhYmFzZUJhY2tlbmQuY3BwICovLAotCQkJCTUxNzcxQzhEMTgyREI0QjcwMDhFNzgxRSAv
KiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLywKLQkJCQk1MUQ3MTk4MDE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLywKLQkJCQk1MUQ3MTk4MTE4MTEwNkRGMDAxNkRD
NTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLywKLQkJCQk1MUQ3MTk4MjE4MTEw
NkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggKi8sCiAJCQkJNTFENzE5
ODMxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAqLywKIAkJCQk1MUQ3MTk4
NDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwICovLAogCQkJCTUx
RDcxOTg1MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovLApAQCAt
MTg2ODMsMTMgKzE4NzU4LDEyIEBACiAJCQkJNTFDOTYxMUExODNEMkI4MDAwRDIwMDJFIC8qIElE
QkRhdGFiYXNlTWV0YWRhdGEuaCAqLywKIAkJCQk1MUQ3MTk4NjE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk1MUQ3MTk4NzE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8sCi0JCQkJNTFENzE5ODgxODExMDZERjAwMTZEQzUx
IC8qIElEQkZhY3RvcnkuY3BwICovLAotCQkJCTUxRDcxOTg5MTgxMTA2REYwMDE2REM1MSAvKiBJ
REJGYWN0b3J5LmggKi8sCisJCQkJNTE2NDVCNDYxQjlGODg5QjAwRjc4OUNFIC8qIElEQkZhY3Rv
cnkuY3BwICovLAorCQkJCTUxNjQ1QjQ3MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJGYWN0b3J5Lmgg
Ki8sCiAJCQkJNTFENzE5OEExODExMDZERjAwMTZEQzUxIC8qIElEQkZhY3RvcnkuaWRsICovLAot
CQkJCTUxRDcxOThDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oICovLAogCQkJCTUxMjNBRjFDMTg5MThBRTQwMDMxQ0RDOSAvKiBJREJHZXRSZXN1bHQuaCAq
LywKLQkJCQk1MUQ3MTk4RTE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwICovLAotCQkJ
CTUxRDcxOThGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJJbmRleC5oICovLAorCQkJCTUxNjQ1QjQ4
MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJJbmRleC5jcHAgKi8sCisJCQkJNTE2NDVCNDkxQjlGODg5
QjAwRjc4OUNFIC8qIElEQkluZGV4LmggKi8sCiAJCQkJNTFENzE5OTAxODExMDZFMDAwMTZEQzUx
IC8qIElEQkluZGV4LmlkbCAqLywKIAkJCQk1MUFCQjVCNjE4NkQwRUQxMDA4MzkxQTEgLyogSURC
SW5kZXhNZXRhZGF0YS5oICovLAogCQkJCTUxRDcxOTkxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJL
ZXkuY3BwICovLApAQCAtMTg3MDMsMzQgKzE4Nzc3LDI0IEBACiAJCQkJNTFENzE5OTcxODExMDZF
MDAwMTZEQzUxIC8qIElEQktleVJhbmdlLmlkbCAqLywKIAkJCQk1MTIzQUYxNjE4OTBBNENBMDAz
MUNEQzkgLyogSURCS2V5UmFuZ2VEYXRhLmNwcCAqLywKIAkJCQk1MTIzQUYxNzE4OTBBNENBMDAz
MUNEQzkgLyogSURCS2V5UmFuZ2VEYXRhLmggKi8sCi0JCQkJNTFENzE5OTkxODExMDZFMDAwMTZE
QzUxIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLywKLQkJCQk1MUQ3MTk5QTE4MTEwNkUwMDAxNkRD
NTEgLyogSURCT2JqZWN0U3RvcmUuaCAqLywKKwkJCQk1MTY0NUI0QTFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCT2JqZWN0U3RvcmUuY3BwICovLAorCQkJCTUxNjQ1QjRCMUI5Rjg4OUIwMEY3ODlDRSAv
KiBJREJPYmplY3RTdG9yZS5oICovLAogCQkJCTUxRDcxOTlCMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJPYmplY3RTdG9yZS5pZGwgKi8sCiAJCQkJNTFBQkI1QjcxODZEMEVEMTAwODM5MUExIC8qIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEuaCAqLywKLQkJCQk1MUQ3MTk5QzE4MTEwNkUwMDAxNkRDNTEg
LyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8sCi0JCQkJNTFENzE5OUQxODExMDZFMDAwMTZEQzUx
IC8qIElEQk9wZW5EQlJlcXVlc3QuaCAqLywKKwkJCQk1MTY0NUI0QzFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8sCisJCQkJNTE2NDVCNEQxQjlGODg5QjAwRjc4OUNF
IC8qIElEQk9wZW5EQlJlcXVlc3QuaCAqLywKIAkJCQk1MUQ3MTk5RTE4MTEwNkUwMDAxNkRDNTEg
LyogSURCT3BlbkRCUmVxdWVzdC5pZGwgKi8sCiAJCQkJNTEyRUE5QkQxODIwMjg1NzAwMUQwMUUw
IC8qIElEQk9wZXJhdGlvbi5oICovLAotCQkJCTUxQjA3QTQzMTgyMzI0OEIwMEFBOEQxQSAvKiBJ
REJQZW5kaW5nRGVsZXRlQ2FsbC5oICovLAotCQkJCTUxMkVBOUJCMTgxRjJFRTAwMDFEMDFFMCAv
KiBJREJQZW5kaW5nT3BlbkNhbGwuaCAqLywKLQkJCQk1MUQ3MTk5RjE4MTEwNkUwMDAxNkRDNTEg
LyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgKi8sCi0JCQkJNTFENzE5QTAxODEx
MDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLywKIAkJCQk1
MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQgLyogSURCUmVjb3JkSWRlbnRpZmllci5oICovLAotCQkJ
CTUxRDcxOUExMTgxMTA2RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmNwcCAqLywKLQkJCQk1MUQ3
MTlBMjE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5oICovLAorCQkJCTUxNjQ1QjRFMUI5
Rjg4OUIwMEY3ODlDRSAvKiBJREJSZXF1ZXN0LmNwcCAqLywKKwkJCQk1MTY0NUI0RjFCOUY4ODlC
MDBGNzg5Q0UgLyogSURCUmVxdWVzdC5oICovLAogCQkJCTUxRDcxOUEzMTgxMTA2RTAwMDE2REM1
MSAvKiBJREJSZXF1ZXN0LmlkbCAqLywKIAkJCQk1MTBBMzI2RTE4MzE4NDMxMDAzQzUzMjYgLyog
SURCU2VydmVyQ29ubmVjdGlvbi5oICovLAotCQkJCTUxRDcxOUE0MTgxMTA2RTAwMDE2REM1MSAv
KiBJREJUcmFuc2FjdGlvbi5jcHAgKi8sCi0JCQkJNTFENzE5QTUxODExMDZFMDAwMTZEQzUxIC8q
IElEQlRyYW5zYWN0aW9uLmggKi8sCisJCQkJNTE2NDVCNTAxQjlGODg5QjAwRjc4OUNFIC8qIElE
QlRyYW5zYWN0aW9uLmNwcCAqLywKKwkJCQk1MTY0NUI1MTFCOUY4ODlCMDBGNzg5Q0UgLyogSURC
VHJhbnNhY3Rpb24uaCAqLywKIAkJCQk1MUQ3MTlBNjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJh
bnNhY3Rpb24uaWRsICovLAotCQkJCTUxMEI3REI1MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmQuY3BwICovLAotCQkJCTUxMEI3REI2MTgyRDlGNUQwMDlCRjk1NyAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLywKLQkJCQk1MTA1OUREOTE4MjBCMTc2MDBERkY5QjEg
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgKi8sCi0JCQkJNTEwNTlEREEx
ODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCAqLywK
LQkJCQk1MUVBQzU2NTE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAgKi8sCi0JCQkJNTFFQUM1NjYxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCAqLywKLQkJCQk1MUQ3MTlBQjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKLQkJCQk1MUQ3MTlBQzE4MTEwNkUwMDAxNkRDNTEgLyog
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCisJCQkJNTE2NDVCNTIxQjlGODg5QjAwRjc4OUNF
IC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8sCisJCQkJNTE2NDVCNTMxQjlGODg5QjAw
Rjc4OUNFIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovLAogCQkJCTUxRDcxOUFEMTgxMTA2
RTAwMDE2REM1MSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsICovLAogCQkJCTUxRDcxOUFF
MTgxMTA2RTAwMDE2REM1MSAvKiBJbmRleGVkREIuaCAqLywKIAkJCQk1MUQ3MTlCMTE4MTEwNkUw
MDAxNkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuY3BwICovLApAQCAt
MjM5ODQsNiArMjQwNDgsNyBAQAogCQkJCTA3M0FCNEIzMTdGOEJBQ0EwMDZFMEQ2RiAvKiBBbGxW
aWRlb0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAw
RDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Uw
OEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUxRjQxQTc2MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1ODZBQkFE
MDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRDMxNjAzRTEyQjAyNjc2MDBDMUEzNTkgLyogQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJh
eXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjQwMTQsNiArMjQwNzksNyBAQAogCQkJCTBGRkQ0RDYx
MTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzN0M2MUYwMTEyMDk1Qzg3MDA3QTNDNjcgLyogQXRvbWljU3RyaW5nS2V5ZWRN
UlVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDNEE4MEQwOUQ1NjMyNzAwMDNBQzhEIC8q
IEF0dHIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjQ1QjVEMUI5RkE2QzgwMEY3ODlDRSAvKiBM
ZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzRBODBCMDlENTYz
MjcwMDAzQUM4RCAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDdBMTJC
MDI2RjcwMEMxQTM1OSAvKiBBdWRpb0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDYyOUVB
MzE1NEI0NzE2MDAwNkQwMjYgLyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjQ1NDcsNiArMjQ2MTMsNyBAQAogCQkJCTg1QjQ5OEVEMEFEQjMyRkIwMDkyNUNC
QiAvKiBET01DU1NSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMyREUzMEFB
OEM5QkUwMDdEM0I3RCAvKiBET01DU1NSdWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVF
NzExOTIwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUNTU1J1bGVMaXN0SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxNjQ1QjVCMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTg1MDMyREU1MEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NTdHls
ZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREI5QzRBQTFCMzIzMUY0MDA3MEYy
N0YgLyogTlNFdmVudFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExOTMwQUM1RDUzNTAw
NTMyNzBGIC8qIERPTUNTU1N0eWxlRGVjbGFyYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDU2MSw2ICsyNDYyOCw3IEBACiAJCQkJODU4QzM4MUMwQUE4RTI5NjAwQjE4N0E0IC8q
IERPTUNTU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUI0OThGMzBBREIzMzZBMDA5MjVD
QkIgLyogRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjMx
QjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFG
NDFBNzgxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1OEMzODNDMEFBOEVEODIwMEIxODdBNCAvKiBET01DU1NWYWx1ZUxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1OTA5RDJCMEFDQzdENTUwMERGMDFGMSAvKiBET01D
U1NWYWx1ZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjlDQ0MwQjc0N0E0
NDAwM0VEODkwIC8qIERPTUN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNDc5Nyw2ICsyNDg2NSw3IEBACiAJCQkJODVBQ0E5OUMwQTlCNTc1OTAwNjcxRTkwIC8qIERP
TVRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCURERTYzRUQ1MEI3RDQ1QTgwMDIyNjk5OCAvKiBE
T01UZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUQ5MEFDNUQ1MzUwMDUzMjcw
RiAvKiBET01UZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjQ1QjZEMUI5RkE2
QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE4ODYwNEI0MEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDVGRDY5RTAxMjg0NUQ0MzAwQjJCRUIzIC8qIERPTVRpbWVTdGFtcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM0OEJGQUMxQjg1NzI5ODAwOTEyRjM2IC8qIENsYXNzQ29sbGVjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDk1MCw2ICsyNTAxOSw3IEBACiAJCQkJOTc2RDZDODMxMjJC
OEEzRDAwMUZEMUY3IC8qIEZpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERjM2OUYx
MjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
ODhBOTA1MTc1NTNDRDcwMDBDNzRGOSAvKiBGaWxlSWNvbkxvYWRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTE2NDVCNjMxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGNTVCM0RCRTEyNTFGMTJEMDAzRUYyNjkgLyogRmlsZUlucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0Njg5RjFBRjEyNjdCQUUxMDBFOEQzODAgLyogRmlsZU1ldGFk
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTA1LDYgKzI1MTc1LDcgQEAKIAkJCQk5M0YxOTlF
NTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4REYzRkQwMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc3QjM4NjUxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE2QTFCQTczQjVCMDAyRTA1M0IgLyogSURC
Q3Vyc29yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzRTUxMEExOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1QzA0MURCMEZGQ0E3
Q0UwMDgzOUQ0QSAvKiBIVE1MRGF0YUxpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlE
MzU5RDc4QTEyOUNBMjcxMDAwNkU1RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1MjI0LDQ0ICsyNTI5NSwyMSBAQAogCQkJCTQ1QkFDMkIwMTM2MEJCQUIwMDVE
QTI1OCAvKiBJY29uVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlCQTE4MTEwNkUwMDAx
NkRDNTEgLyogSURCQW55LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTY2MzExRDRGQUM1MDA0
QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5
QkUxODExMDZFMDAwMTZEQzUxIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTFENzE5QzAxODExMDZFMDAwMTZEQzUxIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE2NzMwQTQxODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTUxMDE5NDQ1MTgzNkY3RTUwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNrZW5k
T3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5QzQxODExMDZFMDAwMTZEQzUx
IC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5QzcxODEx
MDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTc3MUM4
RjE4MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MUQ3MTlDQTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxRDcxOUNDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUNEMTgxMTA2RTAwMDE2
REM1MSAvKiBJREJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlDRjE4
MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxQzk2MTFCMTgzRDJCODAwMEQyMDAyRSAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MUQ3MTlEMTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRXZlbnREaXNw
YXRjaGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlEMzE4MTEwNkUwMDAxNkRDNTEgLyog
SURCRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RDYxODExMDZFMDAwMTZEQzUx
IC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTIz
QUYxRDE4OTE4QUU0MDAzMUNEQzkgLyogSURCR2V0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MUQ3MTlEOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxQUJCNUI4MTg2RDBFRDEwMDgzOTFBMSAvKiBJREJJbmRleE1ldGFkYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUQ3MTlEQzE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTFFQzFBNjE4OERBQ0E0MDBCQTNFQjYgLyogSURCS2V5RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5REUxODExMDZFMDAwMTZEQzUxIC8qIElEQktleVBhdGgu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUUwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlS
YW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyM0FGMTkxODkwQTRDQTAwMzFDREM5IC8qIElE
QktleVJhbmdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RTQxODExMDZFMDAwMTZE
QzUxIC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQjVCOTE4NkQw
RUQxMDA4MzkxQTEgLyogSURCT2JqZWN0U3RvcmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTFENzE5RTcxODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMkVBOUJFMTgyMDI4NTcwMDFEMDFFMCAvKiBJREJPcGVyYXRpb24uaCBp
biBIZWFkZXJzICovLAotCQkJCTUxQjA3QTQ0MTgyMzI0OEIwMEFBOEQxQSAvKiBJREJQZW5kaW5n
RGVsZXRlQ2FsbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEyRUE5QkMxODFGMkVFMDAwMUQwMUUw
IC8qIElEQlBlbmRpbmdPcGVuQ2FsbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFENzE5RUExODEx
MDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRUFDNUIyMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlFQzE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwQTMyNkYxODMxODQzMTAwM0M1MzI2IC8qIElE
QlNlcnZlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRDcxOUVGMTgxMTA2RTAw
MDE2REM1MSAvKiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEwQjdEQjgx
ODJEOUY1RDAwOUJGOTU3IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTEwNTlEREUxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9w
ZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRUFDNTY4MTgxNUVEM0UwMDRGMUJBNCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlG
NjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTcxRDU3QzBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDlFOTExQzUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMwNTRDRDExMThDOEU0MDBDRTI2
MzYgLyogSURMUGFyc2VyLnBtIGluIEhlYWRlcnMgKi8sCkBAIC0yNTM1Miw2ICsyNTQwMCw3IEBA
CiAJCQkJRTEzNEY1QUIxMkVFMzQzRjAwNEVDNThEIC8qIEludFJlY3RIYXNoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjc1MzU3NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjI3NTM1NzYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MUY0MUE2QzFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFj
a2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTI1MjREMUExQTc3REUwMDg2
NDQ4MCAvKiBJT1BNTGliU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NERFRjY0MzFBNkZGOTI3
MDBENDVFRUMgLyogSU9SZXR1cm5TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMEI0QUFCMThE
QTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjUzNjgsNiAr
MjU0MTcsNyBAQAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZEQTE1RTlFMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRp
b0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY0NUI1RjFCOUZBNkM4MDBG
Nzg5Q0UgLyogTGVnYWN5RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUEwMTJC
MDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkRBMTVFQTYxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9Db250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUI0NTRFQTFCNERBRTdEMDA4NUVBQTYgLyogUGluZ0hhbmRsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTQwMiw2ICsyNTQ1Miw3IEBACiAJCQkJOTNGOUI2RTEwQkEwRkI3
MjAwODU0MDY0IC8qIEpTQ29tbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlBQzkyMTkxMDk5
NDVDODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkRBMTVFQkUxMkIwM0YwQjAwM0E1ODNBIC8qIEpTQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTEwM0MyQjkxQkEyM0EyNjAwRTI2MzM3IC8qIExlZ2FjeUFueS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU2RkQ0OEUwRjY3NkU5MzAwMDkyODczIC8qIEpTQ29vcmRpbmF0ZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMDcwNURBMDlFMEM5QkYwMEIxN0ZFNCAvKiBKU0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NUNBMkEyMTMwMzY3OUQwMEU5OUFEOSAvKiBKU0NyeXB0
by5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTQ4Niw2ICsyNTUzNyw3IEBACiAJCQkJNUZDN0RDMjZD
RkUyNTYzMjAwQjg1QUU0IC8qIEpTRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMz
MTRBQ0VDMTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MUY0MUE3OTFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ0Rl
bGV0ZUNhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJDMCAv
KiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovLAogCQkJCTc3Mjg2OTg0MTRG
RDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMwMEYwMTUwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTc3Nyw2ICsyNTgyOSw3IEBACiAJCQkJQjJGQTNEOEIwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHRkVPZmZzZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q4
RDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVBvaW50TGlnaHRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMkZBM0Q4RjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE2RTFCQTczQjVCMDAyRTA1
M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5MTBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyRkEzRDkzMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFVGlsZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyRkEzRDk1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU4MjAsNiArMjU4NzMsNyBAQAog
CQkJCUIyRkEzREM3MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RDOTBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJG
QTNEQ0IwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9v
dGhBYnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjQ1QjYxMUI5RkE2QzgwMEY3ODlDRSAvKiBM
ZWdhY3lGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RDRDBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNEQ0YwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0xpbmV0b0Fi
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERDEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU5MzMsNiAr
MjU5ODcsNyBAQAogCQkJCTY1REYzMjA2MDlEMUNDNjAwMDBCRTMyNSAvKiBKU1doZWVsRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxQ0FBNUM2MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE4MjU2OTAwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29y
a2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRjQxQTdDMUJBNzNCNUIwMDJF
MDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNTA1MjRGNDFCNzEyRkY2MDA2OTZBQTkgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUMzNkQzNTBFQjBBMDk0MDA3NDEwQkMg
LyogSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzM2MkVG
MEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTI2MDEwLDYgKzI2MDY1LDcgQEAKIAkJCQkyRDQxM0Y2MTFBMTg3QTNGMDA0MUE1MjEgLyogTG9v
a3VwU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0MDlEQzFBNDM2MEI1MDA5RTQ3RjMgLyog
TWFjaFNlbmRSaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMjUyNEYxQTFBNzhEMjAwODY0
NDgwIC8qIE1hY2hWTVNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2NDVCNkIxQjlGQTZDODAw
Rjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJBRDcw
NjE3RUZBMkM0MDAzOEY4RkYgLyogTWFpbkZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThG
NkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzMzA5REY4MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuaCBpbiBIZWFkZXJzICovLApA
QCAtMjYxODgsNiArMjYyNDQsNyBAQAogCQkJCTFBNTY5RDBGMEQ3RTJCODIwMDdDMzk4MyAvKiBu
cHJ1bnRpbWVfaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTAwRDdFMkI4MjAwN0Mz
OTgzIC8qIG5wcnVudGltZV9pbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTEw
RDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTY0NUI2OTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE5MjdGRDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNFMTI1MjUxMUExQkVCRDgwMDg2NDQ4MCAvKiBOU0NhbGVuZGFyRGF0ZVNQSS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzFERjYzNTcxQUYxODdERDAwNzhGRDkxIC8qIE5TQ29sb3JTUEku
aCBpbiBIZWFkZXJzICovLApAQCAtMjYxOTcsNiArMjYyNTQsNyBAQAogCQkJCTkzMjFENTkwMUEz
OTA3MDQwMDgwNTJCRSAvKiBOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzdGNENDRTFBMkQ0QjAxMDBCQjM5RjUgLyogTlNNZW51U1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTEyNTI0NzFBMTZDMkMyMDA4NjQ0ODAgLyogTlNQb2lu
dGVyRnVuY3Rpb25zU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE3NDFCQTczQjVCMDAy
RTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Yx
RTFFQzFBNDBGRERDMDAzNDhEMTMgLyogTlNQb3BvdmVyU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEQ0I4Mzc5MTlGOTlCQkEwMEE3RkJFNCAvKiBOU1NoYXJpbmdTZXJ2
aWNlUGlja2VyU1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MjQ2LDYgKzI2MzA0LDcgQEAKIAkJ
CQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGQkRCNjFBMTE2RDYwMzdFMDBCQjMzOTQgLyogUGFnZVJ1bGVDb2xs
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODk1MTQ3RDM1RjkwMDEwQkMwNiAvKiBQ
YWdlUnVudGltZUFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY0MUE2RjFCQTczQjVCMDAy
RTA1M0IgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RjM2
RDNCMThGNzU4NzIwMDU0QzAyNCAvKiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcxOTdGMjQxNzU2ODlDNDAwN0I5NDQyIC8qIFBhZ2VUaHJvdHRs
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjY0MTksNiArMjY0NzgsNyBAQAogCQkJCUE4NzFERUQz
MEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
MzA4MEYxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg3MURFRDEwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MTY0NUI2NzFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RFQTdDODQxMjc2MjMwNDAwQjg0NkREIC8qIFJl
bmRlckZ1bGxTY3JlZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0YwRTVBMTU3MDMwQzMwMDZE
QTU3RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMjhBNzMx
MzdDODY3QzAwQ0FDODQ1IC8qIFJlbmRlckdyaWQuaCBpbiBIZWFkZXJzICovLApAQCAtMjY2MTMs
NiArMjY2NzMsNyBAQAogCQkJCTA3OEUwOTJDMTdEMTREMUMwMDQyMEFBMSAvKiBSVENTdGF0c1Jl
c3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhFMDk0NjE3RDE2RTFDMDA0MjBBQTEgLyog
UlRDU3RhdHNSZXNwb25zZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQ3MTdEMTZF
MUMwMDQyMEFBMSAvKiBSVENWb2lkUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFGNDFB
NzExQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDc4RTA5MkQxN0QxNEQxQzAwNDIwQUExIC8qIFJUQ1ZvaWRSZXF1ZXN0SW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyNEFCQTMxQUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1ODI0QUJBNzFBRTgxMzg0MDA5MDc0QjcgLyog
UnVieVRleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2NzgzLDYgKzI2ODQ0LDcgQEAK
IAkJCQkxQTIyNDY0QzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTIyNDY0RTBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTQyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxS
ZXN1bHRTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRjQxQTcyMUJBNzNCNUIwMDJFMDUzQiAv
KiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZB
NDUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFOEE2NzQ4MTZDREQxOUUwMDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3QkM2QTQ5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzI0Nyw2ICsyNzMwOSw3IEBACiAJCQkJODY4MTYw
RDYxODc2NkExMzAwMjFFNzlEIC8qIFVzZXJBY3Rpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjYyNTVGMDMxODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0RBQjZEMzExN0M5MjU5NTAwQzYwQjM0IC8qIFVzZXJBZ2VudFNjcmlwdHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxNjQ1QjY1MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9y
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgxQjIwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJB
Z2VudFN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU3OUQ0MzE4OERCNjFGMDAy
MjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwMDNG
MUZFQTExRTZBQjQzMDA4MjU4RDkgLyogVXNlckNvbnRlbnRUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNzI1NCw2ICsyNzMxNyw3IEBACiAJCQkJMjU0MkY0REIxMTY2QzI1QTAwRTg5QTg2IC8q
IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTIwMzk4MzE4Qjk1
QkM2MDBCMzlBRjkgLyogVXNlcklucHV0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhF
MDkyRTE3RDE0RDFDMDA0MjBBQTEgLyogVXNlck1lZGlhQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MUY0MUE2ODFCQTczQjVCMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwNzhFMDkyRjE3RDE0RDFDMDA0MjBBQTEgLyogVXNlck1lZGlhQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MzAxN0QxNEQxQzAwNDIwQUExIC8qIFVzZXJN
ZWRpYVJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0I3OTcyMTkwODc1N0IwMEI0N0Ey
RCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjczMzcsNiArMjc0
MDEsNyBAQAogCQkJCUExNDgzMkNDMTg3RjY3QzQwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkUnVu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDRDE4N0Y2ODJFMDBEQTYzQTYgLyogV2ViQ29y
ZVRocmVhZFNhZmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkNGMTg3RjY4NDcwMERBNjNB
NiAvKiBXZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MUY0MUE3QTFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ09wZW5DYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUg
LyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NEEyMERCOTBGODQx
NjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLywKQEAg
LTI4MDM2LDYgKzI4MTAxLDcgQEAKIAkJCQk0MUQwMTVDQjBGNEI1QzcxMDA0QTY2MkYgLyogQ29u
dGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2MjdCOEQxNEZCM0NFRTAwMkNEQ0Ex
IC8qIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
MDZEN0JEMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTFGNDFBNkQxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQmFja2Vu
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjVBRDRGNjBCMEMyRURBMDA1QTJCMUQgLyogQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA2MDI3Q0IzMEIxQ0Mw
M0QwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5
M0I2QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAq
LywKQEAgLTI4MDYwLDYgKzI4MTI2LDcgQEAKIAkJCQlFMUM0MTVERTBGNjU1RDdDMDA5MkQyRkIg
LyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRTQzNDY1ODBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTE2OTgwNDkxMTMzNjQ0NzAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjYwMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdh
Y3lGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NUNBMjhBMTMwMzY1RjgwMEU5OUFE
OSAvKiBDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3MkFGNkQxODBGMjRDNjAwRkJB
REI5IC8qIENyeXB0b0FsZ29yaXRobS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1Rjg0MTE4
MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4MTM0LDYgKzI4MjAxLDcgQEAKIAkJCQlBODBFNkNGNTBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTUGFnZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3NzJCM0QwQzRFQTkxRTAw
ODMyODVGIC8qIENTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAyQTU0MDBFMDk5
QzVBMDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUx
MDNDMkI0MUJBMjMyQUUwMEUyNjMzNyAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTc3QjM4NjIxMjI4ODNFOTAwQjgxRkY4IC8qIENTU1ByZWxvYWRTY2FubmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2RDA1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQ
cmltaXRpdmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNkNGNzBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODM3Myw2ICsyODQ0
MSw3IEBACiAJCQkJNTJCNkM5QzIxNUUzRjRERjAwNjkwQjA1IC8qIERPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUxOERENzkwQTlDRjMxQjAwOTFCN0E2IC8q
IERPTU5hbWVkTm9kZU1hcC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1M0JGNERDMEFCQjZCNTUw
MDg2NDdCQiAvKiBET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE2NDVCNjYxQjlGQTZD
ODAwRjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODU1MjZDMzgwQUIwQTE3RTAwMDMwMkVBIC8qIERPTU5vZGVJdGVyYXRvci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTg1QUNBQThFMEE5Qjc1OUMwMDY3MUU5MCAvKiBET01Ob2RlTGlzdC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTg1NkM4QUU1MEE5MTI2NDkwMDVDNjg3QiAvKiBET01PYmplY3QubW0g
aW4gU291cmNlcyAqLywKQEAgLTI4NDUyLDYgKzI4NTIxLDcgQEAKIAkJCQlBOEM0QTgwODA5RDU2
MzI3MDAwM0FDOEQgLyogRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNUI3QTE3MDE3
QzEwQUE4MDBFNEFBMEEgLyogRWxlbWVudERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkQxNjQzQjcyNjAwNEUxNjM4IC8qIEVsZW1lbnRSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MUY0MUE2OTFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGQkRCNjE5QjE2RDYwMzJBMDBCQjMzOTQgLyogRWxlbWVudFJ1
bGVDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkY2Q0IwQTE1NjFDRDAwMEE0
MjM0IC8qIEVsbGlwc2lzQm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREJCMTI1MUYx
MkQwMDNFRjI2OSAvKiBFbWFpbElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NTQ5
LDYgKzI4NjE5LDcgQEAKIAkJCQk1MUUzQUEwQTFCOThCQ0FCMDAzNkFEODEgLyogU2VjdXJpdHlP
cmlnaW5EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2RDlEMjM2MTRFQUJEMjYwMDkwRDc1
RSAvKiBGb2N1c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTY0MEQwMDZDRDYw
MEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjZDMUI5RkE2Qzgw
MEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzNzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJBRkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5t
bSBpbiBTb3VyY2VzICovLApAQCAtMjg2NjAsNiArMjg3MzEsNyBAQAogCQkJCTkzMzA5REU3MDk5
RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Yx
OUE5MjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MTAzQzJCNTFCQTIzMkQ0MDBFMjYzMzcgLyogSURCRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM3MjMxMjI4NzIxNzAwQjgxRkY4IC8qIEhUTUxF
bGVtZW50U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MUQ0NUYwQTEyN0NCQzAwQjEy
QTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM4Njkx
MjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxFbnRpdHlQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yODc1MSw2ICsyODgyMyw3IEBACiAJCQkJRTQ0NjEzQUEwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhU
TUxWaWRlb0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM5QUFGRUMxQTBDMEM4RDAw
NjA1Rjk5IC8qIEhUTUxXQlJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOEM1NkQ0
MEYyODYyN0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVyTWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxNjQ1QjVBMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFDOTAwQzMxOTQzQzBGQzAwODYyNUI1IC8qIEhUVFBIZWFkZXJOYW1lcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY3MjBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNl
cnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxQTY3Q0IxMUM2QzdEQjAwMDQ3QjhCIC8qIEh5
cGhlbmF0aW9uQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODc2NCwzMiArMjg4MzcsMTQgQEAK
IAkJCQk1MUUxRUNDMDBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29yZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUQ3MTlCOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQW55LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0
aWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRDcxOUJGMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2NzMwQTMxODJEOEZCQjAwM0ZBRjVD
IC8qIElEQkN1cnNvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwMTk0NDQxODM2
RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTUxRDcxOUMzMTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5QzYxODExMDZFMDAwMTZEQzUxIC8qIElEQkRh
dGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNzcxQzhFMTgyREI0QjcwMDhFNzgxRSAv
KiBJREJEYXRhYmFzZUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5Q0IxODEx
MDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUQ3MTlDRTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MzExN0QxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRh
dGFiYXNlTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5RDAxODExMDZFMDAw
MTZEQzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUQ3
MTlEMjE4MTEwNkUwMDAxNkRDNTEgLyogSURCRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MUQ3MTlEODE4MTEwNkUwMDAxNkRDNTEgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFENzE5REIxODExMDZFMDAwMTZEQzUxIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTFFQzFBODE4OERBRTdCMDBCQTNFQjYgLyogSURCS2V5RGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUQ3MTlERDE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UGF0aC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUQ3MTlERjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFu
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyM0FGMTgxODkwQTRDQTAwMzFDREM5IC8qIElE
QktleVJhbmdlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUQ3MTlFMzE4MTEwNkUwMDAx
NkRDNTEgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5RTYx
ODExMDZFMDAwMTZEQzUxIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTFENzE5RTkxODExMDZFMDAwMTZEQzUxIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5RUIxODExMDZFMDAwMTZEQzUxIC8qIElE
QlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5RUUxODExMDZFMDAwMTZEQzUx
IC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxMEI3REI3MTgyRDlG
NUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTEwNTlEREQxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFFQUM1NjcxODE1RUQzRTAwNEYxQkE0IC8q
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFENzE5
RjUxODExMDZFMDAwMTZEQzUxIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTcxRDU3QjBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDM0NGMTdBNDE1QjAwNjNGMDAyNzZEMzkgLyogSWRUYXJnZXRP
YnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDM0NGMTdBNjE1QjAwNjNGMDAyNzZEMzkg
LyogSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg4NDIs
NiArMjg4OTcsNyBAQAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzQzMTI0Qjk5RUMwMEM1MDY5
RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTlDQzgyMDE2
QkY5QkI0MDBFQzY0NUEgLyogSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MUY0MUE3NzFCQTczQjVCMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QUIwQjFDMDEyMTFBNjIyMDBBNzY5NDAgLyog
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjIxNTBG
NUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QTI0NTg3QjEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTM1MSw2ICsyOTQwNyw3IEBACiAJCQkJQjJGQTNENTIw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDQ5NkUzOUQxMzk4MTM2QzAwM0VFMzJBIC8qIEpTU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENTQwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwM0My
QjMxQkEyMzI0RDAwRTI2MzM3IC8qIElEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkZBM0Q1NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRpb25FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyRkEzRDU4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0NpcmNsZUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENUEwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk0NDgsNiArMjk1
MDUsNyBAQAogCQkJCUIyRkEzREUyMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BvaW50TGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RFNTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQ
b2x5Z29uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RFNzBBQjc1QTZGMDAw
RTVBQzQgLyogSlNTVkdQb2x5bGluZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFG
NDFBNzAxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0RFOTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREVCMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NTQyQTc5NDBBRTVDOTQwMDBERjU4REYgLyogSlNTVkdSZWN0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjk0NjYsNiArMjk1MjQsNyBAQAogCQkJCUIyMjM2MjI4MEMzQUYwNEEwMDA4Q0E5QiAv
KiBKU1NWR1RleHRQYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UwNjBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyRkEzRTA4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RpdGxlRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTAzQzJCMjFCQTIzMTc0MDBFMjYzMzcgLyogSURC
VHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNFMEEwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTBDMEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RyYW5zZm9ybUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJGQTNFMEUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTU2OCw2ICsyOTYyNyw3IEBACiAJCQkJNDYzRUI2MjIxQjg3ODlFMDAw
OTZFRDUxIC8qIFRhZ0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNzFBNTkw
RUVFQ0RFNDAwRjYxMjEzIC8qIEpTV29ya2VyTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMzQ4QkQzMERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxNTdENDY2MUJBMjRBRkQwMDg1Q0EyRiAvKiBJREJPYmplY3RTdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzM0OEJCRTBEQjdGNTMxMDA0QUJBQjkgLyogSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzYwREEzOTBEMkEz
MDI4MDBCOTkxOEYgLyogSlNYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGOTE2QzQ4RDBEQjUxMEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTYyMCw2ICsyOTY4MCw3IEBACiAJCQkJ
NjU2RDM3MzMwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NjgxMkQyNkUzODAwRTc5NDE1IC8qIExvYWRlclJ1bkxvb3BDRi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUFCRjY0RDE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVy
U3RyYXRlZ3kuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwM0MyQjgxQkEyMzVDNTAwRTI2MzM3
IC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNkU4MUVF
QzBBQjVEQTk3MDBDODc4MzcgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJRjU5NzNERTExNUNGQjIwMzAwMjdGODA0IC8qIExvY2FsZU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTc2MzNBNzI3MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1Nj
cmlwdE1hcHBpbmdEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk3ODUsNiArMjk4NDYs
NyBAQAogCQkJCTFBNTY5RDFBMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX3V0aWxpdHkubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxQ0Y2QkRGQjBFOUJCMjZBMDAyNUUxQ0QgLyogT2JqQ0V2ZW50TGlz
dGVuZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0Y2QkUxNDBFOUJCNDY3MDAyNUUxQ0QgLyog
T2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTY0NUI1QzFC
OUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxNjk4MjYwMTEzNDYzNkEwMDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdFNUQ3QTc2MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50
SW5kZXhVaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMDE3NzQwMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk4MTQs
MTAgKzI5ODc2LDEyIEBACiAJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTY3NEJEQjBGOUVCRjRFMDA2Q0YwOTkgLyogUGFn
ZUdyb3VwTG9hZERlZmVycmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMjY0OTdDMEQ3RTI0
RUMwMEJEMTBGMiAvKiBQYWdlTWFjLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMDNDMkI2MUJB
MjMzQkYwMEUyNjMzNyAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJENUM5
Q0ZGMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRDVDOUQwMTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZCREI2MTlEMTZENjAzNDYwMEJCMzM5NCAvKiBQYWdlUnVsZUNv
bGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzgyMDg5NDE0N0QzNUY5MDAxMEJDMDYg
LyogUGFnZVJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY0NUI2MjFCOUZB
NkM4MDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGMzZE
M0ExOEY3NTg3MjAwNTRDMDI0IC8qIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzNzFFNjVDRTEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxOTdGMjYxNzU2OEFFNTAwN0I5NDQyIC8qIFBhZ2VUaHJv
dHRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTg2MSw2ICsyOTkyNSw3IEBACiAJCQkJNDFC
RjcwMEYwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUM1Mjc4QjBDMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBh
c3RlYm9hcmRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlDNTk4OTAyRTE0RTlCMEY4MDBFOEQx
OEIgLyogUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFGNDFB
NzMxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFNDUzOTA0MzBFQUZENjM3MDAzNjk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1Mu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzk0RDEwODBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZv
cm1TY3JlZW5NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTM0OTQwQjE2QzAyQzBBMDA5MDEz
MTggLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zMDAwNyw2ICszMDA3Miw3IEBACiAJCQkJQkMzQkU5OTMwRTlDMUM3QzAwODM1NTg4IC8q
IFJlbmRlclNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzNCRTlBQjBFOUMyNDIw
MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzNCRTlBNTBFOUMyMzk2MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTFGNDFBNzUxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDU4RkU0MDkxNTg5REYw
QjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU4
REVFRDg2MTk4NzNGRjAwMDg4OEZGMyAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUFCMjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0zMDAzNiw2ICszMDEwMiw3IEBACiAJCQkJQkNFQTQ4NjcwOTdE
OTMwMjAwOTRDOUU0IC8qIFJlbmRlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkUyMDUw
N0QxOEE0NThCRjAwODA2NDdFIC8qIFJlbmRlclZUVEN1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBODcxREZFNTBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxRjQxQTdCMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NTI4REE2MUFDMTAzM0UwMDBFRjdB
RCAvKiBSZXBsYWNlRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGNTUyOERBOTFBQzEwOURGMDAwRUY3QUQgLyogUmVwbGFjZUluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5Q0NDNTIwRjQ0RTk4MTAwQjVEQTEw
IC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAw
NDYsNiArMzAxMTMsNyBAQAogCQkJCTk5Q0MwQjU4MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlJ
bnB1dERpc3BhdGNoTWV0aG9kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUNDMEI1OTE4QkU5
ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUND
MEI1QjE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTE2NDVCNUUxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzRENGMTI1MUYxMkQwMDNFRjI2OSAvKiBSZXNldElu
cHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRGNzEzRTBENUE2RjI4MDAwMThENjkg
LyogUmVzb3VyY2VFcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NkIxMkQy
NkUzODAwRTc5NDE1IC8qIFJlc291cmNlRXJyb3JDRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMw
MTk2LDYgKzMwMjY0LDcgQEAKIAkJCQlFMThERjMzODE4QUFGMTREMDA3NzNFNTkgLyogU2VyaWFs
aXplZENyeXB0b0tleVdyYXBNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzdBRjE0NDE4RjRC
MUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBNzVFNDk3NzEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjZBMUI5RkE2QzgwMEY3ODlD
RSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkzQUVFNDE5
REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29t
bWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0QjEzMEIwRjhBMDBGNUNEQjEgLyog
U2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwMjM1LDYgKzMwMzA0
LDcgQEAKIAkJCQlDRDNBNDk2MTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEM0E0OTY0MTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZm
ZXJMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQzhCNUFBMTgwNDdGRjEwMDE2RTY4NSAv
KiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxNTdE
NDY0MUJBMjRBRUUwMDg1Q0EyRiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA3NjMwNkQ3MTdFMTQ5Q0YwMDVBN0M0RSAvKiBTb3VyY2VJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUzNkQ1QTI1MTkzRjQwRkMwMENFNENBQiAvKiBTb3VyY2VTaXplTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwMjQ2LDYgKzMwMzE2LDcgQEAKIAkJCQlBQTJBNUFD
RDE2QTQ4NUZBMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4RkUxM0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTAzQzJCMTFCQTIyRDFBMDBF
MjYzMzcgLyogTGVnYWN5QW55LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ1MTI1MDIyMTVEQ0Uz
N0QwMDJGODRFMiAvKiBTcGluQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzMwOUUxMTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOUUxMzA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDI4Miw2ICszMDM1Myw3IEBACiAJCQkJQkM1
RUI2N0QwRTgxRDQyMDAwQjI1OTY1IC8qIFN0eWxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4Mzg2QTk3MDE5RjYxRTRGMDBFMUVDNEEgLyogU3R5bGVCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRUY0NDdBMEU2NzQ3RDAwMDFDMTI4NyAvKiBTdHlsZUNhY2hlZEltYWdl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMDNDMkI3MUJBMjMzQzQwMEUyNjMzNyAvKiBJREJP
cGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTNFNjA0MTUxQTlBMTgwMDA2
NkYwNiAvKiBTdHlsZUNhY2hlZEltYWdlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QzRB
N0ZFMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNUVCOEI4MEU4MjAxQkQwMEIyNTk2NSAvKiBTdHlsZURlcHJlY2F0ZWRGbGV4aWJsZUJv
eERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDQ4NCwxMiArMzA1NTYsMTQgQEAKIAkJCQkx
NTA1MjRGNzFCNzEyRkZGMDA2OTZBQTkgLyogTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QUQwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUQzMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdUaXRsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1N0Q0
NjUxQkEyNEFGODAwODVDQTJGIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFD
Q0RGNUJEMTk5MDMzMjQwMEJDRUJBRCAvKiBTVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMjI3QUQ2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1Ry
YW5zZm9ybWFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBREMwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QURFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCURFQzI5NzYxMUI0RjJGOEQwMDVGNTk0NSAvKiBKU0N1c3RvbUV2ZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjQ1QjY0MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lP
YmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FFMTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRTQwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1RTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MjIyN0FFOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVVJJUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzA1NzQsNiArMzA2NDgsNyBAQAogCQkJCTc1NTNDRkU5MTA4RjQ3M0YwMEVBMjgx
RSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTQwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYx
M0FGMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFuZ2VzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxNjQ1QjY4MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExREU3MTMyMTg2MTMyMjIwMDczNDE5MiAvKiBUb3VjaENvbnN0cnVjdG9ycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMURFNzEyRDE4NjEyQUMxMDA3MzQxOTIgLyogVG91Y2hF
dmVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwMzM0RDkxNDVBMDA2RjAwOEQ4RDQ1IC8q
IFRyYWNrQmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwNzMzLDYgKzMwODA4LDcgQEAKIAkJ
CQlENzYxM0E1MDE0NzRGMTNGMDBEQjg2MDYgLyogV2ViS2l0TmFtZWRGbG93LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVERUJEQTMxNkZCOTA4NzAwODM2RkUwIC8qIFdlYktp
dFBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTFGNDFBNkIxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTMxQzBGRjI0MEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRU
cmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMzMkUwRjJCOUEyNTAw
NEI2Nzk1IC8qIFdlYkxheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OEUxQUU1NTU1
NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CmluZGV4IDhhZWE0MDcuLjdhZjkwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC03MCw2ICs3MCw4IEBAIHNldChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlIgogICAgICIke1dFQkNPUkVfRElS
fSIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9iYXR0ZXJ5IgorICAgICIke1dFQkNPUkVf
RElSfS9Nb2R1bGVzL2luZGV4ZWRkYiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5IgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhc3RyZWFtIgog
ICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL25ldHdvcmtpbmZvIgogICAgICIke1dFQkNPUkVf
RElSfS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGZlZjkwNS4uOTUyMDg0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA5LTE0ICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgY3VycmVudCBjb25jcmV0ZSBJ
REIgaW1wbGVtZW50YXRpb24gdG8gIkxlZ2FjeSIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxMTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorCiAyMDE1LTA5LTE0ICBH
eXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBS
ZW1vdmUgY3JlYXRlKCkgZmFjdG9yeSBmdW5jdGlvbiBpbiBFdmFzR0xDb250ZXh0IGFuZCBFdmFz
R0xTdXJmYWNlCg==
</data>
<flag name="review"
          id="286330"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>