<?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>48067</bug_id>
          
          <creation_ts>2010-10-21 07:39:12 -0700</creation_ts>
          <short_desc>Add IndexedDB test/tutorial</short_desc>
          <delta_ts>2010-10-29 09:37:37 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>48266</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andreip</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>297412</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-21 07:39:12 -0700</bug_when>
    <thetext>Add IndexedDB test/tutorial</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297414</commentid>
    <comment_count>1</comment_count>
      <attachid>71435</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-21 07:43:31 -0700</bug_when>
    <thetext>Created attachment 71435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297415</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-21 07:45:16 -0700</bug_when>
    <thetext>please review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297451</commentid>
    <comment_count>3</comment_count>
      <attachid>71435</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-10-21 08:56:49 -0700</bug_when>
    <thetext>Comment on attachment 71435
Patch

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

&gt; LayoutTests/ChangeLog:11
&gt; +        useful to run in case there are additional code paths missed by the normal tests.

Not sure the lines above are relevant

&gt; LayoutTests/storage/indexeddb/tutorial.html:21
&gt; +// This is not a particularly good layout test, but it does have a good amount of coverage

Why isn&apos;t it a good layout test?

&gt; LayoutTests/storage/indexeddb/tutorial.html:22
&gt; +// and serves as a living document describing what&apos;s expected to work and how within WebKit.

Why not make the above comment part of the HTML output?

&gt; LayoutTests/storage/indexeddb/tutorial.html:193
&gt; +    // parameters are optional for transaction.

transactions

&gt; LayoutTests/storage/indexeddb/tutorial.html:335
&gt; +        cursorComplete(event.source); // The soruce is still an objectStore.

source

&gt; LayoutTests/storage/indexeddb/tutorial.html:423
&gt; +// to disk can be serialized for postMessage.

I wonder if all of the comments, here, particularly this one, should be part of the HTML output. It would be great if the output from this test were all of the descriptive text you&apos;ve written, interspersed with the commands being run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297457</commentid>
    <comment_count>4</comment_count>
      <attachid>71435</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-21 09:16:58 -0700</bug_when>
    <thetext>Comment on attachment 71435
Patch

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

&gt;&gt; LayoutTests/ChangeLog:11
&gt;&gt; +        useful to run in case there are additional code paths missed by the normal tests.
&gt; 
&gt; Not sure the lines above are relevant

removed

&gt;&gt; LayoutTests/storage/indexeddb/tutorial.html:21
&gt;&gt; +// This is not a particularly good layout test, but it does have a good amount of coverage
&gt; 
&gt; Why isn&apos;t it a good layout test?

// This is not an ideal layout test since it doesn&apos;t verify things as thoroughly as it could,
// but adding such content would make it much more cluttered and thus wouldn&apos;t serve its primary
// goal of teaching people IndexedDB. That said, it does have a good amount of coverage and
// serves as a living document describing what&apos;s expected to work and how within WebKit so it
// seems well worth having checked in.

&gt;&gt; LayoutTests/storage/indexeddb/tutorial.html:22
&gt;&gt; +// and serves as a living document describing what&apos;s expected to work and how within WebKit.
&gt; 
&gt; Why not make the above comment part of the HTML output?

I started to do this across the whole document, but it makes the source code much less readable and hackable.  I added a comment to the bottom telling people to look at the source.

&gt;&gt; LayoutTests/storage/indexeddb/tutorial.html:193
&gt;&gt; +    // parameters are optional for transaction.
&gt; 
&gt; transactions

done

&gt;&gt; LayoutTests/storage/indexeddb/tutorial.html:335
&gt;&gt; +        cursorComplete(event.source); // The soruce is still an objectStore.
&gt; 
&gt; source

done

&gt;&gt; LayoutTests/storage/indexeddb/tutorial.html:423
&gt;&gt; +// to disk can be serialized for postMessage.
&gt; 
&gt; I wonder if all of the comments, here, particularly this one, should be part of the HTML output. It would be great if the output from this test were all of the descriptive text you&apos;ve written, interspersed with the commands being run.

See above comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297463</commentid>
    <comment_count>5</comment_count>
      <attachid>71446</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-21 09:24:25 -0700</bug_when>
    <thetext>Created attachment 71446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299403</commentid>
    <comment_count>6</comment_count>
      <attachid>71446</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-10-26 06:38:30 -0700</bug_when>
    <thetext>Comment on attachment 71446
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299472</commentid>
    <comment_count>7</comment_count>
      <attachid>71446</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 08:19:28 -0700</bug_when>
    <thetext>Comment on attachment 71446
Patch

Clearing flags on attachment: 71446

Committed r70521: &lt;http://trac.webkit.org/changeset/70521&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299474</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 08:19:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299492</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 08:48:12 -0700</bug_when>
    <thetext>Oops, this needs to be landed after https://bugs.webkit.org/show_bug.cgi?id=48266

steve, can you please re r+ this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300101</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-27 03:30:02 -0700</bug_when>
    <thetext>Committed r70632: &lt;http://trac.webkit.org/changeset/70632&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301820</commentid>
    <comment_count>11</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-29 09:37:37 -0700</bug_when>
    <thetext>Committed r70887: &lt;http://trac.webkit.org/changeset/70887&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71435</attachid>
            <date>2010-10-21 07:43:31 -0700</date>
            <delta_ts>2010-10-21 09:24:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48067-20101021154329.patch</filename>
            <type>text/plain</type>
            <size>24587</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjMTlkZmJiODAxZGYxYTY2NjVmYjMxYThjMDllNmQxNDUzMDFlOWMwLi4yNzQwOTdj
MDBiNDQ0YTFmNzExNGVmYTc4OWMxNTM0OGRmZjY1NTAzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTAtMjEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEluZGV4ZWREQiB0
ZXN0L3R1dG9yaWFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00ODA2NworCisgICAgICAgIFRoaXMgaXMgYSB0dXRvcmlhbCBJIHdyb3RlIHVwIGZvciBz
b21lIHBlb3BsZSB3aG8gYXJlIHN0YXJ0aW5nIHRvIHVzZSBJbmRleGVkREIuCisgICAgICAgIEFz
IGl0IHR1cm5zIG91dCwgaXQgYWN0dWFsbHkgc3R1bWJsZWQgdXBvbiBhIGNvdXBsZSBvZiBidWdz
LiBUaGVzZSBoYXZlIHNpbmNlCisgICAgICAgIGJlZW4gZml4ZWQgYW5kIGhhZCBwcm9wZXIgbGF5
b3V0IHRlc3RzIHdyaXR0ZW4gZm9yIHRoZW0sIGJ1dCBpdCBzdGlsbCBzZWVtcworICAgICAgICB1
c2VmdWwgdG8gcnVuIGluIGNhc2UgdGhlcmUgYXJlIGFkZGl0aW9uYWwgY29kZSBwYXRocyBtaXNz
ZWQgYnkgdGhlIG5vcm1hbCB0ZXN0cy4KKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMgZG9jdW1l
bnQgaXMgdXNlZnVsIGluIHRlcm1zIG9mIGRlbW9uc3RyYXRpbmcgSW5kZXhlZERCIGFuZAorICAg
ICAgICBkb2N1bWVudGluZyB3aGF0IHdlIGRvIGFuZCBkb24ndCBzdXBwb3J0IGN1cnJlbnRseSwg
c2luY2UgSSdsbCBiZSBtYWludGFpbmluZyBpdAorICAgICAgICBmb3IgYXQgbGVhc3Qgc29tZSB0
aW1lLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5odG1sOiBBZGRl
ZC4KKwogMjAxMC0xMC0xNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWU0MjRlZjEwNmE4NWZiNTliZjU2NWYyMzVlOGRlYzgyZWM4ZDZkOAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9yaWFsLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDIgQEAKK0FsbCBkb25lIQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvdHV0b3JpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDU3Y2Y3ZWY2YjRjZDNkZTJjYzM3ZjE2
ZTJjMTQzMjViOGM4ZDEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvdHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDQyOSBAQAorPGh0bWw+PHRpdGxlPklu
ZGV4ZWREQiBUdXRvcmlhbDwvdGl0bGU+Cis8c2NyaXB0PgorCisvLyBUaGlzIGlzIGEgdHV0b3Jp
YWwgdGhhdCBoaWdobGlnaHRzIG1hbnkgb2YgdGhlIGZlYXR1cmVzIG9mIEluZGV4ZWREQiBhbG9u
ZyB3aXRoYSBudW1iZXIgb2YKKy8vIGNhdmVhdHMgdGhhdCBjdXJyZW50bHkgZXhpc3QgaW4gQ2hy
b21pdW0vV2ViS2l0IGJ1dCB3aGljaCB3aWxsIGhvcGVmdWxseSBiZSBpbXByb3ZlZCB1cG9uCisv
LyBvdmVyIHRpbWUuCisvLworLy8gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIGNhbiBi
ZSBmb3VuZCBoZXJlOgorLy8gaHR0cDovL2R2Y3MudzMub3JnL2hnL0luZGV4ZWREQi9yYXctZmls
ZS90aXAvT3ZlcnZpZXcuaHRtbCBidXQgbm90ZSB0aGF0IHRoZXJlIGFyZSBxdWl0ZSBhCisvLyBm
ZXcgYnVncyBjdXJyZW50bHkgb3BlbmVkIGFnYWluc3QgaXQgYW5kIHNvbWUgbWFqb3IgdW5yZXNv
bHZlZCBpc3N1ZXMgKGxpa2Ugd2hldGhlciBkeW5hbWljCisvLyB0cmFuc2FjdGlvbnMgc2hvdWxk
IGJlIGluIGZvciB2MSkuIE1hbnkgb2YgdGhlIGJ1Z3MgYXJlIGZpbGVkIGhlcmU6CisvLyBodHRw
Oi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9idWdsaXN0LmNnaT9xdWVyeV9mb3JtYXQ9YWR2YW5j
ZWQmc2hvcnRfZGVzY190eXBlPWFsbHdvcmRzc3Vic3RyJnNob3J0X2Rlc2M9JmNvbXBvbmVudD1J
bmRleGVkK0RhdGFiYXNlK0FQSSZsb25nZGVzY190eXBlPWFsbHdvcmRzc3Vic3RyJmxvbmdkZXNj
PSZidWdfZmlsZV9sb2NfdHlwZT1hbGx3b3Jkc3N1YnN0ciZidWdfZmlsZV9sb2M9JnN0YXR1c193
aGl0ZWJvYXJkX3R5cGU9YWxsd29yZHNzdWJzdHImc3RhdHVzX3doaXRlYm9hcmQ9JmtleXdvcmRz
X3R5cGU9YWxsd29yZHMma2V5d29yZHM9JmJ1Z19zdGF0dXM9TkVXJmJ1Z19zdGF0dXM9QVNTSUdO
RUQmYnVnX3N0YXR1cz1SRU9QRU5FRCZlbWFpbHR5cGUxPXN1YnN0cmluZyZlbWFpbDE9JmVtYWls
dHlwZTI9c3Vic3RyaW5nJmVtYWlsMj0mYnVnX2lkX3R5cGU9YW55ZXhhY3QmYnVnX2lkPSZ2b3Rl
cz0mY2hmaWVsZGZyb209JmNoZmllbGR0bz1Ob3cmY2hmaWVsZHZhbHVlPSZjbWR0eXBlPWRvaXQm
b3JkZXI9UmV1c2Urc2FtZStzb3J0K2FzK2xhc3QrdGltZSZrbm93bl9uYW1lPUluZGV4ZWREQiZx
dWVyeV9iYXNlZF9vbj1JbmRleGVkREImZmllbGQwLTAtMD1ub29wJnR5cGUwLTAtMD1ub29wJnZh
bHVlMC0wLTA9CisvLyBEaXNjdXNzaW9uIGhhcHBlbnMgb24gcHVibGljLXdlYmFwcHNAdzMub3Jn
CisvLworLy8gQWx0aG91Z2ggbm90IHVzZXIgZnJpZW5kbHksIGFkZGl0aW9uYWwgY2FwYWJpbGl0
aWVzIGFuZCBleGFtcGxlIGNvZGUgY2FuIGJlIGZvdW5kIGluIHRoZQorLy8gdGVzdHMgZm9yIElu
ZGV4ZWREQiB3aGljaCBhcmUgaGVyZToKKy8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYgorLy8KKy8vIFRoaXMgZG9jdW1l
bnQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgSmVyZW15IE9ybG93IDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgorCisvLyBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBnb29kIGxheW91dCB0ZXN0
LCBidXQgaXQgZG9lcyBoYXZlIGEgZ29vZCBhbW91bnQgb2YgY292ZXJhZ2UKKy8vIGFuZCBzZXJ2
ZXMgYXMgYSBsaXZpbmcgZG9jdW1lbnQgZGVzY3JpYmluZyB3aGF0J3MgZXhwZWN0ZWQgdG8gd29y
ayBhbmQgaG93IHdpdGhpbiBXZWJLaXQuCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQodHJ1ZSk7CisKKworZnVuY3Rp
b24gc2V0dXAoKQoreworICAgIC8vIEFzIHRoaXMgQVBJIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCwg
aXQncyBiZWluZyBzaGlwcGVkIGJlaGluZCB2ZW5kb3Igc3BlY2lmaWMgcHJlZml4ZXMuCisgICAg
aWYgKCd3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdykgeworICAgICAgICBpbmRleGVkREIgPSB3
ZWJraXRJbmRleGVkREI7CisgICAgICAgIElEQkN1cnNvciA9IHdlYmtpdElEQkN1cnNvcjsKKyAg
ICAgICAgSURCS2V5UmFuZ2UgPSB3ZWJraXRJREJLZXlSYW5nZTsKKyAgICAgICAgSURCVHJhbnNh
Y3Rpb24gPSB3ZWJraXRJREJUcmFuc2FjdGlvbjsKKyAgICB9CisKKyAgICAvLyBUaGlzIHR1dG9y
aWFsIGFzc3VtZXMgdGhhdCBNb3ppbGxhIGFuZCBXZWJLaXQgbWF0Y2ggZWFjaCBvdGhlciB3aGlj
aCBpc24ndCB0cnVlIGF0IHRoZQorICAgIC8vIG1vbWVudCwgYnV0IHdlIGNhbiBob3BlIGl0J2xs
IGJlY29tZSB0cnVlIG92ZXIgdGltZS4KKyAgICBpZiAoJ21vel9pbmRleGVkREInIGluIHdpbmRv
dykgeworICAgICAgICBpbmRleGVkREIgPSBtb3pfaW5kZXhlZERCOworICAgICAgICAvLyBOb3Qg
aW1wbGVtZW50ZWQgYnkgdGhlbSB5ZXQuIEknbSBqdXN0IGd1ZXNzaW5nIHdoYXQgdGhleSdsbCBi
ZS4KKyAgICAgICAgSURCQ3Vyc29yID0gbW96X0lEQkN1cnNvcjsKKyAgICAgICAgSURCS2V5UmFu
Z2UgPSBtb3pfSURCS2V5UmFuZ2U7CisgICAgICAgIElEQlRyYW5zYWN0aW9uID0gbW96X0lEQlRy
YW5zYWN0aW9uOworICAgIH0KK30KKworZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVu
dC53cml0ZSh0eHQgKyAiPGJyPiIpOworfQorCitmdW5jdGlvbiBsb2dFcnJvcih0eHQpCit7Cisg
ICAgbG9nKCI8Zm9udCBjb2xvcj1yZWQ+IiArIHR4dCArICI8L2ZvbnQ+Iik7Cit9CisKK2Z1bmN0
aW9uIHN0YXJ0KCkKK3sKKyAgICBzZXR1cCgpOworCisgICAgLy8gVGhpcyBpcyBhbiBleGFtcGxl
IG9mIG9uZSBvZiB0aGUgbWFueSBhc3luY2hyb25vdXMgY29tbWFuZHMgaW4gSW5kZXhlZERCJ3Mg
YXN5bmMgaW50ZXJmYWNlLgorICAgIC8vIEVhY2ggcmV0dXJucyBhbiBJREJSZXF1ZXN0IG9iamVj
dCB3aGljaCBoYXMgInN1Y2Nlc3MiIGFuZCAiZXJyb3IiIGV2ZW50IGhhbmRsZXJzLiBZb3UgY2Fu
IHVzZQorICAgIC8vICJhZGRFdmVudExpc3RlbmVyIiBpZiB5b3UnZCBsaWtlLCBidXQgSSdtIHVz
aW5nIHRoZSBzaW1wbGVyID0gc3ludGF4LiBPbmx5IG9uZSBvciB0aGUgb3RoZXIKKyAgICAvLyB3
aWxsIGZpcmUuIFlvdSdyZSBndWFyYW50ZWVkIHRoYXQgdGhleSB3b24ndCBmaXJlIHVudGlsIGNv
bnRyb2wgaXMgcmV0dXJuZWQgZnJvbSBKYXZhU2NyaXB0CisgICAgLy8gZXhlY3V0aW9uLgorICAg
IHZhciByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oIm15REIiLCAiVGhpcyBpcyBhIGRlc2NyaXB0
aW9uIG9mIHRoZSBkYXRhYmFzZS4iKTsgLy8gQ2hyb21pdW0vV2ViS2l0IGRvZXNuJ3QgeWV0IHJl
cXVpcmUgdGhlIGRlc2NyaXB0aW9uLCBidXQgaXQgd2lsbCBzb29uLgorICAgIHJlcXVlc3Qub25z
dWNjZXNzID0gb25PcGVuOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvcjsK
K30KKworZnVuY3Rpb24gdW5leHBlY3RlZEVycm9yKCkKK3sKKyAgICAvLyBJZiBhbiBhc3luY2hy
b25vdXMgY2FsbCByZXN1bHRzIGluIGFuIGVycm9yLCBhbiAiZXJyb3IiIGV2ZW50IHdpbGwgZmly
ZSBvbiB0aGUgSURCUmVxdWVzdAorICAgIC8vIG9iamVjdCB0aGF0IHdhcyByZXR1cm5lZCBhbmQg
dGhlIGV2ZW50J3MgY29kZSBhbmQgbWVzc2FnZSBhdHRyaWJ1dGVzIHdpbGwgYmUgcG9wdWxhdGVk
IHdpdGgKKyAgICAvLyB0aGUgY29ycmVjdCB2YWx1ZXMuCisgICAgbG9nRXJyb3IoIkVycm9yICIg
KyBldmVudC5jb2RlICsgIjogIiArIGV2ZW50Lm1lc3NhZ2UpOworCisgICAgLy8gVW5mb3J0dW5h
dGVseSwgQ2hyb21pdW0vV2ViS2l0IGRvIG5vdCBpbXBsaWNpdGx5IGFib3J0IGEgdHJhbnNhY3Rp
b24gd2hlbiBhbiBlcnJvciBvY2N1cnMKKyAgICAvLyB3aXRoaW4gb25lIG9mIGl0cyBhc3luYyBv
cGVyYXRpb25zLiBJbiB0aGUgZnV0dXJlLCB3aGVuIGFuIGVycm9yIG9jY3VycyBhbmQgdGhlIGV2
ZW50IGlzCisgICAgLy8gbm90IGNhbmNlbGVkLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSBhYm9y
dGVkLgorICAgIGlmIChjdXJyZW50VHJhbnNhY3Rpb24pCisgICAgICAgIGN1cnJlbnRUcmFuc2Fj
dGlvbi5hYm9ydCgpOworfQorCitmdW5jdGlvbiBvbk9wZW4oKQoreworICAgIC8vIElmIGFuIGFz
eW5jaHJvbm91cyBjYWxsIHJlc3VsdHMgaW4gc3VjY2VzcywgYSAic3VjY2VzcyIgZXZlbnQgd2ls
bCBmaXJlIG9uIHRoZSBJREJSZXF1ZXN0CisgICAgLy8gb2JqZWN0IHRoYXQgd2FzIHJldHVybmVk
IGFuZCB0aGUgY2FsbCdzIHJlc3VsdCB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgZXZlbnQncyAicmVz
dWx0IgorICAgIC8vIGF0dHJpYnV0ZS4gSW4gc29tZSBjYXNlcywgdGhlIGV4cGVjdGVkIHJlc3Vs
dCB3aWxsIGJlIG51bGwuCisgICAgd2luZG93LmRiID0gZXZlbnQucmVzdWx0OworCisgICAgLy8g
VGhlIElEQkRhdGFiYXNlIG9iamVjdCBoYXMgYSAidmVyc2lvbiIgYXR0cmlidXRlLiBUaGlzIGNh
biBvbmx5IGJlIHNldCBieSBjYWxsaW5nCisgICAgLy8gInNldFZlcnNpb24iIG9uIHRoZSBkYXRh
YmFzZSBhbmQgc3VwcGx5aW5nIGEgbmV3IHZlcnNpb24uIFRoaXMgYWxzbyBzdGFydHMgYSBuZXcK
KyAgICAvLyB0cmFuc2FjdGlvbiB3aGljaCBpcyB2ZXJ5IHNwZWNpYWwuIFRoZXJlIGFyZSBtYW55
IGRldGFpbHMgYW5kIGdvdGNoYXMgc3Vycm91bmRpbmcKKyAgICAvLyBzZXRWZXJzaW9uIHdoaWNo
IHdlJ2xsIGdldCBpbnRvIGxhdGVyLgorICAgIGlmIChkYi52ZXJzaW9uID09ICIxLjAiKSB7Cisg
ICAgICAgIC8vIFdlIGNvdWxkIHNraXAgc2V0dGluZyB1cCB0aGUgb2JqZWN0IHN0b3JlcyBhbmQg
aW5kZXhlcyBpZiB0aGlzIHdlcmUgYSByZWFsIGFwcGxpY2F0aW9uCisgICAgICAgIC8vIHRoYXQg
d2Fzbid0IGdvaW5nIHRvIGNoYW5nZSB0aGluZ3Mgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmVyc2lv
biBudW1iZXIuIEJ1dCBzaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGJvdGggYSB0dXRvcmlhbCBh
bmQgYSBsaXZpbmcgZG9jdW1lbnQsIHdlJ2xsIGdvIG9uIGFuZCBzZXQgdGhpbmdzIHVwIGV2ZXJ5
IHRpbWUgd2UgcnVuLgorICAgIH0KKyAgICB2YXIgcmVxdWVzdCA9IGRiLnNldFZlcnNpb24oIjEu
MCIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb25TZXRWZXJzaW9uOworICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvcjsKK30KKworZnVuY3Rpb24gb25TZXRWZXJzaW9uKCkK
K3sKKyAgICAvLyBXZSBhcmUgbm93IGluIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbi4gU3VjaCBh
IHRyYW5zYWN0aW9uIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIG9uZQorICAgIC8vIGNhbiBhZGQg
b3IgcmVtb3ZlIGluZGV4ZXMgYW5kIG9iamVjdFN0b3Jlcy4gVGhlIHJlc3VsdCAocHJvcGVydHkg
b2YgZXZlbnQpIGlzIGFuCisgICAgLy8gSURCVHJhbnNhY3Rpb24gb2JqZWN0IHRoYXQgaGFzICJj
b21wbGV0ZSIsICJhYm9ydCIsIGFuZCAidGltZW91dCIgZXZlbnQgaGFuZGxlcnMgd2hpY2ggdGVs
bAorICAgIC8vIHVzIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21taXR0ZWQsIGFib3J0ZWQs
IG9yIHRpbWVkIG91dC4KKyAgICB3aW5kb3cuY3VycmVudFRyYW5zYWN0aW9uID0gZXZlbnQucmVz
dWx0OworICAgIGN1cnJlbnRUcmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gb25TZXRWZXJzaW9uQ29t
cGxldGU7CisgICAgY3VycmVudFRyYW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnQ7
CisKKyAgICAvLyBEZWxldGUgZXhpc3Rpbmcgb2JqZWN0IHN0b3Jlcy4KKyAgICB3aGlsZSAoZGIu
b2JqZWN0U3RvcmVzLmxlbmd0aCkKKyAgICAgICAgZGIucmVtb3ZlT2JqZWN0U3RvcmUoZGIub2Jq
ZWN0U3RvcmVzWzBdKTsKKworICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBibGFuayBzbGF0ZSwg
bGV0J3MgY3JlYXRlIGFuIG9iamVjdFN0b3JlLiBBbiBvYmplY3RTdG9yZSBpcyBzaW1wbHkgYW4K
KyAgICAvLyBvcmRlcmVkIG1hcHBpbmcgb2Yga2V5cyB0byB2YWx1ZXMuIFdlIGNhbiBpdGVyYXRl
IHRocm91Z2ggcmFuZ2VzIG9mIGtleXMgb3IgZG8gaW5kaXZpZHVhbAorICAgIC8vIGxvb2t1cHMu
IE9iamVjdFN0b3JlcyBkb24ndCBoYXZlIGFueSBzY2hlbWEuCisgICAgLy8KKyAgICAvLyBLZXlz
IGNhbiBiZSBpbnRlZ2Vycywgc3RyaW5ncywgb3IgbnVsbC4gKFRoZSBzcGVjIGFsc28gZGVmaW5l
cyBkYXRlcyBhbmQgdGhlcmUncyB0YWxrIG9mCisgICAgLy8gaGFuZGxpbmcgYXJyYXlzLCBidXQg
dGhlc2UgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQgaW4gQ2hyb21pdW0vV2ViS2l0LikgVmFsdWVz
IGNhbiBiZQorICAgIC8vIGFueXRoaW5nIHN1cHBvcnRlZCBieSB0aGUgc3RydWN0dXJlZCBjbG9u
ZSBhbGdvcml0aG0KKyAgICAvLyAoaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmll
dy5odG1sI2ludGVybmFsLXN0cnVjdHVyZWQtY2xvbmluZy1hbGdvcml0aG0pIHdoaWNoCisgICAg
Ly8gaXMgYSBzdXBlcnNldCBvZiB3aGF0IGNhbiBiZSBleHByZXNzZWQgaW4gSlNPTi4gKE5vdGUg
dGhhdCBDaHJvbWl1bS9XZWJLaXQgZG9lcyBub3QgZnVsbHkKKyAgICAvLyBpbXBsZW1lbnQgdGhl
IHN0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtIHlldCwgYnV0IGl0IGRlZmluaXRlbHkgaGFuZGxl
cyBhbnl0aGluZyBKU09OCisgICAgLy8gc2VyaWFsaXphYmxlLikKKyAgICAvLworICAgIC8vIFRo
ZXJlIGFyZSB0d28gdHlwZXMgb2Ygb2JqZWN0U3RvcmVzOiBvbmVzIHdoZXJlIHRoZSBwYXRoIGlz
IHN1cHBsaWVkIG1hbnVhbGx5IGV2ZXJ5IHRpbWUgYQorICAgIC8vIHZhbHVlIGlzIGluc2VydGVk
IGFuZCB0aG9zZSB3aXRoIGEgImtleSBwYXRoIi4gQSBrZXlQYXRoIGlzIGVzc2VudGlhbGx5IGEg
SmF2YVNjcmlwdAorICAgIC8vIGV4cHJlc3Npb24gdGhhdCBpcyBldmFsdWF0ZWQgb24gZXZlcnkg
dmFsdWUgdG8gZXh0cmFjdCBhIGtleS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBwYXNzIGluCisgICAg
Ly8gdGhlIHZhbHVlIG9mICJ7Zm5hbWU6ICdqb2huJywgbG5hbWU6ICdkb2UnLCBhZGRyZXNzOiB7
c3RyZWV0OiAnQnVja2luZ2hhbSBQYWxhY2UiLCBudW1iZXI6CisgICAgLy8gNzZ9LCBzaWJsaW5n
czogWyJOYW5jeSIsICJNYXJjdXMiXSwgaWQ6IDIyfSIgYW5kIGFuIG9iamVjdFN0b3JlIGhhcyBh
IGtleVBhdGggb2YgImlkIiB0aGVuCisgICAgLy8gMjIgd2lsbCBiZSB0aGUga2V5IGZvciB0aGlz
IHZhbHVlLiBJbiBvYmplY3RTdG9yZXMsIGVhY2gga2V5IG11c3QgYmUgdW5pcXVlLgorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBleGFjdCBzeW50YXggYWxsb3dlZCBmb3Iga2V5UGF0aHMg
aXMgbm90IHlldCB3ZWxsIHNwZWNpZmllZCwgYnV0CisgICAgLy8gQ2hyb21pdW0vV2ViS2l0IGN1
cnJlbnRseSBhbGxvd3MgcGF0aHMgdGhhdCBhcmUgbXVsdGlwbGUgbGV2ZWxzIGRlZXAgd2l0aGlu
IGFuIG9iamVjdCBhbmQKKyAgICAvLyBhbGxvd3MgdGhhdCB0byBiZSBpbnRlcm1peGVkIHdpdGgg
YXJyYXkgZGVyZWZlcmVuY2VzLiBTbywgZm9yIGV4YW1wbGUsIGEga2V5IHBhdGggb2YKKyAgICAv
LyAiYWRkcmVzcy5udW1iZXIiIG9yICJzaWJsaW5nc1swXSIgd291bGQgYmUgbGVnYWwgKHByb3Zp
ZGVkIGV2ZXJ5IGVudHJ5IGhhZCBhbiBhZGRyZXNzIHdpdGgKKyAgICAvLyBhIG51bWJlciBhdHRy
aWJ1dGUgYW5kIGF0IGxlYXN0IG9uZSBzaWJsaW5nKS4gWW91IGNhbiBldmVuIGdvIHdpbGQgYW5k
IHNheQorICAgIC8vICJmb29bMF1bMl0uYmFyWzBdLmJhei50ZXN0WzFdWzJdWzNdIi4gSXQncyBw
b3NzaWJsZSB0aGlzIHdpbGwgY2hhbmdlIGluIHRoZSBmdXR1cmUgdGhvdWdoLgorICAgIC8vCisg
ICAgLy8gSWYgeW91IHNldCBhdXRvSW5jcmVtZW50ICh0aGUgdGhpcmQgb3B0aW9uYWwgcGFyYW1l
dGVyKSwgSW5kZXhlZERCIHdpbGwgZ2VuZXJhdGUgYSBrZXkKKyAgICAvLyBmb3IgeW91ciBlbnRy
eSBhdXRvbWF0aWNhbGx5LiBBbmQgaWYgeW91IGhhdmUgYSBrZXlQYXRoIHNldCwgaXQnbGwgc2V0
IHRoZSB2YWx1ZSBhdAorICAgIC8vIHRoZSBsb2NhdGlvbiBvZiB0aGUga2V5UGF0aCBfaW4gdGhl
IGRhdGFiYXNlXyAoaS5lLiBpdCB3aWxsIG5vdCBtb2RpZnkgdGhlIHZhbHVlIHlvdSBwYXNzCisg
ICAgLy8gaW4gdG8gcHV0L2FkZCkuIFVuZm9ydHVuYXRlbHkgYXV0b0luY3JlbWVudCBpcyBub3Qg
eWV0IGltcGxlbWVudGVkIGluIENocm9taXVtL1dlYktpdC4KKyAgICAvLworICAgIC8vIExldCdz
IG5vdyBjcmVhdGUgYW4gb2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5
IHBhdGggaW4gdGhpcyBjYXNlLgorICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCJwZW9wbGUiLCAiaWQiKTsKKworICAgIC8vIE5vdGljZSB0aGF0IGl0IHJldHVybmVk
IHN5bmNocm9ub3VzbHkuIFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQgYW55IGNhbGwgdGhhdCB0
b3VjaGVzIChpbgorICAgIC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVzIGlzIGFzeW5jaHJvbm91
cyBhbmQgYW55IG90aGVyIGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBhbmQgb3BlbikgYXJlCisg
ICAgLy8gYXN5bmNocm9ub3VzLgorICAgIC8vCisgICAgLy8gTm93IGxldCdzIGNyZWF0ZSBzb21l
IGluZGV4ZXMuIEluZGV4ZXMgYWxsb3cgeW91IHRvIGNyZWF0ZSBvdGhlciBrZXlzIHZpYSBrZXkg
cGF0aHMgd2hpY2gKKyAgICAvLyB3aWxsIGFsc28gcG9pbnQgdG8gYSBwYXJ0aWN1bGFyIHZhbHVl
IGluIGFuIG9iamVjdFN0b3JlLiBJbiB0aGlzIGV4YW1wbGUsIHdlJ2xsIGNyZWF0ZQorICAgIC8v
IGluZGV4ZXMgZm9yIGEgcGVyc29ucyBmaXJzdCBhbmQgbGFzdCBuYW1lLiBJbmRleGVzIGNhbiBv
cHRpb25hbGx5IGJlIHNwZWNpZmllZCB0byBub3QgYmUKKyAgICAvLyB1bmlxdWUsIHdoaWNoIGlz
IGdvb2QgaW4gdGhlIGNhc2Ugb2YgbmFtZXMuIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIG5h
bWUgb2YgdGhlIGluZGV4LgorICAgIC8vIFNlY29uZCBpcyB0aGUga2V5IHBhdGguIFRoZSB0aGly
ZCBzcGVjaWZpZXMgdW5pcXVlbmVzcy4KKyAgICB2YXIgZm5hbWUgPSBvYmplY3RTdG9yZS5jcmVh
dGVJbmRleCgiZm5hbWUiLCAiZm5hbWUiLCBmYWxzZSk7CisgICAgdmFyIGxuYW1lID0gb2JqZWN0
U3RvcmUuY3JlYXRlSW5kZXgoImxuYW1lIiwgImxuYW1lIiwgZmFsc2UpOworCisgICAgLy8gTm90
ZSB0aGF0IGlmIHlvdSB3YW50ZWQgdG8gZGVsZXRlIHRoZXNlIGluZGV4ZXMsIHlvdSBjYW4gZWl0
aGVyIGNhbGwgb2JqZWN0U3RvcmUucmVtb3ZlSW5kZXgKKyAgICAvLyBvciBzaW1wbHkgZGVsZXRl
IHRoZSBvYmplY3RTdG9yZXMgdGhhdCBvd24gdGhlIGluZGV4ZXMuIChOb3RlIHRoYXQgcmVtb3Zl
T2JqZWN0U3RvcmUgYW5kCisgICAgLy8gcmVtb3ZlSW5kZXggbWF5IGJlIGNoYW5nZWQgdG8gZGVs
ZXRlT2JqZWN0U3RvcmUgYW5kIGRlbGV0ZUluZGV4IGluIHRoZSBmdXR1cmUuKQorICAgIC8vCisg
ICAgLy8gSWYgd2Ugd2FudGVkIHRvLCB3ZSBjb3VsZCBwb3B1bGF0ZSB0aGUgb2JqZWN0U3RvcmUg
d2l0aCBzb21lIGRhdGEgaGVyZSBvciBkbyBhbnl0aGluZyBlbHNlCisgICAgLy8gYWxsb3dlZCBp
biBhIG5vcm1hbCAoaS5lLiBub24tc2V0VmVyc2lvbikgdHJhbnNhY3Rpb24uIFRoaXMgaXMgdXNl
ZnVsIHNvIHRoYXQgZGF0YSBtaWdyYXRpb25zCisgICAgLy8gY2FuIGJlIGF0b21pYyB3aXRoIGNo
YW5nZXMgdG8gdGhlIG9iamVjdFN0b3Jlcy9pbmRleGVzLgorICAgIC8vICAgIAorICAgIC8vIEJl
Y2F1c2Ugd2UgaGF2ZW4ndCBhY3R1YWxseSBtYWRlIGFueSBuZXcgYXN5bmNocm9ub3VzIHJlcXVl
c3RzLCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwKKyAgICAvLyBzdGFydCBjb21taXR0aW5nIGFzIHNv
b24gYXMgd2UgbGVhdmUgdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIGNhdXNlIG9uY29tcGxldGUg
ZXZlbnQgaGFuZGxlcgorICAgIC8vIGZvciB0aGUgdHJhbnNhY3Rpb24gd2lsbCBmaXJlIHNob3J0
bHkgYWZ0ZXIuIEluZGV4ZWREQiB0cmFuc2FjdGlvbnMgY29tbWl0IHdoZW5ldmVyIGNvbnRyb2wg
aXMKKyAgICAvLyByZXR1cm5lZCBmcm9tIEphdmFTY3JpcHQgd2l0aCBubyBmdXJ0aGVyIHdvcmsg
YmVpbmcgcXVldWVkIHVwIGFnYWluc3QgdGhlIHRyYW5zYWN0aW9uLiBUaGlzCisgICAgLy8gbWVh
bnMgb25lIGNhbm5vdCBjYWxsIHNldFRpbWVvdXQsIGRvIGFuIFhIUiwgb3IgYW55dGhpbmcgbGlr
ZSB0aGF0IGFuZCBleHBlY3QgbXkgdHJhbnNhY3Rpb24KKyAgICAvLyB0byBzdGlsbCBiZSBhcm91
bmQgd2hlbiB0aGF0IGNvbXBsZXRlcy4KKyAgICAKK30KKworZnVuY3Rpb24gdW5leHBlY3RlZEFi
b3J0KCkKK3sKKyAgICBsb2dFcnJvcigiQSB0cmFuc2FjdGlvbiBhYm9ydGVkIHVuZXhwZWN0ZWRs
eSEiKTsKK30KKworZnVuY3Rpb24gb25TZXRWZXJzaW9uQ29tcGxldGUoKQoreworICAgIC8vIExl
dHMgY3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uIGFuZCB0aGVuIG5vdCBzY2hlZHVsZSBhbnkgd29y
ayBvbiBpdCB0byB3YXRjaCBpdCBhYm9ydCBpdHNlbGYuCisgICAgLy8gVHJhbnNhY3Rpb25zIChi
ZXNpZGVzIHRob3NlIGNyZWF0ZWQgd2l0aCBzZXRWZXJzaW9uKSBhcmUgY3JlYXRlZCBzeW5jaHJv
bm91c2x5LiBBbGwgdGhyZWUKKyAgICAvLyBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBmb3IgdHJh
bnNhY3Rpb24uCisgICAgLy8KKyAgICAvLyBUaGUgZmlyc3Qgc3BlY2lmaWVzIHdoaWNoIG9iamVj
dCBzdG9yZXMgdG8gbG9jay4gVGhlIHNwZWMgc3BlY2lmaWVzICJkeW5hbWljIHRyYW5zYWN0aW9u
cyIKKyAgICAvLyB3aGljaCBkb24ndCByZXF1aXJlIHRoaXMgYW5kIHdoaWNoIGhhdmUgZmluZXIg
Z3JhaW5lZCBsb2NrcywgYnV0IG5vIG9uZSB5ZXQgc3VwcG9ydHMgdGhpcyBhbmQKKyAgICAvLyBp
dCBtYXkgZXZlbiBiZSBkcm9wcGVkIGZyb20gdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIHNwZWMs
IHNvIEkgZG9uJ3Qgc3VnZ2VzdCB5b3UgcmVseSBvbiBpdC4KKyAgICAvLyBDaHJvbWl1bS9XZWJL
aXQgYWxzbyBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBhbnl0aGluZyBmaW5lciBncmFpbmVkIHRoYW4g
ZGF0YWJhc2UgbGV2ZWwgbG9ja2luZywKKyAgICAvLyBzbyBpbiB0aGlzIHR1dG9yaWFsIHdlJ2xs
IGp1c3QgcGFzcyBpbiB0aGUgZW1wdHkgYXJyYXkgd2hpY2ggbWVhbnMgImxvY2sgdGhlIHdvcmxk
Ii4KKyAgICAvLworICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbG9j
a2luZyBtb2RlLiBUaGUgZGVmYXVsdCBpcyBSRUFEX09OTFkgKGkuZS4gYSBzaGFyZWQgbG9jayku
CisgICAgLy8gVGhhdCdzIGZpbmUgZm9yIHRoaXMgY2FzZSwgYnV0IGxhdGVyIHdlJ2xsIGFzayBm
b3IgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURS4gQXQgdGhlIG1vbWVudCwKKyAgICAvLyBDaHJv
bWl1bS9XZWJLaXQgcHJldGVuZHMgZXZlcnkgdHJhbnNhY3Rpb24gaXMgUkVBRF9XUklURSwgd2hp
Y2ggaXMga2luZCBvZiBiYWQuIChOb3RlIHRoYXQKKyAgICAvLyBTTkFQU0hPVF9SRUFEIHdpbGwg
c29vbiBiZSByZW1vdmVkIGZyb20gdGhlIHNwZWMuKQorICAgIC8vCisgICAgLy8gVGhlIGxhc3Qg
cGFyYW1ldGVyIGlzIHRoZSB0aW1lb3V0IGxlbmd0aC4gQXQgdGhlIG1vbWVudCwgQ2hyb21pdW0v
V2ViS2l0IGRlZmF1bHRzIHRvIDAgd2hpY2gKKyAgICAvLyBtZWFucyBuZXZlciwgYnV0IGl0J3Mg
cG9zc2libGUgd2UnbGwgY2hhbmdlIHRoaXMgaW4gdGhlIGZ1dHVyZSwgc28gc2V0IGl0IGlmIHlv
dSByZWFsbHkgY2FyZS4KKyAgICB3aW5kb3cuY3VycmVudFRyYW5zYWN0aW9uID0gZGIudHJhbnNh
Y3Rpb24oW10sIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUsIDApOworICAgIGN1cnJlbnRUcmFu
c2FjdGlvbi5vbmNvbXBsZXRlID0gdW5leHBlY3RlZENvbXBsZXRlOworICAgIGN1cnJlbnRUcmFu
c2FjdGlvbi5vbmFib3J0ID0gb25UcmFuc2FjdGlvbkFib3J0ZWQ7CisKKyAgICAvLyBWZXJpZnkg
dGhhdCAicGVvcGxlIiBpcyB0aGUgb25seSBvYmplY3Qgc3RvcmUgaW4gZXhpc3RhbmNlLiBUaGUg
b2JqZWN0U3RvcmVzIGF0dHJpYnV0ZSBpcworICAgIC8vIGEgRE9NU3RyaW5nTGlzdCB3aGljaCBp
cyBzb21ld2hhdCBsaWtlIGFuIGFycmF5LgorICAgIHZhciBvYmplY3RTdG9yZUxpc3QgPSBkYi5v
YmplY3RTdG9yZXM7CisgICAgaWYgKG9iamVjdFN0b3JlTGlzdC5sZW5ndGggIT0gMQorICAgICAg
ICB8fCAhb2JqZWN0U3RvcmVMaXN0LmNvbnRhaW5zKCJwZW9wbGUiKQorICAgICAgICB8fCBvYmpl
Y3RTdG9yZUxpc3QuaXRlbSgwKSAhPSAicGVvcGxlIgorICAgICAgICB8fCBvYmplY3RTdG9yZUxp
c3RbMF0gIT0gInBlb3BsZSIpIHsKKyAgICAgICAgbG9nRXJyb3IoIlNvbWV0aGluZyB3ZW50IHdy
b25nLiIpOworICAgIH0KKworICAgIC8vIExldCdzIGdyYWIgYSBoYW5kbGUgdG8gdGhlIG9iamVj
dFN0b3JlLiBUaGlzIGhhbmRsZSBpcyB0aWVkIHRvIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGNyZWF0
ZXMKKyAgICAvLyBpdCBhbmQgdGh1cyBiZWNvbWVzIGludmFsaWQgb25jZSB0aGlzIHRyYW5zYWN0
aW9uIGNvbXBsZXRlcy4KKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBjdXJyZW50VHJhbnNhY3Rpb24u
b2JqZWN0U3RvcmUoInBlb3BsZSIpOworICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAgICAgIGxv
Z0Vycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZy4iKTsKKworICAgIC8vIElmIHdlIHRyeSB0byBn
cmFiIGFuIG9iamVjdFN0b3JlIHRoYXQgZG9lc24ndCBleGlzdCwgSW5kZXhlZERCIHRocm93cyBh
biBleGNlcHRpb24uCisgICAgdHJ5IHsKKyAgICAgICAgY3VycmVudFRyYW5zYWN0aW9uLm9iamVj
dFN0b3JlKCJ4Iik7CisgICAgICAgIGxvZ0Vycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZy4iKTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgZXJyb3IgbWVzc2Fn
ZXMgaW4gZXhjZXB0aW9ucyBhcmUgbW9zdGx5IGxpZXMgYXQgdGhlIG1vbWVudC4gVGhlIHJlYXNv
biBpcworICAgICAgICAvLyB0aGF0IHRoZSBzcGVjIHJlLXVzZXMgZXhjZXB0aW9uIGNvZGVzIGZv
ciBleGlzdGluZyBleGNlcHRpb25zIGFuZCB0aGVyZSdzIG5vIHdheSB3ZSBjYW4KKyAgICAgICAg
Ly8gZGlzYW1iaWd1YXRlIGJldHdlZW4gdGhlIHR3by4gVGhlIGJlc3Qgd29yay1hcm91bmQgYXQg
dGhlIG1vbWVudCBpcyB0byBsb29rIGF0CisgICAgICAgIC8vIGh0dHA6Ly9kdmNzLnczLm9yZy9o
Zy9JbmRleGVkREIvcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjdGhlLWlkYmRhdGFiYXNlZXhj
ZXB0aW9uLWludGVyZmFjZQorICAgICAgICAvLyB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIG51bWJl
ciBjb3JyZXNwb25kcyB0by4gV2Ugd2lsbCB0cnkgdG8gcmVzb2x2ZSB0aGlzIHNvb24gaW4gc3Bl
Yy1sYW5kLgorICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGF0IGZuYW1lIGFuZCBsbmFtZSBhcmUg
dGhlIG9ubHkgaW5kZXhlcyBpbiBleGlzdGFuY2UuCisgICAgaWYgKG9iamVjdFN0b3JlLmluZGV4
TmFtZXMubGVuZ3RoICE9IDIpCisgICAgICAgIGxvZ0Vycm9yKCJTb21ldGhpbmcgd2VudCB3cm9u
Zy4iKTsKKworICAgIC8vIE5vdGUgdGhhdCBubyBhc3luYyBhY3Rpb25zIHdlcmUgZXZlciBxdWV1
ZWQgdXAgYWdpYW5zdCBvdXIgdHJhbnNhY3Rpb24sIHNvIGl0J2xsIGFib3J0IG9uY2UKKyAgICAv
LyB3ZSBsZWF2ZSB0aGlzIGNvbnRleHQuCit9CisKK2Z1bmN0aW9uIHVuZXhwZWN0ZWRDb21wbGV0
ZSgpCit7CisgICAgbG9nRXJyb3IoIkEgdHJhbnNhY3Rpb24gY29tbWl0dGVkIHVuZXhwZWN0ZWRs
eSEiKTsKK30KKworZnVuY3Rpb24gb25UcmFuc2FjdGlvbkFib3J0ZWQoKQoreworICAgIC8vIE5v
dyBsZXQncyBtYWtlIGEgcmVhbCB0cmFuc2FjdGlvbiBhbmQgYSBwZXJzb24gdG8gb3VyIG9iamVj
dFN0b3JlLgorICAgIHdpbmRvdy5jdXJyZW50VHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihb
InBlb3BsZSJdLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFLCAwKTsKKyAgICBjdXJyZW50VHJh
bnNhY3Rpb24ub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydDsKKworICAgIHZhciBwZW9wbGUgPSBj
dXJyZW50VHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoInBlb3BsZSIpOworICAgIHZhciByZXF1ZXN0
ID0gcGVvcGxlLnB1dCh7Zm5hbWU6ICdKb2huJywgbG5hbWU6ICdEb2UnLCBpZDogMX0pOyAvLyBJ
ZiBvdXIgb2JqZWN0U3RvcmUgZGlkbid0IGhhdmUgYSBrZXkgcGF0aCwgdGhlIHNlY29uZCBwYXJh
bWV0ZXIgd291bGQgaGF2ZSBiZWVuIHRoZSBrZXkuCisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBv
blB1dFN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yOworCisg
ICAgLy8gV2hpbGUgd2UncmUgYXQgaXQsIHdoeSBub3QgYWRkIGEgZmV3IG1vcmU/IE11bHRpcGxl
IHF1ZXVlZCB1cCBhc3luYyBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkCisgICAgLy8gc2VxdWVu
dGlhbGx5ICh0aG91Z2ggdGhlcmUgaXMgdGFsayBvZiBwcmlvcml0aXppbmcgY3Vyc29yLmNvbnRp
bnVlLS1zZWUgZGlzY3Vzc2lvbiBiZWxvdykuIFNpbmNlCisgICAgLy8gd2UgZG9uJ3QgY2FyZSBh
Ym91dCB0aGUgaW5kaXZpZHVhbCBjb21tYW5kcycgc3VjY2Vzc2VzLCB3ZSdsbCBvbmx5IGJvdGhl
ciB3aXRoIG9uIGVycm9yIGhhbmRsZXJzLgorICAgIC8vCisgICAgLy8gUmVtZW1iZXIgdGhhdCBv
dXIgaW1wbGVtZW50YXRpb24gb2YgdW5leHBlY3RlZEVycm9yIHNob3VsZCBhYm9ydCB0aGUgImN1
cnJlbnRUcmFuc2FjdGlvbiIgaW4gdGhlCisgICAgLy8gY2FzZSBvZiBhbiBlcnJvci4gKFRob3Vn
aCBubyBlcnJvciBzaG91bGQgb2NjdXIgaW4gdGhpcyBjYXNlLikKKyAgICBwZW9wbGUucHV0KHtm
bmFtZTogJ0phbmUnLCBsbmFtZTogJ0RvZScsIGlkOiAyfSkub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvcjsKKyAgICBwZW9wbGUucHV0KHtmbmFtZTogJ1BoaWxpcCcsIGxuYW1lOiAnRnJ5JywgaWQ6
IDN9KS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yOworCisgICAgLy8gTm90IHNob3duIGhlcmUg
YXJlIHRoZSAucmVtb3ZlIG1ldGhvZCAod2hpY2ggaXMgc29vbiB0byBiZSByZW5hbWVkIC5kZWxl
dGUpIGFuZCAuYWRkICh3aGljaCBpcworICAgIC8vIGxpa2UgLnB1dCBleGNlcHQgdGhhdCBpdCBm
aXJlcyBhbiBvbmVycm9yIGlmIHRoZSBlbGVtZW50IGFscmVhZHkgZXhpc3RzKS4KK30KKworZnVu
Y3Rpb24gb25QdXRTdWNjZXNzKCkKK3sKKyAgICAvLyBSZXN1bHQgaXMgdGhlIGtleSB1c2VkIGZv
ciB0aGUgcHV0LgorICAgIGlmIChldmVudC5yZXN1bHQgIT09IDEpCisgICAgICAgIGxvZ0Vycm9y
KCJTb21ldGhpbmcgd2VudCB3cm9uZy4iKTsKKworICAgIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRv
IHJlcXVlc3QgdGhlIHRyYW5zYWN0aW9uIHZpYSBldmVudC50cmFuc2FjdGlvbiBmcm9tIHdpdGhp
biBhbnkgZXZlbnQgaGFuZGxlcgorICAgIC8vIChsaWtlIHRoaXMgb25lKSBidXQgdGhpcyBpcyBu
b3QgeWV0IGltcGxlbWVudGVkIGluIENocm9taXVtL1dlYktpdC4gQXMgYSB3b3JrLWFyb3VuZCwg
d2UgdXNlIHRoZQorICAgIC8vIGdsb2JhbCAiY3VycmVudFRyYW5zYWN0aW9uIiB2YXJpYWJsZSB3
ZSBzZXQgYWJvdmUuCisgICAgY3VycmVudFRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBvblB1dFRy
YW5zYWN0aW9uQ29tcGxldGU7Cit9CisKK2Z1bmN0aW9uIG9uUHV0VHJhbnNhY3Rpb25Db21wbGV0
ZSgpCit7CisgICAgLy8gT0ssIG5vdyBsZXQncyBxdWVyeSB0aGUgcGVvcGxlIG9iamVjdFN0b3Jl
IGluIGEgY291cGxlIGRpZmZlcmVudCB3YXlzLiBGaXJzdCB1cCwgbGV0J3MgdHJ5IGdldC4KKyAg
ICAvLyBJdCBzaW1wbHkgdGFrZXMgaW4gYSBrZXkgYW5kIHJldHVybnMgYSByZXF1ZXN0IHdob3Nl
IHJlc3VsdCB3aWxsIGJlIHRoZSB2YWx1ZS4KKyAgICB3aW5kb3cuY3VycmVudFRyYW5zYWN0aW9u
ID0gZGIudHJhbnNhY3Rpb24oWyJwZW9wbGUiXSwgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSwg
MCk7CisgICAgY3VycmVudFRyYW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnQ7CisK
KyAgICB2YXIgcGVvcGxlID0gY3VycmVudFRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCJwZW9wbGUi
KTsKKyAgICB2YXIgcmVxdWVzdCA9IHBlb3BsZS5nZXQoMSk7CisgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBvbkdldFN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
OworCisgICAgLy8gTm90ZSB0aGF0IG11bHRpcGxlIG9iamVjdFN0b3JlIChvciBpbmRleCkgbWV0
aG9kIGNhbGxzIHdpbGwgcmV0dXJuIGRpZmZlcmVudCBvYmplY3RzICh0aGF0IHN0aWxsCisgICAg
Ly8gcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0U3RvcmUvaW5kZXggb24gZGlzaykuCisgICAgcGVv
cGxlLnNvbWVQcm9wZXJ0eSA9IHRydWU7CisgICAgaWYgKGN1cnJlbnRUcmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgicGVvcGxlIikuc29tZVByb3BlcnR5KQorICAgICAgICBsb2dFcnJvcigiU29tZXRo
aW5nIHdlbnQgd3JvbmcuIik7Cit9CisKK2Z1bmN0aW9uIG9uR2V0U3VjY2VzcygpCit7CisgICAg
aWYgKGV2ZW50LnJlc3VsdC5mbmFtZSAhPT0gIkpvaG4iKQorICAgICAgICBsb2dFcnJvcigiU29t
ZXRoaW5nIHdlbnQgd3JvbmcuIik7CisKKyAgICAvLyBFdmVudHMgaGF2ZSBhIC5zb3VyY2UgYXR0
cmlidXRlIHdoaWNoIGlzIHRoZSBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuIEluIHRoaXMg
Y2FzZSwgaXQncyBvdXIKKyAgICAvLyAicGVvcGxlIiBvYmplY3RTdG9yZSBvYmplY3QuCisgICAg
dmFyIHBlb3BsZSA9IGV2ZW50LnNvdXJjZTsKKworICAgIC8vIE5vdyBsZXQncyB0cnkgb3Blbmlu
ZyBhIGN1cnNvciBmcm9tIGlkIDEgKGV4Y2x1c2l2ZS9vcGVuKSB0byBpZCAzIChpbmNsdXNpdmUv
Y2xvc2VkKS4gVGhpcyBtZWFucworICAgIC8vIHdlJ2xsIGdldCB0aGUgb2JqZWN0cyBmb3IgaWRz
IDIgYW5kIDMuIFlvdSBjYW4gYWxzbyBjcmVhdGUgY3Vyc29ycyB0aGF0IGFyZSBvbmx5IHJpZ2h0
IG9yIG9ubHkKKyAgICAvLyBsZWZ0IGJvdW5kZWQgb3Igb21taXQgdGhlIGJvdW5kIGluIG9yZGVy
IHRvIGdyYWIgYWxsIG9iamVjdHMuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgZGlyZWN0aW9uCisg
ICAgLy8gd2hpY2ggY2FuIGJlIElEQkN1cnNvci5ORVhUIChkZWZhdWx0KSBmb3IgdGhlIGN1cnNv
ciB0byBtb3ZlIGZvcndhcmQsIE5FWFRfTk9fRFVQTElDQVRFIHRvIG9ubHkKKyAgICAvLyByZXR1
cm4gdW5pcXVlIGVudGlyZXMgKG9ubHkgYXBwbGllcyB0byBpbmRleGVzIHdpdGggdW5pcXVlIHNl
dCB0byBmYWxzZSksIFBSRVYgdG8gbW92ZSBiYWNrd2FyZHMsCisgICAgLy8gYW5kIFBSRVZfTk9f
RFVQTElDQVRFLgorICAgIHZhciBrZXlSYW5nZSA9IElEQktleVJhbmdlLmJvdW5kKDEsIDMsIHRy
dWUsIGZhbHNlKTsKKyAgICB2YXIgcmVxdWVzdCA9IHBlb3BsZS5vcGVuQ3Vyc29yKGtleVJhbmdl
LCBJREJDdXJzb3IuTkVYVCk7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBvbk9iamVjdFN0b3Jl
Q3Vyc29yOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvcjsKK30KKworZnVu
Y3Rpb24gb25PYmplY3RTdG9yZUN1cnNvcigpCit7CisgICAgLy8gVGhlIHJlc3VsdCBvZiBvcGVu
Q3Vyc29yIGlzIGFuIElEQkN1cnNvciBvYmplY3Qgb3IgbnVsbCBpZiB0aGVyZSBhcmUgbm8gKG1v
cmUtLXNlZSBiZWxvdykKKyAgICAvLyByZWNvcmRzIGxlZnQuCisgICAgdmFyIGN1cnNvciA9IGV2
ZW50LnJlc3VsdDsKKyAgICBpZiAoY3Vyc29yID09PSBudWxsKSB7CisgICAgICAgIGN1cnNvckNv
bXBsZXRlKGV2ZW50LnNvdXJjZSk7IC8vIFRoZSBzb3J1Y2UgaXMgc3RpbGwgYW4gb2JqZWN0U3Rv
cmUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBjb3VsZCB1c2UgdGhlc2Ug
dmFsdWVzIGlmIHdlIHdhbnRlZCB0by4KKyAgICB2YXIga2V5ID0gY3Vyc29yLmtleTsKKyAgICB2
YXIgdmFsdWUgPSBjdXJzb3IudmFsdWU7CisKKyAgICAvLyBjdXJzb3IuY291bnQgaXMgcHJvYmFi
bHkgZ29pbmcgdG8gYmUgcmVtb3ZlZC4KKyAgICAvLyBjdXJzb3IudXBkYXRlIGFuZCAucmVtb3Zl
IGFyZSBub3QgeWV0IGltcGxlbWVudGVkIGluIENocm9taXVtL1dlYktpdC4KKworICAgIC8vIGN1
cnNvci5jb250aW51ZSB3aWxsIHJldXNlIHRoZSBzYW1lIHJlcXVlc3Qgb2JqZWN0IGFzIHdoYXQg
b3BlbkN1cnNvciByZXR1cm5lZC4gSW4gdGhlIGZ1dHVyZSwKKyAgICAvLyB3ZSBNQVkgcHJpb3Jp
dGl6ZSAuY29udGludWUoKSBjYWxscyBhaGVhZCBvZiBhbGwgb3RoZXIgYXN5bmMgb3BlcmF0aW9u
cyBxdWV1ZWQgdXAuIFRoaXMgd2lsbAorICAgIC8vIGludHJvZHVjZSBhIGxldmVsIG9mIG5vbi1k
ZXRlcm1pbmlzbSBidXQgc2hvdWxkIHNwZWVkIHRoaW5ncyB1cC4gTW96aWxsYSBoYXMgYWxyZWFk
eSBpbXBsZW1lbnRlZAorICAgIC8vIHRoaXMgbm9uLXN0YW5kYXJkIGJlaGF2aW9yLCBmcm9tIHdo
YXQgSSd2ZSBoZWFkLgorICAgIGV2ZW50LnJlc3VsdC5jb250aW51ZSgpOworfQorCitmdW5jdGlv
biBjdXJzb3JDb21wbGV0ZShvYmplY3RTdG9yZSkKK3sKKyAgICAvLyBXaGlsZSBzdGlsbCBpbiB0
aGUgc2FtZSB0cmFuc2FjdGlvbiwgbGV0J3Mgbm93IGRvIGEgbG9va3VwIG9uIHRoZSBsbmFtZSBp
bmRleC4KKyAgICB2YXIgbG5hbWUgPSBvYmplY3RTdG9yZS5pbmRleCgibG5hbWUiKTsKKworICAg
IC8vIE5vdGUgdGhhdCB0aGUgc3BlYyBoYXMgbm90IGJlZW4gdXBkYXRlZCB5ZXQsIGJ1dCBpbnN0
ZWFkIG9mIGdldCBhbmQgZ2V0T2JqZWN0LCB3ZSBub3cKKyAgICAvLyBoYXZlIGdldEtleSBhbmQg
Z2V0LiBUaGUgZm9ybWVyIHJldHVybnMgdGhlIG9iamVjdFN0b3JlJ3Mga2V5IHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIGtleQorICAgIC8vIGluIHRoZSBpbmRleC4gZ2V0IHJldHVybnMgdGhlIG9i
amVjdFN0b3JlJ3MgdmFsdWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUga2V5IGluIHRoZQorICAg
IC8vIGluZGV4LgorICAgIHZhciByZXF1ZXN0ID0gbG5hbWUuZ2V0S2V5KCJEb2UiKTsKKyAgICBy
ZXF1ZXN0Lm9uc3VjY2VzcyA9IG9uSW5kZXhHZXRTdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvcjsKK30KKworZnVuY3Rpb24gb25JbmRleEdldFN1Y2Nlc3MoKQor
eworICAgIC8vIEJlY2F1c2Ugd2UgZGlkICJnZXRLZXkiIHRoZSByZXN1bHQgaXMgdGhlIG9iamVj
dFN0b3JlJ3Mga2V5LgorICAgIGlmIChldmVudC5yZXN1bHQgIT09IDEpCisgICAgICAgIGxvZ0Vy
cm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZy4iKTsKKworICAgIC8vIFNpbWlsYXJseSwgaW5kZXhl
cyBoYXZlIG9wZW5DdXJzb3IgYW5kIG9wZW5LZXlDdXJzb3IuIFdlJ2xsIHRyeSBhIGZldyBvZiB0
aGVtIHdpdGggdmFyaW91cworICAgIC8vIGRpZmZlcmVudCBJREJLZXlSYW5nZXMganVzdCB0byBk
ZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHRoZW0sIGJ1dCB3ZSB3b24ndCBib3RoZXIgdG8gaGFuZGxl
CisgICAgLy8gdGhlIG9uc3VjY2VzcyBjb25kaXRpb25zLgorICAgIHZhciBsbmFtZSA9IGV2ZW50
LnNvdXJjZTsKKyAgICBsbmFtZS5vcGVuQ3Vyc29yKElEQktleVJhbmdlLmxlZnRCb3VuZCgiRG9l
IiwgZmFsc2UpLCBJREJDdXJzb3IuTkVYVF9OT19EVVBMSUNBVEUpOworICAgIGxuYW1lLm9wZW5D
dXJzb3IobnVsbCwgSURCQ3Vyc29yLlBSRVZfTk9fRFVQTElDQVRFKTsKKyAgICBsbmFtZS5vcGVu
Q3Vyc29yKElEQktleVJhbmdlLnJpZ2h0Qm91bmQoIlpaWloiKSk7CisgICAgbG5hbWUub3BlbkN1
cnNvcihJREJLZXlSYW5nZS5vbmx5KCJEb2UiKSwgSURCQ3Vyc29yLlBSRVYpOworICAgIGxuYW1l
Lm9wZW5DdXJzb3IoKTsKKyAgICBsbmFtZS5vcGVuS2V5Q3Vyc29yKCk7CisKKyAgICAvLyBXZSBz
aG91bGQgYmUgYWJsZSB0byByZXF1ZXN0IHRoZSB0cmFuc2FjdGlvbiB2aWEgZXZlbnQudHJhbnNh
Y3Rpb24gZnJvbSB3aXRoaW4gYW55IGV2ZW50IGhhbmRsZXIKKyAgICAvLyAobGlrZSB0aGlzIG9u
ZSkgYnV0IHRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bS9XZWJLaXQuIEFz
IGEgd29yay1hcm91bmQsIHdlIHVzZSB0aGUKKyAgICAvLyBnbG9iYWwgImN1cnJlbnRUcmFuc2Fj
dGlvbiIgdmFyaWFibGUgd2Ugc2V0IGFib3ZlLgorICAgIGN1cnJlbnRUcmFuc2FjdGlvbi5vbmNv
bXBsZXRlID0gb25BbGxEb25lOworfQorCitmdW5jdGlvbiBvbkFsbERvbmUoKQoreworICAgIGxv
ZygiQWxsIGRvbmUhIik7Cit9CisKKy8vIFRoZSB3YXkgc2V0VmVyc2lvbiBpcyBzdXBwb3NlZCB0
byB3b3JrOgorLy8gICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgdG8gYmVnaW4gd2l0aCwgb2JqZWN0
U3RvcmVzIGFuZCBpbmRleGVzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gYSBzZXRWZXJzaW9uCisv
LyB0cmFuc2FjdGlvbiBhbmQgb25lIGNhbiBvbmx5IHJ1biBpZiBubyBvdGhlciBjb25uZWN0aW9u
cyBhcmUgb3BlbiB0byB0aGUgZGF0YWJhc2UuIFRoaXMgaXMgZGVzaWduZWQKKy8vIHRvIHNhdmUg
YXBwIGRldmVsb3BlcnMgZnJvbSBoYXZpbmcgYW4gb2xkZXIgdmVyaXNvbiBvZiBhIHdlYiBwYWdl
IHRoYXQgZXhwZWN0cyBhIGNlcnRhaW4gc2V0IG9mCisvLyBvYmplY3RTdG9yZXMgYW5kIGluZGV4
ZXMgZnJvbSBicmVha2luZyBpbiBvZGQgd2F5cyB3aGVuIHRoaW5ncyBnZXQgY2hhbmdlZCBvdXQg
ZnJvbSB1bmRlcm5laXRoIGl0LgorLy8gSW4gdGhlIGZ1dHVyZSwgd2UnbGwgcHJvYmFibHkgYWRk
IGEgbW9yZSBhZHZhbmNlZCBtZWNoYW5pc20sIGJ1dCB0aGlzIGlzIGl0IGZvciBub3cuCisvLyAg
IEJlY2F1c2UgYSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGNvdWxkIHN0YWxsIG91dCBuZWFybHkg
Zm9yZXZlciB1bnRpbCB0aGUgdXNlciBjbG9zZXMgd2luZG93cywKKy8vIHdlJ3ZlIGFkZGVkIGEg
ImJsb2NrZWQiIGV2ZW50IHRvIHRoZSByZXF1ZXN0IG9iamVjdCByZXR1cm5lZCBieSBzZXRWZXJz
aW9uLiBUaGlzIHdpbGwgZmlyZSBpZiB0aGUKKy8vIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gY2Fu
J3QgYmVnaW4gYmVjYXVzZSBvdGhlciB3aW5kb3dzIGhhdmUgYW4gb3BlbiBjb25uZWN0aW9uLiBU
aGUgYXBwIGNhbiB0aGVuCisvLyBlaXRoZXIgcG9wIHNvbWV0aGluZyB1cCB0ZWxsaW5nIHRoZSB1
c2VyIHRvIGNsb3NlIHdpbmRvd3Mgb3IgaXQgY2FuIHRlbGwgdGhlIG90aGVyIHdpbmRvd3MgdG8g
Y2FsbAorLy8gLmNsb3NlKCkgb24gdGhlaXIgZGF0YWJhc2UgaGFuZGxlLiAuY2xvc2UoKSBoYWx0
cyBhbnkgbmV3IHRyYW5zYWN0aW9ucyBmcm9tIHN0YXJ0aW5nIGFuZCB3YWl0cyBmb3IKKy8vIHRo
ZSBleGlzdGluZyBvbmVzIHRvIGZpbmlzaC4gSXQgdGhlbiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24g
YW5kIGFueSBpbmRleGVkREIgY2FsbHMgYWZ0ZXJ3YXJkcyBhcmUKKy8vIGludmFsaWQgKHRoZXkn
bGwgcHJvYmFibHkgdGhyb3csIGJ1dCB0aGlzIGlzbid0IHNwZWNpZmllZCB5ZXQpLiBXZSBtYXkg
c3BlY2lmeSAuY2xvc2UoKSB0byByZXR1cm4KKy8vIGFuIElEQlJlcXVlc3Qgb2JqZWN0IHNvIHRo
YXQgd2UgY2FuIGZpcmUgdGhlIG9uc3VjY2VzcyB3aGVuIHRoZSBjbG9zZSBjb21wbGV0ZXMuCisv
LyAgIE9uY2UgaW5zaWRlIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiwgeW91IGNhbiBkbyBhbnl0
aGluZyB5b3UnZCBsaWtlLiBUaGUgb25lIGNvbm5lY3Rpb24gd2hpY2gKKy8vIHdhcyBhbGxvd2Vk
IHRvIHN0YXkgb3BlbiB0byBjb21wbGV0ZSB0aGUgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiB3aWxs
IHN0YXkgYWxpdmUuIE11bHRpcGxlCisvLyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9ucyBjYW4gYmUg
cXVldWVkIHVwIGF0IG9uY2UgYW5kIHdpbGwgZmlyZSBpbiB0aGUgb3JkZXIgcXVldWVkICh0aG91
Z2gKKy8vIHRoaXMgb2J2aW91c2x5IG9ubHkgd29ya3MgaWYgdGhleSdyZSBxdWV1ZWQgaW4gdGhl
IHNhbWUgcGFnZSkuCisvLworLy8gVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHNldFZlcnNpb24gaW4g
Q2hyb21pdW0vV2ViS2l0OgorLy8gICBJbiBDaHJvbWl1bS9XZWJLaXQgd2UgY3VycmVudGx5IGRv
bid0IGVuZm9yY2UgdGhlICJhbGwgY29ubmVjdGlvbnMgbXVzdCBiZSBjbG9zZWQgYmVmb3JlIGEK
Ky8vIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gc3RhcnRzIiBydWxlLiBXZSBhbHNvIGRvbid0IGlt
cGxlbWVudCBkYXRhYmFzZS5jbG9zZSgpIG9yIGhhdmUgYSBibG9ja2VkCisvLyBldmVudCBvbiB0
aGUgcmVxdWVzdCAuc2V0VmVyc2lvbigpIHJldHVybnMuCisvLworLy8gVGhlIGN1cnJlbnQgc3Rh
dHVzIG9mIHdvcmtlcnM6CisvLyAgIENocm9taXVtL1dlYktpdCBkbyBub3QgeWV0IHN1cHBvcnQg
d29ya2VycyB1c2luZyBJbmRleGVkREIuIFN1cHBvcnQgZm9yIHRoZSBhc3luYyBpbnRlcmZhY2UK
Ky8vIHdpbGwgbGlrZWx5IGNvbWUgYmVmb3JlIHRoZSBzeW5jIGludGVyZmFjZS4gRm9yIG5vdywg
YSB3b3JrLWFyb3VuZCBpcyB1c2luZyBwb3N0TWVzc2FnZSB0byB0ZWxsCisvLyB0aGUgcGFnZSB3
aGF0IHRvIGRvIG9uIHRoZSB3b3JrZXIncyBiZWhhbGYgaW4gYW4gYWQtaG9jIG1hbm5lci4gQW55
dGhpbmcgdGhhdCBjYW4gYmUgc2VyaWFsaXplZAorLy8gdG8gZGlzayBjYW4gYmUgc2VyaWFsaXpl
ZCBmb3IgcG9zdE1lc3NhZ2UuCisKKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJzdGFydCgpIj4K
KworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71446</attachid>
            <date>2010-10-21 09:24:25 -0700</date>
            <delta_ts>2010-10-27 08:24:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48067-20101021172422.patch</filename>
            <type>text/plain</type>
            <size>24547</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjMTlkZmJiODAxZGYxYTY2NjVmYjMxYThjMDllNmQxNDUzMDFlOWMwLi5lNDMzZWY1
MWFlOTk1NjdiOTQwMzY4MjM0YWIxNWQ5MzliNDhhMzFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMTAtMjEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEluZGV4ZWREQiB0
ZXN0L3R1dG9yaWFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00ODA2NworCisgICAgICAgIFRoaXMgZG9jdW1lbnQgaXMgdXNlZnVsIGluIHRlcm1zIG9m
IGRlbW9uc3RyYXRpbmcgSW5kZXhlZERCIGFuZAorICAgICAgICBkb2N1bWVudGluZyB3aGF0IHdl
IGRvIGFuZCBkb24ndCBzdXBwb3J0IGN1cnJlbnRseSwgc2luY2UgSSdsbCBiZQorICAgICAgICBt
YWludGFpbmluZyBpdCBmb3IgYXQgbGVhc3Qgc29tZSB0aW1lLgorCisgICAgICAgICogc3RvcmFn
ZS9pbmRleGVkZGIvdHV0b3JpYWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi90dXRvcmlhbC5odG1sOiBBZGRlZC4KKwogMjAxMC0xMC0xNyAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
aWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi90dXRvcmlhbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi90dXRvcmlhbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWU0MjRlZjEwNmE4NWZiNTliZjU2
NWYyMzVlOGRlYzgyZWM4ZDZkOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3R1dG9yaWFsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK0FsbCBk
b25lIQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlh
bC5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZTdlNDFmY2YxNjc5ZGYwNzg3MGM0NWJjZjI5MjY5MjFlN2JmMjExCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbApA
QCAtMCwwICsxLDQzMyBAQAorPGh0bWw+PHRpdGxlPkluZGV4ZWREQiBUdXRvcmlhbDwvdGl0bGU+
Cis8c2NyaXB0PgorCisvLyBUaGlzIGlzIGEgdHV0b3JpYWwgdGhhdCBoaWdobGlnaHRzIG1hbnkg
b2YgdGhlIGZlYXR1cmVzIG9mIEluZGV4ZWREQiBhbG9uZyB3aXRoYSBudW1iZXIgb2YKKy8vIGNh
dmVhdHMgdGhhdCBjdXJyZW50bHkgZXhpc3QgaW4gQ2hyb21pdW0vV2ViS2l0IGJ1dCB3aGljaCB3
aWxsIGhvcGVmdWxseSBiZSBpbXByb3ZlZCB1cG9uCisvLyBvdmVyIHRpbWUuCisvLworLy8gVGhl
IGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIGNhbiBiZSBmb3VuZCBoZXJlOgorLy8gaHR0cDov
L2R2Y3MudzMub3JnL2hnL0luZGV4ZWREQi9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCBidXQg
bm90ZSB0aGF0IHRoZXJlIGFyZSBxdWl0ZSBhCisvLyBmZXcgYnVncyBjdXJyZW50bHkgb3BlbmVk
IGFnYWluc3QgaXQgYW5kIHNvbWUgbWFqb3IgdW5yZXNvbHZlZCBpc3N1ZXMgKGxpa2Ugd2hldGhl
ciBkeW5hbWljCisvLyB0cmFuc2FjdGlvbnMgc2hvdWxkIGJlIGluIGZvciB2MSkuIE1hbnkgb2Yg
dGhlIGJ1Z3MgYXJlIGZpbGVkIGhlcmU6CisvLyBodHRwOi8vd3d3LnczLm9yZy9CdWdzL1B1Ymxp
Yy9idWdsaXN0LmNnaT9xdWVyeV9mb3JtYXQ9YWR2YW5jZWQmc2hvcnRfZGVzY190eXBlPWFsbHdv
cmRzc3Vic3RyJnNob3J0X2Rlc2M9JmNvbXBvbmVudD1JbmRleGVkK0RhdGFiYXNlK0FQSSZsb25n
ZGVzY190eXBlPWFsbHdvcmRzc3Vic3RyJmxvbmdkZXNjPSZidWdfZmlsZV9sb2NfdHlwZT1hbGx3
b3Jkc3N1YnN0ciZidWdfZmlsZV9sb2M9JnN0YXR1c193aGl0ZWJvYXJkX3R5cGU9YWxsd29yZHNz
dWJzdHImc3RhdHVzX3doaXRlYm9hcmQ9JmtleXdvcmRzX3R5cGU9YWxsd29yZHMma2V5d29yZHM9
JmJ1Z19zdGF0dXM9TkVXJmJ1Z19zdGF0dXM9QVNTSUdORUQmYnVnX3N0YXR1cz1SRU9QRU5FRCZl
bWFpbHR5cGUxPXN1YnN0cmluZyZlbWFpbDE9JmVtYWlsdHlwZTI9c3Vic3RyaW5nJmVtYWlsMj0m
YnVnX2lkX3R5cGU9YW55ZXhhY3QmYnVnX2lkPSZ2b3Rlcz0mY2hmaWVsZGZyb209JmNoZmllbGR0
bz1Ob3cmY2hmaWVsZHZhbHVlPSZjbWR0eXBlPWRvaXQmb3JkZXI9UmV1c2Urc2FtZStzb3J0K2Fz
K2xhc3QrdGltZSZrbm93bl9uYW1lPUluZGV4ZWREQiZxdWVyeV9iYXNlZF9vbj1JbmRleGVkREIm
ZmllbGQwLTAtMD1ub29wJnR5cGUwLTAtMD1ub29wJnZhbHVlMC0wLTA9CisvLyBEaXNjdXNzaW9u
IGhhcHBlbnMgb24gcHVibGljLXdlYmFwcHNAdzMub3JnCisvLworLy8gQWx0aG91Z2ggbm90IHVz
ZXIgZnJpZW5kbHksIGFkZGl0aW9uYWwgY2FwYWJpbGl0aWVzIGFuZCBleGFtcGxlIGNvZGUgY2Fu
IGJlIGZvdW5kIGluIHRoZQorLy8gdGVzdHMgZm9yIEluZGV4ZWREQiB3aGljaCBhcmUgaGVyZToK
Ky8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYgorLy8KKy8vIFRoaXMgZG9jdW1lbnQgaXMgY3VycmVudGx5IG1haW50YWlu
ZWQgYnkgSmVyZW15IE9ybG93IDxqb3Jsb3dAY2hyb21pdW0ub3JnPgorCisKKy8vIFRoaXMgaXMg
bm90IGFuIGlkZWFsIGxheW91dCB0ZXN0IHNpbmNlIGl0IGRvZXNuJ3QgdmVyaWZ5IHRoaW5ncyBh
cyB0aG9yb3VnaGx5IGFzIGl0IGNvdWxkLAorLy8gYnV0IGFkZGluZyBzdWNoIGNvbnRlbnQgd291
bGQgbWFrZSBpdCBtdWNoIG1vcmUgY2x1dHRlcmVkIGFuZCB0aHVzIHdvdWxkbid0IHNlcnZlIGl0
cyBwcmltYXJ5CisvLyBnb2FsIG9mIHRlYWNoaW5nIHBlb3BsZSBJbmRleGVkREIuIFRoYXQgc2Fp
ZCwgaXQgZG9lcyBoYXZlIGEgZ29vZCBhbW91bnQgb2YgY292ZXJhZ2UgYW5kCisvLyBzZXJ2ZXMg
YXMgYSBsaXZpbmcgZG9jdW1lbnQgZGVzY3JpYmluZyB3aGF0J3MgZXhwZWN0ZWQgdG8gd29yayBh
bmQgaG93IHdpdGhpbiBXZWJLaXQgc28gaXQKKy8vIHNlZW1zIHdlbGwgd29ydGggaGF2aW5nIGNo
ZWNrZWQgaW4uCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQodHJ1ZSk7CisKKworZnVuY3Rpb24gc2V0dXAoKQorewor
ICAgIC8vIEFzIHRoaXMgQVBJIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCwgaXQncyBiZWluZyBzaGlw
cGVkIGJlaGluZCB2ZW5kb3Igc3BlY2lmaWMgcHJlZml4ZXMuCisgICAgaWYgKCd3ZWJraXRJbmRl
eGVkREInIGluIHdpbmRvdykgeworICAgICAgICBpbmRleGVkREIgPSB3ZWJraXRJbmRleGVkREI7
CisgICAgICAgIElEQkN1cnNvciA9IHdlYmtpdElEQkN1cnNvcjsKKyAgICAgICAgSURCS2V5UmFu
Z2UgPSB3ZWJraXRJREJLZXlSYW5nZTsKKyAgICAgICAgSURCVHJhbnNhY3Rpb24gPSB3ZWJraXRJ
REJUcmFuc2FjdGlvbjsKKyAgICB9CisKKyAgICAvLyBUaGlzIHR1dG9yaWFsIGFzc3VtZXMgdGhh
dCBNb3ppbGxhIGFuZCBXZWJLaXQgbWF0Y2ggZWFjaCBvdGhlciB3aGljaCBpc24ndCB0cnVlIGF0
IHRoZQorICAgIC8vIG1vbWVudCwgYnV0IHdlIGNhbiBob3BlIGl0J2xsIGJlY29tZSB0cnVlIG92
ZXIgdGltZS4KKyAgICBpZiAoJ21vel9pbmRleGVkREInIGluIHdpbmRvdykgeworICAgICAgICBp
bmRleGVkREIgPSBtb3pfaW5kZXhlZERCOworICAgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgYnkg
dGhlbSB5ZXQuIEknbSBqdXN0IGd1ZXNzaW5nIHdoYXQgdGhleSdsbCBiZS4KKyAgICAgICAgSURC
Q3Vyc29yID0gbW96X0lEQkN1cnNvcjsKKyAgICAgICAgSURCS2V5UmFuZ2UgPSBtb3pfSURCS2V5
UmFuZ2U7CisgICAgICAgIElEQlRyYW5zYWN0aW9uID0gbW96X0lEQlRyYW5zYWN0aW9uOworICAg
IH0KK30KKworZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC53cml0ZSh0eHQgKyAi
PGJyPiIpOworfQorCitmdW5jdGlvbiBsb2dFcnJvcih0eHQpCit7CisgICAgbG9nKCI8Zm9udCBj
b2xvcj1yZWQ+IiArIHR4dCArICI8L2ZvbnQ+Iik7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KCkKK3sK
KyAgICBzZXR1cCgpOworCisgICAgLy8gVGhpcyBpcyBhbiBleGFtcGxlIG9mIG9uZSBvZiB0aGUg
bWFueSBhc3luY2hyb25vdXMgY29tbWFuZHMgaW4gSW5kZXhlZERCJ3MgYXN5bmMgaW50ZXJmYWNl
LgorICAgIC8vIEVhY2ggcmV0dXJucyBhbiBJREJSZXF1ZXN0IG9iamVjdCB3aGljaCBoYXMgInN1
Y2Nlc3MiIGFuZCAiZXJyb3IiIGV2ZW50IGhhbmRsZXJzLiBZb3UgY2FuIHVzZQorICAgIC8vICJh
ZGRFdmVudExpc3RlbmVyIiBpZiB5b3UnZCBsaWtlLCBidXQgSSdtIHVzaW5nIHRoZSBzaW1wbGVy
ID0gc3ludGF4LiBPbmx5IG9uZSBvciB0aGUgb3RoZXIKKyAgICAvLyB3aWxsIGZpcmUuIFlvdSdy
ZSBndWFyYW50ZWVkIHRoYXQgdGhleSB3b24ndCBmaXJlIHVudGlsIGNvbnRyb2wgaXMgcmV0dXJu
ZWQgZnJvbSBKYXZhU2NyaXB0CisgICAgLy8gZXhlY3V0aW9uLgorICAgIHZhciByZXF1ZXN0ID0g
aW5kZXhlZERCLm9wZW4oIm15REIiLCAiVGhpcyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkYXRh
YmFzZS4iKTsgLy8gQ2hyb21pdW0vV2ViS2l0IGRvZXNuJ3QgeWV0IHJlcXVpcmUgdGhlIGRlc2Ny
aXB0aW9uLCBidXQgaXQgd2lsbCBzb29uLgorICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb25PcGVu
OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvcjsKK30KKworZnVuY3Rpb24g
dW5leHBlY3RlZEVycm9yKCkKK3sKKyAgICAvLyBJZiBhbiBhc3luY2hyb25vdXMgY2FsbCByZXN1
bHRzIGluIGFuIGVycm9yLCBhbiAiZXJyb3IiIGV2ZW50IHdpbGwgZmlyZSBvbiB0aGUgSURCUmVx
dWVzdAorICAgIC8vIG9iamVjdCB0aGF0IHdhcyByZXR1cm5lZCBhbmQgdGhlIGV2ZW50J3MgY29k
ZSBhbmQgbWVzc2FnZSBhdHRyaWJ1dGVzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGgKKyAgICAvLyB0
aGUgY29ycmVjdCB2YWx1ZXMuCisgICAgbG9nRXJyb3IoIkVycm9yICIgKyBldmVudC5jb2RlICsg
IjogIiArIGV2ZW50Lm1lc3NhZ2UpOworCisgICAgLy8gVW5mb3J0dW5hdGVseSwgQ2hyb21pdW0v
V2ViS2l0IGRvIG5vdCBpbXBsaWNpdGx5IGFib3J0IGEgdHJhbnNhY3Rpb24gd2hlbiBhbiBlcnJv
ciBvY2N1cnMKKyAgICAvLyB3aXRoaW4gb25lIG9mIGl0cyBhc3luYyBvcGVyYXRpb25zLiBJbiB0
aGUgZnV0dXJlLCB3aGVuIGFuIGVycm9yIG9jY3VycyBhbmQgdGhlIGV2ZW50IGlzCisgICAgLy8g
bm90IGNhbmNlbGVkLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSBhYm9ydGVkLgorICAgIGlmIChj
dXJyZW50VHJhbnNhY3Rpb24pCisgICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbi5hYm9ydCgpOwor
fQorCitmdW5jdGlvbiBvbk9wZW4oKQoreworICAgIC8vIElmIGFuIGFzeW5jaHJvbm91cyBjYWxs
IHJlc3VsdHMgaW4gc3VjY2VzcywgYSAic3VjY2VzcyIgZXZlbnQgd2lsbCBmaXJlIG9uIHRoZSBJ
REJSZXF1ZXN0CisgICAgLy8gb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkIGFuZCB0aGUgY2FsbCdz
IHJlc3VsdCB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgZXZlbnQncyAicmVzdWx0IgorICAgIC8vIGF0
dHJpYnV0ZS4gSW4gc29tZSBjYXNlcywgdGhlIGV4cGVjdGVkIHJlc3VsdCB3aWxsIGJlIG51bGwu
CisgICAgd2luZG93LmRiID0gZXZlbnQucmVzdWx0OworCisgICAgLy8gVGhlIElEQkRhdGFiYXNl
IG9iamVjdCBoYXMgYSAidmVyc2lvbiIgYXR0cmlidXRlLiBUaGlzIGNhbiBvbmx5IGJlIHNldCBi
eSBjYWxsaW5nCisgICAgLy8gInNldFZlcnNpb24iIG9uIHRoZSBkYXRhYmFzZSBhbmQgc3VwcGx5
aW5nIGEgbmV3IHZlcnNpb24uIFRoaXMgYWxzbyBzdGFydHMgYSBuZXcKKyAgICAvLyB0cmFuc2Fj
dGlvbiB3aGljaCBpcyB2ZXJ5IHNwZWNpYWwuIFRoZXJlIGFyZSBtYW55IGRldGFpbHMgYW5kIGdv
dGNoYXMgc3Vycm91bmRpbmcKKyAgICAvLyBzZXRWZXJzaW9uIHdoaWNoIHdlJ2xsIGdldCBpbnRv
IGxhdGVyLgorICAgIGlmIChkYi52ZXJzaW9uID09ICIxLjAiKSB7CisgICAgICAgIC8vIFdlIGNv
dWxkIHNraXAgc2V0dGluZyB1cCB0aGUgb2JqZWN0IHN0b3JlcyBhbmQgaW5kZXhlcyBpZiB0aGlz
IHdlcmUgYSByZWFsIGFwcGxpY2F0aW9uCisgICAgICAgIC8vIHRoYXQgd2Fzbid0IGdvaW5nIHRv
IGNoYW5nZSB0aGluZ3Mgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmVyc2lvbiBudW1iZXIuIEJ1dCBz
aW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGJvdGggYSB0dXRvcmlhbCBhbmQgYSBsaXZpbmcgZG9j
dW1lbnQsIHdlJ2xsIGdvIG9uIGFuZCBzZXQgdGhpbmdzIHVwIGV2ZXJ5IHRpbWUgd2UgcnVuLgor
ICAgIH0KKyAgICB2YXIgcmVxdWVzdCA9IGRiLnNldFZlcnNpb24oIjEuMCIpOworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gb25TZXRWZXJzaW9uOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhw
ZWN0ZWRFcnJvcjsKK30KKworZnVuY3Rpb24gb25TZXRWZXJzaW9uKCkKK3sKKyAgICAvLyBXZSBh
cmUgbm93IGluIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbi4gU3VjaCBhIHRyYW5zYWN0aW9uIGlz
IHRoZSBvbmx5IHBsYWNlIHdoZXJlIG9uZQorICAgIC8vIGNhbiBhZGQgb3IgcmVtb3ZlIGluZGV4
ZXMgYW5kIG9iamVjdFN0b3Jlcy4gVGhlIHJlc3VsdCAocHJvcGVydHkgb2YgZXZlbnQpIGlzIGFu
CisgICAgLy8gSURCVHJhbnNhY3Rpb24gb2JqZWN0IHRoYXQgaGFzICJjb21wbGV0ZSIsICJhYm9y
dCIsIGFuZCAidGltZW91dCIgZXZlbnQgaGFuZGxlcnMgd2hpY2ggdGVsbAorICAgIC8vIHVzIHdo
ZW4gdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21taXR0ZWQsIGFib3J0ZWQsIG9yIHRpbWVkIG91dC4K
KyAgICB3aW5kb3cuY3VycmVudFRyYW5zYWN0aW9uID0gZXZlbnQucmVzdWx0OworICAgIGN1cnJl
bnRUcmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gb25TZXRWZXJzaW9uQ29tcGxldGU7CisgICAgY3Vy
cmVudFRyYW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnQ7CisKKyAgICAvLyBEZWxl
dGUgZXhpc3Rpbmcgb2JqZWN0IHN0b3Jlcy4KKyAgICB3aGlsZSAoZGIub2JqZWN0U3RvcmVzLmxl
bmd0aCkKKyAgICAgICAgZGIucmVtb3ZlT2JqZWN0U3RvcmUoZGIub2JqZWN0U3RvcmVzWzBdKTsK
KworICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBibGFuayBzbGF0ZSwgbGV0J3MgY3JlYXRlIGFu
IG9iamVjdFN0b3JlLiBBbiBvYmplY3RTdG9yZSBpcyBzaW1wbHkgYW4KKyAgICAvLyBvcmRlcmVk
IG1hcHBpbmcgb2Yga2V5cyB0byB2YWx1ZXMuIFdlIGNhbiBpdGVyYXRlIHRocm91Z2ggcmFuZ2Vz
IG9mIGtleXMgb3IgZG8gaW5kaXZpZHVhbAorICAgIC8vIGxvb2t1cHMuIE9iamVjdFN0b3JlcyBk
b24ndCBoYXZlIGFueSBzY2hlbWEuCisgICAgLy8KKyAgICAvLyBLZXlzIGNhbiBiZSBpbnRlZ2Vy
cywgc3RyaW5ncywgb3IgbnVsbC4gKFRoZSBzcGVjIGFsc28gZGVmaW5lcyBkYXRlcyBhbmQgdGhl
cmUncyB0YWxrIG9mCisgICAgLy8gaGFuZGxpbmcgYXJyYXlzLCBidXQgdGhlc2UgYXJlIG5vdCBp
bXBsZW1lbnRlZCB5ZXQgaW4gQ2hyb21pdW0vV2ViS2l0LikgVmFsdWVzIGNhbiBiZQorICAgIC8v
IGFueXRoaW5nIHN1cHBvcnRlZCBieSB0aGUgc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG0KKyAg
ICAvLyAoaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1sI2ludGVybmFs
LXN0cnVjdHVyZWQtY2xvbmluZy1hbGdvcml0aG0pIHdoaWNoCisgICAgLy8gaXMgYSBzdXBlcnNl
dCBvZiB3aGF0IGNhbiBiZSBleHByZXNzZWQgaW4gSlNPTi4gKE5vdGUgdGhhdCBDaHJvbWl1bS9X
ZWJLaXQgZG9lcyBub3QgZnVsbHkKKyAgICAvLyBpbXBsZW1lbnQgdGhlIHN0cnVjdHVyZWQgY2xv
bmUgYWxnb3JpdGhtIHlldCwgYnV0IGl0IGRlZmluaXRlbHkgaGFuZGxlcyBhbnl0aGluZyBKU09O
CisgICAgLy8gc2VyaWFsaXphYmxlLikKKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSB0d28gdHlw
ZXMgb2Ygb2JqZWN0U3RvcmVzOiBvbmVzIHdoZXJlIHRoZSBwYXRoIGlzIHN1cHBsaWVkIG1hbnVh
bGx5IGV2ZXJ5IHRpbWUgYQorICAgIC8vIHZhbHVlIGlzIGluc2VydGVkIGFuZCB0aG9zZSB3aXRo
IGEgImtleSBwYXRoIi4gQSBrZXlQYXRoIGlzIGVzc2VudGlhbGx5IGEgSmF2YVNjcmlwdAorICAg
IC8vIGV4cHJlc3Npb24gdGhhdCBpcyBldmFsdWF0ZWQgb24gZXZlcnkgdmFsdWUgdG8gZXh0cmFj
dCBhIGtleS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBwYXNzIGluCisgICAgLy8gdGhlIHZhbHVlIG9m
ICJ7Zm5hbWU6ICdqb2huJywgbG5hbWU6ICdkb2UnLCBhZGRyZXNzOiB7c3RyZWV0OiAnQnVja2lu
Z2hhbSBQYWxhY2UiLCBudW1iZXI6CisgICAgLy8gNzZ9LCBzaWJsaW5nczogWyJOYW5jeSIsICJN
YXJjdXMiXSwgaWQ6IDIyfSIgYW5kIGFuIG9iamVjdFN0b3JlIGhhcyBhIGtleVBhdGggb2YgImlk
IiB0aGVuCisgICAgLy8gMjIgd2lsbCBiZSB0aGUga2V5IGZvciB0aGlzIHZhbHVlLiBJbiBvYmpl
Y3RTdG9yZXMsIGVhY2gga2V5IG11c3QgYmUgdW5pcXVlLgorICAgIC8vCisgICAgLy8gTm90ZSB0
aGF0IHRoZSBleGFjdCBzeW50YXggYWxsb3dlZCBmb3Iga2V5UGF0aHMgaXMgbm90IHlldCB3ZWxs
IHNwZWNpZmllZCwgYnV0CisgICAgLy8gQ2hyb21pdW0vV2ViS2l0IGN1cnJlbnRseSBhbGxvd3Mg
cGF0aHMgdGhhdCBhcmUgbXVsdGlwbGUgbGV2ZWxzIGRlZXAgd2l0aGluIGFuIG9iamVjdCBhbmQK
KyAgICAvLyBhbGxvd3MgdGhhdCB0byBiZSBpbnRlcm1peGVkIHdpdGggYXJyYXkgZGVyZWZlcmVu
Y2VzLiBTbywgZm9yIGV4YW1wbGUsIGEga2V5IHBhdGggb2YKKyAgICAvLyAiYWRkcmVzcy5udW1i
ZXIiIG9yICJzaWJsaW5nc1swXSIgd291bGQgYmUgbGVnYWwgKHByb3ZpZGVkIGV2ZXJ5IGVudHJ5
IGhhZCBhbiBhZGRyZXNzIHdpdGgKKyAgICAvLyBhIG51bWJlciBhdHRyaWJ1dGUgYW5kIGF0IGxl
YXN0IG9uZSBzaWJsaW5nKS4gWW91IGNhbiBldmVuIGdvIHdpbGQgYW5kIHNheQorICAgIC8vICJm
b29bMF1bMl0uYmFyWzBdLmJhei50ZXN0WzFdWzJdWzNdIi4gSXQncyBwb3NzaWJsZSB0aGlzIHdp
bGwgY2hhbmdlIGluIHRoZSBmdXR1cmUgdGhvdWdoLgorICAgIC8vCisgICAgLy8gSWYgeW91IHNl
dCBhdXRvSW5jcmVtZW50ICh0aGUgdGhpcmQgb3B0aW9uYWwgcGFyYW1ldGVyKSwgSW5kZXhlZERC
IHdpbGwgZ2VuZXJhdGUgYSBrZXkKKyAgICAvLyBmb3IgeW91ciBlbnRyeSBhdXRvbWF0aWNhbGx5
LiBBbmQgaWYgeW91IGhhdmUgYSBrZXlQYXRoIHNldCwgaXQnbGwgc2V0IHRoZSB2YWx1ZSBhdAor
ICAgIC8vIHRoZSBsb2NhdGlvbiBvZiB0aGUga2V5UGF0aCBfaW4gdGhlIGRhdGFiYXNlXyAoaS5l
LiBpdCB3aWxsIG5vdCBtb2RpZnkgdGhlIHZhbHVlIHlvdSBwYXNzCisgICAgLy8gaW4gdG8gcHV0
L2FkZCkuIFVuZm9ydHVuYXRlbHkgYXV0b0luY3JlbWVudCBpcyBub3QgeWV0IGltcGxlbWVudGVk
IGluIENocm9taXVtL1dlYktpdC4KKyAgICAvLworICAgIC8vIExldCdzIG5vdyBjcmVhdGUgYW4g
b2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5IHBhdGggaW4gdGhpcyBj
YXNlLgorICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCJwZW9wbGUi
LCAiaWQiKTsKKworICAgIC8vIE5vdGljZSB0aGF0IGl0IHJldHVybmVkIHN5bmNocm9ub3VzbHku
IFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQgYW55IGNhbGwgdGhhdCB0b3VjaGVzIChpbgorICAg
IC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVzIGlzIGFzeW5jaHJvbm91cyBhbmQgYW55IG90aGVy
IGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBhbmQgb3BlbikgYXJlCisgICAgLy8gYXN5bmNocm9u
b3VzLgorICAgIC8vCisgICAgLy8gTm93IGxldCdzIGNyZWF0ZSBzb21lIGluZGV4ZXMuIEluZGV4
ZXMgYWxsb3cgeW91IHRvIGNyZWF0ZSBvdGhlciBrZXlzIHZpYSBrZXkgcGF0aHMgd2hpY2gKKyAg
ICAvLyB3aWxsIGFsc28gcG9pbnQgdG8gYSBwYXJ0aWN1bGFyIHZhbHVlIGluIGFuIG9iamVjdFN0
b3JlLiBJbiB0aGlzIGV4YW1wbGUsIHdlJ2xsIGNyZWF0ZQorICAgIC8vIGluZGV4ZXMgZm9yIGEg
cGVyc29ucyBmaXJzdCBhbmQgbGFzdCBuYW1lLiBJbmRleGVzIGNhbiBvcHRpb25hbGx5IGJlIHNw
ZWNpZmllZCB0byBub3QgYmUKKyAgICAvLyB1bmlxdWUsIHdoaWNoIGlzIGdvb2QgaW4gdGhlIGNh
c2Ugb2YgbmFtZXMuIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGluZGV4
LgorICAgIC8vIFNlY29uZCBpcyB0aGUga2V5IHBhdGguIFRoZSB0aGlyZCBzcGVjaWZpZXMgdW5p
cXVlbmVzcy4KKyAgICB2YXIgZm5hbWUgPSBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgiZm5hbWUi
LCAiZm5hbWUiLCBmYWxzZSk7CisgICAgdmFyIGxuYW1lID0gb2JqZWN0U3RvcmUuY3JlYXRlSW5k
ZXgoImxuYW1lIiwgImxuYW1lIiwgZmFsc2UpOworCisgICAgLy8gTm90ZSB0aGF0IGlmIHlvdSB3
YW50ZWQgdG8gZGVsZXRlIHRoZXNlIGluZGV4ZXMsIHlvdSBjYW4gZWl0aGVyIGNhbGwgb2JqZWN0
U3RvcmUucmVtb3ZlSW5kZXgKKyAgICAvLyBvciBzaW1wbHkgZGVsZXRlIHRoZSBvYmplY3RTdG9y
ZXMgdGhhdCBvd24gdGhlIGluZGV4ZXMuIChOb3RlIHRoYXQgcmVtb3ZlT2JqZWN0U3RvcmUgYW5k
CisgICAgLy8gcmVtb3ZlSW5kZXggbWF5IGJlIGNoYW5nZWQgdG8gZGVsZXRlT2JqZWN0U3RvcmUg
YW5kIGRlbGV0ZUluZGV4IGluIHRoZSBmdXR1cmUuKQorICAgIC8vCisgICAgLy8gSWYgd2Ugd2Fu
dGVkIHRvLCB3ZSBjb3VsZCBwb3B1bGF0ZSB0aGUgb2JqZWN0U3RvcmUgd2l0aCBzb21lIGRhdGEg
aGVyZSBvciBkbyBhbnl0aGluZyBlbHNlCisgICAgLy8gYWxsb3dlZCBpbiBhIG5vcm1hbCAoaS5l
LiBub24tc2V0VmVyc2lvbikgdHJhbnNhY3Rpb24uIFRoaXMgaXMgdXNlZnVsIHNvIHRoYXQgZGF0
YSBtaWdyYXRpb25zCisgICAgLy8gY2FuIGJlIGF0b21pYyB3aXRoIGNoYW5nZXMgdG8gdGhlIG9i
amVjdFN0b3Jlcy9pbmRleGVzLgorICAgIC8vICAgIAorICAgIC8vIEJlY2F1c2Ugd2UgaGF2ZW4n
dCBhY3R1YWxseSBtYWRlIGFueSBuZXcgYXN5bmNocm9ub3VzIHJlcXVlc3RzLCB0aGlzIHRyYW5z
YWN0aW9uIHdpbGwKKyAgICAvLyBzdGFydCBjb21taXR0aW5nIGFzIHNvb24gYXMgd2UgbGVhdmUg
dGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIGNhdXNlIG9uY29tcGxldGUgZXZlbnQgaGFuZGxlcgor
ICAgIC8vIGZvciB0aGUgdHJhbnNhY3Rpb24gd2lsbCBmaXJlIHNob3J0bHkgYWZ0ZXIuIEluZGV4
ZWREQiB0cmFuc2FjdGlvbnMgY29tbWl0IHdoZW5ldmVyIGNvbnRyb2wgaXMKKyAgICAvLyByZXR1
cm5lZCBmcm9tIEphdmFTY3JpcHQgd2l0aCBubyBmdXJ0aGVyIHdvcmsgYmVpbmcgcXVldWVkIHVw
IGFnYWluc3QgdGhlIHRyYW5zYWN0aW9uLiBUaGlzCisgICAgLy8gbWVhbnMgb25lIGNhbm5vdCBj
YWxsIHNldFRpbWVvdXQsIGRvIGFuIFhIUiwgb3IgYW55dGhpbmcgbGlrZSB0aGF0IGFuZCBleHBl
Y3QgbXkgdHJhbnNhY3Rpb24KKyAgICAvLyB0byBzdGlsbCBiZSBhcm91bmQgd2hlbiB0aGF0IGNv
bXBsZXRlcy4KKyAgICAKK30KKworZnVuY3Rpb24gdW5leHBlY3RlZEFib3J0KCkKK3sKKyAgICBs
b2dFcnJvcigiQSB0cmFuc2FjdGlvbiBhYm9ydGVkIHVuZXhwZWN0ZWRseSEiKTsKK30KKworZnVu
Y3Rpb24gb25TZXRWZXJzaW9uQ29tcGxldGUoKQoreworICAgIC8vIExldHMgY3JlYXRlIGEgbmV3
IHRyYW5zYWN0aW9uIGFuZCB0aGVuIG5vdCBzY2hlZHVsZSBhbnkgd29yayBvbiBpdCB0byB3YXRj
aCBpdCBhYm9ydCBpdHNlbGYuCisgICAgLy8gVHJhbnNhY3Rpb25zIChiZXNpZGVzIHRob3NlIGNy
ZWF0ZWQgd2l0aCBzZXRWZXJzaW9uKSBhcmUgY3JlYXRlZCBzeW5jaHJvbm91c2x5LiBBbGwgdGhy
ZWUKKyAgICAvLyBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBmb3IgdHJhbnNhY3Rpb24uCisgICAg
Ly8KKyAgICAvLyBUaGUgZmlyc3Qgc3BlY2lmaWVzIHdoaWNoIG9iamVjdCBzdG9yZXMgdG8gbG9j
ay4gVGhlIHNwZWMgc3BlY2lmaWVzICJkeW5hbWljIHRyYW5zYWN0aW9ucyIKKyAgICAvLyB3aGlj
aCBkb24ndCByZXF1aXJlIHRoaXMgYW5kIHdoaWNoIGhhdmUgZmluZXIgZ3JhaW5lZCBsb2Nrcywg
YnV0IG5vIG9uZSB5ZXQgc3VwcG9ydHMgdGhpcyBhbmQKKyAgICAvLyBpdCBtYXkgZXZlbiBiZSBk
cm9wcGVkIGZyb20gdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIHNwZWMsIHNvIEkgZG9uJ3Qgc3Vn
Z2VzdCB5b3UgcmVseSBvbiBpdC4KKyAgICAvLyBDaHJvbWl1bS9XZWJLaXQgYWxzbyBkb2VzIG5v
dCB5ZXQgc3VwcG9ydCBhbnl0aGluZyBmaW5lciBncmFpbmVkIHRoYW4gZGF0YWJhc2UgbGV2ZWwg
bG9ja2luZywKKyAgICAvLyBzbyBpbiB0aGlzIHR1dG9yaWFsIHdlJ2xsIGp1c3QgcGFzcyBpbiB0
aGUgZW1wdHkgYXJyYXkgd2hpY2ggbWVhbnMgImxvY2sgdGhlIHdvcmxkIi4KKyAgICAvLworICAg
IC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbG9ja2luZyBtb2RlLiBUaGUg
ZGVmYXVsdCBpcyBSRUFEX09OTFkgKGkuZS4gYSBzaGFyZWQgbG9jaykuCisgICAgLy8gVGhhdCdz
IGZpbmUgZm9yIHRoaXMgY2FzZSwgYnV0IGxhdGVyIHdlJ2xsIGFzayBmb3IgSURCVHJhbnNhY3Rp
b24uUkVBRF9XUklURS4gQXQgdGhlIG1vbWVudCwKKyAgICAvLyBDaHJvbWl1bS9XZWJLaXQgcHJl
dGVuZHMgZXZlcnkgdHJhbnNhY3Rpb24gaXMgUkVBRF9XUklURSwgd2hpY2ggaXMga2luZCBvZiBi
YWQuIChOb3RlIHRoYXQKKyAgICAvLyBTTkFQU0hPVF9SRUFEIHdpbGwgc29vbiBiZSByZW1vdmVk
IGZyb20gdGhlIHNwZWMuKQorICAgIC8vCisgICAgLy8gVGhlIGxhc3QgcGFyYW1ldGVyIGlzIHRo
ZSB0aW1lb3V0IGxlbmd0aC4gQXQgdGhlIG1vbWVudCwgQ2hyb21pdW0vV2ViS2l0IGRlZmF1bHRz
IHRvIDAgd2hpY2gKKyAgICAvLyBtZWFucyBuZXZlciwgYnV0IGl0J3MgcG9zc2libGUgd2UnbGwg
Y2hhbmdlIHRoaXMgaW4gdGhlIGZ1dHVyZSwgc28gc2V0IGl0IGlmIHlvdSByZWFsbHkgY2FyZS4K
KyAgICB3aW5kb3cuY3VycmVudFRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oW10sIElEQlRy
YW5zYWN0aW9uLlJFQURfV1JJVEUsIDApOworICAgIGN1cnJlbnRUcmFuc2FjdGlvbi5vbmNvbXBs
ZXRlID0gdW5leHBlY3RlZENvbXBsZXRlOworICAgIGN1cnJlbnRUcmFuc2FjdGlvbi5vbmFib3J0
ID0gb25UcmFuc2FjdGlvbkFib3J0ZWQ7CisKKyAgICAvLyBWZXJpZnkgdGhhdCAicGVvcGxlIiBp
cyB0aGUgb25seSBvYmplY3Qgc3RvcmUgaW4gZXhpc3RhbmNlLiBUaGUgb2JqZWN0U3RvcmVzIGF0
dHJpYnV0ZSBpcworICAgIC8vIGEgRE9NU3RyaW5nTGlzdCB3aGljaCBpcyBzb21ld2hhdCBsaWtl
IGFuIGFycmF5LgorICAgIHZhciBvYmplY3RTdG9yZUxpc3QgPSBkYi5vYmplY3RTdG9yZXM7Cisg
ICAgaWYgKG9iamVjdFN0b3JlTGlzdC5sZW5ndGggIT0gMQorICAgICAgICB8fCAhb2JqZWN0U3Rv
cmVMaXN0LmNvbnRhaW5zKCJwZW9wbGUiKQorICAgICAgICB8fCBvYmplY3RTdG9yZUxpc3QuaXRl
bSgwKSAhPSAicGVvcGxlIgorICAgICAgICB8fCBvYmplY3RTdG9yZUxpc3RbMF0gIT0gInBlb3Bs
ZSIpIHsKKyAgICAgICAgbG9nRXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nLiIpOworICAgIH0K
KworICAgIC8vIExldCdzIGdyYWIgYSBoYW5kbGUgdG8gdGhlIG9iamVjdFN0b3JlLiBUaGlzIGhh
bmRsZSBpcyB0aWVkIHRvIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGNyZWF0ZXMKKyAgICAvLyBpdCBh
bmQgdGh1cyBiZWNvbWVzIGludmFsaWQgb25jZSB0aGlzIHRyYW5zYWN0aW9uIGNvbXBsZXRlcy4K
KyAgICB2YXIgb2JqZWN0U3RvcmUgPSBjdXJyZW50VHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoInBl
b3BsZSIpOworICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAgICAgIGxvZ0Vycm9yKCJTb21ldGhp
bmcgd2VudCB3cm9uZy4iKTsKKworICAgIC8vIElmIHdlIHRyeSB0byBncmFiIGFuIG9iamVjdFN0
b3JlIHRoYXQgZG9lc24ndCBleGlzdCwgSW5kZXhlZERCIHRocm93cyBhbiBleGNlcHRpb24uCisg
ICAgdHJ5IHsKKyAgICAgICAgY3VycmVudFRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCJ4Iik7Cisg
ICAgICAgIGxvZ0Vycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZy4iKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgZXJyb3IgbWVzc2FnZXMgaW4gZXhjZXB0aW9u
cyBhcmUgbW9zdGx5IGxpZXMgYXQgdGhlIG1vbWVudC4gVGhlIHJlYXNvbiBpcworICAgICAgICAv
LyB0aGF0IHRoZSBzcGVjIHJlLXVzZXMgZXhjZXB0aW9uIGNvZGVzIGZvciBleGlzdGluZyBleGNl
cHRpb25zIGFuZCB0aGVyZSdzIG5vIHdheSB3ZSBjYW4KKyAgICAgICAgLy8gZGlzYW1iaWd1YXRl
IGJldHdlZW4gdGhlIHR3by4gVGhlIGJlc3Qgd29yay1hcm91bmQgYXQgdGhlIG1vbWVudCBpcyB0
byBsb29rIGF0CisgICAgICAgIC8vIGh0dHA6Ly9kdmNzLnczLm9yZy9oZy9JbmRleGVkREIvcmF3
LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjdGhlLWlkYmRhdGFiYXNlZXhjZXB0aW9uLWludGVyZmFj
ZQorICAgICAgICAvLyB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIG51bWJlciBjb3JyZXNwb25kcyB0
by4gV2Ugd2lsbCB0cnkgdG8gcmVzb2x2ZSB0aGlzIHNvb24gaW4gc3BlYy1sYW5kLgorICAgIH0K
KworICAgIC8vIFZlcmlmeSB0aGF0IGZuYW1lIGFuZCBsbmFtZSBhcmUgdGhlIG9ubHkgaW5kZXhl
cyBpbiBleGlzdGFuY2UuCisgICAgaWYgKG9iamVjdFN0b3JlLmluZGV4TmFtZXMubGVuZ3RoICE9
IDIpCisgICAgICAgIGxvZ0Vycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZy4iKTsKKworICAgIC8v
IE5vdGUgdGhhdCBubyBhc3luYyBhY3Rpb25zIHdlcmUgZXZlciBxdWV1ZWQgdXAgYWdpYW5zdCBv
dXIgdHJhbnNhY3Rpb24sIHNvIGl0J2xsIGFib3J0IG9uY2UKKyAgICAvLyB3ZSBsZWF2ZSB0aGlz
IGNvbnRleHQuCit9CisKK2Z1bmN0aW9uIHVuZXhwZWN0ZWRDb21wbGV0ZSgpCit7CisgICAgbG9n
RXJyb3IoIkEgdHJhbnNhY3Rpb24gY29tbWl0dGVkIHVuZXhwZWN0ZWRseSEiKTsKK30KKworZnVu
Y3Rpb24gb25UcmFuc2FjdGlvbkFib3J0ZWQoKQoreworICAgIC8vIE5vdyBsZXQncyBtYWtlIGEg
cmVhbCB0cmFuc2FjdGlvbiBhbmQgYSBwZXJzb24gdG8gb3VyIG9iamVjdFN0b3JlLgorICAgIHdp
bmRvdy5jdXJyZW50VHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbInBlb3BsZSJdLCBJREJU
cmFuc2FjdGlvbi5SRUFEX1dSSVRFLCAwKTsKKyAgICBjdXJyZW50VHJhbnNhY3Rpb24ub25hYm9y
dCA9IHVuZXhwZWN0ZWRBYm9ydDsKKworICAgIHZhciBwZW9wbGUgPSBjdXJyZW50VHJhbnNhY3Rp
b24ub2JqZWN0U3RvcmUoInBlb3BsZSIpOworICAgIHZhciByZXF1ZXN0ID0gcGVvcGxlLnB1dCh7
Zm5hbWU6ICdKb2huJywgbG5hbWU6ICdEb2UnLCBpZDogMX0pOyAvLyBJZiBvdXIgb2JqZWN0U3Rv
cmUgZGlkbid0IGhhdmUgYSBrZXkgcGF0aCwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd291bGQgaGF2
ZSBiZWVuIHRoZSBrZXkuCisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBvblB1dFN1Y2Nlc3M7Cisg
ICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yOworCisgICAgLy8gV2hpbGUgd2Un
cmUgYXQgaXQsIHdoeSBub3QgYWRkIGEgZmV3IG1vcmU/IE11bHRpcGxlIHF1ZXVlZCB1cCBhc3lu
YyBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkCisgICAgLy8gc2VxdWVudGlhbGx5ICh0aG91Z2gg
dGhlcmUgaXMgdGFsayBvZiBwcmlvcml0aXppbmcgY3Vyc29yLmNvbnRpbnVlLS1zZWUgZGlzY3Vz
c2lvbiBiZWxvdykuIFNpbmNlCisgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaW5kaXZp
ZHVhbCBjb21tYW5kcycgc3VjY2Vzc2VzLCB3ZSdsbCBvbmx5IGJvdGhlciB3aXRoIG9uIGVycm9y
IGhhbmRsZXJzLgorICAgIC8vCisgICAgLy8gUmVtZW1iZXIgdGhhdCBvdXIgaW1wbGVtZW50YXRp
b24gb2YgdW5leHBlY3RlZEVycm9yIHNob3VsZCBhYm9ydCB0aGUgImN1cnJlbnRUcmFuc2FjdGlv
biIgaW4gdGhlCisgICAgLy8gY2FzZSBvZiBhbiBlcnJvci4gKFRob3VnaCBubyBlcnJvciBzaG91
bGQgb2NjdXIgaW4gdGhpcyBjYXNlLikKKyAgICBwZW9wbGUucHV0KHtmbmFtZTogJ0phbmUnLCBs
bmFtZTogJ0RvZScsIGlkOiAyfSkub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvcjsKKyAgICBwZW9w
bGUucHV0KHtmbmFtZTogJ1BoaWxpcCcsIGxuYW1lOiAnRnJ5JywgaWQ6IDN9KS5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yOworCisgICAgLy8gTm90IHNob3duIGhlcmUgYXJlIHRoZSAucmVtb3Zl
IG1ldGhvZCAod2hpY2ggaXMgc29vbiB0byBiZSByZW5hbWVkIC5kZWxldGUpIGFuZCAuYWRkICh3
aGljaCBpcworICAgIC8vIGxpa2UgLnB1dCBleGNlcHQgdGhhdCBpdCBmaXJlcyBhbiBvbmVycm9y
IGlmIHRoZSBlbGVtZW50IGFscmVhZHkgZXhpc3RzKS4KK30KKworZnVuY3Rpb24gb25QdXRTdWNj
ZXNzKCkKK3sKKyAgICAvLyBSZXN1bHQgaXMgdGhlIGtleSB1c2VkIGZvciB0aGUgcHV0LgorICAg
IGlmIChldmVudC5yZXN1bHQgIT09IDEpCisgICAgICAgIGxvZ0Vycm9yKCJTb21ldGhpbmcgd2Vu
dCB3cm9uZy4iKTsKKworICAgIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcXVlc3QgdGhlIHRy
YW5zYWN0aW9uIHZpYSBldmVudC50cmFuc2FjdGlvbiBmcm9tIHdpdGhpbiBhbnkgZXZlbnQgaGFu
ZGxlcgorICAgIC8vIChsaWtlIHRoaXMgb25lKSBidXQgdGhpcyBpcyBub3QgeWV0IGltcGxlbWVu
dGVkIGluIENocm9taXVtL1dlYktpdC4gQXMgYSB3b3JrLWFyb3VuZCwgd2UgdXNlIHRoZQorICAg
IC8vIGdsb2JhbCAiY3VycmVudFRyYW5zYWN0aW9uIiB2YXJpYWJsZSB3ZSBzZXQgYWJvdmUuCisg
ICAgY3VycmVudFRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBvblB1dFRyYW5zYWN0aW9uQ29tcGxl
dGU7Cit9CisKK2Z1bmN0aW9uIG9uUHV0VHJhbnNhY3Rpb25Db21wbGV0ZSgpCit7CisgICAgLy8g
T0ssIG5vdyBsZXQncyBxdWVyeSB0aGUgcGVvcGxlIG9iamVjdFN0b3JlIGluIGEgY291cGxlIGRp
ZmZlcmVudCB3YXlzLiBGaXJzdCB1cCwgbGV0J3MgdHJ5IGdldC4KKyAgICAvLyBJdCBzaW1wbHkg
dGFrZXMgaW4gYSBrZXkgYW5kIHJldHVybnMgYSByZXF1ZXN0IHdob3NlIHJlc3VsdCB3aWxsIGJl
IHRoZSB2YWx1ZS4KKyAgICB3aW5kb3cuY3VycmVudFRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rp
b24oWyJwZW9wbGUiXSwgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSwgMCk7CisgICAgY3VycmVu
dFRyYW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnQ7CisKKyAgICB2YXIgcGVvcGxl
ID0gY3VycmVudFRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCJwZW9wbGUiKTsKKyAgICB2YXIgcmVx
dWVzdCA9IHBlb3BsZS5nZXQoMSk7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBvbkdldFN1Y2Nl
c3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yOworCisgICAgLy8gTm90
ZSB0aGF0IG11bHRpcGxlIG9iamVjdFN0b3JlIChvciBpbmRleCkgbWV0aG9kIGNhbGxzIHdpbGwg
cmV0dXJuIGRpZmZlcmVudCBvYmplY3RzICh0aGF0IHN0aWxsCisgICAgLy8gcmVmZXIgdG8gdGhl
IHNhbWUgb2JqZWN0U3RvcmUvaW5kZXggb24gZGlzaykuCisgICAgcGVvcGxlLnNvbWVQcm9wZXJ0
eSA9IHRydWU7CisgICAgaWYgKGN1cnJlbnRUcmFuc2FjdGlvbi5vYmplY3RTdG9yZSgicGVvcGxl
Iikuc29tZVByb3BlcnR5KQorICAgICAgICBsb2dFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcu
Iik7Cit9CisKK2Z1bmN0aW9uIG9uR2V0U3VjY2VzcygpCit7CisgICAgaWYgKGV2ZW50LnJlc3Vs
dC5mbmFtZSAhPT0gIkpvaG4iKQorICAgICAgICBsb2dFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jv
bmcuIik7CisKKyAgICAvLyBFdmVudHMgaGF2ZSBhIC5zb3VyY2UgYXR0cmlidXRlIHdoaWNoIGlz
IHRoZSBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgaXQncyBvdXIK
KyAgICAvLyAicGVvcGxlIiBvYmplY3RTdG9yZSBvYmplY3QuCisgICAgdmFyIHBlb3BsZSA9IGV2
ZW50LnNvdXJjZTsKKworICAgIC8vIE5vdyBsZXQncyB0cnkgb3BlbmluZyBhIGN1cnNvciBmcm9t
IGlkIDEgKGV4Y2x1c2l2ZS9vcGVuKSB0byBpZCAzIChpbmNsdXNpdmUvY2xvc2VkKS4gVGhpcyBt
ZWFucworICAgIC8vIHdlJ2xsIGdldCB0aGUgb2JqZWN0cyBmb3IgaWRzIDIgYW5kIDMuIFlvdSBj
YW4gYWxzbyBjcmVhdGUgY3Vyc29ycyB0aGF0IGFyZSBvbmx5IHJpZ2h0IG9yIG9ubHkKKyAgICAv
LyBsZWZ0IGJvdW5kZWQgb3Igb21taXQgdGhlIGJvdW5kIGluIG9yZGVyIHRvIGdyYWIgYWxsIG9i
amVjdHMuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgZGlyZWN0aW9uCisgICAgLy8gd2hpY2ggY2Fu
IGJlIElEQkN1cnNvci5ORVhUIChkZWZhdWx0KSBmb3IgdGhlIGN1cnNvciB0byBtb3ZlIGZvcndh
cmQsIE5FWFRfTk9fRFVQTElDQVRFIHRvIG9ubHkKKyAgICAvLyByZXR1cm4gdW5pcXVlIGVudGly
ZXMgKG9ubHkgYXBwbGllcyB0byBpbmRleGVzIHdpdGggdW5pcXVlIHNldCB0byBmYWxzZSksIFBS
RVYgdG8gbW92ZSBiYWNrd2FyZHMsCisgICAgLy8gYW5kIFBSRVZfTk9fRFVQTElDQVRFLgorICAg
IHZhciBrZXlSYW5nZSA9IElEQktleVJhbmdlLmJvdW5kKDEsIDMsIHRydWUsIGZhbHNlKTsKKyAg
ICB2YXIgcmVxdWVzdCA9IHBlb3BsZS5vcGVuQ3Vyc29yKGtleVJhbmdlLCBJREJDdXJzb3IuTkVY
VCk7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBvbk9iamVjdFN0b3JlQ3Vyc29yOworICAgIHJl
cXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvcjsKK30KKworZnVuY3Rpb24gb25PYmplY3RT
dG9yZUN1cnNvcigpCit7CisgICAgLy8gVGhlIHJlc3VsdCBvZiBvcGVuQ3Vyc29yIGlzIGFuIElE
QkN1cnNvciBvYmplY3Qgb3IgbnVsbCBpZiB0aGVyZSBhcmUgbm8gKG1vcmUtLXNlZSBiZWxvdykK
KyAgICAvLyByZWNvcmRzIGxlZnQuCisgICAgdmFyIGN1cnNvciA9IGV2ZW50LnJlc3VsdDsKKyAg
ICBpZiAoY3Vyc29yID09PSBudWxsKSB7CisgICAgICAgIGN1cnNvckNvbXBsZXRlKGV2ZW50LnNv
dXJjZSk7IC8vIFRoZSBzb3J1Y2UgaXMgc3RpbGwgYW4gb2JqZWN0U3RvcmUuCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBjb3VsZCB1c2UgdGhlc2UgdmFsdWVzIGlmIHdlIHdh
bnRlZCB0by4KKyAgICB2YXIga2V5ID0gY3Vyc29yLmtleTsKKyAgICB2YXIgdmFsdWUgPSBjdXJz
b3IudmFsdWU7CisKKyAgICAvLyBjdXJzb3IuY291bnQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUg
cmVtb3ZlZC4KKyAgICAvLyBjdXJzb3IudXBkYXRlIGFuZCAucmVtb3ZlIGFyZSBub3QgeWV0IGlt
cGxlbWVudGVkIGluIENocm9taXVtL1dlYktpdC4KKworICAgIC8vIGN1cnNvci5jb250aW51ZSB3
aWxsIHJldXNlIHRoZSBzYW1lIHJlcXVlc3Qgb2JqZWN0IGFzIHdoYXQgb3BlbkN1cnNvciByZXR1
cm5lZC4gSW4gdGhlIGZ1dHVyZSwKKyAgICAvLyB3ZSBNQVkgcHJpb3JpdGl6ZSAuY29udGludWUo
KSBjYWxscyBhaGVhZCBvZiBhbGwgb3RoZXIgYXN5bmMgb3BlcmF0aW9ucyBxdWV1ZWQgdXAuIFRo
aXMgd2lsbAorICAgIC8vIGludHJvZHVjZSBhIGxldmVsIG9mIG5vbi1kZXRlcm1pbmlzbSBidXQg
c2hvdWxkIHNwZWVkIHRoaW5ncyB1cC4gTW96aWxsYSBoYXMgYWxyZWFkeSBpbXBsZW1lbnRlZAor
ICAgIC8vIHRoaXMgbm9uLXN0YW5kYXJkIGJlaGF2aW9yLCBmcm9tIHdoYXQgSSd2ZSBoZWFkLgor
ICAgIGV2ZW50LnJlc3VsdC5jb250aW51ZSgpOworfQorCitmdW5jdGlvbiBjdXJzb3JDb21wbGV0
ZShvYmplY3RTdG9yZSkKK3sKKyAgICAvLyBXaGlsZSBzdGlsbCBpbiB0aGUgc2FtZSB0cmFuc2Fj
dGlvbiwgbGV0J3Mgbm93IGRvIGEgbG9va3VwIG9uIHRoZSBsbmFtZSBpbmRleC4KKyAgICB2YXIg
bG5hbWUgPSBvYmplY3RTdG9yZS5pbmRleCgibG5hbWUiKTsKKworICAgIC8vIE5vdGUgdGhhdCB0
aGUgc3BlYyBoYXMgbm90IGJlZW4gdXBkYXRlZCB5ZXQsIGJ1dCBpbnN0ZWFkIG9mIGdldCBhbmQg
Z2V0T2JqZWN0LCB3ZSBub3cKKyAgICAvLyBoYXZlIGdldEtleSBhbmQgZ2V0LiBUaGUgZm9ybWVy
IHJldHVybnMgdGhlIG9iamVjdFN0b3JlJ3Mga2V5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGtl
eQorICAgIC8vIGluIHRoZSBpbmRleC4gZ2V0IHJldHVybnMgdGhlIG9iamVjdFN0b3JlJ3MgdmFs
dWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUga2V5IGluIHRoZQorICAgIC8vIGluZGV4LgorICAg
IHZhciByZXF1ZXN0ID0gbG5hbWUuZ2V0S2V5KCJEb2UiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IG9uSW5kZXhHZXRTdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvcjsKK30KKworZnVuY3Rpb24gb25JbmRleEdldFN1Y2Nlc3MoKQoreworICAgIC8vIEJlY2F1
c2Ugd2UgZGlkICJnZXRLZXkiIHRoZSByZXN1bHQgaXMgdGhlIG9iamVjdFN0b3JlJ3Mga2V5Lgor
ICAgIGlmIChldmVudC5yZXN1bHQgIT09IDEpCisgICAgICAgIGxvZ0Vycm9yKCJTb21ldGhpbmcg
d2VudCB3cm9uZy4iKTsKKworICAgIC8vIFNpbWlsYXJseSwgaW5kZXhlcyBoYXZlIG9wZW5DdXJz
b3IgYW5kIG9wZW5LZXlDdXJzb3IuIFdlJ2xsIHRyeSBhIGZldyBvZiB0aGVtIHdpdGggdmFyaW91
cworICAgIC8vIGRpZmZlcmVudCBJREJLZXlSYW5nZXMganVzdCB0byBkZW1vbnN0cmF0ZSBob3cg
dG8gdXNlIHRoZW0sIGJ1dCB3ZSB3b24ndCBib3RoZXIgdG8gaGFuZGxlCisgICAgLy8gdGhlIG9u
c3VjY2VzcyBjb25kaXRpb25zLgorICAgIHZhciBsbmFtZSA9IGV2ZW50LnNvdXJjZTsKKyAgICBs
bmFtZS5vcGVuQ3Vyc29yKElEQktleVJhbmdlLmxlZnRCb3VuZCgiRG9lIiwgZmFsc2UpLCBJREJD
dXJzb3IuTkVYVF9OT19EVVBMSUNBVEUpOworICAgIGxuYW1lLm9wZW5DdXJzb3IobnVsbCwgSURC
Q3Vyc29yLlBSRVZfTk9fRFVQTElDQVRFKTsKKyAgICBsbmFtZS5vcGVuQ3Vyc29yKElEQktleVJh
bmdlLnJpZ2h0Qm91bmQoIlpaWloiKSk7CisgICAgbG5hbWUub3BlbkN1cnNvcihJREJLZXlSYW5n
ZS5vbmx5KCJEb2UiKSwgSURCQ3Vyc29yLlBSRVYpOworICAgIGxuYW1lLm9wZW5DdXJzb3IoKTsK
KyAgICBsbmFtZS5vcGVuS2V5Q3Vyc29yKCk7CisKKyAgICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0
byByZXF1ZXN0IHRoZSB0cmFuc2FjdGlvbiB2aWEgZXZlbnQudHJhbnNhY3Rpb24gZnJvbSB3aXRo
aW4gYW55IGV2ZW50IGhhbmRsZXIKKyAgICAvLyAobGlrZSB0aGlzIG9uZSkgYnV0IHRoaXMgaXMg
bm90IHlldCBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bS9XZWJLaXQuIEFzIGEgd29yay1hcm91bmQs
IHdlIHVzZSB0aGUKKyAgICAvLyBnbG9iYWwgImN1cnJlbnRUcmFuc2FjdGlvbiIgdmFyaWFibGUg
d2Ugc2V0IGFib3ZlLgorICAgIGN1cnJlbnRUcmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gb25BbGxE
b25lOworfQorCitmdW5jdGlvbiBvbkFsbERvbmUoKQoreworICAgIGxvZygiRXZlcnl0aGluZyB3
b3JrZWQhIik7Cit9CisKKy8vIFRoZSB3YXkgc2V0VmVyc2lvbiBpcyBzdXBwb3NlZCB0byB3b3Jr
OgorLy8gICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgdG8gYmVnaW4gd2l0aCwgb2JqZWN0U3RvcmVz
IGFuZCBpbmRleGVzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gYSBzZXRWZXJzaW9uCisvLyB0cmFu
c2FjdGlvbiBhbmQgb25lIGNhbiBvbmx5IHJ1biBpZiBubyBvdGhlciBjb25uZWN0aW9ucyBhcmUg
b3BlbiB0byB0aGUgZGF0YWJhc2UuIFRoaXMgaXMgZGVzaWduZWQKKy8vIHRvIHNhdmUgYXBwIGRl
dmVsb3BlcnMgZnJvbSBoYXZpbmcgYW4gb2xkZXIgdmVyaXNvbiBvZiBhIHdlYiBwYWdlIHRoYXQg
ZXhwZWN0cyBhIGNlcnRhaW4gc2V0IG9mCisvLyBvYmplY3RTdG9yZXMgYW5kIGluZGV4ZXMgZnJv
bSBicmVha2luZyBpbiBvZGQgd2F5cyB3aGVuIHRoaW5ncyBnZXQgY2hhbmdlZCBvdXQgZnJvbSB1
bmRlcm5laXRoIGl0LgorLy8gSW4gdGhlIGZ1dHVyZSwgd2UnbGwgcHJvYmFibHkgYWRkIGEgbW9y
ZSBhZHZhbmNlZCBtZWNoYW5pc20sIGJ1dCB0aGlzIGlzIGl0IGZvciBub3cuCisvLyAgIEJlY2F1
c2UgYSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGNvdWxkIHN0YWxsIG91dCBuZWFybHkgZm9yZXZl
ciB1bnRpbCB0aGUgdXNlciBjbG9zZXMgd2luZG93cywKKy8vIHdlJ3ZlIGFkZGVkIGEgImJsb2Nr
ZWQiIGV2ZW50IHRvIHRoZSByZXF1ZXN0IG9iamVjdCByZXR1cm5lZCBieSBzZXRWZXJzaW9uLiBU
aGlzIHdpbGwgZmlyZSBpZiB0aGUKKy8vIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gY2FuJ3QgYmVn
aW4gYmVjYXVzZSBvdGhlciB3aW5kb3dzIGhhdmUgYW4gb3BlbiBjb25uZWN0aW9uLiBUaGUgYXBw
IGNhbiB0aGVuCisvLyBlaXRoZXIgcG9wIHNvbWV0aGluZyB1cCB0ZWxsaW5nIHRoZSB1c2VyIHRv
IGNsb3NlIHdpbmRvd3Mgb3IgaXQgY2FuIHRlbGwgdGhlIG90aGVyIHdpbmRvd3MgdG8gY2FsbAor
Ly8gLmNsb3NlKCkgb24gdGhlaXIgZGF0YWJhc2UgaGFuZGxlLiAuY2xvc2UoKSBoYWx0cyBhbnkg
bmV3IHRyYW5zYWN0aW9ucyBmcm9tIHN0YXJ0aW5nIGFuZCB3YWl0cyBmb3IKKy8vIHRoZSBleGlz
dGluZyBvbmVzIHRvIGZpbmlzaC4gSXQgdGhlbiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYW5kIGFu
eSBpbmRleGVkREIgY2FsbHMgYWZ0ZXJ3YXJkcyBhcmUKKy8vIGludmFsaWQgKHRoZXknbGwgcHJv
YmFibHkgdGhyb3csIGJ1dCB0aGlzIGlzbid0IHNwZWNpZmllZCB5ZXQpLiBXZSBtYXkgc3BlY2lm
eSAuY2xvc2UoKSB0byByZXR1cm4KKy8vIGFuIElEQlJlcXVlc3Qgb2JqZWN0IHNvIHRoYXQgd2Ug
Y2FuIGZpcmUgdGhlIG9uc3VjY2VzcyB3aGVuIHRoZSBjbG9zZSBjb21wbGV0ZXMuCisvLyAgIE9u
Y2UgaW5zaWRlIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiwgeW91IGNhbiBkbyBhbnl0aGluZyB5
b3UnZCBsaWtlLiBUaGUgb25lIGNvbm5lY3Rpb24gd2hpY2gKKy8vIHdhcyBhbGxvd2VkIHRvIHN0
YXkgb3BlbiB0byBjb21wbGV0ZSB0aGUgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiB3aWxsIHN0YXkg
YWxpdmUuIE11bHRpcGxlCisvLyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9ucyBjYW4gYmUgcXVldWVk
IHVwIGF0IG9uY2UgYW5kIHdpbGwgZmlyZSBpbiB0aGUgb3JkZXIgcXVldWVkICh0aG91Z2gKKy8v
IHRoaXMgb2J2aW91c2x5IG9ubHkgd29ya3MgaWYgdGhleSdyZSBxdWV1ZWQgaW4gdGhlIHNhbWUg
cGFnZSkuCisvLworLy8gVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHNldFZlcnNpb24gaW4gQ2hyb21p
dW0vV2ViS2l0OgorLy8gICBJbiBDaHJvbWl1bS9XZWJLaXQgd2UgY3VycmVudGx5IGRvbid0IGVu
Zm9yY2UgdGhlICJhbGwgY29ubmVjdGlvbnMgbXVzdCBiZSBjbG9zZWQgYmVmb3JlIGEKKy8vIHNl
dFZlcnNpb24gdHJhbnNhY3Rpb24gc3RhcnRzIiBydWxlLiBXZSBhbHNvIGRvbid0IGltcGxlbWVu
dCBkYXRhYmFzZS5jbG9zZSgpIG9yIGhhdmUgYSBibG9ja2VkCisvLyBldmVudCBvbiB0aGUgcmVx
dWVzdCAuc2V0VmVyc2lvbigpIHJldHVybnMuCisvLworLy8gVGhlIGN1cnJlbnQgc3RhdHVzIG9m
IHdvcmtlcnM6CisvLyAgIENocm9taXVtL1dlYktpdCBkbyBub3QgeWV0IHN1cHBvcnQgd29ya2Vy
cyB1c2luZyBJbmRleGVkREIuIFN1cHBvcnQgZm9yIHRoZSBhc3luYyBpbnRlcmZhY2UKKy8vIHdp
bGwgbGlrZWx5IGNvbWUgYmVmb3JlIHRoZSBzeW5jIGludGVyZmFjZS4gRm9yIG5vdywgYSB3b3Jr
LWFyb3VuZCBpcyB1c2luZyBwb3N0TWVzc2FnZSB0byB0ZWxsCisvLyB0aGUgcGFnZSB3aGF0IHRv
IGRvIG9uIHRoZSB3b3JrZXIncyBiZWhhbGYgaW4gYW4gYWQtaG9jIG1hbm5lci4gQW55dGhpbmcg
dGhhdCBjYW4gYmUgc2VyaWFsaXplZAorLy8gdG8gZGlzayBjYW4gYmUgc2VyaWFsaXplZCBmb3Ig
cG9zdE1lc3NhZ2UuCisKKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJzdGFydCgpIj4KK1BsZWFz
ZSB2aWV3IHNvdXJjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aGF0IHRoaXMgaXMgZG9pbmcg
YW5kIHdoeS4uLjxicj48YnI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>