<?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>226124</bug_id>
          
          <creation_ts>2021-05-21 16:33:10 -0700</creation_ts>
          <short_desc>Make error returned by SQLiteIDBBackingStore::getOrEstablishDatabaseInfo more detailed</short_desc>
          <delta_ts>2021-05-25 15:36:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762655</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-21 16:33:10 -0700</bug_when>
    <thetext>To help debug rdar://77532291.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762662</commentid>
    <comment_count>1</comment_count>
      <attachid>429361</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-21 16:42:11 -0700</bug_when>
    <thetext>Created attachment 429361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763238</commentid>
    <comment_count>2</comment_count>
      <attachid>429562</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-24 14:03:47 -0700</bug_when>
    <thetext>Created attachment 429562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763526</commentid>
    <comment_count>3</comment_count>
      <attachid>429562</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-25 09:00:37 -0700</bug_when>
    <thetext>Comment on attachment 429562
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:-262
&gt; -            LOG_ERROR(&quot;Unable to prepare statement to fetch schema for the Records table.&quot;);

Unclear why this patch is getting rid of all the LOG_ERROR(). You can both LOG_ERROR AND return a useful IDBError. Why trade one for the other?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:257
&gt; +    String tableStatement = database.tableSQL(&quot;Records&quot;_s);

Why is it named Statement and not schema like it used to be? If I see statement, I expect a SQLiteStatement.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:262
&gt; +        return IDBError { };

wouldn&apos;t `return { };` work?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:267
&gt; +        return IDBError { };

wouldn&apos;t `return { };` work?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:293
&gt; +    return IDBError { };

wouldn&apos;t `return { };` work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763681</commentid>
    <comment_count>4</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-25 14:14:22 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Comment on attachment 429562 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429562&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:-262
&gt; &gt; -            LOG_ERROR(&quot;Unable to prepare statement to fetch schema for the Records table.&quot;);
&gt; 
&gt; Unclear why this patch is getting rid of all the LOG_ERROR(). You can both
&gt; LOG_ERROR AND return a useful IDBError. Why trade one for the other?
&gt; 

As the error is more detailed, we can add error logging at higher level.
Will add logging in UniqueIDBDatabase::performCurrentOpenOperation().

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:257
&gt; &gt; +    String tableStatement = database.tableSQL(&quot;Records&quot;_s);
&gt; 
&gt; Why is it named Statement and not schema like it used to be? If I see
&gt; statement, I expect a SQLiteStatement.
&gt; 

I think schema is for describing the whole database and this is a column of an entry in schema table, which is usually text of the original statement to create the table.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:262
&gt; &gt; +        return IDBError { };
&gt; 
&gt; wouldn&apos;t `return { };` work?
&gt; 

No, chosen constructor is explicit in copy-initialization. (IDBError&apos;s constructor is explicit, we may change that)

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:267
&gt; &gt; +        return IDBError { };
&gt; 
&gt; wouldn&apos;t `return { };` work?
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:293
&gt; &gt; +    return IDBError { };
&gt; 
&gt; wouldn&apos;t `return { };` work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763692</commentid>
    <comment_count>5</comment_count>
      <attachid>429695</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-25 14:51:34 -0700</bug_when>
    <thetext>Created attachment 429695
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763710</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-25 15:35:03 -0700</bug_when>
    <thetext>Committed r278053 (238138@main): &lt;https://commits.webkit.org/238138@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429695.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763711</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-25 15:36:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78480040&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429361</attachid>
            <date>2021-05-21 16:42:11 -0700</date>
            <delta_ts>2021-05-24 14:03:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226124-20210521164210.patch</filename>
            <type>text/plain</type>
            <size>29985</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3ODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTgwOGQ4MzgxZDdjZDlm
YjQyMGNiOWEwMmU2NmIyZWY1OTdjZDUwMi4uMjJmYzM4MGNjN2I3MDVlNGIyMzUwODgzYTFmNTI2
ZDc4YTIzNjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTA1LTIxICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgZXJyb3IgcmV0dXJu
ZWQgYnkgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyBt
b3JlIGRldGFpbGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjYxMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb252ZXJ0IHNvbWUgZXJyb3IgbG9nZ2luZ3MgdG8gZXJyb3IgaW5mbyB0byBoZWxwIGRl
YnVnIHJkYXI6Ly83NzUzMjI5MS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpjcmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
OjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOiBhZGQgdHdvIGhl
bHBlciBmdW50aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1hbnkgcGxhY2VzLgorICAgICAgICAoV2Vi
Q29yZTo6U1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlOjp0YWJsZVNRTCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZTo6aW5kZXhTUUwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgor
CiAyMDIxLTA1LTIxICBFbGVuaSBNYXJpYSBTdGVhICA8ZXN0ZWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBGdW5jdGlvbiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyBleHBlY3RzIGEgcmVm
ZXJlbmNlLCBub3QgYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzZDJj
ZDEzNmFkNDM3NDVhYWNjMjI3NDk1ZDA1ZjdkN2EyZTNjOWRkLi44YTU1NTlhNDZjZDhkMzE1MWUx
OWMzMWVmNThmYmY0NzhhNTdiN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cApAQCAtMjUyLDM0MCArMjUyLDE2NiBAQCBTUUxpdGVJREJCYWNraW5nU3RvcmU6On5TUUxpdGVJ
REJCYWNraW5nU3RvcmUoKQogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiB9CiAKLXN0YXRpYyBi
b29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNl
JiBkYXRhYmFzZSkKK3N0YXRpYyBJREJFcnJvciBjcmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJ
Zk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiB7Ci0gICAgU3RyaW5nIGN1cnJl
bnRTY2hlbWE7Ci0gICAgewotICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlz
dGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBz
Y2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxsLCBj
cmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJ
VEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCh2M1Jl
Y29yZHNUYWJsZVNjaGVtYSgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRhdGFiYXNl
Lmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KKyAgICBTdHJpbmcgdGFibGVTdGF0ZW1lbnQgPSBkYXRhYmFzZS50YWJs
ZVNRTCgiUmVjb3JkcyJfcyk7CisgICAgaWYgKHRhYmxlU3RhdGVtZW50LmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKHYzUmVjb3Jkc1RhYmxlU2NoZW1h
KCkpKQorICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3Ry
aW5nKCJFcnJvciBjcmVhdGluZyBuZXcgUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFz
ZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKTsKKyAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgfTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgp
KTsKLQogICAgIC8vIElmIHRoZSBzY2hlbWEgaW4gdGhlIGJhY2tpbmcgc3RvcmUgaXMgdGhlIGN1
cnJlbnQgc2NoZW1hLCB3ZSdyZSBkb25lLgotICAgIGlmIChjdXJyZW50U2NoZW1hID09IHYzUmVj
b3Jkc1RhYmxlU2NoZW1hKCkgfHwgY3VycmVudFNjaGVtYSA9PSB2M1JlY29yZHNUYWJsZVNjaGVt
YUFsdGVybmF0ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFibGVTdGF0ZW1l
bnQgPT0gdjNSZWNvcmRzVGFibGVTY2hlbWEoKSB8fCB0YWJsZVN0YXRlbWVudCA9PSB2M1JlY29y
ZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9Owog
CiAgICAgLy8gSWYgdGhlIHJlY29yZCB0YWJsZSBpcyBub3QgdGhlIGN1cnJlbnQgc2NoZW1hIHRo
ZW4gaXQgbXVzdCBiZSBvbmUgb2YgdGhlIHByZXZpb3VzIHNjaGVtYXMuCiAgICAgLy8gSWYgaXQg
aXMgbm90IHRoZW4gdGhlIGRhdGFiYXNlIGlzIGluIGFuIHVucmVjb3ZlcmFibGUgc3RhdGUgYW5k
IHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBmYXRhbCBlcnJvci4KLSAgICBpZiAoY3VycmVu
dFNjaGVtYSAhPSB2MVJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gdjFS
ZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQotICAgICAgICAmJiBjdXJyZW50U2NoZW1hICE9
IHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSB2MlJlY29yZHNUYWJs
ZVNjaGVtYUFsdGVybmF0ZSgpKQorICAgIGlmICh0YWJsZVN0YXRlbWVudCAhPSB2MVJlY29yZHNU
YWJsZVNjaGVtYSgpICYmIHRhYmxlU3RhdGVtZW50ICE9IHYxUmVjb3Jkc1RhYmxlU2NoZW1hQWx0
ZXJuYXRlKCkKKyAgICAgICAgJiYgdGFibGVTdGF0ZW1lbnQgIT0gdjJSZWNvcmRzVGFibGVTY2hl
bWEoKSAmJiB0YWJsZVN0YXRlbWVudCAhPSB2MlJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgp
KQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgU1FMaXRlVHJh
bnNhY3Rpb24gdHJhbnNhY3Rpb24oZGF0YWJhc2UpOwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CiAKICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgdGFibGUgd2l0aCB0aGUgY29ycmVjdCBzY2hl
bWEgYW5kIG1pZ3JhdGUgYWxsIGV4aXN0aW5nIGNvbnRlbnQgb3Zlci4KLSAgICBpZiAoIWRhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKHYzUmVjb3Jkc1RhYmxlU2NoZW1hVGVtcCgpKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IHJlY29yZHMgdGFibGUgaW4g
ZGF0YWJhc2UgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIWRhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKHYzUmVjb3Jkc1RhYmxlU2NoZW1hVGVtcCgpKSkKKyAgICAgICAg
cmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciBjcmVhdGlu
ZyB0ZW1wb3JhcnkgUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3Io
KSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKCJJTlNFUlQgSU5UTyBfVGVtcF9SZWNvcmRzIChvYmplY3RTdG9yZUlELCBrZXks
IHZhbHVlKSBTRUxFQ1Qgb2JqZWN0U3RvcmVJRCwgQ0FTVChrZXkgQVMgVEVYVCksIHZhbHVlIEZS
T00gUmVjb3JkcyJfcykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbWlncmF0ZSBl
eGlzdGluZyBSZWNvcmRzIGNvbnRlbnQgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
KyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJJTlNFUlQgSU5UTyBfVGVtcF9SZWNv
cmRzIChvYmplY3RTdG9yZUlELCBrZXksIHZhbHVlKSBTRUxFQ1Qgb2JqZWN0U3RvcmVJRCwgQ0FT
VChrZXkgQVMgVEVYVCksIHZhbHVlIEZST00gUmVjb3JkcyJfcykpCisgICAgICAgIHJldHVybiBJ
REJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgbWlncmF0aW5nIFJlY29y
ZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RF
cnJvck1zZygpKSB9OwogCi0gICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiRFJPUCBU
QUJMRSBSZWNvcmRzIl9zKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkcm9wIGV4
aXN0aW5nIFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAg
ICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJEUk9QIFRBQkxFIFJlY29yZHMiX3MpKQor
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9y
IGRyb3BwaW5nIFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKSB9OwogCi0gICAgaWYgKCFkYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQUxURVIgVEFCTEUgX1RlbXBfUmVjb3JkcyBSRU5BTUUgVE8gUmVjb3JkcyJfcykp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBSZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFkYXRhYmFz
ZS5leGVjdXRlQ29tbWFuZCgiQUxURVIgVEFCTEUgX1RlbXBfUmVjb3JkcyBSRU5BTUUgVE8gUmVj
b3JkcyJfcykpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0
cmluZygiRXJyb3IgcmVuYW1pbmcgdGVtcG9yYXJ5IFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwg
ZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKSB9OwogCiAgICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSURC
RXJyb3IgeyB9OwogfQogCi1ib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRC
bG9iVGFibGVzKCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRC
bG9iVGFibGVzKCkKIHsKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREItPmlzT3BlbigpKTsKIAotICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwotICAgIHsKLSAg
ICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNvcmQgdGFi
bGUuCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Js
b2JSZWNvcmRzJyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
KyAgICBTdHJpbmcgcmVjb3Jkc1RhYmxlU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+dGFibGVTUUwo
IkJsb2JSZWNvcmRzIl9zKTsKKyAgICBpZiAocmVjb3Jkc1RhYmxlU3RhdGVtZW50LmlzRW1wdHko
KSkgeworICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKGJsb2JSZWNvcmRz
VGFibGVTY2hlbWEoKSkpCisgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsIG1ha2VTdHJpbmcoIkVycm9yIGNyZWF0aW5nIEJsb2JSZWNvcmRzIHRhYmxlICglaSkgLSAl
cyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkg
fTsKIAotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGws
IGNyZWF0ZSBpdC4uCi0gICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsK
LSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoYmxvYlJlY29yZHNU
YWJsZVNjaGVtYSgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNy
ZWF0ZSBCbG9iUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3VycmVudFNj
aGVtYSA9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzcWxp
dGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBl
eGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRh
YmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7Ci0gICAgfQot
Ci0gICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1
cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiSW52YWxpZCBCbG9iUmVjb3JkcyB0YWJsZSBzY2hlbWEgZm91bmQiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogICAg
IH0KIAotICAgIHsKLSAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3Rpbmcg
YmxvYiBmaWxlIHRhYmxlLgotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdCbG9iRmlsZXMnIl9zKTsKLSAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iRmlsZXMgdGFibGUgYXQg
YWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9
PSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29t
bWFuZChibG9iRmlsZXNUYWJsZVNjaGVtYSgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGNyZWF0ZSBCbG9iRmlsZXMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVz
IiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlQocmVjb3Jkc1RhYmxlU3RhdGVtZW50ID09IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEo
KSB8fCByZWNvcmRzVGFibGVTdGF0ZW1lbnQgPT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFsdGVy
bmF0ZSgpKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICBTdHJp
bmcgZmlsZXNUYWJsZVN0YXRlbWVudCA9IG1fc3FsaXRlREItPnRhYmxlU1FMKCJCbG9iRmlsZXMi
X3MpOworICAgIGlmIChmaWxlc1RhYmxlU3RhdGVtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJF
cnJvciBjcmVhdGluZyBCbG9iRmlsZXMgdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKSB9OwogCi0gICAgICAgIGlmIChz
cWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJv
ciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0
YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7CisgICAgICAgIHJldHVy
biBJREJFcnJvciB7IH07CiAgICAgfQogCi0gICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYkZp
bGVzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1h
QWx0ZXJuYXRlKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIEJsb2JGaWxlcyB0YWJs
ZSBzY2hlbWEgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVChmaWxlc1RhYmxlU3RhdGVtZW50ID09IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkg
fHwgZmlsZXNUYWJsZVN0YXRlbWVudCA9PSBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgp
KTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLWJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpCitJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKIHsK
ICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3Blbigp
KTsKIAotICAgIGlmICghY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkoKm1f
c3FsaXRlREIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSURCRXJyb3IgZXJyb3IgPSBj
cmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeSgqbV9zcWxpdGVEQik7CisgICAg
aWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGVycm9yOwogCiAgICAgLy8gV2hl
dGhlciB0aGUgdXBkYXRlZCByZWNvcmRzIHRhYmxlIGFscmVhZHkgZXhpc3RlZCBvciBpZiBpdCB3
YXMganVzdCBjcmVhdGVkIGFuZCB0aGUgZGF0YSBtaWdyYXRlZCBvdmVyLAogICAgIC8vIG1ha2Ug
c3VyZSB0aGUgdW5pcXVlbmVzcyBpbmRleCBleGlzdHMuCi0gICAgaWYgKCFtX3NxbGl0ZURCLT5l
eGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFJlY29yZHNJ
bmRleCBPTiBSZWNvcmRzIChvYmplY3RTdG9yZUlELCBrZXkpOyJfcykpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFJlY29yZHNJbmRleCBvbiBSZWNvcmRzIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYg
KCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1Qg
RVhJU1RTIFJlY29yZHNJbmRleCBPTiBSZWNvcmRzIChvYmplY3RTdG9yZUlELCBrZXkpOyJfcykp
CisgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVy
cm9yIGNyZWF0aW5nIFJlY29yZHNJbmRleCBvbiBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBlcnJvcjsKIH0KIAotYm9vbCBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKQorSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCkKIHsKICAg
ICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsK
IAotICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwotICAgIHsKLSAgICAgICAgLy8gRmV0Y2ggdGhl
IHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdJbmRleFJlY29yZHMnIl9zKTsK
LSAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jk
cyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKLQotICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRo
ZW4gYmFpbC4KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCh2M0luZGV4UmVjb3Jkc1Rh
YmxlU2NoZW1hKCkpKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIEluZGV4UmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFibGUuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBTdHJpbmcgdGFibGVTdGF0ZW1lbnQgPSBtX3Nx
bGl0ZURCLT50YWJsZVNRTCgiSW5kZXhSZWNvcmRzIl9zKTsKKyAgICBpZiAodGFibGVTdGF0ZW1l
bnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
djNJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgSW5kZXhSZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSkgfTsKIAotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5j
b2x1bW5UZXh0KDEpOworICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogICAgIH0KIAotICAg
IEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwotCiAgICAgLy8gSWYgdGhlIHNjaGVt
YSBpbiB0aGUgYmFja2luZyBzdG9yZSBpcyB0aGUgY3VycmVudCBzY2hlbWEsIHdlJ3JlIGRvbmUu
Ci0gICAgaWYgKGN1cnJlbnRTY2hlbWEgPT0gdjNJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpIHx8
IGN1cnJlbnRTY2hlbWEgPT0gdjNJbmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFibGVTdGF0ZW1lbnQgPT0gdjNJbmRleFJl
Y29yZHNUYWJsZVNjaGVtYSgpIHx8IHRhYmxlU3RhdGVtZW50ID09IHYzSW5kZXhSZWNvcmRzVGFi
bGVTY2hlbWFBbHRlcm5hdGUoKSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIAotICAg
IC8vIElmIHRoZSByZWNvcmQgdGFibGUgaXMgbm90IHRoZSBjdXJyZW50IHNjaGVtYSB0aGVuIGl0
IG11c3QgYmUgb25lIG9mIHRoZSBwcmV2aW91cyBzY2hlbWFzLgotICAgIC8vIElmIGl0IGlzIG5v
dCB0aGVuIHRoZSBkYXRhYmFzZSBpcyBpbiBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIGFuZCB0aGlz
IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgZmF0YWwgZXJyb3IuCi0gICAgaWYgKGN1cnJlbnRTY2hl
bWEgIT0gdjFJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gdjFJ
bmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpCi0gICAgICAgICYmIGN1cnJlbnRTY2hl
bWEgIT0gdjJJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gdjJJ
bmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKQotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlU3RhdGVtZW50ID09IHYx
SW5kZXhSZWNvcmRzVGFibGVTY2hlbWEoKSB8fCB0YWJsZVN0YXRlbWVudCA9PSB2MUluZGV4UmVj
b3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkgfHwgdGFibGVTdGF0ZW1lbnQgPT0gdjJJbmRleFJl
Y29yZHNUYWJsZVNjaGVtYSgpIHx8IHRhYmxlU3RhdGVtZW50ID09IHYySW5kZXhSZWNvcmRzVGFi
bGVTY2hlbWFBbHRlcm5hdGUoKSk7CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bigqbV9zcWxpdGVEQik7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAogICAgIC8vIENyZWF0
ZSBhIHRlbXBvcmFyeSB0YWJsZSB3aXRoIHRoZSBjb3JyZWN0IHNjaGVtYSBhbmQgbWlncmF0ZSBh
bGwgZXhpc3RpbmcgY29udGVudCBvdmVyLgotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNv
bW1hbmQodjNJbmRleFJlY29yZHNUYWJsZVNjaGVtYVRlbXAoKSkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBpbmRleCByZWNvcmRzIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFt
X3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCh2M0luZGV4UmVjb3Jkc1RhYmxlU2NoZW1hVGVtcCgp
KSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJF
cnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIklOU0VSVCBJTlRPIF9UZW1wX0lu
ZGV4UmVjb3JkcyBTRUxFQ1QgSW5kZXhSZWNvcmRzLmluZGV4SUQsIEluZGV4UmVjb3Jkcy5vYmpl
Y3RTdG9yZUlELCBJbmRleFJlY29yZHMua2V5LCBJbmRleFJlY29yZHMudmFsdWUsIFJlY29yZHMu
cm93aWQgRlJPTSBJbmRleFJlY29yZHMgSU5ORVIgSk9JTiBSZWNvcmRzIE9OIFJlY29yZHMua2V5
ID0gSW5kZXhSZWNvcmRzLnZhbHVlIEFORCBSZWNvcmRzLm9iamVjdFN0b3JlSUQgPSBJbmRleFJl
Y29yZHMub2JqZWN0U3RvcmVJRCJfcykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
bWlncmF0ZSBleGlzdGluZyBJbmRleFJlY29yZHMgY29udGVudCAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
IklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBTRUxFQ1QgSW5kZXhSZWNvcmRzLmluZGV4
SUQsIEluZGV4UmVjb3Jkcy5vYmplY3RTdG9yZUlELCBJbmRleFJlY29yZHMua2V5LCBJbmRleFJl
Y29yZHMudmFsdWUsIFJlY29yZHMucm93aWQgRlJPTSBJbmRleFJlY29yZHMgSU5ORVIgSk9JTiBS
ZWNvcmRzIE9OIFJlY29yZHMua2V5ID0gSW5kZXhSZWNvcmRzLnZhbHVlIEFORCBSZWNvcmRzLm9i
amVjdFN0b3JlSUQgPSBJbmRleFJlY29yZHMub2JqZWN0U3RvcmVJRCJfcykpCisgICAgICAgIHJl
dHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgbWlncmF0aW5n
IEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICBpZiAoIW1fc3FsaXRlREItPmV4
ZWN1dGVDb21tYW5kKCJEUk9QIFRBQkxFIEluZGV4UmVjb3JkcyJfcykpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgZHJvcCBleGlzdGluZyBJbmRleFJlY29yZHMgdGFibGUgKCVpKSAt
ICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIW1fc3FsaXRlREItPmV4
ZWN1dGVDb21tYW5kKCJEUk9QIFRBQkxFIEluZGV4UmVjb3JkcyJfcykpCisgICAgICAgIHJldHVy
biBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgZHJvcHBpbmcgSW5k
ZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0
ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX0luZGV4UmVjb3JkcyBSRU5BTUUgVE8gSW5kZXhS
ZWNvcmRzIl9zKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZW5hbWUgdGVtcG9y
YXJ5IEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9U
ZW1wX0luZGV4UmVjb3JkcyBSRU5BTUUgVE8gSW5kZXhSZWNvcmRzIl9zKSkKKyAgICAgICAgcmV0
dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciByZW5hbWluZyB0
ZW1wb3JhcnkgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RF
cnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAogICAgIHRyYW5zYWN0aW9u
LmNvbW1pdCgpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIElEQkVycm9yIHsgfTsK
IH0KIAotYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
SW5kZXgoKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4
UmVjb3Jkc0luZGV4KCkKIHsKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1f
c3FsaXRlREItPmlzT3BlbigpKTsKIAotICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwotICAgIHsK
LSAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3Jk
IGluZGV4LgotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVj
b3Jkc0luZGV4JyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0
ZXAoKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBJbmRleFJlY29yZHNJbmRleCBpbmRl
eCBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgotICAgICAgICBpZiAoc3FsaXRlUmVz
dWx0ID09IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1
dGVDb21tYW5kKEluZGV4UmVjb3Jkc0luZGV4U2NoZW1hKSkgewotICAgICAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBJbmRleFJlY29yZHNJbmRleCBpbmRleCBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
c3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJy
b3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29y
ZHNJbmRleCBpbmRleC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7Ci0gICAg
fQotCi0gICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0
aGUgc2NoZW1hIGluIHRoZSBiYWNraW5nIHN0b3JlIGlzIHRoZSBjdXJyZW50IHNjaGVtYSwgd2Un
cmUgZG9uZS4KLSAgICBpZiAoY3VycmVudFNjaGVtYSA9PSBJbmRleFJlY29yZHNJbmRleFNjaGVt
YSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBPdGhlcndpc2UsIHVwZGF0ZSB0aGUg
c2NoZW1hLgotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX3NxbGl0ZURCKTsK
LSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotCi0gICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRl
Q29tbWFuZCgiRFJPUCBJTkRFWCBJbmRleFJlY29yZHNJbmRleCJfcykpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgZHJvcCBpbmRleCBJbmRleFJlY29yZHNJbmRleCBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX3Nx
bGl0ZURCLT5leGVjdXRlQ29tbWFuZChJbmRleFJlY29yZHNJbmRleFNjaGVtYSkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEluZGV4UmVjb3Jkc0luZGV4IGluZGV4IGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgU3Ry
aW5nIGluZGV4U3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+aW5kZXhTUUwoIkluZGV4UmVjb3Jkc0lu
ZGV4Il9zKTsKKyAgICBpZiAoaW5kZXhTdGF0ZW1lbnQgPT0gSW5kZXhSZWNvcmRzSW5kZXhTY2hl
bWEpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgCisgICAgaWYgKCFtX3NxbGl0
ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBJTkRFWCBJRiBFWElTVFMgSW5kZXhSZWNvcmRzSW5k
ZXgiX3MpKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJp
bmcoIkVycm9yIGRyb3BwaW5nIEluZGV4UmVjb3Jkc0luZGV4IGluZGV4ICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNv
bW1hbmQoSW5kZXhSZWNvcmRzSW5kZXhTY2hlbWEpKQorICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIGNyZWF0aW5nIEluZGV4UmVjb3Jkc0lu
ZGV4IGluZGV4ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJREJF
cnJvciB7IH07CiB9CiAKLWJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZElu
ZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiB7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBTdHJpbmcg
Y3VycmVudFNjaGVtYTsKLSAgICB7Ci0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVE
Qi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
bmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKLSAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4LiIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNx
bGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwotCi0gICAgICAgIGlmIChzcWxpdGVSZXN1
bHQgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0
ZUNvbW1hbmQodjFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSkpIHsKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgg
aW5kZXggaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1f
c3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0
aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXguIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5j
b2x1bW5UZXh0KDApOwotICAgIH0KLQotICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5
KCkpOworICAgIFN0cmluZyBpbmRleFN0YXRlbWVudCA9IG1fc3FsaXRlREItPmluZGV4U1FMKCJJ
bmRleFJlY29yZHNSZWNvcmRJbmRleCJfcyk7CisgICAgaWYgKGluZGV4U3RhdGVtZW50ID09IHYx
SW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7
IH07CisgICAgCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBJTkRF
WCBJRiBFWElTVFMgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgiX3MpKQorICAgICAgICByZXR1cm4g
SURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIGRyb3BwaW5nIEluZGV4
UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIGlmIChjdXJyZW50U2No
ZW1hID09IHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQodjFJbmRleFJlY29yZHNS
ZWNvcmRJbmRleFNjaGVtYSkpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgbWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5k
ZXggKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKSB9OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBJREJFcnJvciB7
IH07CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCkKQEAgLTY2NSwz
MiArNDkxLDE0IEBAIE9wdGlvbmFsPElzU2NoZW1hVXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsCiAgICAgQVNTRVJUKG1fc3FsaXRl
REIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBTdHJpbmcgY3Vy
cmVudFNjaGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIE9iamVj
dFN0b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRj
aCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwotICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElU
RV9ST1cpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
IWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKLSAgICBpZiAoY3VycmVudFNjaGVtYSA9PSB2Mk9i
amVjdFN0b3JlSW5mb1NjaGVtYSB8fCBjdXJyZW50U2NoZW1hID09IGNyZWF0ZVYyT2JqZWN0U3Rv
cmVJbmZvU2NoZW1hKG9iamVjdFN0b3JlSW5mb1RhYmxlTmFtZUFsdGVybmF0ZSkpCi0gICAgICAg
IHJldHVybiB7IElzU2NoZW1hVXBncmFkZWQ6Ok5vIH07Ci0KLSAgICBpZiAoY3VycmVudFNjaGVt
YSAhPSBjcmVhdGVWMU9iamVjdFN0b3JlSW5mb1NjaGVtYShvYmplY3RTdG9yZUluZm9UYWJsZU5h
bWUpICYmIGN1cnJlbnRTY2hlbWEgIT0gY3JlYXRlVjFPYmplY3RTdG9yZUluZm9TY2hlbWEob2Jq
ZWN0U3RvcmVJbmZvVGFibGVOYW1lQWx0ZXJuYXRlKSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihJbmRleGVkREIsICIlcCAtIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRP
YmplY3RTdG9yZUluZm9UYWJsZTogc2NoZW1hIGlzIGludmFsaWQgLSAlcyIsIHRoaXMsIGN1cnJl
bnRTY2hlbWEudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5nIHRhYmxlU3RhdGVtZW50ID0gbV9z
cWxpdGVEQi0+dGFibGVTUUwoIk9iamVjdFN0b3JlSW5mbyJfcyk7CisgICAgaWYgKHRhYmxlU3Rh
dGVtZW50LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9Cisg
ICAgCisgICAgaWYgKHRhYmxlU3RhdGVtZW50ID09IHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hIHx8
IHRhYmxlU3RhdGVtZW50ID09IGNyZWF0ZVYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKG9iamVjdFN0
b3JlSW5mb1RhYmxlTmFtZUFsdGVybmF0ZSkpCisgICAgICAgIHJldHVybiB7IElzU2NoZW1hVXBn
cmFkZWQ6Ok5vIH07CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodGFibGVTdGF0ZW1lbnQgPT0g
Y3JlYXRlVjFPYmplY3RTdG9yZUluZm9TY2hlbWEob2JqZWN0U3RvcmVJbmZvVGFibGVOYW1lKSB8
fCB0YWJsZVN0YXRlbWVudCA9PSBjcmVhdGVWMU9iamVjdFN0b3JlSW5mb1NjaGVtYShvYmplY3RT
dG9yZUluZm9UYWJsZU5hbWVBbHRlcm5hdGUpKTsKIAogICAgIC8vIERyb3AgY29sdW1uIG1heElu
ZGV4SUQgZnJvbSB0YWJsZS4KICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9z
cWxpdGVEQik7CkBAIC0xMjAzLDM0ICsxMDExLDM0IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiBpbmZv
CiAgICAgICAgIHJldHVybiBpZGJLZXlDb2xsYXRlKGFMZW5ndGgsIGEsIGJMZW5ndGgsIGIpOwog
ICAgIH0pOwogCi0gICAgaWYgKCFlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIFJlY29yZHMgdGFibGUgaW4g
ZGF0YWJhc2UiKTsKKyAgICBJREJFcnJvciBlcnJvciA9IGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxl
KCk7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7
Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNyZWF0aW5n
IG9yIG1pZ3JhdGluZyBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIl9zIH07CisgICAgICAgIHJl
dHVybiBlcnJvcjsKICAgICB9CiAKLSAgICBpZiAoIWVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFi
bGUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJ
bmRleCBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIik7CisgICAgZXJyb3IgPSBlbnN1cmVWYWxp
ZEluZGV4UmVjb3Jkc1RhYmxlKCk7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAg
ICBjbG9zZVNRTGl0ZURCKCk7Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHRhYmxlIGluIGRh
dGFiYXNlIl9zIH07CisgICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CiAKLSAgICBpZiAoIWVu
c3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9y
IGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIGluZGV4IGluIGRhdGFiYXNlIik7
CisgICAgZXJyb3IgPSBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CisgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7Ci0gICAgICAgIHJldHVy
biBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJ
bmRleCBSZWNvcmRzIGluZGV4IGluIGRhdGFiYXNlIl9zIH07CisgICAgICAgIHJldHVybiBlcnJv
cjsKICAgICB9Ci0KLSAgICBpZiAoIWVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgo
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRl
eCBSZWNvcmRzIHNlY29uZCBpbmRleCBmb3IgaW4gZGF0YWJhc2UiKTsKKyAgICAKKyAgICBlcnJv
ciA9IGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgoKTsKKyAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7CiAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKLSAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIEluZGV4
IFJlY29yZHMgc2Vjb25kIGluZGV4IGluIGRhdGFiYXNlIl9zIH07CisgICAgICAgIHJldHVybiBl
cnJvcjsKICAgICB9Ci0KLSAgICBpZiAoIWVuc3VyZVZhbGlkQmxvYlRhYmxlcygpKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMg
dGFibGVzIGluIGRhdGFiYXNlIik7CisgICAgCisgICAgZXJyb3IgPSBlbnN1cmVWYWxpZEJsb2JU
YWJsZXMoKTsKKyAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgIGNsb3NlU1FMaXRl
REIoKTsKLSAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJyb3IgY3Jl
YXRpbmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVzIGluIGRhdGFiYXNlIl9zIH07
CisgICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CiAKICAgICBhdXRvIGRhdGFiYXNlSW5mbyA9
IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9y
ZS5oCmluZGV4IDQxZGNiZjM5NTg1OWJlZjczYWUzM2EzMzNlNDZmYzhhM2NhNDI1NjUuLjBlZmM4
YzU0YTJmMmIzNTIxNTk1ZmY3OGY1MDgzMjMwYWZhNmUzMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmgKQEAgLTEwOSwxMSArMTA5LDExIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGZ1
bGxEYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5
V2l0aFVwZ3JhZGUoKTsKIAotICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKTsKLSAg
ICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKLSAgICBib29sIGVuc3VyZVZh
bGlkSW5kZXhSZWNvcmRzSW5kZXgoKTsKLSAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKTsKLSAgICBib29sIGVuc3VyZVZhbGlkQmxvYlRhYmxlcygpOworICAgIElE
QkVycm9yIGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7CisgICAgSURCRXJyb3IgZW5zdXJlVmFs
aWRJbmRleFJlY29yZHNUYWJsZSgpOworICAgIElEQkVycm9yIGVuc3VyZVZhbGlkSW5kZXhSZWNv
cmRzSW5kZXgoKTsKKyAgICBJREJFcnJvciBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZElu
ZGV4KCk7CisgICAgSURCRXJyb3IgZW5zdXJlVmFsaWRCbG9iVGFibGVzKCk7CiAgICAgT3B0aW9u
YWw8SXNTY2hlbWFVcGdyYWRlZD4gZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSgpOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IGNyZWF0ZUFuZFBvcHVsYXRlSW5p
dGlhbERhdGFiYXNlSW5mbygpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+
IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggMzRkYWY0ZWQyOWVmODMyZjNhZTA1MmNi
MmU1NDUzZTI1ZDIyOGUyOS4uNTZjMDNjMzZiMTFkMDEzNjM1M2QyOTY1MjVhODAzMDA4N2E0NmM1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3Bw
CkBAIC0zODUsMTYgKzM4NSwzMiBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFu
ZChBU0NJSUxpdGVyYWwgcXVlcnkpCiB9CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhp
c3RzKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIHJldHVybiAhdGFibGVTUUwodGFi
bGVOYW1lKS5pc0VtcHR5KCk7Cit9CisKK1N0cmluZyBTUUxpdGVEYXRhYmFzZTo6dGFibGVTUUwo
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CiAgICAgaWYgKCFpc09wZW4oKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBzdGF0ZW1lbnQg
PSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSA/OyJfcyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJs
ZU5hbWUpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBz
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9
ICd0YWJsZScgQU5EIG5hbWUgPSA/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9IFNRTElURV9PSyB8fCBzdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHN0
YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKK30KKworU3RyaW5nIFNRTGl0ZURhdGFiYXNlOjppbmRl
eFNRTChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBpZiAoIWlzT3BlbigpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyBBTkQg
bmFtZSA9ID87Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIGluZGV4TmFtZSkgIT0gU1FMSVRFX09LIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gc3RhdGVtZW50LT5jb2x1
bW5UZXh0KDApOwogfQogCiB2b2lkIFNRTGl0ZURhdGFiYXNlOjpjbGVhckFsbFRhYmxlcygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IGFiMTk0
ZGRmMmMxNTFhZGZiMjk0MWRmMzM3YjhmNThhMDQxMTkyZmEuLjFmNWNjOGY0OTY4YWExY2FlOTFj
ZmI5MjQyNThmMmUxNTkyMzE1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5oCkBAIC02NSw2ICs2NSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCk7CiAgICAgCiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCB0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgdGFibGVTUUwoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGluZGV4U1FMKGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xlYXJBbGxUYWJsZXMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcnVuVmFjdXVtQ29tbWFu
ZCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQo
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429562</attachid>
            <date>2021-05-24 14:03:47 -0700</date>
            <delta_ts>2021-05-25 14:51:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226124-20210524140346.patch</filename>
            <type>text/plain</type>
            <size>30042</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk0N2MwMTU3MDdjM2E0
MDIxNzliNGVmYmRkMDE3YjlhYTM0Y2Q0Yy4uYzFjYTRkOGYyYzQ2ZjE4NGQ1MWRjODAzNzdhM2Y4
MjE3NTQ1OTU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTA1LTI0ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgZXJyb3IgcmV0dXJu
ZWQgYnkgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyBt
b3JlIGRldGFpbGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjYxMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb252ZXJ0IHNvbWUgZXJyb3IgbG9nZ2luZ3MgdG8gZXJyb3IgaW5mbyB0byBoZWxwIGRl
YnVnIHJkYXI6Ly83NzUzMjI5MS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpjcmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
OjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRJbmRleFJlY29yZHNJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5z
dXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOiBhZGQgdHdvIGhl
bHBlciBmdW50aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1hbnkgcGxhY2VzLgorICAgICAgICAoV2Vi
Q29yZTo6U1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlOjp0YWJsZVNRTCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZTo6aW5kZXhTUUwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgor
CiAyMDIxLTA1LTI0ICBUaW0gTmd1eWVuICA8bnRpbUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2xl
YW4gdXAgaGFuZGxpbmcgb2YgYC13ZWJraXQtaW5saW5lLWZsZXhgL2Atd2Via2l0LWZsZXhgIENT
UyBkaXNwbGF5IHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAz
ZDJjZDEzNmFkNDM3NDVhYWNjMjI3NDk1ZDA1ZjdkN2EyZTNjOWRkLi41YzQ5MzU2NDExM2Y0MTg3
YjFiZGZlZGI5YTZkNjBlMjQ1Yzk0NTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmNwcApAQCAtMjUyLDM0MCArMjUyLDE2NSBAQCBTUUxpdGVJREJCYWNraW5nU3RvcmU6On5TUUxp
dGVJREJCYWNraW5nU3RvcmUoKQogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiB9CiAKLXN0YXRp
YyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNRTGl0ZURhdGFi
YXNlJiBkYXRhYmFzZSkKK3N0YXRpYyBJREJFcnJvciBjcmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFi
bGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiB7Ci0gICAgU3RyaW5nIGN1
cnJlbnRTY2hlbWE7Ci0gICAgewotICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBl
eGlzdGluZyByZWNvcmRzIHRhYmxlLgotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IGRhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdI
RVJFIHRibF9uYW1lPSdSZWNvcmRzJyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRj
aCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFibGUgYXQgYWxs
LCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBT
UUxJVEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCh2
M1JlY29yZHNUYWJsZVNjaGVtYSgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGNyZWF0ZSBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRhdGFi
YXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykg
ewotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZl
dGNoIHNjaGVtYSBmb3IgdGhlIFJlY29yZHMgdGFibGUuIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KKyAgICBTdHJpbmcgdGFibGVTdGF0ZW1lbnQgPSBkYXRhYmFzZS50
YWJsZVNRTCgiUmVjb3JkcyJfcyk7CisgICAgaWYgKHRhYmxlU3RhdGVtZW50LmlzRW1wdHkoKSkg
eworICAgICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKHYzUmVjb3Jkc1RhYmxlU2No
ZW1hKCkpKQorICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtl
U3RyaW5nKCJFcnJvciBjcmVhdGluZyBuZXcgUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRh
YmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICAgICAg
Y3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKTsKKyAgICAgICAgcmV0dXJu
IElEQkVycm9yIHsgfTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0
eSgpKTsKLQogICAgIC8vIElmIHRoZSBzY2hlbWEgaW4gdGhlIGJhY2tpbmcgc3RvcmUgaXMgdGhl
IGN1cnJlbnQgc2NoZW1hLCB3ZSdyZSBkb25lLgotICAgIGlmIChjdXJyZW50U2NoZW1hID09IHYz
UmVjb3Jkc1RhYmxlU2NoZW1hKCkgfHwgY3VycmVudFNjaGVtYSA9PSB2M1JlY29yZHNUYWJsZVNj
aGVtYUFsdGVybmF0ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFibGVTdGF0
ZW1lbnQgPT0gdjNSZWNvcmRzVGFibGVTY2hlbWEoKSB8fCB0YWJsZVN0YXRlbWVudCA9PSB2M1Jl
Y29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9
OwogCiAgICAgLy8gSWYgdGhlIHJlY29yZCB0YWJsZSBpcyBub3QgdGhlIGN1cnJlbnQgc2NoZW1h
IHRoZW4gaXQgbXVzdCBiZSBvbmUgb2YgdGhlIHByZXZpb3VzIHNjaGVtYXMuCiAgICAgLy8gSWYg
aXQgaXMgbm90IHRoZW4gdGhlIGRhdGFiYXNlIGlzIGluIGFuIHVucmVjb3ZlcmFibGUgc3RhdGUg
YW5kIHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBmYXRhbCBlcnJvci4KLSAgICBpZiAoY3Vy
cmVudFNjaGVtYSAhPSB2MVJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0g
djFSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQotICAgICAgICAmJiBjdXJyZW50U2NoZW1h
ICE9IHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSB2MlJlY29yZHNU
YWJsZVNjaGVtYUFsdGVybmF0ZSgpKQorICAgIGlmICh0YWJsZVN0YXRlbWVudCAhPSB2MVJlY29y
ZHNUYWJsZVNjaGVtYSgpICYmIHRhYmxlU3RhdGVtZW50ICE9IHYxUmVjb3Jkc1RhYmxlU2NoZW1h
QWx0ZXJuYXRlKCkKKyAgICAgICAgJiYgdGFibGVTdGF0ZW1lbnQgIT0gdjJSZWNvcmRzVGFibGVT
Y2hlbWEoKSAmJiB0YWJsZVN0YXRlbWVudCAhPSB2MlJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0
ZSgpKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgU1FMaXRl
VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oZGF0YWJhc2UpOwogICAgIHRyYW5zYWN0aW9uLmJlZ2lu
KCk7CiAKICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgdGFibGUgd2l0aCB0aGUgY29ycmVjdCBz
Y2hlbWEgYW5kIG1pZ3JhdGUgYWxsIGV4aXN0aW5nIGNvbnRlbnQgb3Zlci4KLSAgICBpZiAoIWRh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKHYzUmVjb3Jkc1RhYmxlU2NoZW1hVGVtcCgpKSkgewotICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IHJlY29yZHMgdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIWRh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKHYzUmVjb3Jkc1RhYmxlU2NoZW1hVGVtcCgpKSkKKyAgICAg
ICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciBjcmVh
dGluZyB0ZW1wb3JhcnkgUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJy
b3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICBpZiAoIWRhdGFiYXNlLmV4
ZWN1dGVDb21tYW5kKCJJTlNFUlQgSU5UTyBfVGVtcF9SZWNvcmRzIChvYmplY3RTdG9yZUlELCBr
ZXksIHZhbHVlKSBTRUxFQ1Qgb2JqZWN0U3RvcmVJRCwgQ0FTVChrZXkgQVMgVEVYVCksIHZhbHVl
IEZST00gUmVjb3JkcyJfcykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbWlncmF0
ZSBleGlzdGluZyBSZWNvcmRzIGNvbnRlbnQgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9y
KCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJJTlNFUlQgSU5UTyBfVGVtcF9S
ZWNvcmRzIChvYmplY3RTdG9yZUlELCBrZXksIHZhbHVlKSBTRUxFQ1Qgb2JqZWN0U3RvcmVJRCwg
Q0FTVChrZXkgQVMgVEVYVCksIHZhbHVlIEZST00gUmVjb3JkcyJfcykpCisgICAgICAgIHJldHVy
biBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgbWlncmF0aW5nIFJl
Y29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxh
c3RFcnJvck1zZygpKSB9OwogCi0gICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiRFJP
UCBUQUJMRSBSZWNvcmRzIl9zKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkcm9w
IGV4aXN0aW5nIFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
KyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJEUk9QIFRBQkxFIFJlY29yZHMiX3Mp
KQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVy
cm9yIGRyb3BwaW5nIFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9y
KCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKSB9OwogCi0gICAgaWYgKCFkYXRhYmFzZS5leGVj
dXRlQ29tbWFuZCgiQUxURVIgVEFCTEUgX1RlbXBfUmVjb3JkcyBSRU5BTUUgVE8gUmVjb3JkcyJf
cykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBSZWNv
cmRzIHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFkYXRh
YmFzZS5leGVjdXRlQ29tbWFuZCgiQUxURVIgVEFCTEUgX1RlbXBfUmVjb3JkcyBSRU5BTUUgVE8g
UmVjb3JkcyJfcykpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFr
ZVN0cmluZygiRXJyb3IgcmVuYW1pbmcgdGVtcG9yYXJ5IFJlY29yZHMgdGFibGUgKCVpKSAtICVz
IiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKSB9OwogCiAg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
SURCRXJyb3IgeyB9OwogfQogCi1ib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFs
aWRCbG9iVGFibGVzKCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFs
aWRCbG9iVGFibGVzKCkKIHsKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1f
c3FsaXRlREItPmlzT3BlbigpKTsKIAotICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwotICAgIHsK
LSAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNvcmQg
dGFibGUuCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRl
bWVudCgiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9
J0Jsb2JSZWNvcmRzJyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEg
Zm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAo
KTsKKyAgICBTdHJpbmcgcmVjb3Jkc1RhYmxlU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+dGFibGVT
UUwoIkJsb2JSZWNvcmRzIl9zKTsKKyAgICBpZiAocmVjb3Jkc1RhYmxlU3RhdGVtZW50LmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKGJsb2JSZWNv
cmRzVGFibGVTY2hlbWEoKSkpCisgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIGNyZWF0aW5nIEJsb2JSZWNvcmRzIHRhYmxlICglaSkg
LSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2co
KSkgfTsKIAotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBh
bGwsIGNyZWF0ZSBpdC4uCi0gICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUp
IHsKLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoYmxvYlJlY29y
ZHNUYWJsZVNjaGVtYSgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBCbG9iUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3VycmVu
dFNjaGVtYSA9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKTsKLSAgICAgICAgfSBlbHNlIGlmIChz
cWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJv
ciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRz
IHRhYmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7Ci0gICAg
fQotCi0gICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYm
IGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiSW52YWxpZCBCbG9iUmVjb3JkcyB0YWJsZSBzY2hlbWEgZm91bmQi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZWNvcmRzVGFibGVTdGF0ZW1lbnQg
PSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCk7CiAgICAgfQogCi0gICAgewotICAgICAgICAvLyBG
ZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBibG9iIGZpbGUgdGFibGUuCi0gICAgICAg
IGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHR5
cGUsIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyciX3Mp
OwotICAgICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYkZpbGVz
IHRhYmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlQocmVjb3Jkc1RhYmxlU3RhdGVtZW50ID09IGJsb2JSZWNvcmRzVGFibGVTY2hl
bWEoKSB8fCByZWNvcmRzVGFibGVTdGF0ZW1lbnQgPT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFs
dGVybmF0ZSgpKTsKIAotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5zdGVw
KCk7CisgICAgU3RyaW5nIGZpbGVzVGFibGVTdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT50YWJsZVNR
TCgiQmxvYkZpbGVzIl9zKTsKKyAgICBpZiAoZmlsZXNUYWJsZVN0YXRlbWVudC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChibG9iRmlsZXNUYWJs
ZVNjaGVtYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwg
bWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgQmxvYkZpbGVzIHRhYmxlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iRmlsZXMgdGFibGUgYXQgYWxsLCBjcmVhdGUg
aXQgYW5kIHRoZW4gYmFpbC4KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9O
RSkgewotICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChibG9iRmls
ZXNUYWJsZVNjaGVtYSgpKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBCbG9iRmlsZXMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9X
KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8g
ZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC0+Y29sdW1uVGV4dCgxKTsKKyAgICAgICAgZmlsZXNUYWJsZVN0YXRlbWVudCA9IGJsb2JGaWxl
c1RhYmxlU2NoZW1hKCk7CiAgICAgfQogCi0gICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYkZp
bGVzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1h
QWx0ZXJuYXRlKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIEJsb2JGaWxlcyB0YWJs
ZSBzY2hlbWEgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOworICAgIFJFTEVBU0VfQVNTRVJUKGZpbGVzVGFibGVTdGF0ZW1lbnQgPT0gYmxv
YkZpbGVzVGFibGVTY2hlbWEoKSB8fCBmaWxlc1RhYmxlU3RhdGVtZW50ID09IGJsb2JGaWxlc1Rh
YmxlU2NoZW1hQWx0ZXJuYXRlKCkpOworICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLWJv
b2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpCitJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKIHsK
ICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3Blbigp
KTsKIAotICAgIGlmICghY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkoKm1f
c3FsaXRlREIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSURCRXJyb3IgZXJyb3IgPSBj
cmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeSgqbV9zcWxpdGVEQik7CisgICAg
aWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGVycm9yOwogCiAgICAgLy8gV2hl
dGhlciB0aGUgdXBkYXRlZCByZWNvcmRzIHRhYmxlIGFscmVhZHkgZXhpc3RlZCBvciBpZiBpdCB3
YXMganVzdCBjcmVhdGVkIGFuZCB0aGUgZGF0YSBtaWdyYXRlZCBvdmVyLAogICAgIC8vIG1ha2Ug
c3VyZSB0aGUgdW5pcXVlbmVzcyBpbmRleCBleGlzdHMuCi0gICAgaWYgKCFtX3NxbGl0ZURCLT5l
eGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFJlY29yZHNJ
bmRleCBPTiBSZWNvcmRzIChvYmplY3RTdG9yZUlELCBrZXkpOyJfcykpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFJlY29yZHNJbmRleCBvbiBSZWNvcmRzIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYg
KCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1Qg
RVhJU1RTIFJlY29yZHNJbmRleCBPTiBSZWNvcmRzIChvYmplY3RTdG9yZUlELCBrZXkpOyJfcykp
CisgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVy
cm9yIGNyZWF0aW5nIFJlY29yZHNJbmRleCBvbiBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBlcnJvcjsKIH0KIAotYm9vbCBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKQorSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCkKIHsKICAg
ICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsK
IAotICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwotICAgIHsKLSAgICAgICAgLy8gRmV0Y2ggdGhl
IHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3JkIHRhYmxlLgotICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBz
cWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdJbmRleFJlY29yZHMnIl9zKTsK
LSAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jk
cyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKLQotICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBJbmRleFJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRo
ZW4gYmFpbC4KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCh2M0luZGV4UmVjb3Jkc1Rh
YmxlU2NoZW1hKCkpKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIEluZGV4UmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFibGUuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBTdHJpbmcgdGFibGVTdGF0ZW1lbnQgPSBtX3Nx
bGl0ZURCLT50YWJsZVNRTCgiSW5kZXhSZWNvcmRzIl9zKTsKKyAgICBpZiAodGFibGVTdGF0ZW1l
bnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
djNJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgSW5kZXhSZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSkgfTsKIAotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5j
b2x1bW5UZXh0KDEpOworICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogICAgIH0KIAotICAg
IEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOwotCiAgICAgLy8gSWYgdGhlIHNjaGVt
YSBpbiB0aGUgYmFja2luZyBzdG9yZSBpcyB0aGUgY3VycmVudCBzY2hlbWEsIHdlJ3JlIGRvbmUu
Ci0gICAgaWYgKGN1cnJlbnRTY2hlbWEgPT0gdjNJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpIHx8
IGN1cnJlbnRTY2hlbWEgPT0gdjNJbmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGFibGVTdGF0ZW1lbnQgPT0gdjNJbmRleFJl
Y29yZHNUYWJsZVNjaGVtYSgpIHx8IHRhYmxlU3RhdGVtZW50ID09IHYzSW5kZXhSZWNvcmRzVGFi
bGVTY2hlbWFBbHRlcm5hdGUoKSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIAotICAg
IC8vIElmIHRoZSByZWNvcmQgdGFibGUgaXMgbm90IHRoZSBjdXJyZW50IHNjaGVtYSB0aGVuIGl0
IG11c3QgYmUgb25lIG9mIHRoZSBwcmV2aW91cyBzY2hlbWFzLgotICAgIC8vIElmIGl0IGlzIG5v
dCB0aGVuIHRoZSBkYXRhYmFzZSBpcyBpbiBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIGFuZCB0aGlz
IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgZmF0YWwgZXJyb3IuCi0gICAgaWYgKGN1cnJlbnRTY2hl
bWEgIT0gdjFJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gdjFJ
bmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpCi0gICAgICAgICYmIGN1cnJlbnRTY2hl
bWEgIT0gdjJJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gdjJJ
bmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKQotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlU3RhdGVtZW50ID09IHYx
SW5kZXhSZWNvcmRzVGFibGVTY2hlbWEoKSB8fCB0YWJsZVN0YXRlbWVudCA9PSB2MUluZGV4UmVj
b3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkgfHwgdGFibGVTdGF0ZW1lbnQgPT0gdjJJbmRleFJl
Y29yZHNUYWJsZVNjaGVtYSgpIHx8IHRhYmxlU3RhdGVtZW50ID09IHYySW5kZXhSZWNvcmRzVGFi
bGVTY2hlbWFBbHRlcm5hdGUoKSk7CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bigqbV9zcWxpdGVEQik7CiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAogICAgIC8vIENyZWF0
ZSBhIHRlbXBvcmFyeSB0YWJsZSB3aXRoIHRoZSBjb3JyZWN0IHNjaGVtYSBhbmQgbWlncmF0ZSBh
bGwgZXhpc3RpbmcgY29udGVudCBvdmVyLgotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNv
bW1hbmQodjNJbmRleFJlY29yZHNUYWJsZVNjaGVtYVRlbXAoKSkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBpbmRleCByZWNvcmRzIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFt
X3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCh2M0luZGV4UmVjb3Jkc1RhYmxlU2NoZW1hVGVtcCgp
KSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJF
cnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIklOU0VSVCBJTlRPIF9UZW1wX0lu
ZGV4UmVjb3JkcyBTRUxFQ1QgSW5kZXhSZWNvcmRzLmluZGV4SUQsIEluZGV4UmVjb3Jkcy5vYmpl
Y3RTdG9yZUlELCBJbmRleFJlY29yZHMua2V5LCBJbmRleFJlY29yZHMudmFsdWUsIFJlY29yZHMu
cm93aWQgRlJPTSBJbmRleFJlY29yZHMgSU5ORVIgSk9JTiBSZWNvcmRzIE9OIFJlY29yZHMua2V5
ID0gSW5kZXhSZWNvcmRzLnZhbHVlIEFORCBSZWNvcmRzLm9iamVjdFN0b3JlSUQgPSBJbmRleFJl
Y29yZHMub2JqZWN0U3RvcmVJRCJfcykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
bWlncmF0ZSBleGlzdGluZyBJbmRleFJlY29yZHMgY29udGVudCAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
IklOU0VSVCBJTlRPIF9UZW1wX0luZGV4UmVjb3JkcyBTRUxFQ1QgSW5kZXhSZWNvcmRzLmluZGV4
SUQsIEluZGV4UmVjb3Jkcy5vYmplY3RTdG9yZUlELCBJbmRleFJlY29yZHMua2V5LCBJbmRleFJl
Y29yZHMudmFsdWUsIFJlY29yZHMucm93aWQgRlJPTSBJbmRleFJlY29yZHMgSU5ORVIgSk9JTiBS
ZWNvcmRzIE9OIFJlY29yZHMua2V5ID0gSW5kZXhSZWNvcmRzLnZhbHVlIEFORCBSZWNvcmRzLm9i
amVjdFN0b3JlSUQgPSBJbmRleFJlY29yZHMub2JqZWN0U3RvcmVJRCJfcykpCisgICAgICAgIHJl
dHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgbWlncmF0aW5n
IEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICBpZiAoIW1fc3FsaXRlREItPmV4
ZWN1dGVDb21tYW5kKCJEUk9QIFRBQkxFIEluZGV4UmVjb3JkcyJfcykpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgZHJvcCBleGlzdGluZyBJbmRleFJlY29yZHMgdGFibGUgKCVpKSAt
ICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIW1fc3FsaXRlREItPmV4
ZWN1dGVDb21tYW5kKCJEUk9QIFRBQkxFIEluZGV4UmVjb3JkcyJfcykpCisgICAgICAgIHJldHVy
biBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgZHJvcHBpbmcgSW5k
ZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0
ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX0luZGV4UmVjb3JkcyBSRU5BTUUgVE8gSW5kZXhS
ZWNvcmRzIl9zKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZW5hbWUgdGVtcG9y
YXJ5IEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9U
ZW1wX0luZGV4UmVjb3JkcyBSRU5BTUUgVE8gSW5kZXhSZWNvcmRzIl9zKSkKKyAgICAgICAgcmV0
dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciByZW5hbWluZyB0
ZW1wb3JhcnkgSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RF
cnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAogICAgIHRyYW5zYWN0aW9u
LmNvbW1pdCgpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIElEQkVycm9yIHsgfTsK
IH0KIAotYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
SW5kZXgoKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4
UmVjb3Jkc0luZGV4KCkKIHsKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1f
c3FsaXRlREItPmlzT3BlbigpKTsKIAotICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwotICAgIHsK
LSAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgaW5kZXggcmVjb3Jk
IGluZGV4LgotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVj
b3Jkc0luZGV4JyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBJbmRleFJlY29yZHNJbmRleCBpbmRleC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0
ZXAoKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBJbmRleFJlY29yZHNJbmRleCBpbmRl
eCBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgotICAgICAgICBpZiAoc3FsaXRlUmVz
dWx0ID09IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1
dGVDb21tYW5kKEluZGV4UmVjb3Jkc0luZGV4U2NoZW1hKSkgewotICAgICAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBJbmRleFJlY29yZHNJbmRleCBpbmRleCBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
c3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJy
b3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29y
ZHNJbmRleCBpbmRleC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7Ci0gICAg
fQotCi0gICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0
aGUgc2NoZW1hIGluIHRoZSBiYWNraW5nIHN0b3JlIGlzIHRoZSBjdXJyZW50IHNjaGVtYSwgd2Un
cmUgZG9uZS4KLSAgICBpZiAoY3VycmVudFNjaGVtYSA9PSBJbmRleFJlY29yZHNJbmRleFNjaGVt
YSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBPdGhlcndpc2UsIHVwZGF0ZSB0aGUg
c2NoZW1hLgotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX3NxbGl0ZURCKTsK
LSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotCi0gICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRl
Q29tbWFuZCgiRFJPUCBJTkRFWCBJbmRleFJlY29yZHNJbmRleCJfcykpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgZHJvcCBpbmRleCBJbmRleFJlY29yZHNJbmRleCBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX3Nx
bGl0ZURCLT5leGVjdXRlQ29tbWFuZChJbmRleFJlY29yZHNJbmRleFNjaGVtYSkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEluZGV4UmVjb3Jkc0luZGV4IGluZGV4IGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgU3Ry
aW5nIGluZGV4U3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+aW5kZXhTUUwoIkluZGV4UmVjb3Jkc0lu
ZGV4Il9zKTsKKyAgICBpZiAoaW5kZXhTdGF0ZW1lbnQgPT0gSW5kZXhSZWNvcmRzSW5kZXhTY2hl
bWEpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgCisgICAgaWYgKCFtX3NxbGl0
ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBJTkRFWCBJRiBFWElTVFMgSW5kZXhSZWNvcmRzSW5k
ZXgiX3MpKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJp
bmcoIkVycm9yIGRyb3BwaW5nIEluZGV4UmVjb3Jkc0luZGV4IGluZGV4ICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNv
bW1hbmQoSW5kZXhSZWNvcmRzSW5kZXhTY2hlbWEpKQorICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIGNyZWF0aW5nIEluZGV4UmVjb3Jkc0lu
ZGV4IGluZGV4ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJREJF
cnJvciB7IH07CiB9CiAKLWJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZElu
ZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCiB7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBTdHJpbmcg
Y3VycmVudFNjaGVtYTsKLSAgICB7Ci0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9zcWxpdGVE
Qi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
bmFtZT0nSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgnIl9zKTsKLSAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4LiIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNx
bGl0ZVJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOwotCi0gICAgICAgIGlmIChzcWxpdGVSZXN1
bHQgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0
ZUNvbW1hbmQodjFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSkpIHsKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgg
aW5kZXggaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1f
c3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0
aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXguIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5j
b2x1bW5UZXh0KDApOwotICAgIH0KLQotICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5
KCkpOworICAgIFN0cmluZyBpbmRleFN0YXRlbWVudCA9IG1fc3FsaXRlREItPmluZGV4U1FMKCJJ
bmRleFJlY29yZHNSZWNvcmRJbmRleCJfcyk7CisgICAgaWYgKGluZGV4U3RhdGVtZW50ID09IHYx
SW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7
IH07CisgICAgCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBJTkRF
WCBJRiBFWElTVFMgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgiX3MpKQorICAgICAgICByZXR1cm4g
SURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIGRyb3BwaW5nIEluZGV4
UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIGlmIChjdXJyZW50U2No
ZW1hID09IHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQodjFJbmRleFJlY29yZHNS
ZWNvcmRJbmRleFNjaGVtYSkpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgbWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5k
ZXggKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKSB9OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBJREJFcnJvciB7
IH07CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCkKQEAgLTY2NSwz
MiArNDkwLDE0IEBAIE9wdGlvbmFsPElzU2NoZW1hVXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsCiAgICAgQVNTRVJUKG1fc3FsaXRl
REIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBTdHJpbmcgY3Vy
cmVudFNjaGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIE9iamVj
dFN0b3JlSW5mbyB0YWJsZS4KLSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5w
cmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0Ymxf
bmFtZT0nT2JqZWN0U3RvcmVJbmZvJyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRj
aCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC0+c3RlcCgpOwotICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElU
RV9ST1cpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVu
dCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
IWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKLSAgICBpZiAoY3VycmVudFNjaGVtYSA9PSB2Mk9i
amVjdFN0b3JlSW5mb1NjaGVtYSB8fCBjdXJyZW50U2NoZW1hID09IGNyZWF0ZVYyT2JqZWN0U3Rv
cmVJbmZvU2NoZW1hKG9iamVjdFN0b3JlSW5mb1RhYmxlTmFtZUFsdGVybmF0ZSkpCi0gICAgICAg
IHJldHVybiB7IElzU2NoZW1hVXBncmFkZWQ6Ok5vIH07Ci0KLSAgICBpZiAoY3VycmVudFNjaGVt
YSAhPSBjcmVhdGVWMU9iamVjdFN0b3JlSW5mb1NjaGVtYShvYmplY3RTdG9yZUluZm9UYWJsZU5h
bWUpICYmIGN1cnJlbnRTY2hlbWEgIT0gY3JlYXRlVjFPYmplY3RTdG9yZUluZm9TY2hlbWEob2Jq
ZWN0U3RvcmVJbmZvVGFibGVOYW1lQWx0ZXJuYXRlKSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihJbmRleGVkREIsICIlcCAtIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRP
YmplY3RTdG9yZUluZm9UYWJsZTogc2NoZW1hIGlzIGludmFsaWQgLSAlcyIsIHRoaXMsIGN1cnJl
bnRTY2hlbWEudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5nIHRhYmxlU3RhdGVtZW50ID0gbV9z
cWxpdGVEQi0+dGFibGVTUUwoIk9iamVjdFN0b3JlSW5mbyJfcyk7CisgICAgaWYgKHRhYmxlU3Rh
dGVtZW50LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9Cisg
ICAgCisgICAgaWYgKHRhYmxlU3RhdGVtZW50ID09IHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hIHx8
IHRhYmxlU3RhdGVtZW50ID09IGNyZWF0ZVYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKG9iamVjdFN0
b3JlSW5mb1RhYmxlTmFtZUFsdGVybmF0ZSkpCisgICAgICAgIHJldHVybiB7IElzU2NoZW1hVXBn
cmFkZWQ6Ok5vIH07CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodGFibGVTdGF0ZW1lbnQgPT0g
Y3JlYXRlVjFPYmplY3RTdG9yZUluZm9TY2hlbWEob2JqZWN0U3RvcmVJbmZvVGFibGVOYW1lKSB8
fCB0YWJsZVN0YXRlbWVudCA9PSBjcmVhdGVWMU9iamVjdFN0b3JlSW5mb1NjaGVtYShvYmplY3RT
dG9yZUluZm9UYWJsZU5hbWVBbHRlcm5hdGUpKTsKIAogICAgIC8vIERyb3AgY29sdW1uIG1heElu
ZGV4SUQgZnJvbSB0YWJsZS4KICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9z
cWxpdGVEQik7CkBAIC0xMjAzLDM0ICsxMDEwLDM0IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiBpbmZv
CiAgICAgICAgIHJldHVybiBpZGJLZXlDb2xsYXRlKGFMZW5ndGgsIGEsIGJMZW5ndGgsIGIpOwog
ICAgIH0pOwogCi0gICAgaWYgKCFlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIFJlY29yZHMgdGFibGUgaW4g
ZGF0YWJhc2UiKTsKKyAgICBJREJFcnJvciBlcnJvciA9IGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxl
KCk7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7
Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNyZWF0aW5n
IG9yIG1pZ3JhdGluZyBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIl9zIH07CisgICAgICAgIHJl
dHVybiBlcnJvcjsKICAgICB9CiAKLSAgICBpZiAoIWVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFi
bGUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJ
bmRleCBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIik7CisgICAgZXJyb3IgPSBlbnN1cmVWYWxp
ZEluZGV4UmVjb3Jkc1RhYmxlKCk7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAg
ICBjbG9zZVNRTGl0ZURCKCk7Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHRhYmxlIGluIGRh
dGFiYXNlIl9zIH07CisgICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CiAKLSAgICBpZiAoIWVu
c3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9y
IGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIGluZGV4IGluIGRhdGFiYXNlIik7
CisgICAgZXJyb3IgPSBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CisgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7Ci0gICAgICAgIHJldHVy
biBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJ
bmRleCBSZWNvcmRzIGluZGV4IGluIGRhdGFiYXNlIl9zIH07CisgICAgICAgIHJldHVybiBlcnJv
cjsKICAgICB9Ci0KLSAgICBpZiAoIWVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgo
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRl
eCBSZWNvcmRzIHNlY29uZCBpbmRleCBmb3IgaW4gZGF0YWJhc2UiKTsKKyAgICAKKyAgICBlcnJv
ciA9IGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgoKTsKKyAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7CiAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKLSAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIEluZGV4
IFJlY29yZHMgc2Vjb25kIGluZGV4IGluIGRhdGFiYXNlIl9zIH07CisgICAgICAgIHJldHVybiBl
cnJvcjsKICAgICB9Ci0KLSAgICBpZiAoIWVuc3VyZVZhbGlkQmxvYlRhYmxlcygpKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMg
dGFibGVzIGluIGRhdGFiYXNlIik7CisgICAgCisgICAgZXJyb3IgPSBlbnN1cmVWYWxpZEJsb2JU
YWJsZXMoKTsKKyAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgIGNsb3NlU1FMaXRl
REIoKTsKLSAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJyb3IgY3Jl
YXRpbmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVzIGluIGRhdGFiYXNlIl9zIH07
CisgICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CiAKICAgICBhdXRvIGRhdGFiYXNlSW5mbyA9
IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9y
ZS5oCmluZGV4IDQxZGNiZjM5NTg1OWJlZjczYWUzM2EzMzNlNDZmYzhhM2NhNDI1NjUuLjBlZmM4
YzU0YTJmMmIzNTIxNTk1ZmY3OGY1MDgzMjMwYWZhNmUzMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmgKQEAgLTEwOSwxMSArMTA5LDExIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGZ1
bGxEYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5
V2l0aFVwZ3JhZGUoKTsKIAotICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKTsKLSAg
ICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKLSAgICBib29sIGVuc3VyZVZh
bGlkSW5kZXhSZWNvcmRzSW5kZXgoKTsKLSAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKTsKLSAgICBib29sIGVuc3VyZVZhbGlkQmxvYlRhYmxlcygpOworICAgIElE
QkVycm9yIGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7CisgICAgSURCRXJyb3IgZW5zdXJlVmFs
aWRJbmRleFJlY29yZHNUYWJsZSgpOworICAgIElEQkVycm9yIGVuc3VyZVZhbGlkSW5kZXhSZWNv
cmRzSW5kZXgoKTsKKyAgICBJREJFcnJvciBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZElu
ZGV4KCk7CisgICAgSURCRXJyb3IgZW5zdXJlVmFsaWRCbG9iVGFibGVzKCk7CiAgICAgT3B0aW9u
YWw8SXNTY2hlbWFVcGdyYWRlZD4gZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSgpOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IGNyZWF0ZUFuZFBvcHVsYXRlSW5p
dGlhbERhdGFiYXNlSW5mbygpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+
IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggMTU3N2FhNjFiMmY1NjliMmQxNjcyY2Iy
NzE3M2MyYTg2ZGU0ZTAxYS4uOGNhM2Y1NDVmNmEwOGEyNGY0M2U2ZDA0MDY1YzM4YjU0NWJlNTdm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3Bw
CkBAIC0zODYsMTYgKzM4NiwzMiBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpleGVjdXRlQ29tbWFu
ZChBU0NJSUxpdGVyYWwgcXVlcnkpCiB9CiAKIGJvb2wgU1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhp
c3RzKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIHJldHVybiAhdGFibGVTUUwodGFi
bGVOYW1lKS5pc0VtcHR5KCk7Cit9CisKK1N0cmluZyBTUUxpdGVEYXRhYmFzZTo6dGFibGVTUUwo
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CiAgICAgaWYgKCFpc09wZW4oKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBzdGF0ZW1lbnQg
PSBwcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSA/OyJfcyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJs
ZU5hbWUpICE9IFNRTElURV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBz
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJl
cGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9
ICd0YWJsZScgQU5EIG5hbWUgPSA/OyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9IFNRTElURV9PSyB8fCBzdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHN0
YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKK30KKworU3RyaW5nIFNRTGl0ZURhdGFiYXNlOjppbmRl
eFNRTChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBpZiAoIWlzT3BlbigpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBwcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyBBTkQg
bmFtZSA9ID87Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEsIGluZGV4TmFtZSkgIT0gU1FMSVRFX09LIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gc3RhdGVtZW50LT5jb2x1
bW5UZXh0KDApOwogfQogCiB2b2lkIFNRTGl0ZURhdGFiYXNlOjpjbGVhckFsbFRhYmxlcygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IDRhMjQ0
YzY1ZmE4N2YxYzNiYTk1OGEyYzAyMGQzNDU2OTQ1MmI2ODQuLmM5MjlmMGE0ZjJkNmNiNTFmNDdi
NTNkMmJiMzA5ZWM0NGVmZmY4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5oCkBAIC02NSw2ICs2NSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGV4ZWN1dGVDb21tYW5kKEFTQ0lJTGl0ZXJhbCk7CiAgICAgCiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCB0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgdGFibGVTUUwoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGluZGV4U1FMKGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xlYXJBbGxUYWJsZXMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcnVuVmFjdXVtQ29tbWFu
ZCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQo
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429695</attachid>
            <date>2021-05-25 14:51:34 -0700</date>
            <delta_ts>2021-05-25 15:35:05 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-226124-20210525145133.patch</filename>
            <type>text/plain</type>
            <size>31051</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmNDJkMWM1OWUwNWM4
MmEzYWIxNGZkZDBlOGQ3M2Y0OWFhMzVkNS4uOTIxMzRlYTNkNmVlMDQyYjZhNmViNDEzNzFkMTg2
OGI1NDgzZDgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTA1LTI1ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgZXJyb3IgcmV0dXJu
ZWQgYnkgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyBt
b3JlIGRldGFpbGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjYxMjQKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAg
ICBDb252ZXJ0IHNvbWUgZXJyb3IgbG9nZ2luZ3MgdG8gZXJyb3IgaW5mbyB0byBoZWxwIGRlYnVn
IHJkYXI6Ly83NzUzMjI5MS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpj
cmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
bnN1cmVWYWxpZFJlY29yZHNUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFs
aWRJbmRleFJlY29yZHNJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOiBhZGQgdHdvIGhlbHBl
ciBmdW50aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1hbnkgcGxhY2VzLgorICAgICAgICAoV2ViQ29y
ZTo6U1FMaXRlRGF0YWJhc2U6OnRhYmxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlOjp0YWJsZVNRTCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6
aW5kZXhTUUwpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorCiAy
MDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2l0
Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJh
Y2tpbmdTdG9yZS5jcHAKaW5kZXggZDdmYTNiYzJlZTFjNjg3Y2U3ZTRhMWJiZDdhNGIwYWM2MDYz
NDgwNy4uNDY1MWRhNzEyYTYyNDMwNTI1N2VlYWQ5NWI0ZDAyZjJhN2U3OTNmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTI1MiwzNDAgKzI1MiwxNjUgQEAgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjp+U1FMaXRlSURCQmFja2luZ1N0b3JlKCkKICAgICAgICAgY2xvc2VT
UUxpdGVEQigpOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJ
Zk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCitzdGF0aWMgSURCRXJyb3IgY3Jl
YXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkoU1FMaXRlRGF0YWJhc2UmIGRhdGFi
YXNlKQogewotICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOwotICAgIHsKLSAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgcmVjb3JkcyB0YWJsZS4KLSAgICAgICAgYXV0
byBzdGF0ZW1lbnQgPSBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3Fs
IEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUmVjb3JkcyciX3MpOwotICAgICAg
ICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJl
cGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzcWxp
dGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
byBSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCi0gICAgICAg
IGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIGlmICghZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQodjNSZWNvcmRzVGFibGVTY2hlbWEoKSkpIHsKLSAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgUmVjb3JkcyB0YWJsZSBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3FsaXRl
UmVzdWx0ICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhl
Y3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgU3RyaW5nIHRhYmxl
U3RhdGVtZW50ID0gZGF0YWJhc2UudGFibGVTUUwoIlJlY29yZHMiX3MpOworICAgIGlmICh0YWJs
ZVN0YXRlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29t
bWFuZCh2M1JlY29yZHNUYWJsZVNjaGVtYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgbmV3IFJlY29yZHMg
dGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKSB9OwogCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRl
eHQoMSk7CisgICAgICAgIHJldHVybiBJREJFcnJvciB7IH07CiAgICAgfQogCi0gICAgQVNTRVJU
KCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7Ci0KICAgICAvLyBJZiB0aGUgc2NoZW1hIGluIHRo
ZSBiYWNraW5nIHN0b3JlIGlzIHRoZSBjdXJyZW50IHNjaGVtYSwgd2UncmUgZG9uZS4KLSAgICBp
ZiAoY3VycmVudFNjaGVtYSA9PSB2M1JlY29yZHNUYWJsZVNjaGVtYSgpIHx8IGN1cnJlbnRTY2hl
bWEgPT0gdjNSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKHRhYmxlU3RhdGVtZW50ID09IHYzUmVjb3Jkc1RhYmxlU2NoZW1hKCkgfHwg
dGFibGVTdGF0ZW1lbnQgPT0gdjNSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkKKyAgICAg
ICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIAogICAgIC8vIElmIHRoZSByZWNvcmQgdGFibGUgaXMg
bm90IHRoZSBjdXJyZW50IHNjaGVtYSB0aGVuIGl0IG11c3QgYmUgb25lIG9mIHRoZSBwcmV2aW91
cyBzY2hlbWFzLgogICAgIC8vIElmIGl0IGlzIG5vdCB0aGVuIHRoZSBkYXRhYmFzZSBpcyBpbiBh
biB1bnJlY292ZXJhYmxlIHN0YXRlIGFuZCB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgZmF0
YWwgZXJyb3IuCi0gICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gdjFSZWNvcmRzVGFibGVTY2hlbWEo
KSAmJiBjdXJyZW50U2NoZW1hICE9IHYxUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKLSAg
ICAgICAgJiYgY3VycmVudFNjaGVtYSAhPSB2MlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJl
bnRTY2hlbWEgIT0gdjJSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkKKyAgICBpZiAodGFi
bGVTdGF0ZW1lbnQgIT0gdjFSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiB0YWJsZVN0YXRlbWVudCAh
PSB2MVJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpCisgICAgICAgICYmIHRhYmxlU3RhdGVt
ZW50ICE9IHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCkgJiYgdGFibGVTdGF0ZW1lbnQgIT0gdjJSZWNv
cmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsK
ICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogCiAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IHRh
YmxlIHdpdGggdGhlIGNvcnJlY3Qgc2NoZW1hIGFuZCBtaWdyYXRlIGFsbCBleGlzdGluZyBjb250
ZW50IG92ZXIuCi0gICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCh2M1JlY29yZHNUYWJs
ZVNjaGVtYVRlbXAoKSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIHRl
bXBvcmFyeSByZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxh
c3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCh2M1JlY29yZHNUYWJs
ZVNjaGVtYVRlbXAoKSkpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwg
bWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IFJlY29yZHMgdGFibGUgKCVpKSAt
ICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKSB9Owog
Ci0gICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiSU5TRVJUIElOVE8gX1RlbXBfUmVj
b3JkcyAob2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSkgU0VMRUNUIG9iamVjdFN0b3JlSUQsIENB
U1Qoa2V5IEFTIFRFWFQpLCB2YWx1ZSBGUk9NIFJlY29yZHMiX3MpKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IG1pZ3JhdGUgZXhpc3RpbmcgUmVjb3JkcyBjb250ZW50ICglaSkgLSAl
cyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZCgiSU5TRVJUIElOVE8gX1RlbXBfUmVjb3JkcyAob2JqZWN0U3RvcmVJRCwga2V5LCB2YWx1ZSkg
U0VMRUNUIG9iamVjdFN0b3JlSUQsIENBU1Qoa2V5IEFTIFRFWFQpLCB2YWx1ZSBGUk9NIFJlY29y
ZHMiX3MpKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJp
bmcoIkVycm9yIG1pZ3JhdGluZyBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxh
c3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIGlmICghZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUgUmVjb3JkcyJfcykpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgZHJvcCBleGlzdGluZyBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIs
IGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgi
RFJPUCBUQUJMRSBSZWNvcmRzIl9zKSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93
bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciBkcm9wcGluZyBSZWNvcmRzIHRhYmxlICglaSkgLSAl
cyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSkgfTsKIAot
ICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX1JlY29y
ZHMgUkVOQU1FIFRPIFJlY29yZHMiX3MpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IHJlbmFtZSB0ZW1wb3JhcnkgUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0
RXJyb3IoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQorICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9U
ZW1wX1JlY29yZHMgUkVOQU1FIFRPIFJlY29yZHMiX3MpKQorICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIHJlbmFtaW5nIHRlbXBvcmFyeSBS
ZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSkgfTsKIAogICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotYm9vbCBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCitJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCiB7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBTdHJpbmcg
Y3VycmVudFNjaGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFu
IGV4aXN0aW5nIGJsb2IgcmVjb3JkIHRhYmxlLgotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1f
c3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iUmVjb3JkcyciX3MpOwotICAgICAgICBpZiAoIXN0
YXRlbWVudCkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYlJlY29yZHMgdGFibGUuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgc3FsaXRlUmVz
dWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgU3RyaW5nIHJlY29yZHNUYWJsZVN0YXRlbWVu
dCA9IG1fc3FsaXRlREItPnRhYmxlU1FMKCJCbG9iUmVjb3JkcyJfcyk7CisgICAgaWYgKHJlY29y
ZHNUYWJsZVN0YXRlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5l
eGVjdXRlQ29tbWFuZChibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCkpKQorICAgICAgICAgICAgcmV0
dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciBjcmVhdGluZyBC
bG9iUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g
QmxvYlJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQuLgotICAgICAgICBpZiAoc3FsaXRl
UmVzdWx0ID09IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4
ZWN1dGVDb21tYW5kKGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSkpIHsKLSAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgQmxvYlJlY29yZHMgdGFibGUgaW4gZGF0YWJh
c2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hl
bWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50
LT5jb2x1bW5UZXh0KDEpOwotICAgIH0KLQotICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JS
ZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVT
Y2hlbWFBbHRlcm5hdGUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxvYlJlY29y
ZHMgdGFibGUgc2NoZW1hIGZvdW5kIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmVjb3Jkc1RhYmxlU3RhdGVtZW50ID0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpOwogICAgIH0K
IAotICAgIHsKLSAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxv
YiBmaWxlIHRhYmxlLgotICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRi
bF9uYW1lPSdCbG9iRmlsZXMnIl9zKTsKLSAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNj
aGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKHJlY29yZHNUYWJsZVN0YXRlbWVudCA9
PSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCkgfHwgcmVjb3Jkc1RhYmxlU3RhdGVtZW50ID09IGJs
b2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSk7CiAKLSAgICAgICAgaW50IHNxbGl0ZVJl
c3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgIFN0cmluZyBmaWxlc1RhYmxlU3RhdGVtZW50
ID0gbV9zcWxpdGVEQi0+dGFibGVTUUwoIkJsb2JGaWxlcyJfcyk7CisgICAgaWYgKGZpbGVzVGFi
bGVTdGF0ZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0
ZUNvbW1hbmQoYmxvYkZpbGVzVGFibGVTY2hlbWEoKSkpCisgICAgICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIGNyZWF0aW5nIEJsb2JGaWxl
cyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVz
IHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCi0gICAgICAgIGlmIChzcWxp
dGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+
ZXhlY3V0ZUNvbW1hbmQoYmxvYkZpbGVzVGFibGVTY2hlbWEoKSkpIHsKLSAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgQmxvYkZpbGVzIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzcWxp
dGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBl
eGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0YWJs
ZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGN1
cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7CisgICAgICAgIGZpbGVzVGFi
bGVTdGF0ZW1lbnQgPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpOwogICAgIH0KIAotICAgIGlmIChj
dXJyZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAh
PSBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
SW52YWxpZCBCbG9iRmlsZXMgdGFibGUgc2NoZW1hIGZvdW5kIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChmaWxl
c1RhYmxlU3RhdGVtZW50ID09IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkgfHwgZmlsZXNUYWJsZVN0
YXRlbWVudCA9PSBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKTsKKyAgICByZXR1cm4g
SURCRXJyb3IgeyB9OwogfQogCi1ib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFs
aWRSZWNvcmRzVGFibGUoKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVW
YWxpZFJlY29yZHNUYWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VS
VChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBpZiAoIWNyZWF0ZU9yTWlncmF0ZVJlY29y
ZHNUYWJsZUlmTmVjZXNzYXJ5KCptX3NxbGl0ZURCKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIElEQkVycm9yIGVycm9yID0gY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3Nh
cnkoKm1fc3FsaXRlREIpOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBlcnJvcjsKIAogICAgIC8vIFdoZXRoZXIgdGhlIHVwZGF0ZWQgcmVjb3JkcyB0YWJsZSBhbHJl
YWR5IGV4aXN0ZWQgb3IgaWYgaXQgd2FzIGp1c3QgY3JlYXRlZCBhbmQgdGhlIGRhdGEgbWlncmF0
ZWQgb3ZlciwKICAgICAvLyBtYWtlIHN1cmUgdGhlIHVuaXF1ZW5lc3MgaW5kZXggZXhpc3RzLgot
ICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBVTklRVUUgSU5ERVgg
SUYgTk9UIEVYSVNUUyBSZWNvcmRzSW5kZXggT04gUmVjb3JkcyAob2JqZWN0U3RvcmVJRCwga2V5
KTsiX3MpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBSZWNvcmRzSW5k
ZXggb24gUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFU
RSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBSZWNvcmRzSW5kZXggT04gUmVjb3JkcyAob2Jq
ZWN0U3RvcmVJRCwga2V5KTsiX3MpKQorICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93
bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciBjcmVhdGluZyBSZWNvcmRzSW5kZXggb24gUmVjb3Jk
cyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZXJyb3I7
CiB9CiAKLWJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1RhYmxlKCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRl
eFJlY29yZHNUYWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVCht
X3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKLSAgICB7
Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGluZGV4IHJlY29y
ZCB0YWJsZS4KLSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX3NxbGl0ZURCLT5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFt
ZT0nSW5kZXhSZWNvcmRzJyJfcyk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hl
bWEgZm9yIHRoZSBJbmRleFJlY29yZHMgdGFibGUuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LT5z
dGVwKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gSW5kZXhSZWNvcmRzIHRhYmxlIGF0
IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCi0gICAgICAgIGlmIChzcWxpdGVSZXN1bHQg
PT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNv
bW1hbmQodjNJbmRleFJlY29yZHNUYWJsZVNjaGVtYSgpKSkgewotICAgICAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBJbmRleFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNxbGl0
ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4
ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzIHRh
YmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgU3RyaW5n
IHRhYmxlU3RhdGVtZW50ID0gbV9zcWxpdGVEQi0+dGFibGVTUUwoIkluZGV4UmVjb3JkcyJfcyk7
CisgICAgaWYgKHRhYmxlU3RhdGVtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIW1fc3Fs
aXRlREItPmV4ZWN1dGVDb21tYW5kKHYzSW5kZXhSZWNvcmRzVGFibGVTY2hlbWEoKSkpCisgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9y
IGNyZWF0aW5nIEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKTsKKyAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgfTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsK
LQogICAgIC8vIElmIHRoZSBzY2hlbWEgaW4gdGhlIGJhY2tpbmcgc3RvcmUgaXMgdGhlIGN1cnJl
bnQgc2NoZW1hLCB3ZSdyZSBkb25lLgotICAgIGlmIChjdXJyZW50U2NoZW1hID09IHYzSW5kZXhS
ZWNvcmRzVGFibGVTY2hlbWEoKSB8fCBjdXJyZW50U2NoZW1hID09IHYzSW5kZXhSZWNvcmRzVGFi
bGVTY2hlbWFBbHRlcm5hdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRhYmxl
U3RhdGVtZW50ID09IHYzSW5kZXhSZWNvcmRzVGFibGVTY2hlbWEoKSB8fCB0YWJsZVN0YXRlbWVu
dCA9PSB2M0luZGV4UmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkpCisgICAgICAgIHJldHVy
biBJREJFcnJvciB7IH07CiAKLSAgICAvLyBJZiB0aGUgcmVjb3JkIHRhYmxlIGlzIG5vdCB0aGUg
Y3VycmVudCBzY2hlbWEgdGhlbiBpdCBtdXN0IGJlIG9uZSBvZiB0aGUgcHJldmlvdXMgc2NoZW1h
cy4KLSAgICAvLyBJZiBpdCBpcyBub3QgdGhlbiB0aGUgZGF0YWJhc2UgaXMgaW4gYW4gdW5yZWNv
dmVyYWJsZSBzdGF0ZSBhbmQgdGhpcyBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGZhdGFsIGVycm9y
LgotICAgIGlmIChjdXJyZW50U2NoZW1hICE9IHYxSW5kZXhSZWNvcmRzVGFibGVTY2hlbWEoKSAm
JiBjdXJyZW50U2NoZW1hICE9IHYxSW5kZXhSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQot
ICAgICAgICAmJiBjdXJyZW50U2NoZW1hICE9IHYySW5kZXhSZWNvcmRzVGFibGVTY2hlbWEoKSAm
JiBjdXJyZW50U2NoZW1hICE9IHYySW5kZXhSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh0YWJsZVN0YXRlbWVudCA9PSB2MUluZGV4UmVjb3Jkc1RhYmxlU2NoZW1hKCkgfHwgdGFibGVT
dGF0ZW1lbnQgPT0gdjFJbmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpIHx8IHRhYmxl
U3RhdGVtZW50ID09IHYySW5kZXhSZWNvcmRzVGFibGVTY2hlbWEoKSB8fCB0YWJsZVN0YXRlbWVu
dCA9PSB2MkluZGV4UmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkpOwogCiAgICAgU1FMaXRl
VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1fc3FsaXRlREIpOwogICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CiAKICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgdGFibGUgd2l0aCB0aGUgY29ycmVj
dCBzY2hlbWEgYW5kIG1pZ3JhdGUgYWxsIGV4aXN0aW5nIGNvbnRlbnQgb3Zlci4KLSAgICBpZiAo
IW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKHYzSW5kZXhSZWNvcmRzVGFibGVTY2hlbWFUZW1w
KCkpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgaW5k
ZXggcmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQodjNJbmRleFJl
Y29yZHNUYWJsZVNjaGVtYVRlbXAoKSkpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25v
d25FcnJvciwgbWFrZVN0cmluZygiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IEluZGV4UmVjb3Jk
cyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5k
KCJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJlY29yZHMgU0VMRUNUIEluZGV4UmVjb3Jkcy5pbmRl
eElELCBJbmRleFJlY29yZHMub2JqZWN0U3RvcmVJRCwgSW5kZXhSZWNvcmRzLmtleSwgSW5kZXhS
ZWNvcmRzLnZhbHVlLCBSZWNvcmRzLnJvd2lkIEZST00gSW5kZXhSZWNvcmRzIElOTkVSIEpPSU4g
UmVjb3JkcyBPTiBSZWNvcmRzLmtleSA9IEluZGV4UmVjb3Jkcy52YWx1ZSBBTkQgUmVjb3Jkcy5v
YmplY3RTdG9yZUlEID0gSW5kZXhSZWNvcmRzLm9iamVjdFN0b3JlSUQiX3MpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IG1pZ3JhdGUgZXhpc3RpbmcgSW5kZXhSZWNvcmRzIGNvbnRl
bnQgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIW1fc3Fs
aXRlREItPmV4ZWN1dGVDb21tYW5kKCJJTlNFUlQgSU5UTyBfVGVtcF9JbmRleFJlY29yZHMgU0VM
RUNUIEluZGV4UmVjb3Jkcy5pbmRleElELCBJbmRleFJlY29yZHMub2JqZWN0U3RvcmVJRCwgSW5k
ZXhSZWNvcmRzLmtleSwgSW5kZXhSZWNvcmRzLnZhbHVlLCBSZWNvcmRzLnJvd2lkIEZST00gSW5k
ZXhSZWNvcmRzIElOTkVSIEpPSU4gUmVjb3JkcyBPTiBSZWNvcmRzLmtleSA9IEluZGV4UmVjb3Jk
cy52YWx1ZSBBTkQgUmVjb3Jkcy5vYmplY3RTdG9yZUlEID0gSW5kZXhSZWNvcmRzLm9iamVjdFN0
b3JlSUQiX3MpKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VT
dHJpbmcoIkVycm9yIG1pZ3JhdGluZyBJbmRleFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKSB9OwogCi0g
ICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBJbmRleFJlY29y
ZHMiX3MpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRyb3AgZXhpc3RpbmcgSW5k
ZXhSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Cisg
ICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBJbmRleFJlY29y
ZHMiX3MpKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJp
bmcoIkVycm9yIGRyb3BwaW5nIEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICBp
ZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJBTFRFUiBUQUJMRSBfVGVtcF9JbmRleFJl
Y29yZHMgUkVOQU1FIFRPIEluZGV4UmVjb3JkcyJfcykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBJbmRleFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKCJBTFRFUiBUQUJMRSBfVGVtcF9JbmRleFJlY29yZHMgUkVOQU1FIFRPIEluZGV4UmVj
b3JkcyJfcykpCisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgbWFrZVN0
cmluZygiRXJyb3IgcmVuYW1pbmcgdGVtcG9yYXJ5IEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0g
JXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkp
IH07CiAKICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIAotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLWJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
bnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNJbmRleCgpCiB7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAKLSAgICBTdHJpbmcg
Y3VycmVudFNjaGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFu
IGV4aXN0aW5nIGluZGV4IHJlY29yZCBpbmRleC4KLSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBt
X3NxbGl0ZURCLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSBuYW1lPSdJbmRleFJlY29yZHNJbmRleCciX3MpOwotICAgICAgICBpZiAoIXN0YXRl
bWVudCkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgc3FsaXRl
UmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g
SW5kZXhSZWNvcmRzSW5kZXggaW5kZXggYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4K
LSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAg
aWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChJbmRleFJlY29yZHNJbmRleFNjaGVtYSkp
IHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSW5kZXhSZWNv
cmRzSW5kZXggaW5kZXggaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2No
ZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzSW5kZXggaW5kZXguIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50
LT5jb2x1bW5UZXh0KDApOwotICAgIH0KLQotICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0Vt
cHR5KCkpOwotCi0gICAgLy8gSWYgdGhlIHNjaGVtYSBpbiB0aGUgYmFja2luZyBzdG9yZSBpcyB0
aGUgY3VycmVudCBzY2hlbWEsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKGN1cnJlbnRTY2hlbWEgPT0g
SW5kZXhSZWNvcmRzSW5kZXhTY2hlbWEpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8g
T3RoZXJ3aXNlLCB1cGRhdGUgdGhlIHNjaGVtYS4KLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFu
c2FjdGlvbigqbV9zcWxpdGVEQik7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLQotICAgIGlm
ICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkRST1AgSU5ERVggSW5kZXhSZWNvcmRzSW5k
ZXgiX3MpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRyb3AgaW5kZXggSW5kZXhS
ZWNvcmRzSW5kZXggaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
KCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoSW5kZXhSZWNvcmRz
SW5kZXhTY2hlbWEpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBJbmRl
eFJlY29yZHNJbmRleCBpbmRleCBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIFN0cmluZyBpbmRleFN0YXRlbWVudCA9IG1fc3FsaXRlREItPmlu
ZGV4U1FMKCJJbmRleFJlY29yZHNJbmRleCJfcyk7CisgICAgaWYgKGluZGV4U3RhdGVtZW50ID09
IEluZGV4UmVjb3Jkc0luZGV4U2NoZW1hKQorICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9Owor
ICAgIAorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkRST1AgSU5ERVggSUYg
RVhJU1RTIEluZGV4UmVjb3Jkc0luZGV4Il9zKSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsg
VW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciBkcm9wcGluZyBJbmRleFJlY29yZHNJbmRl
eCBpbmRleCAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICBpZiAo
IW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKEluZGV4UmVjb3Jkc0luZGV4U2NoZW1hKSkKKyAg
ICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJFcnJvciBj
cmVhdGluZyBJbmRleFJlY29yZHNJbmRleCBpbmRleCAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpIH07CiAKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1ib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpCitJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgo
KQogewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNP
cGVuKCkpOwogCi0gICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7Ci0gICAgewotICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fc3FsaXRlREItPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJP
TSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc1JlY29yZEluZGV4JyJfcyk7
Ci0gICAgICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRleFJlY29y
ZHNSZWNvcmRJbmRleCBpbmRleC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKLQot
ICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhT
Y2hlbWEpKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIElu
ZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4IGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRF
X1JPVykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4LiIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVu
dFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
IWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKKyAgICBTdHJpbmcgaW5kZXhTdGF0ZW1lbnQgPSBt
X3NxbGl0ZURCLT5pbmRleFNRTCgiSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgiX3MpOworICAgIGlm
IChpbmRleFN0YXRlbWVudCA9PSB2MUluZGV4UmVjb3Jkc1JlY29yZEluZGV4U2NoZW1hKQorICAg
ICAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIAorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhl
Y3V0ZUNvbW1hbmQoIkRST1AgSU5ERVggSUYgRVhJU1RTIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4
Il9zKSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5n
KCJFcnJvciBkcm9wcGluZyBJbmRleFJlY29yZHNSZWNvcmRJbmRleCBpbmRleCAoJWkpIC0gJXMi
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpIH07
CiAKLSAgICBpZiAoY3VycmVudFNjaGVtYSA9PSB2MUluZGV4UmVjb3Jkc1JlY29yZEluZGV4U2No
ZW1hKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEpKQorICAgICAgICByZXR1cm4g
SURCRXJyb3IgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIkVycm9yIGNyZWF0aW5nIEluZGV4
UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSkgfTsKIAotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJh
c2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERh
dGFiYXNlSW5mbygpCkBAIC02NjUsMzIgKzQ5MCwxNCBAQCBPcHRpb25hbDxJc1NjaGVtYVVwZ3Jh
ZGVkPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFi
bAogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVu
KCkpOwogCi0gICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7Ci0gICAgewotICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUuCi0gICAgICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9zcWxpdGVEQi0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J09iamVjdFN0b3JlSW5mbyciX3MpOwotICAgICAg
ICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJl
cGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRh
YmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKLSAgICAgICAgaWYg
KHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkVy
cm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3Rv
cmVJbmZvIHRhYmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7
Ci0gICAgfQotCi0gICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7Ci0gICAgaWYg
KGN1cnJlbnRTY2hlbWEgPT0gdjJPYmplY3RTdG9yZUluZm9TY2hlbWEgfHwgY3VycmVudFNjaGVt
YSA9PSBjcmVhdGVWMk9iamVjdFN0b3JlSW5mb1NjaGVtYShvYmplY3RTdG9yZUluZm9UYWJsZU5h
bWVBbHRlcm5hdGUpKQotICAgICAgICByZXR1cm4geyBJc1NjaGVtYVVwZ3JhZGVkOjpObyB9Owot
Ci0gICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gY3JlYXRlVjFPYmplY3RTdG9yZUluZm9TY2hlbWEo
b2JqZWN0U3RvcmVJbmZvVGFibGVOYW1lKSAmJiBjdXJyZW50U2NoZW1hICE9IGNyZWF0ZVYxT2Jq
ZWN0U3RvcmVJbmZvU2NoZW1hKG9iamVjdFN0b3JlSW5mb1RhYmxlTmFtZUFsdGVybmF0ZSkpIHsK
LSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibGU6IHNjaGVtYSBpcyBpbnZh
bGlkIC0gJXMiLCB0aGlzLCBjdXJyZW50U2NoZW1hLnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmlu
ZyB0YWJsZVN0YXRlbWVudCA9IG1fc3FsaXRlREItPnRhYmxlU1FMKCJPYmplY3RTdG9yZUluZm8i
X3MpOworICAgIGlmICh0YWJsZVN0YXRlbWVudC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgfQorICAgIAorICAgIGlmICh0YWJsZVN0YXRlbWVudCA9PSB2Mk9i
amVjdFN0b3JlSW5mb1NjaGVtYSB8fCB0YWJsZVN0YXRlbWVudCA9PSBjcmVhdGVWMk9iamVjdFN0
b3JlSW5mb1NjaGVtYShvYmplY3RTdG9yZUluZm9UYWJsZU5hbWVBbHRlcm5hdGUpKQorICAgICAg
ICByZXR1cm4geyBJc1NjaGVtYVVwZ3JhZGVkOjpObyB9OworICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUKHRhYmxlU3RhdGVtZW50ID09IGNyZWF0ZVYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKG9iamVj
dFN0b3JlSW5mb1RhYmxlTmFtZSkgfHwgdGFibGVTdGF0ZW1lbnQgPT0gY3JlYXRlVjFPYmplY3RT
dG9yZUluZm9TY2hlbWEob2JqZWN0U3RvcmVJbmZvVGFibGVOYW1lQWx0ZXJuYXRlKSk7CiAKICAg
ICAvLyBEcm9wIGNvbHVtbiBtYXhJbmRleElEIGZyb20gdGFibGUuCiAgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24oKm1fc3FsaXRlREIpOwpAQCAtMTIwMywzNCArMTAxMCwzNCBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZv
KElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAgICAgICByZXR1cm4gaWRiS2V5Q29sbGF0ZShhTGVu
Z3RoLCBhLCBiTGVuZ3RoLCBiKTsKICAgICB9KTsKIAotICAgIGlmICghZW5zdXJlVmFsaWRSZWNv
cmRzVGFibGUoKSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3Jh
dGluZyBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIik7CisgICAgSURCRXJyb3IgZXJyb3IgPSBl
bnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAg
ICAgICAgY2xvc2VTUUxpdGVEQigpOwotICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgUmVjb3JkcyB0YWJsZSBpbiBkYXRh
YmFzZSJfcyB9OworICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQogCi0gICAgaWYgKCFlbnN1
cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBj
cmVhdGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSIpOwor
ICAgIGVycm9yID0gZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgpOworICAgIGlmICghZXJy
b3IuaXNOdWxsKCkpIHsKICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwotICAgICAgICByZXR1cm4g
SURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgSW5k
ZXggUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSJfcyB9OworICAgICAgICByZXR1cm4gZXJyb3I7
CiAgICAgfQogCi0gICAgaWYgKCFlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3Jk
cyBpbmRleCBpbiBkYXRhYmFzZSIpOworICAgIGVycm9yID0gZW5zdXJlVmFsaWRJbmRleFJlY29y
ZHNJbmRleCgpOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgY2xvc2VTUUxp
dGVEQigpOwotICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBj
cmVhdGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3JkcyBpbmRleCBpbiBkYXRhYmFzZSJfcyB9
OworICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQotCi0gICAgaWYgKCFlbnN1cmVWYWxpZElu
ZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVh
dGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3JkcyBzZWNvbmQgaW5kZXggZm9yIGluIGRhdGFi
YXNlIik7CisgICAgCisgICAgZXJyb3IgPSBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZElu
ZGV4KCk7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICBjbG9zZVNRTGl0ZURC
KCk7Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNyZWF0
aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHNlY29uZCBpbmRleCBpbiBkYXRhYmFzZSJf
cyB9OworICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQotCi0gICAgaWYgKCFlbnN1cmVWYWxp
ZEJsb2JUYWJsZXMoKSkgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIGNv
bmZpcm1pbmcgQmxvYiBSZWNvcmRzIHRhYmxlcyBpbiBkYXRhYmFzZSIpOworICAgIAorICAgIGVy
cm9yID0gZW5zdXJlVmFsaWRCbG9iVGFibGVzKCk7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkg
ewogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVu
a25vd25FcnJvciwgIkVycm9yIGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBSZWNvcmRzIHRh
YmxlcyBpbiBkYXRhYmFzZSJfcyB9OworICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQogCiAg
ICAgYXV0byBkYXRhYmFzZUluZm8gPSBleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCA0MWRjYmYzOTU4NTliZWY3M2FlMzNhMzMz
ZTQ2ZmM4YTNjYTQyNTY1Li4wZWZjOGM1NGEyZjJiMzUyMTU5NWZmNzhmNTA4MzIzMGFmYTZlMzE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC0xMDksMTEgKzEwOSwxMSBAQCBw
cml2YXRlOgogICAgIFN0cmluZyBmdWxsRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5n
IGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKCk7CiAKLSAgICBib29sIGVuc3VyZVZh
bGlkUmVjb3Jkc1RhYmxlKCk7Ci0gICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxl
KCk7Ci0gICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7Ci0gICAgYm9vbCBl
bnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCk7Ci0gICAgYm9vbCBlbnN1cmVWYWxp
ZEJsb2JUYWJsZXMoKTsKKyAgICBJREJFcnJvciBlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOwor
ICAgIElEQkVycm9yIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKKyAgICBJREJFcnJv
ciBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CisgICAgSURCRXJyb3IgZW5zdXJlVmFs
aWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpOworICAgIElEQkVycm9yIGVuc3VyZVZhbGlkQmxv
YlRhYmxlcygpOwogICAgIE9wdGlvbmFsPElzU2NoZW1hVXBncmFkZWQ+IGVuc3VyZVZhbGlkT2Jq
ZWN0U3RvcmVJbmZvVGFibGUoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZv
PiBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8oKTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDljNDUyZjI0NWJiNGQxOTdiOWFjNzVhYWU5NWM4
ODBjMzIwYWMxOWIuLmIzNzUyYjJkMGEwOTM3OGZmMWQ5OWJhYzkzNTAwYjQ3NTMxMGVkNDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTk1LDkgKzE5NSwxMCBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAg
bV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci5jcmVhdGVCYWNraW5nU3RvcmUobV9pZGVudGlmaWVy
KTsKICAgICAgICAgICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgICAgICAg
ICBiYWNraW5nU3RvcmVPcGVuRXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hE
YXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKLSAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVP
cGVuRXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlT3BlbkVycm9y
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGRh
dGFiYXNlIGluZm8gJyVzJyIsIGJhY2tpbmdTdG9yZU9wZW5FcnJvci5tZXNzYWdlKCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4oZGF0YWJhc2VJbmZvKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuY3BwCmluZGV4IDgzZDZkOTEzNzgwZTBkNDYxZjY4MTE0YzRhY2U3ZGI4NmJiYjQ0NzEu
LjU0NzZhMTQ4NzQ1YWYzNTE2YmNiNzU0ODVlNDZkMGYzMmEzYjk4ZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcApAQCAtMzg2LDE2ICszODYs
MzIgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6ZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRlcmFsIHF1
ZXJ5KQogfQogCiBib29sIFNRTGl0ZURhdGFiYXNlOjp0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSkKK3sKKyAgICByZXR1cm4gIXRhYmxlU1FMKHRhYmxlTmFtZSkuaXNFbXB0eSgp
OworfQorCitTdHJpbmcgU1FMaXRlRGF0YWJhc2U6OnRhYmxlU1FMKGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQogewogICAgIGlmICghaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFO
RCBuYW1lID0gPzsiX3MpOwotICAgIGlmICghc3RhdGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFibGVOYW1lKSAhPSBTUUxJVEVf
T0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVzsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1l
ID0gPzsiX3MpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwg
dGFibGVOYW1lKSAhPSBTUUxJVEVfT0sgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBzdGF0ZW1lbnQtPmNvbHVtblRl
eHQoMCk7Cit9CisKK1N0cmluZyBTUUxpdGVEYXRhYmFzZTo6aW5kZXhTUUwoY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUpCit7CisgICAgaWYgKCFpc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIGF1dG8gc3RhdGVtZW50ID0gcHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9N
IHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICdpbmRleCcgQU5EIG5hbWUgPSA/OyJfcyk7Cisg
ICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpbmRleE5hbWUpICE9
IFNRTElURV9PSyB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgcmV0dXJuIHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKIH0KIAog
dm9pZCBTUUxpdGVEYXRhYmFzZTo6Y2xlYXJBbGxUYWJsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAppbmRleCBjYTY1NWVlOTA3ZjM2NzQ4MjY5ZjRm
ZmQzNTZiNDI4NzE5MmQwZmI4Li5hYTE5Y2IxMWZmOGZkN2U5ZjhiNWQyZTEyMWE0MjY2MDA0YTRi
OGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaApA
QCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRl
Q29tbWFuZChBU0NJSUxpdGVyYWwpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFi
bGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRhYmxl
U1FMKGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBpbmRleFNRTChj
b25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyQWxsVGFibGVzKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHJ1blZhY3V1bUNvbW1hbmQoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBpbnQgcnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>