<?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>211595</bug_id>
          
          <creation_ts>2020-05-07 14:19:17 -0700</creation_ts>
          <short_desc>Code pattern in GC tests in LayoutTests is broken</short_desc>
          <delta_ts>2020-05-08 12:58:40 -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>DOM</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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>keith_miller</cc>
    
    <cc>philipj</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1650348</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-07 14:19:17 -0700</bug_when>
    <thetext>A lot of GC tests in LayoutTests are broken, they are not assuming that JavaScriptCore is using conservative GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650351</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-07 14:26:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/62993121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650354</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-07 14:33:46 -0700</bug_when>
    <thetext>These tests are doing,

1. Allocate one object
2. Invoking GC repeatedly until we observe that (1)&apos;s object is collected

This is not the right approach. If we allocate only one object without using loop, it is very possible that this one object&apos;s address exists in some of CPU register in some case, and it is kept alive.

The right approach is,

1. Allocating many objects with loop. This ensures that stack / register can only include some of them. Not all of them. If the objects are allocated in a loop, then it is super possible that next iteration can overwrite the same register / stack location with new object, and old object is not in the conservative root (that&apos;s why we recommend using loop for GC test).
2. Invoking GC repeatedly, and check one of (1) is at least collected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650357</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-07 14:42:45 -0700</bug_when>
    <thetext>For example, LayoutTests/resize-observer/element-leak.html is great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650437</commentid>
    <comment_count>4</comment_count>
      <attachid>398820</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-07 17:58:36 -0700</bug_when>
    <thetext>Created attachment 398820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650444</commentid>
    <comment_count>5</comment_count>
      <attachid>398820</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-07 18:24:16 -0700</bug_when>
    <thetext>Comment on attachment 398820
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650447</commentid>
    <comment_count>6</comment_count>
      <attachid>398820</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-05-07 18:30:20 -0700</bug_when>
    <thetext>Comment on attachment 398820
Patch

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

r=me with some comments.

&gt; LayoutTests/ChangeLog:19
&gt; +        This is not being a problem in practice. Web pages are executing various kind of code and they clobber conservative roots. However, tests in

Typo: This is not being a =&gt; This is not a

&gt; LayoutTests/ChangeLog:30
&gt; +            3. Repeatedly invoke GC and test whether *one of (1) iframes* gets collected at least. Theoretically this is still possible that completely
&gt; +               unrelated integer value in conservative roots can point to the reference of (1). By allocating many iframes in (1) and testing one of them,
&gt; +               we can reduce the possibility of this conflict.

I have a minor quip with this approach. I think you should only have to invoke GC once. If the first GC fails I doubt any subsequent ones will do any better. Ideally, it would also be an async GC so as much of the stack can be cleared as possible. Maybe we should provide such an API to WebCore? It could be as simple as `setTimeout(syncGC, 0)`

&gt; LayoutTests/http/tests/resources/gc.js:53
&gt; +        await waitFor(50);

Why do we need the await? isn&apos;t gc() sync?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650454</commentid>
    <comment_count>7</comment_count>
      <attachid>398820</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-07 18:47:48 -0700</bug_when>
    <thetext>Comment on attachment 398820
Patch

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

&gt;&gt; LayoutTests/ChangeLog:19
&gt;&gt; +        This is not being a problem in practice. Web pages are executing various kind of code and they clobber conservative roots. However, tests in
&gt; 
&gt; Typo: This is not being a =&gt; This is not a

Fixed.

&gt;&gt; LayoutTests/ChangeLog:30
&gt;&gt; +               we can reduce the possibility of this conflict.
&gt; 
&gt; I have a minor quip with this approach. I think you should only have to invoke GC once. If the first GC fails I doubt any subsequent ones will do any better. Ideally, it would also be an async GC so as much of the stack can be cleared as possible. Maybe we should provide such an API to WebCore? It could be as simple as `setTimeout(syncGC, 0)`

I think it would be possible that multiple GC cycles can be effective.
For example,

1. An object has Strong&lt;&gt; or something in its field while it is correctly handled to make non-cyclic leak
2. First GC makes this object dead
3. The destructor of (2) will destroy Strong&lt;&gt;
4. Then, the second GC makes held object of Strong&lt;&gt; dead

&gt;&gt; LayoutTests/http/tests/resources/gc.js:53
&gt;&gt; +        await waitFor(50);
&gt; 
&gt; Why do we need the await? isn&apos;t gc() sync?

Three reasons,

1. This `gc()` is async
2. Want to continue the next iteration in the new macro-task (setTimeout) to ensure that RunLoop is iterated (and stack is once cleared)
3. Because the original code was using this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650665</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-08 10:14:24 -0700</bug_when>
    <thetext>Committed r261391: &lt;https://trac.webkit.org/changeset/261391&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650725</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-08 12:58:40 -0700</bug_when>
    <thetext>Note that I picked 20 iframe count which comes from resize-observer/element-leak.html.
And I&apos;ve ensured that this is enough at least for Release builds in my local environment. But not sure how it is in Debug builds (it will generate code which uses CPU registers / stack in a different manner).
At least, in EWS, they are not failing. But if we still see the flakiness, we will increase it a bit. But I believe 20 is enough.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398820</attachid>
            <date>2020-05-07 17:58:36 -0700</date>
            <delta_ts>2020-05-07 18:24:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211595-20200507175836.patch</filename>
            <type>text/plain</type>
            <size>29758</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxMzA1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWY3NmI1NjFmNWZkZjkwNjk0Nzhj
ODZjNDk2NGY2Y2VjZTE1Y2FlZi4uMzRiNDI3ZGZmMWIzN2QwOGY4NjNhYzc0YzRlYTVhMGNlYzU1
MWFkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIwLTA1LTA3ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgQ29kZSBwYXR0ZXJuIGluIEdDIHRlc3RzIGlu
IExheW91dFRlc3RzIGlzIGJyb2tlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjExNTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTGF5b3V0VGVzdHMgaGF2ZSBzZXZlcmFsIHRlc3RzIHdoaWNoIGF0dGVt
cHQgdG8gZW5zdXJlIHRoYXQgZG9jdW1lbnQgaXMgbm90IGxlYWtlZC4gQnV0IHRoZXkgYXJlIGJy
b2tlbiBzaW5jZSB0aGVzZSB0ZXN0cyBhcmUgbm90IGNvcnJlY3RseQorICAgICAgICBoYW5kbGlu
ZyBjb25zZXJ2YXRpdmUgR0Mgb2YgSmF2YVNjcmlwdENvcmUuIFRoZXNlIHRlc3RzIGFyZSB0YWtp
bmcgYSBmb2xsb3dpbmcgYXBwcm9hY2guCisKKyAgICAgICAgICAgIDEuIEFsbG9jYXRlICpvbmUq
IGlmcmFtZSBkb2luZyBzb21ldGhpbmcgaW5zaWRlIGl0LgorICAgICAgICAgICAgMi4gUmVtb3Zl
IGlmcmFtZSBmcm9tIHRoZSBwYXJlbnQgZG9jdW1lbnQgdG8gbWFrZSBpdCByZWxlYXNlZC4KKyAg
ICAgICAgICAgIDMuIFJlcGVhdGVkbHkgaW52b2tlIEdDIGFuZCB0ZXN0IHdoZXRoZXIgKDEpJ3Mg
ZG9jdW1lbnQgZ2V0cyBjb2xsZWN0ZWQuCisKKyAgICAgICAgVGhpcyBpcyBub3QgdGhlIHJpZ2h0
IGFwcHJvYWNoLiBTaW5jZSBKYXZhU2NyaXB0Q29yZSBoYXMgY29uc2VydmF0aXZlIEdDLCBpdCBp
cyBlYXNpbHkgcG9zc2libGUgdGhhdCAoMSkncyBwb2ludGVyIHZhbHVlIHJlbWFpbnMgaW4gc29t
ZSBvZgorICAgICAgICBjb25zZXJ2YXRpdmUgcm9vdHM6IENQVSByZWdpc3RlcnMsIHN0YWNrIGV0
Yy4gQW5kIEphdmFTY3JpcHRDb3JlIGNvbnNlcnZhdGl2ZSBHQyBzY2FucyBpdCBhbmQga2VlcHMg
aXQgYWxpdmUuIFRoZSBhYm92ZSBhcHByb2FjaCBtYWtlcyB0aGUKKyAgICAgICAgdGVzdCBzdXBl
ciBmbGFreSBhbmQgYW55IHVucmVsYXRlZCBjaGFuZ2VzIGluIEphdmFTY3JpcHRDb3JlIGFuZCBD
IGNvbXBpbGVyIGNhbiBtYWtlIHRoaXMgdGVzdCBmYWlsZWQuCisKKyAgICAgICAgVGhpcyBpcyBu
b3QgYmVpbmcgYSBwcm9ibGVtIGluIHByYWN0aWNlLiBXZWIgcGFnZXMgYXJlIGV4ZWN1dGluZyB2
YXJpb3VzIGtpbmQgb2YgY29kZSBhbmQgdGhleSBjbG9iYmVyIGNvbnNlcnZhdGl2ZSByb290cy4g
SG93ZXZlciwgdGVzdHMgaW4KKyAgICAgICAgTGF5b3V0VGVzdHMgYXJlIHRvbyBzaW1wbGUgdG8g
a2VlcCBpdCBhbGl2ZSBhY2NpZGVudGFsbHkuCisKKyAgICAgICAgVGhlIHJpZ2h0IGFwcHJvYWNo
IGZvciBjb25zZXJ2YXRpdmUgR0MgaXMgdGhlIGZvbGxvd2luZy4KKworICAgICAgICAgICAgMS4g
QWxsb2NhdGUgKm1hbnkqIGlmcmFtZXMgZG9pbmcgc29tZXRoaW5nIGluc2lkZSB0aGVtIHdpdGgg
bG9vcC4gQnkgY3JlYXRpbmcgaWZyYW1lcyB3aXRoIGxvb3AsIGZvciBldmVyeSBpdGVyYXRpb24s
IGl0IGlzIGxpa2VseSB0aGF0CisgICAgICAgICAgICAgICB0aGUgc2FtZSBDUFUgcmVnaXN0ZXJz
IGFuZCBzdGFjayBsb2NhdGlvbnMgYXJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBsYXN0IGNyZWF0ZWQg
aWZyYW1lIHJlZmVyZW5jZS4gVGhpcyBkcmFtYXRpY2FsbHkgcmVkdWNlcyB0aGUgcG9zc2liaWxp
dHkKKyAgICAgICAgICAgICAgIGZvciBHQyB0byBmaW5kIHRoZXNlIGFkZHJlc3NlcyBpbiBjb25z
ZXJ2YXRpdmUgcm9vdHMuCisgICAgICAgICAgICAyLiBSZW1vdmUgaWZyYW1lcyBmcm9tIHRoZSBw
YXJlbnQgZG9jdW1lbnQgdG8gbWFrZSB0aGVtIHJlbGVhc2VkLgorICAgICAgICAgICAgMy4gUmVw
ZWF0ZWRseSBpbnZva2UgR0MgYW5kIHRlc3Qgd2hldGhlciAqb25lIG9mICgxKSBpZnJhbWVzKiBn
ZXRzIGNvbGxlY3RlZCBhdCBsZWFzdC4gVGhlb3JldGljYWxseSB0aGlzIGlzIHN0aWxsIHBvc3Np
YmxlIHRoYXQgY29tcGxldGVseQorICAgICAgICAgICAgICAgdW5yZWxhdGVkIGludGVnZXIgdmFs
dWUgaW4gY29uc2VydmF0aXZlIHJvb3RzIGNhbiBwb2ludCB0byB0aGUgcmVmZXJlbmNlIG9mICgx
KS4gQnkgYWxsb2NhdGluZyBtYW55IGlmcmFtZXMgaW4gKDEpIGFuZCB0ZXN0aW5nIG9uZSBvZiB0
aGVtLAorICAgICAgICAgICAgICAgd2UgY2FuIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgdGhp
cyBjb25mbGljdC4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGVzdERvY3VtZW50SXNOb3RM
ZWFrZWQgaGVscGVyIGZ1bmN0aW9uIHRvIGVuZm9yY2UgdGhpcyBwYXR0ZXJuLiBBbmQgcmV3cml0
ZSBicm9rZW4gdGVzdHMgd2l0aCB0aGlzIGhlbHBlciB0byBtYWtlIGl0IGxlc3MtZmxha3kuCisK
KyAgICAgICAgKiBoaWdobGlnaHQvaGlnaGxpZ2h0LXdvcmxkLWxlYWsuaHRtbDoKKyAgICAgICAg
KiBodHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0dHBzLmh0bWw6Cisg
ICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS9jbGVhcmtleS9jb2xsZWN0LXdlYmtpdC1tZWRpYS1z
ZXNzaW9uLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0vY29s
bGVjdC1tZWRpYS1kZXZpY2VzLmh0dHBzLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9yZXNv
dXJjZXMvZ2MuanM6IEFkZGVkLgorICAgICAgICAod2luZG93LmdjLmdjUmVjKToKKyAgICAgICAg
KHdpbmRvdy5nYy53aW5kb3cuZ2MpOgorICAgICAgICAobnVrZUFycmF5KToKKyAgICAgICAgKGFz
eW5jIHRlc3REb2N1bWVudElzTm90TGVha2VkKToKKyAgICAgICAgKiBpbnRlcnNlY3Rpb24tb2Jz
ZXJ2ZXIvbm8tZG9jdW1lbnQtbGVhay5odG1sOgorICAgICAgICAqIHBlcmZvcm1hbmNlLWFwaS9w
ZXJmb3JtYW5jZS1vYnNlcnZlci1uby1kb2N1bWVudC1sZWFrLmh0bWw6CisgICAgICAgICogcmVz
b3VyY2VzL2djLmpzOgorICAgICAgICAobnVrZUFycmF5KToKKyAgICAgICAgKGFzeW5jIHRlc3RE
b2N1bWVudElzTm90TGVha2VkKToKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2xlYWstZG9jdW1l
bnQtd2l0aC13ZWItYW5pbWF0aW9uLmh0bWw6CisKIDIwMjAtMDUtMDcgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBtYXJrIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9icm93c2luZy10aGUtd2ViL2hpc3Rv
cnktdHJhdmVyc2FsL3Njcm9sbC1yZXN0b3JhdGlvbi1vcmRlci5odG1sIGFzIGZsYWt5IG9uIGlP
Uy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2hpZ2hsaWdodC9oaWdobGlnaHQtd29ybGQtbGVh
ay5odG1sIGIvTGF5b3V0VGVzdHMvaGlnaGxpZ2h0L2hpZ2hsaWdodC13b3JsZC1sZWFrLmh0bWwK
aW5kZXggZGU2NjU1MTVhYWY1Y2JiMzQxYjg3MGI3YTc3MjMxZTIxZjQyZTY1ZS4uN2IzMGUwYjQ3
YTk1MDg3ZGQ5ZjA0YmExNzlhNTM4ZDg5N2RkYzhhZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aGlnaGxpZ2h0L2hpZ2hsaWdodC13b3JsZC1sZWFrLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaGln
aGxpZ2h0L2hpZ2hsaWdodC13b3JsZC1sZWFrLmh0bWwKQEAgLTEsMzYgKzEsNDggQEAKIDwhRE9D
VFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KLTxpZnJhbWUgaWQ9InRlc3RGcmFtZSIgc3JjPSJy
ZXNvdXJjZXMvaGlnaGxpZ2h0LWZyYW1lLmh0bWwiPjwvaWZyYW1lPgogPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2djLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBkZXNjcmlwdGlvbigiVGVzdHMgdGhh
dCB1c2luZyBIaWdobGlnaHQgZG9lcyBub3QgY2F1c2UgdGhlIGRvY3VtZW50IHRvIGdldCBsZWFr
ZWQuIik7CiB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CiAKLWZ1bmN0aW9uIGRvY3VtZW50
U2hvdWxkRGllKGRvY3VtZW50SWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgIGhhbmRsZSA9IHNldEludGVydmFs
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZ2MoKTsKLSAgICAgICAgICAgIGlmIChpbnRlcm5h
bHMgJiYgIWludGVybmFscy5pc0RvY3VtZW50QWxpdmUoZG9jdW1lbnRJZGVudGlmaWVyKSkgewot
ICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaGFuZGxlKTsKLSAgICAgICAgICAgICAgICBy
ZXNvbHZlKCk7Cit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgIHRlc3REb2N1bWVu
dElzTm90TGVha2VkKAorICAgICAgICBhc3luYyBmdW5jdGlvbiBpbml0QW5kUmVtb3ZlKGZyYW1l
Q291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxldCBmcmFtZXMgPSBhd2FpdCBuZXcgUHJv
bWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IGZyYW1lcyA9
IFtdOworICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDsKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbiBvbkxvYWQoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gZnJhbWVDb3VudCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc29sdmUoZnJhbWVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbGV0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7Cisg
ICAgICAgICAgICAgICAgICAgIGZyYW1lLnNyYyA9ICJyZXNvdXJjZXMvaGlnaGxpZ2h0LWZyYW1l
Lmh0bWwiOworICAgICAgICAgICAgICAgICAgICBmcmFtZS5vbmxvYWQgPSBvbkxvYWQ7CisgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOworICAgICAg
ICAgICAgICAgICAgICBmcmFtZXMucHVzaChmcmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBsZXQgZnJhbWVJZGVudGlmaWVycyA9IFtdOworICAg
ICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBsZXQgZnJhbWUgPSBmcmFtZXNbaV07CisgICAgICAgICAgICAgICAgZnJhbWVJZGVu
dGlmaWVycy5wdXNoKGludGVybmFscy5kb2N1bWVudElkZW50aWZpZXIoZnJhbWUuY29udGVudERv
Y3VtZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUucmVtb3ZlKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0sIDEwKTsKLSAgICB9KTsKLX0KLQotdmFyIHRlc3RGcmFtZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0ZXN0RnJhbWUiKTsKLW9ubG9hZCA9IGZ1bmN0aW9uKCkgewotICAg
IGxldCBmcmFtZURvY3VtZW50SWRlbnRpZmllciA9IGludGVybmFscy5kb2N1bWVudElkZW50aWZp
ZXIodGVzdEZyYW1lLmNvbnRlbnREb2N1bWVudCk7Ci0gICAgdGVzdEZyYW1lLnJlbW92ZSgpOwot
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGRvY3VtZW50U2hvdWxkRGllKGZy
YW1lRG9jdW1lbnRJZGVudGlmaWVyKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdGVz
dFBhc3NlZCgiRG9jdW1lbnQgZGlkIG5vdCBsZWFrIik7Ci0gICAgICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgICAgICAgICBudWtlQXJyYXkoZnJhbWVz
KTsKKyAgICAgICAgICAgIGZyYW1lcyA9IG51bGw7CisgICAgICAgICAgICByZXR1cm4gZnJhbWVJ
ZGVudGlmaWVyczsKKyAgICAgICAgfQorICAgICkudGhlbigKKyAgICAgICAgKCkgPT4gdGVzdFBh
c3NlZCgiRG9jdW1lbnQgZGlkIG5vdCBsZWFrIiksCisgICAgICAgIChlcnJvcikgPT4gdGVzdEZh
aWxlZChlcnJvci5tZXNzYWdlKQorICAgICkuZmluYWxseShmaW5pc2hKU1Rlc3QpOwogfTsKKwog
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4
ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0dHBzLmh0bWwKaW5kZXggODRjYTE5
NmQyYzQ4MGFmNjYyYWRlMDc5YjdlZGNiYTAwMDJhOGJlNy4uYTczZGRkMGEyZTVmOTA2NDZiYjkx
MTM0MWQxNGNiMjMwOTgwMGViMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9J
bmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvSW5kZXhlZERCL2NvbGxlY3QtSURCLW9iamVjdHMuaHR0cHMuaHRtbApAQCAt
Miw0NyArMiw1MSBAQAogPG1ldGEgY2hhcnNldD0idXRmLTgiPgogPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
Z2MuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KLWZ1bmN0aW9uIHdhaXRGb3IoZHVyYXRpb24pCi17
Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUs
IGR1cmF0aW9uKSk7Ci19CiAKLXZhciByZXNvbHZlQ2FsbGJhY2ssIHJlamVjdENhbGxiYWNrOwog
dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7Ci0gICAgcmVz
b2x2ZUNhbGxiYWNrID0gcmVzb2x2ZTsKLSAgICByZWplY3RDYWxsYmFjayA9IHJlamVjdDsKLX0p
OwotCi1hc3luYyBmdW5jdGlvbiBkb25lKCkKLXsKLSAgICB0cnkgewotICAgICAgICBjb25zdCBm
cmFtZUlkZW50aWZpZXIgPSBpbnRlcm5hbHMuZG9jdW1lbnRJZGVudGlmaWVyKGlmcmFtZS5jb250
ZW50RG9jdW1lbnQpOwotICAgICAgICBpZnJhbWUuc3JjID0gIm5vbi1leGlzdGVudC1mcmFtZSI7
Ci0gICAgICAgIGxldCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKCsrY291bnRlciA8IDUw
KSB7Ci0gICAgICAgICAgICBpZiAoIWludGVybmFscy5pc0RvY3VtZW50QWxpdmUoZnJhbWVJZGVu
dGlmaWVyKSkgewotICAgICAgICAgICAgICAgIHJlc29sdmVDYWxsYmFjaygpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aW5kb3cuR0ND
b250cm9sbGVyKQotICAgICAgICAgICAgICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7Ci0KLSAg
ICAgICAgICAgIGF3YWl0IHdhaXRGb3IoNTApOwotICAgICAgICB9Ci0gICAgICAgIHJlamVjdENh
bGxiYWNrKCJUZXN0IGZhaWxlZCIpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgcmVqZWN0
Q2FsbGJhY2soIlRlc3QgZmFpbGVkOiBleGNlcHRpb24gIiArIGUpOworICAgIGlmICghd2luZG93
LmludGVybmFscykgeworICAgICAgICByZWplY3QoIlRlc3QgcmVxdWlyZSBpbnRlcm5hbHMgQVBJ
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9Ci19Ci0KLXdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCJtZXNzYWdlIiwgZG9uZSk7CisgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgbGV0IHByb21pc2UgPSB0ZXN0RG9jdW1lbnRJc05vdExlYWtlZCgKKyAgICAgICAgICAg
IGFzeW5jIGZ1bmN0aW9uIGluaXRBbmRSZW1vdmUoZnJhbWVDb3VudCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBsZXQgZnJhbWVzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUs
IHJlamVjdCkgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWVzID0gW107CisgICAg
ICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gb25NZXNzYWdlKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcisrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gZnJhbWVDb3VudCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZyYW1lcyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3Nh
Z2UiLCBvbk1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGZyYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZyYW1lID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZS5zcmMgPSAicmVzb3VyY2VzL215aWRiZnJhbWUuaHRtIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhbWVzLnB1c2goZnJhbWUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgbGV0IGZyYW1lSWRlbnRpZmllcnMg
PSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWUgPSBmcmFtZXNbaV07CisgICAgICAg
ICAgICAgICAgICAgIGZyYW1lSWRlbnRpZmllcnMucHVzaChpbnRlcm5hbHMuZG9jdW1lbnRJZGVu
dGlmaWVyKGZyYW1lLmNvbnRlbnREb2N1bWVudCkpOworICAgICAgICAgICAgICAgICAgICBmcmFt
ZS5zcmMgPSAibm9uLWV4aXN0ZW50LWZyYW1lIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbnVrZUFycmF5KGZyYW1lcyk7CisgICAgICAgICAgICAgICAgZnJhbWVzID0gbnVs
bDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVJZGVudGlmaWVyczsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgKTsKKyAgICAgICAgcmVzb2x2ZShwcm9taXNlKTsKKyAgICB9OworfSk7CiAK
IHByb21pc2VfdGVzdCgodGVzdCkgPT4gewotICAgIGlmICghd2luZG93LmludGVybmFscykKLSAg
ICAgICAgcmVqZWN0Q2FsbGJhY2soIlRlc3QgcmVxdWlyZSBpbnRlcm5hbHMgQVBJIik7CiAgICAg
cmV0dXJuIHByb21pc2U7CiB9LCAiRW5zdXJpbmcgZnJhbWUgZG9jdW1lbnQgZ2V0cyBjb2xsZWN0
ZWQgYWZ0ZXIgYmVpbmcgc3RvcHBlZCBpbiB0aGUgbWlkZGxlIG9mIElEQiBvcGVyYXRpb25zIik7
CiAKIDwvc2NyaXB0PgotPGlmcmFtZSBzcmM9InJlc291cmNlcy9teWlkYmZyYW1lLmh0bSIgaWQ9
ImlmcmFtZSI+PC9pZnJhbWU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21l
ZGlhL2NsZWFya2V5L2NvbGxlY3Qtd2Via2l0LW1lZGlhLXNlc3Npb24uaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvbWVkaWEvY2xlYXJrZXkvY29sbGVjdC13ZWJraXQtbWVkaWEtc2Vzc2lv
bi5odG1sCmluZGV4IDY0NGQ4ZTk2OTE3YTUzZWRjMDRjZjkxYzcyNzBiMjY1MmYwNmE5MWUuLjNh
ODU5OWM2MDlmZjQwZWIxZThhN2FhOWZhZjMyMTVmNzVkYTQwZGQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvY2xlYXJrZXkvY29sbGVjdC13ZWJraXQtbWVkaWEtc2Vz
c2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvY2xlYXJrZXkvY29s
bGVjdC13ZWJraXQtbWVkaWEtc2Vzc2lvbi5odG1sCkBAIC0yLDQ3ICsyLDUxIEBACiA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CiA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9nYy5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0PgotZnVuY3Rpb24gd2FpdEZvcihkdXJhdGlvbikKLXsKLSAgICByZXR1cm4gbmV3IFByb21p
c2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZHVyYXRpb24pKTsKLX0KIAotdmFy
IHJlc29sdmVDYWxsYmFjaywgcmVqZWN0Q2FsbGJhY2s7CiB2YXIgcHJvbWlzZSA9IG5ldyBQcm9t
aXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKLSAgICByZXNvbHZlQ2FsbGJhY2sgPSByZXNvbHZl
OwotICAgIHJlamVjdENhbGxiYWNrID0gcmVqZWN0OwotfSk7Ci0KLWFzeW5jIGZ1bmN0aW9uIGRv
bmUoKQotewotICAgIHRyeSB7Ci0gICAgICAgIGNvbnN0IGZyYW1lSWRlbnRpZmllciA9IGludGVy
bmFscy5kb2N1bWVudElkZW50aWZpZXIoaWZyYW1lLmNvbnRlbnREb2N1bWVudCk7Ci0gICAgICAg
IGlmcmFtZS5zcmMgPSAibm9uLWV4aXN0ZW50LWZyYW1lIjsKLSAgICAgICAgbGV0IGNvdW50ZXIg
PSAwOwotICAgICAgICB3aGlsZSAoKytjb3VudGVyIDwgNTApIHsKLSAgICAgICAgICAgIGlmICgh
aW50ZXJuYWxzLmlzRG9jdW1lbnRBbGl2ZShmcmFtZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzb2x2ZUNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCi0gICAgICAgICAg
ICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKLQotICAgICAgICAgICAgYXdhaXQgd2FpdEZv
cig1MCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVqZWN0Q2FsbGJhY2soIlRlc3QgZmFpbGVkIik7
Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICByZWplY3RDYWxsYmFjaygiVGVzdCBmYWlsZWQ6
IGV4Y2VwdGlvbiAiICsgZSk7CisgICAgaWYgKCF3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAg
IHJlamVjdCgiVGVzdCByZXF1aXJlIGludGVybmFscyBBUEkiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KLX0KLQotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBkb25lKTsKKyAg
ICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBsZXQgcHJvbWlzZSA9IHRl
c3REb2N1bWVudElzTm90TGVha2VkKAorICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gaW5pdEFu
ZFJlbW92ZShmcmFtZUNvdW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxldCBm
cmFtZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAg
ICAgICAgICAgICAgIGxldCBmcmFtZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNv
dW50ZXIgPSAwOworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvbk1lc3NhZ2UoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY291bnRlciA9PSBmcmFtZUNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc29sdmUoZnJhbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdpZnJhbWUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnNyYyA9ICJyZXNvdXJj
ZXMvbXl3ZWJraXRtZWRpYXNlc3Npb25mcmFtZS5odG0iOworICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmcmFtZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFtZXMucHVzaChmcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBsZXQgZnJhbWVJZGVudGlmaWVycyA9IFtdOwor
ICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxldCBmcmFtZSA9IGZyYW1lc1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWVJZGVudGlmaWVycy5wdXNoKGludGVybmFscy5kb2N1bWVudElkZW50aWZpZXIo
ZnJhbWUuY29udGVudERvY3VtZW50KSk7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLnNyYyA9
ICJub24tZXhpc3RlbnQtZnJhbWUiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBudWtlQXJyYXkoZnJhbWVzKTsKKyAgICAgICAgICAgICAgICBmcmFtZXMgPSBudWxsOworICAg
ICAgICAgICAgICAgIHJldHVybiBmcmFtZUlkZW50aWZpZXJzOworICAgICAgICAgICAgfQorICAg
ICAgICApOworICAgICAgICByZXNvbHZlKHByb21pc2UpOworICAgIH07Cit9KTsKIAogcHJvbWlz
ZV90ZXN0KCh0ZXN0KSA9PiB7Ci0gICAgaWYgKCF3aW5kb3cuaW50ZXJuYWxzKQotICAgICAgICBy
ZWplY3RDYWxsYmFjaygiVGVzdCByZXF1aXJlIGludGVybmFscyBBUEkiKTsKICAgICByZXR1cm4g
cHJvbWlzZTsKIH0sICJFbnN1cmUgdGhhdCB0aGUgZnJhbWUncyBkb2N1bWVudCBnZXQgY29sbGVj
dGVkIGFmdGVyIGJlaW5nIHN0b3BwZWQgd2hpbGUgZG9pbmcgc29tZSB3ZWJraXQgbWVkaWEgc2Vz
c2lvbiBjYWxscyIpOwogCiA8L3NjcmlwdD4KLTxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvbXl3ZWJr
aXRtZWRpYXNlc3Npb25mcmFtZS5odG0iIGlkPSJpZnJhbWUiPjwvaWZyYW1lPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zdHJlYW0vY29sbGVjdC1tZWRp
YS1kZXZpY2VzLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL21lZGlh
LXN0cmVhbS9jb2xsZWN0LW1lZGlhLWRldmljZXMuaHR0cHMuaHRtbAppbmRleCBmMzNjNGUxMzVh
M2NjYWQzOTExMjU5NzhlNTA5NDBkYjUwZmU3ZjA2Li5iN2E1YjRmMzU0NTc2OGVkYmUxZGUzMzlk
NGI1MjMxMTI1ZDM2N2I2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlh
L21lZGlhLXN0cmVhbS9jb2xsZWN0LW1lZGlhLWRldmljZXMuaHR0cHMuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXN0cmVhbS9jb2xsZWN0LW1lZGlhLWRldmlj
ZXMuaHR0cHMuaHRtbApAQCAtMiw0NyArMiw1MSBAQAogPG1ldGEgY2hhcnNldD0idXRmLTgiPgog
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvZ2MuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KLWZ1bmN0aW9uIHdh
aXRGb3IoZHVyYXRpb24pCi17Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBz
ZXRUaW1lb3V0KHJlc29sdmUsIGR1cmF0aW9uKSk7Ci19CiAKLXZhciByZXNvbHZlQ2FsbGJhY2ss
IHJlamVjdENhbGxiYWNrOwogdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVq
ZWN0KSA9PiB7Ci0gICAgcmVzb2x2ZUNhbGxiYWNrID0gcmVzb2x2ZTsKLSAgICByZWplY3RDYWxs
YmFjayA9IHJlamVjdDsKLX0pOwotCi1hc3luYyBmdW5jdGlvbiBkb25lKCkKLXsKLSAgICB0cnkg
ewotICAgICAgICBjb25zdCBmcmFtZUlkZW50aWZpZXIgPSBpbnRlcm5hbHMuZG9jdW1lbnRJZGVu
dGlmaWVyKGlmcmFtZS5jb250ZW50RG9jdW1lbnQpOwotICAgICAgICBpZnJhbWUuc3JjID0gIm5v
bi1leGlzdGVudC1mcmFtZSI7Ci0gICAgICAgIGxldCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hp
bGUgKCsrY291bnRlciA8IDUwKSB7Ci0gICAgICAgICAgICBpZiAoIWludGVybmFscy5pc0RvY3Vt
ZW50QWxpdmUoZnJhbWVJZGVudGlmaWVyKSkgewotICAgICAgICAgICAgICAgIHJlc29sdmVDYWxs
YmFjaygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIEdDQ29udHJvbGxl
ci5jb2xsZWN0KCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IHdhaXRGb3IoNTApOwotICAgICAgICB9
Ci0gICAgICAgIHJlamVjdENhbGxiYWNrKCJUZXN0IGZhaWxlZCIpOwotICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgcmVqZWN0Q2FsbGJhY2soIlRlc3QgZmFpbGVkOiBleGNlcHRpb24gIiArIGUp
OworICAgIGlmICghd2luZG93LmludGVybmFscykgeworICAgICAgICByZWplY3QoIlRlc3QgcmVx
dWlyZSBpbnRlcm5hbHMgQVBJIik7CisgICAgICAgIHJldHVybjsKICAgICB9Ci19Ci0KLXdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZG9uZSk7CisgICAgd2luZG93Lm9ubG9hZCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbGV0IHByb21pc2UgPSB0ZXN0RG9jdW1lbnRJc05vdExl
YWtlZCgKKyAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGluaXRBbmRSZW1vdmUoZnJhbWVDb3Vu
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZXQgZnJhbWVzID0gYXdhaXQgbmV3
IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQg
ZnJhbWVzID0gW107CisgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gb25NZXNzYWdlKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnRlcisrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0g
ZnJhbWVDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZyYW1lcyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbGV0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmcmFtZS5zcmMgPSAicmVzb3VyY2VzL215bWVkaWFkZXZpY2Vz
ZnJhbWUuaHRtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzLnB1c2goZnJhbWUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgbGV0IGZyYW1lSWRlbnRpZmllcnMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBsZXQg
ZnJhbWUgPSBmcmFtZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGZyYW1lSWRlbnRpZmllcnMu
cHVzaChpbnRlcm5hbHMuZG9jdW1lbnRJZGVudGlmaWVyKGZyYW1lLmNvbnRlbnREb2N1bWVudCkp
OworICAgICAgICAgICAgICAgICAgICBmcmFtZS5zcmMgPSAibm9uLWV4aXN0ZW50LWZyYW1lIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbnVrZUFycmF5KGZyYW1lcyk7Cisg
ICAgICAgICAgICAgICAgZnJhbWVzID0gbnVsbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnJh
bWVJZGVudGlmaWVyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICAgICAgcmVzb2x2
ZShwcm9taXNlKTsKKyAgICB9OworfSk7CiAKIHByb21pc2VfdGVzdCgodGVzdCkgPT4gewotICAg
IGlmICghd2luZG93LmludGVybmFscykKLSAgICAgICAgcmVqZWN0Q2FsbGJhY2soIlRlc3QgcmVx
dWlyZSBpbnRlcm5hbHMgQVBJIik7CiAgICAgcmV0dXJuIHByb21pc2U7CiB9LCAiRW5zdXJlIHRo
YXQgdGhlIGZyYW1lJ3MgZG9jdW1lbnQgZ2V0IGNvbGxlY3RlZCBhZnRlciBiZWluZyBzdG9wcGVk
IHdoaWxlIHVzaW5nIE1lZGlhRGV2aWNlcyIpOwogCiA8L3NjcmlwdD4KLTxpZnJhbWUgc3JjPSJy
ZXNvdXJjZXMvbXltZWRpYWRldmljZXNmcmFtZS5odG0iIGlkPSJpZnJhbWUiPjwvaWZyYW1lPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZXMvZ2MuanMgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy9nYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MmI4MjY0NTlj
ZDIxMGNmN2I2ZDliNDc1NmYzMmI1OWY2NTEzMWEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZXMvZ2MuanMKQEAgLTAsMCArMSw1NyBAQAorLy8gSWYg
dGhlcmUgaXMgbm8gd2luZG93LmdjKCkgYWxyZWFkeSBkZWZpbmVkLCBkZWZpbmUgb25lIHVzaW5n
IHRoZSBiZXN0CisvLyBtZXRob2Qgd2UgY2FuIGZpbmQuCisvLyBUaGUgc2xvdyBmYWxsYmFjayBz
aG91bGQgbm90IGhpdCBpbiB0aGUgYWN0dWFsIHRlc3QgZW52aXJvbm1lbnQuCitpZiAoIXdpbmRv
dy5nYykKK3sKKyAgICB3aW5kb3cuZ2MgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
d2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29s
bGVjdCgpOworCisgICAgICAgIGNvbnNvbGUud2FybignVGVzdHMgYXJlIHJ1bm5pbmcgd2l0aG91
dCB0aGUgYWJpbGl0eSB0byBkbyBtYW51YWwgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGV5IHdpbGwg
c3RpbGwgd29yaywgYnV0IGNvdmVyYWdlIHdpbGwgYmUgc3Vib3B0aW1hbC4nKTsKKyAgICAgICAg
ZnVuY3Rpb24gZ2NSZWMobikgeworICAgICAgICAgICAgaWYgKG4gPCAxKQorICAgICAgICAgICAg
ICAgIHJldHVybiB7fTsKKyAgICAgICAgICAgIHZhciB0ZW1wID0ge2k6ICJhYiIgKyBpICsgKGkg
LyAxMDAwMDApfTsKKyAgICAgICAgICAgIHRlbXAgKz0gImZvbyI7CisgICAgICAgICAgICBnY1Jl
YyhuLTEpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkr
KykKKyAgICAgICAgICAgIGdjUmVjKDEwKTsKKyAgICB9Cit9CisKKy8vIEZpbGwgYXJyYXkgd2l0
aCBudWxsIHRvIGF2b2lkIHBvdGVudGlhbCBHQyByZWFjaGFiaWxpdHkuIGZyYW1lcyA9IG51bGwg
Y2FuIGJlIGVub3VnaCBpbiA5OS45JSBjYXNlcywKKy8vIGJ1dCB3ZSBhcmUgZXh0cmEgY2FyZWZ1
bCB0byBtYWtlIHRlc3RzIG5vbi1mbGFreTogY29uc2lkZXJpbmcgYWJvdXQgdGhlIGNhc2UgdGhh
dCBhcnJheSBpcyBjYXB0dXJlZAorLy8gc29tZXdoZXJlIChsaWtlIERGRyBjb25zdGFudHMpLgor
ZnVuY3Rpb24gbnVrZUFycmF5KGFycmF5KQoreworICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5k
ZXggPCBhcnJheS5sZW5ndGg7ICsraW5kZXgpCisgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7
CisgICAgYXJyYXkubGVuZ3RoID0gMDsKK30KKworYXN5bmMgZnVuY3Rpb24gdGVzdERvY3VtZW50
SXNOb3RMZWFrZWQoaW5pdCwgb3B0aW9ucyA9IHt9KQoreworICAgIGxldCBnY0NvdW50ID0gb3B0
aW9ucy5nY0NvdW50ID8/IDUwOworICAgIGxldCBkb2N1bWVudENvdW50ID0gb3B0aW9ucy5kb2N1
bWVudENvdW50ID8/IDIwOworICAgIGxldCBhZGRpdGlvbmFsQ2hlY2sgPSBvcHRpb25zLmFkZGl0
aW9uYWxDaGVjayA/PyBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9OworCisgICAgZnVuY3Rp
b24gd2FpdEZvcihkdXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgo
cmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkdXJhdGlvbikpOworICAgIH0KKworICAg
IGxldCBmcmFtZUlkZW50aWZpZXJzID0gYXdhaXQgaW5pdChkb2N1bWVudENvdW50KTsKKyAgICBm
b3IgKGxldCBjb3VudGVyID0gMDsgY291bnRlciA8IGdjQ291bnQ7ICsrY291bnRlcikgeworICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICAg
ICAgbGV0IGZyYW1lSWRlbnRpZmllciA9IGZyYW1lSWRlbnRpZmllcnNbaV07CisgICAgICAgICAg
ICBpZiAoIWludGVybmFscy5pc0RvY3VtZW50QWxpdmUoZnJhbWVJZGVudGlmaWVyKSAmJiBhZGRp
dGlvbmFsQ2hlY2soKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3VtZW50IGRpZCBub3Qg
bGVhayI7CisgICAgICAgIH0KKyAgICAgICAgZ2MoKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcig1
MCk7CisgICAgfQorCisgICAgdGhyb3cgbmV3IEVycm9yKCJEb2N1bWVudCBpcyBsZWFrZWQiKTsK
K30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ludGVyc2VjdGlvbi1vYnNlcnZlci9uby1kb2N1
bWVudC1sZWFrLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvbm8tZG9j
dW1lbnQtbGVhay5odG1sCmluZGV4IDI4ZDVkNDRiY2NjMTdhNzY0YzI3NGMzZjM2MmUwOGI5ODM4
ZmQyODMuLjVmZDc0MjY0MGI1YmZjMjE4NjdiYmUzNDU5ODA0MTEyMmVhYjJmNGMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ludGVyc2VjdGlvbi1vYnNlcnZlci9uby1kb2N1bWVudC1sZWFrLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL25vLWRvY3VtZW50LWxl
YWsuaHRtbApAQCAtMiwzNyArMiw2MCBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9nYy5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keT4KLTxpZnJhbWUgaWQ9InRl
c3RGcmFtZSIgc3JjPSJyZXNvdXJjZXMvbm8tZG9jdW1lbnQtbGVhay1mcmFtZS5odG1sIj48L2lm
cmFtZT4KKzxpZnJhbWUgaWQ9InRlc3RGcmFtZSIgc3JjPT48L2lmcmFtZT4KIDxzY3JpcHQ+CiBk
ZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB1c2luZyBJbnRlcnNlY3Rpb25PYnNlcnZlciBkb2VzIG5v
dCBjYXVzZSB0aGUgZG9jdW1lbnQgdG8gZ2V0IGxlYWtlZC4iKTsKIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKIAotZnVuY3Rpb24gZG9jdW1lbnRTaG91bGREaWUoZG9jdW1lbnRJZGVudGlm
aWVyKQotewotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKLSAgICAgICAgaGFuZGxlID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICBnYygpOwotICAgICAgICAgICAgaWYgKGludGVybmFscyAmJiAhaW50ZXJuYWxzLmlzRG9jdW1l
bnRBbGl2ZShkb2N1bWVudElkZW50aWZpZXIpICYmIGludGVybmFscy5udW1iZXJPZkludGVyc2Vj
dGlvbk9ic2VydmVycyhkb2N1bWVudCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGNsZWFySW50
ZXJ2YWwoaGFuZGxlKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlKCk7CitsZXQgdG90YWxDb3Vu
dCA9IDA7Cit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgIHRlc3REb2N1bWVudElz
Tm90TGVha2VkKAorICAgICAgICBhc3luYyBmdW5jdGlvbiBpbml0QW5kUmVtb3ZlKGZyYW1lQ291
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRvdGFsQ291bnQgPSBmcmFtZUNvdW50OworICAg
ICAgICAgICAgbGV0IGZyYW1lcyA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3Qp
ID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgZnJhbWVzID0gW107CisgICAgICAgICAgICAgICAg
bGV0IGNvdW50ZXIgPSAwOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9uTG9hZCgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY291bnRlcisrOworICAgICAgICAgICAgICAgICAgICBpZiAoY291
bnRlciA9PSBmcmFtZUNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmcmFt
ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IGZyYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJh
bWUuc3JjID0gInJlc291cmNlcy9uby1kb2N1bWVudC1sZWFrLWZyYW1lLmh0bWwiOworICAgICAg
ICAgICAgICAgICAgICBmcmFtZS5vbmxvYWQgPSBvbkxvYWQ7CisgICAgICAgICAgICAgICAgICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOworICAgICAgICAgICAgICAgICAgICBm
cmFtZXMucHVzaChmcmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB0b3RhbENvdW50ID0gaW50ZXJuYWxzLm51bWJlck9mSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJzKGRvY3VtZW50KTsKKyAgICAgICAgICAgIGxldCBmcmFtZUlkZW50aWZpZXJzID0gW107
CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7ICsraSkgeworICAg
ICAgICAgICAgICAgIGxldCBmcmFtZSA9IGZyYW1lc1tpXTsKKyAgICAgICAgICAgICAgICBmcmFt
ZUlkZW50aWZpZXJzLnB1c2goaW50ZXJuYWxzLmRvY3VtZW50SWRlbnRpZmllcihmcmFtZS5jb250
ZW50RG9jdW1lbnQpKTsKKyAgICAgICAgICAgICAgICBmcmFtZS5yZW1vdmUoKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSwgMTApOwotICAgIH0pOwotfQotCi12YXIgdGVzdEZyYW1lID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RGcmFtZSIpOwotdGVzdEZyYW1lLm9ubG9hZCA9IGZ1
bmN0aW9uKCkgewotICAgIGxldCBmcmFtZURvY3VtZW50SWRlbnRpZmllciA9IGludGVybmFscy5k
b2N1bWVudElkZW50aWZpZXIodGVzdEZyYW1lLmNvbnRlbnREb2N1bWVudCk7Ci0gICAgdGVzdEZy
YW1lLnJlbW92ZSgpOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGRvY3Vt
ZW50U2hvdWxkRGllKGZyYW1lRG9jdW1lbnRJZGVudGlmaWVyKS50aGVuKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiRG9jdW1lbnQgZGlkIG5vdCBsZWFrIik7Ci0gICAgICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgICAgICAgICBu
dWtlQXJyYXkoZnJhbWVzKTsKKyAgICAgICAgICAgIGZyYW1lcyA9IG51bGw7CisgICAgICAgICAg
ICByZXR1cm4gZnJhbWVJZGVudGlmaWVyczsKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgYWRkaXRpb25hbENoZWNrOiBmdW5jdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbGV0IGNvdW50ID0gaW50ZXJuYWxzLm51bWJlck9mSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJzKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY291bnQgPCB0b3RhbENvdW50
IHx8IGNvdW50ID09PSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgKS50aGVuKAor
ICAgICAgICAoKSA9PiB0ZXN0UGFzc2VkKCJEb2N1bWVudCBkaWQgbm90IGxlYWsiKSwKKyAgICAg
ICAgKGVycm9yKSA9PiB0ZXN0RmFpbGVkKGVycm9yLm1lc3NhZ2UpCisgICAgKS5maW5hbGx5KGZp
bmlzaEpTVGVzdCk7CiB9OworCiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BlcmZvcm1hbmNlLWFwaS9wZXJmb3JtYW5jZS1vYnNlcnZlci1uby1kb2N1bWVudC1sZWFr
Lmh0bWwgYi9MYXlvdXRUZXN0cy9wZXJmb3JtYW5jZS1hcGkvcGVyZm9ybWFuY2Utb2JzZXJ2ZXIt
bm8tZG9jdW1lbnQtbGVhay5odG1sCmluZGV4IDBlY2M0NmUxZTM5YmI4YzEzZTg1NWZjYjdmNjdl
NDVjMWQ3N2UwNDEuLjFiNjE4OGU1YjRkNDQyYzhiZmVjYTg4NWVjMmIwN2U4MmQzZjk0YTIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BlcmZvcm1hbmNlLWFwaS9wZXJmb3JtYW5jZS1vYnNlcnZl
ci1uby1kb2N1bWVudC1sZWFrLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvcGVyZm9ybWFuY2UtYXBp
L3BlcmZvcm1hbmNlLW9ic2VydmVyLW5vLWRvY3VtZW50LWxlYWsuaHRtbApAQCAtMiwzNiArMiw0
OSBAQAogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9nYy5qcyI+PC9zY3Jp
cHQ+CiA8L2hlYWQ+CiA8Ym9keT4KLTxpZnJhbWUgaWQ9InRlc3RGcmFtZSIgc3JjPSJyZXNvdXJj
ZXMvcGVyZm9ybWFuY2Utb2JzZXJ2ZXItbm8tZG9jdW1lbnQtbGVhay1mcmFtZS5odG1sIj48L2lm
cmFtZT4KIDxzY3JpcHQ+CiBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB1c2luZyBQZXJmb3JtYW5j
ZU9ic2VydmVyIGRvZXMgbm90IGNhdXNlIHRoZSBkb2N1bWVudCB0byBnZXQgbGVha2VkLiIpOwog
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwogCi1mdW5jdGlvbiBkb2N1bWVudFNob3VsZERp
ZShkb2N1bWVudElkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICBoYW5kbGUgPSBzZXRJbnRlcnZhbChmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIGdjKCk7Ci0gICAgICAgICAgICBpZiAoIWludGVybmFscy5pc0Rv
Y3VtZW50QWxpdmUoZG9jdW1lbnRJZGVudGlmaWVyKSkgewotICAgICAgICAgICAgICAgIGNsZWFy
SW50ZXJ2YWwoaGFuZGxlKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlKCk7Cit3aW5kb3cub25s
b2FkID0gZnVuY3Rpb24gKCkgeworICAgIHRlc3REb2N1bWVudElzTm90TGVha2VkKAorICAgICAg
ICBhc3luYyBmdW5jdGlvbiBpbml0QW5kUmVtb3ZlKGZyYW1lQ291bnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGxldCBmcmFtZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0
KSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IGZyYW1lcyA9IFtdOworICAgICAgICAgICAgICAg
IGxldCBjb3VudGVyID0gMDsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBvbkxvYWQoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNv
dW50ZXIgPT0gZnJhbWVDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZnJh
bWVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBmcmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZyYW1lID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgICAgICAgICAgIGZy
YW1lLnNyYyA9ICJyZXNvdXJjZXMvcGVyZm9ybWFuY2Utb2JzZXJ2ZXItbm8tZG9jdW1lbnQtbGVh
ay1mcmFtZS5odG1sIjsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUub25sb2FkID0gb25Mb2Fk
OworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgZnJhbWVzLnB1c2goZnJhbWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbGV0IGZyYW1lSWRlbnRpZmllcnMgPSBb
XTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgbGV0IGZyYW1lID0gZnJhbWVzW2ldOworICAgICAgICAgICAgICAgIGZy
YW1lSWRlbnRpZmllcnMucHVzaChpbnRlcm5hbHMuZG9jdW1lbnRJZGVudGlmaWVyKGZyYW1lLmNv
bnRlbnREb2N1bWVudCkpOworICAgICAgICAgICAgICAgIGZyYW1lLnJlbW92ZSgpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9LCAxMCk7Ci0gICAgfSk7Ci19CisgICAgICAgICAgICBudWtlQXJy
YXkoZnJhbWVzKTsKKyAgICAgICAgICAgIGZyYW1lcyA9IG51bGw7CisgICAgICAgICAgICByZXR1
cm4gZnJhbWVJZGVudGlmaWVyczsKKyAgICAgICAgfQorICAgICkudGhlbigKKyAgICAgICAgKCkg
PT4gdGVzdFBhc3NlZCgiRG9jdW1lbnQgZGlkIG5vdCBsZWFrIiksCisgICAgICAgIChlcnJvcikg
PT4gdGVzdEZhaWxlZChlcnJvci5tZXNzYWdlKQorICAgICkuZmluYWxseShmaW5pc2hKU1Rlc3Qp
OworfTsKIAotb25sb2FkID0gZnVuY3Rpb24oKSB7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKLSAgICAgICAgbGV0IGZyYW1lRG9jdW1lbnRJZGVudGlmaWVyID0gaW50ZXJuYWxzLmRvY3Vt
ZW50SWRlbnRpZmllcih0ZXN0RnJhbWUuY29udGVudERvY3VtZW50KTsKLSAgICAgICAgdGVzdEZy
YW1lLnJlbW92ZSgpOwotICAgICAgICBkb2N1bWVudFNob3VsZERpZShmcmFtZURvY3VtZW50SWRl
bnRpZmllcikudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHRlc3RQYXNzZWQoIkRvY3Vt
ZW50IGRpZCBub3QgbGVhayIpOwotICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgICAg
IH0pOwotICAgIH0sIDEwKTsKLX0KIDwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcmVzb3VyY2VzL2djLmpzIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL2djLmpzCmluZGV4
IGJkMzUxMTBjMmRlNWE5N2U5NzI1OTMzMzViODMxZjAwZjZjMzM5ZTUuLjUyYjgyNjQ1OWNkMjEw
Y2Y3YjZkOWI0NzU2ZjMyYjU5ZjY1MTMxYTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Jlc291
cmNlcy9nYy5qcworKysgYi9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvZ2MuanMKQEAgLTIwLDMgKzIw
LDM4IEBAIGZ1bmN0aW9uIGdjUmVjKG4pIHsKICAgICAgICAgICAgIGdjUmVjKDEwKTsKICAgICB9
CiB9CisKKy8vIEZpbGwgYXJyYXkgd2l0aCBudWxsIHRvIGF2b2lkIHBvdGVudGlhbCBHQyByZWFj
aGFiaWxpdHkuIGZyYW1lcyA9IG51bGwgY2FuIGJlIGVub3VnaCBpbiA5OS45JSBjYXNlcywKKy8v
IGJ1dCB3ZSBhcmUgZXh0cmEgY2FyZWZ1bCB0byBtYWtlIHRlc3RzIG5vbi1mbGFreTogY29uc2lk
ZXJpbmcgYWJvdXQgdGhlIGNhc2UgdGhhdCBhcnJheSBpcyBjYXB0dXJlZAorLy8gc29tZXdoZXJl
IChsaWtlIERGRyBjb25zdGFudHMpLgorZnVuY3Rpb24gbnVrZUFycmF5KGFycmF5KQoreworICAg
IGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7ICsraW5kZXgpCisgICAg
ICAgIGFycmF5W2luZGV4XSA9IG51bGw7CisgICAgYXJyYXkubGVuZ3RoID0gMDsKK30KKworYXN5
bmMgZnVuY3Rpb24gdGVzdERvY3VtZW50SXNOb3RMZWFrZWQoaW5pdCwgb3B0aW9ucyA9IHt9KQor
eworICAgIGxldCBnY0NvdW50ID0gb3B0aW9ucy5nY0NvdW50ID8/IDUwOworICAgIGxldCBkb2N1
bWVudENvdW50ID0gb3B0aW9ucy5kb2N1bWVudENvdW50ID8/IDIwOworICAgIGxldCBhZGRpdGlv
bmFsQ2hlY2sgPSBvcHRpb25zLmFkZGl0aW9uYWxDaGVjayA/PyBmdW5jdGlvbiAoKSB7IHJldHVy
biB0cnVlOyB9OworCisgICAgZnVuY3Rpb24gd2FpdEZvcihkdXJhdGlvbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBk
dXJhdGlvbikpOworICAgIH0KKworICAgIGxldCBmcmFtZUlkZW50aWZpZXJzID0gYXdhaXQgaW5p
dChkb2N1bWVudENvdW50KTsKKyAgICBmb3IgKGxldCBjb3VudGVyID0gMDsgY291bnRlciA8IGdj
Q291bnQ7ICsrY291bnRlcikgeworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgbGV0IGZyYW1lSWRlbnRpZmllciA9IGZyYW1lSWRl
bnRpZmllcnNbaV07CisgICAgICAgICAgICBpZiAoIWludGVybmFscy5pc0RvY3VtZW50QWxpdmUo
ZnJhbWVJZGVudGlmaWVyKSAmJiBhZGRpdGlvbmFsQ2hlY2soKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIkRvY3VtZW50IGRpZCBub3QgbGVhayI7CisgICAgICAgIH0KKyAgICAgICAgZ2MoKTsK
KyAgICAgICAgYXdhaXQgd2FpdEZvcig1MCk7CisgICAgfQorCisgICAgdGhyb3cgbmV3IEVycm9y
KCJEb2N1bWVudCBpcyBsZWFrZWQiKTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvbGVhay1kb2N1bWVudC13aXRoLXdlYi1hbmltYXRpb24uaHRtbCBiL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvbGVhay1kb2N1bWVudC13aXRoLXdlYi1hbmltYXRpb24uaHRtbApp
bmRleCAyMDU1ZDcxZWQzNGFhY2Q4NjRjMWVkN2ZjYzM5YjBkNzYwNDFkZjllLi44MTVhMmQ3YWFj
YzY4N2E1NzIzOTA2MGNiYjA5ZTM4NjgyN2E3MjM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2xlYWstZG9jdW1lbnQtd2l0aC13ZWItYW5pbWF0aW9uLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9sZWFrLWRvY3VtZW50LXdpdGgtd2ViLWFuaW1hdGlv
bi5odG1sCkBAIC0yLDQ5ICsyLDQ5IEBACiA8aHRtbD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgp
Ij4KIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2djLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBkZXNjcmlw
dGlvbigiVGhpcyB0ZXN0IGFzc2VydHMgdGhhdCBEb2N1bWVudCBkb2Vzbid0IGxlYWsgd2hlbiBh
IFdlYiBBbmltYXRpb24gaXMgY3JlYXRlZC4iKTsKIAotaWYgKHdpbmRvdy5pbnRlcm5hbHMpCitp
ZiAod2luZG93LmludGVybmFscykgewogICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOwogCi1mdW5j
dGlvbiBydW5UZXN0KCkgewotICAgIGlmICghd2luZG93LmludGVybmFscykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSk7Ci0KLSAgICBmcmFtZS5vbmxvYWQgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKGZyYW1lLnNyYyA9PT0gJ2Fib3V0OmJsYW5rJykKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGRvY3VtZW50SWRlbnRpZmllciA9IGludGVybmFs
cy5kb2N1bWVudElkZW50aWZpZXIoZnJhbWUuY29udGVudERvY3VtZW50KTsKLSAgICAgICAgZGVi
dWcoIlRoZSBpZnJhbWUgaGFzIGZpbmlzaGVkIGxvYWRpbmcuIik7Ci0KLSAgICAgICAgZnJhbWUu
cmVtb3ZlKCk7Ci0gICAgICAgIGZyYW1lID0gbnVsbDsKLQotICAgICAgICBnYygpOwotICAgICAg
ICB0aW1lb3V0ID0gMDsKLSAgICAgICAgaGFuZGxlID0gc2V0SW50ZXJ2YWwoKCkgPT4gewotICAg
ICAgICAgICAgaWYgKCFpbnRlcm5hbHMuaXNEb2N1bWVudEFsaXZlKGRvY3VtZW50SWRlbnRpZmll
cikpIHsKLSAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGhhbmRsZSk7Ci0gICAgICAgICAg
ICAgICAgdGVzdFBhc3NlZCgiVGhlIGRvY3VtZW50IHdhcyBkZXN0cm95ZWQiKTsKLSAgICAgICAg
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0aW1lb3V0Kys7Ci0gICAgICAgICAgICBpZiAodGltZW91dCA9
PSA1MDApIHsKLSAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGhhbmRsZSk7Ci0gICAgICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiVGhlIGRvY3VtZW50IHdhcyBsZWFrZWQiKTsKLSAgICAgICAg
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgd2lu
ZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGVzdERvY3VtZW50SXNOb3RMZWFr
ZWQoCisgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBpbml0QW5kUmVtb3ZlKGZyYW1lQ291bnQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGV0IGZyYW1lcyA9IGF3YWl0IG5ldyBQ
cm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZy
YW1lcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBsZXQgY291bnRlciA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIG9uTG9hZCgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50ZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09IGZyYW1l
Q291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmcmFtZXMpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgZnJhbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZyYW1lLnNyYyA9ICJyZXNvdXJjZXMvd2ViLWFuaW1hdGlvbi1sZWFrLWlmcmFtZS5odG1s
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLm9ubG9hZCA9IG9uTG9hZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZnJhbWVzLnB1c2goZnJhbWUpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVidWcoIlRoZSBp
ZnJhbWUgaGFzIGZpbmlzaGVkIGxvYWRpbmcuIik7CisgICAgICAgICAgICAgICAgbGV0IGZyYW1l
SWRlbnRpZmllcnMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZy
YW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgZnJhbWUgPSBmcmFtZXNb
aV07CisgICAgICAgICAgICAgICAgICAgIGZyYW1lSWRlbnRpZmllcnMucHVzaChpbnRlcm5hbHMu
ZG9jdW1lbnRJZGVudGlmaWVyKGZyYW1lLmNvbnRlbnREb2N1bWVudCkpOworICAgICAgICAgICAg
ICAgICAgICBmcmFtZS5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbnVrZUFycmF5KGZyYW1lcyk7CisgICAgICAgICAgICAgICAgZnJhbWVzID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZnJhbWVJZGVudGlmaWVyczsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGdjKCk7Ci0gICAgICAgIH0sIDEwKTsKLSAgICB9Ci0KLSAgICBmcmFtZS5zcmMg
PSAncmVzb3VyY2VzL3dlYi1hbmltYXRpb24tbGVhay1pZnJhbWUuaHRtbCc7CisgICAgICAgICku
dGhlbigKKyAgICAgICAgICAgICgpID0+IHRlc3RQYXNzZWQoIlRoZSBkb2N1bWVudCB3YXMgZGVz
dHJveWVkIiksCisgICAgICAgICAgICAoZXJyb3IpID0+IHRlc3RGYWlsZWQoZXJyb3IubWVzc2Fn
ZSkKKyAgICAgICAgKS5maW5hbGx5KGZpbmlzaEpTVGVzdCk7CisgICAgfTsKIH0KIAogPC9zY3Jp
cHQ+Cg==
</data>
<flag name="review"
          id="414216"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>