<?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>124077</bug_id>
          
          <creation_ts>2013-11-08 15:32:14 -0800</creation_ts>
          <short_desc>Merge IDBTransactionBackendInterface and IDBTransactionBackendImpl</short_desc>
          <delta_ts>2013-11-08 16:07:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>948881</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-08 15:32:14 -0800</bug_when>
    <thetext>Merge IDBTransactionBackendInterface and IDBTransactionBackendImpl

No longer any need for the abstraction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948885</commentid>
    <comment_count>1</comment_count>
      <attachid>216453</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-08 15:35:34 -0800</bug_when>
    <thetext>Created attachment 216453
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948886</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-08 15:38:05 -0800</bug_when>
    <thetext>Attachment 216453 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBBackingStoreInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackend.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h&apos;]&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:51:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:52:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:53:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:55:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:60:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:62:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:63:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:71:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:72:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:73:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:74:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:77:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:78:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:79:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:80:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:81:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:82:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:84:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 20 in 22 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>948887</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-08 15:39:04 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 216453 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBBackingStoreInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackend.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h&apos;]&quot; exit_code: 1
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:51:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:52:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:53:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:55:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:60:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:62:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:63:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:71:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:72:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:73:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:74:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:77:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:78:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:79:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:80:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:81:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:82:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h:84:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Total errors found: 20 in 22 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.


Yikes.  Yep, bad find/replace...  will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948908</commentid>
    <comment_count>4</comment_count>
      <attachid>216453</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-08 16:05:06 -0800</bug_when>
    <thetext>Comment on attachment 216453
Patch v1 

r=me

Please heed stylebot advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948911</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-08 16:07:26 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/158969</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216453</attachid>
            <date>2013-11-08 15:35:34 -0800</date>
            <delta_ts>2013-11-08 16:05:05 -0800</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>127627</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODVhNTRjOS4uYTllMjE4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc4MCw3ICs3ODAsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAog
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3Bw
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYTcyOTdlYi4uZDQ2ZWNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM3IEBACiAyMDEzLTEx
LTA4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAgICAgICBNZXJnZSBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgYW5kIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDA3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBh
YnN0cmFjdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaC4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmQuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmQuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRPcGVyYXRpb25zLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmg6CisKKzIw
MTMtMTEtMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIEJs
aW5kIFdpbmRvd3MgYnVpbGQtZml4IGF0dGVtcHQgYWZ0ZXIgcjE1ODk1OQogCiAgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IGUzNWU1ZDguLjE5NDc4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtMTg0Nyw5ICsxODQ3LDggQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggXAog
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgKaW5kZXggNDUwYjA0My4uYjkyMDg2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgSURCS2V5OwogY2xh
c3MgSURCS2V5UGF0aDsKIGNsYXNzIElEQktleVJhbmdlOwogY2xhc3MgSURCUmVjb3JkSWRlbnRp
ZmllcjsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlRy
YW5zYWN0aW9uQmFja2VuZDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogY2xhc3MgSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlPiB7CkBAIC05MSwxMCArOTEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBnZXRL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJm
YWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qm
IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgbWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
SW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgbWFrZUluZGV4V3JpdGVycyhJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UmLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJLZXkmIHBy
aW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFZlY3RvcjxSZWZQdHI8SURCSW5kZXhX
cml0ZXI+PiYgaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxl
dGVkKSA9IDA7CisgICAgdmlydHVhbCBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCVHJhbnNhY3Rp
b25CYWNrZW5kJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBWZWN0b3I8
UmVmUHRyPElEQkluZGV4V3JpdGVyPj4mIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3Nh
Z2UsIGJvb2wmIGNvbXBsZXRlZCkgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktl
eT4gZ2VuZXJhdGVLZXkoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlJiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlS2V5R2VuZXJhdG9yKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSYsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBib29s
IGNoZWNrQ3VycmVudCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVy
YXRlS2V5KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUtleUdlbmVyYXRv
cihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKIAogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JC
YWNrZW5kLmNwcAppbmRleCA4MDFiMzE2Li5mMTY0ZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcApAQCAtMTAxLDcg
KzEwMSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiB9OwogCi1JREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpCitJREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpCiAgICAgOiBtX3Rhc2tUeXBlKHRhc2tUeXBlKQogICAgICwgbV9jdXJz
b3JUeXBlKGN1cnNvclR5cGUpCiAgICAgLCBtX2RhdGFiYXNlKCYodHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZC5oCmluZGV4IGI0M2ZmNzkuLjMxNGM1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmgKQEAgLTMxLDcgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIgogI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CkBAIC00MywxMSArNDMsMTEgQEAgY2xhc3MgSURCS2V5UmFuZ2U7CiAKIGNs
YXNzIElEQkN1cnNvckJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDdXJzb3JCYWNrZW5k
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tl
bmQoY3Vyc29yLCBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1h
bFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7CiAgICAgfQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZUN1cnNvckludGVyZmFjZT4gY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gY3Vyc29yLCBJbmRleGVk
REI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpU
YXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
REJDdXJzb3JCYWNrZW5kKGN1cnNvciwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIHRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZUlkKSk7CiAgICAgfQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmQoUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+LCBJbmRleGVkREI6OkN1cnNvclR5cGUs
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgSURCQ3Vyc29yQmFj
a2VuZChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4sIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKIAogICAgIGNsYXNz
IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjsKICAgICBjbGFzcyBDdXJzb3JBZHZhbmNlT3BlcmF0
aW9uOwpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKICAgICBJbmRleGVkREI6OkN1cnNvclR5cGUg
bV9jdXJzb3JUeXBlOwogICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gbV90cmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3Ry
YW5zYWN0aW9uOwogICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwogCiAgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gbV9jdXJzb3I7IC8vIE11c3QgYmUg
ZGVzdHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRl
eCAxNjJlOTk5Li43MTYxYjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMzYsNyArMzYs
NyBAQAogI2luY2x1ZGUgIklEQkluZGV4V3JpdGVyLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKICNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTEzNSw3ICsxMzUsNyBAQCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmJhY2tpbmdT
dG9yZSgpIGNvbnN0CiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0
b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVu
dCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdFN0b3JlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWQpOwogICAgIGlmICghdHJhbnNhY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNo
YW5nZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2IKIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZSIpOwotICAgIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKICAgICBpZiAoIXRyYW5zYWN0aW9u
KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4Iik7Ci0gICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogICAgIGlmICghdHJhbnNhY3Rpb24pCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CkBAIC0xODQsNyArMTg0LDcgQEAgdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3QKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlSW5k
ZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZUluZGV4Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWQpOwogICAgIGlmICghdHJhbnNhY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNo
YW5nZSk7CkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjph
Ym9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2UKIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQi
KTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAgICAg
aWYgKCF0cmFuc2FjdGlvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzQsNyArMjM0LDcgQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGkKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsK
ICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKICAgICBpZiAoIXRy
YW5zYWN0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKQEAgLTI1MSw3ICsyNTEsNyBA
QCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0UwogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzIik7CiAgICAgQVNTRVJUKHBycFByaW1hcnlLZXkp
OwogCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogICAg
IGlmICghdHJhbnNhY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CkBAIC0y
OTYsNyArMjk2LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVh
ZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb24KIHsKICAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOwogCi0gICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogICAgIGlmICghdHJh
bnNhY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCwgY29uCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3Io
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSWQpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbikKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG8KIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudCIp
OwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24gPSBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKICAgICBp
ZiAoIXRyYW5zYWN0aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTMyOCw3ICszMjgsNyBAQCB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxl
dGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpkZWxldGVSYW5nZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbklkKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5
KTsKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0
ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdAogdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyIik7Ci0gICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwogICAgIGlmICghdHJh
bnNhY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUo
KSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsCiAgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ2xlYXJP
cGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKTsKIH0KIAotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNh
Y3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7CiAgICAg
aWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25D
aGFuZ2UpIHsKICAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pOwpAQCAtMzU1LDkgKzM1NSw5IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSoKICAgICB9CiB9
CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZChJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHJhd1RyYW5zYWN0aW9uKQordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogcmF3VHJhbnNhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwogICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQoKSkpOwogICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOwpAQCAt
MzY3LDkgKzM2Nyw5IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25G
aW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqCiAgICAgfQogfQogCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVk
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogcmF3VHJhbnNhY3Rpb24pCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5z
YWN0aW9uOwogICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25WZXJzaW9uQ2hhbmdlKSB7CiAgICAgICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4td2l0
aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwgYmUgYSAic2Vjb25kCiAgICAgICAgIC8vIGhhbGYi
IG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBwcm9jZXNzUGVuZGluZ0NhbGxzLgpAQCAtMzgy
LDkgKzM4Miw5IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5p
c2hlZEFuZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25CYWNrCiAgICAgfQogfQogCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVk
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogcmF3VHJhbnNhY3Rpb24pCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVk
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlv
bjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1Ry
YW5zYWN0aW9uOwogICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25WZXJzaW9uQ2hhbmdlKQogICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CiB9
CkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9jZXNz
UGVuZGluZ09wZW5DYWxscyhib29sIHN1Y2Nlc3MpCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
b2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCiB7Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2ZhY3RvcnktPm1heWJl
Q3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKHRoaXMsIHRyYW5zYWN0aW9uSWQsIGNhbGxiYWNrcywg
b2JqZWN0U3RvcmVJZHMsIHN0YXRpY19jYXN0PEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlPiht
b2RlKSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSBt
X2ZhY3RvcnktPm1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKHRoaXMsIHRyYW5zYWN0aW9u
SWQsIGNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIHN0YXRpY19jYXN0PEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlPihtb2RlKSk7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uKQogICAgICAgICBy
ZXR1cm47CkBAIC01NTgsNyArNTU4LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpy
dW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmEKIAogICAg
IFZlY3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsKICAgICBjcmVhdGVUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbklkKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKIAogICAgIHRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVy
c2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgbV9tZXRhZGF0YSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaAppbmRleCBmOGNmMTA0Li40ZGRiZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBA
IC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTsKIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2U7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwog
CiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsIEZJTkFMIDogcHVibGljIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZSB7CkBAIC03NSwxMCArNzUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKIAogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuZ2V0KCk7IH0KLSAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQo
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkZp
bmlzaGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsK
LSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOworICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5z
YWN0aW9uQmFja2VuZCopOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZp
cmVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hl
ZEFuZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKQEAgLTEyNiw5ICsxMjYsOSBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gbV9mYWN0b3J5OwogCiAgICAg
T3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwogCi0gICAgdHlwZWRlZiBIYXNo
TWFwPGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+IFRyYW5zYWN0aW9u
TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQq
PiBUcmFuc2FjdGlvbk1hcDsKICAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKIAog
ICAgIERlcXVlPE93blB0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBjODA1N2Q3Li5lMWE1ZmMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgSURCQ2FsbGJhY2tz
OwogY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U7
CiBjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZDsKIGNsYXNzIFNlY3VyaXR5
T3JpZ2luOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIApAQCAtNjQsOSArNjQsOSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNv
bnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbWF5YmVDcmVhdGVUcmFuc2FjdGlv
bkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtYXliZUNyZWF0ZVRy
YW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkg
PSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZUN1
cnNvckJhY2tlbmQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlJiwgSURCQmFja2luZ1N0
b3JlQ3Vyc29ySW50ZXJmYWNlJiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlQ3Vyc29yQmFja2Vu
ZChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2Um
LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzdmMzE0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzNDAgQEAKKy8q
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
ckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlv
bi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVhdGUoSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCit7CisgICAgSGFzaFNldDxp
bnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKKyAgICAgICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFk
ZChvYmplY3RTdG9yZUlkc1tpXSk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5z
YWN0aW9uQmFja2VuZChkYXRhYmFzZUJhY2tlbmQsIGlkLCBjYWxsYmFja3MsIG9iamVjdFN0b3Jl
SGFzaFNldCwgbW9kZSkpOworfQorCitJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5zYWN0
aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZUJhY2tlbmQsIGludDY0
X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3Qg
SGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlIG1vZGUpCisgICAgOiBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQorICAgICwg
bV9tb2RlKG1vZGUpCisgICAgLCBtX3N0YXRlKFVudXNlZCkKKyAgICAsIG1fY29tbWl0UGVuZGlu
ZyhmYWxzZSkKKyAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICAsIG1fZGF0YWJhc2Uo
ZGF0YWJhc2VCYWNrZW5kKQorICAgICwgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbihkYXRhYmFz
ZUJhY2tlbmQtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
KQorICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1Rp
bWVyRmlyZWQpCisgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCisgICAgLCBtX2Jh
Y2tpbmdTdG9yZShkYXRhYmFzZUJhY2tlbmQtPmJhY2tpbmdTdG9yZSgpKQorICAgICwgbV9pZChp
ZCkKK3sKKyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBp
dCBjYW4gYmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKKworICAg
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkQ3JlYXRlVHJhbnNhY3Rp
b24odGhpcyk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZDo6fklEQlRyYW5zYWN0aW9uQmFj
a2VuZCgpCit7CisgICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVj
dCB0byBnZXQgZGVsZXRlZCB1bnRpbCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgor
ICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlIHR5cGUsIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPElEQk9w
ZXJhdGlvbj4gYWJvcnRUYXNrKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAodHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6Ok5vcm1hbFRhc2spCisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisKKyAgICBp
ZiAoYWJvcnRUYXNrKQorICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNr
KTsKKworICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKKyAgICAgICAgc3RhcnQoKTsKKyAgICBl
bHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmFib3J0KCkKK3sKKyAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yICh1
bmtub3duIGNhdXNlKSIpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0Iik7CisgICAgaWYgKG1fc3RhdGUgPT0g
RmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3Rh
dGUgPT0gUnVubmluZzsKKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVj
dCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyBhYm9ydCBzdGVw
cyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNl
bHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWY8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIG1fc3RhdGUgPSBG
aW5pc2hlZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisKKyAgICBpZiAod2FzUnVubmluZykK
KyAgICAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKworICAgIC8v
IFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KKyAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVl
dWUuaXNFbXB0eSgpKSB7CisgICAgICAgIE93blB0cjxJREJPcGVyYXRpb24+IHRhc2sobV9hYm9y
dFRhc2tRdWV1ZS50YWtlRmlyc3QoKSk7CisgICAgICAgIHRhc2stPnBlcmZvcm0oKTsKKyAgICB9
CisKKyAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVz
dCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJlZCwg
YXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cg
dGhlIGJhY2tpbmcgc3RvcmUKKyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRl
ciBpcyBjcml0aWNhbC4KKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV9iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbi0+cmVzZXRUcmFuc2FjdGlvbigpOworCisgICAgLy8gVHJhbnNhY3Rpb25z
IG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlz
IG5vdGlmaWVkLCBhcworICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tz
IG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgorICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAg
QVNTRVJUKCFtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRo
aXMpKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworCisgICAg
aWYgKG1fY2FsbGJhY2tzKQorICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChpZCgpLCBlcnJv
cik7CisKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0
aGlzKTsKKworICAgIG1fZGF0YWJhc2UgPSAwOworfQorCitib29sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6aXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJlZW1wdGl2
ZVRhc2tRdWV1ZS5pc0VtcHR5KCkgJiYgbV90YXNrUXVldWUuaXNFbXB0eSgpOworfQorCitib29s
IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6aGFzUGVuZGluZ1Rhc2tzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyB8fCAhaXNUYXNrUXVldWVFbXB0eSgpOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1
cnNvckJhY2tlbmQqIGN1cnNvcikKK3sKKyAgICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoSURC
Q3Vyc29yQmFja2VuZCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNv
cik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpydW4oKQoreworICAgIC8vIFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IgaGFzIHN0YXJ0ZWQgdGhpcyB0cmFuc2FjdGlvbi4gU2NoZWR1
bGUgYSB0aW1lcgorICAgIC8vIHRvIHByb2Nlc3MgdGhlIGZpcnN0IHRhc2suCisgICAgQVNTRVJU
KG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAgQVNT
RVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKKworICAgIG1fdGFza1RpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnN0YXJ0KCkKK3sKKyAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVzZWQpOworCisgICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGlu
ZzsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJh
bnNhY3Rpb24odGhpcyk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y29tbWl0KCkKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y29tbWl0Iik7CisKKyAgICAvLyBJ
biBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1ZXN0ZWQgYSBjb21t
aXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5CisgICAgLy8gYmVlbiBpbml0aWF0ZWQgYXN5bmNo
cm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgorICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVzZWQgfHwgbV9zdGF0
ZSA9PSBSdW5uaW5nKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworCisgICAgLy8gRnJv
bnQtZW5kIGhhcyByZXF1ZXN0ZWQgYSBjb21taXQsIGJ1dCB0aGVyZSBtYXkgYmUgdGFza3MgbGlr
ZSBjcmVhdGVJbmRleCB3aGljaAorICAgIC8vIGFyZSBjb25zaWRlcmVkIHN5bmNocm9ub3VzIGJ5
IHRoZSBmcm9udC1lbmQgYnV0IGFyZSBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYg
KGhhc1BlbmRpbmdUYXNrcygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgbGFzdCBy
ZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcg
dGhlCisgICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYg
cmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCisgICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5n
IHRoaXMgbWV0aG9kLgorICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHByb3RlY3QoKnRo
aXMpOworCisgICAgYm9vbCB1bnVzZWQgPSBtX3N0YXRlID09IFVudXNlZDsKKyAgICBtX3N0YXRl
ID0gRmluaXNoZWQ7CisKKyAgICBib29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX2JhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKKworICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3Vy
Y2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2Fs
bGJhY2tzCisgICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVs
ZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQorICAgIC8vIGl0c2Vs
ZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgorICAgIGNsb3NlT3BlbkN1
cnNvcnMoKTsKKyAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLT5yZXNldFRyYW5zYWN0aW9u
KCk7CisKKyAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0
ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCisgICAgLy8gdGhlIHRyYW5z
YWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVj
dGlvbnMuCisgICAgaWYgKCF1bnVzZWQpCisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKKworICAgIGlmIChjb21taXR0ZWQpIHsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoaWQoKSk7CisgICAgICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKHRoaXMpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
Y29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7CisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOworICAgIH0KKworICAgIG1fZGF0YWJhc2Ug
PSAwOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVyRmlyZWQoVGlt
ZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiopCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkIik7CisgICAgQVNTRVJUKCFpc1Rhc2tR
dWV1ZUVtcHR5KCkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nKSB7CisgICAg
ICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgICAgIG1fc3RhdGUg
PSBSdW5uaW5nOworICAgIH0KKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyB0YXNrcy4g
VGFrZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9iamVjdCBhbGl2ZSBzbyB0
aGF0CisgICAgLy8gdGhlIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9ucyBjYW4gYmUgY2hlY2tl
ZC4KKyAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBwcm90ZWN0KCp0aGlzKTsKKworICAg
IFRhc2tRdWV1ZSogdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3By
ZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7CisgICAgd2hpbGUgKCF0YXNrUXVldWUt
PmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7CisgICAgICAgIEFTU0VSVChtX3N0
YXRlID09IFJ1bm5pbmcpOworICAgICAgICBPd25QdHI8SURCT3BlcmF0aW9uPiB0YXNrKHRhc2tR
dWV1ZS0+dGFrZUZpcnN0KCkpOworICAgICAgICB0YXNrLT5wZXJmb3JtKCk7CisKKyAgICAgICAg
Ly8gRXZlbnQgaXRzZWxmIG1heSBjaGFuZ2Ugd2hpY2ggcXVldWUgc2hvdWxkIGJlIHByb2Nlc3Nl
ZCBuZXh0LgorICAgICAgICB0YXNrUXVldWUgPSBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID8g
Jm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsKKyAgICB9CisKKyAgICAvLyBJ
ZiB0aGVyZSBhcmUgbm8gcGVuZGluZyB0YXNrcywgd2UgaGF2ZW4ndCBhbHJlYWR5IGNvbW1pdHRl
ZC9hYm9ydGVkLAorICAgIC8vIGFuZCB0aGUgZnJvbnQtZW5kIHJlcXVlc3RlZCBhIGNvbW1pdCwg
aXQgaXMgbm93IHNhZmUgdG8gZG8gc28uCisgICAgaWYgKCFoYXNQZW5kaW5nVGFza3MoKSAmJiBt
X3N0YXRlICE9IEZpbmlzaGVkICYmIG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgY29tbWl0KCk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjbG9zZU9wZW5DdXJzb3JzKCkKK3sK
KyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZCo+OjppdGVyYXRvciBpID0gbV9vcGVu
Q3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMuZW5kKCk7ICsraSkKKyAgICAgICAg
KCppKS0+Y2xvc2UoKTsKKyAgICBtX29wZW5DdXJzb3JzLmNsZWFyKCk7Cit9CisKK3ZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCit7CisgICAg
c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9i
YWNraW5nU3RvcmUuZ2V0KCksIG9iamVjdFN0b3JlTWV0YWRhdGEpLCBDcmVhdGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFk
YXRhKQoreworICAgIHNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgRGVs
ZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0
YWRhdGEpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVmVyc2lv
bkNoYW5nZU9wZXJhdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVk
VmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25J
ZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJzaW9uKSk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNyZWF0ZUluZGV4T3Bl
cmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKK3sKKyAgICBzY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRh
ZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhLmlkKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKK3sKKyAgICBzY2hlZHVsZVRhc2so
RGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSksIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRh
YmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNv
clR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sK
KyAgICBzY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3Rv
cmUuZ2V0KCksIG1ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vy
c29yVHlwZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpz
Y2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZU1ldGFkYXRhLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8
SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQoreworICAg
IHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5n
ZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBw
dXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVf
dCBpbmRleENvdW50KQoreworICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U6OlByZWVtcHRpdmVUYXNrLCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBpbmRleENvdW50KSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hl
ZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFzayhPcGVuQ3Vyc29y
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCku
aWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29y
VHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgc2NoZWR1bGVUYXNrKENvdW50T3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCkuaWQoKSwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIHNjaGVkdWxlVGFzayhEZWxl
dGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRh
YmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ2xlYXJPcGVyYXRpb24oaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorewor
ICAgIHNjaGVkdWxlVGFzayhDbGVhck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0
b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwor
fQorCitQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmIGN1cnNv
ciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAg
ICByZXR1cm4gbV9kYXRhYmFzZS0+ZmFjdG9yeUJhY2tlbmQoKS5jcmVhdGVDdXJzb3JCYWNrZW5k
KCp0aGlzLCBjdXJzb3IsIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBvYmplY3RTdG9yZUlkKTsKK30K
KworfTsKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGYxMDU5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9u
QmFja2VuZF9oCisjZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZF9oCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisj
aW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKKworY2xhc3MgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBj
cmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKKyAgICB+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kKCk7CisKKyAgICB2b2lkIGNvbW1pdCgpIDsKKyAgICB2b2lkIGFib3J0KCkg
OworICAgIHZvaWQgYWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgOworCisgICAg
dm9pZCBydW4oKSA7CisgICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSgpIGNvbnN0
ICB7IHJldHVybiBtX21vZGU7IH0KKyAgICBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBzY29wZSgp
IGNvbnN0ICB7IHJldHVybiBtX29iamVjdFN0b3JlSWRzOyB9CisKKyAgICB2b2lkIHNjaGVkdWxl
VGFzayhQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxJREJPcGVyYXRp
b24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQorICAgIHZvaWQgc2No
ZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NPd25Q
dHI8SURCT3BlcmF0aW9uPiwgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGFib3J0VGFzayA9IG51
bGxwdHIpIDsKKworICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmQq
KSA7CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKikgOwor
CisgICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZl
bnRzKys7IH0KKyAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5k
aW5nUHJlZW1wdGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+
PSAwKTsgfQorICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiBiYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuICptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOyB9
CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNlKCkgY29uc3QgIHsg
cmV0dXJuICptX2RhdGFiYXNlOyB9CisKKyAgICB2b2lkIHNjaGVkdWxlQ3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpIDsKKyAgICB2b2lkIHNj
aGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYpIDsKKyAgICB2b2lkIHNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgSURCRGF0
YWJhc2VNZXRhZGF0YSYpIDsKKyAgICB2b2lkIHNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24o
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJikgOworICAgIHZv
aWQgc2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmKSA7CisgICAgdm9pZCBzY2hlZHVsZUdldE9wZXJhdGlvbihj
b25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvclR5cGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgOworICAgIHZvaWQgc2NoZWR1bGVQdXRPcGVyYXRp
b24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSA7CisgICAgdm9pZCBzY2hlZHVs
ZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkgOworICAgIHZvaWQg
c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA7CisgICAgdm9pZCBzY2hlZHVs
ZUNvdW50T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA7CisgICAg
dm9pZCBzY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgOworICAg
IHZvaWQgc2NoZWR1bGVDbGVhck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPikgOworCisgICAgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
PiBjcmVhdGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlw
ZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA7CisKKyAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZDsgfQorCitwcml2YXRlOgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZChJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKiwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSk7CisKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgVW51c2Vk
LCAvLyBDcmVhdGVkLCBidXQgbm8gdGFza3MgeWV0LgorICAgICAgICBTdGFydFBlbmRpbmcsIC8v
IEVucXVldWVkIHRhc2tzLCBidXQgYmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBub3QgeWV0IHN0
YXJ0ZWQuCisgICAgICAgIFJ1bm5pbmcsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gc3Rh
cnRlZCBidXQgbm90IHlldCBmaW5pc2hlZC4KKyAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBh
Ym9ydGVkIG9yIGNvbW1pdHRlZC4KKyAgICB9OworCisgICAgdm9pZCBzdGFydCgpOworCisgICAg
Ym9vbCBpc1Rhc2tRdWV1ZUVtcHR5KCkgY29uc3Q7CisgICAgYm9vbCBoYXNQZW5kaW5nVGFza3Mo
KSBjb25zdDsKKworICAgIHZvaWQgdGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kPiopOworICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgY29uc3QgSGFz
aFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOworICAgIGNvbnN0IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlIG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgYm9vbCBtX2Nv
bW1pdFBlbmRpbmc7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAg
IHR5cGVkZWYgRGVxdWU8T3duUHRyPElEQk9wZXJhdGlvbj4+IFRhc2tRdWV1ZTsKKyAgICBUYXNr
UXVldWUgbV90YXNrUXVldWU7CisgICAgVGFza1F1ZXVlIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZTsK
KyAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZT4gbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbjsKKworICAgIC8vIEZJWE1FOiBkZWxldGUgdGhlIHRpbWVyIG9uY2Ugd2UgaGF2ZSB0aHJl
YWRzIGluc3RlYWQuCisgICAgVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3Rhc2tUaW1l
cjsKKyAgICBpbnQgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50czsKKworICAgIEhhc2hTZXQ8SURC
Q3Vyc29yQmFja2VuZCo+IG1fb3BlbkN1cnNvcnM7CisgICAgCisgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7CisKKyAgICBpbnQ2NF90IG1faWQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWI4OGIzLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUg
IklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
b2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi17Ci0gICAg
SGFzaFNldDxpbnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKLSAgICAgICAgb2JqZWN0U3RvcmVI
YXNoU2V0LmFkZChvYmplY3RTdG9yZUlkc1tpXSk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoZGF0YWJhc2VCYWNrZW5kLCBpZCwgY2FsbGJhY2tz
LCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUpKTsKLX0KLQotSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBk
YXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi0gICAgOiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UoaWQpCi0gICAgLCBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQot
ICAgICwgbV9tb2RlKG1vZGUpCi0gICAgLCBtX3N0YXRlKFVudXNlZCkKLSAgICAsIG1fY29tbWl0
UGVuZGluZyhmYWxzZSkKLSAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAsIG1fZGF0
YWJhc2UoZGF0YWJhc2VCYWNrZW5kKQotICAgICwgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbihk
YXRhYmFzZUJhY2tlbmQtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpKQotICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OnRhc2tUaW1lckZpcmVkKQotICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQot
ICAgICwgbV9iYWNraW5nU3RvcmUoZGF0YWJhc2VCYWNrZW5kLT5iYWNraW5nU3RvcmUoKSkKLXsK
LSAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4g
YmUgYWRvcHRlZC4KLSAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKLQotICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhp
cyk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKCkKLXsKLSAgICAvLyBJdCBzaG91bGRuJ3QgYmUgcG9zc2libGUgZm9yIHRoaXMgb2Jq
ZWN0IHRvIGdldCBkZWxldGVkIHVudGlsIGl0J3MgZWl0aGVyIGNvbXBsZXRlIG9yIGFib3J0ZWQu
Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRy
PElEQk9wZXJhdGlvbj4gYWJvcnRUYXNrKQotewotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6Ok5vcm1hbFRhc2spCi0gICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0K
LSAgICBpZiAoYWJvcnRUYXNrKQotICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJv
cnRUYXNrKTsKLQotICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKLSAgICAgICAgc3RhcnQoKTsK
LSAgICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCi17Ci0gICAgYWJvcnQoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5h
bCBlcnJvciAodW5rbm93biBjYXVzZSkiKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0Iik7Ci0g
ICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wg
d2FzUnVubmluZyA9IG1fc3RhdGUgPT0gUnVubmluZzsKLQotICAgIC8vIFRoZSBsYXN0IHJlZmVy
ZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUK
LSAgICAvLyBhYm9ydCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVy
ZW5jZSB0byBrZWVwIG91cnNlbHZlcwotICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlz
IG1ldGhvZC4KLSAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJvdGVjdCgqdGhp
cyk7Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0gICAgbV90YXNrVGltZXIuc3RvcCgpOwot
Ci0gICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24t
PnJvbGxiYWNrKCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCi0gICAg
d2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBPd25QdHI8SURC
T3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOwotICAgICAgICB0
YXNrLT5wZXJmb3JtKCk7Ci0gICAgfQotCi0gICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMg
KGhlbGQgdmlhIGN1cnNvcnMpIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFj
a3MKLSAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNl
IHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5nIHN0b3JlCi0gICAgLy8gaXRzZWxmIHRv
IGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGljYWwuCi0gICAgY2xvc2VPcGVuQ3Vyc29y
cygpOwotICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNhY3Rpb24oKTsK
LQotICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBi
ZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKLSAgICAvLyB0aGUgdHJhbnNhY3Rp
b24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9u
cy4KLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRy
YW5zYWN0aW9uKHRoaXMpOwotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25G
aW5pc2hlZCh0aGlzKTsKLQotICAgIGlmIChtX2NhbGxiYWNrcykKLSAgICAgICAgbV9jYWxsYmFj
a3MtPm9uQWJvcnQoaWQoKSwgZXJyb3IpOwotCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25G
aW5pc2hlZEFuZEFib3J0RmlyZWQodGhpcyk7Ci0KLSAgICBtX2RhdGFiYXNlID0gMDsKLX0KLQot
Ym9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjppc1Rhc2tRdWV1ZUVtcHR5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmlzRW1wdHkoKSAmJiBtX3Rhc2tR
dWV1ZS5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6aGFz
UGVuZGluZ1Rhc2tzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2
ZW50cyB8fCAhaXNUYXNrUXVldWVFbXB0eSgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKiBjdXJzb3IpCi17
Ci0gICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKiBjdXJz
b3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpydW4oKQotewotICAgIC8vIFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IgaGFzIHN0YXJ0ZWQgdGhpcyB0cmFuc2FjdGlvbi4gU2NoZWR1bGUgYSB0aW1lcgotICAg
IC8vIHRvIHByb2Nlc3MgdGhlIGZpcnN0IHRhc2suCi0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3Rh
cnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKCFtX3Rhc2tUaW1l
ci5pc0FjdGl2ZSgpKTsKLQotICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKG1f
c3RhdGUgPT0gVW51c2VkKTsKLQotICAgIG1fc3RhdGUgPSBTdGFydFBlbmRpbmc7Ci0gICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRo
aXMpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlzKTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQotewotICAgIExPRyhTdG9yYWdl
QVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0Iik7Ci0KLSAgICAvLyBJbiBt
dWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1ZXN0ZWQgYSBjb21taXQg
YnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5Ci0gICAgLy8gYmVlbiBpbml0aWF0ZWQgYXN5bmNocm9u
b3VzbHkgYnkgdGhlIGJhY2stZW5kLgotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVzZWQgfHwgbV9zdGF0ZSA9
PSBSdW5uaW5nKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gRnJvbnQt
ZW5kIGhhcyByZXF1ZXN0ZWQgYSBjb21taXQsIGJ1dCB0aGVyZSBtYXkgYmUgdGFza3MgbGlrZSBj
cmVhdGVJbmRleCB3aGljaAotICAgIC8vIGFyZSBjb25zaWRlcmVkIHN5bmNocm9ub3VzIGJ5IHRo
ZSBmcm9udC1lbmQgYnV0IGFyZSBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKGhh
c1BlbmRpbmdUYXNrcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZl
cmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhl
Ci0gICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVm
ZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRo
aXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcm90ZWN0KCp0
aGlzKTsKLQotICAgIGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7Ci0gICAgbV9zdGF0
ZSA9IEZpbmlzaGVkOwotCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV9iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi0+Y29tbWl0KCk7Ci0KLSAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291
cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNh
bGxiYWNrcwotICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJl
bGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICAvLyBpdHNl
bGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KLSAgICBjbG9zZU9wZW5D
dXJzb3JzKCk7Ci0gICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+cmVzZXRUcmFuc2FjdGlv
bigpOwotCi0gICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxl
dGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcwotICAgIC8vIHRoZSB0cmFu
c2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5l
Y3Rpb25zLgotICAgIGlmICghdW51c2VkKQotICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAgIG1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7Ci0KLSAgICBpZiAoY29tbWl0dGVkKSB7Ci0g
ICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkpOwotICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChpZCgpLCBJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOwotICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLSAgICB9Ci0KLSAgICBtX2RhdGFiYXNl
ID0gMDsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJl
ZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCIpOwotICAgIEFT
U0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVu
ZGluZykgewotICAgICAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLT5iZWdpbigpOwotICAg
ICAgICBtX3N0YXRlID0gUnVubmluZzsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVu
Y2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0g
ICAgLy8gdGFza3MuIFRha2UgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBvYmpl
Y3QgYWxpdmUgc28gdGhhdAotICAgIC8vIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMg
Y2FuIGJlIGNoZWNrZWQuCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHByb3Rl
Y3QoKnRoaXMpOwotCi0gICAgVGFza1F1ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsKLSAgICB3
aGlsZSAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQpIHsKLSAg
ICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgICAgIE93blB0cjxJREJPcGVy
YXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtlRmlyc3QoKSk7Ci0gICAgICAgIHRhc2stPnBlcmZv
cm0oKTsKLQotICAgICAgICAvLyBFdmVudCBpdHNlbGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1ZSBz
aG91bGQgYmUgcHJvY2Vzc2VkIG5leHQuCi0gICAgICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwot
ICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRhc2tzLCB3ZSBoYXZlbid0
IGFscmVhZHkgY29tbWl0dGVkL2Fib3J0ZWQsCi0gICAgLy8gYW5kIHRoZSBmcm9udC1lbmQgcmVx
dWVzdGVkIGEgY29tbWl0LCBpdCBpcyBub3cgc2FmZSB0byBkbyBzby4KLSAgICBpZiAoIWhhc1Bl
bmRpbmdUYXNrcygpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQgJiYgbV9jb21taXRQZW5kaW5nKQot
ICAgICAgICBjb21taXQoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
bG9zZU9wZW5DdXJzb3JzKCkKLXsKLSAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZCo+
OjppdGVyYXRvciBpID0gbV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMu
ZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+Y2xvc2UoKTsKLSAgICBtX29wZW5DdXJzb3JzLmNs
ZWFyKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZU1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZU1l
dGFkYXRhKSwgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlTWV0YWRhdGEuaWQpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpzY2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNrKERl
bGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0
KCksIG9iamVjdFN0b3JlTWV0YWRhdGEpLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQotewot
ICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2Fs
bGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNp
b25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1ldGFk
YXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJzaW9uKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi17Ci0gICAg
c2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5n
U3RvcmUuZ2V0KCksIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YS5p
ZCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlRGVsZXRl
SW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBpbmRleE1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzY2hlZHVsZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hlZHVs
ZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG1l
dGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwgY2Fs
bGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVQ
dXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsKLSAgICBzY2hlZHVs
ZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRh
dGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwg
Y2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6c2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGlu
ZGV4Q291bnQpCi17Ci0gICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6UHJlZW1wdGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IGluZGV4Q291bnQpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hl
ZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhPcGVuQ3Vyc29y
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0KCksIGRhdGFiYXNlKCku
aWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29y
VHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnNjaGVkdWxlQ291bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhDb3VudE9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlk
KCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQot
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0
aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgc2NoZWR1bGVU
YXNrKERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9iYWNraW5nU3RvcmUuZ2V0
KCksIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykp
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlQ2xlYXJPcGVy
YXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhDbGVhck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGNh
bGxiYWNrcykpOwotfQotCi1QYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2luZ1N0b3JlQ3Vyc29y
SW50ZXJmYWNlJiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2UtPmZhY3RvcnlCYWNrZW5kKCkuY3Jl
YXRlQ3Vyc29yQmFja2VuZCgqdGhpcywgY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgb2Jq
ZWN0U3RvcmVJZCk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjE5YTYxMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQk9wZXJh
dGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwgRklOQUwgOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiBjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
b2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKLSAgICB2aXJ0dWFs
IH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0
KCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KCkgT1ZFUlJJREUgRklO
QUw7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
IE9WRVJSSURFIEZJTkFMOwotCi0gICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMIHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNj
b3BlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywg
UGFzc093blB0cjxJREJPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVU
YXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRU
YXNrKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc093blB0cjxJREJPcGVyYXRpb24+LCBQYXNzT3duUHRy
PElEQk9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmQqKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCop
IE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpIE9WRVJS
SURFIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgT1ZFUlJJREUgeyBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9Ci0gICAg
dmlydHVhbCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSB7IHJldHVybiAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsgfQotCi0g
ICAgdmlydHVhbCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNlKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gKm1fZGF0YWJhc2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVEZWxldGVPYmpl
Y3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJikgT1ZFUlJJREUg
RklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYpIE9WRVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVk
REI6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREUgRklOQUw7
Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlUHV0T3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8
SURCS2V5PiwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXM+JikgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KSBPVkVSUklERSBG
SU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb3VudE9wZXJh
dGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREUgRklOQUw7Ci0g
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDbGVhck9wZXJh
dGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZF
UlJJREUgRklOQUw7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4g
Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmLCBJbmRl
eGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgaW50NjRfdCBpZCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4m
IG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7Ci0KLSAgICBlbnVt
IFN0YXRlIHsKLSAgICAgICAgVW51c2VkLCAvLyBDcmVhdGVkLCBidXQgbm8gdGFza3MgeWV0Lgot
ICAgICAgICBTdGFydFBlbmRpbmcsIC8vIEVucXVldWVkIHRhc2tzLCBidXQgYmFja2luZyBzdG9y
ZSB0cmFuc2FjdGlvbiBub3QgeWV0IHN0YXJ0ZWQuCi0gICAgICAgIFJ1bm5pbmcsIC8vIEJhY2tp
bmcgc3RvcmUgdHJhbnNhY3Rpb24gc3RhcnRlZCBidXQgbm90IHlldCBmaW5pc2hlZC4KLSAgICAg
ICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9ydGVkIG9yIGNvbW1pdHRlZC4KLSAgICB9OwotCi0g
ICAgdm9pZCBzdGFydCgpOwotCi0gICAgYm9vbCBpc1Rhc2tRdWV1ZUVtcHR5KCkgY29uc3Q7Ci0g
ICAgYm9vbCBoYXNQZW5kaW5nVGFza3MoKSBjb25zdDsKLQotICAgIHZvaWQgdGFza1RpbWVyRmly
ZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKTsKLSAgICB2b2lkIGNsb3NlT3Bl
bkN1cnNvcnMoKTsKLQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4gbV9vYmplY3RTdG9yZUlk
czsKLSAgICBjb25zdCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtX21vZGU7Ci0KLSAgICBT
dGF0ZSBtX3N0YXRlOwotICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0KLSAgICB0eXBlZGVmIERlcXVlPE93blB0cjxJREJPcGVy
YXRpb24+PiBUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOwotICAgIFRhc2tR
dWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVl
dWU7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRl
cmZhY2U+IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb247Ci0KLSAgICAvLyBGSVhNRTogZGVsZXRl
IHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgotICAgIFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVyOwotICAgIGludCBtX3BlbmRpbmdQcmVl
bXB0aXZlRXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kKj4gbV9vcGVuQ3Vy
c29yczsKLSAgICAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tp
bmdTdG9yZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1OTAyYzYxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZV9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9o
Ci0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQ2FsbGJhY2tzOwotY2xhc3MgSURCRGF0YWJhc2VD
YWxsYmFja3M7Ci1jbGFzcyBJREJEYXRhYmFzZUVycm9yOwotY2xhc3MgSURCS2V5OwotY2xhc3Mg
SURCS2V5UmFuZ2U7Ci1jbGFzcyBJREJPcGVyYXRpb247Ci0KLXN0cnVjdCBJREJEYXRhYmFzZU1l
dGFkYXRhOwotc3RydWN0IElEQkluZGV4TWV0YWRhdGE7Ci1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlIDogcHVibGlj
IFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUoKSBjb25zdCA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBIYXNo
U2V0PGludDY0X3Q+JiBzY29wZSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZVRhc2soUGFzc093blB0cjxJREJPcGVyYXRpb24+LCBQYXNzT3duUHRyPElEQk9wZXJhdGlv
bj4gYWJvcnRUYXNrID0gbnVsbHB0cikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVRh
c2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc093blB0cjxJREJP
cGVyYXRpb24+LCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNr
ZW5kKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJz
b3JCYWNrZW5kKikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ3JlYXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVZlcnNp
b25DaGFuZ2VPcGVyYXRpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3Rl
ZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVHZXRPcGVyYXRpb24o
Y29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBp
bmRleENvdW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlT3BlbkN1cnNvck9wZXJh
dGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNv
clR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvdW50T3BlcmF0
aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ2xlYXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBh
ZGRQcmVlbXB0aXZlRXZlbnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUHJl
ZW1wdGl2ZUV2ZW50KCkgPSAwOwotCi0gICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbkludGVyZmFjZSYgYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSA9IDA7Ci0gICAgdmlydHVh
bCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNlKCkgY29uc3QgPSAwOwotCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZUN1cnNvckJhY2tl
bmQoSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpID0gMDsKLQotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoaW50NjRfdCBp
ZCkKLSAgICAgICAgOiBtX2lkKGlkKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW50
NjRfdCBtX2lkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaAppbmRleCA0NDNiNmU1
Li4yMDY1ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCkBAIC0yOCw3
ICsyOCw3IEBACiAKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIApAQCAtMzYsNTMgKzM2LDUzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0
aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwg
b2JqZWN0U3RvcmVNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgp
IE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3Rv
cmVNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAgICAg
ICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAgICAgICAgLCBtX29iamVjdFN0b3Jl
TWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7CiAgICAgfQogICAgIAotICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKIH07CiAKIGNs
YXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVh
dGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0
b3JlTWV0YWRhdGEpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklE
RSBGSU5BTDsKIHByaXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEpCisgICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNr
aW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRh
dGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAgICAgLCBtX2Jh
Y2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRh
KG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKIH07CiAKIGNsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0
aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFj
a3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCB0
cmFuc2FjdGlvbklkLCB2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7CiAg
ICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRl
OgotICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV90cmFuc2FjdGlv
bklkKHRyYW5zYWN0aW9uSWQpCiAgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCkBAIC05MSw3
ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBpbnQ2NF90IG1fdHJhbnNhY3Rpb25J
ZDsKICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKQEAgLTEwMCw2OSArMTAwLDY5IEBAIHByaXZhdGU6CiAKIGNsYXNzIENyZWF0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgotICAgIENyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQorICAgIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKIH07CiAKIGNsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsKICAgICB9CiAg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6Ci0gICAg
RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZU1ldGFkYXRhKQorICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQogICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRh
KQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBtX3RyYW5zYWN0aW9uOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1f
dHJhbnNhY3Rpb247CiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0
YWRhdGE7CiB9OwogCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdl
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50
NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgU3Ry
aW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIHByZXZpb3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJzaW9uKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgot
ICAgIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRf
dCBwcmV2aW91c0ludFZlcnNpb24pCisgICAgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNW
ZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKICAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQogICAgICAgICAsIG1fcHJldmlvdXNWZXJzaW9uKHByZXZpb3VzVmVy
c2lvbikKICAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihwcmV2aW91c0ludFZlcnNpb24p
CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90
cmFuc2FjdGlvbjsKICAgICBTdHJpbmcgbV9wcmV2aW91c1ZlcnNpb247CiAgICAgaW50NjRfdCBt
X3ByZXZpb3VzSW50VmVyc2lvbjsKIH07CiAKIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uIDog
cHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
T3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICBz
dGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFk
YXRhKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleE9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFk
YXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7
CiBwcml2YXRlOgotICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2lu
Z1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4TWV0YWRhdGEpCisgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRh
ZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAgICAgICAsIG1f
YmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2Jq
ZWN0U3RvcmVJZCkKQEAgLTE3MCw3ICsxNzAsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9u
OworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CiAgICAg
Y29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7CiAg
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CiAgICAgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSBtX2luZGV4TWV0YWRhdGE7CkBAIC0xNzgsMzMgKzE3OCwzMyBAQCBwcml2YXRlOgogCiBj
bGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9u
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklE
RSBGSU5BTDsKIHByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkKKyAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAg
ICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCiAgICAgICAgICwgbV9pbmRleElk
KGluZGV4SWQpCiAgICAgewogICAgIH0KIAotICAgIGNvbnN0IFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKICAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKIH07CiAKIGNsYXNzIERl
bGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNr
aW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgotICAgIERlbGV0ZUluZGV4T3BlcmF0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgRGVsZXRlSW5kZXhPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKQogICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAgICAgICAg
LCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKQEAgLTIxMiw3ICsyMTIsNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IG1fdHJhbnNhY3Rpb247CiAgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CiAg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7CkBAIC0yMjAsMzMgKzIy
MCwzMyBAQCBwcml2YXRlOgogCiBjbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVi
bGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybSgpIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3Bl
cmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkK
KyAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CiAgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CiAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7
CiB9OwogCiBjbGFzcyBHZXRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdT
dG9yZSwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JU
eXBlLCBjYWxsYmFja3MpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVS
UklERSBGSU5BTDsKIHByaXZhdGU6Ci0gICAgR2V0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFj
a2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBHZXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUs
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAg
ICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZCht
ZXRhZGF0YS5pZCkKQEAgLTI2Miw3ICsyNjIsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQo
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9y
ZUlkKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiBtX3RyYW5zYWN0aW9uOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJh
bnNhY3Rpb247CiAgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gbV9i
YWNraW5nU3RvcmU7CiAgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CkBAIC0yNzYsMTMgKzI3NiwxMyBAQCBwcml2YXRlOgog
CiBjbGFzcyBQdXRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBp
bmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHV0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5n
U3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxs
YmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6Ci0gICAgUHV0T3BlcmF0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cykKKyAgICBQdXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAg
ICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQpAQCAtMjk2LDcgKzI5Niw3IEBAIHByaXZh
dGU6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4g
bV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
PiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKICAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CkBAIC0zMTAsMzEgKzMx
MCwzMSBAQCBwcml2YXRlOgogCiBjbGFzcyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJs
aWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVy
YXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
LCBzaXplX3QgaW5kZXhDb3VudCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBzaXplX3QgaW5kZXhD
b3VudCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2V0SW5kZXhlc1JlYWR5
T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBpbmRleENvdW50KSk7CiAgICAgfQogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgotICAgIFNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
LCBzaXplX3QgaW5kZXhDb3VudCkKKyAgICBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCiAgICAgICAg
IDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAgICAgLCBtX2luZGV4Q291bnQoaW5k
ZXhDb3VudCkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kPiBtX3RyYW5zYWN0aW9uOwogICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7CiB9Owog
CiBjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tU
eXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkN1cnNv
ck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlw
ZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJ
REUgRklOQUw7CiBwcml2YXRlOgotICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBj
dXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIE9wZW5DdXJzb3JPcGVy
YXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
IHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6
IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFj
a2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQpAQCAtMzQ4LDcg
KzM0OCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25zdCBpbnQ2NF90IG1fZGF0
YWJhc2VJZDsKICAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKQEAgLTM2MiwxMyAr
MzYyLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGljIElEQk9w
ZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBj
cmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ291bnRP
cGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwogICAgIH0KICAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKLSAgICBDb3VudE9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgQ291
bnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6
IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFj
a2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQpAQCAtMzc5LDcg
KzM3OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25zdCBpbnQ2NF90IG1fZGF0
YWJhc2VJZDsKICAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKQEAgLTM5MCwxMyAr
MzkwLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIERlbGV0ZVJhbmdlT3BlcmF0aW9uIDogcHVibGlj
IElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc093
blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0
aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
YmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJh
Y2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7
CiBwcml2YXRlOgotICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2lu
Z1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCisgICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAgICAgICAsIG1fYmFja2luZ1N0b3Jl
KGJhY2tpbmdTdG9yZSkKICAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKQEAgLTQw
Niw3ICs0MDYsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOworICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247CiAgICAgY29uc3QgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgY29uc3QgaW50NjRfdCBt
X2RhdGFiYXNlSWQ7CiAgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CkBAIC00MTYs
MTMgKzQxNiwxMyBAQCBwcml2YXRlOgogCiBjbGFzcyBDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tp
bmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENsZWFyT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwogICAgIH0KICAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKLSAgICBDbGVhck9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAg
Q2xlYXJPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV9iYWNraW5n
U3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQpA
QCAtNDMxLDcgKzQzMSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBSZWZQdHI8
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25zdCBpbnQ2
NF90IG1fZGF0YWJhc2VJZDsKICAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAKaW5kZXggOWQ3YjgwZi4uZjEwZDlmNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMTMgKzQ2LDEz
IEBAIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCkKIHsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRDcmVhdGVUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQordm9p
ZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VSVCghbV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKICAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNh
Y3Rpb24sIHRyYW5zYWN0aW9uKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OjpkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24pCit2b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZFN0YXJ0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKIApAQCAtNjAsNyArNjAsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZFN0YXJ0VHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYQogICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25z
KCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKK3ZvaWQg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb24pKTsKIApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZgogCiAjaWZuZGVmIE5ERUJVRwogLy8gVmVyaWZpZXMgaW50ZXJuYWwgY29uc2lz
dGllbmN5IHdoaWxlIHJldHVybmluZyB3aGV0aGVyIGFueXRoaW5nIGlzIGZvdW5kLgotYm9vbCBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjppc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKQorYm9vbCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpp
c0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQogewogICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKICAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJh
bnNhY3Rpb24pKQpAQCAtOTgsOSArOTgsOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKIAogICAgIEFTU0VSVChtX3N0YXJ0ZWRU
cmFuc2FjdGlvbnMuaXNFbXB0eSgpIHx8ICgqbV9zdGFydGVkVHJhbnNhY3Rpb25zLmJlZ2luKCkp
LT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwogCi0gICAg
TGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAgICBMaXN0SGFzaFNldDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5z
YWN0aW9ucy5iZWdpbigpOwogICAgIHdoaWxlIChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5l
bmQoKSkgewotICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uID0gKml0OworICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0g
Kml0OwogICAgICAgICArK2l0OwogICAgICAgICBpZiAoY2FuUnVuVHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pKSB7CiAgICAgICAgICAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNh
Y3Rpb24pOwpAQCAtMTE5LDcgKzExOSw3IEBAIHN0YXRpYyBib29sIGRvU2NvcGVzT3ZlcmxhcChj
b25zdCBIYXNoU2V0PGludDY0X3Q+JiBzY29wZTEsIGNvbnN0IEhhc2hTZXQ8aW50NjRfCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNhblJ1
blRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24p
Citib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNhblJ1blRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKG1fcXVldWVkVHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CiAgICAgc3dpdGNoICh0cmFuc2FjdGlv
bi0+bW9kZSgpKSB7CkBAIC0xMzIsMTEgKzEzMiwxMSBAQCBib29sIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OmNhblJ1blRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlv
blJlYWRXcml0ZToKLSAgICAgICAgZm9yIChIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5iZWdp
bigpOyBpdCAhPSBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
Zm9yIChIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5iZWdpbigpOyBpdCAhPSBtX3N0YXJ0ZWRUcmFuc2FjdGlv
bnMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIGlmICgoKml0KS0+bW9kZSgpID09IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25SZWFkV3JpdGUgJiYgZG9TY29wZXNPdmVybGFwKHRyYW5zYWN0aW9u
LT5zY29wZSgpLCAoKml0KS0+c2NvcGUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIGZvciAoTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMu
YmVnaW4oKTsgKml0ICE9IHRyYW5zYWN0aW9uOyArK2l0KSB7CisgICAgICAgIGZvciAoTGlzdEhh
c2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9xdWV1
ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsgKml0ICE9IHRyYW5zYWN0aW9uOyArK2l0KSB7CiAgICAg
ICAgICAgICBBU1NFUlQoaXQgIT0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuZW5kKCkpOwogICAgICAg
ICAgICAgaWYgKCgqaXQpLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRXcml0
ZSAmJiBkb1Njb3Blc092ZXJsYXAodHJhbnNhY3Rpb24tPnNjb3BlKCksICgqaXQpLT5zY29wZSgp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgK
aW5kZXggMTBlMmIxMi4uMTUyMDIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaApAQCAtMzQs
NyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZDsKIAogLy8gVHJh
bnNhY3Rpb25zIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KIGNs
YXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgewpAQCAtNDMsMjUgKzQzLDI1IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CiAKICAgICAvLyBD
YWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlzaC4KLSAgICB2b2lk
IGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwot
ICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqKTsKLSAgICB2b2lkIGRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSopOworICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kKik7CisgICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZCopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kKik7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBpc0FjdGl2ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICBib29sIGlzQWN0aXZlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCopOwogI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpOwogCiAgICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotICAgIGJv
b2wgY2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Cisg
ICAgYm9vbCBjYW5SdW5UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKIAogICAg
IC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQgd2F5IHRvIGtlZXAgcmVmZXJlbmNlcyB0byBh
bGwgdHJhbnNhY3Rpb25zLgotICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gPiBtX3RyYW5zYWN0
aW9uczsKKyAgICBIYXNoTWFwPElEQlRyYW5zYWN0aW9uQmFja2VuZCosIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmQ+ID4gbV90cmFuc2FjdGlvbnM7CiAgICAgLy8gVHJhbnNhY3Rpb25zIGlu
IGRpZmZlcmVudCBzdGF0ZXMgYXJlIGdyb3VwZWQgYmVsb3cuCi0gICAgTGlzdEhhc2hTZXQ8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7Ci0gICAg
SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqPiBtX3N0YXJ0ZWRUcmFuc2Fj
dGlvbnM7CisgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kKj4gbV9xdWV1ZWRU
cmFuc2FjdGlvbnM7CisgICAgSGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBtX3N0YXJ0
ZWRUcmFuc2FjdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9y
ZUxldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJCYWNraW5nU3RvcmVMZXZlbERCLmNwcAppbmRleCA2OGE3ZTExLi5iYzY4MTUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUxldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKICNpbmNs
dWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgogI2luY2x1ZGUgIkxl
dmVsREJDb21wYXJhdG9yLmgiCiAjaW5jbHVkZSAiTGV2ZWxEQkRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCkBAIC0xMzgzLDcgKzEzODMsNyBAQCBib29sIElEQkJhY2tp
bmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25JbnRlcmZhYwogfQogCiAKLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6bWFrZUluZGV4
V3JpdGVycyhJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UmIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
LCBJREJLZXkmIHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBW
ZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyPj4mIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJv
ck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6
bWFrZUluZGV4V3JpdGVycyhJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
LCBJREJLZXkmIHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBW
ZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyPj4mIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJv
ck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkKIHsKICAgICBBU1NFUlQoaW5kZXhJZHMuc2l6ZSgp
ID09IGluZGV4S2V5cy5zaXplKCkpOwogICAgIGNvbXBsZXRlZCA9IGZhbHNlOwpAQCAtMTQxNSw3
ICsxNDE1LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjptYWtlSW5kZXhXcml0ZXJz
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSYgdHIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotUGFzc1JlZlB0cjxJREJLZXk+IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmdlbmVyYXRlS2V5
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorUGFzc1JlZlB0cjxJREJLZXk+IElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OmdlbmVyYXRlS2V5KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewog
ICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQwOTkyTEw7
IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4KICAgICBp
bnQ2NF90IGN1cnJlbnROdW1iZXI7CkBAIC0xNDMxLDcgKzE0MzEsNyBAQCBQYXNzUmVmUHRyPElE
QktleT4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Z2VuZXJhdGVLZXkoSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZQogfQogCiAKLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6dXBkYXRlS2V5
R2VuZXJhdG9yKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSYgdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtl
eSwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnVwZGF0
ZUtleUdlbmVyYXRvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGJv
b2wgY2hlY2tDdXJyZW50KQogewogICAgIEFTU0VSVChrZXkudHlwZSgpID09IElEQktleTo6TnVt
YmVyVHlwZSk7CiAgICAgcmV0dXJuIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cih0cmFuc2FjdGlvbi5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXkubnVtYmVyKCkpKSArIDEs
IGNoZWNrQ3VycmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCmluZGV4IDll
MTU2MjEuLmMxMmZlNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCkBAIC0x
MDAsMTAgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUN1cnNvckludGVyZmFjZT4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gb3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbWFrZUluZGV4
V3JpdGVycyhJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UmLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJLZXkmIHByaW1hcnlLZXksIGJv
b2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYsIFZlY3RvcjxSZWZQdHI8SURCSW5kZXhXcml0ZXI+PiYgaW5k
ZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBPVkVSUklE
RSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIG1ha2VJbmRleFdyaXRlcnMo
SURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRl
ZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5
cz4mLCBWZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyPj4mIGluZGV4V3JpdGVycywgU3RyaW5n
KiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkgT1ZFUlJJREUgV0FSTl9VTlVTRURfUkVU
VVJOOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVLZXlHZW5lcmF0
b3IoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGJvb2wgY2hlY2tDdXJyZW50KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShJREJU
cmFuc2FjdGlvbkJhY2tlbmQmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUtleUdlbmVyYXRvcihJREJU
cmFuc2FjdGlvbkJhY2tlbmQmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5JiwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURFOwogCiAgICAg
TGV2ZWxEQkRhdGFiYXNlKiBsZXZlbERCRGF0YWJhc2UoKSB7IHJldHVybiBtX2RiLmdldCgpOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcAppbmRleCBkZmJjYmYw
Li40OTdjNGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCkBA
IC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgogI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlv
bi5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CkBAIC0xODksMTUgKzE4OSwxNSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6b3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIGludDY0XwogICAgIGRhdGFi
YXNlQmFja2VuZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywg
dHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBJREJGYWN0b3J5QmFja2VuZExldmVsREI6Om1heWJlQ3JlYXRlVHJh
bnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogYmFja2VuZCwgaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRh
YmFzZUNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kPiBJREJGYWN0b3J5QmFja2VuZExldmVsREI6Om1heWJlQ3JlYXRlVHJhbnNhY3Rpb25C
YWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogYmFja2VuZCwgaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxi
YWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAoIWJhY2tlbmQtPmlzSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bCo+KGJhY2tlbmQpLCB0cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3Rv
cmVJZHMsIG1vZGUpOworICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNyZWF0ZShz
dGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4oYmFja2VuZCksIHRyYW5zYWN0aW9u
SWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywgbW9kZSk7CiB9CiAKLVBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpjcmVhdGVD
dXJzb3JCYWNrZW5kKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSYgdHJhbnNhY3Rpb25C
YWNrZW5kLCBJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmIGJhY2tpbmdTdG9yZUN1cnNv
ciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK1Bhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpjcmVhdGVD
dXJzb3JCYWNrZW5kKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb25CYWNrZW5kLCBJ
REJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmIGJhY2tpbmdTdG9yZUN1cnNvciwgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICByZXR1cm4g
SURCQ3Vyc29yQmFja2VuZDo6Y3JlYXRlKCZiYWNraW5nU3RvcmVDdXJzb3IsIGN1cnNvclR5cGUs
IHRhc2tUeXBlLCAmdHJhbnNhY3Rpb25CYWNrZW5kLCBvYmplY3RTdG9yZUlkKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCmluZGV4IDg2ZjUwMjQuLjNjM2M3NzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFj
dG9yeUJhY2tlbmRMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaApAQCAtNjMsOSArNjMsOSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSBPVkVSUklE
RSBGSU5BTDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IG1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZSosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kPiBtYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZSkgT1ZFUlJJREUgRklOQUw7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZD4gY3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UmLCBJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmLCBJbmRleGVkREI6OkN1
cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+
IGNyZWF0ZUN1cnNvckJhY2tlbmQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgSURCQmFja2luZ1N0
b3JlQ3Vyc29ySW50ZXJmYWNlJiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+IG9w
ZW5CYWNraW5nU3RvcmUoY29uc3QgU2VjdXJpdHlPcmlnaW4mLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDkxMGY0YmQuLmJkNDZiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NDIsMTAgKzE2NDIsMTAgQEAKIAkJ
NTBFMThDREExNkY5Mjg1ODAwQzY1NDg2IC8qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MEUxOENE
NzE2RjkyODU4MDBDNjU0ODYgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUuaCAqLzsg
fTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRB
ODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTEwMTg0NkEwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0Njgw
QjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwICovOyB9OwotCQk1MTA1OUREQjE4MjBC
MTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1OURENzE4MjBCMTc2MDBERkY5
QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTUxMDU5RERDMTgy
MEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1OUREODE4MjBCMTc2MDBERkY5
QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMDU5REREMTgyMEIxNzYwMERGRjlCMSAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5REQ5MTgyMEIxNzYwMERGRjlCMSAvKiBJREJU
cmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLzsgfTsKIAkJNTEwNTlEREUxODIwQjE3
NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDU5RERBMTgyMEIxNzYwMERG
RjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi87IH07CisJCTUxMEI3
REI3MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQjdEQjUxODJEOUY1RDAw
OUJGOTU3IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgKi87IH07CisJCTUxMEI3REI4MTgy
RDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEI3REI2MTgyRDlGNUQwMDlCRjk1NyAv
KiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3Ry
ZWFtRXJyb3JCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMEQ0QTJEMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2Uu
Y3BwICovOyB9OwogCQk1MTBENEEzNDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJy
b3JCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBENEEyRTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggKi87IH07
CiAJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTMw
MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCAqLzsgfTsKQEAg
LTE4NDcsNyArMTg0Nyw2IEBACiAJCTUxRUFDNTY4MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUVBQzU2NjE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUxRUFDNUIyMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzVCMDE4MTYz
RjRFMDA0RjFCQTQgLyogSURCUmVjb3JkSWRlbnRpZmllci5oICovOyB9OwogCQk1MUVDOTI2NTBD
RTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjVEMENF
OTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICov
OyB9OwotCQk1MUY2RTBBMzE4MTFEMjUyMDA1OEEwMEEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUY2RTA4RjE4MTFEMjUyMDA1OEEwMEEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTFGQTJENzgxNTIxMzJCMzAwQzFCQTBCIC8qIERPTVdpbmRvd0V4dGVuc2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkJBMTgxNTFBQTcxQjAw
QjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRkI1NTA0MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Ns
b3NlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRkI1NTAyMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuaCAqLzsgfTsKIAkJNTFG
QjU1MDUxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYg
LyogSlNDbG9zZUV2ZW50LmNwcCAqLzsgfTsKQEAgLTgzMjMsMTAgKzgzMjIsMTAgQEAKIAkJNTBF
MThDRDcxNkY5Mjg1ODAwQzY1NDg2IC8qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUNhY2hlLmg7IHBhdGggPSBzdHlsZS9TdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyog
Q2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY4MEIwODYwMkEwMDRBODI1
RiAvKiBDYWNoZWRQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhY2hlZFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTA1OURENzE4
MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwNTlERDgxODIwQjE3NjAwREZGOUIx
IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTA1OUREOTE4MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTEwNTlEREExODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTBCN0RCNTE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMEI3REI2MTgyRDlGNUQwMDlCRjk1
NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxMEQ0QTJEMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtRXJyb3JC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwRDRBMkUxMDMxNjVFRTAw
NDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFt
SGFuZGxlQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NTUzLDcgKzg1
NTIsNiBAQAogCQk1MUVDOTI1RDBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRjZBM0Q1MDY2M0JGMDQwMDREMjkxOSAvKiBIVE1MQ2FudmFzRWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MQ2FudmFzRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUY2QTNENjA2NjNCRjA0MDA0RDI5MTkgLyog
SFRNTENhbnZhc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCTUxRjZFMDhGMTgxMUQyNTIwMDU4
QTAwQSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI1NTAyMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Ns
b3NlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDbG9zZUV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI1NTAzMTEzRTNFOTEwMDgyMTE3
NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDbG9zZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxRDQ2
RjUxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gS2lsbFJpbmdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNzAwNiw5ICsxNzAwNCw4IEBACiAJCQkJNTFENzE5QTQxODExMDZFMDAwMTZE
QzUxIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLywKIAkJCQk1MUQ3MTlBNTE4MTEwNkUwMDAxNkRD
NTEgLyogSURCVHJhbnNhY3Rpb24uaCAqLywKIAkJCQk1MUQ3MTlBNjE4MTEwNkUwMDAxNkRDNTEg
LyogSURCVHJhbnNhY3Rpb24uaWRsICovLAotCQkJCTUxMDU5REQ3MTgyMEIxNzYwMERGRjlCMSAv
KiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk1MTA1OUREODE4MjBCMTc2
MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICovLAotCQkJCTUxRjZFMDhG
MTgxMUQyNTIwMDU4QTAwQSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAqLywK
KwkJCQk1MTBCN0RCNTE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNw
cCAqLywKKwkJCQk1MTBCN0RCNjE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kLmggKi8sCiAJCQkJNTEwNTlERDkxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuY3BwICovLAogCQkJCTUxMDU5RERBMTgyMEIxNzYwMERGRjlCMSAv
KiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi8sCiAJCQkJNTFFQUM1NjUxODE1
RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovLApAQCAtMjI1
NDMsNiArMjI1NDAsNyBAQAogCQkJCTg1RUNCRUY1MEFBNzYyNjkwMDU0NEYwQiAvKiBET01IVE1M
TW9kRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQkMwQUM1RDUzNTAwNTMyNzBG
IC8qIERPTUhUTUxNb2RFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1REY4
MTJCMEFBNzc4NzIwMDQ4NkFENyAvKiBET01IVE1MT2JqZWN0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTEwQjdEQjgxODJEOUY1RDAwOUJGOTU3IC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQkQwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhU
TUxPYmplY3RFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0RDE1MEFB
Njg4NjgwMDg4MDUyRCAvKiBET01IVE1MT0xpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NUU3MTFCRTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE9MaXN0RWxlbWVudEludGVybmFs
LmggaW4gSGVhZGVycyAqLywKQEAgLTIyODE4LDcgKzIyODE2LDYgQEAKIAkJCQkyRURGMzY5RjEy
MkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
OTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE4OEE5MDUxNzU1M0NENzAwMEM3NEY5IC8qIEZpbGVJY29uTG9h
ZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTA1OUREQzE4MjBCMTc2MDBERkY5QjEgLyogSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkUxMjUx
RjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2
Qzg2MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY4
OUYxQUYxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMzk1NCw3ICsyMzk1MSw2IEBACiAJCQkJNzdBMTdBNzIxMkYyODE4MjAwNEUwMkY2IC8qIE9F
U1ZlcnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGREEzRTk1QTEzNEE0OUVG
MDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlGREE5MzI1RTE2NzAzQjJBMDA4OTgyREMgLyogT2ZmbGluZUF1ZGlvQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNTFGNkUwQTMxODExRDI1MjAwNThBMDBBIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBM0U5NUMxMzRBNDlF
RjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwMDE0NjI4QjEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNz
RW50cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMjY3MjUsNiArMjY3MjEsNyBAQAogCQkJCUZEMjNB
MTI1MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFNDQ2MTQxODBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVy
cm9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOUFDM0Y0MTgyNERDNzkwMDM0OTQyNiAvKiBD
cnlwdG9BbGdvcml0aG1TSEE1MTIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwQjdEQjcxODJE
OUY1RDAwOUJGOTU3IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDREE5OERBMzE2MDE0NjQxMDBGRUEzQjEgLyogSlNNZWRpYUtleUVycm9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNEQjg1OUZBMTYwRDQ5NDkwMEU1QjA3RiAvKiBKU01lZGlhS2V5RXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBOThEREYxNjAyNkEzNzAwRkVBM0IxIC8qIEpT
TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzY5MCw3ICsyNzY4
Nyw2IEBACiAJCQkJQUE0QzNBNzYwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRP
d25lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTlBRTA2MzE0MkQ2QjI0MDA2NTYzQTEgLyog
U3R5bGVGaWx0ZXJEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzMTc2MTIyMTNDNTE2Njkw
MDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1
MTA1OUREQjE4MjBCMTc2MDBERkY5QjEgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0VGNDQ3RDBFNjc0ODA2MDAxQzEyODcgLyogU3R5bGVHZW5l
cmF0ZWRJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTBEQzc2QTE0NzQ3QkFCMDA1RTI0
NzEgLyogU3R5bGVHcmlkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTEwREI5RDE0RjVE
Rjg3MDBBMDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggZGE3YzMyOC4uMzIyOTgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAy
MDEzLTExLTA4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAgICAgICBN
ZXJnZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgYW5kIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNDA3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlCYWNrZW5kLmNw
cDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9y
eUJhY2tlbmQuaDoKKworMjAxMy0xMS0wOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CisKICAgICAgICAgTWVyZ2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSBhbmQgSURCQ3Vy
c29yQmFja2VuZEltcGwKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNDA2OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rh
dGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlCYWNrZW5kLmNw
cAppbmRleCAwYzE2ZjY2Li40ZGQxZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0
b3J5QmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0lEQkNh
bGxiYWNrcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURCQ3Vyc29yQmFja2VuZC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VDYWxsYmFja3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSURCVHJh
bnNhY3Rpb25CYWNrZW5kLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgpAQCAtMTAwLDEzICsxMDAsMTMgQEAgdm9pZCBXZWJJREJGYWN0b3J5QmFja2VuZDo6
cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IFdl
YklEQkZhY3RvcnlCYWNrZW5kOjptYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJbmRleGVkREI6
OlRyYW5zYWN0aW9uTW9kZSkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBXZWJJ
REJGYWN0b3J5QmFja2VuZDo6bWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsK
IH0KIAotUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBXZWJJREJGYWN0b3J5QmFja2VuZDo6
Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UmLCBJREJC
YWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIGludDY0X3QpCitQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmQ+IFdlYklEQkZhY3RvcnlCYWNrZW5kOjpjcmVhdGVDdXJzb3JCYWNrZW5k
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYs
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSwgaW50NjRfdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERC
L1dlYklEQkZhY3RvcnlCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaAppbmRleCAyNGUwMjVhLi4wNjQx
N2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaApAQCAtNDUsOSAr
NDUsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNr
ZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBt
YXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBXZWJDb3JlOjpJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZD4gbWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJh
Y2tlbmQoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiwgaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiwgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUp
IE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkN1cnNvckJh
Y2tlbmQ+IGNyZWF0ZUN1cnNvckJhY2tlbmQoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlJiwgV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiwgV2Vi
Q29yZTo6SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kPiBjcmVhdGVDdXJz
b3JCYWNrZW5kKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZCYsIFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJJ
REJGYWN0b3J5QmFja2VuZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5SWRlbnRpZmll
cik7Cg==
</data>
<flag name="review"
          id="239423"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>