<?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>225658</bug_id>
          
          <creation_ts>2021-05-11 09:48:03 -0700</creation_ts>
          <short_desc>Use one VM per thread for IDB serialization work</short_desc>
          <delta_ts>2021-05-11 16:41:33 -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>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758929</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-11 09:48:03 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758940</commentid>
    <comment_count>1</comment_count>
      <attachid>428289</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-11 10:12:09 -0700</bug_when>
    <thetext>Created attachment 428289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758945</commentid>
    <comment_count>2</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-11 10:13:48 -0700</bug_when>
    <thetext>&lt;rdar://77722187&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758951</commentid>
    <comment_count>3</comment_count>
      <attachid>428289</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-11 10:25:38 -0700</bug_when>
    <thetext>Comment on attachment 428289
Patch

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

r=me with suggestions.

&gt; Source/WebCore/ChangeLog:11
&gt; +        does not stay around, and WebIDBServer will be destroyed after it finishes schedueld tasks on the background 

Typo: schedueld

&gt; Source/WebCore/ChangeLog:12
&gt; +        thread.Then, it&apos;s possible that while a WebIDBServer for some session is removed and finishing last tasks, 

Typo: .Then

&gt; Source/WebCore/ChangeLog:18
&gt; +        making the map in IDBSerializationContext keye by thread pointer.

Typo: keye (I guess you meant keyed?)

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerializationContext.cpp:39
&gt; +static HashMap&lt;Thread*, IDBSerializationContext*&gt;&amp; serializationContextMap()

It would look safer if this function took a Locker&lt;Lock&gt;&amp; as parameter, since the caller needs to grab the lock.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerializationContext.h:43
&gt; +    static Ref&lt;IDBSerializationContext&gt; getOrCreateIDBSerializationContext();

Maybe we could rename this to getOrCreateForCurrentThread() for clarity, given the new behavior? (note that I don&apos;t think we need to repeat &quot;IDBSerializationContext&quot; in the function name since it is already in the IDBSerializationContext class scope.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerializationContext.h:51
&gt; +    IDBSerializationContext(Thread&amp;);

explicit

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:45
&gt; +static RetainPtr&lt;WKScriptMessage&gt; lastScriptMessage;

Maybe this could be a RetainPtr&lt;NSString&gt; instead.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:76
&gt; +    lastScriptMessage = message;

Maybe we could store [message body] here. Doesn&apos;t seem we really want the whole message.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:112
&gt; +    RetainPtr&lt;DatabaseProcessKillMessageHandler&gt; handler = adoptNS([[DatabaseProcessKillMessageHandler alloc] init]);

auto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:113
&gt; +    RetainPtr&lt;WKWebViewConfiguration&gt; configuration = adoptNS([[WKWebViewConfiguration alloc] init]);

auto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:116
&gt; +    auto ephemeralStore = [WKWebsiteDataStore nonPersistentDataStore];

This local variable is not needed.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:125
&gt; +            var request = window.indexedDB.open(&apos;testDB&apos;); \

can omit &quot;window.&quot;

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:129
&gt; +                for (let i = 0; i &lt; 10000; i ++) \

extra space between i and ++

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:131
&gt; +                window.webkit.messageHandlers.testHandler.postMessage(&apos;Opened&apos;);\

can omit &quot;window.&quot;

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:140
&gt; +    [webView evaluateJavaScript:@&quot;openDatabase()&quot; completionHandler: nil];

no space after completionHandler:

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:142
&gt; +    RetainPtr&lt;NSString&gt; string = (NSString *)[lastScriptMessage body];

Local variable would not be needed with my suggestion above.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:147
&gt; +    [secondWebView evaluateJavaScript:@&quot;openDatabase()&quot; completionHandler: nil];

no space after completionHandler:

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:148
&gt; +    receivedScriptMessage = false;

It would look safer if we did this before the evaluateJavaScript call (although it is safe because async).

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:150
&gt; +    string = (NSString *)[lastScriptMessage body];

Local variable would not be needed with my suggestion above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759010</commentid>
    <comment_count>4</comment_count>
      <attachid>428289</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-11 11:38:40 -0700</bug_when>
    <thetext>Comment on attachment 428289
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/ChangeLog:18
&gt;&gt; +        making the map in IDBSerializationContext keye by thread pointer.
&gt; 
&gt; Typo: keye (I guess you meant keyed?)

Yes.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/IDBSerializationContext.cpp:39
&gt;&gt; +static HashMap&lt;Thread*, IDBSerializationContext*&gt;&amp; serializationContextMap()
&gt; 
&gt; It would look safer if this function took a Locker&lt;Lock&gt;&amp; as parameter, since the caller needs to grab the lock.

Will add.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/IDBSerializationContext.h:43
&gt;&gt; +    static Ref&lt;IDBSerializationContext&gt; getOrCreateIDBSerializationContext();
&gt; 
&gt; Maybe we could rename this to getOrCreateForCurrentThread() for clarity, given the new behavior? (note that I don&apos;t think we need to repeat &quot;IDBSerializationContext&quot; in the function name since it is already in the IDBSerializationContext class scope.

Sure.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/IDBSerializationContext.h:51
&gt;&gt; +    IDBSerializationContext(Thread&amp;);
&gt; 
&gt; explicit

Will add.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:45
&gt;&gt; +static RetainPtr&lt;WKScriptMessage&gt; lastScriptMessage;
&gt; 
&gt; Maybe this could be a RetainPtr&lt;NSString&gt; instead.

Sure

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:76
&gt;&gt; +    lastScriptMessage = message;
&gt; 
&gt; Maybe we could store [message body] here. Doesn&apos;t seem we really want the whole message.

Sure, will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759092</commentid>
    <comment_count>5</comment_count>
      <attachid>428323</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-11 16:07:36 -0700</bug_when>
    <thetext>Created attachment 428323
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759101</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-11 16:41:31 -0700</bug_when>
    <thetext>Committed r277343 (237601@main): &lt;https://commits.webkit.org/237601@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428323.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428289</attachid>
            <date>2021-05-11 10:12:09 -0700</date>
            <delta_ts>2021-05-11 16:07:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225658-20210511101208.patch</filename>
            <type>text/plain</type>
            <size>14124</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRmNDcxMzgwYTMyMGM0
OTRjYThlZTY5MWVkNzczMGM0NjI4NjIyMC4uODIwZjc1YTk4ZmYyNjIwZWRiMGEwZmNjYmM1M2Jl
Y2FmMjc4YThiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIxLTA1LTExICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBvbmUgVk0gcGVyIHRo
cmVhZCBmb3IgSURCIHNlcmlhbGl6YXRpb24gd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHZtIG1hcCBpbiBJREJTZXJpYWxpemF0aW9uQ29u
dGV4dCB1c2VzIHNlc3Npb25JRCBhcyBrZXkgaW5zdGVhZCBvZiB0aHJlYWQgaWRlbnRpZmllci4g
Tm9ybWFsbHkgSURCIGhhcyBvbmUgCisgICAgICAgIHRocmVhZCBwZXIgc2Vzc2lvbiAoc2VlIFdl
YklEQlNlcnZlciBhbmQgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlciksIHNvIHdlIGFyZSB1c2luZyBv
bmUgdm0gcGVyIHRocmVhZC4gV2l0aCAKKyAgICAgICAgcjI3NTc5OSwgd2UgcmVtb3ZlIFdlYklE
QlNlcnZlciBtb3JlIGFnZ3Jlc3NpdmVseSAod2hlbiBubyB3ZWIgcHJvY2VzcyBpcyBub3QgdXNp
bmcgSURCKSB0byBtYWtlIHN1cmUgaXRzIHRocmVhZAorICAgICAgICBkb2VzIG5vdCBzdGF5IGFy
b3VuZCwgYW5kIFdlYklEQlNlcnZlciB3aWxsIGJlIGRlc3Ryb3llZCBhZnRlciBpdCBmaW5pc2hl
cyBzY2hlZHVlbGQgdGFza3Mgb24gdGhlIGJhY2tncm91bmQgCisgICAgICAgIHRocmVhZC5UaGVu
LCBpdCdzIHBvc3NpYmxlIHRoYXQgd2hpbGUgYSBXZWJJREJTZXJ2ZXIgZm9yIHNvbWUgc2Vzc2lv
biBpcyByZW1vdmVkIGFuZCBmaW5pc2hpbmcgbGFzdCB0YXNrcywgCisgICAgICAgIGEgbmV3IElE
QiByZXF1ZXN0IGZvciB0aGUgc2FtZSBzZXNzaW9uIGNvbWVzIGluIGFuZCB3ZSBjcmVhdGUgYSBu
ZXcgV2ViSURCU2VydmVyIGZvciB0aGUgc2Vzc2lvbi4gSW4gdGhpcyBjYXNlLAorICAgICAgICB0
d28gdGhyZWFkcyBlbmRzIHVwIHVzaW5nIHRoZSBzYW1lIFZNLgorCisgICAgICAgIFZNIGlzIGdl
bmVyYWxseSBub3QgZGVzaWduZWQgdG8gYmUgdXNlZCBvbiBtdWx0aXBsZSB0aHJlYWRzLCBvdGhl
cndpc2Ugd2UgbmVlZCB0byBhY3F1aXJlIGxvY2sgZm9yIGVhY2ggCisgICAgICAgIFdURjo6U3Ry
aW5nIG9wZXJhdGlvbiB0byBnZXQgY29ycmVjdCBBdG9tU3RyaW5nVGFibGUuIFNvIGxldCdzIGp1
c3QgbWFrZSBzdXJlIHdlIGFyZSB1c2luZyBvbmUgVk0gcGVyIHRocmVhZCBieQorICAgICAgICBt
YWtpbmcgdGhlIG1hcCBpbiBJREJTZXJpYWxpemF0aW9uQ29udGV4dCBrZXllIGJ5IHRocmVhZCBw
b2ludGVyLgorCisgICAgICAgIE5ldyBBUEkgdGVzdDogSW5kZXhlZERCLk9uZVZNUGVyVGhyZWFk
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJpYWxpemF0aW9u
Q29udGV4dDo6Z2V0T3JDcmVhdGVJREJTZXJpYWxpemF0aW9uQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcmlhbGl6YXRpb25Db250ZXh0Ojp+SURCU2VyaWFsaXph
dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJpYWxpemF0
aW9uQ29udGV4dDo6dm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJpYWxp
emF0aW9uQ29udGV4dDo6Z2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6SURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OklEQlNlcmlhbGl6YXRpb25Db250ZXh0KToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNvbnRleHQu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0
b3JlOjpNZW1vcnlJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpNZW1vcnlPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlKToKKwogMjAyMS0wNS0xMCAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5
QGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVmbGlnaHQgcmVxdWVzdHMgbm90IHByb3Blcmx5IGF0
dHJpYnV0ZWQgYXMgYXBwLWJvdW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb25Db250ZXh0LmNw
cAppbmRleCA4ZWJlNmU5MjY5MjAzZTU2MDNlOThmMGQzYTdlNDZhMGJiM2UzMDE1Li4xMjU5OWE5
YTEwNzZjMzZiMmEyNzkzNmJhOThjNTQ2ODU3ZjIyMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uQ29udGV4dC5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJET01XcmFwcGVy
V29ybGQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDE4ICszNiwxOSBAQCBuYW1lc3BhY2Ug
SURCU2VydmVyIHsKIAogc3RhdGljIExvY2sgc2VyaWFsaXphdGlvbkNvbnRleHRNYXBNdXRleDsK
IAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIElEQlNlcmlhbGl6YXRpb25Db250ZXh0
Kj4mIHNlcmlhbGl6YXRpb25Db250ZXh0TWFwKCkKK3N0YXRpYyBIYXNoTWFwPFRocmVhZCosIElE
QlNlcmlhbGl6YXRpb25Db250ZXh0Kj4mIHNlcmlhbGl6YXRpb25Db250ZXh0TWFwKCkKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSURCU2VyaWFs
aXphdGlvbkNvbnRleHQqPj4gbWFwOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFw
PFRocmVhZCosIElEQlNlcmlhbGl6YXRpb25Db250ZXh0Kj4+IG1hcDsKICAgICByZXR1cm4gbWFw
OwogfQogCi1SZWY8SURCU2VyaWFsaXphdGlvbkNvbnRleHQ+IElEQlNlcmlhbGl6YXRpb25Db250
ZXh0OjpnZXRPckNyZWF0ZUlEQlNlcmlhbGl6YXRpb25Db250ZXh0KFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKK1JlZjxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4gSURCU2VyaWFsaXphdGlvbkNv
bnRleHQ6OmdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQoKQogeworICAgIGF1dG8m
IHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoc2Vy
aWFsaXphdGlvbkNvbnRleHRNYXBNdXRleCk7Ci0gICAgYXV0b1tpdGVyLCBpc05ld0VudHJ5XSA9
IHNlcmlhbGl6YXRpb25Db250ZXh0TWFwKCkuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CisgICAg
YXV0b1tpdGVyLCBpc05ld0VudHJ5XSA9IHNlcmlhbGl6YXRpb25Db250ZXh0TWFwKCkuYWRkKCZ0
aHJlYWQsIG51bGxwdHIpOwogICAgIGlmIChpc05ld0VudHJ5KSB7Ci0gICAgICAgIFJlZjxJREJT
ZXJpYWxpemF0aW9uQ29udGV4dD4gcHJvdGVjdGVkQ29udGV4dCA9IGFkb3B0UmVmKCpuZXcgSURC
U2VyaWFsaXphdGlvbkNvbnRleHQoc2Vzc2lvbklEKSk7CisgICAgICAgIFJlZjxJREJTZXJpYWxp
emF0aW9uQ29udGV4dD4gcHJvdGVjdGVkQ29udGV4dCA9IGFkb3B0UmVmKCpuZXcgSURCU2VyaWFs
aXphdGlvbkNvbnRleHQodGhyZWFkKSk7CiAgICAgICAgIGl0ZXItPnZhbHVlID0gcHJvdGVjdGVk
Q29udGV4dC5wdHIoKTsKICAgICAgICAgcmV0dXJuIHByb3RlY3RlZENvbnRleHQ7CiAgICAgfQpA
QCAtNTksMTQgKzU5LDE0IEBAIFJlZjxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4gSURCU2VyaWFs
aXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvCiBJREJTZXJpYWxpemF0
aW9uQ29udGV4dDo6fklEQlNlcmlhbGl6YXRpb25Db250ZXh0KCkKIHsKICAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKHNlcmlhbGl6YXRpb25Db250ZXh0TWFwTXV0ZXgpOwotICAgIEFTU0VSVCh0aGlz
ID09IHNlcmlhbGl6YXRpb25Db250ZXh0TWFwKCkuZ2V0KG1fc2Vzc2lvbklEKSk7CisgICAgQVNT
RVJUKHRoaXMgPT0gc2VyaWFsaXphdGlvbkNvbnRleHRNYXAoKS5nZXQoJm1fdGhyZWFkKSk7CiAK
ICAgICBpZiAobV92bSkgewogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKCptX3ZtKTsK
ICAgICAgICAgbV9nbG9iYWxPYmplY3QuY2xlYXIoKTsKICAgICAgICAgbV92bSA9IG51bGxwdHI7
CiAgICAgfQotICAgIHNlcmlhbGl6YXRpb25Db250ZXh0TWFwKCkucmVtb3ZlKG1fc2Vzc2lvbklE
KTsKKyAgICBzZXJpYWxpemF0aW9uQ29udGV4dE1hcCgpLnJlbW92ZSgmbV90aHJlYWQpOwogfQog
CiB2b2lkIElEQlNlcmlhbGl6YXRpb25Db250ZXh0Ojppbml0aWFsaXplVk0oKQpAQCAtODUsMTgg
Kzg1LDIyIEBAIHZvaWQgSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OmluaXRpYWxpemVWTSgpCiAK
IEpTQzo6Vk0mIElEQlNlcmlhbGl6YXRpb25Db250ZXh0Ojp2bSgpCiB7CisgICAgQVNTRVJUKCZt
X3RocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOworCiAgICAgaW5pdGlhbGl6ZVZNKCk7CiAg
ICAgcmV0dXJuICptX3ZtOwogfQogCiBKU0M6OkpTR2xvYmFsT2JqZWN0JiBJREJTZXJpYWxpemF0
aW9uQ29udGV4dDo6Z2xvYmFsT2JqZWN0KCkKIHsKKyAgICBBU1NFUlQoJm1fdGhyZWFkID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CisKICAgICBpbml0aWFsaXplVk0oKTsKICAgICByZXR1cm4gKm1f
Z2xvYmFsT2JqZWN0LmdldCgpOwogfQogCi1JREJTZXJpYWxpemF0aW9uQ29udGV4dDo6SURCU2Vy
aWFsaXphdGlvbkNvbnRleHQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogbV9zZXNz
aW9uSUQoc2Vzc2lvbklEKQorSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OklEQlNlcmlhbGl6YXRp
b25Db250ZXh0KFRocmVhZCYgdGhyZWFkKQorICAgIDogbV90aHJlYWQodGhyZWFkKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VyaWFsaXphdGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5oCmluZGV4IDNkNjc2ZDgzYzZkMDBhYjdi
YzlmYWUzZWVkYWQ1MGFjMWRkZWZiMTcuLjRiMzllMWRmZTg1ZDUzYTYxNGViMmVhMmQzYjlhMzI2
OWM0NmZlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5oCkBAIC0yOCw3ICsy
OCw2IEBACiAjaW5jbHVkZSAiSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1N0cnVjdHVyZUlubGluZXMuaD4KLSNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwpAQCAtNDEsNyArNDAsNyBAQCBuYW1l
c3BhY2UgSURCU2VydmVyIHsKIAogY2xhc3MgSURCU2VyaWFsaXphdGlvbkNvbnRleHQgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4gewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8SURCU2VyaWFsaXphdGlvbkNvbnRleHQ+IGdldE9yQ3JlYXRlSURCU2VyaWFsaXph
dGlvbkNvbnRleHQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBSZWY8SURCU2VyaWFsaXph
dGlvbkNvbnRleHQ+IGdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQoKTsKIAogICAg
IH5JREJTZXJpYWxpemF0aW9uQ29udGV4dCgpOwogCkBAIC00OSwxMiArNDgsMTIgQEAgcHVibGlj
OgogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCgpOwogCiBwcml2YXRlOgot
ICAgIElEQlNlcmlhbGl6YXRpb25Db250ZXh0KFBBTDo6U2Vzc2lvbklEKTsKKyAgICBJREJTZXJp
YWxpemF0aW9uQ29udGV4dChUaHJlYWQmKTsKICAgICB2b2lkIGluaXRpYWxpemVWTSgpOwogCiAg
ICAgUmVmUHRyPEpTQzo6Vk0+IG1fdm07CiAgICAgSlNDOjpTdHJvbmc8SlNJREJTZXJpYWxpemF0
aW9uR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKLSAgICBQQUw6OlNlc3Npb25JRCBtX3Nl
c3Npb25JRDsKKyAgICBUaHJlYWQmIG1fdGhyZWFkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURC
U2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDZiNmEwNzExN2Ji
M2ZlYTE4ZmNlYjgzMjc0ZjM0MWVjMjJmMzIzMTMuLjM2NDdjMTFmZmU3NDgzMGI5ODUwYjQyY2I4
ODk3NWM4ZDk5ZjJhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC00
OCw3ICs0OCw3IEBAIGNvbnN0ZXhwciB1aW50NjRfdCBtYXhHZW5lcmF0ZWRLZXlWYWx1ZSA9IDB4
MjAwMDAwMDAwMDAwMDA7CiBNZW1vcnlJREJCYWNraW5nU3RvcmU6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQotICAgICwgbV9zZXJpYWxpemF0aW9uQ29udGV4dChJREJTZXJp
YWxpemF0aW9uQ29udGV4dDo6Z2V0T3JDcmVhdGVJREJTZXJpYWxpemF0aW9uQ29udGV4dChzZXNz
aW9uSUQpKQorICAgICwgbV9zZXJpYWxpemF0aW9uQ29udGV4dChJREJTZXJpYWxpemF0aW9uQ29u
dGV4dDo6Z2V0T3JDcmVhdGVJREJTZXJpYWxpemF0aW9uQ29udGV4dCgpKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2Jq
ZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCAwZjRlZGI1ODY5NmUxM2U3MTNiMjQxMDUyYjM1OWY1
MjljNDQ0ODg3Li4yNjMwMTgwNmE0MjRjYzhiZWNmNGU0MDgwNTA3Mjk5ZDViMWE1YTZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2Jq
ZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAgUmVmPE1lbW9yeU9iamVj
dFN0b3JlPiBNZW1vcnlPYmplY3RTdG9yZTo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZW1vcnlPYmplY3RTdG9yZShzZXNz
aW9uSUQsIGluZm8pKTsKIH0KIAotTWVtb3J5T2JqZWN0U3RvcmU6Ok1lbW9yeU9iamVjdFN0b3Jl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZv
KQorTWVtb3J5T2JqZWN0U3RvcmU6Ok1lbW9yeU9iamVjdFN0b3JlKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiAgICAgOiBtX2luZm8oaW5mbykKLSAgICAs
IG1fc2VyaWFsaXphdGlvbkNvbnRleHQoSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3Jl
YXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQoc2Vzc2lvbklEKSkKKyAgICAsIG1fc2VyaWFsaXph
dGlvbkNvbnRleHQoSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlSURCU2VyaWFs
aXphdGlvbkNvbnRleHQoKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cAppbmRleCA0ZTczMWJlYzBhOGE2YmMwNGYzOWJlNmY3YzhkNGQ5YTEyMTQ0Nzk2Li4yN2I1NWEy
YzYxMGQ0ZDYwM2UyZmQxNThhZjZiMTFkZWYxMDRlZjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
U1FMaXRlSURCQmFja2luZ1N0b3JlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgSURC
CiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKICAgICAsIG1fZGF0YWJhc2VSb290RGlyZWN0b3J5KGRhdGFiYXNlUm9vdERpcmVjdG9y
eSkKLSAgICAsIG1fc2VyaWFsaXphdGlvbkNvbnRleHQoSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6
OmdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQoc2Vzc2lvbklEKSkKKyAgICAsIG1f
c2VyaWFsaXphdGlvbkNvbnRleHQoSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRl
SURCU2VyaWFsaXphdGlvbkNvbnRleHQoKSkKIHsKICAgICBtX2RhdGFiYXNlRGlyZWN0b3J5ID0g
ZnVsbERhdGFiYXNlRGlyZWN0b3J5V2l0aFVwZ3JhZGUoKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmZTgwOGZlZTM0NmY4Njc3N2IyMjY2
OWMwNWJlNmVkOTRiNDA3NmVlLi4xNTVlMzVkNDRlMWM5MDJjZDRmODZlM2E2MTM3OTExMGFmYTNh
YWViIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUtMTEgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5j
b20+CisKKyAgICAgICAgVXNlIG9uZSBWTSBwZXIgdGhyZWFkIGZvciBJREIgc2VyaWFsaXphdGlv
biB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNz
S2lsbC5tbToKKyAgICAgICAgKC1bRGF0YWJhc2VQcm9jZXNzS2lsbE1lc3NhZ2VIYW5kbGVyIHVz
ZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAg
KFRFU1QpOgorCiAyMDIxLTA1LTEwICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBw
bGUuY29tPgogCiAgICAgICAgIFByZWZsaWdodCByZXF1ZXN0cyBub3QgcHJvcGVybHkgYXR0cmli
dXRlZCBhcyBhcHAtYm91bmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5t
bQppbmRleCA5YjBlZjY0OGJjY2VjNjllMWQ3MzhkMDE4ZDNkOGRmOTk1NDVmNWI4Li5kYmUxMDBk
ZWI0NzFkNGI2MThmNDk2ODg2ZTJmZjZiNDA1NWM4MWYwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJE
YXRhYmFzZVByb2Nlc3NLaWxsLm1tCkBAIC0yNywxMCArMjcsMTEgQEAKIAogI2ltcG9ydCAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKLSNpbXBvcnQgIlRlc3ROYXZpZ2F0
aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktp
dC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRD
b250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
QEAgLTQxLDYgKzQyLDcgQEAgc3RhdGljIGJvb2wgcmVjZWl2ZWRBdExlYXN0T25lT3BlbkVycm9y
Owogc3RhdGljIGJvb2wgcmVjZWl2ZWRBdExlYXN0T25lRGVsZXRlRXJyb3I7CiBzdGF0aWMgYm9v
bCBvcGVuUmVxdWVzdFVwZ3JhZGVOZWVkZWQ7CiBzdGF0aWMgYm9vbCBkYXRhYmFzZUVycm9yUmVj
ZWl2ZWQ7CitzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3Nh
Z2U7CiAKIEBpbnRlcmZhY2UgRGF0YWJhc2VQcm9jZXNzS2lsbE1lc3NhZ2VIYW5kbGVyIDogTlNP
YmplY3QgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CiBAZW5kCkBAIC02Niw4ICs2OCwxMiBAQCBz
dGF0aWMgYm9vbCBkYXRhYmFzZUVycm9yUmVjZWl2ZWQ7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoW1ttZXNzYWdlIGJvZHldIGlzRXF1YWxUb1N0cmluZzpAIk9wZW5SZXF1ZXN0
RXJyb3IiXSkKKyAgICBpZiAoW1ttZXNzYWdlIGJvZHldIGlzRXF1YWxUb1N0cmluZzpAIk9wZW5S
ZXF1ZXN0RXJyb3IiXSkgewogICAgICAgICByZWNlaXZlZEF0TGVhc3RPbmVPcGVuRXJyb3IgPSB0
cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGFzdFNjcmlwdE1lc3NhZ2UgPSBt
ZXNzYWdlOwogfQogCiBAZW5kCkBAIC0xMDAsMyArMTA2LDQ3IEBAIFRFU1QoSW5kZXhlZERCLCBE
YXRhYmFzZVByb2Nlc3NLaWxsKQogICAgIEVYUEVDVF9FUShyZWNlaXZlZEF0TGVhc3RPbmVEZWxl
dGVFcnJvciwgdHJ1ZSk7CiAgICAgRVhQRUNUX0VRKGRhdGFiYXNlRXJyb3JSZWNlaXZlZCwgdHJ1
ZSk7CiB9CisKK1RFU1QoSW5kZXhlZERCLCBPbmVWTVBlclRocmVhZCkKK3sKKyAgICBSZXRhaW5Q
dHI8RGF0YWJhc2VQcm9jZXNzS2lsbE1lc3NhZ2VIYW5kbGVyPiBoYW5kbGVyID0gYWRvcHROUyhb
W0RhdGFiYXNlUHJvY2Vzc0tpbGxNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFJl
dGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRp
b24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVy
LmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworCisgICAgYXV0byBlcGhlbWVyYWxTdG9yZSA9
IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CisgICAgY29uZmln
dXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gZXBoZW1lcmFsU3RvcmU7CisKKyAgICAK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIHNlY29uZFdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDgwMCwgNjAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAKKyAgICBOU1N0cmluZyAq
aHRtbFN0cmluZyA9IEAiPHNjcmlwdD4gXAorICAgICAgICBmdW5jdGlvbiBvcGVuRGF0YWJhc2Uo
KSB7IFwKKyAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCd0
ZXN0REInKTsgXAorICAgICAgICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlv
bihldmVudCkgeyBcCisgICAgICAgICAgICAgICAgbGV0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dDsgXAorICAgICAgICAgICAgICAgIGxldCBvcyA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0
T1MnKTtcCisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSArKykg
XAorICAgICAgICAgICAgICAgICAgICBvcy5wdXQoaSwgaSk7IFwKKyAgICAgICAgICAgICAgICB3
aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnT3Bl
bmVkJyk7XAorICAgICAgICAgICAgfTsgXAorICAgICAgICB9XAorICAgICAgICA8L3NjcmlwdD4i
OworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmh0bWxTdHJpbmcg
YmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd2Via2l0Lm9yZyJdXTsKKyAg
ICBbc2Vjb25kV2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6aHRtbFN0cmluZyBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly9hcHBsZS5jb20iXV07CisKKyAg
ICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJvcGVuRGF0YWJhc2UoKSIgY29tcGxldGlvbkhhbmRsZXI6IG5pbF07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gc3RyaW5nID0gKE5TU3RyaW5nICopW2xhc3RTY3JpcHRNZXNzYWdl
IGJvZHldOworICAgIEVYUEVDVF9XS19TVFJFUShAIk9wZW5lZCIsIHN0cmluZy5nZXQoKSk7CisK
KyAgICBraWxsKFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0sIFNJR0tJTEwpOworCisg
ICAgW3NlY29uZFdlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAib3BlbkRhdGFiYXNlKCkiIGNv
bXBsZXRpb25IYW5kbGVyOiBuaWxdOworICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNl
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsK
KyAgICBzdHJpbmcgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV07CisgICAg
RVhQRUNUX1dLX1NUUkVRKEAiT3BlbmVkIiwgc3RyaW5nLmdldCgpKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428323</attachid>
            <date>2021-05-11 16:07:36 -0700</date>
            <delta_ts>2021-05-11 16:41:32 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-225658-20210511160735.patch</filename>
            <type>text/plain</type>
            <size>14657</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRmNDcxMzgwYTMyMGM0
OTRjYThlZTY5MWVkNzczMGM0NjI4NjIyMC4uMTYyMDg1ZmFjZGQ4NjdjMjRiY2E0YjNkODI0YWZk
ZThlMjg2NTA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIxLTA1LTExICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBvbmUgVk0gcGVyIHRo
cmVhZCBmb3IgSURCIHNlcmlhbGl6YXRpb24gd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hy
aXMgRHVtZXouCisKKyAgICAgICAgVGhlIHZtIG1hcCBpbiBJREJTZXJpYWxpemF0aW9uQ29udGV4
dCB1c2VzIHNlc3Npb25JRCBhcyBrZXkgaW5zdGVhZCBvZiB0aHJlYWQgaWRlbnRpZmllci4gTm9y
bWFsbHkgSURCIGhhcyBvbmUgCisgICAgICAgIHRocmVhZCBwZXIgc2Vzc2lvbiAoc2VlIFdlYklE
QlNlcnZlciBhbmQgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlciksIHNvIHdlIGFyZSB1c2luZyBvbmUg
dm0gcGVyIHRocmVhZC4gV2l0aCAKKyAgICAgICAgcjI3NTc5OSwgd2UgcmVtb3ZlIFdlYklEQlNl
cnZlciBtb3JlIGFnZ3Jlc3NpdmVseSAod2hlbiBubyB3ZWIgcHJvY2VzcyBpcyBub3QgdXNpbmcg
SURCKSB0byBtYWtlIHN1cmUgaXRzIHRocmVhZAorICAgICAgICBkb2VzIG5vdCBzdGF5IGFyb3Vu
ZCwgYW5kIFdlYklEQlNlcnZlciB3aWxsIGJlIGRlc3Ryb3llZCBhZnRlciBpdCBmaW5pc2hlcyBz
Y2hlZHVsZWQgdGFza3Mgb24gdGhlIGJhY2tncm91bmQgCisgICAgICAgIHRocmVhZC4gVGhlbiwg
aXQncyBwb3NzaWJsZSB0aGF0IHdoaWxlIGEgV2ViSURCU2VydmVyIGZvciBzb21lIHNlc3Npb24g
aXMgcmVtb3ZlZCBhbmQgZmluaXNoaW5nIGxhc3QgdGFza3MsIAorICAgICAgICBhIG5ldyBJREIg
cmVxdWVzdCBmb3IgdGhlIHNhbWUgc2Vzc2lvbiBjb21lcyBpbiBhbmQgd2UgY3JlYXRlIGEgbmV3
IFdlYklEQlNlcnZlciBmb3IgdGhlIHNlc3Npb24uIEluIHRoaXMgY2FzZSwKKyAgICAgICAgdHdv
IHRocmVhZHMgZW5kcyB1cCB1c2luZyB0aGUgc2FtZSBWTS4KKworICAgICAgICBWTSBpcyBnZW5l
cmFsbHkgbm90IGRlc2lnbmVkIHRvIGJlIHVzZWQgb24gbXVsdGlwbGUgdGhyZWFkcywgb3RoZXJ3
aXNlIHdlIG5lZWQgdG8gYWNxdWlyZSBsb2NrIGZvciBlYWNoIAorICAgICAgICBXVEY6OlN0cmlu
ZyBvcGVyYXRpb24gdG8gZ2V0IGNvcnJlY3QgQXRvbVN0cmluZ1RhYmxlLiBTbyBsZXQncyBqdXN0
IG1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgb25lIFZNIHBlciB0aHJlYWQgYnkKKyAgICAgICAgbWFr
aW5nIHRoZSBtYXAgaW4gSURCU2VyaWFsaXphdGlvbkNvbnRleHQga2V5ZWQgYnkgdGhyZWFkIHBv
aW50ZXIuCisKKyAgICAgICAgTmV3IEFQSSB0ZXN0OiBJbmRleGVkREIuT25lVk1QZXJUaHJlYWQK
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcmlhbGl6YXRpb25D
b250ZXh0OjpnZXRPckNyZWF0ZUlEQlNlcmlhbGl6YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VyaWFsaXphdGlvbkNvbnRleHQ6On5JREJTZXJpYWxpemF0
aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcmlhbGl6YXRp
b25Db250ZXh0Ojp2bSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcmlhbGl6
YXRpb25Db250ZXh0OjpnbG9iYWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpJREJTZXJpYWxpemF0aW9uQ29udGV4dDo6SURCU2VyaWFsaXphdGlvbkNvbnRleHQpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5o
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3Rv
cmU6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6TWVtb3J5T2JqZWN0U3RvcmU6Ok1lbW9yeU9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmUpOgorCiAyMDIxLTA1LTEwICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlA
YXBwbGUuY29tPgogCiAgICAgICAgIFByZWZsaWdodCByZXF1ZXN0cyBub3QgcHJvcGVybHkgYXR0
cmlidXRlZCBhcyBhcHAtYm91bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNvbnRleHQuY3Bw
CmluZGV4IDhlYmU2ZTkyNjkyMDNlNTYwM2U5OGYwZDNhN2U0NmEwYmIzZTMwMTUuLjlkZDdhYmI1
NTU1OTQyZDBjOTFlZjg4MDA3Y2I2NmQxYTcwNGQ1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb25Db250ZXh0LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRPTVdyYXBwZXJX
b3JsZC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU09iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMTggKzM2LDE5IEBAIG5hbWVzcGFjZSBJ
REJTZXJ2ZXIgewogCiBzdGF0aWMgTG9jayBzZXJpYWxpemF0aW9uQ29udGV4dE1hcE11dGV4Owog
Ci1zdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgSURCU2VyaWFsaXphdGlvbkNvbnRleHQq
PiYgc2VyaWFsaXphdGlvbkNvbnRleHRNYXAoKQorc3RhdGljIEhhc2hNYXA8VGhyZWFkKiwgSURC
U2VyaWFsaXphdGlvbkNvbnRleHQqPiYgc2VyaWFsaXphdGlvbkNvbnRleHRNYXAoTG9ja2VyPExv
Y2s+JikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25J
RCwgSURCU2VyaWFsaXphdGlvbkNvbnRleHQqPj4gbWFwOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxIYXNoTWFwPFRocmVhZCosIElEQlNlcmlhbGl6YXRpb25Db250ZXh0Kj4+IG1hcDsKICAg
ICByZXR1cm4gbWFwOwogfQogCi1SZWY8SURCU2VyaWFsaXphdGlvbkNvbnRleHQ+IElEQlNlcmlh
bGl6YXRpb25Db250ZXh0OjpnZXRPckNyZWF0ZUlEQlNlcmlhbGl6YXRpb25Db250ZXh0KFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKK1JlZjxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4gSURCU2Vy
aWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlRm9yQ3VycmVudFRocmVhZCgpCiB7CisgICAg
YXV0byYgdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihzZXJpYWxpemF0aW9uQ29udGV4dE1hcE11dGV4KTsKLSAgICBhdXRvW2l0ZXIsIGlzTmV3RW50
cnldID0gc2VyaWFsaXphdGlvbkNvbnRleHRNYXAoKS5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsK
KyAgICBhdXRvW2l0ZXIsIGlzTmV3RW50cnldID0gc2VyaWFsaXphdGlvbkNvbnRleHRNYXAobG9j
a2VyKS5hZGQoJnRocmVhZCwgbnVsbHB0cik7CiAgICAgaWYgKGlzTmV3RW50cnkpIHsKLSAgICAg
ICAgUmVmPElEQlNlcmlhbGl6YXRpb25Db250ZXh0PiBwcm90ZWN0ZWRDb250ZXh0ID0gYWRvcHRS
ZWYoKm5ldyBJREJTZXJpYWxpemF0aW9uQ29udGV4dChzZXNzaW9uSUQpKTsKKyAgICAgICAgUmVm
PElEQlNlcmlhbGl6YXRpb25Db250ZXh0PiBwcm90ZWN0ZWRDb250ZXh0ID0gYWRvcHRSZWYoKm5l
dyBJREJTZXJpYWxpemF0aW9uQ29udGV4dCh0aHJlYWQpKTsKICAgICAgICAgaXRlci0+dmFsdWUg
PSBwcm90ZWN0ZWRDb250ZXh0LnB0cigpOwogICAgICAgICByZXR1cm4gcHJvdGVjdGVkQ29udGV4
dDsKICAgICB9CkBAIC01OSwxNCArNTksMTQgQEAgUmVmPElEQlNlcmlhbGl6YXRpb25Db250ZXh0
PiBJREJTZXJpYWxpemF0aW9uQ29udGV4dDo6Z2V0T3JDcmVhdGVJREJTZXJpYWxpemF0aW8KIElE
QlNlcmlhbGl6YXRpb25Db250ZXh0Ojp+SURCU2VyaWFsaXphdGlvbkNvbnRleHQoKQogewogICAg
IExvY2tlcjxMb2NrPiBsb2NrZXIoc2VyaWFsaXphdGlvbkNvbnRleHRNYXBNdXRleCk7Ci0gICAg
QVNTRVJUKHRoaXMgPT0gc2VyaWFsaXphdGlvbkNvbnRleHRNYXAoKS5nZXQobV9zZXNzaW9uSUQp
KTsKKyAgICBBU1NFUlQodGhpcyA9PSBzZXJpYWxpemF0aW9uQ29udGV4dE1hcChsb2NrZXIpLmdl
dCgmbV90aHJlYWQpKTsKIAogICAgIGlmIChtX3ZtKSB7CiAgICAgICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2soKm1fdm0pOwogICAgICAgICBtX2dsb2JhbE9iamVjdC5jbGVhcigpOwogICAgICAg
ICBtX3ZtID0gbnVsbHB0cjsKICAgICB9Ci0gICAgc2VyaWFsaXphdGlvbkNvbnRleHRNYXAoKS5y
ZW1vdmUobV9zZXNzaW9uSUQpOworICAgIHNlcmlhbGl6YXRpb25Db250ZXh0TWFwKGxvY2tlciku
cmVtb3ZlKCZtX3RocmVhZCk7CiB9CiAKIHZvaWQgSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6Omlu
aXRpYWxpemVWTSgpCkBAIC04NSwxOCArODUsMjIgQEAgdm9pZCBJREJTZXJpYWxpemF0aW9uQ29u
dGV4dDo6aW5pdGlhbGl6ZVZNKCkKIAogSlNDOjpWTSYgSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6
OnZtKCkKIHsKKyAgICBBU1NFUlQoJm1fdGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CisK
ICAgICBpbml0aWFsaXplVk0oKTsKICAgICByZXR1cm4gKm1fdm07CiB9CiAKIEpTQzo6SlNHbG9i
YWxPYmplY3QmIElEQlNlcmlhbGl6YXRpb25Db250ZXh0OjpnbG9iYWxPYmplY3QoKQogeworICAg
IEFTU0VSVCgmbV90aHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKwogICAgIGluaXRpYWxp
emVWTSgpOwogICAgIHJldHVybiAqbV9nbG9iYWxPYmplY3QuZ2V0KCk7CiB9CiAKLUlEQlNlcmlh
bGl6YXRpb25Db250ZXh0OjpJREJTZXJpYWxpemF0aW9uQ29udGV4dChQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpCi0gICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCitJREJTZXJpYWxpemF0aW9u
Q29udGV4dDo6SURCU2VyaWFsaXphdGlvbkNvbnRleHQoVGhyZWFkJiB0aHJlYWQpCisgICAgOiBt
X3RocmVhZCh0aHJlYWQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb25Db250ZXh0LmgK
aW5kZXggM2Q2NzZkODNjNmQwMGFiN2JjOWZhZTNlZWRhZDUwYWMxZGRlZmIxNy4uYWZkZWMwMDcx
ZTgwODllOTRjNjc1M2I2ZjUwZTdjMTA5Yzc2ODliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb25Db250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRp
b25Db250ZXh0LmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJKU0lEQlNlcmlhbGl6YXRp
b25HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJvbmdJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3RydWN0dXJlSW5saW5lcy5oPgotI2luY2x1
ZGUgPHBhbC9TZXNzaW9uSUQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7
CkBAIC00MSw3ICs0MCw3IEBAIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCiBjbGFzcyBJREJTZXJp
YWxpemF0aW9uQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNlcmlhbGl6YXRpb25Db250
ZXh0PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4g
Z2V0T3JDcmVhdGVJREJTZXJpYWxpemF0aW9uQ29udGV4dChQQUw6OlNlc3Npb25JRCk7CisgICAg
c3RhdGljIFJlZjxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4gZ2V0T3JDcmVhdGVGb3JDdXJyZW50
VGhyZWFkKCk7CiAKICAgICB+SURCU2VyaWFsaXphdGlvbkNvbnRleHQoKTsKIApAQCAtNDksMTIg
KzQ4LDEyIEBAIHB1YmxpYzoKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qo
KTsKIAogcHJpdmF0ZToKLSAgICBJREJTZXJpYWxpemF0aW9uQ29udGV4dChQQUw6OlNlc3Npb25J
RCk7CisgICAgZXhwbGljaXQgSURCU2VyaWFsaXphdGlvbkNvbnRleHQoVGhyZWFkJik7CiAgICAg
dm9pZCBpbml0aWFsaXplVk0oKTsKIAogICAgIFJlZlB0cjxKU0M6OlZNPiBtX3ZtOwogICAgIEpT
Qzo6U3Ryb25nPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7
Ci0gICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisgICAgVGhyZWFkJiBtX3RocmVhZDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0
b3JlLmNwcAppbmRleCA2YjZhMDcxMTdiYjNmZWExOGZjZWI4MzI3NGYzNDFlYzIyZjMyMzEzLi4y
NGViMGUzZmJjMjgxNWVmNzU0OGYwNzhhZWQzNWI1NDYwYWZjOGJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
SURCQmFja2luZ1N0b3JlLmNwcApAQCAtNDgsNyArNDgsNyBAQCBjb25zdGV4cHIgdWludDY0X3Qg
bWF4R2VuZXJhdGVkS2V5VmFsdWUgPSAweDIwMDAwMDAwMDAwMDAwOwogTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpNZW1vcnlJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiAgICAgOiBtX2lkZW50aWZp
ZXIoaWRlbnRpZmllcikKICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fc2Vy
aWFsaXphdGlvbkNvbnRleHQoSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlSURC
U2VyaWFsaXphdGlvbkNvbnRleHQoc2Vzc2lvbklEKSkKKyAgICAsIG1fc2VyaWFsaXphdGlvbkNv
bnRleHQoSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlRm9yQ3VycmVudFRocmVh
ZCgpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCAwZjRlZGI1ODY5NmUx
M2U3MTNiMjQxMDUyYjM1OWY1MjljNDQ0ODg3Li4zNWYwNTZhMDlmYWI3ZWE0NDBiYmJhY2U2M2Ez
ZDhmNTYwYzhkNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTQ5LDkgKzQ5LDkg
QEAgUmVmPE1lbW9yeU9iamVjdFN0b3JlPiBNZW1vcnlPYmplY3RTdG9yZTo6Y3JlYXRlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZW1v
cnlPYmplY3RTdG9yZShzZXNzaW9uSUQsIGluZm8pKTsKIH0KIAotTWVtb3J5T2JqZWN0U3RvcmU6
Ok1lbW9yeU9iamVjdFN0b3JlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvKQorTWVtb3J5T2JqZWN0U3RvcmU6Ok1lbW9yeU9iamVjdFN0b3Jl
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiAgICAgOiBt
X2luZm8oaW5mbykKLSAgICAsIG1fc2VyaWFsaXphdGlvbkNvbnRleHQoSURCU2VyaWFsaXphdGlv
bkNvbnRleHQ6OmdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQoc2Vzc2lvbklEKSkK
KyAgICAsIG1fc2VyaWFsaXphdGlvbkNvbnRleHQoSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6Omdl
dE9yQ3JlYXRlRm9yQ3VycmVudFRocmVhZCgpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IDRlNzMxYmVjMGE4YTZiYzA0ZjM5YmU2ZjdjOGQ0ZDlhMTIxNDQ3
OTYuLjVhMjNmNTRlMjUzMWJmZmU5YzE1NDVlYjJkN2JjMmQ2NTdkOTQ5ZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBJREIKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1faWRlbnRp
ZmllcihpZGVudGlmaWVyKQogICAgICwgbV9kYXRhYmFzZVJvb3REaXJlY3RvcnkoZGF0YWJhc2VS
b290RGlyZWN0b3J5KQotICAgICwgbV9zZXJpYWxpemF0aW9uQ29udGV4dChJREJTZXJpYWxpemF0
aW9uQ29udGV4dDo6Z2V0T3JDcmVhdGVJREJTZXJpYWxpemF0aW9uQ29udGV4dChzZXNzaW9uSUQp
KQorICAgICwgbV9zZXJpYWxpemF0aW9uQ29udGV4dChJREJTZXJpYWxpemF0aW9uQ29udGV4dDo6
Z2V0T3JDcmVhdGVGb3JDdXJyZW50VGhyZWFkKCkpCiB7CiAgICAgbV9kYXRhYmFzZURpcmVjdG9y
eSA9IGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKCk7CiB9CmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmU4MDhmZWUzNDZmODY3Nzdi
MjI2NjljMDViZTZlZDk0YjQwNzZlZS4uYTNmNzYxMTc2OTQ0ZjA3OTA2ODQ3ZjUzZTk4NzhkYThl
NTA2YTFjZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTExICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBw
bGUuY29tPgorCisgICAgICAgIFVzZSBvbmUgVk0gcGVyIHRocmVhZCBmb3IgSURCIHNlcmlhbGl6
YXRpb24gd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI1NjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vz
c0tpbGwubW06CisgICAgICAgICgtW0RhdGFiYXNlUHJvY2Vzc0tpbGxNZXNzYWdlSGFuZGxlciB1
c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisgICAgICAg
IChURVNUKToKKwogMjAyMS0wNS0xMCAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFw
cGxlLmNvbT4KIAogICAgICAgICBQcmVmbGlnaHQgcmVxdWVzdHMgbm90IHByb3Blcmx5IGF0dHJp
YnV0ZWQgYXMgYXBwLWJvdW5kCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwu
bW0KaW5kZXggOWIwZWY2NDhiY2NlYzY5ZTFkNzM4ZDAxOGQzZDhkZjk5NTQ1ZjViOC4uMGZmYmIy
MDgwOTI0NDEwYzU1NGZkZWNkMGU4ZjQ3YmVhNDU4M2JlZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxs
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
RGF0YWJhc2VQcm9jZXNzS2lsbC5tbQpAQCAtMjcsMTAgKzI3LDExIEBACiAKICNpbXBvcnQgIlBs
YXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCi0jaW1wb3J0ICJUZXN0TmF2aWdh
dGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+
CkBAIC00MSw2ICs0Miw3IEBAIHN0YXRpYyBib29sIHJlY2VpdmVkQXRMZWFzdE9uZU9wZW5FcnJv
cjsKIHN0YXRpYyBib29sIHJlY2VpdmVkQXRMZWFzdE9uZURlbGV0ZUVycm9yOwogc3RhdGljIGJv
b2wgb3BlblJlcXVlc3RVcGdyYWRlTmVlZGVkOwogc3RhdGljIGJvb2wgZGF0YWJhc2VFcnJvclJl
Y2VpdmVkOworc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAK
IEBpbnRlcmZhY2UgRGF0YWJhc2VQcm9jZXNzS2lsbE1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3Qg
PFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CiBAZW5kCkBAIC02NiwxNiArNjgsMjAgQEAgc3RhdGlj
IGJvb2wgZGF0YWJhc2VFcnJvclJlY2VpdmVkOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKFtbbWVzc2FnZSBib2R5XSBpc0VxdWFsVG9TdHJpbmc6QCJPcGVuUmVxdWVzdEVycm9y
Il0pCisgICAgaWYgKFtbbWVzc2FnZSBib2R5XSBpc0VxdWFsVG9TdHJpbmc6QCJPcGVuUmVxdWVz
dEVycm9yIl0pIHsKICAgICAgICAgcmVjZWl2ZWRBdExlYXN0T25lT3BlbkVycm9yID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxhc3RTY3JpcHRNZXNzYWdlID0gW21lc3Nh
Z2UgYm9keV07CiB9CiAKIEBlbmQKIAogVEVTVChJbmRleGVkREIsIERhdGFiYXNlUHJvY2Vzc0tp
bGwpCiB7Ci0gICAgUmV0YWluUHRyPERhdGFiYXNlUHJvY2Vzc0tpbGxNZXNzYWdlSGFuZGxlcj4g
aGFuZGxlciA9IGFkb3B0TlMoW1tEYXRhYmFzZVByb2Nlc3NLaWxsTWVzc2FnZUhhbmRsZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW0RhdGFiYXNlUHJvY2Vzc0tpbGxNZXNzYWdl
SGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0
aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxl
ci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OwpAQCAtMTAwLDMgKzEwNiw0NCBAQCBURVNUKEluZGV4ZWREQiwgRGF0YWJhc2VQcm9jZXNzS2ls
bCkKICAgICBFWFBFQ1RfRVEocmVjZWl2ZWRBdExlYXN0T25lRGVsZXRlRXJyb3IsIHRydWUpOwog
ICAgIEVYUEVDVF9FUShkYXRhYmFzZUVycm9yUmVjZWl2ZWQsIHRydWUpOwogfQorCitURVNUKElu
ZGV4ZWREQiwgT25lVk1QZXJUaHJlYWQpCit7CisgICAgUmV0YWluUHRyPERhdGFiYXNlUHJvY2Vz
c0tpbGxNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tEYXRhYmFzZVByb2Nlc3NL
aWxsTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29u
dHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVz
dEhhbmRsZXIiXTsKKyAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBb
V0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOworCisgICAgCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
LmdldCgpXSk7CisgICAgYXV0byBzZWNvbmRXZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgCisgICAgTlNTdHJpbmcgKmh0bWxT
dHJpbmcgPSBAIjxzY3JpcHQ+IFwKKyAgICAgICAgZnVuY3Rpb24gb3BlbkRhdGFiYXNlKCkgeyBc
CisgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCd0ZXN0REInKTsgXAor
ICAgICAgICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkgeyBc
CisgICAgICAgICAgICAgICAgbGV0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsgXAorICAgICAg
ICAgICAgICAgIGxldCBvcyA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0T1MnKTtcCisgICAg
ICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSBcCisgICAgICAgICAg
ICAgICAgICAgIG9zLnB1dChpLCBpKTsgXAorICAgICAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdl
SGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ09wZW5lZCcpO1wKKyAgICAgICAgICAg
IH07IFwKKyAgICAgICAgfVwKKyAgICAgICAgPC9zY3JpcHQ+IjsKKworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpodG1sU3RyaW5nIGJhc2VVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmciXV07CisgICAgW3NlY29uZFdlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmh0bWxTdHJpbmcgYmFzZVVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vYXBwbGUuY29tIl1dOworCisgICAgcmVjZWl2ZWRTY3JpcHRNZXNz
YWdlID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAib3BlbkRhdGFi
YXNlKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworICAgIEVYUEVDVF9XS19TVFJFUShAIk9wZW5l
ZCIsIGxhc3RTY3JpcHRNZXNzYWdlLmdldCgpKTsKKworICAgIGtpbGwoW3dlYlZpZXcgX3dlYlBy
b2Nlc3NJZGVudGlmaWVyXSwgU0lHS0lMTCk7CisKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2Ug
PSBmYWxzZTsKKyAgICBbc2Vjb25kV2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJvcGVuRGF0
YWJhc2UoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICBsYXN0U2NyaXB0TWVzc2FnZSA9
IG5pbDsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiT3BlbmVkIiwgbGFzdFNjcmlwdE1lc3NhZ2UuZ2V0
KCkpOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>