<?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>202106</bug_id>
          
          <creation_ts>2019-09-23 09:39:33 -0700</creation_ts>
          <short_desc>results.webkit.org: Add investigation drawer</short_desc>
          <delta_ts>2019-09-25 13:28:19 -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>Tools / Tests</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="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1573330</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-23 09:39:33 -0700</bug_when>
    <thetext>Add drawer to allow investigation of a specific data point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573350</commentid>
    <comment_count>1</comment_count>
      <attachid>379378</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-23 10:44:59 -0700</bug_when>
    <thetext>Created attachment 379378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573487</commentid>
    <comment_count>2</comment_count>
      <attachid>379378</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2019-09-23 17:21:27 -0700</bug_when>
    <thetext>Comment on attachment 379378
Patch

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

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js:71
&gt;              let candidates = document.getElementsByClassName(&quot;main&quot;);
&gt; -            if (candidates.length)
&gt; -                main = candidates[0];
&gt; +            mains = [];
&gt; +            for (let count = 0; count &lt; candidates.length; ++count)
&gt; +                mains.push(candidates[count]);

Is there any reason to have mains and candidates separately? They will be end up with the same content, aren&apos;t they?

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js:72
&gt; +            console.log(mains);

Do wen need the logging here?

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/expectations.js:38
&gt; +    }

Nit: do we expect one blank line between each function?

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/expectations.js:48
&gt; +    }

ditto

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/expectations.js:51
&gt; +    }

ditto

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:32
&gt; +            let params = {

Use `const` whenever we can?

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:74
&gt; +            result += &apos; minutes to run&apos;;

Do we need leading space here as result before this statement should have tailing space.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:88
&gt; +    const result = Math.ceil(value / max * 100 - .5);

Isn&apos;t this equivalent to const result = Math.floor(value / max * 100);

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:98
&gt; +    let result = [];

This can be a `const`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573671</commentid>
    <comment_count>3</comment_count>
      <attachid>379378</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-24 09:05:24 -0700</bug_when>
    <thetext>Comment on attachment 379378
Patch

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

&gt;&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js:71
&gt;&gt; +                mains.push(candidates[count]);
&gt; 
&gt; Is there any reason to have mains and candidates separately? They will be end up with the same content, aren&apos;t they?

Because getEleementsByClassName doesn&apos;t actually return an array, it returns something like an array. So we couldn&apos;t use forEach. Don&apos;t feel very strongly about it, but that&apos;s why I did it.

&gt;&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/drawer.js:72
&gt;&gt; +            console.log(mains);
&gt; 
&gt; Do wen need the logging here?

No, that should be removed.

&gt;&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/expectations.js:38
&gt;&gt; +    }
&gt; 
&gt; Nit: do we expect one blank line between each function?

Not sure....oddly, we don&apos;t have strict style guidelines for JavaScript (or at least, the aren&apos;t enforced with check-webkit-style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573687</commentid>
    <comment_count>4</comment_count>
      <attachid>379378</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-09-24 10:02:53 -0700</bug_when>
    <thetext>Comment on attachment 379378
Patch

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

&gt;&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:88
&gt;&gt; +    const result = Math.ceil(value / max * 100 - .5);
&gt; 
&gt; Isn&apos;t this equivalent to const result = Math.floor(value / max * 100);

95.4 =&gt;  94.9 =&gt; 95
95.6 =&gt; 95.1 =&gt; 96 

This is more like Math.round</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573696</commentid>
    <comment_count>5</comment_count>
      <attachid>379378</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-09-24 10:43:44 -0700</bug_when>
    <thetext>Comment on attachment 379378
Patch

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

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:65
&gt; +        const time = data.stats.end_time - data.stats.start_time;

This looks like a time stamp, you can directly use new Date(time) to get the minutes and seconds directly https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:131
&gt; +                    ${data.start_time ? succeeded.toLocaleString() : percentage(succeeded, data.stats.tests_run)} passed

Display actual `${succeeded} / ${data.stats.tests_run} ${percentage(succeeded, data.stats.tests_run)}` may be more clear

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:147
&gt; +                ${data.start_time ? value.toLocaleString() : percentage(value, data.stats.tests_run)} ${type}

Ditto

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:169
&gt; +        `${data.length} reports for ${agregateData.configuration}`,

If we have multiple test results for the same configuration, will the data always be the same, like how many tests run, how many tests failed? I think list the detail of each test result can help the user to understand the percentage you calculated. And it will be more friendly for user to look into the details.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:203
&gt; +        const result = this.ref &amp;&amp; this.content &amp;&amp; this.close &amp;&amp; this.previous &amp;&amp; this.next;

Add event streams for expand / collapse / select can help you to easily access the ref.element, the check here won&apos;t grantee you have the ref.element property because ref will only has the element when the element mounted on the DOM, just calling REF.createRef() won&apos;t have any dom element inside of it.

For event stream you can add action handler in those refs&apos; onElementMount, thus all those handlers can be granted to have the ref&apos;s element. You will need to unregister those handlers when onElementUnmounted to make sure those won&apos;t triggered for destroyed ref.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:234
&gt; +        return `&lt;div class=&quot;drawer main right-sidebar&quot; ref=&quot;${this.ref}&quot; style=&quot;z-index: 20&quot;&gt;

I&apos;d love to have a list of results on the left of the drawer.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:240
&gt; +                        &lt;a class=&quot;button&quot; style=&quot;cursor: pointer&quot; ref=&quot;${this.close}&quot;&gt;Close&lt;/a&gt;

You may want to use the &quot;close-header&quot; see my dashboard for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573873</commentid>
    <comment_count>6</comment_count>
      <attachid>379378</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-24 15:49:45 -0700</bug_when>
    <thetext>Comment on attachment 379378
Patch

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

&gt;&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:131
&gt;&gt; +                    ${data.start_time ? succeeded.toLocaleString() : percentage(succeeded, data.stats.tests_run)} passed
&gt; 
&gt; Display actual `${succeeded} / ${data.stats.tests_run} ${percentage(succeeded, data.stats.tests_run)}` may be more clear

That gets pretty long and unwieldy with hundreds of thousands of results reporting.

&gt;&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:169
&gt;&gt; +        `${data.length} reports for ${agregateData.configuration}`,
&gt; 
&gt; If we have multiple test results for the same configuration, will the data always be the same, like how many tests run, how many tests failed? I think list the detail of each test result can help the user to understand the percentage you calculated. And it will be more friendly for user to look into the details.

Not necessarily. You can inspect existing results to confirm that.

I think a list of each configuration with the a bubble for it&apos;s state would go a long ways to helping, though.

&gt;&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/investigate.js:240
&gt;&gt; +                        &lt;a class=&quot;button&quot; style=&quot;cursor: pointer&quot; ref=&quot;${this.close}&quot;&gt;Close&lt;/a&gt;
&gt; 
&gt; You may want to use the &quot;close-header&quot; see my dashboard for example.

I did look at this....I&apos;d like to find a way to integrate the close header with the next/previous buttons, otherwise we&apos;d have a 2-tiered header, and don&apos;t think we have enough space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573894</commentid>
    <comment_count>7</comment_count>
      <attachid>379514</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-24 16:36:25 -0700</bug_when>
    <thetext>Created attachment 379514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574111</commentid>
    <comment_count>8</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-09-25 10:48:06 -0700</bug_when>
    <thetext>unofficially r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574115</commentid>
    <comment_count>9</comment_count>
      <attachid>379559</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-25 11:01:18 -0700</bug_when>
    <thetext>Created attachment 379559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574158</commentid>
    <comment_count>10</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-09-25 12:07:10 -0700</bug_when>
    <thetext>rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574160</commentid>
    <comment_count>11</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2019-09-25 12:15:03 -0700</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574190</commentid>
    <comment_count>12</comment_count>
      <attachid>379559</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-25 13:27:42 -0700</bug_when>
    <thetext>Comment on attachment 379559
Patch

Clearing flags on attachment: 379559

Committed r250355: &lt;https://trac.webkit.org/changeset/250355&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574191</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-25 13:27:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574192</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-25 13:28:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/55716341&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379378</attachid>
            <date>2019-09-23 10:44:59 -0700</date>
            <delta_ts>2019-09-24 16:36:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202106-20190923104458.patch</filename>
            <type>text/plain</type>
            <size>38497</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDIzNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE5LTA5LTIzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IEFkZCBpbnZlc3RpZ2F0aW9uIGRyYXdl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTA2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiByZXN1
bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9kcmF3ZXIuanM6IFN1cHBvcnQgbXVs
dGlwbGUgJ21haW4nIGNsYXNzZXMuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkv
dmlldy9zdGF0aWMvanMvZXhwZWN0YXRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKEV4cGVjdGF0
aW9ucy5jb2xvck1hcCk6IFJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyB0eXBlIHN0cmluZ3Mg
dG8gY29sb3JzLgorICAgICAgICAoRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZCk6IE1hcCBh
IHN0cmluZyB0byBhIHN0YXRlIElEIGZvciBzb3J0aW5nLgorICAgICAgICAoRXhwZWN0YXRpb25z
LnR5cGVGb3JJZCk6IFJldHVybiBhIHR5cGUgc3RyaW5nIGdpdmVuIGFuIElELgorICAgICAgICAo
RXhwZWN0YXRpb25zLnN5bWJvbEZvcklkKTogUmV0dXJuIGEgc3ltYm9sIGZvciBhIHR5cGUgZ2l2
ZW4gYW4gSUQuCisgICAgICAgIChFeHBlY3RhdGlvbnMuY29sb3JGb3JJZCk6IFJldHVybiBhIGNv
bG9yIGdpdmVuIGFuIElELgorICAgICAgICAoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRz
KTogR2l2ZW4gYSBsaXN0IG9mIGFjdHVhbCByZXN1bHRzIGFuZCBleHBlY3RlZCByZXN1bHRzLAor
ICAgICAgICByZXR1cm4gYSBzdGF0ZS4KKyAgICAgICAgKEV4cGVjdGF0aW9ucyk6CisgICAgICAg
ICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanM6
IEFkZGVkLgorICAgICAgICAoY29tbWl0c0ZvclV1aWQpOgorICAgICAgICAodGVzdFJ1bkxpbmsp
OgorICAgICAgICAoZWxhcHNlZCk6CisgICAgICAgIChwZXJjZW50YWdlKToKKyAgICAgICAgKGNv
bnRlbnRGb3JBZ3JlZ2F0ZURhdGEpOgorICAgICAgICAoY29udGVudEZvckRhdGEpOgorICAgICAg
ICAoX0ludmVzdGlnYXRlRHJhd2VyKToKKyAgICAgICAgKF9JbnZlc3RpZ2F0ZURyYXdlci5wcm90
b3R5cGUuaXNSZW5kZXJlZCk6CisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBl
LmV4cGFuZCk6IEV4cGFuZCB0aGUgaW52ZXN0aWdhdGlvbiBkcmF3ZXIuCisgICAgICAgIChfSW52
ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBlLmNvbGxhcHNlKTogQ29sbGFwc2UgdGhlIGludmVzdGln
YXRpb24gZHJhd2VyLgorICAgICAgICAoX0ludmVzdGlnYXRlRHJhd2VyLnByb3RvdHlwZS5zZWxl
Y3QpOiBTZWxlY3QgYW4gZWxlbWVudCB0byBpbnZlc3RpZ2F0ZS4KKyAgICAgICAgKiByZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qczoKKyAgICAgICAgKHN0
YXRzRm9yU2luZ2xlUmVzdWx0KTogTW92ZSBFeHBlY3RhdGlvbiBjb25zdGFudHMuCisgICAgICAg
IChUaW1lbGluZUZyb21FbmRwb2ludC5wcm90b3R5cGUucmVuZGVyKTogSW52ZXN0aWdhdGUgc3Bl
Y2lmaWMgZGF0YSBwb2ludHMgaW5zdGVhZAorICAgICAgICBvZiBqdW1waW5nIHRvIHRoZSBidWls
ZC4KKyAgICAgICAgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQpOiBEZWxldGVkLgorICAg
ICAgICAoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAg
KEV4cGVjdGF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9jc3Mvd2Via2l0LmNzczoKKyAgICAgICAgKC5kcmF3ZXIu
ZGlzcGxheSk6IE1ha2UgbWluaW11bSBoZWlnaHQuCisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFu
ZCAobWluLXdpZHRoOiA2MDBweCkpOiBNb3ZlIG1haW4gYW5kIHNpZGViYXIgc28gdGhleSBvdmVy
cmlkZSBkcmF3ZXIuCisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Njhw
eCkpOiBEaXR0by4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBs
YXRlcy9jb21taXRzLmh0bWw6CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWw6CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sOgorCiAyMDE5LTA5LTIwICBBYWth
c2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVdTXSBKU0MgcXVl
dWVzIHNob3VsZCByZS1idWlsZCBUb1QgYW5kIGNvbXBhcmUgcmVzdWx0cyBvbiBidWlsZCBmYWls
dXJlCkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9k
cmF3ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy9zdGF0aWMvanMvZHJhd2VyLmpzCShyZXZpc2lvbiAyNTAyMzMpCisrKyBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9kcmF3ZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgZnVuY3Rpb24gRHJhd2VyKGNvbnRyb2xzID0gW10sIG9uQ29sbGFw
cwogICAgIGNvbnN0IEhJRERFTiA9IGZhbHNlOwogICAgIGNvbnN0IFZJU0lCTEUgPSB0cnVlOwog
ICAgIGxldCBkcmF3ZXJTdGF0ZSA9IFZJU0lCTEU7Ci0gICAgbGV0IG1haW4gPSBudWxsOworICAg
IGxldCBtYWlucyA9IFtdOwogCiAgICAgY29uc3Qgc2lkZWJhckNvbnRyb2wgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtb2JpbGUtc2lkZWJhci1jb250cm9sJylbMF07CiAgICAg
c2lkZWJhckNvbnRyb2wuY2xhc3NMaXN0LmFkZCgnZGlzcGxheScpOwpAQCAtNTAsMTIgKzUwLDEw
IEBAIGZ1bmN0aW9uIERyYXdlcihjb250cm9scyA9IFtdLCBvbkNvbGxhcHMKICAgICAgICAgb25T
dGF0ZVVwZGF0ZTogKGVsZW1lbnQsIHN0YXRlKSA9PiB7CiAgICAgICAgICAgICBpZiAoc3RhdGUp
IHsKICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwot
ICAgICAgICAgICAgICAgIGlmIChtYWluKQotICAgICAgICAgICAgICAgICAgICBtYWluLmNsYXNz
TGlzdC5yZW1vdmUoImhpZGRlbiIpOworICAgICAgICAgICAgICAgIG1haW5zLmZvckVhY2gobWFp
biA9PiBtYWluLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsKLSAg
ICAgICAgICAgICAgICBpZiAobWFpbikKLSAgICAgICAgICAgICAgICAgICAgbWFpbi5jbGFzc0xp
c3QuYWRkKCJoaWRkZW4iKTsKKyAgICAgICAgICAgICAgICBtYWlucy5mb3JFYWNoKG1haW4gPT4g
bWFpbi5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGZvciAobGV0IG5vZGUgb2YgZWxlbWVudC5jaGlsZHJlbikgewpAQCAtNjgsOCArNjYsMTAg
QEAgZnVuY3Rpb24gRHJhd2VyKGNvbnRyb2xzID0gW10sIG9uQ29sbGFwcwogICAgICAgICB9LAog
ICAgICAgICBvbkVsZW1lbnRNb3VudDogKGVsZW1lbnQpID0+IHsKICAgICAgICAgICAgIGxldCBj
YW5kaWRhdGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibWFpbiIpOwotICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgIG1haW4gPSBj
YW5kaWRhdGVzWzBdOworICAgICAgICAgICAgbWFpbnMgPSBbXTsKKyAgICAgICAgICAgIGZvciAo
bGV0IGNvdW50ID0gMDsgY291bnQgPCBjYW5kaWRhdGVzLmxlbmd0aDsgKytjb3VudCkKKyAgICAg
ICAgICAgICAgICBtYWlucy5wdXNoKGNhbmRpZGF0ZXNbY291bnRdKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKG1haW5zKTsKIAogICAgICAgICAgICAgc2lkZWJhckNvbnRyb2wub25jbGljayA9
ICgpID0+IHsKICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5KQpJbmRl
eDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvZXhwZWN0YXRp
b25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcv
c3RhdGljL2pzL2V4cGVjdGF0aW9ucy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9leHBlY3RhdGlvbnMuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8vIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy8v
IGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIKKy8vIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorLy8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisvLyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisvLyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorLy8gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisvLyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKy8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKy8vIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgRXhwZWN0YXRpb25zCit7CisgICAgc3Rh
dGljIGNvbG9yTWFwKCkgeworICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0
ZWRTdHlsZShkb2N1bWVudC5ib2R5KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHN1
Y2Nlc3M6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ncmVlbkxpZ2h0JykudHJp
bSgpLAorICAgICAgICAgICAgZmFpbGVkOiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUo
Jy0tcmVkTGlnaHQnKS50cmltKCksCisgICAgICAgICAgICB0aW1lZG91dDogY29tcHV0ZWRTdHls
ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLW9yYW5nZUxpZ2h0JykudHJpbSgpLAorICAgICAgICAgICAg
Y3Jhc2hlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXB1cnBsZUxpZ2h0Jyku
dHJpbSgpLAorICAgICAgICB9OworICAgIH0KKworICAgIHN0YXRpYyBzdHJpbmdUb1N0YXRlSWQo
c3RyaW5nKSB7CisgICAgICAgIHJldHVybiBFeHBlY3RhdGlvbnMuc3RhdGVUb0lkTWFwW3N0cmlu
Z107CisgICAgfQorICAgIHN0YXRpYyB0eXBlRm9ySWQoc3RyaW5nKSB7CisgICAgICAgIGNvbnN0
IGlkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChzdHJpbmcpOworICAgICAgICBsZXQg
cmVzdWx0ID0gJ3N1Y2Nlc3MnOworICAgICAgICBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzLmZv
ckVhY2godHlwZSA9PiB7CisgICAgICAgICAgICBjb25zdCBpZEZvclR5cGUgPSBFeHBlY3RhdGlv
bnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZU1hcFt0eXBlXSk7Cisg
ICAgICAgICAgICBpZiAoaWQgPD0gaWRGb3JUeXBlKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHR5cGU7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBz
dGF0aWMgc3ltYm9sRm9ySWQoc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBFeHBlY3RhdGlvbnMu
c3ltYm9sTWFwW0V4cGVjdGF0aW9ucy50eXBlRm9ySWQoc3RyaW5nKV07CisgICAgfQorICAgIHN0
YXRpYyBjb2xvckZvcklkKHN0cmluZykgeworICAgICAgICByZXR1cm4gRXhwZWN0YXRpb25zLmNv
bG9yTWFwKClbRXhwZWN0YXRpb25zLnR5cGVGb3JJZChzdHJpbmcpXTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdW5leHBlY3RlZFJlc3VsdHMocmVzdWx0cywgZXhwZWN0YXRpb25zKQorICAgIHsKKyAg
ICAgICAgbGV0IHIgPSByZXN1bHRzLnNwbGl0KCcuJyk7CisgICAgICAgIGV4cGVjdGF0aW9ucy5z
cGxpdCgnICcpLmZvckVhY2goZXhwZWN0YXRpb24gPT4geworICAgICAgICAgICAgY29uc3QgaSA9
IHIuaW5kZXhPZihleHBlY3RhdGlvbik7CisgICAgICAgICAgICBpZiAoaSA+IC0xKQorICAgICAg
ICAgICAgICAgIHIuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uID09
PSAnRkFJTCcpCisgICAgICAgICAgICAgICAgWydURVhUJywgJ0FVRElPJywgJ0lNQUdFJ10uZm9y
RWFjaChleHBlY3RhdGlvbiA9PiB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSByLmlu
ZGV4T2YoZXhwZWN0YXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IC0xKQorICAg
ICAgICAgICAgICAgICAgICAgICAgci5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgICAgICBsZXQgcmVzdWx0ID0gJ1BBU1MnOworICAgICAgICByLmZv
ckVhY2goY2FuZGlkYXRlID0+IHsKKyAgICAgICAgICAgIGlmIChFeHBlY3RhdGlvbnMuc3RyaW5n
VG9TdGF0ZUlkKGNhbmRpZGF0ZSkgPCBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKHJlc3Vs
dCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FuZGlkYXRlOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK0V4cGVjdGF0aW9ucy5zdGF0ZVRvSWRN
YXAgPSB7CisgICAgQ1JBU0g6IDB4MDAsCisgICAgVElNRU9VVDogMHgwOCwKKyAgICBJTUFHRTog
MHgxMCwKKyAgICBBVURJTzogMHgxOCwKKyAgICBURVhUOiAweDIwLAorICAgIEZBSUw6IDB4Mjgs
CisgICAgRVJST1I6IDB4MzAsCisgICAgV0FSTklORzogMHgzOCwKKyAgICBQQVNTOiAweDQwLAor
fTsKK0V4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMgPSBbJ2ZhaWxlZCcsICd0aW1lZG91dCcsICdj
cmFzaGVkJ107CitFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVNYXAgPSB7CisgICAgZmFpbGVkOiAn
RVJST1InLAorICAgIHRpbWVkb3V0OiAnVElNRU9VVCcsCisgICAgY3Jhc2hlZDogJ0NSQVNIJywK
K30KK0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAgPSB7CisgICAgc3VjY2VzczogJ+KckycsCisgICAg
ZmFpbGVkOiAn8J2WtycsCisgICAgdGltZWRvdXQ6ICfijosnLAorICAgIGNyYXNoZWQ6ICchJywK
K30KKworZXhwb3J0IHtFeHBlY3RhdGlvbnN9OwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVz
dWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanMJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0
aWMvanMvaW52ZXN0aWdhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDcgQEAKKy8v
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLwor
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIKKy8vIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorLy8gVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisvLyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisvLyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
Ly8gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisvLyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorLy8gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
Ky8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKy8vIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xpYnJhcnkvanMvUmVmLmpzJzsKK2ltcG9ydCB7Q29t
bWl0QmFua30gZnJvbSAnL2Fzc2V0cy9qcy9jb21taXQuanMnOworaW1wb3J0IHtxdWVyeVRvUGFy
YW1zLCBwYXJhbXNUb1F1ZXJ5LCBRdWVyeU1vZGlmaWVyLCB9IGZyb20gJy9hc3NldHMvanMvY29t
bW9uLmpzJzsKK2ltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1
cmF0aW9uLmpzJworaW1wb3J0IHtFeHBlY3RhdGlvbnN9IGZyb20gJy9hc3NldHMvanMvZXhwZWN0
YXRpb25zLmpzJzsKKworZnVuY3Rpb24gY29tbWl0c0ZvclV1aWQodXVpZCkgeworICAgIHJldHVy
biBgQ29tbWl0czogJHtDb21taXRCYW5rLmNvbW1pdHNEdXJpbmdVdWlkKHV1aWQpLm1hcCgoY29t
bWl0KSA9PiB7CisgICAgICAgICAgICBsZXQgcGFyYW1zID0geworICAgICAgICAgICAgICAgIGJy
YW5jaDogY29tbWl0LmJyYW5jaCA/IFtjb21taXQuYnJhbmNoXSA6IGJyYW5jaCwKKyAgICAgICAg
ICAgICAgICB1dWlkOiBbY29tbWl0LnV1aWRdLAorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCFwYXJhbXMuYnJhbmNoKQorICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuYnJhbmNo
OworICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBwYXJhbXNUb1F1ZXJ5KHBhcmFtcyk7CisgICAg
ICAgICAgICByZXR1cm4gYDxhIGhyZWY9Ii9jb21taXQvaW5mbz8ke3F1ZXJ5fSIgdGFyZ2V0PSJf
YmxhbmsiPiR7Y29tbWl0LmlkLnN1YnN0cmluZygwLDEyKX08L2E+YDsKKyAgICAgICAgfSkuam9p
bignLCAnKX1gCit9CisKK2Z1bmN0aW9uIHRlc3RSdW5MaW5rKHN1aXRlLCBkYXRhKQoreworICAg
IGlmICghZGF0YS5zdGFydF90aW1lKQorICAgICAgICByZXR1cm4gJyc7CisgICAgY29uc3QgYnJh
bmNoID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoOwor
ICAgIHJldHVybiBgPGEgaHJlZj0iL3VybHMvYnVpbGQ/JHtwYXJhbXNUb1F1ZXJ5KGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgbGV0IGJ1aWxkUGFyYW1zID0gZGF0YS5jb25maWd1cmF0aW9uLnRvUGFy
YW1zKCk7CisgICAgICAgIGJ1aWxkUGFyYW1zWydzdWl0ZSddID0gW3N1aXRlXTsKKyAgICAgICAg
YnVpbGRQYXJhbXNbJ3V1aWQnXSA9IFtkYXRhLnV1aWRdOworICAgICAgICBidWlsZFBhcmFtc1sn
YWZ0ZXJfdGltZSddID0gW2RhdGEuc3RhcnRfdGltZV07CisgICAgICAgIGJ1aWxkUGFyYW1zWydi
ZWZvcmVfdGltZSddID0gW2RhdGEuc3RhcnRfdGltZV07CisgICAgICAgIGlmIChicmFuY2gpCisg
ICAgICAgICAgICBidWlsZFBhcmFtc1snYnJhbmNoJ10gPSBicmFuY2g7CisgICAgICAgIHJldHVy
biBidWlsZFBhcmFtczsKKyAgICB9ICgpKX0iIHRhcmdldD0iX2JsYW5rIj5UZXN0IHJ1bjwvYT4g
QCAke25ldyBEYXRlKGRhdGEuc3RhcnRfdGltZSAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCl9YDsK
K30KKworZnVuY3Rpb24gZWxhcHNlZChkYXRhKQoreworICAgIGlmIChkYXRhLnRpbWUpCisgICAg
ICAgIHJldHVybiBgVG9vayAke2RhdGEudGltZSAvIDEwMDB9IHNlY29uZHNgOworICAgIGlmIChk
YXRhLnN0YXRzICYmIGRhdGEuc3RhdHMuc3RhcnRfdGltZSAmJiBkYXRhLnN0YXRzLmVuZF90aW1l
KSB7CisgICAgICAgIGNvbnN0IHRpbWUgPSBkYXRhLnN0YXRzLmVuZF90aW1lIC0gZGF0YS5zdGF0
cy5zdGFydF90aW1lOworICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcih0aW1lIC8g
NjApOworICAgICAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcih0aW1lICUgNjApOworICAg
ICAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBNYXRoLmZsb29yKHRpbWUgKiAxMDAwKSAlIDEwMDA7
CisgICAgICAgIGxldCByZXN1bHQgPSAnU3VpdGUgdG9vayAnOworICAgICAgICBpZiAobWludXRl
cykKKyAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW51dGVzfTpgOworICAgICAgICByZXN1bHQg
Kz0gYCR7c2Vjb25kcyA8PSA5ICYmIG1pbnV0ZXMgPyAnMCcgOiAnJ30ke3NlY29uZHN9LiR7bWls
bGlzZWNvbmRzIDw9IDk5ID8gJzAnIDogJyd9JHttaWxsaXNlY29uZHMgPD0gOSA/ICcwJyA6ICcn
fSR7bWlsbGlzZWNvbmRzfSBgOworICAgICAgICBpZiAobWludXRlcykKKyAgICAgICAgICAgIHJl
c3VsdCArPSAnIG1pbnV0ZXMgdG8gcnVuJzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVz
dWx0ICs9ICcgc2Vjb25kcyB0byBydW4nOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICByZXR1cm4gJyc7Cit9CisKK2Z1bmN0aW9uIHBlcmNlbnRhZ2UodmFsdWUsIG1heCkKK3sK
KyAgICBpZiAodmFsdWUgPT09IG1heCkKKyAgICAgICAgcmV0dXJuICcxMDAgJSc7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuICcwICUnOworICAgIGNvbnN0IHJlc3VsdCA9IE1hdGgu
Y2VpbCh2YWx1ZSAvIG1heCAqIDEwMCAtIC41KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuICc8MSAlJzsKKyAgICBpZiAocmVzdWx0ID09PSAxMDApCisgICAgICAgIHJldHVybiAn
OTkgJSc7CisgICAgcmV0dXJuIGAke3Jlc3VsdH0gJWAKK30KKworZnVuY3Rpb24gcmVzdWx0c0Zv
ckRhdGEoZGF0YSwgd2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2UpCit7CisgICAgbGV0IHJlc3Vs
dCA9IFtdOworICAgIGxldCB0ZXN0c1JhbiA9IDE7CisgICAgbGV0IHRvdGFsVGVzdHMgPSAxOwor
ICAgIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMudGVzdHNfcnVuKSB7CisgICAgICAgIHRl
c3RzUmFuID0gZGF0YS5zdGF0cy50ZXN0c19ydW47CisgICAgICAgIHRvdGFsVGVzdHMgPSBkYXRh
LnN0YXRzLnRlc3RzX3J1biArIChkYXRhLnN0YXRzLnRlc3RzX3NraXBwZWQgPyBkYXRhLnN0YXRz
LnRlc3RzX3NraXBwZWQgOiAwKTsKKyAgICB9CisgICAgcmVzdWx0LnB1c2goYFJhbiAke3Rlc3Rz
UmFuLnRvTG9jYWxlU3RyaW5nKCl9IG9mICR7dG90YWxUZXN0cy50b0xvY2FsZVN0cmluZygpfSB0
ZXN0c2ApOworICAgIGlmIChkYXRhLmFjdHVhbCkgeworICAgICAgICBjb25zdCB0eXBlID0gRXhw
ZWN0YXRpb25zLnR5cGVGb3JJZChkYXRhLmFjdHVhbCk7CisgICAgICAgIHJlc3VsdC5wdXNoKGA8
ZGl2PgorICAgICAgICAgICAgICAgIEFjdHVhbDogJHtkYXRhLmFjdHVhbH0KKyAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAg
IDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWwiPiR7RXhw
ZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4K
KyAgICAgICAgICAgIDwvZGl2PmApOworICAgIH0KKyAgICBpZiAoZGF0YS5leHBlY3RlZCkgewor
ICAgICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLnR5cGVGb3JJZChkYXRhLmV4cGVjdGVk
KTsKKyAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+CisgICAgICAgICAgICAgICAgRXhwZWN0ZWQ6
ICR7ZGF0YS5leHBlY3RlZH0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBl
fSBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5
bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWwiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08
L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PmApOworICAg
IH0KKyAgICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLnN0YXRzLnRlc3RzX3J1bikgeworICAgICAg
ICBjb25zdCBzdWNjZWVkZWQgPSBkYXRhLnN0YXRzLnRlc3RzX3J1biAtIGRhdGEuc3RhdHNbYHRl
c3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6ICdfJ31mYWlsZWRgXTsK
KyAgICAgICAgaWYgKHN1Y2NlZWRlZCkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2Pgor
ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3Qgc3VjY2VzcyBzbWFsbCI+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdl
aWdodDogbm9ybWFsIj4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAuc3VjY2Vzc308L2Rpdj4KKyAg
ICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFy
dF90aW1lID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHN1Y2NlZWRl
ZCwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWQKKyAgICAgICAgICAgICAgICA8L2Rpdj5g
KTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5
cGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghZGF0YS5zdGF0cykKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBl
c1tpXTsKKyAgICAgICAgbGV0IHZhbHVlID0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJF
eHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfSR7dHlwZX1gXTsKKyAgICAgICAgaWYgKGkg
PCBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzLmxlbmd0aCAtIDEpCisgICAgICAgICAgICB2YWx1
ZSAtPSBkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVk
XycgOiAnXyd9JHtFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzW2kgKyAxXX1gXTsKKyAgICAgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXN1bHQucHVzaChg
PGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+Cisg
ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2Vp
Z2h0OiBub3JtYWwiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KKyAgICAg
ICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAke2RhdGEuc3RhcnRfdGltZSA/IHZh
bHVlLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50YWdlKHZhbHVlLCBkYXRhLnN0YXRzLnRlc3Rz
X3J1bil9ICR7dHlwZX0KKyAgICAgICAgICAgIDwvZGl2PmApOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitmdW5jdGlvbiByZW5kZXJJbnZlc3RpZ2F0ZURyYXdlcihhcnJheXMpCit7
CisgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgICAgICAgJHthcnJheXMubWFw
KGFycmF5ID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImNvbC1zLTYg
bGlzdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAke2FycmF5Lm1hcChlbGVtZW50ID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9Iml0ZW0iPiR7
ZWxlbWVudH08L2Rpdj5gOworICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyl9Cisg
ICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7CisgICAgICAgICAgICB9KS5qb2luKCc8ZGl2IGNs
YXNzPSJkaXZpZGVyIG1vYmlsZS1jb250cm9sIj48L2Rpdj4nKX0KKyAgICAgICAgPC9kaXY+YAor
fQorCitmdW5jdGlvbiBjb250ZW50Rm9yQWdyZWdhdGVEYXRhKHN1aXRlLCBhZ3JlZ2F0ZURhdGEs
IGRhdGEsIHdpbGxGaWx0ZXJFeHBlY3RlZCA9IGZhbHNlKQoreworICAgIGNvbnN0IG1ldGFEYXRh
ID0gWworICAgICAgICBgJHtkYXRhLmxlbmd0aH0gcmVwb3J0cyBmb3IgJHthZ3JlZ2F0ZURhdGEu
Y29uZmlndXJhdGlvbn1gLAorICAgICAgICBjb21taXRzRm9yVXVpZChhZ3JlZ2F0ZURhdGEudXVp
ZCksCisgICAgXTsKKyAgICByZXR1cm4gcmVuZGVySW52ZXN0aWdhdGVEcmF3ZXIoW21ldGFEYXRh
LCByZXN1bHRzRm9yRGF0YShhZ3JlZ2F0ZURhdGEsIHdpbGxGaWx0ZXJFeHBlY3RlZCldKTsKK30K
KworZnVuY3Rpb24gY29udGVudEZvckRhdGEoc3VpdGUsIGRhdGEsIHdpbGxGaWx0ZXJFeHBlY3Rl
ZCA9IGZhbHNlKQoreworICAgIGNvbnN0IG1ldGFEYXRhID0gWworICAgICAgICBkYXRhLmNvbmZp
Z3VyYXRpb24sCisgICAgICAgIGNvbW1pdHNGb3JVdWlkKGRhdGEudXVpZCksCisgICAgICAgIHRl
c3RSdW5MaW5rKHN1aXRlLCBkYXRhKSwKKyAgICAgICAgZWxhcHNlZChkYXRhKSwKKyAgICBdOwor
CisgICAgcmV0dXJuIHJlbmRlckludmVzdGlnYXRlRHJhd2VyKFttZXRhRGF0YSwgcmVzdWx0c0Zv
ckRhdGEoZGF0YSwgd2lsbEZpbHRlckV4cGVjdGVkKV0pOworfQorCitjbGFzcyBfSW52ZXN0aWdh
dGVEcmF3ZXIgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICB0aGlzLnJlZiA9IG51bGw7
CisgICAgICAgIHRoaXMuY29udGVudCA9IG51bGw7CisgICAgICAgIHRoaXMuY2xvc2UgPSBudWxs
OworICAgICAgICB0aGlzLnByZXZpb3VzID0gbnVsbDsKKyAgICAgICAgdGhpcy5uZXh0ID0gbnVs
bDsKKworICAgICAgICB0aGlzLnNlbGVjdGVkID0gMDsKKyAgICAgICAgdGhpcy5zdWl0ZSA9IG51
bGw7CisgICAgICAgIHRoaXMuYWdyZWdhdGUgPSBudWxsOworICAgICAgICB0aGlzLmRhdGEgPSBb
XTsKKworICAgICAgICB0aGlzLndpbGxGaWx0ZXJFeHBlY3RlZCA9IGZhbHNlOworICAgIH0KKyAg
ICBpc1JlbmRlcmVkKCkgeworICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlZiAmJiB0aGlz
LmNvbnRlbnQgJiYgdGhpcy5jbG9zZSAmJiB0aGlzLnByZXZpb3VzICYmIHRoaXMubmV4dDsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZlc3RpZ2F0
aW9uIGRyYXdlciBub3QgcmVuZGVyZWQnKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgdG9TdHJpbmcoKSB7CisgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzOworICAgICAgICB0
aGlzLnJlZiA9IFJFRi5jcmVhdGVSZWYoKTsKKyAgICAgICAgdGhpcy5jb250ZW50ID0gUkVGLmNy
ZWF0ZVJlZih7CisgICAgICAgICAgICBzdGF0ZTogJycsCisgICAgICAgICAgICBvblN0YXRlVXBk
YXRlOiAoZWxlbWVudCwgc3RhdGUpID0+IHsKKyAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVs
ZW1lbnQsIHN0YXRlKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pOworICAgICAgICB0aGlz
LmNsb3NlID0gUkVGLmNyZWF0ZVJlZih7CisgICAgICAgICAgICBvbkVsZW1lbnRNb3VudDogKGVs
ZW1lbnQpID0+IHsKKyAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiBzZWxm
LmNvbGxhcHNlKCk7CisgICAgICAgICAgICB9LAorICAgICAgICB9KTsKKworICAgICAgICB0aGlz
LnByZXZpb3VzID0gUkVGLmNyZWF0ZVJlZih7CisgICAgICAgICAgICBvbkVsZW1lbnRNb3VudDog
KGVsZW1lbnQpID0+IHsKKyAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiBz
ZWxmLnNlbGVjdChzZWxmLnNlbGVjdGVkIC0gMSk7CisgICAgICAgICAgICB9LAorICAgICAgICB9
KTsKKyAgICAgICAgdGhpcy5uZXh0ID0gUkVGLmNyZWF0ZVJlZih7CisgICAgICAgICAgICBvbkVs
ZW1lbnRNb3VudDogKGVsZW1lbnQpID0+IHsKKyAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xp
Y2sgPSAoKSA9PiBzZWxmLnNlbGVjdChzZWxmLnNlbGVjdGVkICsgMSk7CisgICAgICAgICAgICB9
LAorICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImRyYXdlciBtYWlu
IHJpZ2h0LXNpZGViYXIiIHJlZj0iJHt0aGlzLnJlZn0iIHN0eWxlPSJ6LWluZGV4OiAyMCI+Cisg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCB1bnNlbGVjdGFibGUiIHN0eWxlPSJk
aXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGZsZXgtZGlyZWN0
aW9uOiByb3c7IHBhZGRpbmc6IDEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHls
ZT0id2lkdGg6IDE1MHB4OyB0ZXh0LWFsaWduOiBsZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDxhIGNsYXNzPSJidXR0b24iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXIiIHJlZj0iJHt0aGlz
LnByZXZpb3VzfSI+4peAIFByZXZpb3VzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4K
KyAgICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNs
YXNzPSJidXR0b24iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXIiIHJlZj0iJHt0aGlzLmNsb3NlfSI+
Q2xvc2U8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAg
ICA8ZGl2IHN0eWxlPSJ3aWR0aDogMTUwcHg7IHRleHQtYWxpZ246IHJpZ2h0Ij4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidXR0b24iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXIi
IHJlZj0iJHt0aGlzLm5leHR9Ij5OZXh0IOKWtjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9k
aXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
Y29udGVudCIgcmVmPSIke3RoaXMuY29udGVudH0iPgorICAgICAgICAgICAgICAgIDwvZGl2Pgor
ICAgICAgICAgICAgPC9kaXY+YDsKKyAgICB9CisgICAgZXhwYW5kKHN1aXRlLCBhZ3JlZ2F0ZURh
dGEsIGFsbERhdGEpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5yZWYuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkaXNw
bGF5Jyk7CisgICAgICAgIHRoaXMuc3VpdGUgPSBzdWl0ZTsKKyAgICAgICAgdGhpcy5hZ3JlZ2F0
ZSA9IGFncmVnYXRlRGF0YTsKKyAgICAgICAgdGhpcy5kYXRhID0gYWxsRGF0YTsKKyAgICAgICAg
dGhpcy5zZWxlY3QoMCk7CisgICAgfQorICAgIGNvbGxhcHNlKCkgeworICAgICAgICBpZiAoIXRo
aXMuaXNSZW5kZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLnJlZi5l
bGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc3BsYXknKTsKKworICAgICAgICB0aGlzLmFncmVn
YXRlID0gbnVsbDsKKyAgICAgICAgdGhpcy5kYXRhID0gW107CisgICAgICAgIHRoaXMuc2VsZWN0
KDApOworICAgIH0KKyAgICBzZWxlY3QoaW5kZXgpIHsKKyAgICAgICAgbGV0IGNhbmRpZGF0ZXMg
PSB0aGlzLmRhdGEubGVuZ3RoOworICAgICAgICBpZiAodGhpcy5hZ3JlZ2F0ZSAmJiB0aGlzLmRh
dGEubGVuZ3RoID4gMSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMgKz0gMTsKKyAgICAgICAgaWYg
KCFjYW5kaWRhdGVzKSB7CisgICAgICAgICAgICB0aGlzLnJlZi5lbGVtZW50LmNsYXNzTGlzdC5y
ZW1vdmUoJ2Rpc3BsYXknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZvcmNlIHNlbGVjdGlvbiBpbiBib3VuZHMKKyAgICAgICAgaWYgKGluZGV4IDwgMCkK
KyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgaWYgKGluZGV4ID49IGNhbmRpZGF0ZXMp
CisgICAgICAgICAgICBpbmRleCA9IGNhbmRpZGF0ZXMgLSAxOworICAgICAgICB0aGlzLnNlbGVj
dGVkID0gaW5kZXg7CisKKyAgICAgICAgLy8gRGlzcGxheSBuZXh0L3ByZXZpb3VzIGJ1dHRvbnMK
KyAgICAgICAgaWYgKGluZGV4KQorICAgICAgICAgICAgdGhpcy5wcmV2aW91cy5lbGVtZW50LnN0
eWxlLmRpc3BsYXkgPSBudWxsOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLnByZXZp
b3VzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgaWYgKGluZGV4ID09
PSBjYW5kaWRhdGVzIC0gMSkKKyAgICAgICAgICAgIHRoaXMubmV4dC5lbGVtZW50LnN0eWxlLmRp
c3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMubmV4dC5lbGVt
ZW50LnN0eWxlLmRpc3BsYXkgPSBudWxsOworCisgICAgICAgIGlmICh0aGlzLmFncmVnYXRlICYm
IHRoaXMuZGF0YS5sZW5ndGggPiAxICYmICF0aGlzLnNlbGVjdGVkKQorICAgICAgICAgICAgdGhp
cy5jb250ZW50LnNldFN0YXRlKGNvbnRlbnRGb3JBZ3JlZ2F0ZURhdGEodGhpcy5zdWl0ZSwgdGhp
cy5hZ3JlZ2F0ZSwgdGhpcy5kYXRhLCB0aGlzLndpbGxGaWx0ZXJFeHBlY3RlZCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0aGlzLmNvbnRlbnQuc2V0U3RhdGUoY29udGVudEZvckRhdGEo
CisgICAgICAgICAgICAgICAgdGhpcy5zdWl0ZSwKKyAgICAgICAgICAgICAgICB0aGlzLmRhdGFb
dGhpcy5hZ3JlZ2F0ZSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMSA/IHRoaXMuc2VsZWN0ZWQgLSAx
IDogdGhpcy5zZWxlY3RlZF0sCisgICAgICAgICAgICAgICAgdGhpcy53aWxsRmlsdGVyRXhwZWN0
ZWQsCisgICAgICAgICAgICApKTsKKyAgICB9Cit9CisKK2NvbnN0IEludmVzdGlnYXRlRHJhd2Vy
ID0gbmV3IF9JbnZlc3RpZ2F0ZURyYXdlcigpOworCitleHBvcnQge0ludmVzdGlnYXRlRHJhd2Vy
fTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3Rp
bWVsaW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCShyZXZpc2lvbiAyNTAyMzMpCisrKyBUb29scy9yZXN1
bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsOCBAQAogaW1wb3J0IHtDb21taXRCYW5rfSBmcm9tICcvYXNzZXRz
L2pzL2NvbW1pdC5qcyc7CiBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMv
Y29uZmlndXJhdGlvbi5qcyc7CiBpbXBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIGVz
Y2FwZUhUTUwsIHBhcmFtc1RvUXVlcnksIHF1ZXJ5VG9QYXJhbXN9IGZyb20gJy9hc3NldHMvanMv
Y29tbW9uLmpzJzsKK2ltcG9ydCB7RXhwZWN0YXRpb25zfSBmcm9tICcvYXNzZXRzL2pzL2V4cGVj
dGF0aW9ucy5qcyc7CitpbXBvcnQge0ludmVzdGlnYXRlRHJhd2VyfSBmcm9tICcvYXNzZXRzL2pz
L2ludmVzdGlnYXRlLmpzJzsKIGltcG9ydCB7VG9vbFRpcH0gZnJvbSAnL2Fzc2V0cy9qcy90b29s
dGlwLmpzJzsKIGltcG9ydCB7VGltZWxpbmV9IGZyb20gJy9saWJyYXJ5L2pzL2NvbXBvbmVudHMv
VGltZWxpbmVDb21wb25lbnRzLmpzJzsKIGltcG9ydCB7RE9NLCBFdmVudFN0cmVhbSwgUkVGLCBG
UH0gZnJvbSAnL2xpYnJhcnkvanMvUmVmLmpzJzsKQEAgLTMxLDUzICszMyw2IEBAIGltcG9ydCB7
RE9NLCBFdmVudFN0cmVhbSwgUkVGLCBGUH0gZnJvbSAKIAogY29uc3QgREVGQVVMVF9MSU1JVCA9
IDEwMDsKIAotY29uc3Qgc3RhdGVUb0lETWFwcGluZyA9IHsKLSAgICBDUkFTSDogMHgwMCwKLSAg
ICBUSU1FT1VUOiAweDA4LAotICAgIElNQUdFOiAweDEwLAotICAgIEFVRElPOiAweDE4LAotICAg
IFRFWFQ6IDB4MjAsCi0gICAgRkFJTDogMHgyOCwKLSAgICBFUlJPUjogMHgzMCwKLSAgICBXQVJO
SU5HOiAweDM4LAotICAgIFBBU1M6IDB4NDAsCi19OwotCi1jb25zdCBUZXN0UmVzdWx0c1N5bWJv
bE1hcCA9IHsKLSAgICBzdWNjZXNzOiAn4pyTJywKLSAgICBmYWlsZWQ6ICfwnZa3JywKLSAgICB0
aW1lZG91dDogJ+KOiycsCi0gICAgY3Jhc2hlZDogJyEnLAotfQotCi1jbGFzcyBFeHBlY3RhdGlv
bnMKLXsKLSAgICBzdGF0aWMgc3RyaW5nVG9TdGF0ZUlkKHN0cmluZykgewotICAgICAgICByZXR1
cm4gc3RhdGVUb0lETWFwcGluZ1tzdHJpbmddOwotICAgIH0KLQotICAgIHN0YXRpYyB1bmV4cGVj
dGVkUmVzdWx0cyhyZXN1bHRzLCBleHBlY3RhdGlvbnMpCi0gICAgewotICAgICAgICBsZXQgciA9
IHJlc3VsdHMuc3BsaXQoJy4nKTsKLSAgICAgICAgZXhwZWN0YXRpb25zLnNwbGl0KCcgJykuZm9y
RWFjaChleHBlY3RhdGlvbiA9PiB7Ci0gICAgICAgICAgICBjb25zdCBpID0gci5pbmRleE9mKGV4
cGVjdGF0aW9uKTsKLSAgICAgICAgICAgIGlmIChpID4gLTEpCi0gICAgICAgICAgICAgICAgci5z
cGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICBpZiAoZXhwZWN0YXRpb24gPT09ICdGQUlMJykKLSAg
ICAgICAgICAgICAgICBbJ1RFWFQnLCAnQVVESU8nLCAnSU1BR0UnXS5mb3JFYWNoKGV4cGVjdGF0
aW9uID0+IHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IHIuaW5kZXhPZihleHBlY3Rh
dGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID4gLTEpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIGxldCByZXN1bHQgPSAnUEFTUyc7Ci0gICAgICAgIHIuZm9yRWFjaChjYW5kaWRh
dGUgPT4gewotICAgICAgICAgICAgaWYgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoY2Fu
ZGlkYXRlKSA8IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQocmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBjYW5kaWRhdGU7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLX0KIGxldCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZTsKIAogZnVu
Y3Rpb24gbWluaW11bVV1aWRGb3JSZXN1bHRzKHJlc3VsdHMsIGxpbWl0KSB7CkBAIC0yNTgsMTIg
KzIxMyw2IEBAIGZ1bmN0aW9uIHhBeGlzRnJvbVNjYWxlKHNjYWxlLCByZXBvc2l0b3IKIH0KIAog
Y29uc3QgdGVzdHNSZWdleCA9IC90ZXN0c18oW2Etel0pKy87Ci1jb25zdCBmYWlsdXJlVHlwZU9y
ZGVyID0gWydmYWlsZWQnLCAndGltZWRvdXQnLCAnY3Jhc2hlZCddOwotY29uc3QgZmFpbHVyZVR5
cGVNYXBwaW5nID0gewotICAgIGZhaWxlZDogJ0VSUk9SJywKLSAgICB0aW1lZG91dDogJ1RJTUVP
VVQnLAotICAgIGNyYXNoZWQ6ICdDUkFTSCcsCi19CiAKIGZ1bmN0aW9uIGluUGxhY2VDb21iaW5l
KG91dCwgb2JqKQogewpAQCAtMzE3LDggKzI2Niw4IEBAIGZ1bmN0aW9uIHN0YXRzRm9yU2luZ2xl
UmVzdWx0KHJlc3VsdCkgewogICAgICAgICB0ZXN0c19ydW46IDEsCiAgICAgICAgIHRlc3RzX3Nr
aXBwZWQ6IDAsCiAgICAgfQotICAgIGZhaWx1cmVUeXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsK
LSAgICAgICAgY29uc3QgaWRGb3JUeXBlID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChm
YWlsdXJlVHlwZU1hcHBpbmdbdHlwZV0pOworICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMu
Zm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgY29uc3QgaWRGb3JUeXBlID0gRXhwZWN0YXRpb25z
LnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVNYXBbdHlwZV0pOwogICAg
ICAgICBzdGF0c1tgdGVzdHNfJHt0eXBlfWBdID0gYWN0dWFsSWQgPiBpZEZvclR5cGUgID8gMCA6
IDE7CiAgICAgICAgIHN0YXRzW2B0ZXN0c191bmV4cGVjdGVkXyR7dHlwZX1gXSA9IHVuZXhwZWN0
ZWRJZCA+IGlkRm9yVHlwZSAgPyAwIDogMTsKICAgICB9KTsKQEAgLTUzMCwxNCArNDc5LDcgQEAg
Y2xhc3MgVGltZWxpbmVGcm9tRW5kcG9pbnQgewogICAgICAgICBjb25zdCBjb21taXRzID0gY29t
bWl0c0ZvclJlc3VsdHModGhpcy5yZXN1bHRzLCBsaW1pdCwgdGhpcy5hbGxDb21taXRzKTsKICAg
ICAgICAgY29uc3Qgc2NhbGUgPSBzY2FsZUZvckNvbW1pdHMoY29tbWl0cyk7CiAKLSAgICAgICAg
Y29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7Ci0g
ICAgICAgIGNvbnN0IGNvbG9yTWFwID0gewotICAgICAgICAgICAgc3VjY2VzczogY29tcHV0ZWRT
dHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLWdyZWVuTGlnaHQnKS50cmltKCksCi0gICAgICAgICAg
ICBmYWlsZWQ6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1yZWRMaWdodCcpLnRy
aW0oKSwKLSAgICAgICAgICAgIHRpbWVkb3V0OiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFs
dWUoJy0tb3JhbmdlTGlnaHQnKS50cmltKCksCi0gICAgICAgICAgICBjcmFzaGVkOiBjb21wdXRl
ZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tcHVycGxlTGlnaHQnKS50cmltKCksCi0gICAgICAg
IH0KLQorICAgICAgICBjb25zdCBjb2xvck1hcCA9IEV4cGVjdGF0aW9ucy5jb2xvck1hcCgpOwog
ICAgICAgICB0aGlzLnVwZGF0ZXMgPSBbXTsKICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsKICAg
ICAgICAgICAgIGdldFNjYWxlRnVuYzogKHZhbHVlKSA9PiB7CkBAIC01NTIsNyArNDk0LDcgQEAg
Y2xhc3MgVGltZWxpbmVGcm9tRW5kcG9pbnQgewogCiAgICAgICAgICAgICAgICAgbGV0IHRhZyA9
IG51bGw7CiAgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0gY29sb3JNYXAuc3VjY2VzczsKLSAg
ICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gVGVzdFJlc3VsdHNTeW1ib2xNYXAuc3VjY2VzczsK
KyAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gRXhwZWN0YXRpb25zLnN5bWJvbE1hcC5zdWNj
ZXNzOwogICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRzKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHRhZyA9IGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3VuZXhw
ZWN0ZWRfJyA6ICdfJ31mYWlsZWRgXTsKIApAQCAtNTY0LDIwICs1MDYsMjAgQEAgY2xhc3MgVGlt
ZWxpbmVGcm9tRW5kcG9pbnQgewogICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gYCR7dGFn
fSAlYAogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZmFpbHVy
ZVR5cGVPcmRlci5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAgICAgICBFeHBlY3Rh
dGlvbnMuZmFpbHVyZVR5cGVzLmZvckVhY2godHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBl
Y3RlZF8nIDogJ18nfSR7dHlwZX1gXSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5
bWJvbCA9IFRlc3RSZXN1bHRzU3ltYm9sTWFwW3R5cGVdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN5bWJvbCA9IEV4cGVjdGF0aW9ucy5zeW1ib2xNYXBbdHlwZV07CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRJZCA9IEV4cGVjdGF0aW9u
cy5zdHJpbmdUb1N0YXRlSWQoZGF0YS5hY3R1YWwpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
d2lsbEZpbHRlckV4cGVjdGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQgPSBF
eHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy51bmV4cGVjdGVkUmVzdWx0
cyhkYXRhLmFjdHVhbCwgZGF0YS5leHBlY3RlZCkpOwotICAgICAgICAgICAgICAgICAgICBmYWls
dXJlVHlwZU9yZGVyLmZvckVhY2godHlwZSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChmYWlsdXJlVHlwZU1hcHBpbmdbdHlwZV0p
ID49IHJlc3VsdElkKSB7CisgICAgICAgICAgICAgICAgICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJl
VHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFeHBl
Y3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZU1hcFt0eXBl
XSkgPj0gcmVzdWx0SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNv
bG9yTWFwW3R5cGVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IFRlc3RS
ZXN1bHRzU3ltYm9sTWFwW3R5cGVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJv
bCA9IEV4cGVjdGF0aW9ucy5zeW1ib2xNYXBbdHlwZV07CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0KQEAgLTU4OCwy
MCArNTMwLDQ0IEBAIGNsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50IHsKIAogICAgICAgICBmdW5j
dGlvbiBvbkRvdENsaWNrRmFjdG9yeShjb25maWd1cmF0aW9uKSB7CiAgICAgICAgICAgICByZXR1
cm4gKGRhdGEpID0+IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHNv
bWV0aGluZyBzYW5lIGhlcmUsIGJ1dCB3ZSBwcm9iYWJseSBuZWVkIGFub3RoZXIgZW5kcG9pbnQK
LSAgICAgICAgICAgICAgICBpZiAoIWRhdGEuc3RhcnRfdGltZSkgewotICAgICAgICAgICAgICAg
ICAgICBhbGVydCgnTm9kZSBpcyBhIGNvbWJpbmF0aW9uIG9mIG11bHRpcGxlIHJ1bnMnKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGxldCBidWlsZFBhcmFtcyA9IGNvbmZpZ3VyYXRpb24udG9QYXJhbXMoKTsKLSAgICAg
ICAgICAgICAgICBidWlsZFBhcmFtc1snc3VpdGUnXSA9IFtzZWxmLnN1aXRlXTsKLSAgICAgICAg
ICAgICAgICBidWlsZFBhcmFtc1sndXVpZCddID0gW2RhdGEudXVpZF07Ci0gICAgICAgICAgICAg
ICAgYnVpbGRQYXJhbXNbJ2FmdGVyX3RpbWUnXSA9IFtkYXRhLnN0YXJ0X3RpbWVdOwotICAgICAg
ICAgICAgICAgIGJ1aWxkUGFyYW1zWydiZWZvcmVfdGltZSddID0gW2RhdGEuc3RhcnRfdGltZV07
Ci0gICAgICAgICAgICAgICAgaWYgKGJyYW5jaCkKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRQ
YXJhbXNbJ2JyYW5jaCddID0gYnJhbmNoOwotICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGAv
dXJscy9idWlsZD8ke3BhcmFtc1RvUXVlcnkoYnVpbGRQYXJhbXMpfWAsICdfYmxhbmsnKTsKKyAg
ICAgICAgICAgICAgICBsZXQgYWxsRGF0YSA9IFtdOworICAgICAgICAgICAgICAgIGxldCBwYXJ0
aWFsQ29uZmlndXJhdGlvbiA9IHt9OworICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlv
bnMuZm9yRWFjaChjb25maWd1cmF0aW9uS2V5ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbmZpZ3VyYXRpb25LZXkuY29tcGFyZShjb25maWd1cmF0aW9uKSB8fCBjb25maWd1cmF0aW9u
S2V5LmNvbXBhcmVTREtzKGNvbmZpZ3VyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHNbY29uZmlndXJhdGlvbktl
eS50b0tleSgpXS5mb3JFYWNoKHBhaXIgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY29tcHV0ZWRDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24ocGFpci5jb25maWd1
cmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wdXRlZENvbmZpZ3VyYXRp
b24uY29tcGFyZShjb25maWd1cmF0aW9uKSB8fCBjb21wdXRlZENvbmZpZ3VyYXRpb24uY29tcGFy
ZVNES3MoY29uZmlndXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvZXNNYXRjaCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFpci5yZXN1bHRzLmZvckVhY2gobm9kZSA9PiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudXVpZCAhPT0gZGF0YS51dWlkKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9lc01hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQg
ZGF0YU5vZGUgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhu
b2RlKS5mb3JFYWNoKGtleSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFOb2RlW2tleV0gPSBub2RlW2tleV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU5vZGVbJ2NvbmZpZ3VyYXRpb24nXSA9
IGNvbXB1dGVkQ29uZmlndXJhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxE
YXRhLnB1c2goZGF0YU5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZG9lc01hdGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29uZmlndXJhdGlvbi5tZW1iZXJzKCkuZm9yRWFjaChtZW1iZXIgPT4geworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVtYmVyIGluIHBhcnRpYWxDb25maWd1cmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydGlhbENv
bmZpZ3VyYXRpb25bbWVtYmVyXSAhPT0gbnVsbCAmJiBwYXJ0aWFsQ29uZmlndXJhdGlvblttZW1i
ZXJdICE9PSBjb21wdXRlZENvbmZpZ3VyYXRpb25bbWVtYmVyXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsQ29uZmlndXJhdGlvblttZW1iZXJdID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wdXRlZENv
bmZpZ3VyYXRpb25bbWVtYmVyXSAhPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnRpYWxDb25maWd1cmF0aW9uW21lbWJlcl0gPSBjb21wdXRlZENvbmZpZ3Vy
YXRpb25bbWVtYmVyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgbGV0IGFncmVnYXRlRGF0YSA9IHt9OworICAgICAgICAg
ICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgYWdyZWdhdGVEYXRhW2tleV0gPSBkYXRhW2tleV07CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgYWdyZWdhdGVEYXRhWydjb25maWd1cmF0aW9uJ10gPSBuZXcgQ29u
ZmlndXJhdGlvbihwYXJ0aWFsQ29uZmlndXJhdGlvbik7CisgICAgICAgICAgICAgICAgSW52ZXN0
aWdhdGVEcmF3ZXIuZXhwYW5kKHNlbGYuc3VpdGUsIGFncmVnYXRlRGF0YSwgYWxsRGF0YSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtODMyLDYgKzc5OCw3IEBAIGZ1bmN0aW9uIExl
Z2VuZExhYmVsKGV2ZW50U3RyZWFtLCBmaWx0ZXIKIH0gCiAKIGZ1bmN0aW9uIExlZ2VuZChjYWxs
YmFjaz1udWxsLCBwbHVyYWw9ZmFsc2UpIHsKKyAgICBJbnZlc3RpZ2F0ZURyYXdlci53aWxsRmls
dGVyRXhwZWN0ZWQgPSB3aWxsRmlsdGVyRXhwZWN0ZWQ7CiAgICAgbGV0IHVwZGF0ZUxhYmVsRXZl
bnRzID0gbmV3IEV2ZW50U3RyZWFtKCk7CiAgICAgY29uc3QgbGVnZW5kRGV0YWlscyA9IHsKICAg
ICAgICAgc3VjY2VzczogewpAQCAtODczLDcgKzg0MCw3IEBAIGZ1bmN0aW9uIExlZ2VuZChjYWxs
YmFjaz1udWxsLCBwbHVyYWw9ZmEKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iaXRlbSI+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHtrZXl9IiByZWY9IiR7ZG90fSI+
PGRpdiBjbGFzcz0idGV4dCI+JHtUZXN0UmVzdWx0c1N5bWJvbE1hcFtrZXldfTwvZGl2PjwvZGl2
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7a2V5fSIgcmVmPSIk
e2RvdH0iPjxkaXYgY2xhc3M9InRleHQiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFtrZXldfTwv
ZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgJHtMZWdlbmRMYWJlbCh1cGRhdGVM
YWJlbEV2ZW50cywgbGVnZW5kRGV0YWlsc1trZXldLmV4cGVjdGVkLCBsZWdlbmREZXRhaWxzW2tl
eV0udW5leHBlY3RlZCl9CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmAKICAgICAgICAgICAg
IH0pLmpvaW4oJycpfQpAQCAtODg4LDYgKzg1NSw4IEBAIGZ1bmN0aW9uIExlZ2VuZChjYWxsYmFj
az1udWxsLCBwbHVyYWw9ZmEKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgd2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZUxhYmVsRXZlbnRzLmFkZCh3aWxsRmlsdGVyRXhwZWN0ZWQpOworICAgICAgICAg
ICAgICAgICAgICBJbnZlc3RpZ2F0ZURyYXdlci53aWxsRmlsdGVyRXhwZWN0ZWQgPSB3aWxsRmls
dGVyRXhwZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgIEludmVzdGlnYXRlRHJhd2VyLnNlbGVj
dChJbnZlc3RpZ2F0ZURyYXdlci5zZWxlY3RlZCk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKCk7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0sCkluZGV4OiBUb29scy9y
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2Nzcy93ZWJraXQuY3Nz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGlj
L2xpYnJhcnkvY3NzL3dlYmtpdC5jc3MJKHJldmlzaW9uIDI1MDIzMykKKysrIFRvb2xzL3Jlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvY3NzL3dlYmtpdC5jc3MJKHdv
cmtpbmcgY29weSkKQEAgLTg5MCw3ICs4OTAsNyBAQCBwcmUgewogICBiYWNrZ3JvdW5kLWNvbG9y
OiB2YXIoLS1ibHVyQmFja2dyb3VuZENvbG9yKTsKICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6
IGJsdXIoNXB4KSBicmlnaHRuZXNzKDg4JSk7CiAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgp
IGJyaWdodG5lc3MoODglKTsKLSAgei1pbmRleDogNTA7CisgIHotaW5kZXg6IHZhcigtLW1pZGRs
ZVpJbmRleCk7CiAgIHJpZ2h0OiAwOwogfQogLnNpZGViYXIuaGlkZGVuIHsKQEAgLTkzNyw4NyAr
OTM3LDYgQEAgcHJlIHsKICAgbWFyZ2luLXRvcDogY2FsYygxMnB4ICogMiAgKyB2YXIoLS1sYXJn
ZVNpemUpICogMS4zICsgdmFyKC0tc21hbGxTaXplKSAqIDEuMyArIDEycHggKiAyKTsKIH0KIAot
QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjAwcHgpIHsKLSAgLnNpZGViYXIgewotICAg
IGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiAyOTlweDsKLSAgICB6LWluZGV4OiAwOwotICAg
IGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IHVuc2V0OwotICB9Ci0gIC5zaWRlYmFyLmxlZnQuaGlkZGVu
IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBsZWZ0OiAtMjQ5cHg7Ci0gIH0KLSAgLnNpZGVi
YXIucmlnaHQuaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICByaWdodDogLTI0OXB4
OwotICB9Ci0gIC5zaWRlYmFyLnVuZGVyLXRvcGJhci13aXRoLWFjdGlvbnMgewotICAgIGhlaWdo
dDogY2FsYygxMDAlIC0gMTJweCAqIDIgIC0gdmFyKC0tbGFyZ2VTaXplKSAqIDEuMyk7Ci0gICAg
Ym90dG9tOiAwOwotICB9Ci0KLSAgLm1haW4gewotICAgIG1hcmdpbi1sZWZ0OiAyOTlweDsKLSAg
ICB3aWR0aDogY2FsYygxMDAlIC0gMjk5cHgpOwotICB9Ci0KLSAgLm1haW4ubGVmdCB7Ci0gICAg
bWFyZ2luLWxlZnQ6IDBweDsKLSAgICBtYXJnaW4tcmlnaHQ6IDI5OXB4OwotICB9Ci0gIC5tYWlu
LnJpZ2h0LmhpZGRlbiB7Ci0gICAgbWFyZ2luLWxlZnQ6IDUwcHg7Ci0gICAgd2lkdGg6IGNhbGMo
MTAwJSAtIDUwcHgpOwotICB9Ci0gIC5tYWluLmxlZnQuaGlkZGVuIHsKLSAgICBtYXJnaW4tbGVm
dDogMDsKLSAgICBtYXJnaW4tcmlnaHQ6IDUwcHg7Ci0gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDUw
cHgpOwotICB9Ci0KLSAgLm1haW4udW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyB7Ci0gICAgbWFy
Z2luLXRvcDogY2FsYygxMnB4ICogMiAgKyB2YXIoLS1sYXJnZVNpemUpICogMS4zKTsKLSAgfQot
fQotCi1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgewotICAuc2lkZWJhciB7
Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgd2lkdGg6IDMxMHB4OwotICAgIHotaW5kZXg6IDA7
Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogdW5zZXQ7Ci0gIH0KLSAgLnNpZGViYXIubGVmdC5o
aWRkZW4gewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGxlZnQ6IC0yNjBweDsKLSAgfQotICAu
c2lkZWJhci5yaWdodC5oaWRkZW4gewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHJpZ2h0OiAt
MjYwcHg7Ci0gIH0KLSAgLnNpZGViYXIudW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyB7Ci0gICAg
aGVpZ2h0OiBjYWxjKDEwMCUgLSAxMnB4ICogMiAgLSB2YXIoLS1sYXJnZVNpemUpICogMS4zKTsK
LSAgICBib3R0b206IDA7Ci0gIH0KLQotICAubW9iaWxlLXNpZGViYXItY29udHJvbC5kaXNwbGF5
IHsKLSAgICBkaXNwbGF5OiBub25lOwotICB9Ci0KLSAgLm1haW4gewotICAgIG1hcmdpbi1sZWZ0
OiAzMTBweDsKLSAgICB3aWR0aDogY2FsYygxMDAlIC0gMzEwcHgpOwotICB9Ci0KLSAgLm1haW4u
bGVmdCB7Ci0gICAgbWFyZ2luLWxlZnQ6IDBweDsKLSAgICBtYXJnaW4tcmlnaHQ6IDMxMHB4Owot
ICB9Ci19Ci0KIC5zaWRlYmFyLnJpZ2h0IHsKICAgbGVmdDogdW5zZXQ7CiAgIHJpZ2h0OiAwOwpA
QCAtMTU0OCw2ICsxNDY3LDcgQEAgcHJlIHsKIH0KIAogLmRyYXdlci5kaXNwbGF5IHsKKyAgbWlu
LWhlaWdodDogMjUwcHg7CiAgIGhlaWdodDogMzAlOwogICBib3gtc2hhZG93OiAwcHggMHB4IDVw
eCAxcHggdmFyKC0tZ3JleSk7CiB9CkBAIC0xNzYyLDYgKzE2ODIsODUgQEAgYS5kaXNhYmxlZCB7
CiAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAKIH0KIAorQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13
aWR0aDogNjAwcHgpIHsKKyAgLnNpZGViYXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdp
ZHRoOiAyOTlweDsKKyAgICBsZWZ0OiAwOworICAgIHJpZ2h0OiB1bnNldDsKKyAgfQorICAuc2lk
ZWJhci5sZWZ0LmhpZGRlbiB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGVmdDogLTI0OXB4
OworICB9CisgIC5zaWRlYmFyLnJpZ2h0LmhpZGRlbiB7CisgICAgZGlzcGxheTogYmxvY2s7Cisg
ICAgcmlnaHQ6IC0yNDlweDsKKyAgfQorICAuc2lkZWJhci51bmRlci10b3BiYXItd2l0aC1hY3Rp
b25zIHsKKyAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEycHggKiAyICAtIHZhcigtLWxhcmdlU2l6
ZSkgKiAxLjMpOworICAgIGJvdHRvbTogMDsKKyAgfQorCisgIC5tYWluIHsKKyAgICBtYXJnaW4t
bGVmdDogMjk5cHg7CisgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDI5OXB4KTsKKyAgfQorCisgIC5t
YWluLnJpZ2h0LXNpZGViYXIgeworICAgIG1hcmdpbi1sZWZ0OiAwcHg7CisgICAgbWFyZ2luLXJp
Z2h0OiAyOTlweDsKKyAgfQorICAubWFpbi5sZWZ0LXNpZGViYXIuaGlkZGVuIHsKKyAgICBtYXJn
aW4tbGVmdDogNTBweDsKKyAgICB3aWR0aDogY2FsYygxMDAlIC0gNTBweCk7CisgIH0KKyAgLm1h
aW4ucmlnaHQtc2lkZWJhci5oaWRkZW4geworICAgIG1hcmdpbi1sZWZ0OiAwOworICAgIG1hcmdp
bi1yaWdodDogNTBweDsKKyAgICB3aWR0aDogY2FsYygxMDAlIC0gNTBweCk7CisgIH0KKworICAu
bWFpbi51bmRlci10b3BiYXItd2l0aC1hY3Rpb25zIHsKKyAgICBtYXJnaW4tdG9wOiBjYWxjKDEy
cHggKiAyICArIHZhcigtLWxhcmdlU2l6ZSkgKiAxLjMpOworICB9Cit9CisKK0BtZWRpYSBzY3Jl
ZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7CisgIC5zaWRlYmFyIHsKKyAgICBkaXNwbGF5OiBi
bG9jazsKKyAgICB3aWR0aDogMzEwcHg7CisgICAgbGVmdDogMDsKKyAgICByaWdodDogdW5zZXQ7
CisgIH0KKyAgLnNpZGViYXIubGVmdC5oaWRkZW4geworICAgIGRpc3BsYXk6IGJsb2NrOworICAg
IGxlZnQ6IC0yNjBweDsKKyAgfQorICAuc2lkZWJhci5yaWdodC5oaWRkZW4geworICAgIGRpc3Bs
YXk6IGJsb2NrOworICAgIHJpZ2h0OiAtMjYwcHg7CisgIH0KKyAgLnNpZGViYXIudW5kZXItdG9w
YmFyLXdpdGgtYWN0aW9ucyB7CisgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMnB4ICogMiAgLSB2
YXIoLS1sYXJnZVNpemUpICogMS4zKTsKKyAgICBib3R0b206IDA7CisgIH0KKworICAubW9iaWxl
LXNpZGViYXItY29udHJvbC5kaXNwbGF5IHsKKyAgICBkaXNwbGF5OiBub25lOworICB9CisKKyAg
Lm1haW4geworICAgIG1hcmdpbi1sZWZ0OiAzMTBweDsKKyAgICB3aWR0aDogY2FsYygxMDAlIC0g
MzEwcHgpOworICB9CisKKyAgLm1haW4ucmlnaHQtc2lkZWJhciB7CisgICAgbWFyZ2luLWxlZnQ6
IDBweDsKKyAgICBtYXJnaW4tcmlnaHQ6IDMxMHB4OworICB9Cit9CisKIC8qIHRpbWVsaW5lICov
CiAudGltZWxpbmUgewogICBkaXNwbGF5OiBmbGV4OwpAQCAtMjYwNyw2ICsyNjA2LDkgQEAgYS5k
aXNhYmxlZCB7CiAuZGVza3RvcC1jb250cm9sIHsKICAgZGlzcGxheTogbm9uZTsKIH0KKy5tb2Jp
bGUtY29udHJvbCB7CisgIGRpc3BsYXk6IGJsb2NrOworfQogCiAubW9iaWxlLXNpZGViYXItY29u
dHJvbCB7CiAgIGRpc3BsYXk6IG5vbmU7CkBAIC0yNjIwLDYgKzI2MjIsOSBAQCBhLmRpc2FibGVk
IHsKICAgLmRlc2t0b3AtY29udHJvbCB7CiAgICAgZGlzcGxheTogYmxvY2s7CiAgIH0KKyAgLm1v
YmlsZS1jb250cm9sIHsKKyAgICBkaXNwbGF5OiBub25lOworICB9CiAgIC5tb2JpbGUtc2lkZWJh
ci1jb250cm9sLmRpc3BsYXkgewogICAgIGRpc3BsYXk6IG5vbmU7CiAgIH0KSW5kZXg6IFRvb2xz
L3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2NvbW1pdHMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9j
b21taXRzLmh0bWwJKHJldmlzaW9uIDI1MDIzMykKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3Vs
dHNkYnB5L3ZpZXcvdGVtcGxhdGVzL2NvbW1pdHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDcgKzEwNCw3IEBAIERPTS5pbmplY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcKICAg
ICBPbmVMaW5lU3dpdGNoKCksCiAgICAgQnJhbmNoU2VsZWN0b3IoKCkgPT4ge3RhYmxlLnJlbG9h
ZCgpfSksCiBdKX0KLTxkaXYgY2xhc3M9Im1haW4gbGVmdCB1bmRlci10b3BiYXItd2l0aC1hY3Rp
b25zIj4KKzxkaXYgY2xhc3M9Im1haW4gcmlnaHQtc2lkZWJhciB1bmRlci10b3BiYXItd2l0aC1h
Y3Rpb25zIj4KICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4ke3RhYmxlfTwvZGl2PgogPC9kaXY+
YCk7CiAKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVz
L3NlYXJjaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5
L3ZpZXcvdGVtcGxhdGVzL3NlYXJjaC5odG1sCShyZXZpc2lvbiAyNTAyMzMpCisrKyBUb29scy9y
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBpbXBvcnQge0NvbW1pdEJhbmt9IGZyb20gJy9hc3Nl
dHMvanMvY29tCiBpbXBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHF1ZXJ5VG9QYXJh
bXMsIHBhcmFtc1RvUXVlcnl9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKIGltcG9ydCB7
Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJzsKIGltcG9y
dCB7RHJhd2VyLCBCcmFuY2hTZWxlY3RvciwgQ29uZmlndXJhdGlvblNlbGVjdG9ycywgTGltaXRT
bGlkZXJ9IGZyb20gJy9hc3NldHMvanMvZHJhd2VyLmpzJzsKK2ltcG9ydCB7SW52ZXN0aWdhdGVE
cmF3ZXJ9IGZyb20gJy9hc3NldHMvanMvaW52ZXN0aWdhdGUuanMnOwogaW1wb3J0IHtTZWFyY2hC
YXJ9IGZyb20gJy9hc3NldHMvanMvc2VhcmNoLmpzJzsKIGltcG9ydCB7TGVnZW5kLCBUaW1lbGlu
ZUZyb21FbmRwb2ludH0gZnJvbSAnL2Fzc2V0cy9qcy90aW1lbGluZS5qcyc7CiBpbXBvcnQge1Rv
b2xUaXB9IGZyb20gJy9hc3NldHMvanMvdG9vbHRpcC5qcyc7CkBAIC0yMjUsNiArMjI2LDcgQEAg
d2luZG93Lm9ucHVzaHN0YXRlID0gZXZlbnQgPT4ge3ZpZXcucmVsbwogRE9NLmluamVjdCgKICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBwJyksCiAgICAgYCR7VG9vbFRpcH0KKyAgICAk
e0ludmVzdGlnYXRlRHJhd2VyfQogICAgICR7RHJhd2VyKFsKICAgICAgICAgTGVnZW5kKCgpID0+
IHsKICAgICAgICAgICAgIHZpZXcuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHsKQEAgLTIz
OSw3ICsyNDEsNyBAQCBET00uaW5qZWN0KAogICAgICAgICBDb25maWd1cmF0aW9uU2VsZWN0b3Jz
KCgpID0+IHt2aWV3LnJlbG9hZCgpfSksCiAgICAgXSwgKCkgPT4gb25MYXlvdXRDaGFuZ2UuYWRk
KCkpfQogCi0gICAgPGRpdiBjbGFzcz0ibWFpbiBsZWZ0IHVuZGVyLXRvcGJhci13aXRoLWFjdGlv
bnMiPgorICAgIDxkaXYgY2xhc3M9Im1haW4gcmlnaHQtc2lkZWJhciB1bmRlci10b3BiYXItd2l0
aC1hY3Rpb25zIj4KICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICAgICAk
e1NlYXJjaEJhcihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRVUkwg
PSBkb2N1bWVudC5VUkwuc3BsaXQoJz8nKTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3Vs
dHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRz
Lmh0bWwJKHJldmlzaW9uIDI1MDIzMykKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5
L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQCBpbXBvcnQge0NvbW1pdEJhbmt9IGZyb20gJy9hc3NldHMvanMvY29tCiBpbXBv
cnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHF1ZXJ5VG9QYXJhbXMsIHBhcmFtc1RvUXVl
cnl9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0g
ZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJzsKIGltcG9ydCB7RHJhd2VyLCBCcmFu
Y2hTZWxlY3RvciwgQ29uZmlndXJhdGlvblNlbGVjdG9ycywgTGltaXRTbGlkZXJ9IGZyb20gJy9h
c3NldHMvanMvZHJhd2VyLmpzJzsKK2ltcG9ydCB7SW52ZXN0aWdhdGVEcmF3ZXJ9IGZyb20gJy9h
c3NldHMvanMvaW52ZXN0aWdhdGUuanMnOwogaW1wb3J0IHtMZWdlbmQsIFRpbWVsaW5lRnJvbUVu
ZHBvaW50fSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKIGltcG9ydCB7VG9vbFRpcH0g
ZnJvbSAnL2Fzc2V0cy9qcy90b29sdGlwLmpzJzsKIGltcG9ydCB7RE9NLCBSRUYsIEV2ZW50U3Ry
ZWFtfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOwpAQCAtMTY4LDYgKzE2OSw3IEBAIG9uTGF5
b3V0Q2hhbmdlLmFjdGlvbigoKSA9PiB7CiB9KTsKIAogRE9NLmluamVjdChkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnYXBwJyksIGAke1Rvb2xUaXB9Ciske0ludmVzdGlnYXRlRHJhd2VyfQogJHtE
cmF3ZXIoWwogICAgIExlZ2VuZCgoKSA9PiB7CiAgICAgICAgIGZvciAobGV0IHN1aXRlIGluIHZp
ZXcuY2hpbGRyZW4pIHsKQEAgLTE4MSw3ICsxODMsNyBAQCAke0RyYXdlcihbCiAgICAgfSksCiAg
ICAgQ29uZmlndXJhdGlvblNlbGVjdG9ycygoKSA9PiB7dmlldy5yZWxvYWQoKX0pLAogXSwgKCkg
PT4gb25MYXlvdXRDaGFuZ2UuYWRkKCkpfQotPGRpdiBjbGFzcz0ibWFpbiBsZWZ0IHVuZGVyLXRv
cGJhci13aXRoLWFjdGlvbnMiPgorPGRpdiBjbGFzcz0ibWFpbiByaWdodC1zaWRlYmFyIHVuZGVy
LXRvcGJhci13aXRoLWFjdGlvbnMiPgogICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAg
ICAke3ZpZXd9CiAgICAgPC9kaXY+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379514</attachid>
            <date>2019-09-24 16:36:25 -0700</date>
            <delta_ts>2019-09-25 11:01:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202106-20190924163625.patch</filename>
            <type>text/plain</type>
            <size>39938</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDMxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE5LTA5LTI0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IEFkZCBpbnZlc3RpZ2F0aW9uIGRyYXdl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTA2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiByZXN1
bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9kcmF3ZXIuanM6IFN1cHBvcnQgbXVs
dGlwbGUgJ21haW4nIGNsYXNzZXMuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkv
dmlldy9zdGF0aWMvanMvZXhwZWN0YXRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKEV4cGVjdGF0
aW9ucy5jb2xvck1hcCk6IFJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyB0eXBlIHN0cmluZ3Mg
dG8gY29sb3JzLgorICAgICAgICAoRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZCk6IE1hcCBh
IHN0cmluZyB0byBhIHN0YXRlIElEIGZvciBzb3J0aW5nLgorICAgICAgICAoRXhwZWN0YXRpb25z
LnR5cGVGb3JJZCk6IFJldHVybiBhIHR5cGUgc3RyaW5nIGdpdmVuIGFuIElELgorICAgICAgICAo
RXhwZWN0YXRpb25zLnN5bWJvbEZvcklkKTogUmV0dXJuIGEgc3ltYm9sIGZvciBhIHR5cGUgZ2l2
ZW4gYW4gSUQuCisgICAgICAgIChFeHBlY3RhdGlvbnMuY29sb3JGb3JJZCk6IFJldHVybiBhIGNv
bG9yIGdpdmVuIGFuIElELgorICAgICAgICAoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRz
KTogR2l2ZW4gYSBsaXN0IG9mIGFjdHVhbCByZXN1bHRzIGFuZCBleHBlY3RlZCByZXN1bHRzLAor
ICAgICAgICByZXR1cm4gYSBzdGF0ZS4KKyAgICAgICAgKEV4cGVjdGF0aW9ucyk6CisgICAgICAg
ICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanM6
IEFkZGVkLgorICAgICAgICAoY29tbWl0c0ZvclV1aWQpOgorICAgICAgICAodGVzdFJ1bkxpbmsp
OgorICAgICAgICAoZWxhcHNlZCk6CisgICAgICAgIChwZXJjZW50YWdlKToKKyAgICAgICAgKGNv
bnRlbnRGb3JBZ3JlZ2F0ZURhdGEpOgorICAgICAgICAoY29udGVudEZvckRhdGEpOgorICAgICAg
ICAoX0ludmVzdGlnYXRlRHJhd2VyKToKKyAgICAgICAgKF9JbnZlc3RpZ2F0ZURyYXdlci5wcm90
b3R5cGUuaXNSZW5kZXJlZCk6CisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBl
LmV4cGFuZCk6IEV4cGFuZCB0aGUgaW52ZXN0aWdhdGlvbiBkcmF3ZXIuCisgICAgICAgIChfSW52
ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBlLmNvbGxhcHNlKTogQ29sbGFwc2UgdGhlIGludmVzdGln
YXRpb24gZHJhd2VyLgorICAgICAgICAoX0ludmVzdGlnYXRlRHJhd2VyLnByb3RvdHlwZS5zZWxl
Y3QpOiBTZWxlY3QgYW4gZWxlbWVudCB0byBpbnZlc3RpZ2F0ZS4KKyAgICAgICAgKiByZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qczoKKyAgICAgICAgKHN0
YXRzRm9yU2luZ2xlUmVzdWx0KTogTW92ZSBFeHBlY3RhdGlvbiBjb25zdGFudHMuCisgICAgICAg
IChUaW1lbGluZUZyb21FbmRwb2ludC5wcm90b3R5cGUucmVuZGVyKTogSW52ZXN0aWdhdGUgc3Bl
Y2lmaWMgZGF0YSBwb2ludHMgaW5zdGVhZAorICAgICAgICBvZiBqdW1waW5nIHRvIHRoZSBidWls
ZC4KKyAgICAgICAgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQpOiBEZWxldGVkLgorICAg
ICAgICAoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAg
KEV4cGVjdGF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9jc3Mvd2Via2l0LmNzczoKKyAgICAgICAgKC5kcmF3ZXIu
ZGlzcGxheSk6IE1ha2UgbWluaW11bSBoZWlnaHQuCisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFu
ZCAobWluLXdpZHRoOiA2MDBweCkpOiBNb3ZlIG1haW4gYW5kIHNpZGViYXIgc28gdGhleSBvdmVy
cmlkZSBkcmF3ZXIuCisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Njhw
eCkpOiBEaXR0by4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBs
YXRlcy9jb21taXRzLmh0bWw6CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWw6CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sOgorCiAyMDE5LTA5LTI0ICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2FsZXNjZSBvciByZW1v
dmUgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQpJbmRleDogVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvZHJhd2VyLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2RyYXdlci5q
cwkocmV2aXNpb24gMjUwMzE2KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy9zdGF0aWMvanMvZHJhd2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGZ1
bmN0aW9uIERyYXdlcihjb250cm9scyA9IFtdLCBvbkNvbGxhcHMKICAgICBjb25zdCBISURERU4g
PSBmYWxzZTsKICAgICBjb25zdCBWSVNJQkxFID0gdHJ1ZTsKICAgICBsZXQgZHJhd2VyU3RhdGUg
PSBWSVNJQkxFOwotICAgIGxldCBtYWluID0gbnVsbDsKKyAgICBsZXQgbWFpbnMgPSBbXTsKIAog
ICAgIGNvbnN0IHNpZGViYXJDb250cm9sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSgnbW9iaWxlLXNpZGViYXItY29udHJvbCcpWzBdOwogICAgIHNpZGViYXJDb250cm9sLmNsYXNz
TGlzdC5hZGQoJ2Rpc3BsYXknKTsKQEAgLTUwLDEyICs1MCwxMCBAQCBmdW5jdGlvbiBEcmF3ZXIo
Y29udHJvbHMgPSBbXSwgb25Db2xsYXBzCiAgICAgICAgIG9uU3RhdGVVcGRhdGU6IChlbGVtZW50
LCBzdGF0ZSkgPT4gewogICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICAg
ZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsKLSAgICAgICAgICAgICAgICBpZiAo
bWFpbikKLSAgICAgICAgICAgICAgICAgICAgbWFpbi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4i
KTsKKyAgICAgICAgICAgICAgICBtYWlucy5mb3JFYWNoKG1haW4gPT4gbWFpbi5jbGFzc0xpc3Qu
cmVtb3ZlKCJoaWRkZW4iKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7Ci0gICAgICAgICAgICAgICAgaWYgKG1h
aW4pCi0gICAgICAgICAgICAgICAgICAgIG1haW4uY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7Cisg
ICAgICAgICAgICAgICAgbWFpbnMuZm9yRWFjaChtYWluID0+IG1haW4uY2xhc3NMaXN0LmFkZCgi
aGlkZGVuIikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKGxldCBub2RlIG9m
IGVsZW1lbnQuY2hpbGRyZW4pIHsKQEAgLTY4LDggKzY2LDkgQEAgZnVuY3Rpb24gRHJhd2VyKGNv
bnRyb2xzID0gW10sIG9uQ29sbGFwcwogICAgICAgICB9LAogICAgICAgICBvbkVsZW1lbnRNb3Vu
dDogKGVsZW1lbnQpID0+IHsKICAgICAgICAgICAgIGxldCBjYW5kaWRhdGVzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibWFpbiIpOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgIG1haW4gPSBjYW5kaWRhdGVzWzBdOworICAgICAg
ICAgICAgbWFpbnMgPSBbXTsKKyAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQg
PCBjYW5kaWRhdGVzLmxlbmd0aDsgKytjb3VudCkKKyAgICAgICAgICAgICAgICBtYWlucy5wdXNo
KGNhbmRpZGF0ZXNbY291bnRdKTsKIAogICAgICAgICAgICAgc2lkZWJhckNvbnRyb2wub25jbGlj
ayA9ICgpID0+IHsKICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5KQpJ
bmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvZXhwZWN0
YXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL2V4cGVjdGF0aW9ucy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9yZXN1
bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9leHBlY3RhdGlvbnMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8vIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
Ky8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIKKy8v
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorLy8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisvLyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisvLyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorLy8gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisvLyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKy8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKy8vIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgRXhwZWN0YXRpb25zCit7CisgICAg
c3RhdGljIGNvbG9yTWFwKCkgeworICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IHN1Y2Nlc3M6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ncmVlbkxpZ2h0Jyku
dHJpbSgpLAorICAgICAgICAgICAgZmFpbGVkOiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFs
dWUoJy0tcmVkTGlnaHQnKS50cmltKCksCisgICAgICAgICAgICB0aW1lZG91dDogY29tcHV0ZWRT
dHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLW9yYW5nZUxpZ2h0JykudHJpbSgpLAorICAgICAgICAg
ICAgY3Jhc2hlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXB1cnBsZUxpZ2h0
JykudHJpbSgpLAorICAgICAgICB9OworICAgIH0KKworICAgIHN0YXRpYyBzdHJpbmdUb1N0YXRl
SWQoc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBFeHBlY3RhdGlvbnMuc3RhdGVUb0lkTWFwW3N0
cmluZ107CisgICAgfQorICAgIHN0YXRpYyB0eXBlRm9ySWQoc3RyaW5nKSB7CisgICAgICAgIGNv
bnN0IGlkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChzdHJpbmcpOworICAgICAgICBs
ZXQgcmVzdWx0ID0gJ3N1Y2Nlc3MnOworICAgICAgICBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVz
LmZvckVhY2godHlwZSA9PiB7CisgICAgICAgICAgICBjb25zdCBpZEZvclR5cGUgPSBFeHBlY3Rh
dGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZU1hcFt0eXBlXSk7
CisgICAgICAgICAgICBpZiAoaWQgPD0gaWRGb3JUeXBlKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHR5cGU7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICBzdGF0aWMgc3ltYm9sRm9ySWQoc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBFeHBlY3RhdGlv
bnMuc3ltYm9sTWFwW0V4cGVjdGF0aW9ucy50eXBlRm9ySWQoc3RyaW5nKV07CisgICAgfQorICAg
IHN0YXRpYyBjb2xvckZvcklkKHN0cmluZykgeworICAgICAgICByZXR1cm4gRXhwZWN0YXRpb25z
LmNvbG9yTWFwKClbRXhwZWN0YXRpb25zLnR5cGVGb3JJZChzdHJpbmcpXTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdW5leHBlY3RlZFJlc3VsdHMocmVzdWx0cywgZXhwZWN0YXRpb25zKQorICAgIHsK
KyAgICAgICAgbGV0IHIgPSByZXN1bHRzLnNwbGl0KCcuJyk7CisgICAgICAgIGV4cGVjdGF0aW9u
cy5zcGxpdCgnICcpLmZvckVhY2goZXhwZWN0YXRpb24gPT4geworICAgICAgICAgICAgY29uc3Qg
aSA9IHIuaW5kZXhPZihleHBlY3RhdGlvbik7CisgICAgICAgICAgICBpZiAoaSA+IC0xKQorICAg
ICAgICAgICAgICAgIHIuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9u
ID09PSAnRkFJTCcpCisgICAgICAgICAgICAgICAgWydURVhUJywgJ0FVRElPJywgJ0lNQUdFJ10u
Zm9yRWFjaChleHBlY3RhdGlvbiA9PiB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBy
LmluZGV4T2YoZXhwZWN0YXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IC0xKQor
ICAgICAgICAgICAgICAgICAgICAgICAgci5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworICAgICAgICBsZXQgcmVzdWx0ID0gJ1BBU1MnOworICAgICAgICBy
LmZvckVhY2goY2FuZGlkYXRlID0+IHsKKyAgICAgICAgICAgIGlmIChFeHBlY3RhdGlvbnMuc3Ry
aW5nVG9TdGF0ZUlkKGNhbmRpZGF0ZSkgPCBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKHJl
c3VsdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FuZGlkYXRlOworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK0V4cGVjdGF0aW9ucy5zdGF0ZVRv
SWRNYXAgPSB7CisgICAgQ1JBU0g6IDB4MDAsCisgICAgVElNRU9VVDogMHgwOCwKKyAgICBJTUFH
RTogMHgxMCwKKyAgICBBVURJTzogMHgxOCwKKyAgICBURVhUOiAweDIwLAorICAgIEZBSUw6IDB4
MjgsCisgICAgRVJST1I6IDB4MzAsCisgICAgV0FSTklORzogMHgzOCwKKyAgICBQQVNTOiAweDQw
LAorfTsKK0V4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMgPSBbJ2ZhaWxlZCcsICd0aW1lZG91dCcs
ICdjcmFzaGVkJ107CitFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVNYXAgPSB7CisgICAgZmFpbGVk
OiAnRVJST1InLAorICAgIHRpbWVkb3V0OiAnVElNRU9VVCcsCisgICAgY3Jhc2hlZDogJ0NSQVNI
JywKK30KK0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAgPSB7CisgICAgc3VjY2VzczogJ+KckycsCisg
ICAgZmFpbGVkOiAn8J2WtycsCisgICAgdGltZWRvdXQ6ICfijosnLAorICAgIGNyYXNoZWQ6ICch
JywKK30KKworZXhwb3J0IHtFeHBlY3RhdGlvbnN9OwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkv
cmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUu
anMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9z
dGF0aWMvanMvaW52ZXN0aWdhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzcgQEAK
Ky8vIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIKKy8vIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorLy8gVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisvLyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisvLyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorLy8gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisvLyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorLy8gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKy8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKy8vIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xpYnJhcnkvanMvUmVmLmpzJzsKK2ltcG9ydCB7
Q29tbWl0QmFua30gZnJvbSAnL2Fzc2V0cy9qcy9jb21taXQuanMnOworaW1wb3J0IHtxdWVyeVRv
UGFyYW1zLCBwYXJhbXNUb1F1ZXJ5LCBRdWVyeU1vZGlmaWVyLCB9IGZyb20gJy9hc3NldHMvanMv
Y29tbW9uLmpzJzsKK2ltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25m
aWd1cmF0aW9uLmpzJworaW1wb3J0IHtFeHBlY3RhdGlvbnN9IGZyb20gJy9hc3NldHMvanMvZXhw
ZWN0YXRpb25zLmpzJzsKKworZnVuY3Rpb24gY29tbWl0c0ZvclV1aWQodXVpZCkgeworICAgIHJl
dHVybiBgQ29tbWl0czogJHtDb21taXRCYW5rLmNvbW1pdHNEdXJpbmdVdWlkKHV1aWQpLm1hcCgo
Y29tbWl0KSA9PiB7CisgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7CisgICAgICAgICAgICAg
ICAgYnJhbmNoOiBjb21taXQuYnJhbmNoID8gW2NvbW1pdC5icmFuY2hdIDogYnJhbmNoLAorICAg
ICAgICAgICAgICAgIHV1aWQ6IFtjb21taXQudXVpZF0sCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIXBhcmFtcy5icmFuY2gpCisgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtcy5i
cmFuY2g7CisgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHBhcmFtc1RvUXVlcnkocGFyYW1zKTsK
KyAgICAgICAgICAgIHJldHVybiBgPGEgaHJlZj0iL2NvbW1pdC9pbmZvPyR7cXVlcnl9IiB0YXJn
ZXQ9Il9ibGFuayI+JHtjb21taXQuaWQuc3Vic3RyaW5nKDAsMTIpfTwvYT5gOworICAgICAgICB9
KS5qb2luKCcsICcpfWAKK30KKworZnVuY3Rpb24gdGVzdFJ1bkxpbmsoc3VpdGUsIGRhdGEpCit7
CisgICAgaWYgKCFkYXRhLnN0YXJ0X3RpbWUpCisgICAgICAgIHJldHVybiAnJzsKKyAgICBjb25z
dCBicmFuY2ggPSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFu
Y2g7CisgICAgcmV0dXJuIGA8YSBocmVmPSIvdXJscy9idWlsZD8ke3BhcmFtc1RvUXVlcnkoZnVu
Y3Rpb24gKCkgeworICAgICAgICBjb25zdCBidWlsZFBhcmFtcyA9IGRhdGEuY29uZmlndXJhdGlv
bi50b1BhcmFtcygpOworICAgICAgICBidWlsZFBhcmFtc1snc3VpdGUnXSA9IFtzdWl0ZV07Cisg
ICAgICAgIGJ1aWxkUGFyYW1zWyd1dWlkJ10gPSBbZGF0YS51dWlkXTsKKyAgICAgICAgYnVpbGRQ
YXJhbXNbJ2FmdGVyX3RpbWUnXSA9IFtkYXRhLnN0YXJ0X3RpbWVdOworICAgICAgICBidWlsZFBh
cmFtc1snYmVmb3JlX3RpbWUnXSA9IFtkYXRhLnN0YXJ0X3RpbWVdOworICAgICAgICBpZiAoYnJh
bmNoKQorICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ2JyYW5jaCddID0gYnJhbmNoOworICAgICAg
ICByZXR1cm4gYnVpbGRQYXJhbXM7CisgICAgfSAoKSl9IiB0YXJnZXQ9Il9ibGFuayI+VGVzdCBy
dW48L2E+IEAgJHtuZXcgRGF0ZShkYXRhLnN0YXJ0X3RpbWUgKiAxMDAwKS50b0xvY2FsZVN0cmlu
ZygpfWA7Cit9CisKK2Z1bmN0aW9uIGVsYXBzZWQoZGF0YSkKK3sKKyAgICBpZiAoZGF0YS50aW1l
KQorICAgICAgICByZXR1cm4gYFRvb2sgJHtkYXRhLnRpbWUgLyAxMDAwfSBzZWNvbmRzYDsKKyAg
ICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLnN0YXRzLnN0YXJ0X3RpbWUgJiYgZGF0YS5zdGF0cy5l
bmRfdGltZSkgeworICAgICAgICBjb25zdCB0aW1lID0gbmV3IERhdGUoKGRhdGEuc3RhdHMuZW5k
X3RpbWUgLSBkYXRhLnN0YXRzLnN0YXJ0X3RpbWUpICogMTAwMCk7CisgICAgICAgIGNvbnNvbGUu
bG9nKGRhdGEuc3RhdHMuZW5kX3RpbWUgLSBkYXRhLnN0YXRzLnN0YXJ0X3RpbWUpOworICAgICAg
ICBsZXQgcmVzdWx0ID0gJ1N1aXRlIHRvb2sgJzsKKyAgICAgICAgaWYgKHRpbWUuZ2V0TWludXRl
cygpKQorICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RpbWUuZ2V0TWludXRlcygpfTpgOworICAg
ICAgICByZXN1bHQgKz0gYCR7dGltZS5nZXRTZWNvbmRzKCkgPD0gOSAmJiB0aW1lLmdldE1pbnV0
ZXMoKSA/ICcwJyA6ICcnfSR7dGltZS5nZXRTZWNvbmRzKCl9LiR7dGltZS5nZXRNaWxsaXNlY29u
ZHMoKSA8PSA5OSA/ICcwJyA6ICcnfSR7dGltZS5nZXRNaWxsaXNlY29uZHMoKSA8PSA5ID8gJzAn
IDogJyd9JHt0aW1lLmdldE1pbGxpc2Vjb25kcygpfSBgOworICAgICAgICBpZiAodGltZS5nZXRN
aW51dGVzKCkpCisgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZXMgdG8gcnVuJzsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWNvbmRzIHRvIHJ1bic7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiAnJzsKK30KKworZnVuY3Rpb24gcGVy
Y2VudGFnZSh2YWx1ZSwgbWF4KQoreworICAgIGlmICh2YWx1ZSA9PT0gbWF4KQorICAgICAgICBy
ZXR1cm4gJzEwMCAlJzsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gJzAgJSc7Cisg
ICAgY29uc3QgcmVzdWx0ID0gTWF0aC5yb3VuZCh2YWx1ZSAvIG1heCAqIDEwMCk7CisgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgIHJldHVybiAnPDEgJSc7CisgICAgaWYgKHJlc3VsdCA9PT0gMTAw
KQorICAgICAgICByZXR1cm4gJzk5ICUnOworICAgIHJldHVybiBgJHtyZXN1bHR9ICVgCit9CisK
K2Z1bmN0aW9uIHJlc3VsdHNGb3JEYXRhKGRhdGEsIHdpbGxGaWx0ZXJFeHBlY3RlZCA9IGZhbHNl
KQoreworICAgIGNvbnN0IHJlc3VsdCA9IFtdOworICAgIGxldCB0ZXN0c1JhbiA9IDE7CisgICAg
bGV0IHRvdGFsVGVzdHMgPSAxOworICAgIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMudGVz
dHNfcnVuKSB7CisgICAgICAgIHRlc3RzUmFuID0gZGF0YS5zdGF0cy50ZXN0c19ydW47CisgICAg
ICAgIHRvdGFsVGVzdHMgPSBkYXRhLnN0YXRzLnRlc3RzX3J1biArIChkYXRhLnN0YXRzLnRlc3Rz
X3NraXBwZWQgPyBkYXRhLnN0YXRzLnRlc3RzX3NraXBwZWQgOiAwKTsKKyAgICB9CisgICAgcmVz
dWx0LnB1c2goYFJhbiAke3Rlc3RzUmFuLnRvTG9jYWxlU3RyaW5nKCl9IG9mICR7dG90YWxUZXN0
cy50b0xvY2FsZVN0cmluZygpfSB0ZXN0c2ApOworICAgIGlmIChkYXRhLmFjdHVhbCkgeworICAg
ICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25zLnR5cGVGb3JJZChkYXRhLmFjdHVhbCk7Cisg
ICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2PgorICAgICAgICAgICAgICAgIEFjdHVhbDogJHtkYXRh
LmFjdHVhbH0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBlfSBzbWFsbCI+
CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQt
d2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXBb
dHlwZV19PC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj5g
KTsKKyAgICB9CisgICAgaWYgKGRhdGEuZXhwZWN0ZWQpIHsKKyAgICAgICAgY29uc3QgdHlwZSA9
IEV4cGVjdGF0aW9ucy50eXBlRm9ySWQoZGF0YS5leHBlY3RlZCk7CisgICAgICAgIHJlc3VsdC5w
dXNoKGA8ZGl2PgorICAgICAgICAgICAgICAgIEV4cGVjdGVkOiAke2RhdGEuZXhwZWN0ZWR9Cisg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7dHlwZX0gc21hbGwiPgorICAgICAgICAg
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9y
bWFsO21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2
PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgfQor
ICAgIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMudGVzdHNfcnVuKSB7CisgICAgICAgIGNv
bnN0IHN1Y2NlZWRlZCA9IGRhdGEuc3RhdHMudGVzdHNfcnVuIC0gZGF0YS5zdGF0c1tgdGVzdHMk
e3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdOworICAg
ICAgICBpZiAoc3VjY2VlZGVkKQorICAgICAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+CisgICAg
ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCBzdWNjZXNzIHNtYWxsIj4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5bGU9ImZvbnQtd2VpZ2h0
OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5zeW1ib2xNYXAuc3VjY2Vz
c308L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAg
ICR7ZGF0YS5zdGFydF90aW1lID8gc3VjY2VlZGVkLnRvTG9jYWxlU3RyaW5nKCkgOiBwZXJjZW50
YWdlKHN1Y2NlZWRlZCwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSBwYXNzZWQKKyAgICAgICAgICAg
ICAgICA8L2Rpdj5gKTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBFeHBlY3RhdGlv
bnMuZmFpbHVyZVR5cGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghZGF0YS5zdGF0cykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb25zdCB0eXBlID0gRXhwZWN0YXRpb25z
LmZhaWx1cmVUeXBlc1tpXTsKKyAgICAgICAgbGV0IHZhbHVlID0gZGF0YS5zdGF0c1tgdGVzdHMk
e3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfSR7dHlwZX1gXTsKKyAg
ICAgICAgaWYgKGkgPCBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzLmxlbmd0aCAtIDEpCisgICAg
ICAgICAgICB2YWx1ZSAtPSBkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8g
J191bmV4cGVjdGVkXycgOiAnXyd9JHtFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzW2kgKyAxXX1g
XTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBy
ZXN1bHQucHVzaChgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3QgJHt0eXBl
fSBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbnkgdGV4dCIgc3R5
bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7bWFyZ2luLXRvcDogMHB4Ij4ke0V4cGVjdGF0aW9ucy5z
eW1ib2xNYXBbdHlwZV19PC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAg
ICAgICAgJHtkYXRhLnN0YXJ0X3RpbWUgPyB2YWx1ZS50b0xvY2FsZVN0cmluZygpIDogcGVyY2Vu
dGFnZSh2YWx1ZSwgZGF0YS5zdGF0cy50ZXN0c19ydW4pfSAke3R5cGV9CisgICAgICAgICAgICA8
L2Rpdj5gKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gcmVuZGVy
SW52ZXN0aWdhdGVEcmF3ZXIoYXJyYXlzKQoreworICAgIHJldHVybiBgPGRpdiBjbGFzcz0icm93
Ij4KKyAgICAgICAgICAgICR7YXJyYXlzLm1hcChhcnJheSA9PiB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJjb2wtcy02IGxpc3QiPgorICAgICAgICAgICAgICAgICAgICAg
ICAgJHthcnJheS5tYXAoZWxlbWVudCA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJpdGVtIj4ke2VsZW1lbnR9PC9kaXY+YDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pLmpvaW4oJycpfQorICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gOwor
ICAgICAgICAgICAgfSkuam9pbignPGRpdiBjbGFzcz0iZGl2aWRlciBtb2JpbGUtY29udHJvbCI+
PC9kaXY+Jyl9CisgICAgICAgIDwvZGl2PmAKK30KKworZnVuY3Rpb24gY29udGVudEZvckFncmVn
YXRlRGF0YShzdWl0ZSwgYWdyZWdhdGVEYXRhLCBkYXRhLCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBm
YWxzZSkKK3sKKyAgICBjb25zdCBtZXRhRGF0YSA9IFsKKyAgICAgICAgYCR7ZGF0YS5sZW5ndGh9
IHJlcG9ydHMgZm9yICR7YWdyZWdhdGVEYXRhLmNvbmZpZ3VyYXRpb259YCwKKyAgICAgICAgY29t
bWl0c0ZvclV1aWQoYWdyZWdhdGVEYXRhLnV1aWQpLAorICAgIF07CisgICAgbGV0IGNvdW50ID0g
MDsKKyAgICBkYXRhLmZvckVhY2gobm9kZSA9PiB7CisgICAgICAgIGNvbnN0IG15Q291bnQgPSBj
b3VudDsKKyAgICAgICAgbGV0IGRvdFR5cGUgPSAnc3VjY2Vzcyc7CisgICAgICAgIGlmIChub2Rl
LnN0YXRzKSB7CisgICAgICAgICAgICBFeHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVzLmZvckVhY2go
dHlwZSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuc3RhdHNbYHRlc3RzJHt3aWxsRmls
dGVyRXhwZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6ICdfJ30ke3R5cGV9YF0gPiAwKQorICAgICAg
ICAgICAgICAgICAgICBkb3RUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbGV0IHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1Rv
U3RhdGVJZChub2RlLmFjdHVhbCk7CisgICAgICAgICAgICBpZiAod2lsbEZpbHRlckV4cGVjdGVk
KQorICAgICAgICAgICAgICAgIHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJ
ZChFeHBlY3RhdGlvbnMudW5leHBlY3RlZFJlc3VsdHMobm9kZS5hY3R1YWwsIG5vZGUuZXhwZWN0
ZWQpKTsKKyAgICAgICAgICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBl
ID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChF
eHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVNYXBbdHlwZV0pID49IHJlc3VsdElkKQorICAgICAgICAg
ICAgICAgICAgICBkb3RUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICAgIG1ldGFEYXRhLnB1c2goYDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
ZG90ICR7ZG90VHlwZX0gc21hbGwiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0
aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBweCI+JHtF
eHBlY3RhdGlvbnMuc3ltYm9sTWFwW2RvdFR5cGVdfTwvZGl2PgorICAgICAgICAgICAgICAgIDwv
ZGl2PgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rLWJ1dHRvbiIgcmVmPSIke1JFRi5j
cmVhdGVSZWYoeworICAgICAgICAgICAgICAgICAgICBvbkVsZW1lbnRNb3VudDogKGVsZW1lbnQp
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+IElu
dmVzdGlnYXRlRHJhd2VyLnNlbGVjdChteUNvdW50ICsgMSk7CisgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgfSl9Ij4KKyAgICAgICAgICAgICAgICAgICAgJHtub2RlLmNv
bmZpZ3VyYXRpb259CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9kaXY+YCk7
CisgICAgICAgICsrY291bnQ7CisgICAgfSk7CisgICAgcmV0dXJuIHJlbmRlckludmVzdGlnYXRl
RHJhd2VyKFttZXRhRGF0YSwgcmVzdWx0c0ZvckRhdGEoYWdyZWdhdGVEYXRhLCB3aWxsRmlsdGVy
RXhwZWN0ZWQpXSk7Cit9CisKK2Z1bmN0aW9uIGNvbnRlbnRGb3JEYXRhKHN1aXRlLCBkYXRhLCB3
aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZSkKK3sKKyAgICBjb25zdCBtZXRhRGF0YSA9IFsKKyAg
ICAgICAgZGF0YS5jb25maWd1cmF0aW9uLAorICAgICAgICBjb21taXRzRm9yVXVpZChkYXRhLnV1
aWQpLAorICAgICAgICB0ZXN0UnVuTGluayhzdWl0ZSwgZGF0YSksCisgICAgICAgIGVsYXBzZWQo
ZGF0YSksCisgICAgXTsKKworICAgIHJldHVybiByZW5kZXJJbnZlc3RpZ2F0ZURyYXdlcihbbWV0
YURhdGEsIHJlc3VsdHNGb3JEYXRhKGRhdGEsIHdpbGxGaWx0ZXJFeHBlY3RlZCldKTsKK30KKwor
Y2xhc3MgX0ludmVzdGlnYXRlRHJhd2VyIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAg
dGhpcy5yZWYgPSBudWxsOworICAgICAgICB0aGlzLmNvbnRlbnQgPSBudWxsOworICAgICAgICB0
aGlzLmNsb3NlID0gbnVsbDsKKyAgICAgICAgdGhpcy5wcmV2aW91cyA9IG51bGw7CisgICAgICAg
IHRoaXMubmV4dCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5zZWxlY3RlZCA9IDA7CisgICAgICAg
IHRoaXMuc3VpdGUgPSBudWxsOworICAgICAgICB0aGlzLmFncmVnYXRlID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5kYXRhID0gW107CisKKyAgICAgICAgdGhpcy53aWxsRmlsdGVyRXhwZWN0ZWQgPSBm
YWxzZTsKKyAgICB9CisgICAgaXNSZW5kZXJlZCgpIHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0g
dGhpcy5yZWYgJiYgdGhpcy5jb250ZW50ICYmIHRoaXMuY2xvc2UgJiYgdGhpcy5wcmV2aW91cyAm
JiB0aGlzLm5leHQ7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgY29uc29sZS5l
cnJvcignSW52ZXN0aWdhdGlvbiBkcmF3ZXIgbm90IHJlbmRlcmVkJyk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIHRvU3RyaW5nKCkgeworICAgICAgICBjb25zdCBzZWxmID0g
dGhpczsKKyAgICAgICAgdGhpcy5yZWYgPSBSRUYuY3JlYXRlUmVmKCk7CisgICAgICAgIHRoaXMu
Y29udGVudCA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgc3RhdGU6ICcnLAorICAgICAg
ICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIHN0YXRlKSA9PiB7CisgICAgICAgICAgICAg
ICAgRE9NLmluamVjdChlbGVtZW50LCBzdGF0ZSk7CisgICAgICAgICAgICB9LAorICAgICAgICB9
KTsKKyAgICAgICAgdGhpcy5jbG9zZSA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAgb25F
bGVtZW50TW91bnQ6IChlbGVtZW50KSA9PiB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5vbmNs
aWNrID0gKCkgPT4gc2VsZi5jb2xsYXBzZSgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7
CisKKyAgICAgICAgdGhpcy5wcmV2aW91cyA9IFJFRi5jcmVhdGVSZWYoeworICAgICAgICAgICAg
b25FbGVtZW50TW91bnQ6IChlbGVtZW50KSA9PiB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5v
bmNsaWNrID0gKCkgPT4gc2VsZi5zZWxlY3Qoc2VsZi5zZWxlY3RlZCAtIDEpOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMubmV4dCA9IFJFRi5jcmVhdGVSZWYoewor
ICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6IChlbGVtZW50KSA9PiB7CisgICAgICAgICAgICAg
ICAgZWxlbWVudC5vbmNsaWNrID0gKCkgPT4gc2VsZi5zZWxlY3Qoc2VsZi5zZWxlY3RlZCArIDEp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIGA8ZGl2IGNs
YXNzPSJkcmF3ZXIgbWFpbiByaWdodC1zaWRlYmFyIiByZWY9IiR7dGhpcy5yZWZ9IiBzdHlsZT0i
ei1pbmRleDogMjAiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQgdW5zZWxl
Y3RhYmxlIiBzdHlsZT0iZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3
ZWVuOyBmbGV4LWRpcmVjdGlvbjogcm93OyBwYWRkaW5nOiAxMHB4OyI+CisgICAgICAgICAgICAg
ICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiAxNTBweDsgdGV4dC1hbGlnbjogbGVmdCI+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnV0dG9uIiBzdHlsZT0iY3Vyc29yOiBwb2lu
dGVyIiByZWY9IiR7dGhpcy5wcmV2aW91c30iPuKXgCBQcmV2aW91czwvYT4KKyAgICAgICAgICAg
ICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8YSBjbGFzcz0iYnV0dG9uIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyIiByZWY9
IiR7dGhpcy5jbG9zZX0iPkNsb3NlPC9hPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAg
ICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDE1MHB4OyB0ZXh0LWFsaWduOiBy
aWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnV0dG9uIiBzdHlsZT0i
Y3Vyc29yOiBwb2ludGVyIiByZWY9IiR7dGhpcy5uZXh0fSI+TmV4dCDilrY8L2E+CisgICAgICAg
ICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAg
ICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiIHJlZj0iJHt0aGlzLmNvbnRlbnR9Ij4KKyAgICAgICAg
ICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PmA7CisgICAgfQorICAgIGV4cGFuZChz
dWl0ZSwgYWdyZWdhdGVEYXRhLCBhbGxEYXRhKSB7CisgICAgICAgIGlmICghdGhpcy5pc1JlbmRl
cmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMucmVmLmVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgnZGlzcGxheScpOworICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7CisgICAg
ICAgIHRoaXMuYWdyZWdhdGUgPSBhZ3JlZ2F0ZURhdGE7CisgICAgICAgIHRoaXMuZGF0YSA9IGFs
bERhdGE7CisgICAgICAgIHRoaXMuc2VsZWN0KDApOworICAgIH0KKyAgICBjb2xsYXBzZSgpIHsK
KyAgICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy5yZWYuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkaXNwbGF5Jyk7CisKKyAg
ICAgICAgdGhpcy5hZ3JlZ2F0ZSA9IG51bGw7CisgICAgICAgIHRoaXMuZGF0YSA9IFtdOworICAg
ICAgICB0aGlzLnNlbGVjdCgwKTsKKyAgICB9CisgICAgc2VsZWN0KGluZGV4KSB7CisgICAgICAg
IGxldCBjYW5kaWRhdGVzID0gdGhpcy5kYXRhLmxlbmd0aDsKKyAgICAgICAgaWYgKHRoaXMuYWdy
ZWdhdGUgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDEpCisgICAgICAgICAgICBjYW5kaWRhdGVzICs9
IDE7CisgICAgICAgIGlmICghY2FuZGlkYXRlcykgeworICAgICAgICAgICAgdGhpcy5yZWYuZWxl
bWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkaXNwbGF5Jyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBzZWxlY3Rpb24gaW4gYm91bmRzCisgICAgICAg
IGlmIChpbmRleCA8IDApCisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIGlmIChpbmRl
eCA+PSBjYW5kaWRhdGVzKQorICAgICAgICAgICAgaW5kZXggPSBjYW5kaWRhdGVzIC0gMTsKKyAg
ICAgICAgdGhpcy5zZWxlY3RlZCA9IGluZGV4OworCisgICAgICAgIC8vIERpc3BsYXkgbmV4dC9w
cmV2aW91cyBidXR0b25zCisgICAgICAgIGlmIChpbmRleCkKKyAgICAgICAgICAgIHRoaXMucHJl
dmlvdXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gbnVsbDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdGhpcy5wcmV2aW91cy5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAg
ICAgIGlmIChpbmRleCA9PT0gY2FuZGlkYXRlcyAtIDEpCisgICAgICAgICAgICB0aGlzLm5leHQu
ZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzLm5leHQuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gbnVsbDsKKworICAgICAgICBpZiAo
dGhpcy5hZ3JlZ2F0ZSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMSAmJiAhdGhpcy5zZWxlY3RlZCkK
KyAgICAgICAgICAgIHRoaXMuY29udGVudC5zZXRTdGF0ZShjb250ZW50Rm9yQWdyZWdhdGVEYXRh
KHRoaXMuc3VpdGUsIHRoaXMuYWdyZWdhdGUsIHRoaXMuZGF0YSwgdGhpcy53aWxsRmlsdGVyRXhw
ZWN0ZWQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5jb250ZW50LnNldFN0YXRl
KGNvbnRlbnRGb3JEYXRhKAorICAgICAgICAgICAgICAgIHRoaXMuc3VpdGUsCisgICAgICAgICAg
ICAgICAgdGhpcy5kYXRhW3RoaXMuYWdyZWdhdGUgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDEgPyB0
aGlzLnNlbGVjdGVkIC0gMSA6IHRoaXMuc2VsZWN0ZWRdLAorICAgICAgICAgICAgICAgIHRoaXMu
d2lsbEZpbHRlckV4cGVjdGVkLAorICAgICAgICAgICAgKSk7CisgICAgfQorfQorCitjb25zdCBJ
bnZlc3RpZ2F0ZURyYXdlciA9IG5ldyBfSW52ZXN0aWdhdGVEcmF3ZXIoKTsKKworZXhwb3J0IHtJ
bnZlc3RpZ2F0ZURyYXdlcn07CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJw
eS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkocmV2aXNpb24gMjUwMzE2
KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxp
bmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDggQEAKIGltcG9ydCB7Q29tbWl0QmFu
a30gZnJvbSAnL2Fzc2V0cy9qcy9jb21taXQuanMnOwogaW1wb3J0IHtDb25maWd1cmF0aW9ufSBm
cm9tICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnOwogaW1wb3J0IHtkZWVwQ29tcGFyZSwg
RXJyb3JEaXNwbGF5LCBlc2NhcGVIVE1MLCBwYXJhbXNUb1F1ZXJ5LCBxdWVyeVRvUGFyYW1zfSBm
cm9tICcvYXNzZXRzL2pzL2NvbW1vbi5qcyc7CitpbXBvcnQge0V4cGVjdGF0aW9uc30gZnJvbSAn
L2Fzc2V0cy9qcy9leHBlY3RhdGlvbnMuanMnOworaW1wb3J0IHtJbnZlc3RpZ2F0ZURyYXdlcn0g
ZnJvbSAnL2Fzc2V0cy9qcy9pbnZlc3RpZ2F0ZS5qcyc7CiBpbXBvcnQge1Rvb2xUaXB9IGZyb20g
Jy9hc3NldHMvanMvdG9vbHRpcC5qcyc7CiBpbXBvcnQge1RpbWVsaW5lfSBmcm9tICcvbGlicmFy
eS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50cy5qcyc7CiBpbXBvcnQge0RPTSwgRXZl
bnRTdHJlYW0sIFJFRiwgRlB9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CkBAIC0zMSw1MyAr
MzMsNiBAQCBpbXBvcnQge0RPTSwgRXZlbnRTdHJlYW0sIFJFRiwgRlB9IGZyb20gCiAKIGNvbnN0
IERFRkFVTFRfTElNSVQgPSAxMDA7CiAKLWNvbnN0IHN0YXRlVG9JRE1hcHBpbmcgPSB7Ci0gICAg
Q1JBU0g6IDB4MDAsCi0gICAgVElNRU9VVDogMHgwOCwKLSAgICBJTUFHRTogMHgxMCwKLSAgICBB
VURJTzogMHgxOCwKLSAgICBURVhUOiAweDIwLAotICAgIEZBSUw6IDB4MjgsCi0gICAgRVJST1I6
IDB4MzAsCi0gICAgV0FSTklORzogMHgzOCwKLSAgICBQQVNTOiAweDQwLAotfTsKLQotY29uc3Qg
VGVzdFJlc3VsdHNTeW1ib2xNYXAgPSB7Ci0gICAgc3VjY2VzczogJ+KckycsCi0gICAgZmFpbGVk
OiAn8J2WtycsCi0gICAgdGltZWRvdXQ6ICfijosnLAotICAgIGNyYXNoZWQ6ICchJywKLX0KLQot
Y2xhc3MgRXhwZWN0YXRpb25zCi17Ci0gICAgc3RhdGljIHN0cmluZ1RvU3RhdGVJZChzdHJpbmcp
IHsKLSAgICAgICAgcmV0dXJuIHN0YXRlVG9JRE1hcHBpbmdbc3RyaW5nXTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdW5leHBlY3RlZFJlc3VsdHMocmVzdWx0cywgZXhwZWN0YXRpb25zKQotICAgIHsK
LSAgICAgICAgbGV0IHIgPSByZXN1bHRzLnNwbGl0KCcuJyk7Ci0gICAgICAgIGV4cGVjdGF0aW9u
cy5zcGxpdCgnICcpLmZvckVhY2goZXhwZWN0YXRpb24gPT4gewotICAgICAgICAgICAgY29uc3Qg
aSA9IHIuaW5kZXhPZihleHBlY3RhdGlvbik7Ci0gICAgICAgICAgICBpZiAoaSA+IC0xKQotICAg
ICAgICAgICAgICAgIHIuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9u
ID09PSAnRkFJTCcpCi0gICAgICAgICAgICAgICAgWydURVhUJywgJ0FVRElPJywgJ0lNQUdFJ10u
Zm9yRWFjaChleHBlY3RhdGlvbiA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBy
LmluZGV4T2YoZXhwZWN0YXRpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IC0xKQot
ICAgICAgICAgICAgICAgICAgICAgICAgci5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0pOwotICAgICAgICBsZXQgcmVzdWx0ID0gJ1BBU1MnOwotICAgICAgICBy
LmZvckVhY2goY2FuZGlkYXRlID0+IHsKLSAgICAgICAgICAgIGlmIChFeHBlY3RhdGlvbnMuc3Ry
aW5nVG9TdGF0ZUlkKGNhbmRpZGF0ZSkgPCBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKHJl
c3VsdCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FuZGlkYXRlOwotICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19CiBsZXQgd2lsbEZpbHRlckV4cGVjdGVk
ID0gZmFsc2U7CiAKIGZ1bmN0aW9uIG1pbmltdW1VdWlkRm9yUmVzdWx0cyhyZXN1bHRzLCBsaW1p
dCkgewpAQCAtMjU4LDEyICsyMTMsNiBAQCBmdW5jdGlvbiB4QXhpc0Zyb21TY2FsZShzY2FsZSwg
cmVwb3NpdG9yCiB9CiAKIGNvbnN0IHRlc3RzUmVnZXggPSAvdGVzdHNfKFthLXpdKSsvOwotY29u
c3QgZmFpbHVyZVR5cGVPcmRlciA9IFsnZmFpbGVkJywgJ3RpbWVkb3V0JywgJ2NyYXNoZWQnXTsK
LWNvbnN0IGZhaWx1cmVUeXBlTWFwcGluZyA9IHsKLSAgICBmYWlsZWQ6ICdFUlJPUicsCi0gICAg
dGltZWRvdXQ6ICdUSU1FT1VUJywKLSAgICBjcmFzaGVkOiAnQ1JBU0gnLAotfQogCiBmdW5jdGlv
biBpblBsYWNlQ29tYmluZShvdXQsIG9iaikKIHsKQEAgLTMxNyw4ICsyNjYsOCBAQCBmdW5jdGlv
biBzdGF0c0ZvclNpbmdsZVJlc3VsdChyZXN1bHQpIHsKICAgICAgICAgdGVzdHNfcnVuOiAxLAog
ICAgICAgICB0ZXN0c19za2lwcGVkOiAwLAogICAgIH0KLSAgICBmYWlsdXJlVHlwZU9yZGVyLmZv
ckVhY2godHlwZSA9PiB7Ci0gICAgICAgIGNvbnN0IGlkRm9yVHlwZSA9IEV4cGVjdGF0aW9ucy5z
dHJpbmdUb1N0YXRlSWQoZmFpbHVyZVR5cGVNYXBwaW5nW3R5cGVdKTsKKyAgICBFeHBlY3RhdGlv
bnMuZmFpbHVyZVR5cGVzLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgIGNvbnN0IGlkRm9yVHlw
ZSA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBl
TWFwW3R5cGVdKTsKICAgICAgICAgc3RhdHNbYHRlc3RzXyR7dHlwZX1gXSA9IGFjdHVhbElkID4g
aWRGb3JUeXBlICA/IDAgOiAxOwogICAgICAgICBzdGF0c1tgdGVzdHNfdW5leHBlY3RlZF8ke3R5
cGV9YF0gPSB1bmV4cGVjdGVkSWQgPiBpZEZvclR5cGUgID8gMCA6IDE7CiAgICAgfSk7CkBAIC01
MzAsMTQgKzQ3OSw3IEBAIGNsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50IHsKICAgICAgICAgY29u
c3QgY29tbWl0cyA9IGNvbW1pdHNGb3JSZXN1bHRzKHRoaXMucmVzdWx0cywgbGltaXQsIHRoaXMu
YWxsQ29tbWl0cyk7CiAgICAgICAgIGNvbnN0IHNjYWxlID0gc2NhbGVGb3JDb21taXRzKGNvbW1p
dHMpOwogCi0gICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRv
Y3VtZW50LmJvZHkpOwotICAgICAgICBjb25zdCBjb2xvck1hcCA9IHsKLSAgICAgICAgICAgIHN1
Y2Nlc3M6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ncmVlbkxpZ2h0JykudHJp
bSgpLAotICAgICAgICAgICAgZmFpbGVkOiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUo
Jy0tcmVkTGlnaHQnKS50cmltKCksCi0gICAgICAgICAgICB0aW1lZG91dDogY29tcHV0ZWRTdHls
ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLW9yYW5nZUxpZ2h0JykudHJpbSgpLAotICAgICAgICAgICAg
Y3Jhc2hlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXB1cnBsZUxpZ2h0Jyku
dHJpbSgpLAotICAgICAgICB9Ci0KKyAgICAgICAgY29uc3QgY29sb3JNYXAgPSBFeHBlY3RhdGlv
bnMuY29sb3JNYXAoKTsKICAgICAgICAgdGhpcy51cGRhdGVzID0gW107CiAgICAgICAgIGNvbnN0
IG9wdGlvbnMgPSB7CiAgICAgICAgICAgICBnZXRTY2FsZUZ1bmM6ICh2YWx1ZSkgPT4gewpAQCAt
NTUyLDcgKzQ5NCw3IEBAIGNsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50IHsKIAogICAgICAgICAg
ICAgICAgIGxldCB0YWcgPSBudWxsOwogICAgICAgICAgICAgICAgIGxldCBjb2xvciA9IGNvbG9y
TWFwLnN1Y2Nlc3M7Ci0gICAgICAgICAgICAgICAgbGV0IHN5bWJvbCA9IFRlc3RSZXN1bHRzU3lt
Ym9sTWFwLnN1Y2Nlc3M7CisgICAgICAgICAgICAgICAgbGV0IHN5bWJvbCA9IEV4cGVjdGF0aW9u
cy5zeW1ib2xNYXAuc3VjY2VzczsKICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0cykgewog
ICAgICAgICAgICAgICAgICAgICB0YWcgPSBkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4
cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9ZmFpbGVkYF07CiAKQEAgLTU2NCwyMCArNTA2
LDIwIEBAIGNsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRhZyA9IGAke3RhZ30gJWAKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIGZhaWx1cmVUeXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4gewogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhw
ZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6ICdfJ30ke3R5cGV9YF0gPiAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvck1hcFt0eXBlXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzeW1ib2wgPSBUZXN0UmVzdWx0c1N5bWJvbE1hcFt0eXBlXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5
cGVdOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0
SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKGRhdGEuYWN0dWFsKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJFeHBlY3RlZCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlvbnMu
dW5leHBlY3RlZFJlc3VsdHMoZGF0YS5hY3R1YWwsIGRhdGEuZXhwZWN0ZWQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgZmFpbHVyZVR5cGVPcmRlci5mb3JFYWNoKHR5cGUgPT4gewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoZmFpbHVyZVR5
cGVNYXBwaW5nW3R5cGVdKSA+PSByZXN1bHRJZCkgeworICAgICAgICAgICAgICAgICAgICBFeHBl
Y3RhdGlvbnMuZmFpbHVyZVR5cGVzLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlvbnMuZmFp
bHVyZVR5cGVNYXBbdHlwZV0pID49IHJlc3VsdElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sb3IgPSBjb2xvck1hcFt0eXBlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzeW1ib2wgPSBUZXN0UmVzdWx0c1N5bWJvbE1hcFt0eXBlXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeW1ib2wgPSBFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICB9CkBAIC01ODgsMjAgKzUzMCw0NCBAQCBjbGFzcyBUaW1lbGluZUZyb21FbmRwb2ludCB7
CiAKICAgICAgICAgZnVuY3Rpb24gb25Eb3RDbGlja0ZhY3RvcnkoY29uZmlndXJhdGlvbikgewog
ICAgICAgICAgICAgcmV0dXJuIChkYXRhKSA9PiB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBkbyBzb21ldGhpbmcgc2FuZSBoZXJlLCBidXQgd2UgcHJvYmFibHkgbmVlZCBh
bm90aGVyIGVuZHBvaW50Ci0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLnN0YXJ0X3RpbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ05vZGUgaXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0
aXBsZSBydW5zJyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBsZXQgYnVpbGRQYXJhbXMgPSBjb25maWd1cmF0aW9uLnRv
UGFyYW1zKCk7Ci0gICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3N1aXRlJ10gPSBbc2VsZi5z
dWl0ZV07Ci0gICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3V1aWQnXSA9IFtkYXRhLnV1aWRd
OwotICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydhZnRlcl90aW1lJ10gPSBbZGF0YS5zdGFy
dF90aW1lXTsKLSAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYmVmb3JlX3RpbWUnXSA9IFtk
YXRhLnN0YXJ0X3RpbWVdOwotICAgICAgICAgICAgICAgIGlmIChicmFuY2gpCi0gICAgICAgICAg
ICAgICAgICAgIGJ1aWxkUGFyYW1zWydicmFuY2gnXSA9IGJyYW5jaDsKLSAgICAgICAgICAgICAg
ICB3aW5kb3cub3BlbihgL3VybHMvYnVpbGQ/JHtwYXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKX1g
LCAnX2JsYW5rJyk7CisgICAgICAgICAgICAgICAgbGV0IGFsbERhdGEgPSBbXTsKKyAgICAgICAg
ICAgICAgICBsZXQgcGFydGlhbENvbmZpZ3VyYXRpb24gPSB7fTsKKyAgICAgICAgICAgICAgICBz
ZWxmLmNvbmZpZ3VyYXRpb25zLmZvckVhY2goY29uZmlndXJhdGlvbktleSA9PiB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uS2V5LmNvbXBhcmUoY29uZmlndXJhdGlvbikg
fHwgY29uZmlndXJhdGlvbktleS5jb21wYXJlU0RLcyhjb25maWd1cmF0aW9uKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHRz
W2NvbmZpZ3VyYXRpb25LZXkudG9LZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkQ29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0
aW9uKHBhaXIuY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29t
cHV0ZWRDb25maWd1cmF0aW9uLmNvbXBhcmUoY29uZmlndXJhdGlvbikgfHwgY29tcHV0ZWRDb25m
aWd1cmF0aW9uLmNvbXBhcmVTREtzKGNvbmZpZ3VyYXRpb24pKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb2VzTWF0Y2gg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIucmVzdWx0cy5mb3JFYWNoKG5v
ZGUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnV1aWQgIT09IGRh
dGEudXVpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvZXNNYXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGV0IGRhdGFOb2RlID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT2JqZWN0LmtleXMobm9kZSkuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTm9kZVtrZXldID0gbm9kZVtrZXldOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFOb2RlWydj
b25maWd1cmF0aW9uJ10gPSBjb21wdXRlZENvbmZpZ3VyYXRpb247CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsRGF0YS5wdXNoKGRhdGFOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvZXNNYXRjaCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24ubWVtYmVycygpLmZvckVhY2gobWVt
YmVyID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lbWJlciBpbiBw
YXJ0aWFsQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcnRpYWxDb25maWd1cmF0aW9uW21lbWJlcl0gIT09IG51bGwgJiYgcGFydGlhbENv
bmZpZ3VyYXRpb25bbWVtYmVyXSAhPT0gY29tcHV0ZWRDb25maWd1cmF0aW9uW21lbWJlcl0pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbENvbmZpZ3VyYXRp
b25bbWVtYmVyXSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY29tcHV0ZWRDb25maWd1cmF0aW9uW21lbWJlcl0gIT09IG51bGwpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsQ29uZmlndXJhdGlvblttZW1iZXJdID0g
Y29tcHV0ZWRDb25maWd1cmF0aW9uW21lbWJlcl07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGxldCBhZ3JlZ2F0ZURhdGEg
PSB7fTsKKyAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGtleSA9PiB7
CisgICAgICAgICAgICAgICAgICAgIGFncmVnYXRlRGF0YVtrZXldID0gZGF0YVtrZXldOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFncmVnYXRlRGF0YVsnY29uZmlndXJh
dGlvbiddID0gbmV3IENvbmZpZ3VyYXRpb24ocGFydGlhbENvbmZpZ3VyYXRpb24pOworICAgICAg
ICAgICAgICAgIEludmVzdGlnYXRlRHJhd2VyLmV4cGFuZChzZWxmLnN1aXRlLCBhZ3JlZ2F0ZURh
dGEsIGFsbERhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTgzMiw2ICs3OTgs
NyBAQCBmdW5jdGlvbiBMZWdlbmRMYWJlbChldmVudFN0cmVhbSwgZmlsdGVyCiB9IAogCiBmdW5j
dGlvbiBMZWdlbmQoY2FsbGJhY2s9bnVsbCwgcGx1cmFsPWZhbHNlKSB7CisgICAgSW52ZXN0aWdh
dGVEcmF3ZXIud2lsbEZpbHRlckV4cGVjdGVkID0gd2lsbEZpbHRlckV4cGVjdGVkOwogICAgIGxl
dCB1cGRhdGVMYWJlbEV2ZW50cyA9IG5ldyBFdmVudFN0cmVhbSgpOwogICAgIGNvbnN0IGxlZ2Vu
ZERldGFpbHMgPSB7CiAgICAgICAgIHN1Y2Nlc3M6IHsKQEAgLTg3Myw3ICs4NDAsNyBAQCBmdW5j
dGlvbiBMZWdlbmQoY2FsbGJhY2s9bnVsbCwgcGx1cmFsPWZhCiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xh
c3M9Iml0ZW0iPgotICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7a2V5
fSIgcmVmPSIke2RvdH0iPjxkaXYgY2xhc3M9InRleHQiPiR7VGVzdFJlc3VsdHNTeW1ib2xNYXBb
a2V5XX08L2Rpdj48L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRv
dCAke2tleX0iIHJlZj0iJHtkb3R9Ij48ZGl2IGNsYXNzPSJ0ZXh0Ij4ke0V4cGVjdGF0aW9ucy5z
eW1ib2xNYXBba2V5XX08L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICR7TGVn
ZW5kTGFiZWwodXBkYXRlTGFiZWxFdmVudHMsIGxlZ2VuZERldGFpbHNba2V5XS5leHBlY3RlZCwg
bGVnZW5kRGV0YWlsc1trZXldLnVuZXhwZWN0ZWQpfQogICAgICAgICAgICAgICAgICAgICA8L2Rp
dj5gCiAgICAgICAgICAgICB9KS5qb2luKCcnKX0KQEAgLTg4OCw2ICs4NTUsOCBAQCBmdW5jdGlv
biBMZWdlbmQoY2FsbGJhY2s9bnVsbCwgcGx1cmFsPWZhCiAgICAgICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGxGaWx0ZXJFeHBlY3RlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVMYWJlbEV2ZW50cy5hZGQod2lsbEZpbHRlckV4cGVj
dGVkKTsKKyAgICAgICAgICAgICAgICAgICAgSW52ZXN0aWdhdGVEcmF3ZXIud2lsbEZpbHRlckV4
cGVjdGVkID0gd2lsbEZpbHRlckV4cGVjdGVkOworICAgICAgICAgICAgICAgICAgICBJbnZlc3Rp
Z2F0ZURyYXdlci5zZWxlY3QoSW52ZXN0aWdhdGVEcmF3ZXIuc2VsZWN0ZWQpOwogICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9
LApJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFy
eS9jc3Mvd2Via2l0LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRz
ZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2Nzcy93ZWJraXQuY3NzCShyZXZpc2lvbiAyNTAzMTYp
CisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2Nz
cy93ZWJraXQuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNyArODkwLDcgQEAgcHJlIHsKICAg
YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ckJhY2tncm91bmRDb2xvcik7CiAgIC13ZWJraXQt
YmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCkgYnJpZ2h0bmVzcyg4OCUpOwogICBiYWNrZHJvcC1m
aWx0ZXI6IGJsdXIoNXB4KSBicmlnaHRuZXNzKDg4JSk7Ci0gIHotaW5kZXg6IDUwOworICB6LWlu
ZGV4OiB2YXIoLS1taWRkbGVaSW5kZXgpOwogICByaWdodDogMDsKIH0KIC5zaWRlYmFyLmhpZGRl
biB7CkBAIC05MzcsODcgKzkzNyw2IEBAIHByZSB7CiAgIG1hcmdpbi10b3A6IGNhbGMoMTJweCAq
IDIgICsgdmFyKC0tbGFyZ2VTaXplKSAqIDEuMyArIHZhcigtLXNtYWxsU2l6ZSkgKiAxLjMgKyAx
MnB4ICogMik7CiB9CiAKLUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSB7Ci0g
IC5zaWRlYmFyIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICB3aWR0aDogMjk5cHg7Ci0gICAg
ei1pbmRleDogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiB1bnNldDsKLSAgfQotICAuc2lk
ZWJhci5sZWZ0LmhpZGRlbiB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgbGVmdDogLTI0OXB4
OwotICB9Ci0gIC5zaWRlYmFyLnJpZ2h0LmhpZGRlbiB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0g
ICAgcmlnaHQ6IC0yNDlweDsKLSAgfQotICAuc2lkZWJhci51bmRlci10b3BiYXItd2l0aC1hY3Rp
b25zIHsKLSAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEycHggKiAyICAtIHZhcigtLWxhcmdlU2l6
ZSkgKiAxLjMpOwotICAgIGJvdHRvbTogMDsKLSAgfQotCi0gIC5tYWluIHsKLSAgICBtYXJnaW4t
bGVmdDogMjk5cHg7Ci0gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDI5OXB4KTsKLSAgfQotCi0gIC5t
YWluLmxlZnQgewotICAgIG1hcmdpbi1sZWZ0OiAwcHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAyOTlw
eDsKLSAgfQotICAubWFpbi5yaWdodC5oaWRkZW4gewotICAgIG1hcmdpbi1sZWZ0OiA1MHB4Owot
ICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA1MHB4KTsKLSAgfQotICAubWFpbi5sZWZ0LmhpZGRlbiB7
Ci0gICAgbWFyZ2luLWxlZnQ6IDA7Ci0gICAgbWFyZ2luLXJpZ2h0OiA1MHB4OwotICAgIHdpZHRo
OiBjYWxjKDEwMCUgLSA1MHB4KTsKLSAgfQotCi0gIC5tYWluLnVuZGVyLXRvcGJhci13aXRoLWFj
dGlvbnMgewotICAgIG1hcmdpbi10b3A6IGNhbGMoMTJweCAqIDIgICsgdmFyKC0tbGFyZ2VTaXpl
KSAqIDEuMyk7Ci0gIH0KLX0KLQotQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgp
IHsKLSAgLnNpZGViYXIgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiAzMTBweDsK
LSAgICB6LWluZGV4OiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IHVuc2V0OwotICB9Ci0g
IC5zaWRlYmFyLmxlZnQuaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBsZWZ0OiAt
MjYwcHg7Ci0gIH0KLSAgLnNpZGViYXIucmlnaHQuaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBibG9j
azsKLSAgICByaWdodDogLTI2MHB4OwotICB9Ci0gIC5zaWRlYmFyLnVuZGVyLXRvcGJhci13aXRo
LWFjdGlvbnMgewotICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTJweCAqIDIgIC0gdmFyKC0tbGFy
Z2VTaXplKSAqIDEuMyk7Ci0gICAgYm90dG9tOiAwOwotICB9Ci0KLSAgLm1vYmlsZS1zaWRlYmFy
LWNvbnRyb2wuZGlzcGxheSB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgfQotCi0gIC5tYWluIHsK
LSAgICBtYXJnaW4tbGVmdDogMzEwcHg7Ci0gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDMxMHB4KTsK
LSAgfQotCi0gIC5tYWluLmxlZnQgewotICAgIG1hcmdpbi1sZWZ0OiAwcHg7Ci0gICAgbWFyZ2lu
LXJpZ2h0OiAzMTBweDsKLSAgfQotfQotCiAuc2lkZWJhci5yaWdodCB7CiAgIGxlZnQ6IHVuc2V0
OwogICByaWdodDogMDsKQEAgLTE1NDgsNiArMTQ2Nyw3IEBAIHByZSB7CiB9CiAKIC5kcmF3ZXIu
ZGlzcGxheSB7CisgIG1pbi1oZWlnaHQ6IDI1MHB4OwogICBoZWlnaHQ6IDMwJTsKICAgYm94LXNo
YWRvdzogMHB4IDBweCA1cHggMXB4IHZhcigtLWdyZXkpOwogfQpAQCAtMTc2Miw2ICsxNjgyLDg1
IEBAIGEuZGlzYWJsZWQgewogICBwb2ludGVyLWV2ZW50czogbm9uZTsgCiB9CiAKK0BtZWRpYSBz
Y3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSB7CisgIC5zaWRlYmFyIHsKKyAgICBkaXNwbGF5
OiBibG9jazsKKyAgICB3aWR0aDogMjk5cHg7CisgICAgbGVmdDogMDsKKyAgICByaWdodDogdW5z
ZXQ7CisgIH0KKyAgLnNpZGViYXIubGVmdC5oaWRkZW4geworICAgIGRpc3BsYXk6IGJsb2NrOwor
ICAgIGxlZnQ6IC0yNDlweDsKKyAgfQorICAuc2lkZWJhci5yaWdodC5oaWRkZW4geworICAgIGRp
c3BsYXk6IGJsb2NrOworICAgIHJpZ2h0OiAtMjQ5cHg7CisgIH0KKyAgLnNpZGViYXIudW5kZXIt
dG9wYmFyLXdpdGgtYWN0aW9ucyB7CisgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMnB4ICogMiAg
LSB2YXIoLS1sYXJnZVNpemUpICogMS4zKTsKKyAgICBib3R0b206IDA7CisgIH0KKworICAubWFp
biB7CisgICAgbWFyZ2luLWxlZnQ6IDI5OXB4OworICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyOTlw
eCk7CisgIH0KKworICAubWFpbi5yaWdodC1zaWRlYmFyIHsKKyAgICBtYXJnaW4tbGVmdDogMHB4
OworICAgIG1hcmdpbi1yaWdodDogMjk5cHg7CisgIH0KKyAgLm1haW4ubGVmdC1zaWRlYmFyLmhp
ZGRlbiB7CisgICAgbWFyZ2luLWxlZnQ6IDUwcHg7CisgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDUw
cHgpOworICB9CisgIC5tYWluLnJpZ2h0LXNpZGViYXIuaGlkZGVuIHsKKyAgICBtYXJnaW4tbGVm
dDogMDsKKyAgICBtYXJnaW4tcmlnaHQ6IDUwcHg7CisgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDUw
cHgpOworICB9CisKKyAgLm1haW4udW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyB7CisgICAgbWFy
Z2luLXRvcDogY2FsYygxMnB4ICogMiAgKyB2YXIoLS1sYXJnZVNpemUpICogMS4zKTsKKyAgfQor
fQorCitAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgeworICAuc2lkZWJhciB7
CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6IDMxMHB4OworICAgIGxlZnQ6IDA7Cisg
ICAgcmlnaHQ6IHVuc2V0OworICB9CisgIC5zaWRlYmFyLmxlZnQuaGlkZGVuIHsKKyAgICBkaXNw
bGF5OiBibG9jazsKKyAgICBsZWZ0OiAtMjYwcHg7CisgIH0KKyAgLnNpZGViYXIucmlnaHQuaGlk
ZGVuIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICByaWdodDogLTI2MHB4OworICB9CisgIC5z
aWRlYmFyLnVuZGVyLXRvcGJhci13aXRoLWFjdGlvbnMgeworICAgIGhlaWdodDogY2FsYygxMDAl
IC0gMTJweCAqIDIgIC0gdmFyKC0tbGFyZ2VTaXplKSAqIDEuMyk7CisgICAgYm90dG9tOiAwOwor
ICB9CisKKyAgLm1vYmlsZS1zaWRlYmFyLWNvbnRyb2wuZGlzcGxheSB7CisgICAgZGlzcGxheTog
bm9uZTsKKyAgfQorCisgIC5tYWluIHsKKyAgICBtYXJnaW4tbGVmdDogMzEwcHg7CisgICAgd2lk
dGg6IGNhbGMoMTAwJSAtIDMxMHB4KTsKKyAgfQorCisgIC5tYWluLnJpZ2h0LXNpZGViYXIgewor
ICAgIG1hcmdpbi1sZWZ0OiAwcHg7CisgICAgbWFyZ2luLXJpZ2h0OiAzMTBweDsKKyAgfQorfQor
CiAvKiB0aW1lbGluZSAqLwogLnRpbWVsaW5lIHsKICAgZGlzcGxheTogZmxleDsKQEAgLTI2MDcs
NiArMjYwNiw5IEBAIGEuZGlzYWJsZWQgewogLmRlc2t0b3AtY29udHJvbCB7CiAgIGRpc3BsYXk6
IG5vbmU7CiB9CisubW9iaWxlLWNvbnRyb2wgeworICBkaXNwbGF5OiBibG9jazsKK30KIAogLm1v
YmlsZS1zaWRlYmFyLWNvbnRyb2wgewogICBkaXNwbGF5OiBub25lOwpAQCAtMjYyMCw2ICsyNjIy
LDkgQEAgYS5kaXNhYmxlZCB7CiAgIC5kZXNrdG9wLWNvbnRyb2wgewogICAgIGRpc3BsYXk6IGJs
b2NrOwogICB9CisgIC5tb2JpbGUtY29udHJvbCB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgfQog
ICAubW9iaWxlLXNpZGViYXItY29udHJvbC5kaXNwbGF5IHsKICAgICBkaXNwbGF5OiBub25lOwog
ICB9CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9j
b21taXRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkv
dmlldy90ZW1wbGF0ZXMvY29tbWl0cy5odG1sCShyZXZpc2lvbiAyNTAzMTYpCisrKyBUb29scy9y
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9jb21taXRzLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBET00uaW5qZWN0KGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdhcHAnCiAgICAgT25lTGluZVN3aXRjaCgpLAogICAgIEJyYW5jaFNlbGVjdG9yKCgp
ID0+IHt0YWJsZS5yZWxvYWQoKX0pLAogXSl9Ci08ZGl2IGNsYXNzPSJtYWluIGxlZnQgdW5kZXIt
dG9wYmFyLXdpdGgtYWN0aW9ucyI+Cis8ZGl2IGNsYXNzPSJtYWluIHJpZ2h0LXNpZGViYXIgdW5k
ZXItdG9wYmFyLXdpdGgtYWN0aW9ucyI+CiAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+JHt0YWJs
ZX08L2Rpdj4KIDwvZGl2PmApOwogCkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAkocmV2aXNpb24gMjUw
MzE2KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc2Vh
cmNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgaW1wb3J0IHtDb21taXRC
YW5rfSBmcm9tICcvYXNzZXRzL2pzL2NvbQogaW1wb3J0IHtkZWVwQ29tcGFyZSwgRXJyb3JEaXNw
bGF5LCBxdWVyeVRvUGFyYW1zLCBwYXJhbXNUb1F1ZXJ5fSBmcm9tICcvYXNzZXRzL2pzL2NvbW1v
bi5qcyc7CiBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJh
dGlvbi5qcyc7CiBpbXBvcnQge0RyYXdlciwgQnJhbmNoU2VsZWN0b3IsIENvbmZpZ3VyYXRpb25T
ZWxlY3RvcnMsIExpbWl0U2xpZGVyfSBmcm9tICcvYXNzZXRzL2pzL2RyYXdlci5qcyc7CitpbXBv
cnQge0ludmVzdGlnYXRlRHJhd2VyfSBmcm9tICcvYXNzZXRzL2pzL2ludmVzdGlnYXRlLmpzJzsK
IGltcG9ydCB7U2VhcmNoQmFyfSBmcm9tICcvYXNzZXRzL2pzL3NlYXJjaC5qcyc7CiBpbXBvcnQg
e0xlZ2VuZCwgVGltZWxpbmVGcm9tRW5kcG9pbnR9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUu
anMnOwogaW1wb3J0IHtUb29sVGlwfSBmcm9tICcvYXNzZXRzL2pzL3Rvb2x0aXAuanMnOwpAQCAt
MjI1LDYgKzIyNiw3IEBAIHdpbmRvdy5vbnB1c2hzdGF0ZSA9IGV2ZW50ID0+IHt2aWV3LnJlbG8K
IERPTS5pbmplY3QoCiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpLAogICAgIGAk
e1Rvb2xUaXB9CisgICAgJHtJbnZlc3RpZ2F0ZURyYXdlcn0KICAgICAke0RyYXdlcihbCiAgICAg
ICAgIExlZ2VuZCgoKSA9PiB7CiAgICAgICAgICAgICB2aWV3LmNoaWxkcmVuLmZvckVhY2goKGNo
aWxkKSA9PiB7CkBAIC0yMzksNyArMjQxLDcgQEAgRE9NLmluamVjdCgKICAgICAgICAgQ29uZmln
dXJhdGlvblNlbGVjdG9ycygoKSA9PiB7dmlldy5yZWxvYWQoKX0pLAogICAgIF0sICgpID0+IG9u
TGF5b3V0Q2hhbmdlLmFkZCgpKX0KIAotICAgIDxkaXYgY2xhc3M9Im1haW4gbGVmdCB1bmRlci10
b3BiYXItd2l0aC1hY3Rpb25zIj4KKyAgICA8ZGl2IGNsYXNzPSJtYWluIHJpZ2h0LXNpZGViYXIg
dW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyI+CiAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQi
PgogICAgICAgICAgICAgJHtTZWFyY2hCYXIoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAg
IGNvbnN0IHNwbGl0VVJMID0gZG9jdW1lbnQuVVJMLnNwbGl0KCc/Jyk7CkluZGV4OiBUb29scy9y
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0
ZXMvc3VpdGVfcmVzdWx0cy5odG1sCShyZXZpc2lvbiAyNTAzMTYpCisrKyBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgaW1wb3J0IHtDb21taXRCYW5rfSBmcm9tICcvYXNz
ZXRzL2pzL2NvbQogaW1wb3J0IHtkZWVwQ29tcGFyZSwgRXJyb3JEaXNwbGF5LCBxdWVyeVRvUGFy
YW1zLCBwYXJhbXNUb1F1ZXJ5fSBmcm9tICcvYXNzZXRzL2pzL2NvbW1vbi5qcyc7CiBpbXBvcnQg
e0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5qcyc7CiBpbXBv
cnQge0RyYXdlciwgQnJhbmNoU2VsZWN0b3IsIENvbmZpZ3VyYXRpb25TZWxlY3RvcnMsIExpbWl0
U2xpZGVyfSBmcm9tICcvYXNzZXRzL2pzL2RyYXdlci5qcyc7CitpbXBvcnQge0ludmVzdGlnYXRl
RHJhd2VyfSBmcm9tICcvYXNzZXRzL2pzL2ludmVzdGlnYXRlLmpzJzsKIGltcG9ydCB7TGVnZW5k
LCBUaW1lbGluZUZyb21FbmRwb2ludH0gZnJvbSAnL2Fzc2V0cy9qcy90aW1lbGluZS5qcyc7CiBp
bXBvcnQge1Rvb2xUaXB9IGZyb20gJy9hc3NldHMvanMvdG9vbHRpcC5qcyc7CiBpbXBvcnQge0RP
TSwgUkVGLCBFdmVudFN0cmVhbX0gZnJvbSAnL2xpYnJhcnkvanMvUmVmLmpzJzsKQEAgLTE2OCw2
ICsxNjksNyBAQCBvbkxheW91dENoYW5nZS5hY3Rpb24oKCkgPT4gewogfSk7CiAKIERPTS5pbmpl
Y3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpLCBgJHtUb29sVGlwfQorJHtJbnZlc3Rp
Z2F0ZURyYXdlcn0KICR7RHJhd2VyKFsKICAgICBMZWdlbmQoKCkgPT4gewogICAgICAgICBmb3Ig
KGxldCBzdWl0ZSBpbiB2aWV3LmNoaWxkcmVuKSB7CkBAIC0xODEsNyArMTgzLDcgQEAgJHtEcmF3
ZXIoWwogICAgIH0pLAogICAgIENvbmZpZ3VyYXRpb25TZWxlY3RvcnMoKCkgPT4ge3ZpZXcucmVs
b2FkKCl9KSwKIF0sICgpID0+IG9uTGF5b3V0Q2hhbmdlLmFkZCgpKX0KLTxkaXYgY2xhc3M9Im1h
aW4gbGVmdCB1bmRlci10b3BiYXItd2l0aC1hY3Rpb25zIj4KKzxkaXYgY2xhc3M9Im1haW4gcmln
aHQtc2lkZWJhciB1bmRlci10b3BiYXItd2l0aC1hY3Rpb25zIj4KICAgICA8ZGl2IGNsYXNzPSJj
b250ZW50Ij4KICAgICAgICAgJHt2aWV3fQogICAgIDwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379559</attachid>
            <date>2019-09-25 11:01:18 -0700</date>
            <delta_ts>2019-09-25 13:27:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202106-20190925110117.patch</filename>
            <type>text/plain</type>
            <size>40110</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDM0OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE5LTA5LTI1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IEFkZCBpbnZlc3RpZ2F0aW9uIGRyYXdl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTA2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiByZXN1
bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9kcmF3ZXIuanM6IFN1cHBvcnQgbXVs
dGlwbGUgJ21haW4nIGNsYXNzZXMuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkv
dmlldy9zdGF0aWMvanMvZXhwZWN0YXRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKEV4cGVjdGF0
aW9ucy5jb2xvck1hcCk6IFJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyB0eXBlIHN0cmluZ3Mg
dG8gY29sb3JzLgorICAgICAgICAoRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZCk6IE1hcCBh
IHN0cmluZyB0byBhIHN0YXRlIElEIGZvciBzb3J0aW5nLgorICAgICAgICAoRXhwZWN0YXRpb25z
LnR5cGVGb3JJZCk6IFJldHVybiBhIHR5cGUgc3RyaW5nIGdpdmVuIGFuIElELgorICAgICAgICAo
RXhwZWN0YXRpb25zLnN5bWJvbEZvcklkKTogUmV0dXJuIGEgc3ltYm9sIGZvciBhIHR5cGUgZ2l2
ZW4gYW4gSUQuCisgICAgICAgIChFeHBlY3RhdGlvbnMuY29sb3JGb3JJZCk6IFJldHVybiBhIGNv
bG9yIGdpdmVuIGFuIElELgorICAgICAgICAoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRz
KTogR2l2ZW4gYSBsaXN0IG9mIGFjdHVhbCByZXN1bHRzIGFuZCBleHBlY3RlZCByZXN1bHRzLAor
ICAgICAgICByZXR1cm4gYSBzdGF0ZS4KKyAgICAgICAgKEV4cGVjdGF0aW9ucyk6CisgICAgICAg
ICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvaW52ZXN0aWdhdGUuanM6
IEFkZGVkLgorICAgICAgICAoY29tbWl0c0ZvclV1aWQpOgorICAgICAgICAodGVzdFJ1bkxpbmsp
OgorICAgICAgICAoZWxhcHNlZCk6CisgICAgICAgIChwZXJjZW50YWdlKToKKyAgICAgICAgKGNv
bnRlbnRGb3JBZ3JlZ2F0ZURhdGEpOgorICAgICAgICAoY29udGVudEZvckRhdGEpOgorICAgICAg
ICAoX0ludmVzdGlnYXRlRHJhd2VyKToKKyAgICAgICAgKF9JbnZlc3RpZ2F0ZURyYXdlci5wcm90
b3R5cGUuaXNSZW5kZXJlZCk6CisgICAgICAgIChfSW52ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBl
LmV4cGFuZCk6IEV4cGFuZCB0aGUgaW52ZXN0aWdhdGlvbiBkcmF3ZXIuCisgICAgICAgIChfSW52
ZXN0aWdhdGVEcmF3ZXIucHJvdG90eXBlLmNvbGxhcHNlKTogQ29sbGFwc2UgdGhlIGludmVzdGln
YXRpb24gZHJhd2VyLgorICAgICAgICAoX0ludmVzdGlnYXRlRHJhd2VyLnByb3RvdHlwZS5zZWxl
Y3QpOiBTZWxlY3QgYW4gZWxlbWVudCB0byBpbnZlc3RpZ2F0ZS4KKyAgICAgICAgKiByZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qczoKKyAgICAgICAgKHN0
YXRzRm9yU2luZ2xlUmVzdWx0KTogTW92ZSBFeHBlY3RhdGlvbiBjb25zdGFudHMuCisgICAgICAg
IChUaW1lbGluZUZyb21FbmRwb2ludC5wcm90b3R5cGUucmVuZGVyKTogSW52ZXN0aWdhdGUgc3Bl
Y2lmaWMgZGF0YSBwb2ludHMgaW5zdGVhZAorICAgICAgICBvZiBqdW1waW5nIHRvIHRoZSBidWls
ZC4KKyAgICAgICAgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQpOiBEZWxldGVkLgorICAg
ICAgICAoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAg
KEV4cGVjdGF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9jc3Mvd2Via2l0LmNzczoKKyAgICAgICAgKC5kcmF3ZXIu
ZGlzcGxheSk6IE1ha2UgbWluaW11bSBoZWlnaHQuCisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFu
ZCAobWluLXdpZHRoOiA2MDBweCkpOiBNb3ZlIG1haW4gYW5kIHNpZGViYXIgc28gdGhleSBvdmVy
cmlkZSBkcmF3ZXIuCisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Njhw
eCkpOiBEaXR0by4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBs
YXRlcy9jb21taXRzLmh0bWw6CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWw6CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sOgorCiAyMDE5LTA5LTI1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpUGFkT1NdIFtE
YXRhQWN0aXZhdGlvbl0gRm9jdXMgbW92ZXMgYXdheSBhZnRlciBmb2N1c2luZyBpbnB1dCBmaWVs
ZHMgb24gd3d3LmF0dC5jb20KSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL2RyYXdlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9kcmF3ZXIuanMJKHJldmlzaW9uIDI1MDM0OSkKKysr
IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2RyYXdlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBmdW5jdGlvbiBEcmF3ZXIoY29udHJvbHMg
PSBbXSwgb25Db2xsYXBzCiAgICAgY29uc3QgSElEREVOID0gZmFsc2U7CiAgICAgY29uc3QgVklT
SUJMRSA9IHRydWU7CiAgICAgbGV0IGRyYXdlclN0YXRlID0gVklTSUJMRTsKLSAgICBsZXQgbWFp
biA9IG51bGw7CisgICAgbGV0IG1haW5zID0gW107CiAKICAgICBjb25zdCBzaWRlYmFyQ29udHJv
bCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vYmlsZS1zaWRlYmFyLWNvbnRy
b2wnKVswXTsKICAgICBzaWRlYmFyQ29udHJvbC5jbGFzc0xpc3QuYWRkKCdkaXNwbGF5Jyk7CkBA
IC01MCwxMiArNTAsMTAgQEAgZnVuY3Rpb24gRHJhd2VyKGNvbnRyb2xzID0gW10sIG9uQ29sbGFw
cwogICAgICAgICBvblN0YXRlVXBkYXRlOiAoZWxlbWVudCwgc3RhdGUpID0+IHsKICAgICAgICAg
ICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92
ZSgiaGlkZGVuIik7Ci0gICAgICAgICAgICAgICAgaWYgKG1haW4pCi0gICAgICAgICAgICAgICAg
ICAgIG1haW4uY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CisgICAgICAgICAgICAgICAgbWFp
bnMuZm9yRWFjaChtYWluID0+IG1haW4uY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIikpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQo
ImhpZGRlbiIpOwotICAgICAgICAgICAgICAgIGlmIChtYWluKQotICAgICAgICAgICAgICAgICAg
ICBtYWluLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOworICAgICAgICAgICAgICAgIG1haW5zLmZv
ckVhY2gobWFpbiA9PiBtYWluLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBlbGVtZW50LmNoaWxkcmVuKSB7CkBA
IC02OCw4ICs2Niw5IEBAIGZ1bmN0aW9uIERyYXdlcihjb250cm9scyA9IFtdLCBvbkNvbGxhcHMK
ICAgICAgICAgfSwKICAgICAgICAgb25FbGVtZW50TW91bnQ6IChlbGVtZW50KSA9PiB7CiAgICAg
ICAgICAgICBsZXQgY2FuZGlkYXRlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
Im1haW4iKTsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICBtYWluID0gY2FuZGlkYXRlc1swXTsKKyAgICAgICAgICAgIG1haW5zID0gW107CisgICAg
ICAgICAgICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgY2FuZGlkYXRlcy5sZW5ndGg7ICsr
Y291bnQpCisgICAgICAgICAgICAgICAgbWFpbnMucHVzaChjYW5kaWRhdGVzW2NvdW50XSk7CiAK
ICAgICAgICAgICAgIHNpZGViYXJDb250cm9sLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgICAg
ICAgICAgaWYgKGVsZW1lbnQuc3R5bGUuZGlzcGxheSkKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5
L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2V4cGVjdGF0aW9ucy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9leHBlY3RhdGlv
bnMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy9zdGF0aWMvanMvZXhwZWN0YXRpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAz
IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisvLyBhcmUgbWV0OgorLy8gMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKy8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiCisvLyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKy8vIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKy8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworLy8gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLy8gQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKy8vIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworLy8gSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKy8vIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisvLyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisvLyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2NsYXNzIEV4cGVjdGF0aW9ucworeworICAgIHN0YXRpYyBjb2xvck1hcCgpIHsKKyAg
ICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9k
eSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzdWNjZXNzOiBjb21wdXRlZFN0eWxl
LmdldFByb3BlcnR5VmFsdWUoJy0tZ3JlZW5MaWdodCcpLnRyaW0oKSwKKyAgICAgICAgICAgIGZh
aWxlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXJlZExpZ2h0JykudHJpbSgp
LAorICAgICAgICAgICAgdGltZWRvdXQ6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgn
LS1vcmFuZ2VMaWdodCcpLnRyaW0oKSwKKyAgICAgICAgICAgIGNyYXNoZWQ6IGNvbXB1dGVkU3R5
bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1wdXJwbGVMaWdodCcpLnRyaW0oKSwKKyAgICAgICAgfTsK
KyAgICB9CisKKyAgICBzdGF0aWMgc3RyaW5nVG9TdGF0ZUlkKHN0cmluZykgeworICAgICAgICBy
ZXR1cm4gRXhwZWN0YXRpb25zLnN0YXRlVG9JZE1hcFtzdHJpbmddOworICAgIH0KKyAgICBzdGF0
aWMgdHlwZUZvcklkKHN0cmluZykgeworICAgICAgICBjb25zdCBpZCA9IEV4cGVjdGF0aW9ucy5z
dHJpbmdUb1N0YXRlSWQoc3RyaW5nKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9ICdzdWNjZXNzJzsK
KyAgICAgICAgRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAg
ICAgICAgICAgY29uc3QgaWRGb3JUeXBlID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChF
eHBlY3RhdGlvbnMuZmFpbHVyZVR5cGVNYXBbdHlwZV0pOworICAgICAgICAgICAgaWYgKGlkIDw9
IGlkRm9yVHlwZSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0eXBlOworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc3RhdGljIHN5bWJvbEZvcklkKHN0
cmluZykgeworICAgICAgICByZXR1cm4gRXhwZWN0YXRpb25zLnN5bWJvbE1hcFtFeHBlY3RhdGlv
bnMudHlwZUZvcklkKHN0cmluZyldOworICAgIH0KKyAgICBzdGF0aWMgY29sb3JGb3JJZChzdHJp
bmcpIHsKKyAgICAgICAgcmV0dXJuIEV4cGVjdGF0aW9ucy5jb2xvck1hcCgpW0V4cGVjdGF0aW9u
cy50eXBlRm9ySWQoc3RyaW5nKV07CisgICAgfQorCisgICAgc3RhdGljIHVuZXhwZWN0ZWRSZXN1
bHRzKHJlc3VsdHMsIGV4cGVjdGF0aW9ucykKKyAgICB7CisgICAgICAgIGxldCByID0gcmVzdWx0
cy5zcGxpdCgnLicpOworICAgICAgICBleHBlY3RhdGlvbnMuc3BsaXQoJyAnKS5mb3JFYWNoKGV4
cGVjdGF0aW9uID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGkgPSByLmluZGV4T2YoZXhwZWN0YXRp
b24pOworICAgICAgICAgICAgaWYgKGkgPiAtMSkKKyAgICAgICAgICAgICAgICByLnNwbGljZShp
LCAxKTsKKyAgICAgICAgICAgIGlmIChleHBlY3RhdGlvbiA9PT0gJ0ZBSUwnKQorICAgICAgICAg
ICAgICAgIFsnVEVYVCcsICdBVURJTycsICdJTUFHRSddLmZvckVhY2goZXhwZWN0YXRpb24gPT4g
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBpID0gci5pbmRleE9mKGV4cGVjdGF0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHIuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9ICdQQVNTJzsKKyAgICAgICAgci5mb3JFYWNoKGNhbmRpZGF0ZSA9PiB7
CisgICAgICAgICAgICBpZiAoRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChjYW5kaWRhdGUp
IDwgRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChyZXN1bHQpKQorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorfQorCitFeHBlY3RhdGlvbnMuc3RhdGVUb0lkTWFwID0geworICAgIENSQVNIOiAw
eDAwLAorICAgIFRJTUVPVVQ6IDB4MDgsCisgICAgSU1BR0U6IDB4MTAsCisgICAgQVVESU86IDB4
MTgsCisgICAgVEVYVDogMHgyMCwKKyAgICBGQUlMOiAweDI4LAorICAgIEVSUk9SOiAweDMwLAor
ICAgIFdBUk5JTkc6IDB4MzgsCisgICAgUEFTUzogMHg0MCwKK307CitFeHBlY3RhdGlvbnMuZmFp
bHVyZVR5cGVzID0gWydmYWlsZWQnLCAndGltZWRvdXQnLCAnY3Jhc2hlZCddOworRXhwZWN0YXRp
b25zLmZhaWx1cmVUeXBlTWFwID0geworICAgIGZhaWxlZDogJ0VSUk9SJywKKyAgICB0aW1lZG91
dDogJ1RJTUVPVVQnLAorICAgIGNyYXNoZWQ6ICdDUkFTSCcsCit9CitFeHBlY3RhdGlvbnMuc3lt
Ym9sTWFwID0geworICAgIHN1Y2Nlc3M6ICfinJMnLAorICAgIGZhaWxlZDogJ/CdlrcnLAorICAg
IHRpbWVkb3V0OiAn4o6LJywKKyAgICBjcmFzaGVkOiAnIScsCit9CisKK2V4cG9ydCB7RXhwZWN0
YXRpb25zfTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGlj
L2pzL2ludmVzdGlnYXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3Vs
dHNkYnB5L3ZpZXcvc3RhdGljL2pzL2ludmVzdGlnYXRlLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2ludmVzdGlnYXRlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQyIEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisvLyBhcmUgbWV0OgorLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8KKy8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiCisvLyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKy8vIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKy8vIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworLy8gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorLy8gQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKy8vIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
Ly8gSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKy8vIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisvLyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisv
LyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB7RE9NLCBSRUZ9IGZy
b20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CitpbXBvcnQge0NvbW1pdEJhbmt9IGZyb20gJy9hc3Nl
dHMvanMvY29tbWl0LmpzJzsKK2ltcG9ydCB7cXVlcnlUb1BhcmFtcywgcGFyYW1zVG9RdWVyeSwg
UXVlcnlNb2RpZmllciwgfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1vbi5qcyc7CitpbXBvcnQge0Nv
bmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5qcycKK2ltcG9ydCB7
RXhwZWN0YXRpb25zfSBmcm9tICcvYXNzZXRzL2pzL2V4cGVjdGF0aW9ucy5qcyc7CisKK2Z1bmN0
aW9uIGNvbW1pdHNGb3JVdWlkKHV1aWQpIHsKKyAgICByZXR1cm4gYENvbW1pdHM6ICR7Q29tbWl0
QmFuay5jb21taXRzRHVyaW5nVXVpZCh1dWlkKS5tYXAoKGNvbW1pdCkgPT4geworICAgICAgICAg
ICAgY29uc3QgcGFyYW1zID0geworICAgICAgICAgICAgICAgIGJyYW5jaDogY29tbWl0LmJyYW5j
aCA/IFtjb21taXQuYnJhbmNoXSA6IGJyYW5jaCwKKyAgICAgICAgICAgICAgICB1dWlkOiBbY29t
bWl0LnV1aWRdLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYXJhbXMuYnJhbmNo
KQorICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuYnJhbmNoOworICAgICAgICAgICAgY29u
c3QgcXVlcnkgPSBwYXJhbXNUb1F1ZXJ5KHBhcmFtcyk7CisgICAgICAgICAgICByZXR1cm4gYDxh
IGhyZWY9Ii9jb21taXQvaW5mbz8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPiR7Y29tbWl0Lmlk
LnN1YnN0cmluZygwLDEyKX08L2E+YDsKKyAgICAgICAgfSkuam9pbignLCAnKX1gCit9CisKK2Z1
bmN0aW9uIHRlc3RSdW5MaW5rKHN1aXRlLCBkYXRhKQoreworICAgIGlmICghZGF0YS5zdGFydF90
aW1lKQorICAgICAgICByZXR1cm4gJyc7CisgICAgY29uc3QgYnJhbmNoID0gcXVlcnlUb1BhcmFt
cyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoOworICAgIHJldHVybiBgPGEgaHJl
Zj0iL3VybHMvYnVpbGQ/JHtwYXJhbXNUb1F1ZXJ5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29u
c3QgYnVpbGRQYXJhbXMgPSBkYXRhLmNvbmZpZ3VyYXRpb24udG9QYXJhbXMoKTsKKyAgICAgICAg
YnVpbGRQYXJhbXNbJ3N1aXRlJ10gPSBbc3VpdGVdOworICAgICAgICBidWlsZFBhcmFtc1sndXVp
ZCddID0gW2RhdGEudXVpZF07CisgICAgICAgIGJ1aWxkUGFyYW1zWydhZnRlcl90aW1lJ10gPSBb
ZGF0YS5zdGFydF90aW1lXTsKKyAgICAgICAgYnVpbGRQYXJhbXNbJ2JlZm9yZV90aW1lJ10gPSBb
ZGF0YS5zdGFydF90aW1lXTsKKyAgICAgICAgaWYgKGJyYW5jaCkKKyAgICAgICAgICAgIGJ1aWxk
UGFyYW1zWydicmFuY2gnXSA9IGJyYW5jaDsKKyAgICAgICAgcmV0dXJuIGJ1aWxkUGFyYW1zOwor
ICAgIH0gKCkpfSIgdGFyZ2V0PSJfYmxhbmsiPlRlc3QgcnVuPC9hPiBAICR7bmV3IERhdGUoZGF0
YS5zdGFydF90aW1lICogMTAwMCkudG9Mb2NhbGVTdHJpbmcoKX1gOworfQorCitmdW5jdGlvbiBl
bGFwc2VkKGRhdGEpCit7CisgICAgaWYgKGRhdGEudGltZSkKKyAgICAgICAgcmV0dXJuIGBUb29r
ICR7ZGF0YS50aW1lIC8gMTAwMH0gc2Vjb25kc2A7CisgICAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0
YS5zdGF0cy5zdGFydF90aW1lICYmIGRhdGEuc3RhdHMuZW5kX3RpbWUpIHsKKyAgICAgICAgY29u
c3QgdGltZSA9IG5ldyBEYXRlKChkYXRhLnN0YXRzLmVuZF90aW1lIC0gZGF0YS5zdGF0cy5zdGFy
dF90aW1lKSAqIDEwMDApOworICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnN0YXRzLmVuZF90aW1l
IC0gZGF0YS5zdGF0cy5zdGFydF90aW1lKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9ICdTdWl0ZSB0
b29rICc7CisgICAgICAgIGlmICh0aW1lLmdldE1pbnV0ZXMoKSkKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBgJHt0aW1lLmdldE1pbnV0ZXMoKX06YDsKKyAgICAgICAgcmVzdWx0ICs9IGAke3RpbWUu
Z2V0U2Vjb25kcygpIDw9IDkgJiYgdGltZS5nZXRNaW51dGVzKCkgPyAnMCcgOiAnJ30ke3RpbWUu
Z2V0U2Vjb25kcygpfS4ke3RpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPD0gOTkgPyAnMCcgOiAnJ30k
e3RpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPD0gOSA/ICcwJyA6ICcnfSR7dGltZS5nZXRNaWxsaXNl
Y29uZHMoKX0gYDsKKyAgICAgICAgaWYgKHRpbWUuZ2V0TWludXRlcygpKQorICAgICAgICAgICAg
cmVzdWx0ICs9ICdtaW51dGVzIHRvIHJ1bic7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
c3VsdCArPSAnc2Vjb25kcyB0byBydW4nOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICByZXR1cm4gJyc7Cit9CisKK2Z1bmN0aW9uIHBlcmNlbnRhZ2UodmFsdWUsIG1heCkKK3sK
KyAgICBpZiAodmFsdWUgPT09IG1heCkKKyAgICAgICAgcmV0dXJuICcxMDAgJSc7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuICcwICUnOworICAgIGNvbnN0IHJlc3VsdCA9IE1hdGgu
cm91bmQodmFsdWUgLyBtYXggKiAxMDApOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gJzwxICUnOworICAgIGlmIChyZXN1bHQgPT09IDEwMCkKKyAgICAgICAgcmV0dXJuICc5OSAl
JzsKKyAgICByZXR1cm4gYCR7cmVzdWx0fSAlYAorfQorCitmdW5jdGlvbiByZXN1bHRzRm9yRGF0
YShkYXRhLCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZSkKK3sKKyAgICBjb25zdCByZXN1bHQg
PSBbXTsKKyAgICBsZXQgdGVzdHNSYW4gPSAxOworICAgIGxldCB0b3RhbFRlc3RzID0gMTsKKyAg
ICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLnN0YXRzLnRlc3RzX3J1bikgeworICAgICAgICB0ZXN0
c1JhbiA9IGRhdGEuc3RhdHMudGVzdHNfcnVuOworICAgICAgICB0b3RhbFRlc3RzID0gZGF0YS5z
dGF0cy50ZXN0c19ydW4gKyAoZGF0YS5zdGF0cy50ZXN0c19za2lwcGVkID8gZGF0YS5zdGF0cy50
ZXN0c19za2lwcGVkIDogMCk7CisgICAgfQorICAgIHJlc3VsdC5wdXNoKGBSYW4gJHt0ZXN0c1Jh
bi50b0xvY2FsZVN0cmluZygpfSBvZiAke3RvdGFsVGVzdHMudG9Mb2NhbGVTdHJpbmcoKX0gdGVz
dHNgKTsKKyAgICBpZiAoZGF0YS5hY3R1YWwpIHsKKyAgICAgICAgY29uc3QgdHlwZSA9IEV4cGVj
dGF0aW9ucy50eXBlRm9ySWQoZGF0YS5hY3R1YWwpOworICAgICAgICByZXN1bHQucHVzaChgPGRp
dj4KKyAgICAgICAgICAgICAgICBBY3R1YWw6ICR7ZGF0YS5hY3R1YWx9CisgICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0iZG90ICR7dHlwZX0gc21hbGwiPgorICAgICAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10
b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2PgorICAgICAgICAg
ICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgfQorICAgIGlmIChkYXRh
LmV4cGVjdGVkKSB7CisgICAgICAgIGNvbnN0IHR5cGUgPSBFeHBlY3RhdGlvbnMudHlwZUZvcklk
KGRhdGEuZXhwZWN0ZWQpOworICAgICAgICByZXN1bHQucHVzaChgPGRpdj4KKyAgICAgICAgICAg
ICAgICBFeHBlY3RlZDogJHtkYXRhLmV4cGVjdGVkfQorICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9ImRvdCAke3R5cGV9IHNtYWxsIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
dGlueSB0ZXh0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7
RXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXX08L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rp
dj4KKyAgICAgICAgICAgIDwvZGl2PmApOworICAgIH0KKyAgICBpZiAoZGF0YS5zdGF0cyAmJiBk
YXRhLnN0YXRzLnRlc3RzX3J1bikgeworICAgICAgICBjb25zdCBzdWNjZWVkZWQgPSBkYXRhLnN0
YXRzLnRlc3RzX3J1biAtIGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAn
X3VuZXhwZWN0ZWRfJyA6ICdfJ31mYWlsZWRgXTsKKyAgICAgICAgaWYgKHN1Y2NlZWRlZCkKKyAg
ICAgICAgICAgIHJlc3VsdC5wdXNoKGA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJkb3Qgc3VjY2VzcyBzbWFsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsO21hcmdpbi10b3A6IDBw
eCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwLnN1Y2Nlc3N9PC9kaXY+CisgICAgICAgICAgICAg
ICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAke2RhdGEuc3RhcnRfdGltZSA/IHN1
Y2NlZWRlZC50b0xvY2FsZVN0cmluZygpIDogcGVyY2VudGFnZShzdWNjZWVkZWQsIGRhdGEuc3Rh
dHMudGVzdHNfcnVuKX0gcGFzc2VkCisgICAgICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgfQor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5sZW5ndGg7
IGkrKykgeworICAgICAgICBpZiAoIWRhdGEuc3RhdHMpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY29uc3QgdHlwZSA9IEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXNbaV07CisgICAg
ICAgIGxldCB2YWx1ZSA9IGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAn
X3VuZXhwZWN0ZWRfJyA6ICdfJ30ke3R5cGV9YF07CisgICAgICAgIGlmIChpIDwgRXhwZWN0YXRp
b25zLmZhaWx1cmVUeXBlcy5sZW5ndGggLSAxKQorICAgICAgICAgICAgdmFsdWUgLT0gZGF0YS5z
dGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfSR7
RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlc1tpICsgMV19YF07CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmVzdWx0LnB1c2goYDxkaXY+CisgICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG90ICR7dHlwZX0gc21hbGwiPgorICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJ0aW55IHRleHQiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFs
O21hcmdpbi10b3A6IDBweCI+JHtFeHBlY3RhdGlvbnMuc3ltYm9sTWFwW3R5cGVdfTwvZGl2Pgor
ICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICR7ZGF0YS5zdGFydF90aW1l
ID8gdmFsdWUudG9Mb2NhbGVTdHJpbmcoKSA6IHBlcmNlbnRhZ2UodmFsdWUsIGRhdGEuc3RhdHMu
dGVzdHNfcnVuKX0gJHt0eXBlfQorICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIHJlbmRlckludmVzdGlnYXRlRHJhd2VyKGFycmF5
cykKK3sKKyAgICByZXR1cm4gYDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgICAgICAke2FycmF5
cy5tYXAoYXJyYXkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iY29s
LXMtNiBsaXN0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICR7YXJyYXkubWFwKGVsZW1lbnQg
PT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iaXRl
bSI+JHtlbGVtZW50fTwvZGl2PmA7CisgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcn
KX0KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDsKKyAgICAgICAgICAgIH0pLmpvaW4oJzxk
aXYgY2xhc3M9ImRpdmlkZXIgbW9iaWxlLWNvbnRyb2wiPjwvZGl2PicpfQorICAgICAgICA8L2Rp
dj5gCit9CisKK2Z1bmN0aW9uIGNvbnRlbnRGb3JBZ3JlZ2F0ZURhdGEoc3VpdGUsIGFncmVnYXRl
RGF0YSwgZGF0YSwgd2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2UpCit7CisgICAgY29uc3QgbWV0
YURhdGEgPSBbCisgICAgICAgIGAke2RhdGEubGVuZ3RofSByZXBvcnRzIGZvciAke2FncmVnYXRl
RGF0YS5jb25maWd1cmF0aW9ufWAsCisgICAgICAgIGNvbW1pdHNGb3JVdWlkKGFncmVnYXRlRGF0
YS51dWlkKSwKKyAgICBdOworICAgIGxldCBjb3VudCA9IDA7CisgICAgZGF0YS5mb3JFYWNoKG5v
ZGUgPT4geworICAgICAgICBjb25zdCBteUNvdW50ID0gY291bnQ7CisgICAgICAgIGxldCBkb3RU
eXBlID0gJ3N1Y2Nlc3MnOworICAgICAgICBpZiAobm9kZS5zdGF0cykgeworICAgICAgICAgICAg
RXhwZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAg
ICAgIGlmIChub2RlLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVj
dGVkXycgOiAnXyd9JHt0eXBlfWBdID4gMCkKKyAgICAgICAgICAgICAgICAgICAgZG90VHlwZSA9
IHR5cGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxl
dCByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQobm9kZS5hY3R1YWwpOwor
ICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJFeHBlY3RlZCkKKyAgICAgICAgICAgICAgICByZXN1
bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLnVuZXhwZWN0
ZWRSZXN1bHRzKG5vZGUuYWN0dWFsLCBub2RlLmV4cGVjdGVkKSk7CisgICAgICAgICAgICBFeHBl
Y3RhdGlvbnMuZmFpbHVyZVR5cGVzLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgICAgICAgICAg
aWYgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLmZhaWx1cmVUeXBl
TWFwW3R5cGVdKSA+PSByZXN1bHRJZCkKKyAgICAgICAgICAgICAgICAgICAgZG90VHlwZSA9IHR5
cGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBtZXRhRGF0YS5wdXNoKGA8
ZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke2RvdFR5cGV9IHNtYWxsIj4K
KyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlueSB0ZXh0IiBzdHlsZT0iZm9udC13
ZWlnaHQ6IG5vcm1hbDttYXJnaW4tdG9wOiAwcHgiPiR7RXhwZWN0YXRpb25zLnN5bWJvbE1hcFtk
b3RUeXBlXX08L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8
YSBjbGFzcz0ibGluay1idXR0b24iIHJlZj0iJHtSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAg
ICAgICAgICAgb25FbGVtZW50TW91bnQ6IChlbGVtZW50KSA9PiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiBJbnZlc3RpZ2F0ZURyYXdlci5zZWxlY3Qo
bXlDb3VudCArIDEpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0p
fSI+CisgICAgICAgICAgICAgICAgICAgICR7bm9kZS5jb25maWd1cmF0aW9ufQorICAgICAgICAg
ICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvZGl2PmApOworICAgICAgICArK2NvdW50OworICAg
IH0pOworICAgIHJldHVybiByZW5kZXJJbnZlc3RpZ2F0ZURyYXdlcihbbWV0YURhdGEsIHJlc3Vs
dHNGb3JEYXRhKGFncmVnYXRlRGF0YSwgd2lsbEZpbHRlckV4cGVjdGVkKV0pOworfQorCitmdW5j
dGlvbiBjb250ZW50Rm9yRGF0YShzdWl0ZSwgZGF0YSwgd2lsbEZpbHRlckV4cGVjdGVkID0gZmFs
c2UpCit7CisgICAgY29uc3QgbWV0YURhdGEgPSBbCisgICAgICAgIGRhdGEuY29uZmlndXJhdGlv
biwKKyAgICAgICAgY29tbWl0c0ZvclV1aWQoZGF0YS51dWlkKSwKKyAgICAgICAgdGVzdFJ1bkxp
bmsoc3VpdGUsIGRhdGEpLAorICAgICAgICBlbGFwc2VkKGRhdGEpLAorICAgIF07CisKKyAgICBy
ZXR1cm4gcmVuZGVySW52ZXN0aWdhdGVEcmF3ZXIoW21ldGFEYXRhLCByZXN1bHRzRm9yRGF0YShk
YXRhLCB3aWxsRmlsdGVyRXhwZWN0ZWQpXSk7Cit9CisKK2NsYXNzIF9JbnZlc3RpZ2F0ZURyYXdl
ciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgIHRoaXMucmVmID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5jb250ZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5jbG9zZSA9IG51bGw7CisgICAg
ICAgIHRoaXMucHJldmlvdXMgPSBudWxsOworICAgICAgICB0aGlzLm5leHQgPSBudWxsOworCisg
ICAgICAgIHRoaXMuc2VsZWN0ZWQgPSAwOworICAgICAgICB0aGlzLnN1aXRlID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5hZ3JlZ2F0ZSA9IG51bGw7CisgICAgICAgIHRoaXMuZGF0YSA9IFtdOworCisg
ICAgICAgIHRoaXMud2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2U7CisgICAgfQorICAgIGlzUmVu
ZGVyZWQoKSB7CisgICAgICAgIGxldCByZXN1bHQgPSB0cnVlOworICAgICAgICBbJ3JlZicsICdj
b250ZW50JywgJ2Nsb3NlJywgJ3ByZXZpb3VzJywgJ25leHQnXS5mb3JFYWNoKGVsZW1lbnQgPT4g
eworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgcmVzdWx0ID0gdGhpc1tlbGVtZW50XSAmJiB0aGlzW2VsZW1lbnRdLmVsZW1lbnQ7
CisgICAgICAgIH0pOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoJ0ludmVzdGlnYXRpb24gZHJhd2VyIG5vdCByZW5kZXJlZCcpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICB0b1N0cmluZygpIHsKKyAgICAgICAgY29uc3Qgc2VsZiA9
IHRoaXM7CisgICAgICAgIHRoaXMucmVmID0gUkVGLmNyZWF0ZVJlZigpOworICAgICAgICB0aGlz
LmNvbnRlbnQgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIHN0YXRlOiAnJywKKyAgICAg
ICAgICAgIG9uU3RhdGVVcGRhdGU6IChlbGVtZW50LCBzdGF0ZSkgPT4geworICAgICAgICAgICAg
ICAgIERPTS5pbmplY3QoZWxlbWVudCwgc3RhdGUpOworICAgICAgICAgICAgfSwKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMuY2xvc2UgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAgIG9u
RWxlbWVudE1vdW50OiAoZWxlbWVudCkgPT4geworICAgICAgICAgICAgICAgIGVsZW1lbnQub25j
bGljayA9ICgpID0+IHNlbGYuY29sbGFwc2UoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0p
OworCisgICAgICAgIHRoaXMucHJldmlvdXMgPSBSRUYuY3JlYXRlUmVmKHsKKyAgICAgICAgICAg
IG9uRWxlbWVudE1vdW50OiAoZWxlbWVudCkgPT4geworICAgICAgICAgICAgICAgIGVsZW1lbnQu
b25jbGljayA9ICgpID0+IHNlbGYuc2VsZWN0KHNlbGYuc2VsZWN0ZWQgLSAxKTsKKyAgICAgICAg
ICAgIH0sCisgICAgICAgIH0pOworICAgICAgICB0aGlzLm5leHQgPSBSRUYuY3JlYXRlUmVmKHsK
KyAgICAgICAgICAgIG9uRWxlbWVudE1vdW50OiAoZWxlbWVudCkgPT4geworICAgICAgICAgICAg
ICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+IHNlbGYuc2VsZWN0KHNlbGYuc2VsZWN0ZWQgKyAx
KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBgPGRpdiBj
bGFzcz0iZHJhd2VyIG1haW4gcmlnaHQtc2lkZWJhciIgcmVmPSIke3RoaXMucmVmfSIgc3R5bGU9
InotaW5kZXg6IDIwIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50IHVuc2Vs
ZWN0YWJsZSIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0
d2VlbjsgZmxleC1kaXJlY3Rpb246IHJvdzsgcGFkZGluZzogMTBweDsiPgorICAgICAgICAgICAg
ICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMTUwcHg7IHRleHQtYWxpZ246IGxlZnQiPgorICAg
ICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ1dHRvbiIgc3R5bGU9ImN1cnNvcjogcG9p
bnRlciIgcmVmPSIke3RoaXMucHJldmlvdXN9Ij7il4AgUHJldmlvdXM8L2E+CisgICAgICAgICAg
ICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAg
ICAgICAgICAgICAgPGEgY2xhc3M9ImJ1dHRvbiIgc3R5bGU9ImN1cnNvcjogcG9pbnRlciIgcmVm
PSIke3RoaXMuY2xvc2V9Ij5DbG9zZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+Cisg
ICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiAxNTBweDsgdGV4dC1hbGlnbjog
cmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ1dHRvbiIgc3R5bGU9
ImN1cnNvcjogcG9pbnRlciIgcmVmPSIke3RoaXMubmV4dH0iPk5leHQg4pa2PC9hPgorICAgICAg
ICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5jb250ZW50fSI+CisgICAgICAg
ICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj5gOworICAgIH0KKyAgICBleHBhbmQo
c3VpdGUsIGFncmVnYXRlRGF0YSwgYWxsRGF0YSkgeworICAgICAgICBpZiAoIXRoaXMuaXNSZW5k
ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLnJlZi5lbGVtZW50LmNs
YXNzTGlzdC5hZGQoJ2Rpc3BsYXknKTsKKyAgICAgICAgdGhpcy5zdWl0ZSA9IHN1aXRlOworICAg
ICAgICB0aGlzLmFncmVnYXRlID0gYWdyZWdhdGVEYXRhOworICAgICAgICB0aGlzLmRhdGEgPSBh
bGxEYXRhOworICAgICAgICB0aGlzLnNlbGVjdCgwKTsKKyAgICB9CisgICAgY29sbGFwc2UoKSB7
CisgICAgICAgIGlmICghdGhpcy5pc1JlbmRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMucmVmLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzcGxheScpOworCisg
ICAgICAgIHRoaXMuYWdyZWdhdGUgPSBudWxsOworICAgICAgICB0aGlzLmRhdGEgPSBbXTsKKyAg
ICAgICAgdGhpcy5zZWxlY3QoMCk7CisgICAgfQorICAgIHNlbGVjdChpbmRleCkgeworICAgICAg
ICBsZXQgY2FuZGlkYXRlcyA9IHRoaXMuZGF0YS5sZW5ndGg7CisgICAgICAgIGlmICh0aGlzLmFn
cmVnYXRlICYmIHRoaXMuZGF0YS5sZW5ndGggPiAxKQorICAgICAgICAgICAgY2FuZGlkYXRlcyAr
PSAxOworICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIHRoaXMucmVmLmVs
ZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzcGxheScpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRm9yY2Ugc2VsZWN0aW9uIGluIGJvdW5kcworICAgICAg
ICBpZiAoaW5kZXggPCAwKQorICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICBpZiAoaW5k
ZXggPj0gY2FuZGlkYXRlcykKKyAgICAgICAgICAgIGluZGV4ID0gY2FuZGlkYXRlcyAtIDE7Cisg
ICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBpbmRleDsKKworICAgICAgICAvLyBEaXNwbGF5IG5leHQv
cHJldmlvdXMgYnV0dG9ucworICAgICAgICBpZiAoaW5kZXgpCisgICAgICAgICAgICB0aGlzLnBy
ZXZpb3VzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IG51bGw7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHRoaXMucHJldmlvdXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAg
ICAgICBpZiAoaW5kZXggPT09IGNhbmRpZGF0ZXMgLSAxKQorICAgICAgICAgICAgdGhpcy5uZXh0
LmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdGhpcy5uZXh0LmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IG51bGw7CisKKyAgICAgICAgaWYg
KHRoaXMuYWdyZWdhdGUgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDEgJiYgIXRoaXMuc2VsZWN0ZWQp
CisgICAgICAgICAgICB0aGlzLmNvbnRlbnQuc2V0U3RhdGUoY29udGVudEZvckFncmVnYXRlRGF0
YSh0aGlzLnN1aXRlLCB0aGlzLmFncmVnYXRlLCB0aGlzLmRhdGEsIHRoaXMud2lsbEZpbHRlckV4
cGVjdGVkKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuY29udGVudC5zZXRTdGF0
ZShjb250ZW50Rm9yRGF0YSgKKyAgICAgICAgICAgICAgICB0aGlzLnN1aXRlLAorICAgICAgICAg
ICAgICAgIHRoaXMuZGF0YVt0aGlzLmFncmVnYXRlICYmIHRoaXMuZGF0YS5sZW5ndGggPiAxID8g
dGhpcy5zZWxlY3RlZCAtIDEgOiB0aGlzLnNlbGVjdGVkXSwKKyAgICAgICAgICAgICAgICB0aGlz
LndpbGxGaWx0ZXJFeHBlY3RlZCwKKyAgICAgICAgICAgICkpOworICAgIH0KK30KKworY29uc3Qg
SW52ZXN0aWdhdGVEcmF3ZXIgPSBuZXcgX0ludmVzdGlnYXRlRHJhd2VyKCk7CisKK2V4cG9ydCB7
SW52ZXN0aWdhdGVEcmF3ZXJ9OwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkv
dmlldy9zdGF0aWMvanMvdGltZWxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUuanMJKHJldmlzaW9uIDI1MDM0
OSkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVs
aW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw4IEBACiBpbXBvcnQge0NvbW1pdEJh
bmt9IGZyb20gJy9hc3NldHMvanMvY29tbWl0LmpzJzsKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0g
ZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJzsKIGltcG9ydCB7ZGVlcENvbXBhcmUs
IEVycm9yRGlzcGxheSwgZXNjYXBlSFRNTCwgcGFyYW1zVG9RdWVyeSwgcXVlcnlUb1BhcmFtc30g
ZnJvbSAnL2Fzc2V0cy9qcy9jb21tb24uanMnOworaW1wb3J0IHtFeHBlY3RhdGlvbnN9IGZyb20g
Jy9hc3NldHMvanMvZXhwZWN0YXRpb25zLmpzJzsKK2ltcG9ydCB7SW52ZXN0aWdhdGVEcmF3ZXJ9
IGZyb20gJy9hc3NldHMvanMvaW52ZXN0aWdhdGUuanMnOwogaW1wb3J0IHtUb29sVGlwfSBmcm9t
ICcvYXNzZXRzL2pzL3Rvb2x0aXAuanMnOwogaW1wb3J0IHtUaW1lbGluZX0gZnJvbSAnL2xpYnJh
cnkvanMvY29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMnOwogaW1wb3J0IHtET00sIEV2
ZW50U3RyZWFtLCBSRUYsIEZQfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOwpAQCAtMzEsNTMg
KzMzLDYgQEAgaW1wb3J0IHtET00sIEV2ZW50U3RyZWFtLCBSRUYsIEZQfSBmcm9tIAogCiBjb25z
dCBERUZBVUxUX0xJTUlUID0gMTAwOwogCi1jb25zdCBzdGF0ZVRvSURNYXBwaW5nID0gewotICAg
IENSQVNIOiAweDAwLAotICAgIFRJTUVPVVQ6IDB4MDgsCi0gICAgSU1BR0U6IDB4MTAsCi0gICAg
QVVESU86IDB4MTgsCi0gICAgVEVYVDogMHgyMCwKLSAgICBGQUlMOiAweDI4LAotICAgIEVSUk9S
OiAweDMwLAotICAgIFdBUk5JTkc6IDB4MzgsCi0gICAgUEFTUzogMHg0MCwKLX07Ci0KLWNvbnN0
IFRlc3RSZXN1bHRzU3ltYm9sTWFwID0gewotICAgIHN1Y2Nlc3M6ICfinJMnLAotICAgIGZhaWxl
ZDogJ/CdlrcnLAotICAgIHRpbWVkb3V0OiAn4o6LJywKLSAgICBjcmFzaGVkOiAnIScsCi19Ci0K
LWNsYXNzIEV4cGVjdGF0aW9ucwotewotICAgIHN0YXRpYyBzdHJpbmdUb1N0YXRlSWQoc3RyaW5n
KSB7Ci0gICAgICAgIHJldHVybiBzdGF0ZVRvSURNYXBwaW5nW3N0cmluZ107Ci0gICAgfQotCi0g
ICAgc3RhdGljIHVuZXhwZWN0ZWRSZXN1bHRzKHJlc3VsdHMsIGV4cGVjdGF0aW9ucykKLSAgICB7
Ci0gICAgICAgIGxldCByID0gcmVzdWx0cy5zcGxpdCgnLicpOwotICAgICAgICBleHBlY3RhdGlv
bnMuc3BsaXQoJyAnKS5mb3JFYWNoKGV4cGVjdGF0aW9uID0+IHsKLSAgICAgICAgICAgIGNvbnN0
IGkgPSByLmluZGV4T2YoZXhwZWN0YXRpb24pOwotICAgICAgICAgICAgaWYgKGkgPiAtMSkKLSAg
ICAgICAgICAgICAgICByLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgIGlmIChleHBlY3RhdGlv
biA9PT0gJ0ZBSUwnKQotICAgICAgICAgICAgICAgIFsnVEVYVCcsICdBVURJTycsICdJTUFHRSdd
LmZvckVhY2goZXhwZWN0YXRpb24gPT4gewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpID0g
ci5pbmRleE9mKGV4cGVjdGF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAtMSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHIuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICB9KTsKLSAgICAgICAgbGV0IHJlc3VsdCA9ICdQQVNTJzsKLSAgICAgICAg
ci5mb3JFYWNoKGNhbmRpZGF0ZSA9PiB7Ci0gICAgICAgICAgICBpZiAoRXhwZWN0YXRpb25zLnN0
cmluZ1RvU3RhdGVJZChjYW5kaWRhdGUpIDwgRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChy
ZXN1bHQpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfQogbGV0IHdpbGxGaWx0ZXJFeHBlY3Rl
ZCA9IGZhbHNlOwogCiBmdW5jdGlvbiBtaW5pbXVtVXVpZEZvclJlc3VsdHMocmVzdWx0cywgbGlt
aXQpIHsKQEAgLTI1OCwxMiArMjEzLDYgQEAgZnVuY3Rpb24geEF4aXNGcm9tU2NhbGUoc2NhbGUs
IHJlcG9zaXRvcgogfQogCiBjb25zdCB0ZXN0c1JlZ2V4ID0gL3Rlc3RzXyhbYS16XSkrLzsKLWNv
bnN0IGZhaWx1cmVUeXBlT3JkZXIgPSBbJ2ZhaWxlZCcsICd0aW1lZG91dCcsICdjcmFzaGVkJ107
Ci1jb25zdCBmYWlsdXJlVHlwZU1hcHBpbmcgPSB7Ci0gICAgZmFpbGVkOiAnRVJST1InLAotICAg
IHRpbWVkb3V0OiAnVElNRU9VVCcsCi0gICAgY3Jhc2hlZDogJ0NSQVNIJywKLX0KIAogZnVuY3Rp
b24gaW5QbGFjZUNvbWJpbmUob3V0LCBvYmopCiB7CkBAIC0zMTcsOCArMjY2LDggQEAgZnVuY3Rp
b24gc3RhdHNGb3JTaW5nbGVSZXN1bHQocmVzdWx0KSB7CiAgICAgICAgIHRlc3RzX3J1bjogMSwK
ICAgICAgICAgdGVzdHNfc2tpcHBlZDogMCwKICAgICB9Ci0gICAgZmFpbHVyZVR5cGVPcmRlci5m
b3JFYWNoKHR5cGUgPT4gewotICAgICAgICBjb25zdCBpZEZvclR5cGUgPSBFeHBlY3RhdGlvbnMu
c3RyaW5nVG9TdGF0ZUlkKGZhaWx1cmVUeXBlTWFwcGluZ1t0eXBlXSk7CisgICAgRXhwZWN0YXRp
b25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICBjb25zdCBpZEZvclR5
cGUgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlw
ZU1hcFt0eXBlXSk7CiAgICAgICAgIHN0YXRzW2B0ZXN0c18ke3R5cGV9YF0gPSBhY3R1YWxJZCA+
IGlkRm9yVHlwZSAgPyAwIDogMTsKICAgICAgICAgc3RhdHNbYHRlc3RzX3VuZXhwZWN0ZWRfJHt0
eXBlfWBdID0gdW5leHBlY3RlZElkID4gaWRGb3JUeXBlICA/IDAgOiAxOwogICAgIH0pOwpAQCAt
NTMwLDE0ICs0NzksNyBAQCBjbGFzcyBUaW1lbGluZUZyb21FbmRwb2ludCB7CiAgICAgICAgIGNv
bnN0IGNvbW1pdHMgPSBjb21taXRzRm9yUmVzdWx0cyh0aGlzLnJlc3VsdHMsIGxpbWl0LCB0aGlz
LmFsbENvbW1pdHMpOwogICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlRm9yQ29tbWl0cyhjb21t
aXRzKTsKIAotICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShk
b2N1bWVudC5ib2R5KTsKLSAgICAgICAgY29uc3QgY29sb3JNYXAgPSB7Ci0gICAgICAgICAgICBz
dWNjZXNzOiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tZ3JlZW5MaWdodCcpLnRy
aW0oKSwKLSAgICAgICAgICAgIGZhaWxlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVl
KCctLXJlZExpZ2h0JykudHJpbSgpLAotICAgICAgICAgICAgdGltZWRvdXQ6IGNvbXB1dGVkU3R5
bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1vcmFuZ2VMaWdodCcpLnRyaW0oKSwKLSAgICAgICAgICAg
IGNyYXNoZWQ6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1wdXJwbGVMaWdodCcp
LnRyaW0oKSwKLSAgICAgICAgfQotCisgICAgICAgIGNvbnN0IGNvbG9yTWFwID0gRXhwZWN0YXRp
b25zLmNvbG9yTWFwKCk7CiAgICAgICAgIHRoaXMudXBkYXRlcyA9IFtdOwogICAgICAgICBjb25z
dCBvcHRpb25zID0gewogICAgICAgICAgICAgZ2V0U2NhbGVGdW5jOiAodmFsdWUpID0+IHsKQEAg
LTU1Miw3ICs0OTQsNyBAQCBjbGFzcyBUaW1lbGluZUZyb21FbmRwb2ludCB7CiAKICAgICAgICAg
ICAgICAgICBsZXQgdGFnID0gbnVsbDsKICAgICAgICAgICAgICAgICBsZXQgY29sb3IgPSBjb2xv
ck1hcC5zdWNjZXNzOwotICAgICAgICAgICAgICAgIGxldCBzeW1ib2wgPSBUZXN0UmVzdWx0c1N5
bWJvbE1hcC5zdWNjZXNzOworICAgICAgICAgICAgICAgIGxldCBzeW1ib2wgPSBFeHBlY3RhdGlv
bnMuc3ltYm9sTWFwLnN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHMpIHsK
ICAgICAgICAgICAgICAgICAgICAgdGFnID0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJF
eHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdOwogCkBAIC01NjQsMjAgKzUw
NiwyMCBAQCBjbGFzcyBUaW1lbGluZUZyb21FbmRwb2ludCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB0YWcgPSBgJHt0YWd9ICVgCiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICBmYWlsdXJlVHlwZU9yZGVyLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgIEV4cGVjdGF0aW9ucy5mYWlsdXJlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4
cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9JHt0eXBlfWBdID4gMCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JNYXBbdHlwZV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3ltYm9sID0gVGVzdFJlc3VsdHNTeW1ib2xNYXBbdHlwZV07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gRXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0
eXBlXTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3Vs
dElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChkYXRhLmFjdHVhbCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICh3aWxsRmlsdGVyRXhwZWN0ZWQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25z
LnVuZXhwZWN0ZWRSZXN1bHRzKGRhdGEuYWN0dWFsLCBkYXRhLmV4cGVjdGVkKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZhaWx1cmVUeXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKGZhaWx1cmVU
eXBlTWFwcGluZ1t0eXBlXSkgPj0gcmVzdWx0SWQpIHsKKyAgICAgICAgICAgICAgICAgICAgRXhw
ZWN0YXRpb25zLmZhaWx1cmVUeXBlcy5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLmZh
aWx1cmVUeXBlTWFwW3R5cGVdKSA+PSByZXN1bHRJZCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yID0gY29sb3JNYXBbdHlwZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3ltYm9sID0gVGVzdFJlc3VsdHNTeW1ib2xNYXBbdHlwZV07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ltYm9sID0gRXhwZWN0YXRpb25zLnN5bWJvbE1hcFt0eXBlXTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNTg4LDIwICs1MzAsNDQgQEAgY2xhc3MgVGltZWxpbmVGcm9tRW5kcG9pbnQg
ewogCiAgICAgICAgIGZ1bmN0aW9uIG9uRG90Q2xpY2tGYWN0b3J5KGNvbmZpZ3VyYXRpb24pIHsK
ICAgICAgICAgICAgIHJldHVybiAoZGF0YSkgPT4gewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgZG8gc29tZXRoaW5nIHNhbmUgaGVyZSwgYnV0IHdlIHByb2JhYmx5IG5lZWQg
YW5vdGhlciBlbmRwb2ludAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5zdGFydF90aW1lKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdOb2RlIGlzIGEgY29tYmluYXRpb24gb2YgbXVs
dGlwbGUgcnVucycpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgbGV0IGJ1aWxkUGFyYW1zID0gY29uZmlndXJhdGlvbi50
b1BhcmFtcygpOwotICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydzdWl0ZSddID0gW3NlbGYu
c3VpdGVdOwotICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWyd1dWlkJ10gPSBbZGF0YS51dWlk
XTsKLSAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYWZ0ZXJfdGltZSddID0gW2RhdGEuc3Rh
cnRfdGltZV07Ci0gICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ2JlZm9yZV90aW1lJ10gPSBb
ZGF0YS5zdGFydF90aW1lXTsKLSAgICAgICAgICAgICAgICBpZiAoYnJhbmNoKQotICAgICAgICAg
ICAgICAgICAgICBidWlsZFBhcmFtc1snYnJhbmNoJ10gPSBicmFuY2g7Ci0gICAgICAgICAgICAg
ICAgd2luZG93Lm9wZW4oYC91cmxzL2J1aWxkPyR7cGFyYW1zVG9RdWVyeShidWlsZFBhcmFtcyl9
YCwgJ19ibGFuaycpOworICAgICAgICAgICAgICAgIGxldCBhbGxEYXRhID0gW107CisgICAgICAg
ICAgICAgICAgbGV0IHBhcnRpYWxDb25maWd1cmF0aW9uID0ge307CisgICAgICAgICAgICAgICAg
c2VsZi5jb25maWd1cmF0aW9ucy5mb3JFYWNoKGNvbmZpZ3VyYXRpb25LZXkgPT4geworICAgICAg
ICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbktleS5jb21wYXJlKGNvbmZpZ3VyYXRpb24p
IHx8IGNvbmZpZ3VyYXRpb25LZXkuY29tcGFyZVNES3MoY29uZmlndXJhdGlvbikpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0
c1tjb25maWd1cmF0aW9uS2V5LnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjb21wdXRlZENvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJh
dGlvbihwYWlyLmNvbmZpZ3VyYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bXB1dGVkQ29uZmlndXJhdGlvbi5jb21wYXJlKGNvbmZpZ3VyYXRpb24pIHx8IGNvbXB1dGVkQ29u
ZmlndXJhdGlvbi5jb21wYXJlU0RLcyhjb25maWd1cmF0aW9uKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9lc01hdGNo
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWlyLnJlc3VsdHMuZm9yRWFjaChu
b2RlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS51dWlkICE9PSBk
YXRhLnV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb2VzTWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxldCBkYXRhTm9kZSA9IHt9OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9iamVjdC5rZXlzKG5vZGUpLmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YU5vZGVba2V5XSA9IG5vZGVba2V5XTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTm9kZVsn
Y29uZmlndXJhdGlvbiddID0gY29tcHV0ZWRDb25maWd1cmF0aW9uOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsbERhdGEucHVzaChkYXRhTm9kZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2VzTWF0Y2gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLm1lbWJlcnMoKS5mb3JFYWNoKG1l
bWJlciA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1iZXIgaW4g
cGFydGlhbENvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYXJ0aWFsQ29uZmlndXJhdGlvblttZW1iZXJdICE9PSBudWxsICYmIHBhcnRpYWxD
b25maWd1cmF0aW9uW21lbWJlcl0gIT09IGNvbXB1dGVkQ29uZmlndXJhdGlvblttZW1iZXJdKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxDb25maWd1cmF0
aW9uW21lbWJlcl0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNvbXB1dGVkQ29uZmlndXJhdGlvblttZW1iZXJdICE9PSBudWxsKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbENvbmZpZ3VyYXRpb25bbWVtYmVyXSA9
IGNvbXB1dGVkQ29uZmlndXJhdGlvblttZW1iZXJdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBsZXQgYWdyZWdhdGVEYXRh
ID0ge307CisgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4g
eworICAgICAgICAgICAgICAgICAgICBhZ3JlZ2F0ZURhdGFba2V5XSA9IGRhdGFba2V5XTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBhZ3JlZ2F0ZURhdGFbJ2NvbmZpZ3Vy
YXRpb24nXSA9IG5ldyBDb25maWd1cmF0aW9uKHBhcnRpYWxDb25maWd1cmF0aW9uKTsKKyAgICAg
ICAgICAgICAgICBJbnZlc3RpZ2F0ZURyYXdlci5leHBhbmQoc2VsZi5zdWl0ZSwgYWdyZWdhdGVE
YXRhLCBhbGxEYXRhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC04MzIsNiArNzk4
LDcgQEAgZnVuY3Rpb24gTGVnZW5kTGFiZWwoZXZlbnRTdHJlYW0sIGZpbHRlcgogfSAKIAogZnVu
Y3Rpb24gTGVnZW5kKGNhbGxiYWNrPW51bGwsIHBsdXJhbD1mYWxzZSkgeworICAgIEludmVzdGln
YXRlRHJhd2VyLndpbGxGaWx0ZXJFeHBlY3RlZCA9IHdpbGxGaWx0ZXJFeHBlY3RlZDsKICAgICBs
ZXQgdXBkYXRlTGFiZWxFdmVudHMgPSBuZXcgRXZlbnRTdHJlYW0oKTsKICAgICBjb25zdCBsZWdl
bmREZXRhaWxzID0gewogICAgICAgICBzdWNjZXNzOiB7CkBAIC04NzMsNyArODQwLDcgQEAgZnVu
Y3Rpb24gTGVnZW5kKGNhbGxiYWNrPW51bGwsIHBsdXJhbD1mYQogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNs
YXNzPSJpdGVtIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvdCAke2tl
eX0iIHJlZj0iJHtkb3R9Ij48ZGl2IGNsYXNzPSJ0ZXh0Ij4ke1Rlc3RSZXN1bHRzU3ltYm9sTWFw
W2tleV19PC9kaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJk
b3QgJHtrZXl9IiByZWY9IiR7ZG90fSI+PGRpdiBjbGFzcz0idGV4dCI+JHtFeHBlY3RhdGlvbnMu
c3ltYm9sTWFwW2tleV19PC9kaXY+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAke0xl
Z2VuZExhYmVsKHVwZGF0ZUxhYmVsRXZlbnRzLCBsZWdlbmREZXRhaWxzW2tleV0uZXhwZWN0ZWQs
IGxlZ2VuZERldGFpbHNba2V5XS51bmV4cGVjdGVkKX0KICAgICAgICAgICAgICAgICAgICAgPC9k
aXY+YAogICAgICAgICAgICAgfSkuam9pbignJyl9CkBAIC04ODgsNiArODU1LDggQEAgZnVuY3Rp
b24gTGVnZW5kKGNhbGxiYWNrPW51bGwsIHBsdXJhbD1mYQogICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGFiZWxFdmVudHMuYWRkKHdpbGxGaWx0ZXJFeHBl
Y3RlZCk7CisgICAgICAgICAgICAgICAgICAgIEludmVzdGlnYXRlRHJhd2VyLndpbGxGaWx0ZXJF
eHBlY3RlZCA9IHdpbGxGaWx0ZXJFeHBlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgSW52ZXN0
aWdhdGVEcmF3ZXIuc2VsZWN0KEludmVzdGlnYXRlRHJhd2VyLnNlbGVjdGVkKTsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
fSwKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJh
cnkvY3NzL3dlYmtpdC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0
c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9jc3Mvd2Via2l0LmNzcwkocmV2aXNpb24gMjUwMzQ5
KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9j
c3Mvd2Via2l0LmNzcwkod29ya2luZyBjb3B5KQpAQCAtODkwLDcgKzg5MCw3IEBAIHByZSB7CiAg
IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdXJCYWNrZ3JvdW5kQ29sb3IpOwogICAtd2Via2l0
LWJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpIGJyaWdodG5lc3MoODglKTsKICAgYmFja2Ryb3At
ZmlsdGVyOiBibHVyKDVweCkgYnJpZ2h0bmVzcyg4OCUpOwotICB6LWluZGV4OiA1MDsKKyAgei1p
bmRleDogdmFyKC0tbWlkZGxlWkluZGV4KTsKICAgcmlnaHQ6IDA7CiB9CiAuc2lkZWJhci5oaWRk
ZW4gewpAQCAtOTM3LDg3ICs5MzcsNiBAQCBwcmUgewogICBtYXJnaW4tdG9wOiBjYWxjKDEycHgg
KiAyICArIHZhcigtLWxhcmdlU2l6ZSkgKiAxLjMgKyB2YXIoLS1zbWFsbFNpemUpICogMS4zICsg
MTJweCAqIDIpOwogfQogCi1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MDBweCkgewot
ICAuc2lkZWJhciB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgd2lkdGg6IDI5OXB4OwotICAg
IHotaW5kZXg6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogdW5zZXQ7Ci0gIH0KLSAgLnNp
ZGViYXIubGVmdC5oaWRkZW4gewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGxlZnQ6IC0yNDlw
eDsKLSAgfQotICAuc2lkZWJhci5yaWdodC5oaWRkZW4gewotICAgIGRpc3BsYXk6IGJsb2NrOwot
ICAgIHJpZ2h0OiAtMjQ5cHg7Ci0gIH0KLSAgLnNpZGViYXIudW5kZXItdG9wYmFyLXdpdGgtYWN0
aW9ucyB7Ci0gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMnB4ICogMiAgLSB2YXIoLS1sYXJnZVNp
emUpICogMS4zKTsKLSAgICBib3R0b206IDA7Ci0gIH0KLQotICAubWFpbiB7Ci0gICAgbWFyZ2lu
LWxlZnQ6IDI5OXB4OwotICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyOTlweCk7Ci0gIH0KLQotICAu
bWFpbi5sZWZ0IHsKLSAgICBtYXJnaW4tbGVmdDogMHB4OwotICAgIG1hcmdpbi1yaWdodDogMjk5
cHg7Ci0gIH0KLSAgLm1haW4ucmlnaHQuaGlkZGVuIHsKLSAgICBtYXJnaW4tbGVmdDogNTBweDsK
LSAgICB3aWR0aDogY2FsYygxMDAlIC0gNTBweCk7Ci0gIH0KLSAgLm1haW4ubGVmdC5oaWRkZW4g
ewotICAgIG1hcmdpbi1sZWZ0OiAwOwotICAgIG1hcmdpbi1yaWdodDogNTBweDsKLSAgICB3aWR0
aDogY2FsYygxMDAlIC0gNTBweCk7Ci0gIH0KLQotICAubWFpbi51bmRlci10b3BiYXItd2l0aC1h
Y3Rpb25zIHsKLSAgICBtYXJnaW4tdG9wOiBjYWxjKDEycHggKiAyICArIHZhcigtLWxhcmdlU2l6
ZSkgKiAxLjMpOwotICB9Ci19Ci0KLUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4
KSB7Ci0gIC5zaWRlYmFyIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICB3aWR0aDogMzEwcHg7
Ci0gICAgei1pbmRleDogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiB1bnNldDsKLSAgfQot
ICAuc2lkZWJhci5sZWZ0LmhpZGRlbiB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgbGVmdDog
LTI2MHB4OwotICB9Ci0gIC5zaWRlYmFyLnJpZ2h0LmhpZGRlbiB7Ci0gICAgZGlzcGxheTogYmxv
Y2s7Ci0gICAgcmlnaHQ6IC0yNjBweDsKLSAgfQotICAuc2lkZWJhci51bmRlci10b3BiYXItd2l0
aC1hY3Rpb25zIHsKLSAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEycHggKiAyICAtIHZhcigtLWxh
cmdlU2l6ZSkgKiAxLjMpOwotICAgIGJvdHRvbTogMDsKLSAgfQotCi0gIC5tb2JpbGUtc2lkZWJh
ci1jb250cm9sLmRpc3BsYXkgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gIH0KLQotICAubWFpbiB7
Ci0gICAgbWFyZ2luLWxlZnQ6IDMxMHB4OwotICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzMTBweCk7
Ci0gIH0KLQotICAubWFpbi5sZWZ0IHsKLSAgICBtYXJnaW4tbGVmdDogMHB4OwotICAgIG1hcmdp
bi1yaWdodDogMzEwcHg7Ci0gIH0KLX0KLQogLnNpZGViYXIucmlnaHQgewogICBsZWZ0OiB1bnNl
dDsKICAgcmlnaHQ6IDA7CkBAIC0xNTQ4LDYgKzE0NjcsNyBAQCBwcmUgewogfQogCiAuZHJhd2Vy
LmRpc3BsYXkgeworICBtaW4taGVpZ2h0OiAyNTBweDsKICAgaGVpZ2h0OiAzMCU7CiAgIGJveC1z
aGFkb3c6IDBweCAwcHggNXB4IDFweCB2YXIoLS1ncmV5KTsKIH0KQEAgLTE3NjIsNiArMTY4Miw4
NSBAQCBhLmRpc2FibGVkIHsKICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IAogfQogCitAbWVkaWEg
c2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MDBweCkgeworICAuc2lkZWJhciB7CisgICAgZGlzcGxh
eTogYmxvY2s7CisgICAgd2lkdGg6IDI5OXB4OworICAgIGxlZnQ6IDA7CisgICAgcmlnaHQ6IHVu
c2V0OworICB9CisgIC5zaWRlYmFyLmxlZnQuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBibG9jazsK
KyAgICBsZWZ0OiAtMjQ5cHg7CisgIH0KKyAgLnNpZGViYXIucmlnaHQuaGlkZGVuIHsKKyAgICBk
aXNwbGF5OiBibG9jazsKKyAgICByaWdodDogLTI0OXB4OworICB9CisgIC5zaWRlYmFyLnVuZGVy
LXRvcGJhci13aXRoLWFjdGlvbnMgeworICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTJweCAqIDIg
IC0gdmFyKC0tbGFyZ2VTaXplKSAqIDEuMyk7CisgICAgYm90dG9tOiAwOworICB9CisKKyAgLm1h
aW4geworICAgIG1hcmdpbi1sZWZ0OiAyOTlweDsKKyAgICB3aWR0aDogY2FsYygxMDAlIC0gMjk5
cHgpOworICB9CisKKyAgLm1haW4ucmlnaHQtc2lkZWJhciB7CisgICAgbWFyZ2luLWxlZnQ6IDBw
eDsKKyAgICBtYXJnaW4tcmlnaHQ6IDI5OXB4OworICB9CisgIC5tYWluLmxlZnQtc2lkZWJhci5o
aWRkZW4geworICAgIG1hcmdpbi1sZWZ0OiA1MHB4OworICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA1
MHB4KTsKKyAgfQorICAubWFpbi5yaWdodC1zaWRlYmFyLmhpZGRlbiB7CisgICAgbWFyZ2luLWxl
ZnQ6IDA7CisgICAgbWFyZ2luLXJpZ2h0OiA1MHB4OworICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA1
MHB4KTsKKyAgfQorCisgIC5tYWluLnVuZGVyLXRvcGJhci13aXRoLWFjdGlvbnMgeworICAgIG1h
cmdpbi10b3A6IGNhbGMoMTJweCAqIDIgICsgdmFyKC0tbGFyZ2VTaXplKSAqIDEuMyk7CisgIH0K
K30KKworQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLnNpZGViYXIg
eworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRoOiAzMTBweDsKKyAgICBsZWZ0OiAwOwor
ICAgIHJpZ2h0OiB1bnNldDsKKyAgfQorICAuc2lkZWJhci5sZWZ0LmhpZGRlbiB7CisgICAgZGlz
cGxheTogYmxvY2s7CisgICAgbGVmdDogLTI2MHB4OworICB9CisgIC5zaWRlYmFyLnJpZ2h0Lmhp
ZGRlbiB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgcmlnaHQ6IC0yNjBweDsKKyAgfQorICAu
c2lkZWJhci51bmRlci10b3BiYXItd2l0aC1hY3Rpb25zIHsKKyAgICBoZWlnaHQ6IGNhbGMoMTAw
JSAtIDEycHggKiAyICAtIHZhcigtLWxhcmdlU2l6ZSkgKiAxLjMpOworICAgIGJvdHRvbTogMDsK
KyAgfQorCisgIC5tb2JpbGUtc2lkZWJhci1jb250cm9sLmRpc3BsYXkgeworICAgIGRpc3BsYXk6
IG5vbmU7CisgIH0KKworICAubWFpbiB7CisgICAgbWFyZ2luLWxlZnQ6IDMxMHB4OworICAgIHdp
ZHRoOiBjYWxjKDEwMCUgLSAzMTBweCk7CisgIH0KKworICAubWFpbi5yaWdodC1zaWRlYmFyIHsK
KyAgICBtYXJnaW4tbGVmdDogMHB4OworICAgIG1hcmdpbi1yaWdodDogMzEwcHg7CisgIH0KK30K
KwogLyogdGltZWxpbmUgKi8KIC50aW1lbGluZSB7CiAgIGRpc3BsYXk6IGZsZXg7CkBAIC0yNjA3
LDYgKzI2MDYsOSBAQCBhLmRpc2FibGVkIHsKIC5kZXNrdG9wLWNvbnRyb2wgewogICBkaXNwbGF5
OiBub25lOwogfQorLm1vYmlsZS1jb250cm9sIHsKKyAgZGlzcGxheTogYmxvY2s7Cit9CiAKIC5t
b2JpbGUtc2lkZWJhci1jb250cm9sIHsKICAgZGlzcGxheTogbm9uZTsKQEAgLTI2MjAsNiArMjYy
Miw5IEBAIGEuZGlzYWJsZWQgewogICAuZGVza3RvcC1jb250cm9sIHsKICAgICBkaXNwbGF5OiBi
bG9jazsKICAgfQorICAubW9iaWxlLWNvbnRyb2wgeworICAgIGRpc3BsYXk6IG5vbmU7CisgIH0K
ICAgLm1vYmlsZS1zaWRlYmFyLWNvbnRyb2wuZGlzcGxheSB7CiAgICAgZGlzcGxheTogbm9uZTsK
ICAgfQpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMv
Y29tbWl0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5
L3ZpZXcvdGVtcGxhdGVzL2NvbW1pdHMuaHRtbAkocmV2aXNpb24gMjUwMzQ5KQorKysgVG9vbHMv
cmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvY29tbWl0cy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgRE9NLmluamVjdChkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnYXBwJwogICAgIE9uZUxpbmVTd2l0Y2goKSwKICAgICBCcmFuY2hTZWxlY3Rvcigo
KSA9PiB7dGFibGUucmVsb2FkKCl9KSwKIF0pfQotPGRpdiBjbGFzcz0ibWFpbiBsZWZ0IHVuZGVy
LXRvcGJhci13aXRoLWFjdGlvbnMiPgorPGRpdiBjbGFzcz0ibWFpbiByaWdodC1zaWRlYmFyIHVu
ZGVyLXRvcGJhci13aXRoLWFjdGlvbnMiPgogICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPiR7dGFi
bGV9PC9kaXY+CiA8L2Rpdj5gKTsKIApJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0
c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWwJKHJldmlzaW9uIDI1
MDM0OSkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3Nl
YXJjaC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGltcG9ydCB7Q29tbWl0
QmFua30gZnJvbSAnL2Fzc2V0cy9qcy9jb20KIGltcG9ydCB7ZGVlcENvbXBhcmUsIEVycm9yRGlz
cGxheSwgcXVlcnlUb1BhcmFtcywgcGFyYW1zVG9RdWVyeX0gZnJvbSAnL2Fzc2V0cy9qcy9jb21t
b24uanMnOwogaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzL2NvbmZpZ3Vy
YXRpb24uanMnOwogaW1wb3J0IHtEcmF3ZXIsIEJyYW5jaFNlbGVjdG9yLCBDb25maWd1cmF0aW9u
U2VsZWN0b3JzLCBMaW1pdFNsaWRlcn0gZnJvbSAnL2Fzc2V0cy9qcy9kcmF3ZXIuanMnOworaW1w
b3J0IHtJbnZlc3RpZ2F0ZURyYXdlcn0gZnJvbSAnL2Fzc2V0cy9qcy9pbnZlc3RpZ2F0ZS5qcyc7
CiBpbXBvcnQge1NlYXJjaEJhcn0gZnJvbSAnL2Fzc2V0cy9qcy9zZWFyY2guanMnOwogaW1wb3J0
IHtMZWdlbmQsIFRpbWVsaW5lRnJvbUVuZHBvaW50fSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5l
LmpzJzsKIGltcG9ydCB7VG9vbFRpcH0gZnJvbSAnL2Fzc2V0cy9qcy90b29sdGlwLmpzJzsKQEAg
LTIyNSw2ICsyMjYsNyBAQCB3aW5kb3cub25wdXNoc3RhdGUgPSBldmVudCA9PiB7dmlldy5yZWxv
CiBET00uaW5qZWN0KAogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHAnKSwKICAgICBg
JHtUb29sVGlwfQorICAgICR7SW52ZXN0aWdhdGVEcmF3ZXJ9CiAgICAgJHtEcmF3ZXIoWwogICAg
ICAgICBMZWdlbmQoKCkgPT4gewogICAgICAgICAgICAgdmlldy5jaGlsZHJlbi5mb3JFYWNoKChj
aGlsZCkgPT4gewpAQCAtMjM5LDcgKzI0MSw3IEBAIERPTS5pbmplY3QoCiAgICAgICAgIENvbmZp
Z3VyYXRpb25TZWxlY3RvcnMoKCkgPT4ge3ZpZXcucmVsb2FkKCl9KSwKICAgICBdLCAoKSA9PiBv
bkxheW91dENoYW5nZS5hZGQoKSl9CiAKLSAgICA8ZGl2IGNsYXNzPSJtYWluIGxlZnQgdW5kZXIt
dG9wYmFyLXdpdGgtYWN0aW9ucyI+CisgICAgPGRpdiBjbGFzcz0ibWFpbiByaWdodC1zaWRlYmFy
IHVuZGVyLXRvcGJhci13aXRoLWFjdGlvbnMiPgogICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50
Ij4KICAgICAgICAgICAgICR7U2VhcmNoQmFyKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBzcGxpdFVSTCA9IGRvY3VtZW50LlVSTC5zcGxpdCgnPycpOwpJbmRleDogVG9vbHMv
cmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxh
dGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAkocmV2aXNpb24gMjUwMzQ5KQorKysgVG9vbHMvcmVzdWx0
c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGltcG9ydCB7Q29tbWl0QmFua30gZnJvbSAnL2Fz
c2V0cy9qcy9jb20KIGltcG9ydCB7ZGVlcENvbXBhcmUsIEVycm9yRGlzcGxheSwgcXVlcnlUb1Bh
cmFtcywgcGFyYW1zVG9RdWVyeX0gZnJvbSAnL2Fzc2V0cy9qcy9jb21tb24uanMnOwogaW1wb3J0
IHtDb25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnOwogaW1w
b3J0IHtEcmF3ZXIsIEJyYW5jaFNlbGVjdG9yLCBDb25maWd1cmF0aW9uU2VsZWN0b3JzLCBMaW1p
dFNsaWRlcn0gZnJvbSAnL2Fzc2V0cy9qcy9kcmF3ZXIuanMnOworaW1wb3J0IHtJbnZlc3RpZ2F0
ZURyYXdlcn0gZnJvbSAnL2Fzc2V0cy9qcy9pbnZlc3RpZ2F0ZS5qcyc7CiBpbXBvcnQge0xlZ2Vu
ZCwgVGltZWxpbmVGcm9tRW5kcG9pbnR9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOwog
aW1wb3J0IHtUb29sVGlwfSBmcm9tICcvYXNzZXRzL2pzL3Rvb2x0aXAuanMnOwogaW1wb3J0IHtE
T00sIFJFRiwgRXZlbnRTdHJlYW19IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CkBAIC0xNjgs
NiArMTY5LDcgQEAgb25MYXlvdXRDaGFuZ2UuYWN0aW9uKCgpID0+IHsKIH0pOwogCiBET00uaW5q
ZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHAnKSwgYCR7VG9vbFRpcH0KKyR7SW52ZXN0
aWdhdGVEcmF3ZXJ9CiAke0RyYXdlcihbCiAgICAgTGVnZW5kKCgpID0+IHsKICAgICAgICAgZm9y
IChsZXQgc3VpdGUgaW4gdmlldy5jaGlsZHJlbikgewpAQCAtMTgxLDcgKzE4Myw3IEBAICR7RHJh
d2VyKFsKICAgICB9KSwKICAgICBDb25maWd1cmF0aW9uU2VsZWN0b3JzKCgpID0+IHt2aWV3LnJl
bG9hZCgpfSksCiBdLCAoKSA9PiBvbkxheW91dENoYW5nZS5hZGQoKSl9Ci08ZGl2IGNsYXNzPSJt
YWluIGxlZnQgdW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyI+Cis8ZGl2IGNsYXNzPSJtYWluIHJp
Z2h0LXNpZGViYXIgdW5kZXItdG9wYmFyLXdpdGgtYWN0aW9ucyI+CiAgICAgPGRpdiBjbGFzcz0i
Y29udGVudCI+CiAgICAgICAgICR7dmlld30KICAgICA8L2Rpdj4K
</data>

          </attachment>
      

    </bug>

</bugzilla>