<?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>215380</bug_id>
          
          <creation_ts>2020-08-11 10:07:04 -0700</creation_ts>
          <short_desc>[webkitcorepy] Add OutputCapture to webkitcorepy</short_desc>
          <delta_ts>2020-08-18 14:36:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=214378</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=215628</see_also>
          <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>dean_johnson</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1679436</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-11 10:07:04 -0700</bug_when>
    <thetext>Webkitpy has an OutputCapture class (Tools/Scripts/webkitpy/common/system/outputcapture.py), but it uses an older set of idioms that modern Python developers usually find confusing. This has resulted in the OutputCapture not being used much in modern webkitpy code, which is unfortunate, because the idea behind the OutputCapture class is a fantastic one. It&apos;s also an idea that&apos;s useful for more than just testing (for example, sending a log to both stdout and a file).

This bug attempts to create an OutputCapture object inspired by the one in webkitpy, but using more modern idioms and more explicit access of stdout/stderr vs logging channels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679437</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-11 10:07:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/66846384&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679441</commentid>
    <comment_count>2</comment_count>
      <attachid>406388</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-11 10:12:47 -0700</bug_when>
    <thetext>Created attachment 406388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679488</commentid>
    <comment_count>3</comment_count>
      <attachid>406399</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-11 11:57:01 -0700</bug_when>
    <thetext>Created attachment 406399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679489</commentid>
    <comment_count>4</comment_count>
      <attachid>406399</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-11 11:58:36 -0700</bug_when>
    <thetext>Comment on attachment 406399
Patch

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

&gt; Tools/Scripts/webkitpy/tool/bot/ircbot_unittest.py:73
&gt; +        self.assertEqual(captured.root.log.getvalue(), &apos;MOCK: irc.post: Exception executing command: mock_exception\n&apos;)

This is a taste of what the refactor adopting the new OutputCapture would look like. It&apos;s not particularly difficult, but I would like to make sure we have general agreement that this is the right direction before I change everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680493</commentid>
    <comment_count>5</comment_count>
      <attachid>406388</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-08-14 15:55:26 -0700</bug_when>
    <thetext>Comment on attachment 406388
Patch

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

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/output_capture.py:51
&gt; +        self.log = StringIO()

Can we really we reset `self.log` every time?

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/output_capture_unittest.py:54
&gt; +            with capturer:
&gt; +                with capturer:
&gt; +                    pass
&gt; +

What happens when I do
```
with capturer:
    log.info(&apos;level 1&apos;)
    with capturer:
        log.info(&apos;level 2&apos;)
self.assertEqual(capturer.log.getvalue(), &apos;level 1\nlevel 2\n&apos;)
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680494</commentid>
    <comment_count>6</comment_count>
      <attachid>406388</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-14 15:59:43 -0700</bug_when>
    <thetext>Comment on attachment 406388
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/output_capture.py:51
&gt;&gt; +        self.log = StringIO()
&gt; 
&gt; Can we really we reset `self.log` every time?

We could, but I think your point about re-entry and what should happen is a really good one, we probably shouldn&apos;t.

Will update and get a better answer to your later question :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680525</commentid>
    <comment_count>7</comment_count>
      <attachid>406388</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-14 17:00:41 -0700</bug_when>
    <thetext>Comment on attachment 406388
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/output_capture_unittest.py:54
&gt;&gt; +
&gt; 
&gt; What happens when I do
&gt; ```
&gt; with capturer:
&gt;     log.info(&apos;level 1&apos;)
&gt;     with capturer:
&gt;         log.info(&apos;level 2&apos;)
&gt; self.assertEqual(capturer.log.getvalue(), &apos;level 1\nlevel 2\n&apos;)
&gt; ```

Needed to read my own code.

Entering level 2 will raise a ValueError exception with the current patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680534</commentid>
    <comment_count>8</comment_count>
      <attachid>406388</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-08-14 17:26:57 -0700</bug_when>
    <thetext>Comment on attachment 406388
Patch

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

&gt;&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/output_capture_unittest.py:54
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; What happens when I do
&gt;&gt; ```
&gt;&gt; with capturer:
&gt;&gt;     log.info(&apos;level 1&apos;)
&gt;&gt;     with capturer:
&gt;&gt;         log.info(&apos;level 2&apos;)
&gt;&gt; self.assertEqual(capturer.log.getvalue(), &apos;level 1\nlevel 2\n&apos;)
&gt;&gt; ```
&gt; 
&gt; Needed to read my own code.
&gt; 
&gt; Entering level 2 will raise a ValueError exception with the current patch.

I see, so we don&apos;t want nested use or even re-use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680539</commentid>
    <comment_count>9</comment_count>
      <attachid>406388</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-08-14 17:35:05 -0700</bug_when>
    <thetext>Comment on attachment 406388
Patch

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

&gt;&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/output_capture.py:51
&gt;&gt;&gt; +        self.log = StringIO()
&gt;&gt; 
&gt;&gt; Can we really we reset `self.log` every time?
&gt; 
&gt; We could, but I think your point about re-entry and what should happen is a really good one, we probably shouldn&apos;t.
&gt; 
&gt; Will update and get a better answer to your later question :)

OK, depends on whether we allow/want to re-use / nested using this context object, this might be subject to change.
If we don&apos;t want this to be re-used, then we should set self.log only once, either in `__init__` or &apos;__enter__&apos;. Setting at both place seems not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680586</commentid>
    <comment_count>10</comment_count>
      <attachid>406654</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-14 21:39:56 -0700</bug_when>
    <thetext>Created attachment 406654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680587</commentid>
    <comment_count>11</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-14 21:44:31 -0700</bug_when>
    <thetext>(In reply to dewei_zhu from comment #9)
&gt; Comment on attachment 406388 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406388&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/output_capture.py:51
&gt; &gt;&gt;&gt; +        self.log = StringIO()
&gt; &gt;&gt; 
&gt; &gt;&gt; Can we really we reset `self.log` every time?
&gt; &gt; 
&gt; &gt; We could, but I think your point about re-entry and what should happen is a really good one, we probably shouldn&apos;t.
&gt; &gt; 
&gt; &gt; Will update and get a better answer to your later question :)
&gt; 
&gt; OK, depends on whether we allow/want to re-use / nested using this context
&gt; object, this might be subject to change.
&gt; If we don&apos;t want this to be re-used, then we should set self.log only once,
&gt; either in `__init__` or &apos;__enter__&apos;. Setting at both place seems not
&gt; necessary.

Yes!

I think allowing both re-use and nested usage makes sense for the OutputCapture and LoggerCapture (I can see a weird use case where you might want to capture, the start a second capture, but then stop the second capture before restarting it again, which would require either re-using a capture or nesting the first capture)

It&apos;s the OutputDuplicate that I&apos;m a bit more skeptical about, because nesting OutputDuplicates results in triplicating the output (which is correct in the pedantic sense, but feels weird)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680589</commentid>
    <comment_count>12</comment_count>
      <attachid>406655</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-14 21:48:12 -0700</bug_when>
    <thetext>Created attachment 406655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680590</commentid>
    <comment_count>13</comment_count>
      <attachid>406655</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-14 21:51:40 -0700</bug_when>
    <thetext>Comment on attachment 406655
Patch

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

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/output_capture_unittest.py:103
&gt; +            self.assertEqual(duplicator.output.getvalue(), &apos;Log 1\nLevel 1\nLog 2\nLog 2\nLevel 2\nLevel 2\n&apos;)

This test-case shows the weirdness of nesting the OutputDuplicate class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680892</commentid>
    <comment_count>14</comment_count>
      <attachid>406734</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-17 12:51:40 -0700</bug_when>
    <thetext>Created attachment 406734
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680903</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-17 13:20:16 -0700</bug_when>
    <thetext>Committed r265769: &lt;https://trac.webkit.org/changeset/265769&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406734.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406388</attachid>
            <date>2020-08-11 10:12:47 -0700</date>
            <delta_ts>2020-08-14 21:40:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215380-20200811101246.patch</filename>
            <type>text/plain</type>
            <size>15211</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NTQ5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5IEBACisyMDIwLTA4LTExICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgT3V0cHV0Q2FwdHVyZSB0byB3ZWJraXRj
b3JlcHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTM4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjY4NDYzODQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggd2Via2l0cHkgaGFzIGFu
IE91dHB1dENhcHR1cmUgY2xhc3MsIHRoYXQgY2xhc3MgZG9lcyBub3Qgc2VwYXJhdGUgbG9nZ2lu
ZyBmcm9tCisgICAgICAgIHN0ZG91dCBhbmQgc3RkZXJyLCB3aGljaCBtYWtlcyB0aGUgQVBJIGxl
c3MgdXNlZnVsLiBUaGlzIHZlcnNpb24gb2YgdGhlIE91dHB1dENhcHR1cmUgY2xhc3MKKyAgICAg
ICAgaXMgaW5zcGlyZWQgYnkgdGhlIG9uZSBpbiB3ZWJraXRweSwgYnV0IHdpdGggYSBjbGVhbmVy
IGludGVyZmFjZS4KKworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9S
RUFETUUubWQ6IERvY3VtZW50IHVzYWdlIG9mIE91dHB1dENhcHR1cmUuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRXhw
b3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUgYW5kCisgICAgICAgIE91dHB1dER1cGxp
Y2F0ZSBhcyBBUEksIGJ1bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5OiBBZGRlZC4KKyAgICAg
ICAgKExvZ2dlckNhcHR1cmUpOiBDYXB0dXJlIGxvZ3MgYXQgc29tZSBsZXZlbCBmb3IgdGhlIGR1
cmF0aW9uIG9mIHRoZSBpbnRlcmZhY2UuCisgICAgICAgIChPdXRwdXRDYXB0dXJlKTogQ2FwdHVy
ZSBzdGRvdXQsIHN0ZGVyciBhbmQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMgZm9yIHRoZSBkdXJhdGlv
biBvZiB0aGUgaW50ZXJmYWNlLgorICAgICAgICAoT3V0cHV0RHVwbGljYXRlKTogQ29udGV4dCB3
aGljaCBjYW4gZHVwbGljYXRlIGFsbCBvdXRwdXQgZm9yIGEgYmxvY2sgb2YgY29kZS4gVGhpcyBp
cyB1c2VmdWwgdG8gYm90aCBwcmludCBhbmQKKyAgICAgICAgY2FwdHVyZSBsb2dzLgorICAgICAg
ICAoT3V0cHV0RHVwbGljYXRlLlN0cmVhbSk6IEZpbGUtbGlrZSBvYmplY3QgdGhhdCByb3V0ZXMg
b3V0cHV0IHRvIG11bHRpcGxlIGZpbGUtbGlrZSBvYmplY3RzLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvb3V0cHV0X2NhcHR1cmVf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoTG9nZ2VyQ2FwdHVyZVRlc3QpOgorICAgICAg
ICAoT3V0cHV0Q2FwdHVyZVRlc3QpOgorICAgICAgICAoT3V0cHV0T3V0cHV0RHVwbGljYXRlVGVz
dCk6CisKIDIwMjAtMDgtMTEgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdW1dQRV0gQWRkIE1pbmlCcm93c2VyIHdyYXBwZXIgZW52IHZhcnMg
YW5kIHdoaXRlLWxpc3QgTUVTQSBlbnYgdmFycyBpbiBmbGF0cGFrCkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvUkVBRE1FLm1kCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHJldmlzaW9uIDI2NTQ5
OSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDMgKzQzLDEwIEBAIHdpdGggbW9ja3MuVGltZToKICAgICBzdGFt
cCA9IHRpbWUudGltZSgpCiAgICAgdGltZS5zbGVlcCg1KQogYGBgCitDYXB0dXJpbmcgc3Rkb3V0
LCBzdGRlcnIgYW5kIGxvZ2dpbmcgb3V0cHV0IGZvciB0ZXN0aW5nCitgYGAKK2NhcHR1cmVyID0g
T3V0cHV0Q2FwdHVyZSgpCit3aXRoIGNhcHR1cmVyOgorICAgIHByaW50KCdkYXRhXG4nKQorYXNz
ZXJ0IGNhcHR1cmVyLnN0ZG91dC5nZXR2YWx1ZSgpID09ICdkYXRhXG4nCitgYGAKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS9fX2luaXRfXy5weQkocmV2aXNpb24gMjY1NDk5KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignd2Via2l0
Y29yZXB5JykKIAogZnJvbSB3ZWJraXRjb3JlcHkudmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJv
bSB3ZWJraXRjb3JlcHkuc3RyaW5nX3V0aWxzIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTywgVW5p
Y29kZUlPLCB1bmljb2RlCitmcm9tIHdlYmtpdGNvcmVweS5vdXRwdXRfY2FwdHVyZSBpbXBvcnQg
TG9nZ2VyQ2FwdHVyZSwgT3V0cHV0Q2FwdHVyZSwgT3V0cHV0RHVwbGljYXRlCiAKIHZlcnNpb24g
PSBWZXJzaW9uKDAsIDIsIDIpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dGNvcmVweS93ZWJraXRjb3JlcHkvb3V0cHV0X2NhcHR1cmUucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9vdXRwdXRfY2Fw
dHVyZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjIzIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBjb250ZXh0bGliCitpbXBvcnQgaW8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCisKK2Zy
b20gd2Via2l0Y29yZXB5IGltcG9ydCBsb2csIG1vY2tzCitmcm9tIHdlYmtpdGNvcmVweS5zdHJp
bmdfdXRpbHMgaW1wb3J0IFN0cmluZ0lPCisKKworY2xhc3MgTG9nZ2VyQ2FwdHVyZShvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXI9Tm9uZSwgbGV2ZWw9bG9nZ2luZy5XQVJO
SU5HKToKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIgb3IgbG9nZ2luZy5nZXRMb2dnZXIo
KQorICAgICAgICBzZWxmLmxldmVsID0gbGV2ZWwKKworICAgICAgICBzZWxmLl9vcmlnaW5hbF9s
b2dfbGV2ZWwgPSBOb25lCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2hhbmRsZXJzID0gTm9uZQor
ICAgICAgICBzZWxmLl9oYW5kbGVyID0gTm9uZQorICAgICAgICBzZWxmLmxvZyA9IFN0cmluZ0lP
KCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIE5vbmUgbm90IGluIFtz
ZWxmLl9vcmlnaW5hbF9sb2dfbGV2ZWwsIHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbCwgc2VsZi5f
aGFuZGxlcl06CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFbnRlcmVkIExvZ2dlckNh
cHR1cmUgY29udGV4dCBmb3Ige30gbXVsdGlwbGUgdGltZXMnLmZvcm1hdChzZWxmLmxvZ2dlcikp
CisgICAgICAgIHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbCA9IHNlbGYubG9nZ2VyLmxldmVsCisK
KyAgICAgICAgc2VsZi5fb3JpZ2luYWxfaGFuZGxlcnMgPSBbaGFuZGxlciBmb3IgaGFuZGxlciBp
biBzZWxmLmxvZ2dlci5oYW5kbGVyc10KKyAgICAgICAgZm9yIGhhbmRsZXIgaW4gc2VsZi5fb3Jp
Z2luYWxfaGFuZGxlcnM6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVIYW5kbGVyKGhh
bmRsZXIpCisKKyAgICAgICAgc2VsZi5sb2cgPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYuX2hh
bmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc2VsZi5sb2cpCisgICAgICAgIHNlbGYuX2hh
bmRsZXIuc2V0TGV2ZWwoc2VsZi5sZXZlbCkKKworICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5k
bGVyKHNlbGYuX2hhbmRsZXIpCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKHNlbGYubGV2
ZWwpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAg
aWYgc2VsZi5faGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZXIuZmx1c2goKQorICAg
ICAgICAgICAgc2VsZi5sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLl9oYW5kbGVyKQorCisgICAg
ICAgIGlmIHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHNlbGYubG9nZ2VyLnNldExldmVsKHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbCkKKyAgICAgICAg
aWYgc2VsZi5fb3JpZ2luYWxfaGFuZGxlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3Ig
aGFuZGxlciBpbiBzZWxmLl9vcmlnaW5hbF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICBzZWxm
LmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfbG9n
X2xldmVsID0gTm9uZQorICAgICAgICBzZWxmLl9vcmlnaW5hbF9oYW5kbGVycyA9IE5vbmUKKyAg
ICAgICAgc2VsZi5faGFuZGxlciA9IE5vbmUKKworCitjbGFzcyBPdXRwdXRDYXB0dXJlKG1vY2tz
LkNvbnRleHRTdGFjayk6CisgICAgdG9wID0gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
QGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgcmVwbGFjZV9zdGRvdXQoY2xzLCBz
dHJlYW0pOgorICAgICAgICBvcmlnaW5hbCA9IGdldGF0dHIoc3lzLCAnc3Rkb3V0JykKKyAgICAg
ICAgc2V0YXR0cihzeXMsICdzdGRvdXQnLCBzdHJlYW0pCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHlpZWxkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZXRhdHRyKHN5cywgJ3N0
ZG91dCcsIG9yaWdpbmFsKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgQGNvbnRleHRsaWIuY29u
dGV4dG1hbmFnZXIKKyAgICBkZWYgcmVwbGFjZV9zdGRlcnIoY2xzLCBzdHJlYW0pOgorICAgICAg
ICBvcmlnaW5hbCA9IGdldGF0dHIoc3lzLCAnc3RkZXJyJykKKyAgICAgICAgc2V0YXR0cihzeXMs
ICdzdGRlcnInLCBzdHJlYW0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZXRhdHRyKHN5cywgJ3N0ZGVycicsIG9yaWdpbmFs
KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlcnM9Tm9uZSwgbGV2ZWw9bG9nZ2luZy5X
QVJOSU5HKToKKyAgICAgICAgc3VwZXIoT3V0cHV0Q2FwdHVyZSwgc2VsZikuX19pbml0X18oY2xz
PU91dHB1dENhcHR1cmUpCisKKyAgICAgICAgc2VsZi5jYXB0dXJpbmcgPSAwCisKKyAgICAgICAg
c2VsZi5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYuc3RkZXJyID0gU3RyaW5nSU8o
KQorCisgICAgICAgIGlmIG5vdCBsb2dnZXJzOgorICAgICAgICAgICAgbG9nZ2VycyA9IFtsb2dn
aW5nLmdldExvZ2dlcigpLCBsb2ddCisKKyAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVuZChzZWxm
LnJlcGxhY2Vfc3Rkb3V0KHNlbGYuc3Rkb3V0KSkKKyAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVu
ZChzZWxmLnJlcGxhY2Vfc3RkZXJyKHNlbGYuc3RkZXJyKSkKKworICAgICAgICBmb3IgbG9nZ2Vy
IGluIGxvZ2dlcnM6CisgICAgICAgICAgICBpZiBsb2dnZXIubmFtZSBpbiBbJ3N0ZG91dCcsICdz
dGRlcnInLCAncGF0Y2hlcycsICd0b3AnXToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCd7fSBjb2xsaWRlcyB3aXRoIGFuIE91dHB1dENhcHR1cmUgbWVtYmVyJy5mb3JtYXQobG9n
Z2VyLm5hbWUpKQorICAgICAgICAgICAgbGMgPSBMb2dnZXJDYXB0dXJlKGxvZ2dlciwgbGV2ZWwp
CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGxvZ2dlci5uYW1lLCBsYykKKyAgICAgICAgICAg
IHNlbGYucGF0Y2hlcy5hcHBlbmQobGMpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLmNhcHR1cmluZzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Vu
dGVyZWQgT3V0cHV0Q2FwdHVyZSBjb250ZXh0IG11bHRpcGxlIHRpbWVzJykKKworICAgICAgICBz
ZWxmLmNhcHR1cmluZyArPSAxCisgICAgICAgIHJldHVybiBzdXBlcihPdXRwdXRDYXB0dXJlLCBz
ZWxmKS5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIHNlbGYuY2FwdHVyaW5nIC09IDEKKyAgICAgICAgaWYgc2VsZi5jYXB0dXJp
bmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3VwZXIoT3V0cHV0Q2FwdHVyZSwgc2Vs
ZikuX19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQorCisKK2NsYXNzIE91dHB1dER1cGxpY2F0ZSht
b2Nrcy5Db250ZXh0U3RhY2spOgorICAgIHRvcCA9IE5vbmUKKworICAgIGNsYXNzIFN0cmVhbShp
by5JT0Jhc2UpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKnRhcmdldHMpOgorICAgICAg
ICAgICAgaWYgbm90IHRhcmdldHM6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
Tm8gdGFyZ2V0IHN0cmVhbXMgcHJvdmlkZWQnKQorICAgICAgICAgICAgc2VsZi50YXJnZXRzID0g
dGFyZ2V0cworCisgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgIFt0YXJnZXQu
Zmx1c2goKSBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0c10KKworICAgICAgICBkZWYgd3JpdGVs
aW5lcyhzZWxmLCBsaW5lcyk6CisgICAgICAgICAgICBbdGFyZ2V0LndyaXRlbGluZXMobGluZXMp
IGZvciB0YXJnZXQgaW4gc2VsZi50YXJnZXRzXQorCisgICAgICAgIGRlZiB3cml0ZShzZWxmLCBi
KToKKyAgICAgICAgICAgIFt0YXJnZXQud3JpdGUoYikgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdl
dHNdCisgICAgICAgICAgICByZXR1cm4gbGVuKGIpCisKKyAgICAgICAgQHByb3BlcnR5CisgICAg
ICAgIGRlZiBjbG9zZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYWxsKFt0YXJnZXQuY2xv
c2VkIGZvciB0YXJnZXQgaW4gc2VsZi50YXJnZXRzXSkKKworICAgICAgICBkZWYgY2xvc2Uoc2Vs
Zik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAg
ICAgICAgICMgVXNlIHRoZSBmaXJzdCB2YWxpZCBmaWxlIG51bWJlcgorICAgICAgICAgICAgZm9y
IHRhcmdldCBpbiBzZWxmLnRhcmdldHM6CisgICAgICAgICAgICAgICAgaWYgdGFyZ2V0LmZpbGVu
bygpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZpbGVubygpCisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAgICAg
ICByZXR1cm4gYW55KFt0YXJnZXQuaXNhdHR5KCkgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHNd
KQorCisgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKKyAgICAgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiByZWFkbGluZXMoc2VsZiwg
aGludD0tMSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAg
ICAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1pby5TRUVLX1NFVCk6CisgICAgICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgc2Vla2FibGUo
c2VsZik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBkZWYgdGVsbChzZWxm
KToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRl
ZiB0cnVuY2F0ZShzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXJzPU5vbmUpOgorICAg
ICAgICBzdXBlcihPdXRwdXREdXBsaWNhdGUsIHNlbGYpLl9faW5pdF9fKGNscz1PdXRwdXREdXBs
aWNhdGUpCisKKyAgICAgICAgc2VsZi5kdXBsaWNhdGluZyA9IDAKKyAgICAgICAgc2VsZi5vdXRw
dXQgPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYubG9nZ2VycyA9IFtsb2dnaW5nLmdldExvZ2dl
cigpXSBvciBsb2dnZXJzCisKKyAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVuZChPdXRwdXRDYXB0
dXJlLnJlcGxhY2Vfc3Rkb3V0KHNlbGYuU3RyZWFtKHN5cy5zdGRvdXQsIHNlbGYub3V0cHV0KSkp
CisgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQoT3V0cHV0Q2FwdHVyZS5yZXBsYWNlX3N0ZGVy
cihzZWxmLlN0cmVhbShzeXMuc3RkZXJyLCBzZWxmLm91dHB1dCkpKQorICAgICAgICBzZWxmLl9o
YW5kbGVyID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5kdXBsaWNhdGluZzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VudGVyZWQgT3V0
cHV0RHVwbGljYXRlIGNvbnRleHQgbXVsdGlwbGUgdGltZXMnKQorCisgICAgICAgIHNlbGYuZHVw
bGljYXRpbmcgKz0gMQorICAgICAgICBzZWxmLl9oYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5k
bGVyKHNlbGYub3V0cHV0KQorICAgICAgICBzZWxmLl9oYW5kbGVyLnNldExldmVsKG1pbihbbG9n
Z2VyLmxldmVsIGZvciBsb2dnZXIgaW4gc2VsZi5sb2dnZXJzXSkpCisgICAgICAgIFtsb2dnZXIu
YWRkSGFuZGxlcihzZWxmLl9oYW5kbGVyKSBmb3IgbG9nZ2VyIGluIHNlbGYubG9nZ2Vyc10KKwor
ICAgICAgICByZXR1cm4gc3VwZXIoT3V0cHV0RHVwbGljYXRlLCBzZWxmKS5fX2VudGVyX18oKQor
CisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYu
ZHVwbGljYXRpbmcgLT0gMQorICAgICAgICBpZiBzZWxmLmR1cGxpY2F0aW5nOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5faGFuZGxlci5mbHVzaCgpCisgICAgICAgIFtsb2dn
ZXIucmVtb3ZlSGFuZGxlcihzZWxmLl9oYW5kbGVyKSBmb3IgbG9nZ2VyIGluIHNlbGYubG9nZ2Vy
c10KKyAgICAgICAgc2VsZi5faGFuZGxlciA9IE5vbmUKKworICAgICAgICBzdXBlcihPdXRwdXRE
dXBsaWNhdGUsIHNlbGYpLl9fZXhpdF9fKCphcmdzLCAqKmt3YXJncykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvb3V0cHV0X2Nh
cHR1cmVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9vdXRwdXRfY2FwdHVyZV91bml0dGVzdC5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L3Rlc3RzL291dHB1dF9jYXB0dXJlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdGNvcmVweSBpbXBvcnQgbG9nLCBMb2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJlLCBPdXRw
dXREdXBsaWNhdGUKKworCitjbGFzcyBMb2dnZXJDYXB0dXJlVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGNhcHR1cmVyID0gTG9nZ2Vy
Q2FwdHVyZShsb2cpCisgICAgICAgIHdpdGggY2FwdHVyZXIsIExvZ2dlckNhcHR1cmUoKToKKyAg
ICAgICAgICAgIGxvZy5pbmZvKCdIaWRkZW4nKQorICAgICAgICAgICAgbG9nLndhcm4oJ1ByaW50
ZWQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZXIubG9nLmdldHZhbHVlKCks
ICdQcmludGVkXG4nKQorCisgICAgZGVmIHRlc3RfbGV2ZWwoc2VsZik6CisgICAgICAgIGNhcHR1
cmVyID0gTG9nZ2VyQ2FwdHVyZShsb2csIGxldmVsPWxvZ2dpbmcuSU5GTykKKyAgICAgICAgd2l0
aCBjYXB0dXJlciwgTG9nZ2VyQ2FwdHVyZSgpOgorICAgICAgICAgICAgbG9nLmRlYnVnKCdIaWRk
ZW4nKQorICAgICAgICAgICAgbG9nLmluZm8oJ1ByaW50ZWQgMScpCisgICAgICAgICAgICBsb2cu
d2FybignUHJpbnRlZCAyJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLmxv
Zy5nZXR2YWx1ZSgpLCAnUHJpbnRlZCAxXG5QcmludGVkIDJcbicpCisKKyAgICBkZWYgdGVzdF9t
dWx0aXBsZV9lbnRyeShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1
ZUVycm9yKToKKyAgICAgICAgICAgIGNhcHR1cmVyID0gTG9nZ2VyQ2FwdHVyZShsb2csIGxldmVs
PWxvZ2dpbmcuSU5GTykKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZXI6CisgICAgICAgICAgICAg
ICAgd2l0aCBjYXB0dXJlcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisKK2NsYXNzIE91
dHB1dENhcHR1cmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpYyhz
ZWxmKToKKyAgICAgICAgY2FwdHVyZXIgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgd2l0aCBj
YXB0dXJlcjoKKyAgICAgICAgICAgIGxvZy5pbmZvKCdIaWRkZW4nKQorICAgICAgICAgICAgbG9n
Lndhcm4oJ1ByaW50ZWQnKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnc3Rkb3V0XG4n
KQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RkZXJyXG4nKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY2FwdHVyZXIud2Via2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLCAnUHJp
bnRlZFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRvdXQuZ2V0dmFs
dWUoKSwgJ3N0ZG91dFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRl
cnIuZ2V0dmFsdWUoKSwgJ3N0ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5
KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAgY2FwdHVyZXIgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgICAgIHdpdGggY2Fw
dHVyZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjYXB0dXJlcjoKKyAgICAgICAgICAgICAgICAg
ICAgcGFzcworCisKK2NsYXNzIE91dHB1dE91dHB1dER1cGxpY2F0ZVRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBjYXB0dXJlciA9IE91
dHB1dENhcHR1cmUoKQorICAgICAgICB3aXRoIGNhcHR1cmVyOgorICAgICAgICAgICAgZHVwbGlj
YXRvciA9IE91dHB1dER1cGxpY2F0ZSgpCisgICAgICAgICAgICB3aXRoIGR1cGxpY2F0b3I6Cisg
ICAgICAgICAgICAgICAgbG9nLmluZm8oJ0hpZGRlbicpCisgICAgICAgICAgICAgICAgbG9nLndh
cm4oJ1ByaW50ZWQnKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3N0ZG91dFxu
JykKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdzdGRlcnJcbicpCisKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwbGljYXRvci5vdXRwdXQuZ2V0dmFsdWUoKSwgJ1By
aW50ZWRcbnN0ZG91dFxuc3RkZXJyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2Fw
dHVyZXIud2Via2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLCAnUHJpbnRlZFxuJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRvdXQuZ2V0dmFsdWUoKSwgJ3N0ZG91dFxuJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRlcnIuZ2V0dmFsdWUoKSwgJ3N0
ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5KHNlbGYpOgorICAgICAgICB3
aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2FwdHVyZXIg
PSBPdXRwdXREdXBsaWNhdGUoKQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlcjoKKyAgICAgICAg
ICAgICAgICB3aXRoIGNhcHR1cmVyOgorICAgICAgICAgICAgICAgICAgICBwYXNzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406399</attachid>
            <date>2020-08-11 11:57:01 -0700</date>
            <delta_ts>2020-08-17 10:25:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215380-20200811115700.patch</filename>
            <type>text/plain</type>
            <size>29285</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NTQ5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDIwLTA4LTExICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgT3V0cHV0Q2FwdHVyZSB0byB3ZWJraXRj
b3JlcHkgKFBPQywgT09QUyEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTUzODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY2ODQ2Mzg0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVuZGVkIGFz
IGEgcHJvb2Ytb2YgY29uY2VwdCBmb3IgaG93IHRoZSBuZXcgT3V0cHV0Q2FwdHVyZSByZXBsYWNl
cyB0aGUgb2xkIG9uZSwKKyAgICAgICAgbm90IHRvIGJlIGxhbmRlZC4KKwogMjAyMC0wOC0xMSAg
UGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11b
V1BFXSBBZGQgTWluaUJyb3dzZXIgd3JhcHBlciBlbnYgdmFycyBhbmQgd2hpdGUtbGlzdCBNRVNB
IGVudiB2YXJzIGluIGZsYXRwYWsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dGNvcmVweS9SRUFETUUubWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L1JFQURNRS5tZAkocmV2aXNpb24gMjY1NDk5KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L1JFQURNRS5tZAkod29ya2luZyBjb3B5KQpAQCAtNDMs
MyArNDMsMTAgQEAgd2l0aCBtb2Nrcy5UaW1lOgogICAgIHN0YW1wID0gdGltZS50aW1lKCkKICAg
ICB0aW1lLnNsZWVwKDUpCiBgYGAKK0NhcHR1cmluZyBzdGRvdXQsIHN0ZGVyciBhbmQgbG9nZ2lu
ZyBvdXRwdXQgZm9yIHRlc3RpbmcKK2BgYAorY2FwdHVyZXIgPSBPdXRwdXRDYXB0dXJlKCkKK3dp
dGggY2FwdHVyZXI6CisgICAgcHJpbnQoJ2RhdGFcbicpCithc3NlcnQgY2FwdHVyZXIuc3Rkb3V0
LmdldHZhbHVlKCkgPT0gJ2RhdGFcbicKK2BgYApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9f
LnB5CShyZXZpc2lvbiAyNjU0OTkpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCd3ZWJraXRjb3JlcHknKQogCiBmcm9tIHdl
YmtpdGNvcmVweS52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9tIHdlYmtpdGNvcmVweS5zdHJp
bmdfdXRpbHMgaW1wb3J0IEJ5dGVzSU8sIFN0cmluZ0lPLCBVbmljb2RlSU8sIHVuaWNvZGUKK2Zy
b20gd2Via2l0Y29yZXB5Lm91dHB1dF9jYXB0dXJlIGltcG9ydCBMb2dnZXJDYXB0dXJlLCBPdXRw
dXRDYXB0dXJlLCBPdXRwdXREdXBsaWNhdGUKIAogdmVyc2lvbiA9IFZlcnNpb24oMCwgMiwgMikK
IApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVw
eS9vdXRwdXRfY2FwdHVyZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
b3V0cHV0X2NhcHR1cmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjMgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9y
dCBpbworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IGxvZywgbW9ja3MKK2Zyb20gd2Via2l0Y29yZXB5LnN0cmluZ191dGlscyBpbXBvcnQgU3Ry
aW5nSU8KKworCitjbGFzcyBMb2dnZXJDYXB0dXJlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGxvZ2dlcj1Ob25lLCBsZXZlbD1sb2dnaW5nLldBUk5JTkcpOgorICAgICAgICBzZWxm
LmxvZ2dlciA9IGxvZ2dlciBvciBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIHNlbGYubGV2
ZWwgPSBsZXZlbAorCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbCA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fb3JpZ2luYWxfaGFuZGxlcnMgPSBOb25lCisgICAgICAgIHNlbGYuX2hhbmRs
ZXIgPSBOb25lCisgICAgICAgIHNlbGYubG9nID0gU3RyaW5nSU8oKQorCisgICAgZGVmIF9fZW50
ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgTm9uZSBub3QgaW4gW3NlbGYuX29yaWdpbmFsX2xvZ19s
ZXZlbCwgc2VsZi5fb3JpZ2luYWxfbG9nX2xldmVsLCBzZWxmLl9oYW5kbGVyXToKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VudGVyZWQgTG9nZ2VyQ2FwdHVyZSBjb250ZXh0IGZvciB7
fSBtdWx0aXBsZSB0aW1lcycuZm9ybWF0KHNlbGYubG9nZ2VyKSkKKyAgICAgICAgc2VsZi5fb3Jp
Z2luYWxfbG9nX2xldmVsID0gc2VsZi5sb2dnZXIubGV2ZWwKKworICAgICAgICBzZWxmLl9vcmln
aW5hbF9oYW5kbGVycyA9IFtoYW5kbGVyIGZvciBoYW5kbGVyIGluIHNlbGYubG9nZ2VyLmhhbmRs
ZXJzXQorICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLl9vcmlnaW5hbF9oYW5kbGVyczoKKyAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKKworICAgICAgICBz
ZWxmLmxvZyA9IFN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5faGFuZGxlciA9IGxvZ2dpbmcuU3Ry
ZWFtSGFuZGxlcihzZWxmLmxvZykKKyAgICAgICAgc2VsZi5faGFuZGxlci5zZXRMZXZlbChzZWxm
LmxldmVsKQorCisgICAgICAgIHNlbGYubG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5faGFuZGxlcikK
KyAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2ZWwoc2VsZi5sZXZlbCkKKworICAgIGRlZiBfX2V4
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLl9oYW5kbGVyOgor
ICAgICAgICAgICAgc2VsZi5faGFuZGxlci5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLmxvZ2dl
ci5yZW1vdmVIYW5kbGVyKHNlbGYuX2hhbmRsZXIpCisKKyAgICAgICAgaWYgc2VsZi5fb3JpZ2lu
YWxfbG9nX2xldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2
ZWwoc2VsZi5fb3JpZ2luYWxfbG9nX2xldmVsKQorICAgICAgICBpZiBzZWxmLl9vcmlnaW5hbF9o
YW5kbGVycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBoYW5kbGVyIGluIHNlbGYuX29y
aWdpbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmFkZEhhbmRsZXIo
aGFuZGxlcikKKworICAgICAgICBzZWxmLl9vcmlnaW5hbF9sb2dfbGV2ZWwgPSBOb25lCisgICAg
ICAgIHNlbGYuX29yaWdpbmFsX2hhbmRsZXJzID0gTm9uZQorICAgICAgICBzZWxmLl9oYW5kbGVy
ID0gTm9uZQorCisKK2NsYXNzIE91dHB1dENhcHR1cmUobW9ja3MuQ29udGV4dFN0YWNrKToKKyAg
ICB0b3AgPSBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBAY29udGV4dGxpYi5jb250ZXh0
bWFuYWdlcgorICAgIGRlZiByZXBsYWNlX3N0ZG91dChjbHMsIHN0cmVhbSk6CisgICAgICAgIG9y
aWdpbmFsID0gZ2V0YXR0cihzeXMsICdzdGRvdXQnKQorICAgICAgICBzZXRhdHRyKHN5cywgJ3N0
ZG91dCcsIHN0cmVhbSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNldGF0dHIoc3lzLCAnc3Rkb3V0Jywgb3JpZ2luYWwpCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRl
ZiByZXBsYWNlX3N0ZGVycihjbHMsIHN0cmVhbSk6CisgICAgICAgIG9yaWdpbmFsID0gZ2V0YXR0
cihzeXMsICdzdGRlcnInKQorICAgICAgICBzZXRhdHRyKHN5cywgJ3N0ZGVycicsIHN0cmVhbSkK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIHNldGF0dHIoc3lzLCAnc3RkZXJyJywgb3JpZ2luYWwpCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbG9nZ2Vycz1Ob25lLCBsZXZlbD1sb2dnaW5nLldBUk5JTkcpOgorICAgICAgICBz
dXBlcihPdXRwdXRDYXB0dXJlLCBzZWxmKS5fX2luaXRfXyhjbHM9T3V0cHV0Q2FwdHVyZSkKKwor
ICAgICAgICBzZWxmLmNhcHR1cmluZyA9IDAKKworICAgICAgICBzZWxmLnN0ZG91dCA9IFN0cmlu
Z0lPKCkKKyAgICAgICAgc2VsZi5zdGRlcnIgPSBTdHJpbmdJTygpCisKKyAgICAgICAgaWYgbm90
IGxvZ2dlcnM6CisgICAgICAgICAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIGxv
Z10KKworICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHNlbGYucmVwbGFjZV9zdGRvdXQoc2Vs
Zi5zdGRvdXQpKQorICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHNlbGYucmVwbGFjZV9zdGRl
cnIoc2VsZi5zdGRlcnIpKQorCisgICAgICAgIGZvciBsb2dnZXIgaW4gbG9nZ2VyczoKKyAgICAg
ICAgICAgIGlmIGxvZ2dlci5uYW1lIGluIFsnc3Rkb3V0JywgJ3N0ZGVycicsICdwYXRjaGVzJywg
J3RvcCddOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IGNvbGxpZGVzIHdp
dGggYW4gT3V0cHV0Q2FwdHVyZSBtZW1iZXInLmZvcm1hdChsb2dnZXIubmFtZSkpCisgICAgICAg
ICAgICBsYyA9IExvZ2dlckNhcHR1cmUobG9nZ2VyLCBsZXZlbCkKKyAgICAgICAgICAgIHNldGF0
dHIoc2VsZiwgbG9nZ2VyLm5hbWUsIGxjKQorICAgICAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVu
ZChsYykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2FwdHVy
aW5nOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW50ZXJlZCBPdXRwdXRDYXB0dXJl
IGNvbnRleHQgbXVsdGlwbGUgdGltZXMnKQorCisgICAgICAgIHNlbGYuY2FwdHVyaW5nICs9IDEK
KyAgICAgICAgcmV0dXJuIHN1cGVyKE91dHB1dENhcHR1cmUsIHNlbGYpLl9fZW50ZXJfXygpCisK
KyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5j
YXB0dXJpbmcgLT0gMQorICAgICAgICBpZiBzZWxmLmNhcHR1cmluZzoKKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICBzdXBlcihPdXRwdXRDYXB0dXJlLCBzZWxmKS5fX2V4aXRfXygqYXJncywg
Kiprd2FyZ3MpCisKKworY2xhc3MgT3V0cHV0RHVwbGljYXRlKG1vY2tzLkNvbnRleHRTdGFjayk6
CisgICAgdG9wID0gTm9uZQorCisgICAgY2xhc3MgU3RyZWFtKGlvLklPQmFzZSk6CisgICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCAqdGFyZ2V0cyk6CisgICAgICAgICAgICBpZiBub3QgdGFyZ2V0
czoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyB0YXJnZXQgc3RyZWFtcyBw
cm92aWRlZCcpCisgICAgICAgICAgICBzZWxmLnRhcmdldHMgPSB0YXJnZXRzCisKKyAgICAgICAg
ZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICAgICAgW3RhcmdldC5mbHVzaCgpIGZvciB0YXJnZXQg
aW4gc2VsZi50YXJnZXRzXQorCisgICAgICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpbmVzKToK
KyAgICAgICAgICAgIFt0YXJnZXQud3JpdGVsaW5lcyhsaW5lcykgZm9yIHRhcmdldCBpbiBzZWxm
LnRhcmdldHNdCisKKyAgICAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICAgICAgW3Rh
cmdldC53cml0ZShiKSBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0c10KKyAgICAgICAgICAgIHJl
dHVybiBsZW4oYikKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIGNsb3NlZChzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBhbGwoW3RhcmdldC5jbG9zZWQgZm9yIHRhcmdldCBpbiBz
ZWxmLnRhcmdldHNdKQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHBh
c3MKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgIyBVc2UgdGhlIGZp
cnN0IHZhbGlkIGZpbGUgbnVtYmVyCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYudGFy
Z2V0czoKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXQuZmlsZW5vKCk6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0YXJnZXQuZmlsZW5vKCkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBhbnkoW3Rhcmdl
dC5pc2F0dHkoKSBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0c10pCisKKyAgICAgICAgZGVmIHJl
YWRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIHJl
YWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcigpCisKKyAgICAgICAgZGVmIHJlYWRsaW5lcyhzZWxmLCBoaW50PS0xKToKKyAgICAgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiBzZWVrKHNlbGYs
IG9mZnNldCwgd2hlbmNlPWlvLlNFRUtfU0VUKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHRydW5jYXRlKHNlbGYsIHNp
emU9Tm9uZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAg
ICAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKE91dHB1dER1
cGxpY2F0ZSwgc2VsZikuX19pbml0X18oY2xzPU91dHB1dER1cGxpY2F0ZSkKKworICAgICAgICBz
ZWxmLmR1cGxpY2F0aW5nID0gMAorICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lPKCkKKyAg
ICAgICAgc2VsZi5sb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCldIG9yIGxvZ2dlcnMKKwor
ICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKE91dHB1dENhcHR1cmUucmVwbGFjZV9zdGRvdXQo
c2VsZi5TdHJlYW0oc3lzLnN0ZG91dCwgc2VsZi5vdXRwdXQpKSkKKyAgICAgICAgc2VsZi5wYXRj
aGVzLmFwcGVuZChPdXRwdXRDYXB0dXJlLnJlcGxhY2Vfc3RkZXJyKHNlbGYuU3RyZWFtKHN5cy5z
dGRlcnIsIHNlbGYub3V0cHV0KSkpCisgICAgICAgIHNlbGYuX2hhbmRsZXIgPSBOb25lCisKKyAg
ICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmR1cGxpY2F0aW5nOgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW50ZXJlZCBPdXRwdXREdXBsaWNhdGUgY29udGV4
dCBtdWx0aXBsZSB0aW1lcycpCisKKyAgICAgICAgc2VsZi5kdXBsaWNhdGluZyArPSAxCisgICAg
ICAgIHNlbGYuX2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc2VsZi5vdXRwdXQpCisg
ICAgICAgIHNlbGYuX2hhbmRsZXIuc2V0TGV2ZWwobWluKFtsb2dnZXIubGV2ZWwgZm9yIGxvZ2dl
ciBpbiBzZWxmLmxvZ2dlcnNdKSkKKyAgICAgICAgW2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuX2hh
bmRsZXIpIGZvciBsb2dnZXIgaW4gc2VsZi5sb2dnZXJzXQorCisgICAgICAgIHJldHVybiBzdXBl
cihPdXRwdXREdXBsaWNhdGUsIHNlbGYpLl9fZW50ZXJfXygpCisKKyAgICBkZWYgX19leGl0X18o
c2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5kdXBsaWNhdGluZyAtPSAxCisg
ICAgICAgIGlmIHNlbGYuZHVwbGljYXRpbmc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAg
ICBzZWxmLl9oYW5kbGVyLmZsdXNoKCkKKyAgICAgICAgW2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNl
bGYuX2hhbmRsZXIpIGZvciBsb2dnZXIgaW4gc2VsZi5sb2dnZXJzXQorICAgICAgICBzZWxmLl9o
YW5kbGVyID0gTm9uZQorCisgICAgICAgIHN1cGVyKE91dHB1dER1cGxpY2F0ZSwgc2VsZikuX19l
eGl0X18oKmFyZ3MsICoqa3dhcmdzKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9vdXRwdXRfY2FwdHVyZV91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0
Y29yZXB5L3Rlc3RzL291dHB1dF9jYXB0dXJlX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMv
b3V0cHV0X2NhcHR1cmVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisj
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBs
b2csIExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQorCisKK2Ns
YXNzIExvZ2dlckNhcHR1cmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9i
YXNpYyhzZWxmKToKKyAgICAgICAgY2FwdHVyZXIgPSBMb2dnZXJDYXB0dXJlKGxvZykKKyAgICAg
ICAgd2l0aCBjYXB0dXJlciwgTG9nZ2VyQ2FwdHVyZSgpOgorICAgICAgICAgICAgbG9nLmluZm8o
J0hpZGRlbicpCisgICAgICAgICAgICBsb2cud2FybignUHJpbnRlZCcpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjYXB0dXJlci5sb2cuZ2V0dmFsdWUoKSwgJ1ByaW50ZWRcbicpCisKKyAg
ICBkZWYgdGVzdF9sZXZlbChzZWxmKToKKyAgICAgICAgY2FwdHVyZXIgPSBMb2dnZXJDYXB0dXJl
KGxvZywgbGV2ZWw9bG9nZ2luZy5JTkZPKQorICAgICAgICB3aXRoIGNhcHR1cmVyLCBMb2dnZXJD
YXB0dXJlKCk6CisgICAgICAgICAgICBsb2cuZGVidWcoJ0hpZGRlbicpCisgICAgICAgICAgICBs
b2cuaW5mbygnUHJpbnRlZCAxJykKKyAgICAgICAgICAgIGxvZy53YXJuKCdQcmludGVkIDInKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZXIubG9nLmdldHZhbHVlKCksICdQcmlu
dGVkIDFcblByaW50ZWQgMlxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5KHNlbGYp
OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAg
ICAgY2FwdHVyZXIgPSBMb2dnZXJDYXB0dXJlKGxvZywgbGV2ZWw9bG9nZ2luZy5JTkZPKQorICAg
ICAgICAgICAgd2l0aCBjYXB0dXJlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNhcHR1cmVyOgor
ICAgICAgICAgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgT3V0cHV0Q2FwdHVyZVRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBjYXB0
dXJlciA9IE91dHB1dENhcHR1cmUoKQorICAgICAgICB3aXRoIGNhcHR1cmVyOgorICAgICAgICAg
ICAgbG9nLmluZm8oJ0hpZGRlbicpCisgICAgICAgICAgICBsb2cud2FybignUHJpbnRlZCcpCisg
ICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdzdGRvdXRcbicpCisgICAgICAgICAgICBzeXMu
c3RkZXJyLndyaXRlKCdzdGRlcnJcbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0
dXJlci53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICdQcmludGVkXG4nKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLnN0ZG91dC5nZXR2YWx1ZSgpLCAnc3Rkb3V0XG4nKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLnN0ZGVyci5nZXR2YWx1ZSgpLCAnc3Rk
ZXJyXG4nKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZW50cnkoc2VsZik6CisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjYXB0dXJlciA9
IE91dHB1dENhcHR1cmUoKQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlcjoKKyAgICAgICAgICAg
ICAgICB3aXRoIGNhcHR1cmVyOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKworY2xhc3Mg
T3V0cHV0T3V0cHV0RHVwbGljYXRlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRl
c3RfYmFzaWMoc2VsZik6CisgICAgICAgIGNhcHR1cmVyID0gT3V0cHV0Q2FwdHVyZSgpCisgICAg
ICAgIHdpdGggY2FwdHVyZXI6CisgICAgICAgICAgICBkdXBsaWNhdG9yID0gT3V0cHV0RHVwbGlj
YXRlKCkKKyAgICAgICAgICAgIHdpdGggZHVwbGljYXRvcjoKKyAgICAgICAgICAgICAgICBsb2cu
aW5mbygnSGlkZGVuJykKKyAgICAgICAgICAgICAgICBsb2cud2FybignUHJpbnRlZCcpCisgICAg
ICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnc3Rkb3V0XG4nKQorICAgICAgICAgICAgICAg
IHN5cy5zdGRlcnIud3JpdGUoJ3N0ZGVyclxuJykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChkdXBsaWNhdG9yLm91dHB1dC5nZXR2YWx1ZSgpLCAnUHJpbnRlZFxuc3Rkb3V0XG5zdGRl
cnJcbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci53ZWJraXRjb3JlcHku
bG9nLmdldHZhbHVlKCksICdQcmludGVkXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNh
cHR1cmVyLnN0ZG91dC5nZXR2YWx1ZSgpLCAnc3Rkb3V0XG4nKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNhcHR1cmVyLnN0ZGVyci5nZXR2YWx1ZSgpLCAnc3RkZXJyXG4nKQorCisgICAgZGVm
IHRlc3RfbXVsdGlwbGVfZW50cnkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjYXB0dXJlciA9IE91dHB1dER1cGxpY2F0ZSgp
CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVyOgorICAgICAgICAgICAgICAgIHdpdGggY2FwdHVy
ZXI6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9ib3QvaXJjYm90X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9ib3QvaXJjYm90X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNjU0OTkp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L2lyY2JvdF91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDEwIEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHVuaXR0ZXN0
CiAKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRw
dXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRvb2wuYm90IGltcG9ydCBpcmNfY29tbWFuZAogZnJv
bSB3ZWJraXRweS50b29sLmJvdC5xdWV1ZWVuZ2luZSBpbXBvcnQgVGVybWluYXRlUXVldWUKIGZy
b20gd2Via2l0cHkudG9vbC5ib3Quc2hlcmlmZiBpbXBvcnQgU2hlcmlmZgpAQCAtMzgsNiArMzgs
OCBAQCBmcm9tIHdlYmtpdHB5LnRvb2wuYm90LmlyY2JvdCBpbXBvcnQgVW5rCiBmcm9tIHdlYmtp
dHB5LnRvb2wuYm90LnNoZXJpZmZfdW5pdHRlc3QgaW1wb3J0IE1vY2tTaGVyaWZmQm90CiBmcm9t
IHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tUb29sCiAKK2Zyb20gd2Via2l0Y29y
ZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlCisKIAogZGVmIHJ1bihtZXNzYWdlKToKICAgICB0b29s
ID0gTW9ja1Rvb2woKQpAQCAtNjYsOCArNjgsOSBAQCBjbGFzcyBJUkNCb3RUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIm1vY2tfZXhjZXB0
aW9uIikKIAogICAgICAgICBib3QuX3BhcnNlX2NvbW1hbmRfYW5kX2FyZ3MgPSBsYW1iZGEgcmVx
dWVzdDogKENvbW1hbmRXaXRoRXhjZXB0aW9uLCBbXSkKLSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9
ICdNT0NLOiBpcmMucG9zdDogRXhjZXB0aW9uIGV4ZWN1dGluZyBjb21tYW5kOiBtb2NrX2V4Y2Vw
dGlvblxuJwotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgYm90
LnByb2Nlc3NfbWVzc2FnZSwgYXJncz1bIm1vY2tfbmljayIsICJpZ25vcmVkIG1lc3NhZ2UiXSwg
ZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUo
bGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIGJvdC5wcm9jZXNz
X21lc3NhZ2UoJ21vY2tfbmljaycsICdpZ25vcmVkIG1lc3NhZ2UnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksICdNT0NLOiBpcmMucG9zdDog
RXhjZXB0aW9uIGV4ZWN1dGluZyBjb21tYW5kOiBtb2NrX2V4Y2VwdGlvblxuJykKIAogCiAgICAg
ICAgIGNsYXNzIENvbW1hbmRXaXRoRXhjZXB0aW9uKG9iamVjdCk6CkBAIC03Niw3OSArNzksMTQ5
IEBAIGNsYXNzIElSQ0JvdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIGJvdC5f
cGFyc2VfY29tbWFuZF9hbmRfYXJncyA9IGxhbWJkYSByZXF1ZXN0OiAoQ29tbWFuZFdpdGhFeGNl
cHRpb24sIFtdKQogICAgICAgICAjIEtleWJvYXJkSW50ZXJydXB0IGFuZCBTeXN0ZW1FeGl0IGFy
ZSBub3Qgc3ViY2xhc3NlcyBvZiBFeGNlcHRpb24gYW5kIHRodXMgY29ycmVjdGx5IHdpbGwgbm90
IGJlIGNhdWdodC4KLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IGJvdC5wcm9jZXNzX21lc3NhZ2UsIGFyZ3M9WyJtb2NrX25pY2siLCAiaWdub3JlZCBtZXNzYWdl
Il0sIGV4cGVjdGVkX2V4Y2VwdGlvbj1LZXlib2FyZEludGVycnVwdCkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCk6CisgICAgICAgICAgICB3aXRoIE91
dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKToKKyAgICAgICAgICAgICAgICBib3QucHJv
Y2Vzc19tZXNzYWdlKCdtb2NrX25pY2snLCAnaWdub3JlZCBtZXNzYWdlJykKIAogICAgIGRlZiB0
ZXN0X2hpKHNlbGYpOgogICAgICAgICByYW5kb20uc2VlZCgyMzMyNCkKLSAgICAgICAgZXhwZWN0
ZWRfbG9ncyA9ICdNT0NLOiBpcmMucG9zdDogIk9ubHkgeW91IGNhbiBwcmV2ZW50IGZvcmVzdCBm
aXJlcy4iIC0tIFNtb2tleSB0aGUgQmVhclxuJwotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNz
ZXJ0X291dHB1dHMoc2VsZiwgcnVuLCBhcmdzPVsiaGkiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3Rl
ZF9sb2dzKQorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBh
cyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHJ1bignaGknKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgY2FwdHVyZWQucm9vdC5sb2cuZ2V0dmFsdWUoKSwKKyAgICAgICAg
ICAgICdNT0NLOiBpcmMucG9zdDogIk9ubHkgeW91IGNhbiBwcmV2ZW50IGZvcmVzdCBmaXJlcy4i
IC0tIFNtb2tleSB0aGUgQmVhclxuJywKKyAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfaGVscChz
ZWxmKToKLSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICdNT0NLOiBpcmMucG9zdDogbW9ja19uaWNr
OiBBdmFpbGFibGUgY29tbWFuZHM6IGNyZWF0ZS1idWcsIGhlbHAsIGhpLCBwaW5nLCByZXN0YXJ0
LCByZXZlcnQsIHdob2lzLCB5dD9cbk1PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2s6IFR5cGUgIm1v
Y2stc2hlcmlmZi1ib3Q6IGhlbHAgQ09NTUFORCIgZm9yIGhlbHAgb24gbXkgaW5kaXZpZHVhbCBj
b21tYW5kcy5cbicKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IHJ1biwgYXJncz1bImhlbHAiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQotICAgICAg
ICBleHBlY3RlZF9sb2dzID0gJ01PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2s6IFVzYWdlOiBoaVxu
TU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUmVzcG9uZHMgd2l0aCBoaS5cbk1PQ0s6IGlyYy5w
b3N0OiBtb2NrX25pY2s6IEFsaWFzZXM6IGhlbGxvXG4nCi0gICAgICAgIE91dHB1dENhcHR1cmUo
KS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBydW4sIGFyZ3M9WyJoZWxwIGhpIl0sIGV4cGVjdGVkX2xv
Z3M9ZXhwZWN0ZWRfbG9ncykKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRz
KHNlbGYsIHJ1biwgYXJncz1bImhlbHAgaGVsbG8iXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9s
b2dzKQorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBj
YXB0dXJlZDoKKyAgICAgICAgICAgIHJ1bignaGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoCisgICAgICAgICAgICBjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAorICAgICAgICAg
ICAgJycnTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogQXZhaWxhYmxlIGNvbW1hbmRzOiBjcmVh
dGUtYnVnLCBoZWxwLCBoaSwgcGluZywgcmVzdGFydCwgcmV2ZXJ0LCB3aG9pcywgeXQ/CitNT0NL
OiBpcmMucG9zdDogbW9ja19uaWNrOiBUeXBlICJtb2NrLXNoZXJpZmYtYm90OiBoZWxwIENPTU1B
TkQiIGZvciBoZWxwIG9uIG15IGluZGl2aWR1YWwgY29tbWFuZHMuCisnJycsCisgICAgICAgICkK
KworICAgICAgICBleHBlY3RlZF9sb2dzID0gJycnTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazog
VXNhZ2U6IGhpCitNT0NLOiBpcmMucG9zdDogbW9ja19uaWNrOiBSZXNwb25kcyB3aXRoIGhpLgor
TU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogQWxpYXNlczogaGVsbG8KKycnJworICAgICAgICB3
aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKKyAgICAg
ICAgICAgIHJ1bignaGVscCBoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQu
cm9vdC5sb2cuZ2V0dmFsdWUoKSwgZXhwZWN0ZWRfbG9ncykKKworICAgICAgICB3aXRoIE91dHB1
dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHJ1
bignaGVscCBoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQucm9vdC5s
b2cuZ2V0dmFsdWUoKSwgZXhwZWN0ZWRfbG9ncykKIAogICAgIGRlZiB0ZXN0X3Jlc3RhcnQoc2Vs
Zik6Ci0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiTU9DSzogaXJjLnBvc3Q6IFJlc3RhcnRpbmcu
Li5cbiIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHJ1biwg
YXJncz1bInJlc3RhcnQiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzLCBleHBlY3RlZF9l
eGNlcHRpb249VGVybWluYXRlUXVldWUpCisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZl
bD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2Vy
dFJhaXNlcyhUZXJtaW5hdGVRdWV1ZSk6CisgICAgICAgICAgICAgICAgcnVuKCdyZXN0YXJ0JykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLCAn
TU9DSzogaXJjLnBvc3Q6IFJlc3RhcnRpbmcuLi5cbicpCiAKICAgICBkZWYgdGVzdF9yb2xsb3V0
KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0s6IGlyYy5wb3N0OiBtb2NrX25p
Y2s6IFByZXBhcmluZyByZXZlcnQgZm9yIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8yMTY1NCAuLi5cbk1PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2ssIGFiYXJ0aCwgYXAsIGRhcmlu
OiBDcmVhdGVkIGEgcmV2ZXJ0IHBhdGNoOiBodHRwOi8vZXhhbXBsZS5jb20vMzY5MzZcbiIKLSAg
ICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHJ1biwgYXJncz1bInJv
bGxvdXQgMjE2NTQgVGhpcyBwYXRjaCBicm9rZSB0aGUgd29ybGQiXSwgZXhwZWN0ZWRfbG9ncz1l
eHBlY3RlZF9sb2dzKQorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5J
TkZPKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHJ1bigncm9sbG91dCAyMTY1NCBUaGlzIHBh
dGNoIGJyb2tlIHRoZSB3b3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAg
ICAgICBjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJycnTU9DSzog
aXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFyaW5nIHJldmVydCBmb3IgaHR0cHM6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0IC4uLgorTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljaywg
YWJhcnRoLCBhcCwgZGFyaW46IENyZWF0ZWQgYSByZXZlcnQgcGF0Y2g6IGh0dHA6Ly9leGFtcGxl
LmNvbS8zNjkzNgorJycnLAorICAgICAgICApCiAKICAgICBkZWYgdGVzdF9yZXZlcnQoc2VsZik6
Ci0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUHJl
cGFyaW5nIHJldmVydCBmb3IgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0
IC4uLlxuTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljaywgYWJhcnRoLCBhcCwgZGFyaW46IENyZWF0
ZWQgYSByZXZlcnQgcGF0Y2g6IGh0dHA6Ly9leGFtcGxlLmNvbS8zNjkzNlxuIgotICAgICAgICBP
dXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcnVuLCBhcmdzPVsicmV2ZXJ0IDIx
NjU0IFRoaXMgcGF0Y2ggYnJva2UgdGhlIHdvcmxkIl0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRf
bG9ncykKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuSU5GTykgYXMg
Y2FwdHVyZWQ6CisgICAgICAgICAgICBydW4oJ3JldmVydCAyMTY1NCBUaGlzIHBhdGNoIGJyb2tl
IHRoZSB3b3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0
dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJycnTU9DSzogaXJjLnBvc3Q6
IG1vY2tfbmljazogUHJlcGFyaW5nIHJldmVydCBmb3IgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzIxNjU0IC4uLgorTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljaywgYWJhcnRoLCBh
cCwgZGFyaW46IENyZWF0ZWQgYSByZXZlcnQgcGF0Y2g6IGh0dHA6Ly9leGFtcGxlLmNvbS8zNjkz
NgorJycnLAorICAgICAgICApCiAKICAgICBkZWYgdGVzdF9tdWx0aV9yZXZlcnQoc2VsZik6Ci0g
ICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFy
aW5nIHJldmVydCBmb3IgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0LCBo
dHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjE2NTUsIGFuZCBodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjE2NTYgLi4uXG5NT0NLOiBpcmMucG9zdDogbW9ja19uaWNr
LCBhYmFydGgsIGFwLCBkYXJpbjogQ3JlYXRlZCBhIHJldmVydCBwYXRjaDogaHR0cDovL2V4YW1w
bGUuY29tLzM2OTM2XG4iCi0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhz
ZWxmLCBydW4sIGFyZ3M9WyJyZXZlcnQgMjE2NTQgMjE2NTUgMjE2NTYgVGhpcyAyMTY1NCBwYXRj
aCBicm9rZSB0aGUgd29ybGQiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQorICAgICAg
ICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKKyAg
ICAgICAgICAgIHJ1bigncmV2ZXJ0IDIxNjU0IDIxNjU1IDIxNjU2IFRoaXMgMjE2NTQgcGF0Y2gg
YnJva2UgdGhlIHdvcmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCisgICAgICAgICAgICAnJydNT0NLOiBpcmMu
cG9zdDogbW9ja19uaWNrOiBQcmVwYXJpbmcgcmV2ZXJ0IGZvciBodHRwczovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvMjE2NTQsIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8y
MTY1NSwgYW5kIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMTY1NiAuLi4KK01P
Q0s6IGlyYy5wb3N0OiBtb2NrX25pY2ssIGFiYXJ0aCwgYXAsIGRhcmluOiBDcmVhdGVkIGEgcmV2
ZXJ0IHBhdGNoOiBodHRwOi8vZXhhbXBsZS5jb20vMzY5MzYKKycnJywKKyAgICAgICAgKQogCiAg
ICAgZGVmIHRlc3RfcmV2ZXJ0X3dpdGhfcl9pbl9zdm5fcmV2aXNpb24oc2VsZik6Ci0gICAgICAg
IGV4cGVjdGVkX2xvZ3MgPSAiTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFyaW5nIHJl
dmVydCBmb3IgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0IC4uLlxuTU9D
SzogaXJjLnBvc3Q6IG1vY2tfbmljaywgYWJhcnRoLCBhcCwgZGFyaW46IENyZWF0ZWQgYSByZXZl
cnQgcGF0Y2g6IGh0dHA6Ly9leGFtcGxlLmNvbS8zNjkzNlxuIgotICAgICAgICBPdXRwdXRDYXB0
dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcnVuLCBhcmdzPVsicmV2ZXJ0IHIyMTY1NCBUaGlz
IHBhdGNoIGJyb2tlIHRoZSB3b3JsZCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCisg
ICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVk
OgorICAgICAgICAgICAgcnVuKCdyZXZlcnQgcjIxNjU0IFRoaXMgcGF0Y2ggYnJva2UgdGhlIHdv
cmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnJv
b3QubG9nLmdldHZhbHVlKCksCisgICAgICAgICAgICAnJydNT0NLOiBpcmMucG9zdDogbW9ja19u
aWNrOiBQcmVwYXJpbmcgcmV2ZXJ0IGZvciBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMjE2NTQgLi4uCitNT0NLOiBpcmMucG9zdDogbW9ja19uaWNrLCBhYmFydGgsIGFwLCBkYXJp
bjogQ3JlYXRlZCBhIHJldmVydCBwYXRjaDogaHR0cDovL2V4YW1wbGUuY29tLzM2OTM2CisnJycs
CisgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X211bHRpX3JldmVydF93aXRoX3JfaW5fc3ZuX3Jl
dmlzaW9uKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0s6IGlyYy5wb3N0OiBt
b2NrX25pY2s6IFByZXBhcmluZyByZXZlcnQgZm9yIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8yMTY1NCwgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU1LCBh
bmQgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU2IC4uLlxuTU9DSzogaXJj
LnBvc3Q6IG1vY2tfbmljaywgYWJhcnRoLCBhcCwgZGFyaW46IENyZWF0ZWQgYSByZXZlcnQgcGF0
Y2g6IGh0dHA6Ly9leGFtcGxlLmNvbS8zNjkzNlxuIgotICAgICAgICBPdXRwdXRDYXB0dXJlKCku
YXNzZXJ0X291dHB1dHMoc2VsZiwgcnVuLCBhcmdzPVsicmV2ZXJ0IHIyMTY1NCAyMTY1NSByMjE2
NTYgVGhpcyByMjE2NTQgcGF0Y2ggYnJva2UgdGhlIHdvcmxkIl0sIGV4cGVjdGVkX2xvZ3M9ZXhw
ZWN0ZWRfbG9ncykKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuSU5G
TykgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBydW4oJ3JldmVydCByMjE2NTQgMjE2NTUgcjIx
NjU2IFRoaXMgcjIxNjU0IHBhdGNoIGJyb2tlIHRoZSB3b3JsZCcpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAorICAg
ICAgICAgICAgJycnTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFyaW5nIHJldmVydCBm
b3IgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0LCBodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjE2NTUsIGFuZCBodHRwczovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMjE2NTYgLi4uCitNT0NLOiBpcmMucG9zdDogbW9ja19uaWNrLCBhYmFydGgsIGFw
LCBkYXJpbjogQ3JlYXRlZCBhIHJldmVydCBwYXRjaDogaHR0cDovL2V4YW1wbGUuY29tLzM2OTM2
CisnJycsCisgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X3JldmVydF9iYW5hbmFzKHNlbGYpOgot
ICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2s6IFVzYWdl
OiByZXZlcnQgU1ZOX1JFVklTSU9OIFtTVk5fUkVWSVNJT05TXSBSRUFTT05cbiIKLSAgICAgICAg
T3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHJ1biwgYXJncz1bInJldmVydCBi
YW5hbmFzIl0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykKKyAgICAgICAgd2l0aCBPdXRw
dXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuSU5GTykgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBy
dW4oJ3JldmVydCBiYW5hbmFzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAg
ICAgIGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCisgICAgICAgICAgICAnTU9DSzogaXJj
LnBvc3Q6IG1vY2tfbmljazogVXNhZ2U6IHJldmVydCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJU0lP
TlNdIFJFQVNPTlxuJywKKyAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfcmV2ZXJ0X2ludmFsaWRh
dGVfcmV2aXNpb24oc2VsZik6CiAgICAgICAgICMgV2hlbiBmb2xrcyBwYXNzIGp1bmsgYXJndW1l
bnRzLCB3ZSBzaG91bGQganVzdCBzcGl0IHRoZSB1c2FnZSBiYWNrIGF0IHRoZW0uCi0gICAgICAg
IGV4cGVjdGVkX2xvZ3MgPSAiTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogVXNhZ2U6IHJldmVy
dCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJU0lPTlNdIFJFQVNPTlxuIgotICAgICAgICBPdXRwdXRD
YXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcnVuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJncz1bInJldmVydCAtLWNvbXBvbmVudD1Ub29scyAyMTY1NCJd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbG9ncz1l
eHBlY3RlZF9sb2dzKQorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5J
TkZPKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHJ1bigncmV2ZXJ0IC0tY29tcG9uZW50PVRv
b2xzIDIxNjU0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1
cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCisgICAgICAgICAgICAnTU9DSzogaXJjLnBvc3Q6IG1v
Y2tfbmljazogVXNhZ2U6IHJldmVydCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJU0lPTlNdIFJFQVNP
TlxuJywKKyAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfcmV2ZXJ0X2ludmFsaWRhdGVfcmVhc29u
KHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBJJ20gc2xpZ2h0bHkgY29uZnVzZWQgYXMgdG8gd2h5
IHRoaXMgZG9lc24ndCByZXR1cm4gdGhlIFVTQUdFIG1lc3NhZ2UuCi0gICAgICAgIGV4cGVjdGVk
X2xvZ3MgPSAiIiJNT0NLOiBpcmMucG9zdDogbW9ja19uaWNrOiBQcmVwYXJpbmcgcmV2ZXJ0IGZv
ciBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjE2NTQgLi4uCisgICAgICAgIHdp
dGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgorICAgICAg
ICAgICAgcnVuKCdyZXZlcnQgMjE2NTQgLWJhZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
CisgICAgICAgICAgICBjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAg
JycnTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFyaW5nIHJldmVydCBmb3IgaHR0cHM6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0IC4uLgogTU9DSzogaXJjLnBvc3Q6IG1v
Y2tfbmljaywgYWJhcnRoLCBhcCwgZGFyaW46IEZhaWxlZCB0byBjcmVhdGUgcmV2ZXJ0IHBhdGNo
OgogTU9DSzogaXJjLnBvc3Q6IFRoZSByZXZlcnQgcmVhc29uIG1heSBub3QgYmVnaW4gd2l0aCAt
IChcIi1iYWQgKFJlcXVlc3RlZCBieSBtb2NrX25pY2sgb24gI3dlYmtpdCkuXCIpLgotIiIiCi0g
ICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBydW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPVsicmV2ZXJ0IDIxNjU0IC1iYWQi
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xvZ3M9
ZXhwZWN0ZWRfbG9ncykKKycnJywKKyAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfbXVsdGlfcmV2
ZXJ0X2ludmFsaWRhdGVfcmVhc29uKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIi
TU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFyaW5nIHJldmVydCBmb3IgaHR0cHM6Ly90
cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0LCBodHRwczovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMjE2NTUsIGFuZCBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjE2
NTYgLi4uCisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFz
IGNhcHR1cmVkOgorICAgICAgICAgICAgcnVuKCdyZXZlcnQgMjE2NTQgMjE2NTUgcjIxNjU2IC1i
YWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVyZWQucm9v
dC5sb2cuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICcnJ01PQ0s6IGlyYy5wb3N0OiBtb2NrX25p
Y2s6IFByZXBhcmluZyByZXZlcnQgZm9yIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8yMTY1NCwgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU1LCBhbmQgaHR0
cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU2IC4uLgogTU9DSzogaXJjLnBvc3Q6
IG1vY2tfbmljaywgYWJhcnRoLCBhcCwgZGFyaW46IEZhaWxlZCB0byBjcmVhdGUgcmV2ZXJ0IHBh
dGNoOgogTU9DSzogaXJjLnBvc3Q6IFRoZSByZXZlcnQgcmVhc29uIG1heSBub3QgYmVnaW4gd2l0
aCAtIChcIi1iYWQgKFJlcXVlc3RlZCBieSBtb2NrX25pY2sgb24gI3dlYmtpdCkuXCIpLgotIiIi
Ci0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBydW4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPVsicmV2ZXJ0ICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMTY1NCAyMTY1NSByMjE2
NTYgLWJhZCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0
ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQorJycnLAorICAgICAgICApCiAKICAgICBkZWYgdGVzdF9y
ZXZlcnRfbm9fcmVhc29uKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0s6IGly
Yy5wb3N0OiBtb2NrX25pY2s6IFVzYWdlOiByZXZlcnQgU1ZOX1JFVklTSU9OIFtTVk5fUkVWSVNJ
T05TXSBSRUFTT05cbiIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNl
bGYsIHJ1biwgYXJncz1bInJldmVydCAyMTY1NCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xv
Z3MpCi0KLSAgICBkZWYgdGVzdF9tdWx0aV9yZXZlcnRfbm9fcmVhc29uKHNlbGYpOgotICAgICAg
ICBleHBlY3RlZF9sb2dzID0gIk1PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2s6IFVzYWdlOiByZXZl
cnQgU1ZOX1JFVklTSU9OIFtTVk5fUkVWSVNJT05TXSBSRUFTT05cbiIKLSAgICAgICAgT3V0cHV0
Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHJ1biwgYXJncz1bInJldmVydCAyMTY1NCAy
MTY1NSByMjE2NTYiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQorICAgICAgICB3aXRo
IE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKKyAgICAgICAg
ICAgIHJ1bigncmV2ZXJ0IDIxNjU0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCisgICAgICAgICAgICAnTU9DSzog
aXJjLnBvc3Q6IG1vY2tfbmljazogVXNhZ2U6IHJldmVydCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJ
U0lPTlNdIFJFQVNPTlxuJywKKyAgICAgICAgKQorCisgICAgZGVmIF90ZXN0X211bHRpX3JldmVy
dF9ub19yZWFzb24oc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dn
aW5nLklORk8pIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgcnVuKCdyZXZlcnQgMjE2NTQgMjE2
NTUgcjIxNjU2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1
cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCisgICAgICAgICAgICAnTU9DSzogaXJjLnBvc3Q6IG1v
Y2tfbmljazogVXNhZ2U6IHJldmVydCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJU0lPTlNdIFJFQVNP
TlxuJywKKyAgICAgICAgKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZl
cnMvZ2FyZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlcl91bml0dGVzdC5weQkocmV2
aXNpb24gMjY1NDk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2Fy
ZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBA
IGltcG9ydCBqc29uCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0ICoK
IGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgYnVpbGRlcnMKIGZyb20gd2Via2l0cHkudGhpcmRw
YXJ0eS5tb2NrIGltcG9ydCBNb2NrCkBAIC00MCw2ICszOSw4IEBAIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmVfbW8KIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBp
bXBvcnQgTW9ja0hvc3QKIGZyb20gd2Via2l0cHkudG9vbC5zZXJ2ZXJzLmdhcmRlbmluZ3NlcnZl
ciBpbXBvcnQgKgogCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorCiAK
IGNsYXNzIFRlc3RQb3J0RmFjdG9yeShvYmplY3QpOgogICAgICMgRklYTUU6IFdoeSBpcyB0aGlz
IGEgY2xhc3MgbWV0aG9kPwpAQCAtODksNyArOTAsMTAgQEAgY2xhc3MgR2FyZGVuaW5nU2VydmVy
VGVzdCh1bml0dGVzdC5UZXN0QwogICAgICAgICBoYW5kbGVyID0gVGVzdEdhcmRlbmluZ0hUVFBS
ZXF1ZXN0SGFuZGxlcihzZXJ2ZXIgb3IgTW9ja1NlcnZlcigpKQogICAgICAgICBoYW5kbGVyLnBh
dGggPSBwYXRoCiAgICAgICAgIGhhbmRsZXIuYm9keSA9IGJvZHkKLSAgICAgICAgT3V0cHV0Q2Fw
dHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGhhbmRsZXIuZG9fUE9TVCwgZXhwZWN0ZWRfc3Rk
ZXJyPWV4cGVjdGVkX3N0ZGVyciwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKKyAg
ICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBoYW5k
bGVyLmRvX1BPU1QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dCwg
ZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZGVy
ciwgZXhwZWN0ZWRfc3RkZXJyKQogCiAgICAgZGVmIGRpc2FibGVkX3Rlc3RfcmV2ZXJ0KHNlbGYp
OgogICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywg
J3JldmVydCcsICctLWZvcmNlLWNsZWFuJywgJy0tbm9uLWludGVyYWN0aXZlJywgJzIzMTQnLCAn
TU9DSyByZXZlcnQgcmVhc29uJ10sIGN3ZD0vbW9jay1jaGVja291dFxuIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406654</attachid>
            <date>2020-08-14 21:39:56 -0700</date>
            <delta_ts>2020-08-14 21:49:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215380-20200814213955.patch</filename>
            <type>text/plain</type>
            <size>15765</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NTcyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTA4LTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgT3V0cHV0Q2FwdHVyZSB0byB3ZWJraXRj
b3JlcHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTM4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjY4NDYzODQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggd2Via2l0cHkgaGFzIGFu
IE91dHB1dENhcHR1cmUgY2xhc3MsIHRoYXQgY2xhc3MgZG9lcyBub3Qgc2VwYXJhdGUgbG9nZ2lu
ZyBmcm9tCisgICAgICAgIHN0ZG91dCBhbmQgc3RkZXJyLCB3aGljaCBtYWtlcyB0aGUgQVBJIGxl
c3MgdXNlZnVsLiBUaGlzIHZlcnNpb24gb2YgdGhlIE91dHB1dENhcHR1cmUgY2xhc3MKKyAgICAg
ICAgaXMgaW5zcGlyZWQgYnkgdGhlIG9uZSBpbiB3ZWJraXRweSwgYnV0IHdpdGggYSBjbGVhbmVy
IGludGVyZmFjZS4KKworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9S
RUFETUUubWQ6IERvY3VtZW50IHVzYWdlIG9mIE91dHB1dENhcHR1cmUuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRXhw
b3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUgYW5kCisgICAgICAgIE91dHB1dER1cGxp
Y2F0ZSBhcyBBUEksIGJ1bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5OiBBZGRlZC4KKyAgICAg
ICAgKExvZ2dlckNhcHR1cmUpOiBDYXB0dXJlIGxvZ3MgYXQgc29tZSBsZXZlbCBmb3IgdGhlIGR1
cmF0aW9uIG9mIHRoZSBpbnRlcmZhY2UuCisgICAgICAgIChPdXRwdXRDYXB0dXJlKTogQ2FwdHVy
ZSBzdGRvdXQsIHN0ZGVyciBhbmQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMgZm9yIHRoZSBkdXJhdGlv
biBvZiB0aGUgaW50ZXJmYWNlLgorICAgICAgICAoT3V0cHV0Q2FwdHVyZS5SZXBsYWNlU3lzU3Ry
ZWFtKTogUmVwbGFjZSBzeXMuc3Rkb3V0IG9yIHN5cy5zdGRlcnIgZm9yIGEgYmxvY2suCisgICAg
ICAgIChPdXRwdXREdXBsaWNhdGUpOiBDb250ZXh0IHdoaWNoIGNhbiBkdXBsaWNhdGUgYWxsIG91
dHB1dCBmb3IgYSBibG9jayBvZiBjb2RlLiBUaGlzIGlzIHVzZWZ1bCB0byBib3RoIHByaW50IGFu
ZAorICAgICAgICBjYXB0dXJlIGxvZ3MuCisgICAgICAgIChPdXRwdXREdXBsaWNhdGUuU3RyZWFt
KTogRmlsZS1saWtlIG9iamVjdCB0aGF0IHJvdXRlcyBvdXRwdXQgdG8gbXVsdGlwbGUgZmlsZS1s
aWtlIG9iamVjdHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS90ZXN0cy9vdXRwdXRfY2FwdHVyZV91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChMb2dnZXJDYXB0dXJlVGVzdCk6CisgICAgICAgIChPdXRwdXRDYXB0dXJlVGVzdCk6Cisg
ICAgICAgIChPdXRwdXRPdXRwdXREdXBsaWNhdGVUZXN0KToKKwogMjAyMC0wOC0xNCAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdGNvcmVweV0g
QWRkIGEgTnVsbEhhbmRsZXIgdG8gbG9nZ2VyCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRjb3JlcHkvUkVBRE1FLm1kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHJldmlzaW9uIDI2NTcyNykKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDMgKzQzLDE3IEBAIHdpdGggbW9ja3MuVGltZToKICAgICBzdGFtcCA9IHRpbWUudGlt
ZSgpCiAgICAgdGltZS5zbGVlcCg1KQogYGBgCitDYXB0dXJpbmcgc3Rkb3V0LCBzdGRlcnIgYW5k
IGxvZ2dpbmcgb3V0cHV0IGZvciB0ZXN0aW5nCitgYGAKK2NhcHR1cmVyID0gT3V0cHV0Q2FwdHVy
ZSgpCit3aXRoIGNhcHR1cmVyOgorICAgIHByaW50KCdkYXRhXG4nKQorYXNzZXJ0IGNhcHR1cmVy
LnN0ZG91dC5nZXR2YWx1ZSgpID09ICdkYXRhXG4nCitgYGAKK0NhcHR1cmluZyBzdGRvdXQsIHN0
ZGVyciBhbmQgbG9nZ2luZyBvdXRwdXQgZm9yIHRlc3RpbmcKK2BgYAorY2FwdHVyZXIgPSBPdXRw
dXRDYXB0dXJlKCkKK3dpdGggY2FwdHVyZXI6CisgICAgcHJpbnQoJ2RhdGFcbicpCithc3NlcnQg
Y2FwdHVyZXIuc3Rkb3V0LmdldHZhbHVlKCkgPT0gJ2RhdGFcbicKK2BgYApJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0
Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjU3MjcpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw4ICszMSw5IEBAIGxvZy5hZGRIYW5kbGVyKE51bGxIYW5kbGVyKCkpCiAKIGZy
b20gd2Via2l0Y29yZXB5LnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0Y29yZXB5
LnN0cmluZ191dGlscyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8sIFVuaWNvZGVJTywgdW5pY29k
ZQorZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUs
IE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAy
LCAzKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMiwgNCkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0
b2luc3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZv
ID4gKDMsIDApOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS9vdXRwdXRfY2FwdHVyZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJr
aXRjb3JlcHkvb3V0cHV0X2NhcHR1cmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
IyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGNvbnRleHRs
aWIKK2ltcG9ydCBpbworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRj
b3JlcHkgaW1wb3J0IGxvZywgbW9ja3MKK2Zyb20gd2Via2l0Y29yZXB5LnN0cmluZ191dGlscyBp
bXBvcnQgU3RyaW5nSU8KKworCitjbGFzcyBMb2dnZXJDYXB0dXJlKG9iamVjdCk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGxvZ2dlcj1Ob25lLCBsZXZlbD1sb2dnaW5nLldBUk5JTkcpOgorICAg
ICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlciBvciBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAg
IHNlbGYubGV2ZWwgPSBsZXZlbAorCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbF9z
dGFjayA9IFtdCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2hhbmRsZXJzX3N0YWNrID0gW10KKyAg
ICAgICAgc2VsZi5faGFuZGxlcl9zdGFjayA9IFtdCisgICAgICAgIHNlbGYubG9nID0gU3RyaW5n
SU8oKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxf
bG9nX2xldmVsX3N0YWNrLmFwcGVuZChzZWxmLmxvZ2dlci5sZXZlbCkKKworICAgICAgICBzZWxm
Ll9vcmlnaW5hbF9oYW5kbGVyc19zdGFjay5hcHBlbmQoW2hhbmRsZXIgZm9yIGhhbmRsZXIgaW4g
c2VsZi5sb2dnZXIuaGFuZGxlcnNdKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLl9vcmln
aW5hbF9oYW5kbGVyc19zdGFja1stMV06CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVI
YW5kbGVyKGhhbmRsZXIpCisKKyAgICAgICAgY29udGV4dF9oYW5kbGVyID0gbG9nZ2luZy5TdHJl
YW1IYW5kbGVyKHNlbGYubG9nKQorICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrLmFwcGVuZChj
b250ZXh0X2hhbmRsZXIpCisgICAgICAgIGNvbnRleHRfaGFuZGxlci5zZXRMZXZlbChzZWxmLmxl
dmVsKQorCisgICAgICAgIHNlbGYubG9nZ2VyLmFkZEhhbmRsZXIoY29udGV4dF9oYW5kbGVyKQor
ICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorCisgICAgICAgIHJldHVy
biBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAg
ICAgaWYgc2VsZi5faGFuZGxlcl9zdGFjazoKKyAgICAgICAgICAgIHRvX3JlbW92ZSA9IHNlbGYu
X2hhbmRsZXJfc3RhY2sucG9wKCkKKyAgICAgICAgICAgIHRvX3JlbW92ZS5mbHVzaCgpCisgICAg
ICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVIYW5kbGVyKHRvX3JlbW92ZSkKKworICAgICAgICBp
ZiBzZWxmLl9vcmlnaW5hbF9sb2dfbGV2ZWxfc3RhY2s6CisgICAgICAgICAgICBzZWxmLmxvZ2dl
ci5zZXRMZXZlbChzZWxmLl9vcmlnaW5hbF9sb2dfbGV2ZWxfc3RhY2sucG9wKCkpCisKKyAgICAg
ICAgaWYgc2VsZi5fb3JpZ2luYWxfaGFuZGxlcnNfc3RhY2sgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLl9vcmlnaW5hbF9oYW5kbGVyc19zdGFjay5wb3AoKToK
KyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKworY2xh
c3MgT3V0cHV0Q2FwdHVyZShtb2Nrcy5Db250ZXh0U3RhY2spOgorICAgIHRvcCA9IE5vbmUKKwor
ICAgIGNsYXNzIFJlcGxhY2VTeXNTdHJlYW0ob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG5hbWUsIHN0cmVhbSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAg
ICAgICAgICBpZiBzZWxmLm5hbWUgbm90IGluIHsnc3Rkb3V0JywgJ3N0ZGVycid9OgorICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScgaXMgbm90IGEgdmFsaWQgc3lzdGVtIHN0
cmVhbSBuYW1lIi5mb3JtYXQoc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtID0g
c3RyZWFtCisgICAgICAgICAgICBzZWxmLm9yaWdpbmFscyA9IFtdCisKKyAgICAgICAgZGVmIF9f
ZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxzLmFwcGVuZChnZXRhdHRy
KHN5cywgc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNl
bGYuc3RyZWFtKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgX19leGl0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxm
Lm5hbWUsIHNlbGYub3JpZ2luYWxzLnBvcCgpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxv
Z2dlcnM9Tm9uZSwgbGV2ZWw9bG9nZ2luZy5XQVJOSU5HKToKKyAgICAgICAgc3VwZXIoT3V0cHV0
Q2FwdHVyZSwgc2VsZikuX19pbml0X18oY2xzPU91dHB1dENhcHR1cmUpCisKKyAgICAgICAgc2Vs
Zi5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYuc3RkZXJyID0gU3RyaW5nSU8oKQor
CisgICAgICAgIGlmIG5vdCBsb2dnZXJzOgorICAgICAgICAgICAgbG9nZ2VycyA9IFtsb2dnaW5n
LmdldExvZ2dlcigpLCBsb2ddCisKKyAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVuZChzZWxmLlJl
cGxhY2VTeXNTdHJlYW0oJ3N0ZG91dCcsIHNlbGYuc3Rkb3V0KSkKKyAgICAgICAgc2VsZi5wYXRj
aGVzLmFwcGVuZChzZWxmLlJlcGxhY2VTeXNTdHJlYW0oJ3N0ZGVycicsIHNlbGYuc3RkZXJyKSkK
KworICAgICAgICBmb3IgbG9nZ2VyIGluIGxvZ2dlcnM6CisgICAgICAgICAgICBpZiBsb2dnZXIu
bmFtZSBpbiBbJ3N0ZG91dCcsICdzdGRlcnInLCAncGF0Y2hlcycsICd0b3AnXToKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBjb2xsaWRlcyB3aXRoIGFuIE91dHB1dENhcHR1
cmUgbWVtYmVyJy5mb3JtYXQobG9nZ2VyLm5hbWUpKQorICAgICAgICAgICAgbGMgPSBMb2dnZXJD
YXB0dXJlKGxvZ2dlciwgbGV2ZWwpCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGxvZ2dlci5u
YW1lLCBsYykKKyAgICAgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQobGMpCisKKworY2xhc3Mg
T3V0cHV0RHVwbGljYXRlKG1vY2tzLkNvbnRleHRTdGFjayk6CisgICAgdG9wID0gTm9uZQorCisg
ICAgY2xhc3MgU3RyZWFtKGlvLklPQmFzZSk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAq
dGFyZ2V0cyk6CisgICAgICAgICAgICBpZiBub3QgdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdObyB0YXJnZXQgc3RyZWFtcyBwcm92aWRlZCcpCisgICAgICAgICAg
ICBzZWxmLnRhcmdldHMgPSB0YXJnZXRzCisKKyAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgorICAg
ICAgICAgICAgW3RhcmdldC5mbHVzaCgpIGZvciB0YXJnZXQgaW4gc2VsZi50YXJnZXRzXQorCisg
ICAgICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpbmVzKToKKyAgICAgICAgICAgIFt0YXJnZXQu
d3JpdGVsaW5lcyhsaW5lcykgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHNdCisKKyAgICAgICAg
ZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICAgICAgW3RhcmdldC53cml0ZShiKSBmb3IgdGFy
Z2V0IGluIHNlbGYudGFyZ2V0c10KKyAgICAgICAgICAgIHJldHVybiBsZW4oYikKKworICAgICAg
ICBAcHJvcGVydHkKKyAgICAgICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVy
biBhbGwoW3RhcmdldC5jbG9zZWQgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHNdKQorCisgICAg
ICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgZmls
ZW5vKHNlbGYpOgorICAgICAgICAgICAgIyBVc2UgdGhlIGZpcnN0IHZhbGlkIGZpbGUgbnVtYmVy
CisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0czoKKyAgICAgICAgICAgICAg
ICBpZiB0YXJnZXQuZmlsZW5vKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQu
ZmlsZW5vKCkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZGVmIGlzYXR0eShz
ZWxmKToKKyAgICAgICAgICAgIHJldHVybiBhbnkoW3RhcmdldC5pc2F0dHkoKSBmb3IgdGFyZ2V0
IGluIHNlbGYudGFyZ2V0c10pCisKKyAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEp
OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVm
IHJlYWRsaW5lcyhzZWxmLCBoaW50PS0xKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoKQorCisgICAgICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPWlvLlNF
RUtfU0VUKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAg
ICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
ICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cigpCisKKyAgICAgICAgZGVmIHRydW5jYXRlKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgd3JpdGFibGUoc2Vs
Zik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxv
Z2dlcnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKE91dHB1dER1cGxpY2F0ZSwgc2VsZikuX19pbml0
X18oY2xzPU91dHB1dER1cGxpY2F0ZSkKKworICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lP
KCkKKyAgICAgICAgc2VsZi5sb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCldIG9yIGxvZ2dl
cnMKKworICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fc3Ry
ZWFtc19zdGFjayA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxm
Ll9zdHJlYW1zX3N0YWNrLmFwcGVuZCgoCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlLlJlcGxh
Y2VTeXNTdHJlYW0oJ3N0ZG91dCcsIHNlbGYuU3RyZWFtKHN5cy5zdGRvdXQsIHNlbGYub3V0cHV0
KSkuX19lbnRlcl9fKCksCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlLlJlcGxhY2VTeXNTdHJl
YW0oJ3N0ZGVycicsIHNlbGYuU3RyZWFtKHN5cy5zdGRlcnIsIHNlbGYub3V0cHV0KSkuX19lbnRl
cl9fKCksCisgICAgICAgICkpCisKKyAgICAgICAgY29udGV4dF9oYW5kbGVyID0gbG9nZ2luZy5T
dHJlYW1IYW5kbGVyKHNlbGYub3V0cHV0KQorICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrLmFw
cGVuZChjb250ZXh0X2hhbmRsZXIpCisgICAgICAgIGNvbnRleHRfaGFuZGxlci5zZXRMZXZlbCht
aW4oW2xvZ2dlci5sZXZlbCBmb3IgbG9nZ2VyIGluIHNlbGYubG9nZ2Vyc10pKQorICAgICAgICBb
bG9nZ2VyLmFkZEhhbmRsZXIoY29udGV4dF9oYW5kbGVyKSBmb3IgbG9nZ2VyIGluIHNlbGYubG9n
Z2Vyc10KKworICAgICAgICByZXR1cm4gc3VwZXIoT3V0cHV0RHVwbGljYXRlLCBzZWxmKS5fX2Vu
dGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgIHN1cGVyKE91dHB1dER1cGxpY2F0ZSwgc2VsZikuX19leGl0X18oKmFyZ3MsICoqa3dhcmdz
KQorCisgICAgICAgIGNvbnRleHRfaGFuZGxlciA9IHNlbGYuX2hhbmRsZXJfc3RhY2sucG9wKCkK
KyAgICAgICAgY29udGV4dF9oYW5kbGVyLmZsdXNoKCkKKyAgICAgICAgW2xvZ2dlci5yZW1vdmVI
YW5kbGVyKGNvbnRleHRfaGFuZGxlcikgZm9yIGxvZ2dlciBpbiBzZWxmLmxvZ2dlcnNdCisKKyAg
ICAgICAgc3Rkb3V0X3N0cmVhbSwgc3RkZXJyX3N0cmVhbSA9IHNlbGYuX3N0cmVhbXNfc3RhY2su
cG9wKCkKKyAgICAgICAgc3Rkb3V0X3N0cmVhbS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisg
ICAgICAgIHN0ZGVycl9zdHJlYW0uX19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9vdXRw
dXRfY2FwdHVyZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL291dHB1dF9jYXB0dXJlX3VuaXR0
ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvdGVzdHMvb3V0cHV0X2NhcHR1cmVfdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
IyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitm
cm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbG9nLCBMb2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJl
LCBPdXRwdXREdXBsaWNhdGUKKworCitjbGFzcyBMb2dnZXJDYXB0dXJlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHdpdGggTG9nZ2Vy
Q2FwdHVyZShsb2cpIGFzIGNhcHR1cmVyLCBMb2dnZXJDYXB0dXJlKCk6CisgICAgICAgICAgICBs
b2cuaW5mbygnSGlkZGVuJykKKyAgICAgICAgICAgIGxvZy53YXJuKCdQcmludGVkJykKKworICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLmxvZy5nZXR2YWx1ZSgpLCAnUHJpbnRlZFxu
JykKKworICAgIGRlZiB0ZXN0X2xldmVsKHNlbGYpOgorICAgICAgICB3aXRoIExvZ2dlckNhcHR1
cmUobG9nLCBsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVyLCBMb2dnZXJDYXB0dXJlKCk6
CisgICAgICAgICAgICBsb2cuZGVidWcoJ0hpZGRlbicpCisgICAgICAgICAgICBsb2cuaW5mbygn
UHJpbnRlZCAxJykKKyAgICAgICAgICAgIGxvZy53YXJuKCdQcmludGVkIDInKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZXIubG9nLmdldHZhbHVlKCksICdQcmludGVkIDFcblBy
aW50ZWQgMlxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5KHNlbGYpOgorICAgICAg
ICB3aXRoIExvZ2dlckNhcHR1cmUobG9nLCBsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVy
LCBMb2dnZXJDYXB0dXJlKCk6CisgICAgICAgICAgICBsb2cuaW5mbygnTGV2ZWwgMScpCisgICAg
ICAgICAgICB3aXRoIGNhcHR1cmVyOgorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCdMZXZlbCAy
JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLmxvZy5nZXR2YWx1ZSgpLCAn
TGV2ZWwgMVxuTGV2ZWwgMlxuJykKKworCitjbGFzcyBPdXRwdXRDYXB0dXJlVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHdpdGggT3V0
cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVyOgorICAgICAgICAgICAgbG9nLmluZm8oJ0hpZGRlbicp
CisgICAgICAgICAgICBsb2cud2FybignUHJpbnRlZCcpCisgICAgICAgICAgICBzeXMuc3Rkb3V0
LndyaXRlKCdzdGRvdXRcbicpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdzdGRlcnJc
bicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci53ZWJraXRjb3JlcHkubG9n
LmdldHZhbHVlKCksICdQcmludGVkXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1
cmVyLnN0ZG91dC5nZXR2YWx1ZSgpLCAnc3Rkb3V0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGNhcHR1cmVyLnN0ZGVyci5nZXR2YWx1ZSgpLCAnc3RkZXJyXG4nKQorCisgICAgZGVmIHRl
c3RfbXVsdGlwbGVfZW50cnkoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFz
IGNhcHR1cmVkOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnTGluZSAxXG4nKQorICAg
ICAgICAgICAgbG9nLndhcm4oJ0xvZyAxJykKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWQ6Cisg
ICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnTGluZSAyXG4nKQorICAgICAgICAgICAg
ICAgIGxvZy53YXJuKCdMb2cgMicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJl
ZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICdMb2cgMVxuTG9nIDJcbicpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICdMaW5lIDFcbkxp
bmUgMlxuJykKKworCitjbGFzcyBPdXRwdXRPdXRwdXREdXBsaWNhdGVUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRD
YXB0dXJlKCkgYXMgY2FwdHVyZXI6CisgICAgICAgICAgICB3aXRoIE91dHB1dER1cGxpY2F0ZSgp
IGFzIGR1cGxpY2F0b3I6CisgICAgICAgICAgICAgICAgbG9nLmluZm8oJ0hpZGRlbicpCisgICAg
ICAgICAgICAgICAgbG9nLndhcm4oJ1ByaW50ZWQnKQorICAgICAgICAgICAgICAgIHN5cy5zdGRv
dXQud3JpdGUoJ3N0ZG91dFxuJykKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdz
dGRlcnJcbicpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwbGljYXRvci5vdXRw
dXQuZ2V0dmFsdWUoKSwgJ1ByaW50ZWRcbnN0ZG91dFxuc3RkZXJyXG4nKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY2FwdHVyZXIud2Via2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLCAnUHJp
bnRlZFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRvdXQuZ2V0dmFs
dWUoKSwgJ3N0ZG91dFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRl
cnIuZ2V0dmFsdWUoKSwgJ3N0ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5
KHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBh
cyBjYXB0dWVyZWQ6CisgICAgICAgICAgICB3aXRoIE91dHB1dER1cGxpY2F0ZSgpIGFzIGR1cGxp
Y2F0b3I6CisgICAgICAgICAgICAgICAgbG9nLmluZm8oJ0xvZyAxJykKKyAgICAgICAgICAgICAg
ICBzeXMuc3Rkb3V0LndyaXRlKCdMZXZlbCAxXG4nKQorICAgICAgICAgICAgICAgIHdpdGggZHVw
bGljYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oJ0xvZyAyJykKKyAgICAgICAg
ICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnTGV2ZWwgMlxuJykKKworICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChkdXBsaWNhdG9yLm91dHB1dC5nZXR2YWx1ZSgpLCAnTG9nIDFcbkxl
dmVsIDFcbkxvZyAyXG5Mb2cgMlxuTGV2ZWwgMlxuTGV2ZWwgMlxuJykKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNhcHR1ZXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICdMb2cg
MVxuTG9nIDJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVlcmVkLnN0ZG91dC5n
ZXR2YWx1ZSgpLCAnTGV2ZWwgMVxuTGV2ZWwgMlxuJykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406655</attachid>
            <date>2020-08-14 21:48:12 -0700</date>
            <delta_ts>2020-08-17 12:51:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215380-20200814214811.patch</filename>
            <type>text/plain</type>
            <size>15759</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NTcyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTA4LTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgT3V0cHV0Q2FwdHVyZSB0byB3ZWJraXRj
b3JlcHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTM4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjY4NDYzODQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggd2Via2l0cHkgaGFzIGFu
IE91dHB1dENhcHR1cmUgY2xhc3MsIHRoYXQgY2xhc3MgZG9lcyBub3Qgc2VwYXJhdGUgbG9nZ2lu
ZyBmcm9tCisgICAgICAgIHN0ZG91dCBhbmQgc3RkZXJyLCB3aGljaCBtYWtlcyB0aGUgQVBJIGxl
c3MgdXNlZnVsLiBUaGlzIHZlcnNpb24gb2YgdGhlIE91dHB1dENhcHR1cmUgY2xhc3MKKyAgICAg
ICAgaXMgaW5zcGlyZWQgYnkgdGhlIG9uZSBpbiB3ZWJraXRweSwgYnV0IHdpdGggYSBjbGVhbmVy
IGludGVyZmFjZS4KKworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9S
RUFETUUubWQ6IERvY3VtZW50IHVzYWdlIG9mIE91dHB1dENhcHR1cmUuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRXhw
b3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUgYW5kCisgICAgICAgIE91dHB1dER1cGxp
Y2F0ZSBhcyBBUEksIGJ1bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5OiBBZGRlZC4KKyAgICAg
ICAgKExvZ2dlckNhcHR1cmUpOiBDYXB0dXJlIGxvZ3MgYXQgc29tZSBsZXZlbCBmb3IgdGhlIGR1
cmF0aW9uIG9mIHRoZSBpbnRlcmZhY2UuCisgICAgICAgIChPdXRwdXRDYXB0dXJlKTogQ2FwdHVy
ZSBzdGRvdXQsIHN0ZGVyciBhbmQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMgZm9yIHRoZSBkdXJhdGlv
biBvZiB0aGUgaW50ZXJmYWNlLgorICAgICAgICAoT3V0cHV0Q2FwdHVyZS5SZXBsYWNlU3lzU3Ry
ZWFtKTogUmVwbGFjZSBzeXMuc3Rkb3V0IG9yIHN5cy5zdGRlcnIgZm9yIGEgYmxvY2suCisgICAg
ICAgIChPdXRwdXREdXBsaWNhdGUpOiBDb250ZXh0IHdoaWNoIGNhbiBkdXBsaWNhdGUgYWxsIG91
dHB1dCBmb3IgYSBibG9jayBvZiBjb2RlLiBUaGlzIGlzIHVzZWZ1bCB0byBib3RoIHByaW50IGFu
ZAorICAgICAgICBjYXB0dXJlIGxvZ3MuCisgICAgICAgIChPdXRwdXREdXBsaWNhdGUuU3RyZWFt
KTogRmlsZS1saWtlIG9iamVjdCB0aGF0IHJvdXRlcyBvdXRwdXQgdG8gbXVsdGlwbGUgZmlsZS1s
aWtlIG9iamVjdHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS90ZXN0cy9vdXRwdXRfY2FwdHVyZV91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChMb2dnZXJDYXB0dXJlVGVzdCk6CisgICAgICAgIChPdXRwdXRDYXB0dXJlVGVzdCk6Cisg
ICAgICAgIChPdXRwdXRPdXRwdXREdXBsaWNhdGVUZXN0KToKKwogMjAyMC0wOC0xNCAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdGNvcmVweV0g
QWRkIGEgTnVsbEhhbmRsZXIgdG8gbG9nZ2VyCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRjb3JlcHkvUkVBRE1FLm1kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHJldmlzaW9uIDI2NTcyNykKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDMgKzQzLDE3IEBAIHdpdGggbW9ja3MuVGltZToKICAgICBzdGFtcCA9IHRpbWUudGlt
ZSgpCiAgICAgdGltZS5zbGVlcCg1KQogYGBgCitDYXB0dXJpbmcgc3Rkb3V0LCBzdGRlcnIgYW5k
IGxvZ2dpbmcgb3V0cHV0IGZvciB0ZXN0aW5nCitgYGAKK2NhcHR1cmVyID0gT3V0cHV0Q2FwdHVy
ZSgpCit3aXRoIGNhcHR1cmVyOgorICAgIHByaW50KCdkYXRhXG4nKQorYXNzZXJ0IGNhcHR1cmVy
LnN0ZG91dC5nZXR2YWx1ZSgpID09ICdkYXRhXG4nCitgYGAKK0NhcHR1cmluZyBzdGRvdXQsIHN0
ZGVyciBhbmQgbG9nZ2luZyBvdXRwdXQgZm9yIHRlc3RpbmcKK2BgYAorY2FwdHVyZXIgPSBPdXRw
dXRDYXB0dXJlKCkKK3dpdGggY2FwdHVyZXI6CisgICAgcHJpbnQoJ2RhdGFcbicpCithc3NlcnQg
Y2FwdHVyZXIuc3Rkb3V0LmdldHZhbHVlKCkgPT0gJ2RhdGFcbicKK2BgYApJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0
Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjU3MjcpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw4ICszMSw5IEBAIGxvZy5hZGRIYW5kbGVyKE51bGxIYW5kbGVyKCkpCiAKIGZy
b20gd2Via2l0Y29yZXB5LnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0Y29yZXB5
LnN0cmluZ191dGlscyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8sIFVuaWNvZGVJTywgdW5pY29k
ZQorZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUs
IE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAy
LCAzKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMiwgNCkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0
b2luc3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZv
ID4gKDMsIDApOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS9vdXRwdXRfY2FwdHVyZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJr
aXRjb3JlcHkvb3V0cHV0X2NhcHR1cmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
IyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGNvbnRleHRs
aWIKK2ltcG9ydCBpbworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRj
b3JlcHkgaW1wb3J0IGxvZywgbW9ja3MKK2Zyb20gd2Via2l0Y29yZXB5LnN0cmluZ191dGlscyBp
bXBvcnQgU3RyaW5nSU8KKworCitjbGFzcyBMb2dnZXJDYXB0dXJlKG9iamVjdCk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGxvZ2dlcj1Ob25lLCBsZXZlbD1sb2dnaW5nLldBUk5JTkcpOgorICAg
ICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlciBvciBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAg
IHNlbGYubGV2ZWwgPSBsZXZlbAorCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbF9z
dGFjayA9IFtdCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2hhbmRsZXJzX3N0YWNrID0gW10KKyAg
ICAgICAgc2VsZi5faGFuZGxlcl9zdGFjayA9IFtdCisgICAgICAgIHNlbGYubG9nID0gU3RyaW5n
SU8oKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxf
bG9nX2xldmVsX3N0YWNrLmFwcGVuZChzZWxmLmxvZ2dlci5sZXZlbCkKKworICAgICAgICBzZWxm
Ll9vcmlnaW5hbF9oYW5kbGVyc19zdGFjay5hcHBlbmQoW2hhbmRsZXIgZm9yIGhhbmRsZXIgaW4g
c2VsZi5sb2dnZXIuaGFuZGxlcnNdKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLl9vcmln
aW5hbF9oYW5kbGVyc19zdGFja1stMV06CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVI
YW5kbGVyKGhhbmRsZXIpCisKKyAgICAgICAgY29udGV4dF9oYW5kbGVyID0gbG9nZ2luZy5TdHJl
YW1IYW5kbGVyKHNlbGYubG9nKQorICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrLmFwcGVuZChj
b250ZXh0X2hhbmRsZXIpCisgICAgICAgIGNvbnRleHRfaGFuZGxlci5zZXRMZXZlbChzZWxmLmxl
dmVsKQorCisgICAgICAgIHNlbGYubG9nZ2VyLmFkZEhhbmRsZXIoY29udGV4dF9oYW5kbGVyKQor
ICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorCisgICAgICAgIHJldHVy
biBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAg
ICAgaWYgc2VsZi5faGFuZGxlcl9zdGFjazoKKyAgICAgICAgICAgIHRvX3JlbW92ZSA9IHNlbGYu
X2hhbmRsZXJfc3RhY2sucG9wKCkKKyAgICAgICAgICAgIHRvX3JlbW92ZS5mbHVzaCgpCisgICAg
ICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVIYW5kbGVyKHRvX3JlbW92ZSkKKworICAgICAgICBp
ZiBzZWxmLl9vcmlnaW5hbF9sb2dfbGV2ZWxfc3RhY2s6CisgICAgICAgICAgICBzZWxmLmxvZ2dl
ci5zZXRMZXZlbChzZWxmLl9vcmlnaW5hbF9sb2dfbGV2ZWxfc3RhY2sucG9wKCkpCisKKyAgICAg
ICAgaWYgc2VsZi5fb3JpZ2luYWxfaGFuZGxlcnNfc3RhY2sgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLl9vcmlnaW5hbF9oYW5kbGVyc19zdGFjay5wb3AoKToK
KyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKworY2xh
c3MgT3V0cHV0Q2FwdHVyZShtb2Nrcy5Db250ZXh0U3RhY2spOgorICAgIHRvcCA9IE5vbmUKKwor
ICAgIGNsYXNzIFJlcGxhY2VTeXNTdHJlYW0ob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG5hbWUsIHN0cmVhbSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAg
ICAgICAgICBpZiBzZWxmLm5hbWUgbm90IGluIHsnc3Rkb3V0JywgJ3N0ZGVycid9OgorICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScgaXMgbm90IGEgdmFsaWQgc3lzdGVtIHN0
cmVhbSBuYW1lIi5mb3JtYXQoc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtID0g
c3RyZWFtCisgICAgICAgICAgICBzZWxmLm9yaWdpbmFscyA9IFtdCisKKyAgICAgICAgZGVmIF9f
ZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxzLmFwcGVuZChnZXRhdHRy
KHN5cywgc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNl
bGYuc3RyZWFtKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgX19leGl0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxm
Lm5hbWUsIHNlbGYub3JpZ2luYWxzLnBvcCgpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxv
Z2dlcnM9Tm9uZSwgbGV2ZWw9bG9nZ2luZy5XQVJOSU5HKToKKyAgICAgICAgc3VwZXIoT3V0cHV0
Q2FwdHVyZSwgc2VsZikuX19pbml0X18oY2xzPU91dHB1dENhcHR1cmUpCisKKyAgICAgICAgc2Vs
Zi5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYuc3RkZXJyID0gU3RyaW5nSU8oKQor
CisgICAgICAgIGlmIG5vdCBsb2dnZXJzOgorICAgICAgICAgICAgbG9nZ2VycyA9IFtsb2dnaW5n
LmdldExvZ2dlcigpLCBsb2ddCisKKyAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVuZChzZWxmLlJl
cGxhY2VTeXNTdHJlYW0oJ3N0ZG91dCcsIHNlbGYuc3Rkb3V0KSkKKyAgICAgICAgc2VsZi5wYXRj
aGVzLmFwcGVuZChzZWxmLlJlcGxhY2VTeXNTdHJlYW0oJ3N0ZGVycicsIHNlbGYuc3RkZXJyKSkK
KworICAgICAgICBmb3IgbG9nZ2VyIGluIGxvZ2dlcnM6CisgICAgICAgICAgICBpZiBsb2dnZXIu
bmFtZSBpbiBbJ3N0ZG91dCcsICdzdGRlcnInLCAncGF0Y2hlcycsICd0b3AnXToKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBjb2xsaWRlcyB3aXRoIGFuIE91dHB1dENhcHR1
cmUgbWVtYmVyJy5mb3JtYXQobG9nZ2VyLm5hbWUpKQorICAgICAgICAgICAgbGMgPSBMb2dnZXJD
YXB0dXJlKGxvZ2dlciwgbGV2ZWwpCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGxvZ2dlci5u
YW1lLCBsYykKKyAgICAgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQobGMpCisKKworY2xhc3Mg
T3V0cHV0RHVwbGljYXRlKG1vY2tzLkNvbnRleHRTdGFjayk6CisgICAgdG9wID0gTm9uZQorCisg
ICAgY2xhc3MgU3RyZWFtKGlvLklPQmFzZSk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAq
dGFyZ2V0cyk6CisgICAgICAgICAgICBpZiBub3QgdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdObyB0YXJnZXQgc3RyZWFtcyBwcm92aWRlZCcpCisgICAgICAgICAg
ICBzZWxmLnRhcmdldHMgPSB0YXJnZXRzCisKKyAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgorICAg
ICAgICAgICAgW3RhcmdldC5mbHVzaCgpIGZvciB0YXJnZXQgaW4gc2VsZi50YXJnZXRzXQorCisg
ICAgICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpbmVzKToKKyAgICAgICAgICAgIFt0YXJnZXQu
d3JpdGVsaW5lcyhsaW5lcykgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHNdCisKKyAgICAgICAg
ZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICAgICAgW3RhcmdldC53cml0ZShiKSBmb3IgdGFy
Z2V0IGluIHNlbGYudGFyZ2V0c10KKyAgICAgICAgICAgIHJldHVybiBsZW4oYikKKworICAgICAg
ICBAcHJvcGVydHkKKyAgICAgICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVy
biBhbGwoW3RhcmdldC5jbG9zZWQgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHNdKQorCisgICAg
ICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgZmls
ZW5vKHNlbGYpOgorICAgICAgICAgICAgIyBVc2UgdGhlIGZpcnN0IHZhbGlkIGZpbGUgbnVtYmVy
CisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0czoKKyAgICAgICAgICAgICAg
ICBpZiB0YXJnZXQuZmlsZW5vKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQu
ZmlsZW5vKCkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZGVmIGlzYXR0eShz
ZWxmKToKKyAgICAgICAgICAgIHJldHVybiBhbnkoW3RhcmdldC5pc2F0dHkoKSBmb3IgdGFyZ2V0
IGluIHNlbGYudGFyZ2V0c10pCisKKyAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEp
OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVm
IHJlYWRsaW5lcyhzZWxmLCBoaW50PS0xKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoKQorCisgICAgICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPWlvLlNF
RUtfU0VUKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAg
ICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
ICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cigpCisKKyAgICAgICAgZGVmIHRydW5jYXRlKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgd3JpdGFibGUoc2Vs
Zik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxv
Z2dlcnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKE91dHB1dER1cGxpY2F0ZSwgc2VsZikuX19pbml0
X18oY2xzPU91dHB1dER1cGxpY2F0ZSkKKworICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lP
KCkKKyAgICAgICAgc2VsZi5sb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCldIG9yIGxvZ2dl
cnMKKworICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fc3Ry
ZWFtc19zdGFjayA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxm
Ll9zdHJlYW1zX3N0YWNrLmFwcGVuZCgoCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlLlJlcGxh
Y2VTeXNTdHJlYW0oJ3N0ZG91dCcsIHNlbGYuU3RyZWFtKHN5cy5zdGRvdXQsIHNlbGYub3V0cHV0
KSkuX19lbnRlcl9fKCksCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlLlJlcGxhY2VTeXNTdHJl
YW0oJ3N0ZGVycicsIHNlbGYuU3RyZWFtKHN5cy5zdGRlcnIsIHNlbGYub3V0cHV0KSkuX19lbnRl
cl9fKCksCisgICAgICAgICkpCisKKyAgICAgICAgY29udGV4dF9oYW5kbGVyID0gbG9nZ2luZy5T
dHJlYW1IYW5kbGVyKHNlbGYub3V0cHV0KQorICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrLmFw
cGVuZChjb250ZXh0X2hhbmRsZXIpCisgICAgICAgIGNvbnRleHRfaGFuZGxlci5zZXRMZXZlbCht
aW4oW2xvZ2dlci5sZXZlbCBmb3IgbG9nZ2VyIGluIHNlbGYubG9nZ2Vyc10pKQorICAgICAgICBb
bG9nZ2VyLmFkZEhhbmRsZXIoY29udGV4dF9oYW5kbGVyKSBmb3IgbG9nZ2VyIGluIHNlbGYubG9n
Z2Vyc10KKworICAgICAgICByZXR1cm4gc3VwZXIoT3V0cHV0RHVwbGljYXRlLCBzZWxmKS5fX2Vu
dGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgIHN1cGVyKE91dHB1dER1cGxpY2F0ZSwgc2VsZikuX19leGl0X18oKmFyZ3MsICoqa3dhcmdz
KQorCisgICAgICAgIGNvbnRleHRfaGFuZGxlciA9IHNlbGYuX2hhbmRsZXJfc3RhY2sucG9wKCkK
KyAgICAgICAgY29udGV4dF9oYW5kbGVyLmZsdXNoKCkKKyAgICAgICAgW2xvZ2dlci5yZW1vdmVI
YW5kbGVyKGNvbnRleHRfaGFuZGxlcikgZm9yIGxvZ2dlciBpbiBzZWxmLmxvZ2dlcnNdCisKKyAg
ICAgICAgc3Rkb3V0X3N0cmVhbSwgc3RkZXJyX3N0cmVhbSA9IHNlbGYuX3N0cmVhbXNfc3RhY2su
cG9wKCkKKyAgICAgICAgc3Rkb3V0X3N0cmVhbS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisg
ICAgICAgIHN0ZGVycl9zdHJlYW0uX19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9vdXRw
dXRfY2FwdHVyZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL291dHB1dF9jYXB0dXJlX3VuaXR0
ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvdGVzdHMvb3V0cHV0X2NhcHR1cmVfdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
IyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitm
cm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbG9nLCBMb2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJl
LCBPdXRwdXREdXBsaWNhdGUKKworCitjbGFzcyBMb2dnZXJDYXB0dXJlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHdpdGggTG9nZ2Vy
Q2FwdHVyZShsb2cpIGFzIGNhcHR1cmVyLCBMb2dnZXJDYXB0dXJlKCk6CisgICAgICAgICAgICBs
b2cuaW5mbygnSGlkZGVuJykKKyAgICAgICAgICAgIGxvZy53YXJuKCdQcmludGVkJykKKworICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLmxvZy5nZXR2YWx1ZSgpLCAnUHJpbnRlZFxu
JykKKworICAgIGRlZiB0ZXN0X2xldmVsKHNlbGYpOgorICAgICAgICB3aXRoIExvZ2dlckNhcHR1
cmUobG9nLCBsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVyLCBMb2dnZXJDYXB0dXJlKCk6
CisgICAgICAgICAgICBsb2cuZGVidWcoJ0hpZGRlbicpCisgICAgICAgICAgICBsb2cuaW5mbygn
UHJpbnRlZCAxJykKKyAgICAgICAgICAgIGxvZy53YXJuKCdQcmludGVkIDInKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZXIubG9nLmdldHZhbHVlKCksICdQcmludGVkIDFcblBy
aW50ZWQgMlxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5KHNlbGYpOgorICAgICAg
ICB3aXRoIExvZ2dlckNhcHR1cmUobG9nLCBsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVy
LCBMb2dnZXJDYXB0dXJlKCk6CisgICAgICAgICAgICBsb2cuaW5mbygnTGV2ZWwgMScpCisgICAg
ICAgICAgICB3aXRoIGNhcHR1cmVyOgorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCdMZXZlbCAy
JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLmxvZy5nZXR2YWx1ZSgpLCAn
TGV2ZWwgMVxuTGV2ZWwgMlxuJykKKworCitjbGFzcyBPdXRwdXRDYXB0dXJlVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHdpdGggT3V0
cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVyOgorICAgICAgICAgICAgbG9nLmluZm8oJ0hpZGRlbicp
CisgICAgICAgICAgICBsb2cud2FybignUHJpbnRlZCcpCisgICAgICAgICAgICBzeXMuc3Rkb3V0
LndyaXRlKCdzdGRvdXRcbicpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdzdGRlcnJc
bicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci53ZWJraXRjb3JlcHkubG9n
LmdldHZhbHVlKCksICdQcmludGVkXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1
cmVyLnN0ZG91dC5nZXR2YWx1ZSgpLCAnc3Rkb3V0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGNhcHR1cmVyLnN0ZGVyci5nZXR2YWx1ZSgpLCAnc3RkZXJyXG4nKQorCisgICAgZGVmIHRl
c3RfbXVsdGlwbGVfZW50cnkoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFz
IGNhcHR1cmVkOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnTGluZSAxXG4nKQorICAg
ICAgICAgICAgbG9nLndhcm4oJ0xvZyAxJykKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWQ6Cisg
ICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnTGluZSAyXG4nKQorICAgICAgICAgICAg
ICAgIGxvZy53YXJuKCdMb2cgMicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJl
ZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICdMb2cgMVxuTG9nIDJcbicpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICdMaW5lIDFcbkxp
bmUgMlxuJykKKworCitjbGFzcyBPdXRwdXREdXBsaWNhdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJl
KCkgYXMgY2FwdHVyZXI6CisgICAgICAgICAgICB3aXRoIE91dHB1dER1cGxpY2F0ZSgpIGFzIGR1
cGxpY2F0b3I6CisgICAgICAgICAgICAgICAgbG9nLmluZm8oJ0hpZGRlbicpCisgICAgICAgICAg
ICAgICAgbG9nLndhcm4oJ1ByaW50ZWQnKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3Jp
dGUoJ3N0ZG91dFxuJykKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdzdGRlcnJc
bicpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwbGljYXRvci5vdXRwdXQuZ2V0
dmFsdWUoKSwgJ1ByaW50ZWRcbnN0ZG91dFxuc3RkZXJyXG4nKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY2FwdHVyZXIud2Via2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLCAnUHJpbnRlZFxu
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRvdXQuZ2V0dmFsdWUoKSwg
J3N0ZG91dFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRlcnIuZ2V0
dmFsdWUoKSwgJ3N0ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5KHNlbGYp
OgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0
dWVyZWQ6CisgICAgICAgICAgICB3aXRoIE91dHB1dER1cGxpY2F0ZSgpIGFzIGR1cGxpY2F0b3I6
CisgICAgICAgICAgICAgICAgbG9nLmluZm8oJ0xvZyAxJykKKyAgICAgICAgICAgICAgICBzeXMu
c3Rkb3V0LndyaXRlKCdMZXZlbCAxXG4nKQorICAgICAgICAgICAgICAgIHdpdGggZHVwbGljYXRv
cjoKKyAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oJ0xvZyAyJykKKyAgICAgICAgICAgICAg
ICAgICAgc3lzLnN0ZG91dC53cml0ZSgnTGV2ZWwgMlxuJykKKworICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChkdXBsaWNhdG9yLm91dHB1dC5nZXR2YWx1ZSgpLCAnTG9nIDFcbkxldmVsIDFc
bkxvZyAyXG5Mb2cgMlxuTGV2ZWwgMlxuTGV2ZWwgMlxuJykKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNhcHR1ZXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICdMb2cgMVxuTG9n
IDJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVlcmVkLnN0ZG91dC5nZXR2YWx1
ZSgpLCAnTGV2ZWwgMVxuTGV2ZWwgMlxuJykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406734</attachid>
            <date>2020-08-17 12:51:40 -0700</date>
            <delta_ts>2020-08-17 13:20:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-215380-20200817125139.patch</filename>
            <type>text/plain</type>
            <size>15744</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NTc2NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTA4LTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgT3V0cHV0Q2FwdHVyZSB0byB3ZWJraXRj
b3JlcHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTM4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjY4NDYzODQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGV3ZWkgWmh1LgorCisgICAgICAgIEFsdGhvdWdoIHdlYmtpdHB5IGhhcyBhbiBPdXRw
dXRDYXB0dXJlIGNsYXNzLCB0aGF0IGNsYXNzIGRvZXMgbm90IHNlcGFyYXRlIGxvZ2dpbmcgZnJv
bQorICAgICAgICBzdGRvdXQgYW5kIHN0ZGVyciwgd2hpY2ggbWFrZXMgdGhlIEFQSSBsZXNzIHVz
ZWZ1bC4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPdXRwdXRDYXB0dXJlIGNsYXNzCisgICAgICAgIGlz
IGluc3BpcmVkIGJ5IHRoZSBvbmUgaW4gd2Via2l0cHksIGJ1dCB3aXRoIGEgY2xlYW5lciBpbnRl
cmZhY2UuCisKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvUkVBRE1F
Lm1kOiBEb2N1bWVudCB1c2FnZSBvZiBPdXRwdXRDYXB0dXJlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEV4cG9ydCBM
b2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJlIGFuZAorICAgICAgICBPdXRwdXREdXBsaWNhdGUg
YXMgQVBJLCBidW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9vdXRwdXRfY2FwdHVyZS5weTogQWRkZWQuCisgICAgICAgIChM
b2dnZXJDYXB0dXJlKTogQ2FwdHVyZSBsb2dzIGF0IHNvbWUgbGV2ZWwgZm9yIHRoZSBkdXJhdGlv
biBvZiB0aGUgaW50ZXJmYWNlLgorICAgICAgICAoT3V0cHV0Q2FwdHVyZSk6IENhcHR1cmUgc3Rk
b3V0LCBzdGRlcnIgYW5kIGFsbCBsb2dnaW5nIGNoYW5uZWxzIGZvciB0aGUgZHVyYXRpb24gb2Yg
dGhlIGludGVyZmFjZS4KKyAgICAgICAgKE91dHB1dENhcHR1cmUuUmVwbGFjZVN5c1N0cmVhbSk6
IFJlcGxhY2Ugc3lzLnN0ZG91dCBvciBzeXMuc3RkZXJyIGZvciBhIGJsb2NrLgorICAgICAgICAo
T3V0cHV0RHVwbGljYXRlKTogQ29udGV4dCB3aGljaCBjYW4gZHVwbGljYXRlIGFsbCBvdXRwdXQg
Zm9yIGEgYmxvY2sgb2YgY29kZS4gVGhpcyBpcyB1c2VmdWwgdG8gYm90aCBwcmludCBhbmQKKyAg
ICAgICAgY2FwdHVyZSBsb2dzLgorICAgICAgICAoT3V0cHV0RHVwbGljYXRlLlN0cmVhbSk6IEZp
bGUtbGlrZSBvYmplY3QgdGhhdCByb3V0ZXMgb3V0cHV0IHRvIG11bHRpcGxlIGZpbGUtbGlrZSBv
YmplY3RzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRj
b3JlcHkvdGVzdHMvb3V0cHV0X2NhcHR1cmVfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAo
TG9nZ2VyQ2FwdHVyZVRlc3QpOgorICAgICAgICAoT3V0cHV0Q2FwdHVyZVRlc3QpOgorICAgICAg
ICAoT3V0cHV0T3V0cHV0RHVwbGljYXRlVGVzdCk6CisKIDIwMjAtMDgtMTcgIExhdXJvIE1vdXJh
ICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gRml4IGZpbGUgdXJsIGluIFdQ
RVF0IGFwaSB0ZXN0CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
UkVBRE1FLm1kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS9SRUFETUUubWQJKHJldmlzaW9uIDI2NTc2NykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHdvcmtpbmcgY29weSkKQEAgLTQzLDMgKzQzLDE3
IEBAIHdpdGggbW9ja3MuVGltZToKICAgICBzdGFtcCA9IHRpbWUudGltZSgpCiAgICAgdGltZS5z
bGVlcCg1KQogYGBgCitDYXB0dXJpbmcgc3Rkb3V0LCBzdGRlcnIgYW5kIGxvZ2dpbmcgb3V0cHV0
IGZvciB0ZXN0aW5nCitgYGAKK2NhcHR1cmVyID0gT3V0cHV0Q2FwdHVyZSgpCit3aXRoIGNhcHR1
cmVyOgorICAgIHByaW50KCdkYXRhXG4nKQorYXNzZXJ0IGNhcHR1cmVyLnN0ZG91dC5nZXR2YWx1
ZSgpID09ICdkYXRhXG4nCitgYGAKK0NhcHR1cmluZyBzdGRvdXQsIHN0ZGVyciBhbmQgbG9nZ2lu
ZyBvdXRwdXQgZm9yIHRlc3RpbmcKK2BgYAorY2FwdHVyZXIgPSBPdXRwdXRDYXB0dXJlKCkKK3dp
dGggY2FwdHVyZXI6CisgICAgcHJpbnQoJ2RhdGFcbicpCithc3NlcnQgY2FwdHVyZXIuc3Rkb3V0
LmdldHZhbHVlKCkgPT0gJ2RhdGFcbicKK2BgYApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9f
LnB5CShyZXZpc2lvbiAyNjU3NjcpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICsz
MSw5IEBAIGxvZy5hZGRIYW5kbGVyKE51bGxIYW5kbGVyKCkpCiAKIGZyb20gd2Via2l0Y29yZXB5
LnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0Y29yZXB5LnN0cmluZ191dGlscyBp
bXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8sIFVuaWNvZGVJTywgdW5pY29kZQorZnJvbSB3ZWJraXRj
b3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUs
IE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAyLCA0KQordmVyc2lvbiA9
IFZlcnNpb24oMCwgMiwgNSkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0b2luc3RhbGwgaW1wb3J0
IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgpJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9vdXRw
dXRfY2FwdHVyZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvd2Via2l0Y29yZXB5L291dHB1dF9jYXB0dXJlLnB5CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvb3V0cHV0
X2NhcHR1cmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGxv
ZywgbW9ja3MKK2Zyb20gd2Via2l0Y29yZXB5LnN0cmluZ191dGlscyBpbXBvcnQgU3RyaW5nSU8K
KworCitjbGFzcyBMb2dnZXJDYXB0dXJlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGxvZ2dlcj1Ob25lLCBsZXZlbD1sb2dnaW5nLldBUk5JTkcpOgorICAgICAgICBzZWxmLmxvZ2dl
ciA9IGxvZ2dlciBvciBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIHNlbGYubGV2ZWwgPSBs
ZXZlbAorCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2xvZ19sZXZlbF9zdGFjayA9IFtdCisgICAg
ICAgIHNlbGYuX29yaWdpbmFsX2hhbmRsZXJzX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5faGFu
ZGxlcl9zdGFjayA9IFtdCisgICAgICAgIHNlbGYubG9nID0gU3RyaW5nSU8oKQorCisgICAgZGVm
IF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfbG9nX2xldmVsX3N0YWNr
LmFwcGVuZChzZWxmLmxvZ2dlci5sZXZlbCkKKworICAgICAgICBzZWxmLl9vcmlnaW5hbF9oYW5k
bGVyc19zdGFjay5hcHBlbmQoW2hhbmRsZXIgZm9yIGhhbmRsZXIgaW4gc2VsZi5sb2dnZXIuaGFu
ZGxlcnNdKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLl9vcmlnaW5hbF9oYW5kbGVyc19z
dGFja1stMV06CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVIYW5kbGVyKGhhbmRsZXIp
CisKKyAgICAgICAgY29udGV4dF9oYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHNlbGYu
bG9nKQorICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrLmFwcGVuZChjb250ZXh0X2hhbmRsZXIp
CisgICAgICAgIGNvbnRleHRfaGFuZGxlci5zZXRMZXZlbChzZWxmLmxldmVsKQorCisgICAgICAg
IHNlbGYubG9nZ2VyLmFkZEhhbmRsZXIoY29udGV4dF9oYW5kbGVyKQorICAgICAgICBzZWxmLmxv
Z2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBk
ZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5faGFu
ZGxlcl9zdGFjazoKKyAgICAgICAgICAgIHRvX3JlbW92ZSA9IHNlbGYuX2hhbmRsZXJfc3RhY2su
cG9wKCkKKyAgICAgICAgICAgIHRvX3JlbW92ZS5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLmxv
Z2dlci5yZW1vdmVIYW5kbGVyKHRvX3JlbW92ZSkKKworICAgICAgICBpZiBzZWxmLl9vcmlnaW5h
bF9sb2dfbGV2ZWxfc3RhY2s6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChzZWxm
Ll9vcmlnaW5hbF9sb2dfbGV2ZWxfc3RhY2sucG9wKCkpCisKKyAgICAgICAgaWYgc2VsZi5fb3Jp
Z2luYWxfaGFuZGxlcnNfc3RhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgaGFuZGxl
ciBpbiBzZWxmLl9vcmlnaW5hbF9oYW5kbGVyc19zdGFjay5wb3AoKToKKyAgICAgICAgICAgICAg
ICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKworY2xhc3MgT3V0cHV0Q2FwdHVy
ZShtb2Nrcy5Db250ZXh0U3RhY2spOgorICAgIHRvcCA9IE5vbmUKKworICAgIGNsYXNzIFJlcGxh
Y2VTeXNTdHJlYW0ob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHN0
cmVhbSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBpZiBzZWxm
Lm5hbWUgbm90IGluIHsnc3Rkb3V0JywgJ3N0ZGVycid9OgorICAgICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoIid7fScgaXMgbm90IGEgdmFsaWQgc3lzdGVtIHN0cmVhbSBuYW1lIi5mb3Jt
YXQoc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisgICAgICAg
ICAgICBzZWxmLm9yaWdpbmFscyA9IFtdCisKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToK
KyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxzLmFwcGVuZChnZXRhdHRyKHN5cywgc2VsZi5uYW1l
KSkKKyAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNlbGYuc3RyZWFtKQorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3Ms
ICoqa3dhcmdzKToKKyAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNlbGYub3Jp
Z2luYWxzLnBvcCgpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlcnM9Tm9uZSwgbGV2
ZWw9bG9nZ2luZy5XQVJOSU5HKToKKyAgICAgICAgc3VwZXIoT3V0cHV0Q2FwdHVyZSwgc2VsZiku
X19pbml0X18oY2xzPU91dHB1dENhcHR1cmUpCisKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBTdHJp
bmdJTygpCisgICAgICAgIHNlbGYuc3RkZXJyID0gU3RyaW5nSU8oKQorCisgICAgICAgIGlmIG5v
dCBsb2dnZXJzOgorICAgICAgICAgICAgbG9nZ2VycyA9IFtsb2dnaW5nLmdldExvZ2dlcigpLCBs
b2ddCisKKyAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVuZChzZWxmLlJlcGxhY2VTeXNTdHJlYW0o
J3N0ZG91dCcsIHNlbGYuc3Rkb3V0KSkKKyAgICAgICAgc2VsZi5wYXRjaGVzLmFwcGVuZChzZWxm
LlJlcGxhY2VTeXNTdHJlYW0oJ3N0ZGVycicsIHNlbGYuc3RkZXJyKSkKKworICAgICAgICBmb3Ig
bG9nZ2VyIGluIGxvZ2dlcnM6CisgICAgICAgICAgICBpZiBsb2dnZXIubmFtZSBpbiBbJ3N0ZG91
dCcsICdzdGRlcnInLCAncGF0Y2hlcycsICd0b3AnXToKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCd7fSBjb2xsaWRlcyB3aXRoIGFuIE91dHB1dENhcHR1cmUgbWVtYmVyJy5mb3Jt
YXQobG9nZ2VyLm5hbWUpKQorICAgICAgICAgICAgbGMgPSBMb2dnZXJDYXB0dXJlKGxvZ2dlciwg
bGV2ZWwpCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGxvZ2dlci5uYW1lLCBsYykKKyAgICAg
ICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQobGMpCisKKworY2xhc3MgT3V0cHV0RHVwbGljYXRl
KG1vY2tzLkNvbnRleHRTdGFjayk6CisgICAgdG9wID0gTm9uZQorCisgICAgY2xhc3MgU3RyZWFt
KGlvLklPQmFzZSk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqdGFyZ2V0cyk6CisgICAg
ICAgICAgICBpZiBub3QgdGFyZ2V0czoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCdObyB0YXJnZXQgc3RyZWFtcyBwcm92aWRlZCcpCisgICAgICAgICAgICBzZWxmLnRhcmdldHMg
PSB0YXJnZXRzCisKKyAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICAgICAgW3Rhcmdl
dC5mbHVzaCgpIGZvciB0YXJnZXQgaW4gc2VsZi50YXJnZXRzXQorCisgICAgICAgIGRlZiB3cml0
ZWxpbmVzKHNlbGYsIGxpbmVzKToKKyAgICAgICAgICAgIFt0YXJnZXQud3JpdGVsaW5lcyhsaW5l
cykgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHNdCisKKyAgICAgICAgZGVmIHdyaXRlKHNlbGYs
IGIpOgorICAgICAgICAgICAgW3RhcmdldC53cml0ZShiKSBmb3IgdGFyZ2V0IGluIHNlbGYudGFy
Z2V0c10KKyAgICAgICAgICAgIHJldHVybiBsZW4oYikKKworICAgICAgICBAcHJvcGVydHkKKyAg
ICAgICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBhbGwoW3RhcmdldC5j
bG9zZWQgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHNdKQorCisgICAgICAgIGRlZiBjbG9zZShz
ZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAg
ICAgICAgICAgIyBVc2UgdGhlIGZpcnN0IHZhbGlkIGZpbGUgbnVtYmVyCisgICAgICAgICAgICBm
b3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0czoKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXQuZmls
ZW5vKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZmlsZW5vKCkKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAg
ICAgIHJldHVybiBhbnkoW3RhcmdldC5pc2F0dHkoKSBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0
c10pCisKKyAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisKKyAgICAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHJlYWRsaW5lcyhzZWxm
LCBoaW50PS0xKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisg
ICAgICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPWlvLlNFRUtfU0VUKToKKyAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiBzZWVrYWJs
ZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRlZiB0ZWxsKHNl
bGYpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAg
ZGVmIHRydW5jYXRlKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlcnM9Tm9uZSk6Cisg
ICAgICAgIHN1cGVyKE91dHB1dER1cGxpY2F0ZSwgc2VsZikuX19pbml0X18oY2xzPU91dHB1dER1
cGxpY2F0ZSkKKworICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgc2Vs
Zi5sb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCldIG9yIGxvZ2dlcnMKKworICAgICAgICBz
ZWxmLl9oYW5kbGVyX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fc3RyZWFtc19zdGFjayA9IFtd
CisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zdHJlYW1zX3N0YWNr
LmFwcGVuZCgoCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlLlJlcGxhY2VTeXNTdHJlYW0oJ3N0
ZG91dCcsIHNlbGYuU3RyZWFtKHN5cy5zdGRvdXQsIHNlbGYub3V0cHV0KSkuX19lbnRlcl9fKCks
CisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlLlJlcGxhY2VTeXNTdHJlYW0oJ3N0ZGVycicsIHNl
bGYuU3RyZWFtKHN5cy5zdGRlcnIsIHNlbGYub3V0cHV0KSkuX19lbnRlcl9fKCksCisgICAgICAg
ICkpCisKKyAgICAgICAgY29udGV4dF9oYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHNl
bGYub3V0cHV0KQorICAgICAgICBzZWxmLl9oYW5kbGVyX3N0YWNrLmFwcGVuZChjb250ZXh0X2hh
bmRsZXIpCisgICAgICAgIGNvbnRleHRfaGFuZGxlci5zZXRMZXZlbChtaW4oW2xvZ2dlci5sZXZl
bCBmb3IgbG9nZ2VyIGluIHNlbGYubG9nZ2Vyc10pKQorICAgICAgICBbbG9nZ2VyLmFkZEhhbmRs
ZXIoY29udGV4dF9oYW5kbGVyKSBmb3IgbG9nZ2VyIGluIHNlbGYubG9nZ2Vyc10KKworICAgICAg
ICByZXR1cm4gc3VwZXIoT3V0cHV0RHVwbGljYXRlLCBzZWxmKS5fX2VudGVyX18oKQorCisgICAg
ZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKE91dHB1
dER1cGxpY2F0ZSwgc2VsZikuX19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGNv
bnRleHRfaGFuZGxlciA9IHNlbGYuX2hhbmRsZXJfc3RhY2sucG9wKCkKKyAgICAgICAgY29udGV4
dF9oYW5kbGVyLmZsdXNoKCkKKyAgICAgICAgW2xvZ2dlci5yZW1vdmVIYW5kbGVyKGNvbnRleHRf
aGFuZGxlcikgZm9yIGxvZ2dlciBpbiBzZWxmLmxvZ2dlcnNdCisKKyAgICAgICAgc3Rkb3V0X3N0
cmVhbSwgc3RkZXJyX3N0cmVhbSA9IHNlbGYuX3N0cmVhbXNfc3RhY2sucG9wKCkKKyAgICAgICAg
c3Rkb3V0X3N0cmVhbS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHN0ZGVycl9z
dHJlYW0uX19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9vdXRwdXRfY2FwdHVyZV91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3Jl
cHkvd2Via2l0Y29yZXB5L3Rlc3RzL291dHB1dF9jYXB0dXJlX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3Jl
cHkvdGVzdHMvb3V0cHV0X2NhcHR1cmVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
IyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdGNvcmVw
eSBpbXBvcnQgbG9nLCBMb2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJlLCBPdXRwdXREdXBsaWNh
dGUKKworCitjbGFzcyBMb2dnZXJDYXB0dXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHdpdGggTG9nZ2VyQ2FwdHVyZShsb2cpIGFz
IGNhcHR1cmVyLCBMb2dnZXJDYXB0dXJlKCk6CisgICAgICAgICAgICBsb2cuaW5mbygnSGlkZGVu
JykKKyAgICAgICAgICAgIGxvZy53YXJuKCdQcmludGVkJykKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNhcHR1cmVyLmxvZy5nZXR2YWx1ZSgpLCAnUHJpbnRlZFxuJykKKworICAgIGRlZiB0
ZXN0X2xldmVsKHNlbGYpOgorICAgICAgICB3aXRoIExvZ2dlckNhcHR1cmUobG9nLCBsZXZlbD1s
b2dnaW5nLklORk8pIGFzIGNhcHR1cmVyLCBMb2dnZXJDYXB0dXJlKCk6CisgICAgICAgICAgICBs
b2cuZGVidWcoJ0hpZGRlbicpCisgICAgICAgICAgICBsb2cuaW5mbygnUHJpbnRlZCAxJykKKyAg
ICAgICAgICAgIGxvZy53YXJuKCdQcmludGVkIDInKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY2FwdHVyZXIubG9nLmdldHZhbHVlKCksICdQcmludGVkIDFcblByaW50ZWQgMlxuJykKKwor
ICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5KHNlbGYpOgorICAgICAgICB3aXRoIExvZ2dlckNh
cHR1cmUobG9nLCBsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVyLCBMb2dnZXJDYXB0dXJl
KCk6CisgICAgICAgICAgICBsb2cuaW5mbygnTGV2ZWwgMScpCisgICAgICAgICAgICB3aXRoIGNh
cHR1cmVyOgorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCdMZXZlbCAyJykKKworICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLmxvZy5nZXR2YWx1ZSgpLCAnTGV2ZWwgMVxuTGV2ZWwg
MlxuJykKKworCitjbGFzcyBPdXRwdXRDYXB0dXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFz
IGNhcHR1cmVyOgorICAgICAgICAgICAgbG9nLmluZm8oJ0hpZGRlbicpCisgICAgICAgICAgICBs
b2cud2FybignUHJpbnRlZCcpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdzdGRvdXRc
bicpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdzdGRlcnJcbicpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICdQ
cmludGVkXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLnN0ZG91dC5nZXR2
YWx1ZSgpLCAnc3Rkb3V0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVyLnN0
ZGVyci5nZXR2YWx1ZSgpLCAnc3RkZXJyXG4nKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZW50
cnkoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAg
ICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnTGluZSAxXG4nKQorICAgICAgICAgICAgbG9nLndh
cm4oJ0xvZyAxJykKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWQ6CisgICAgICAgICAgICAgICAg
c3lzLnN0ZG91dC53cml0ZSgnTGluZSAyXG4nKQorICAgICAgICAgICAgICAgIGxvZy53YXJuKCdM
b2cgMicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC53ZWJraXRjb3JlcHku
bG9nLmdldHZhbHVlKCksICdMb2cgMVxuTG9nIDJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICdMaW5lIDFcbkxpbmUgMlxuJykKKworCitj
bGFzcyBPdXRwdXREdXBsaWNhdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVz
dF9iYXNpYyhzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZXI6
CisgICAgICAgICAgICB3aXRoIE91dHB1dER1cGxpY2F0ZSgpIGFzIGR1cGxpY2F0b3I6CisgICAg
ICAgICAgICAgICAgbG9nLmluZm8oJ0hpZGRlbicpCisgICAgICAgICAgICAgICAgbG9nLndhcm4o
J1ByaW50ZWQnKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3N0ZG91dFxuJykK
KyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdzdGRlcnJcbicpCisKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwbGljYXRvci5vdXRwdXQuZ2V0dmFsdWUoKSwgJ1ByaW50
ZWRcbnN0ZG91dFxuc3RkZXJyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVy
ZXIud2Via2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLCAnUHJpbnRlZFxuJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRvdXQuZ2V0dmFsdWUoKSwgJ3N0ZG91dFxuJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlci5zdGRlcnIuZ2V0dmFsdWUoKSwgJ3N0ZGVy
clxuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2VudHJ5KHNlbGYpOgorICAgICAgICB3aXRo
IE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dWVyZWQ6CisgICAgICAg
ICAgICB3aXRoIE91dHB1dER1cGxpY2F0ZSgpIGFzIGR1cGxpY2F0b3I6CisgICAgICAgICAgICAg
ICAgbG9nLmluZm8oJ0xvZyAxJykKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdM
ZXZlbCAxXG4nKQorICAgICAgICAgICAgICAgIHdpdGggZHVwbGljYXRvcjoKKyAgICAgICAgICAg
ICAgICAgICAgbG9nLmluZm8oJ0xvZyAyJykKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91
dC53cml0ZSgnTGV2ZWwgMlxuJykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXBs
aWNhdG9yLm91dHB1dC5nZXR2YWx1ZSgpLCAnTG9nIDFcbkxldmVsIDFcbkxvZyAyXG5Mb2cgMlxu
TGV2ZWwgMlxuTGV2ZWwgMlxuJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1ZXJl
ZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICdMb2cgMVxuTG9nIDJcbicpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVlcmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnTGV2ZWwgMVxu
TGV2ZWwgMlxuJykK
</data>

          </attachment>
      

    </bug>

</bugzilla>