<?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>40792</bug_id>
          
          <creation_ts>2010-06-17 11:52:04 -0700</creation_ts>
          <short_desc>Script to list duplicated files, and dedupe some chromium-specific LayoutTests.</short_desc>
          <delta_ts>2010-08-10 02:30:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>37630</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Marcus Bulach">bulach</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>bulach</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>victorw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>239508</commentid>
    <comment_count>0</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-17 11:52:04 -0700</bug_when>
    <thetext>Script to list duplicated files, and dedupe some chromium-specific LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239511</commentid>
    <comment_count>1</comment_count>
      <attachid>59025</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-17 11:55:31 -0700</bug_when>
    <thetext>Created attachment 59025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239519</commentid>
    <comment_count>2</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-17 12:03:37 -0700</bug_when>
    <thetext>Hi Victor, Eric,

Following suggestions from https://bugs.webkit.org/show_bug.cgi?id=40418, here&apos;s a couple of scripts to list duplication and move the files around.

Hopefully it&apos;ll be useful at some point :), but please, let me know if it&apos;s not over-engineered: I tried to separate generic things from the chromium specific bits, and also kept a bunch of what I think it&apos;s the standard boiler-plate code here...

Once we&apos;re happy with this, I&apos;ll rebuild the patch in the change mentioned above using this tool.

Thanks,
Marcus</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239523</commentid>
    <comment_count>3</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-06-17 12:18:13 -0700</bug_when>
    <thetext>Thanks Marcus for doing this! How about adding an option &quot;platforms&quot; so this script could be more generic? Now, it hard code chromium-mac and chromium-win. We could use this script to dedup baselines for other ports like chromium-linux, chromium-win-* etc.

(In reply to comment #2)
&gt; Hi Victor, Eric,
&gt; 
&gt; Following suggestions from https://bugs.webkit.org/show_bug.cgi?id=40418, here&apos;s a couple of scripts to list duplication and move the files around.
&gt; 
&gt; Hopefully it&apos;ll be useful at some point :), but please, let me know if it&apos;s not over-engineered: I tried to separate generic things from the chromium specific bits, and also kept a bunch of what I think it&apos;s the standard boiler-plate code here...
&gt; 
&gt; Once we&apos;re happy with this, I&apos;ll rebuild the patch in the change mentioned above using this tool.
&gt; 
&gt; Thanks,
&gt; Marcus</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239854</commentid>
    <comment_count>4</comment_count>
      <attachid>59093</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-18 04:18:12 -0700</bug_when>
    <thetext>Created attachment 59093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239857</commentid>
    <comment_count>5</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-18 04:22:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Thanks Marcus for doing this! How about adding an option &quot;platforms&quot; so this script could be more generic? Now, it hard code chromium-mac and chromium-win. We could use this script to dedup baselines for other ports like chromium-linux, chromium-win-* etc.

oh, good point! it made it slightly more complex, but hopefully more useful! :)
it now accepts two parameters: -p for a list of platforms to check for duplicates, and -d for the destination (which may or may not be one of the platforms).
another look please?

&gt; 
&gt; (In reply to comment #2)
&gt; &gt; Hi Victor, Eric,
&gt; &gt; 
&gt; &gt; Following suggestions from https://bugs.webkit.org/show_bug.cgi?id=40418, here&apos;s a couple of scripts to list duplication and move the files around.
&gt; &gt; 
&gt; &gt; Hopefully it&apos;ll be useful at some point :), but please, let me know if it&apos;s not over-engineered: I tried to separate generic things from the chromium specific bits, and also kept a bunch of what I think it&apos;s the standard boiler-plate code here...
&gt; &gt; 
&gt; &gt; Once we&apos;re happy with this, I&apos;ll rebuild the patch in the change mentioned above using this tool.
&gt; &gt; 
&gt; &gt; Thanks,
&gt; &gt; Marcus</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239986</commentid>
    <comment_count>6</comment_count>
      <attachid>59093</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-06-18 09:47:13 -0700</bug_when>
    <thetext>Comment on attachment 59093
Patch

WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:57
 +  
remove the empty line to be consistent with rest of the documentation style?

WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:72
 +          print &apos;Running: &apos; + cmd
&quot;_log&quot; instead of &quot;print&quot;? same for other &quot;print&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239998</commentid>
    <comment_count>7</comment_count>
      <attachid>59093</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-18 10:07:01 -0700</bug_when>
    <thetext>Comment on attachment 59093
Patch

webkitpy is for modules.  Scripts go in WebKitTools/Scripts.  In general, we&apos;re not accepting new python code without testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240000</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-18 10:08:23 -0700</bug_when>
    <thetext>Also, we don&apos;t use os.system.  That API is dangerous.  Please use the APIs in webkitpy/common/executive.py instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240001</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-18 10:09:03 -0700</bug_when>
    <thetext>That will also help you with testing because you can mock out the executive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240683</commentid>
    <comment_count>10</comment_count>
      <attachid>59247</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-21 06:34:17 -0700</bug_when>
    <thetext>Created attachment 59247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240684</commentid>
    <comment_count>11</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-21 06:37:46 -0700</bug_when>
    <thetext>thanks Adam and Victor!

the latest patch addresses all your comments so far:
* log instead of print
* moved to WebKitTools/Scripts
* using Executive instead of os.system
* added tests for both scripts

another look please?

(In reply to comment #6)
&gt; (From update of attachment 59093 [details])
&gt; WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:57
&gt;  +  
&gt; remove the empty line to be consistent with rest of the documentation style?
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:72
&gt;  +          print &apos;Running: &apos; + cmd
&gt; &quot;_log&quot; instead of &quot;print&quot;? same for other &quot;print&quot;.

(In reply to comment #9)
&gt; That will also help you with testing because you can mock out the executive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244831</commentid>
    <comment_count>12</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-30 10:21:55 -0700</bug_when>
    <thetext>ping? :)

(In reply to comment #11)
&gt; thanks Adam and Victor!
&gt; 
&gt; the latest patch addresses all your comments so far:
&gt; * log instead of print
&gt; * moved to WebKitTools/Scripts
&gt; * using Executive instead of os.system
&gt; * added tests for both scripts
&gt; 
&gt; another look please?
&gt; 
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 59093 [details] [details])
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:57
&gt; &gt;  +  
&gt; &gt; remove the empty line to be consistent with rest of the documentation style?
&gt; &gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:72
&gt; &gt;  +          print &apos;Running: &apos; + cmd
&gt; &gt; &quot;_log&quot; instead of &quot;print&quot;? same for other &quot;print&quot;.
&gt; 
&gt; (In reply to comment #9)
&gt; &gt; That will also help you with testing because you can mock out the executive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244837</commentid>
    <comment_count>13</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-06-30 10:36:36 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; ping? :)
ok to me, you need a reviewer (maybe abarth) to review this...

&gt; 
&gt; (In reply to comment #11)
&gt; &gt; thanks Adam and Victor!
&gt; &gt; 
&gt; &gt; the latest patch addresses all your comments so far:
&gt; &gt; * log instead of print
&gt; &gt; * moved to WebKitTools/Scripts
&gt; &gt; * using Executive instead of os.system
&gt; &gt; * added tests for both scripts
&gt; &gt; 
&gt; &gt; another look please?
&gt; &gt; 
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; (From update of attachment 59093 [details] [details] [details])
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:57
&gt; &gt; &gt;  +  
&gt; &gt; &gt; remove the empty line to be consistent with rest of the documentation style?
&gt; &gt; &gt; 
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/dedupe_chromium_webkit_tests.py:72
&gt; &gt; &gt;  +          print &apos;Running: &apos; + cmd
&gt; &gt; &gt; &quot;_log&quot; instead of &quot;print&quot;? same for other &quot;print&quot;.
&gt; &gt; 
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; That will also help you with testing because you can mock out the executive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254991</commentid>
    <comment_count>14</comment_count>
      <attachid>59247</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-22 14:35:16 -0700</bug_when>
    <thetext>Comment on attachment 59247
Patch

A script like this is really useful. Can you extend this to handle checksum and png as well? Also, I would prefer if the script itself knew about the fallback order and just deduped the whole repo instead of requiring the user of the script to do it. For example, if the chromium-mac, chromium and mac expections are all the same, then the two chromium ones should be deleted. I know this is the opposite of what Victor said, but I think we *should* hardcode it. We should just hardcode it to cover all platforms. We can start with just covering some platforms as long as there&apos;s a path forward for covering the rest.

In that vein, this isn&apos;t just useful for chromium. Can we call the script dedupe_layout_test_expectations.py and put in FIXMEs to cover the other ports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254999</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-22 14:52:30 -0700</bug_when>
    <thetext>The files in webkitpy/layout_test/port are to be the one true source of fallback information. If they&apos;re wrong, we need to fix them. We should definitely use that knowledge from this script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259096</commentid>
    <comment_count>16</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-02 14:02:11 -0700</bug_when>
    <thetext>I hate to be the n-th person to ask for more stuff, but I agree with Eric that we should use the existing fallback code in webkitpy/layout_test/port.  Fortunately, Evan already wrote code for this here (get_port_fallbacks()):
  https://bugs.webkit.org/show_bug.cgi?id=37630

I think once we get that fixed, we can commit this and add the other features requested (checksum files, png files, fast git support, etc etc etc).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261405</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-06 13:10:28 -0700</bug_when>
    <thetext>I&apos;m confused as to how this differs from bug 37630.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262097</commentid>
    <comment_count>18</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-09 04:54:20 -0700</bug_when>
    <thetext>Hi all,

Apologies for the delay..
Thanks for pointing out https://bugs.webkit.org/show_bug.cgi?id=37630, I wasn&apos;t aware of it.

I&apos;ll coordinate with Evan, so we can go ahead with either version: either I&apos;ll copy his paltform-fallback, or he can re-use some of the tests I&apos;ve written.

Either way, I hope there&apos;ll be some solution soon.. :)


(In reply to comment #17)
&gt; I&apos;m confused as to how this differs from bug 37630.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262250</commentid>
    <comment_count>19</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-09 11:42:03 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Hi all,
&gt; 
&gt; Apologies for the delay..
&gt; Thanks for pointing out https://bugs.webkit.org/show_bug.cgi?id=37630, I wasn&apos;t aware of it.
&gt; 
&gt; I&apos;ll coordinate with Evan, so we can go ahead with either version: either I&apos;ll copy his paltform-fallback, or he can re-use some of the tests I&apos;ve written.
&gt; 
&gt; Either way, I hope there&apos;ll be some solution soon.. :)
&gt; 
&gt; 
&gt; (In reply to comment #17)
&gt; &gt; I&apos;m confused as to how this differs from bug 37630.

just had Evan&apos;s reply, I&apos;ll take over his patch (much simpler than this), add the necessary tests / features and send the code for review at 37630.

I&apos;ll add all of you to that bug once I got the new patch out.

thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262574</commentid>
    <comment_count>20</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-10 02:30:03 -0700</bug_when>
    <thetext>Closing this as a duplicate of https://bugs.webkit.org/show_bug.cgi?id=37630.

*** This bug has been marked as a duplicate of bug 37630 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59025</attachid>
            <date>2010-06-17 11:55:31 -0700</date>
            <delta_ts>2010-06-18 04:18:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40792-20100617195529.patch</filename>
            <type>text/plain</type>
            <size>12481</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMDEzNDgyNTAyNmU0NzM0MjI3YmFhYzg0M2VjOTVhYTU3OGI0Nzc1Li4wYmM5MDlm
NjllMTExNThmOTM3NDlmNjQxNDQ1NDUwYzViZmI3N2U1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDYtMTcgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNjcmlwdCB0byBsaXN0
IGR1cGxpY2F0ZWQgZmlsZXMsIGFuZCBkZWR1cGUgc29tZSBjaHJvbWl1bS1zcGVjaWZpYyBMYXlv
dXRUZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwNzkyCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kZWR1cGVf
Y2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5OiBBZGRlZC4KKyAgICAgICAgU2NyaXB0IHRoYXQgcmVt
b3ZlcyBkdXBsaWNhdGVkIHRlc3QgZXhwZWN0YXRpb25zIGZyb20gcGxhdGZvcm0vY2hyb21pdW0t
d2luIGFuZCBwbGF0Zm9ybS9jaHJvbWl1bS1tYWMgYW5kIG1vdmUgdG8gcGxhdGZvcm0vY2hyb21p
dW0uCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9saXN0X2R1cGxp
Y2F0ZXMucHk6IEFkZGVkLgorICAgICAgICBTY3JpcHQgdGhhdCBsaXN0cyBkdXBsaWNhdGVkIGZp
bGVzLgorCiAyMDEwLTA2LTE3ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lh
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFF0IGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RlZHVwZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9kZWR1cGVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMjUyMDhmZDVi
N2NkYzliNzIzMjUxODU0MjE0OWQyMjQ2MjliMGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kZWR1cGVfY2hyb21pdW1fd2Via2l0
X3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJEZS1kdXBsaWNhdGUgQ2hyb21pdW0gTGF5b3V0VGVzdHMuCisKK0No
cm9taXVtIHVzZXMgdGhlIGZvbGxvd2luZyBoaWVyYXJjaHkgZm9yIHJlYmFzZWxpbmVkIHRlc3Rz
OgorcGxhdGZvcm0vY2hyb21pdW0td2luLSogPT4gcGxhdGZvcm0vY2hyb21pdW0td2luID0+IHBs
YXRmb3JtL2Nocm9taXVtCitwbGF0Zm9ybS9jaHJvbWl1bS1saW51eCA9PiBwbGF0Zm9ybS9jaHJv
bWl1bS13aW4gPT4gcGxhdGZvcm0vY2hyb21pdW0KK3BsYXRmb3JtL2Nocm9taXVtLW1hYyA9PiBw
bGF0Zm9ybS9jaHJvbWl1bQorCitXaGVuIHJlYmFzZWxpbmluZywgc29tZSBmaWxlcyBldmVudHVh
bGx5IGdldCBkdXBsaWNhdGVkLiBUaGlzIHNjcmlwdCB0YWtlcyBjYXJlCitvZiByZW1vdmluZyB0
aGVtLgorIiIiCisKK2ltcG9ydCBsaXN0X2R1cGxpY2F0ZXMKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQg
c3lzCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmRl
ZHVwZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMiKQorCisKK2RlZiBnZXRfZHVwbGljYXRlZF9maWxl
cygpOgorICAgICIiIkxpc3RzIGFsbCBkdXBsaWNhdGUgZmlsZXMgaW4gY2hyb21pdW0td2luIGFu
ZCBjaHJvbWl1bS1tYWMuCisKKyAgICBSZXR1cm5zOgorICAgICAgdGhlIGxpc3Qgb2YgZHVwbGlj
YXRlZCBmaWxlcy4KKyAgICAiIiIKKyAgICBiYXNlX3BhdGggPSBvcy5wYXRoLmpvaW4oJ0xheW91
dFRlc3RzJywgJ3BsYXRmb3JtJykKKyAgICBwbGF0Zm9ybXMgPSBbJ2Nocm9taXVtLXdpbicsICdj
aHJvbWl1bS1tYWMnXQorICAgIGR1cGxpY2F0ZWQgPSBsaXN0X2R1cGxpY2F0ZXMubGlzdF9kdXBs
aWNhdGVzKFtvcy5wYXRoLmpvaW4oYmFzZV9wYXRoLCBwKSBmb3IgcCBpbiBwbGF0Zm9ybXNdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLnR4dCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwg
VHJ1ZSkKKyAgICByZXR1cm4gZHVwbGljYXRlZAorCisKK2RlZiBleGVjdXRlKGNtZCwgZHJ5X3J1
bik6CisgICAgaWYgZHJ5X3J1bjoKKyAgICAgICAgcHJpbnQgJ1dvdWxkIGV4ZWN1dGU6ICcgKyBj
bWQKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnUnVubmluZzogJyArIGNtZAorICAgICAgICBv
cy5zeXN0ZW0oY21kKQorCisKK2RlZiBkZWR1cGUoZHVwbGljYXRlZF9saXN0LCBkcnlfcnVuKToK
KyAgICBybV9jbWQgPSAnZ2l0IHJtICUoZHVwZSlzJworICAgIG12X2NtZCA9ICdnaXQgbXYgJShz
cmMpcyAlKGRlc3QpcycKKyAgICBmb3IgZCBpbiBkdXBsaWNhdGVkX2xpc3Q6CisgICAgICAgICMg
V2UncmUgb25seSBkZWR1cGluZyBjaHJvbWl1bS13aW4gYW5kIGNocm9taXVtLW1hYy4KKyAgICAg
ICAgYXNzZXJ0IChsZW4oZCkgPT0gMikKKyAgICAgICAgZXhlY3V0ZShybV9jbWQgJSB7J2R1cGUn
OiBkWzBdfSwgZHJ5X3J1bikKKyAgICAgICAgZXhlY3V0ZShtdl9jbWQgJSB7J3NyYyc6IGRbMV0s
ICdkZXN0JzogcmUuc3ViKHIncGxhdGZvcm0vY2hyb21pdW0tLiovJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZFsxXSl9LCBkcnlfcnVuKQorCisKK2RlZiBydW4ob3B0aW9ucywgYXJncyk6CisgICAgIiIi
TGlzdHMgYWxsIGR1cGxpY2F0ZSBmaWxlcyBpbiB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyBnaXZl
biBhcyBvcHRpb25zLgorCisgICAgQXJnczoKKyAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBv
ZiBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgIFJldHVybnM6CisgICAgICB0aGUgbnVtYmVyIG9m
IGR1cGxpY2F0ZWQgZmlsZXMsIG9yIC0xIGlmIHRoZXJlIGlzIGFuCisgICAgICAgICAgZXJyb3Iu
CisgICAgIiIiCisgICAgZHVwbGljYXRlZCA9IGdldF9kdXBsaWNhdGVkX2ZpbGVzKCkKKyAgICBk
ZWR1cGUoZHVwbGljYXRlZCwgb3B0aW9ucy5kcnlfcnVuKQorICAgIHJldHVybiBsZW4oZHVwbGlj
YXRlZCkKKworCitkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgorICAgICIiIlByb3ZpZGVzIGEg
ZGVmYXVsdCBzZXQgb2YgY29tbWFuZCBsaW5lIGFyZ3MuCisKKyAgICBSZXR1cm5zIGEgdHVwbGUg
b2Ygb3B0aW9ucywgYXJncyBmcm9tIG9wdHBhcnNlIiIiCisKKyAgICBjb25maWd1cmF0aW9uX29w
dGlvbnMgPSBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItbiIsICItLWRyeS1ydW4i
LCBkZXN0PSJkcnlfcnVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJz
dG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0iRHJ5IHJ1bi4iKSwKKyAgICBdCisKKyAgICBvcHRpb25fbGlzdCA9IChjb25maWd1cmF0
aW9uX29wdGlvbnMpCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihv
cHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFy
c2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIHJldHVybiBvcHRpb25zLCBhcmdzCisKKworZGVm
IG1haW4oKToKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncygpCisgICAgcmV0dXJuIHJ1
bihvcHRpb25zLCBhcmdzKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIHRyeToK
KyAgICAgICAgc3lzLmV4aXQobWFpbigpKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoK
KyAgICAgICAgIyB0aGlzIG1pcnJvcnMgd2hhdCB0aGUgc2hlbGwgbm9ybWFsbHkgZG9lcworICAg
ICAgICBzeXMuZXhpdChzaWduYWwuU0lHSU5UICsgMTI4KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGlzdF9kdXBsaWNhdGVzLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGlzdF9kdXBsaWNhdGVzLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJlODYzOTM0OTZlOWQyZTY1NTk4Y2M5Y2Q5ZDBmZDNhZWExNTNhODQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9saXN0X2R1cGxpY2F0ZXMucHkKQEAgLTAsMCArMSwxNzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkxpc3RzIGZpbGVzIHRoYXQgYXJlIGR1cGxpY2F0
ZWQgaW4gdGhlIGlucHV0IGRpcmVjdG9yaWVzLgorCitUaGlzIHNjcmlwdCByZWFkcyBzZXZlcmFs
IGRpcmVjdG9yaWVzIGFuZCBsaXN0cyB0aGUgZmlsZXMgdGhhdCBhcmUgZHVwbGljYXRlZC4KK0l0
J3MgbW9zdGx5IHVzZWZ1bCB0byBkZS1kdXBsaWNhdGUgTGF5b3V0VGVzdHMgYmFzZWxpbmVzIHNw
cmVhZCBhY3Jvc3MgZGlmZmVyZW50CitwbGF0Zm9ybXMuCisiIiIKKworaW1wb3J0IGZubWF0Y2gK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IG9wdHBhcnNlCitpbXBvcnQg
b3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lz
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxpc3Rf
ZHVwbGljYXRlcyIpCisKKworZGVmIGdldF9maWxlX2NvbnRlbnRfaGFzaChmaWxlX25hbWUpOgor
ICAgICIiIlJldHVybnMgdGhlIHNoYTEgaGFzaCBmb3IgdGhlIGNvbnRlbnRzIG9mIGZpbGVfbmFt
ZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxlX25hbWU6IGZpbGUgbmFtZS4KKyAgICBSZXR1cm5z
OgorICAgICAgVGhlIHNoYTEgaGFzaCBmb3IgdGhlIGNvbnRlbnRzIG9mIGZpbGVfbmFtZS4KKyAg
ICAiIiIKKyAgICBmID0gZmlsZShmaWxlX25hbWUsICdyYicpCisgICAgY29udGVudCA9IGYucmVh
ZCgpCisgICAgZi5jbG9zZSgpCisgICAgaCA9IGhhc2hsaWIuc2hhMSgpCisgICAgaC51cGRhdGUo
Y29udGVudCkKKyAgICByZXR1cm4gaC5oZXhkaWdlc3QoKQorCisKK2RlZiBnZXRfZmlsZXNfbGlz
dChkaXJlY3RvcmllcywgZ2xvYl9wYXR0ZXJuLCByZWN1cnNpdmUpOgorICAgICIiIlJldHVybnMg
YSBsaXN0IG9mIGZpbGUgbmFtZXMgZm9yIHRoZSBnaXZlbiBsaXN0IG9mIGRpcmVjdG9yaWVzLgor
CisgICAgQXJnczoKKyAgICAgIGRpcmVjdG9yaWVzOiBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8g
Zm9sbG93LgorICAgICAgZ2xvYl9wYXR0ZXJuOiBhIGZpbHRlciB0byBhcHBseSB0byBmaWxlIG5h
bWVzLAorICAgICAgcmVjdXJzaXZlOiB3aGV0aGVyIG9yIG5vdCB0byByZWN1cnNlIHRoZSBkaXJl
Y3Rvcmllcy4KKyAgICBSZXR1cm5zOgorICAgICAgYSBsaXN0IG9mIGZpbGUgbmFtZXMuCisgICAg
IiIiCisgICAgcmV0ID0gW10KKyAgICBpZiByZWN1cnNpdmU6CisgICAgICAgIGZvciBkIGluIGRp
cmVjdG9yaWVzOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGso
ZCk6CisgICAgICAgICAgICAgICAgcmV0ICs9IFtvcy5wYXRoLmpvaW4ocm9vdCwgeCkgZm9yIHgg
aW4gZmlsZXMgaWYgZm5tYXRjaC5mbm1hdGNoKHgsIGdsb2JfcGF0dGVybildCisgICAgZWxzZToK
KyAgICAgICAgZm9yIGQgaW4gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICBmb3IgZiBpbiBvcy5s
aXN0ZGlyKGQpOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihkLCBm
KQorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaCh4LCBnbG9iX3BhdHRlcm4pIGFu
ZCBvcy5wYXRoLmlzZmlsZShmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXQgKz0g
W2Z1bGxfcGF0aF0KKyAgICByZXR1cm4gcmV0CisKKworZGVmIGxpc3RfZHVwbGljYXRlcyhkaXJl
Y3RvcmllcywgZ2xvYl9wYXR0ZXJuLCByZWN1cnNpdmUsIHNhbWVfbmFtZSk6CisgICAgIiIiUmV0
dXJucyBhIGxpc3Qgb2YgbGlzdHMgb2YgZmlsZXMgd2l0aCBkdXBsaWNhdGVkIGNvbnRlbnQuCisK
KyAgICBBcmdzOgorICAgICAgZGlyZWN0b3JpZXM6IGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBm
b2xsb3cuCisgICAgICBnbG9iX3BhdHRlcm46IGEgZmlsdGVyIHRvIGFwcGx5IHRvIGZpbGUgbmFt
ZXMuCisgICAgICByZWN1cnNpdmU6IHdoZXRoZXIgb3Igbm90IHRvIHJlY3Vyc2UgdGhlIGRpcmVj
dG9yaWVzLgorICAgICAgc2FtZV9uYW1lOiBvbmx5IGNvbnNpZGVyIGZpbGVzIHdpdGggdGhlIHNh
bWUgbmFtZS4KKyAgICBSZXR1cm5zOgorICAgICAgYSBsaXN0IG9mIGxpc3RzIG9mIGZpbGUgbmFt
ZXMgd2l0aCBkdXBsaWNhdGVkIGNvbnRlbnQuCisgICAgIiIiCisgICAgYWxsX2ZpbGVzID0gZ2V0
X2ZpbGVzX2xpc3QoZGlyZWN0b3JpZXMsIGdsb2JfcGF0dGVybiwgcmVjdXJzaXZlKQorICAgIGNv
bnRlbnRfaGFzaF9tYXAgPSB7fQorICAgIGZvciBmIGluIGFsbF9maWxlczoKKyAgICAgICAgaGFz
aCA9IGdldF9maWxlX2NvbnRlbnRfaGFzaChmKQorICAgICAgICBpZiBoYXNoIGluIGNvbnRlbnRf
aGFzaF9tYXA6CisgICAgICAgICAgICBpZiAobm90IHNhbWVfbmFtZSBvcgorICAgICAgICAgICAg
ICAgIChvcy5wYXRoLmJhc2VuYW1lKGNvbnRlbnRfaGFzaF9tYXBbaGFzaF1bMF0pID09CisgICAg
ICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoZikpKToKKyAgICAgICAgICAgICAgICBjb250
ZW50X2hhc2hfbWFwW2hhc2hdICs9IFtmXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29u
dGVudF9oYXNoX21hcFtoYXNoXSA9IFtmXQorICAgIGR1cGxpY2F0ZWQgPSBbY29udGVudF9oYXNo
X21hcFtrXSBmb3IgayBpbiBjb250ZW50X2hhc2hfbWFwIGlmIGxlbihjb250ZW50X2hhc2hfbWFw
W2tdKSA+IDFdCisgICAgcmV0dXJuIGR1cGxpY2F0ZWQKKworCitkZWYgcnVuKG9wdGlvbnMsIGFy
Z3MpOgorICAgICIiIkxpc3RzIGFsbCBkdXBsaWNhdGUgZmlsZXMgaW4gdGhlIGxpc3Qgb2YgZGly
ZWN0b3JpZXMgZ2l2ZW4gYXMgb3B0aW9ucy4KKworICAgIEFyZ3M6CisgICAgICBvcHRpb25zOiBh
IGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgICBSZXR1cm5zOgorICAgICAg
dGhlIG51bWJlciBvZiBkdXBsaWNhdGVkIGZpbGVzLgorICAgICIiIgorICAgIGR1cGxpY2F0ZWQg
PSBsaXN0X2R1cGxpY2F0ZXMob3B0aW9ucy5kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMuZ2xvYl9wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9ucy5yZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLnNhbWVfbmFtZSkKKyAgICBmb3IgZCBpbiBkdXBsaWNhdGVkOgor
ICAgICAgICBwcmludCAnLS0nCisgICAgICAgIGZvciBmIGluIGQ6CisgICAgICAgICAgICBwcmlu
dCBmCisgICAgcmV0dXJuIGxlbihkdXBsaWNhdGVkKQorCisKK2RlZiBwYXJzZV9hcmdzKGFyZ3M9
Tm9uZSk6CisgICAgIiIiUHJvdmlkZXMgYSBkZWZhdWx0IHNldCBvZiBjb21tYW5kIGxpbmUgYXJn
cy4KKworICAgIFJldHVybnMgYSB0dXBsZSBvZiBvcHRpb25zLCBhcmdzIGZyb20gb3B0cGFyc2Ui
IiIKKworICAgIGNvbmZpZ3VyYXRpb25fb3B0aW9ucyA9IFsKKyAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi1kIiwgIi0tZGlyZWN0b3J5IiwgZGVzdD0iZGlyZWN0b3JpZXMiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImFwcGVuZCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9IlNwZWNpZnkgd2hlcmUgdG8gbG9vayBmb3IgZHVwbGljYXRlcy4i
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1nIiwgIi0tZ2xvYiIsIGRlc3Q9Imds
b2JfcGF0dGVybiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IioiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTcGVjaWZ5IHRoZSBnbG9iIHRvIGZp
bHRlciB0aGUgZmlsZXMuIiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItciIsICIt
LXJlY3Vyc2l2ZSIsIGRlc3Q9InJlY3Vyc2l2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9IlJlY3Vyc2UgdGhlIGRpcmVjdG9yaWVzIGxpc3QuIiksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItcyIsICItLXNhbWVfbmFtZSIsIGRlc3Q9InNhbWVf
bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik9ubHkg
Y29uc2lkZXIgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lLiIpLAorICAgIF0KKworICAgIG9wdGlv
bl9saXN0ID0gKGNvbmZpZ3VyYXRpb25fb3B0aW9ucykKKyAgICBvcHRpb25fcGFyc2VyID0gb3B0
cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQorCisgICAgb3B0aW9u
cywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgcmV0dXJuIG9w
dGlvbnMsIGFyZ3MKKworCitkZWYgbWFpbigpOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9h
cmdzKCkKKyAgICByZXR1cm4gcnVuKG9wdGlvbnMsIGFyZ3MpCisKK2lmICdfX21haW5fXycgPT0g
X19uYW1lX186CisgICAgdHJ5OgorICAgICAgICBzeXMuZXhpdChtYWluKCkpCisgICAgZXhjZXB0
IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAjIHRoaXMgbWlycm9ycyB3aGF0IHRoZSBzaGVs
bCBub3JtYWxseSBkb2VzCisgICAgICAgIHN5cy5leGl0KHNpZ25hbC5TSUdJTlQgKyAxMjgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59093</attachid>
            <date>2010-06-18 04:18:12 -0700</date>
            <delta_ts>2010-06-21 06:34:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40792-20100618121810.patch</filename>
            <type>text/plain</type>
            <size>13493</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxYjk5MzZkNDJhMWQwYmE0MzU0YWQyM2M0YjQ1NjU0OWVkOGYwNmI1Li5jMjdiZDc1
OWZhNWQ0MWMzMDI4NGMwNGQ5ZjUxMzBhNjI3NjljNGYzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDYtMTcgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNjcmlwdCB0byBsaXN0
IGR1cGxpY2F0ZWQgZmlsZXMsIGFuZCBkZWR1cGUgTGF5b3V0VGVzdHMgZXhwZWN0YXRpb25zLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA3OTIKKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RlZHVwZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHk6IEFkZGVkLgorICAgICAgICBTY3JpcHQgdGhhdCByZW1vdmVzIGR1cGxp
Y2F0ZWQgdGVzdCBleHBlY3RhdGlvbnMgZnJvbSBhIGxpc3Qgb2YgcGxhdGZvcm1zIG1vdmUgdG8g
dGhlIGdpdmVuIGRlc3RpbmF0aW9uLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGlzdF9kdXBsaWNhdGVzLnB5OiBBZGRlZC4KKyAgICAgICAgU2NyaXB0IHRoYXQg
bGlzdHMgZHVwbGljYXRlZCBmaWxlcy4KKwogMjAxMC0wNi0xNyAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGVkdXBlX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2RlZHVwZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjlm
NGYyM2M0M2NlODc3NTFiYzhiZjBkY2NmMmFhNGU0ZjA3ODhjZAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RlZHVwZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHMucHkKQEAgLTAsMCArMSwxNTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkRlLWR1cGxpY2F0ZSBDaHJvbWl1bSBMYXlvdXRUZXN0
cy4KKworQ2hyb21pdW0gdXNlcyB0aGUgZm9sbG93aW5nIGhpZXJhcmNoeSBmb3IgcmViYXNlbGlu
ZWQgdGVzdHM6CitwbGF0Zm9ybS9jaHJvbWl1bS13aW4tKiA9PiBwbGF0Zm9ybS9jaHJvbWl1bS13
aW4gPT4gcGxhdGZvcm0vY2hyb21pdW0KK3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4ID0+IHBsYXRm
b3JtL2Nocm9taXVtLXdpbiA9PiBwbGF0Zm9ybS9jaHJvbWl1bQorcGxhdGZvcm0vY2hyb21pdW0t
bWFjID0+IHBsYXRmb3JtL2Nocm9taXVtCisKK1doZW4gcmViYXNlbGluaW5nLCBzb21lIGZpbGVz
IGV2ZW50dWFsbHkgZ2V0IGR1cGxpY2F0ZWQuIFRoaXMgc2NyaXB0IHRha2VzIGNhcmUKK29mIHJl
bW92aW5nIHRoZW0uCisiIiIKKworaW1wb3J0IGxpc3RfZHVwbGljYXRlcworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaWduYWwK
K2ltcG9ydCBzeXMKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRf
dGVzdHMuZGVkdXBlX2Nocm9taXVtX3dlYmtpdF90ZXN0cyIpCisKKworZGVmIGdldF9kdXBsaWNh
dGVkX2ZpbGVzKHBsYXRmb3Jtcyk6CisgICAgIiIiTGlzdHMgYWxsIGR1cGxpY2F0ZSBmaWxlcyBp
biBwbGF0Zm9ybXMuCisKKyAgICBBcmdzOgorICAgICAgcGxhdGZvcm1zOiBsaXN0IG9mIHBsYXRm
b3JtcyB1bmRlciBMYXlvdXRUZXN0cy9wbGF0Zm9ybSB0byBjaGVjay4KKworICAgIFJldHVybnM6
CisgICAgICB0aGUgbGlzdCBvZiBkdXBsaWNhdGVkIGZpbGVzLgorICAgICIiIgorICAgIGJhc2Vf
cGF0aCA9IG9zLnBhdGguam9pbignTGF5b3V0VGVzdHMnLCAncGxhdGZvcm0nKQorICAgIGR1cGxp
Y2F0ZWQgPSBsaXN0X2R1cGxpY2F0ZXMubGlzdF9kdXBsaWNhdGVzKFtvcy5wYXRoLmpvaW4oYmFz
ZV9wYXRoLCBwKSBmb3IgcCBpbiBwbGF0Zm9ybXNdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcqLnR4dCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgVHJ1ZSkKKyAgICByZXR1cm4gZHVwbGlj
YXRlZAorCisKK2RlZiBleGVjdXRlKGNtZCwgZHJ5X3J1bik6CisgICAgaWYgZHJ5X3J1bjoKKyAg
ICAgICAgcHJpbnQgJ1dvdWxkIGV4ZWN1dGU6ICcgKyBjbWQKKyAgICBlbHNlOgorICAgICAgICBw
cmludCAnUnVubmluZzogJyArIGNtZAorICAgICAgICBvcy5zeXN0ZW0oY21kKQorCisKK2RlZiBk
ZWR1cGUoZHVwbGljYXRlZF9saXN0LCBwbGF0Zm9ybXMsIGRlc3RfZGlyLCBkcnlfcnVuKToKKyAg
ICAiIiJEZWR1cGUgYWxsIGZpbGVzIGZyb20gZHVwbGljYXRlZF9saXN0IGFuZCBrZWVwIGEgc2lu
Z2xlIGNvcHkgaW4gZGVzdF9kaXIuCisKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgImdpdCBtdiIg
dG8gZGVzdGluYXRpb24gKGlmIG5lZWRlZCksIGFuZCAiZ2l0IHJtIiBhbGwKKyAgICBvdGhlciBk
dXBsaWNhdGVzLgorCisgICAgQXJnczoKKyAgICAgIGR1cGxpY2F0ZWRfbGlzdDogYSBsaXN0IG9m
IGR1cGxpY2F0ZWQgZmlsZXMuCisgICAgICBwbGF0Zm9ybXM6IGEgbGlzdCBvZiBwbGF0Zm9ybXMu
CisgICAgICBkZXN0X2RpcjogdGhlIGZpbmFsIGRlc3RpbmF0aW9uLgorICAgICAgZHJ5X3J1bjog
ZHJ5IHJ1bi4KKyAgICAiIiIKKyAgICBybV9jbWQgPSAnZ2l0IHJtICUoZHVwZSlzJworICAgIG12
X2NtZCA9ICdnaXQgbXYgJShzcmMpcyAlKGRlc3QpcycKKyAgICBuZWVkc19tdiA9IGRlc3RfZGly
IG5vdCBpbiBwbGF0Zm9ybXMKKyAgICBzcmNfcGF0dGVybiA9IG9zLnBhdGguam9pbigncGxhdGZv
cm0nLCAnLionKQorICAgIHNyY19wYXR0ZXJuICs9IG9zLnNlcAorICAgIGlmIGRlc3RfZGlyWy0x
XSAhPSBvcy5zZXA6CisgICAgICAgIGRlc3RfZGlyICs9IG9zLnNlcAorICAgIGRlc3RfcGF0dGVy
biA9IG9zLnBhdGguam9pbigncGxhdGZvcm0nLCBkZXN0X2RpcikKKyAgICBmb3IgZCBpbiBkdXBs
aWNhdGVkX2xpc3Q6CisgICAgICAgIGZvciBmIGluIGQ6CisgICAgICAgICAgICBpZiBuZWVkc19t
diBhbmQgZiA9PSBkWzBdOgorICAgICAgICAgICAgICAgICMgTW92ZXMgdGhlIGZpcnN0IGR1cGxp
Y2F0ZSB0byBkZXN0LgorICAgICAgICAgICAgICAgIGV4ZWN1dGUobXZfY21kICUgeydzcmMnOiBm
LCAnZGVzdCc6IHJlLnN1YihzcmNfcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wYXR0ZXJuLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmKX0sIGRy
eV9ydW4pCisgICAgICAgICAgICBlbGlmIGRlc3RfZGlyIG5vdCBpbiBmOgorICAgICAgICAgICAg
ICAgICMgUmVtb3ZlcyByZW1haW5pbmcgZHVwbGljYXRlcy4KKyAgICAgICAgICAgICAgICBleGVj
dXRlKHJtX2NtZCAlIHsnZHVwZSc6IGZ9LCBkcnlfcnVuKQorCisKK2RlZiBydW4ob3B0aW9ucywg
YXJncyk6CisgICAgIiIiTGlzdHMgYWxsIGR1cGxpY2F0ZSBmaWxlcyBpbiB0aGUgbGlzdCBvZiBk
aXJlY3RvcmllcyBnaXZlbiBhcyBvcHRpb25zLgorCisgICAgQXJnczoKKyAgICAgIG9wdGlvbnM6
IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgIFJldHVybnM6CisgICAg
ICB0aGUgbnVtYmVyIG9mIGR1cGxpY2F0ZWQgZmlsZXMsIG9yIC0xIGlmIHRoZXJlIGlzIGFuCisg
ICAgICAgICAgZXJyb3IuCisgICAgIiIiCisgICAgZHVwbGljYXRlZCA9IGdldF9kdXBsaWNhdGVk
X2ZpbGVzKG9wdGlvbnMucGxhdGZvcm1zKQorICAgIGRlZHVwZShkdXBsaWNhdGVkLCBvcHRpb25z
LnBsYXRmb3Jtcywgb3B0aW9ucy5kZXN0LCBvcHRpb25zLmRyeV9ydW4pCisgICAgcmV0dXJuIGxl
bihkdXBsaWNhdGVkKQorCisKK2RlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CisgICAgIiIiUHJv
dmlkZXMgYSBkZWZhdWx0IHNldCBvZiBjb21tYW5kIGxpbmUgYXJncy4KKworICAgIFJldHVybnMg
YSB0dXBsZSBvZiBvcHRpb25zLCBhcmdzIGZyb20gb3B0cGFyc2UiIiIKKworICAgIGNvbmZpZ3Vy
YXRpb25fb3B0aW9ucyA9IFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1uIiwgIi0t
ZHJ5LXJ1biIsIGRlc3Q9ImRyeV9ydW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJEcnkgcnVuLiIpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigi
LXAiLCAiLS1wbGF0Zm9ybSIsIGRlc3Q9InBsYXRmb3JtcyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFjdGlvbj0iYXBwZW5kIiwgaGVscD0iUGxhdGZvcm1zIHRvIGNoZWNrLiIpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLWQiLCAiLS1kZXN0IiwgZGVzdD0iZGVzdCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRlc3RpbmF0aW9uIHBsYXRmb3Jt
IiksCisgICAgXQorCisgICAgb3B0aW9uX2xpc3QgPSAoY29uZmlndXJhdGlvbl9vcHRpb25zKQor
ICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0
aW9uX2xpc3QpCisKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdz
KGFyZ3MpCisKKyAgICByZXR1cm4gb3B0aW9ucywgYXJncworCisKK2RlZiBtYWluKCk6CisgICAg
b3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQorICAgIHJldHVybiBydW4ob3B0aW9ucywgYXJn
cykKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICB0cnk6CisgICAgICAgIHN5cy5l
eGl0KG1haW4oKSkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICMgdGhp
cyBtaXJyb3JzIHdoYXQgdGhlIHNoZWxsIG5vcm1hbGx5IGRvZXMKKyAgICAgICAgc3lzLmV4aXQo
c2lnbmFsLlNJR0lOVCArIDEyOCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xpc3RfZHVwbGljYXRlcy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xpc3RfZHVwbGljYXRlcy5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ZTg2MzkzNDk2ZTlkMmU2NTU5OGNjOWNkOWQwZmQzYWVhMTUzYTg0Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGlzdF9kdXBsaWNh
dGVzLnB5CkBAIC0wLDAgKzEsMTcyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiJMaXN0cyBmaWxlcyB0aGF0IGFyZSBkdXBsaWNhdGVkIGluIHRoZSBpbnB1
dCBkaXJlY3Rvcmllcy4KKworVGhpcyBzY3JpcHQgcmVhZHMgc2V2ZXJhbCBkaXJlY3RvcmllcyBh
bmQgbGlzdHMgdGhlIGZpbGVzIHRoYXQgYXJlIGR1cGxpY2F0ZWQuCitJdCdzIG1vc3RseSB1c2Vm
dWwgdG8gZGUtZHVwbGljYXRlIExheW91dFRlc3RzIGJhc2VsaW5lcyBzcHJlYWQgYWNyb3NzIGRp
ZmZlcmVudAorcGxhdGZvcm1zLgorIiIiCisKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcGxh
dGZvcm0KK2ltcG9ydCByZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5saXN0X2R1cGxpY2F0ZXMiKQor
CisKK2RlZiBnZXRfZmlsZV9jb250ZW50X2hhc2goZmlsZV9uYW1lKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBzaGExIGhhc2ggZm9yIHRoZSBjb250ZW50cyBvZiBmaWxlX25hbWUuCisKKyAgICBBcmdz
OgorICAgICAgZmlsZV9uYW1lOiBmaWxlIG5hbWUuCisgICAgUmV0dXJuczoKKyAgICAgIFRoZSBz
aGExIGhhc2ggZm9yIHRoZSBjb250ZW50cyBvZiBmaWxlX25hbWUuCisgICAgIiIiCisgICAgZiA9
IGZpbGUoZmlsZV9uYW1lLCAncmInKQorICAgIGNvbnRlbnQgPSBmLnJlYWQoKQorICAgIGYuY2xv
c2UoKQorICAgIGggPSBoYXNobGliLnNoYTEoKQorICAgIGgudXBkYXRlKGNvbnRlbnQpCisgICAg
cmV0dXJuIGguaGV4ZGlnZXN0KCkKKworCitkZWYgZ2V0X2ZpbGVzX2xpc3QoZGlyZWN0b3JpZXMs
IGdsb2JfcGF0dGVybiwgcmVjdXJzaXZlKToKKyAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBmaWxl
IG5hbWVzIGZvciB0aGUgZ2l2ZW4gbGlzdCBvZiBkaXJlY3Rvcmllcy4KKworICAgIEFyZ3M6Cisg
ICAgICBkaXJlY3RvcmllczogYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGZvbGxvdy4KKyAgICAg
IGdsb2JfcGF0dGVybjogYSBmaWx0ZXIgdG8gYXBwbHkgdG8gZmlsZSBuYW1lcywKKyAgICAgIHJl
Y3Vyc2l2ZTogd2hldGhlciBvciBub3QgdG8gcmVjdXJzZSB0aGUgZGlyZWN0b3JpZXMuCisgICAg
UmV0dXJuczoKKyAgICAgIGEgbGlzdCBvZiBmaWxlIG5hbWVzLgorICAgICIiIgorICAgIHJldCA9
IFtdCisgICAgaWYgcmVjdXJzaXZlOgorICAgICAgICBmb3IgZCBpbiBkaXJlY3RvcmllczoKKyAg
ICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgorICAgICAgICAg
ICAgICAgIHJldCArPSBbb3MucGF0aC5qb2luKHJvb3QsIHgpIGZvciB4IGluIGZpbGVzIGlmIGZu
bWF0Y2guZm5tYXRjaCh4LCBnbG9iX3BhdHRlcm4pXQorICAgIGVsc2U6CisgICAgICAgIGZvciBk
IGluIGRpcmVjdG9yaWVzOgorICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihkKToKKyAg
ICAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZCwgZikKKyAgICAgICAgICAg
ICAgICBpZiBmbm1hdGNoLmZubWF0Y2goeCwgZ2xvYl9wYXR0ZXJuKSBhbmQgb3MucGF0aC5pc2Zp
bGUoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFtmdWxsX3BhdGhdCisg
ICAgcmV0dXJuIHJldAorCisKK2RlZiBsaXN0X2R1cGxpY2F0ZXMoZGlyZWN0b3JpZXMsIGdsb2Jf
cGF0dGVybiwgcmVjdXJzaXZlLCBzYW1lX25hbWUpOgorICAgICIiIlJldHVybnMgYSBsaXN0IG9m
IGxpc3RzIG9mIGZpbGVzIHdpdGggZHVwbGljYXRlZCBjb250ZW50LgorCisgICAgQXJnczoKKyAg
ICAgIGRpcmVjdG9yaWVzOiBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gZm9sbG93LgorICAgICAg
Z2xvYl9wYXR0ZXJuOiBhIGZpbHRlciB0byBhcHBseSB0byBmaWxlIG5hbWVzLgorICAgICAgcmVj
dXJzaXZlOiB3aGV0aGVyIG9yIG5vdCB0byByZWN1cnNlIHRoZSBkaXJlY3Rvcmllcy4KKyAgICAg
IHNhbWVfbmFtZTogb25seSBjb25zaWRlciBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUuCisgICAg
UmV0dXJuczoKKyAgICAgIGEgbGlzdCBvZiBsaXN0cyBvZiBmaWxlIG5hbWVzIHdpdGggZHVwbGlj
YXRlZCBjb250ZW50LgorICAgICIiIgorICAgIGFsbF9maWxlcyA9IGdldF9maWxlc19saXN0KGRp
cmVjdG9yaWVzLCBnbG9iX3BhdHRlcm4sIHJlY3Vyc2l2ZSkKKyAgICBjb250ZW50X2hhc2hfbWFw
ID0ge30KKyAgICBmb3IgZiBpbiBhbGxfZmlsZXM6CisgICAgICAgIGhhc2ggPSBnZXRfZmlsZV9j
b250ZW50X2hhc2goZikKKyAgICAgICAgaWYgaGFzaCBpbiBjb250ZW50X2hhc2hfbWFwOgorICAg
ICAgICAgICAgaWYgKG5vdCBzYW1lX25hbWUgb3IKKyAgICAgICAgICAgICAgICAob3MucGF0aC5i
YXNlbmFtZShjb250ZW50X2hhc2hfbWFwW2hhc2hdWzBdKSA9PQorICAgICAgICAgICAgICAgICBv
cy5wYXRoLmJhc2VuYW1lKGYpKSk6CisgICAgICAgICAgICAgICAgY29udGVudF9oYXNoX21hcFto
YXNoXSArPSBbZl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRlbnRfaGFzaF9tYXBb
aGFzaF0gPSBbZl0KKyAgICBkdXBsaWNhdGVkID0gW2NvbnRlbnRfaGFzaF9tYXBba10gZm9yIGsg
aW4gY29udGVudF9oYXNoX21hcCBpZiBsZW4oY29udGVudF9oYXNoX21hcFtrXSkgPiAxXQorICAg
IHJldHVybiBkdXBsaWNhdGVkCisKKworZGVmIHJ1bihvcHRpb25zLCBhcmdzKToKKyAgICAiIiJM
aXN0cyBhbGwgZHVwbGljYXRlIGZpbGVzIGluIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIGdpdmVu
IGFzIG9wdGlvbnMuCisKKyAgICBBcmdzOgorICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9m
IGNvbW1hbmQgbGluZSBvcHRpb25zCisgICAgUmV0dXJuczoKKyAgICAgIHRoZSBudW1iZXIgb2Yg
ZHVwbGljYXRlZCBmaWxlcy4KKyAgICAiIiIKKyAgICBkdXBsaWNhdGVkID0gbGlzdF9kdXBsaWNh
dGVzKG9wdGlvbnMuZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zLmdsb2JfcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMucmVjdXJzaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucy5zYW1lX25hbWUpCisgICAgZm9yIGQgaW4gZHVwbGljYXRlZDoKKyAgICAgICAgcHJpbnQg
Jy0tJworICAgICAgICBmb3IgZiBpbiBkOgorICAgICAgICAgICAgcHJpbnQgZgorICAgIHJldHVy
biBsZW4oZHVwbGljYXRlZCkKKworCitkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgorICAgICIi
IlByb3ZpZGVzIGEgZGVmYXVsdCBzZXQgb2YgY29tbWFuZCBsaW5lIGFyZ3MuCisKKyAgICBSZXR1
cm5zIGEgdHVwbGUgb2Ygb3B0aW9ucywgYXJncyBmcm9tIG9wdHBhcnNlIiIiCisKKyAgICBjb25m
aWd1cmF0aW9uX29wdGlvbnMgPSBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItZCIs
ICItLWRpcmVjdG9yeSIsIGRlc3Q9ImRpcmVjdG9yaWVzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uPSJhcHBlbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJTcGVjaWZ5IHdoZXJlIHRvIGxvb2sgZm9yIGR1cGxpY2F0ZXMuIiksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItZyIsICItLWdsb2IiLCBkZXN0PSJnbG9iX3BhdHRlcm4iLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIqIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0iU3BlY2lmeSB0aGUgZ2xvYiB0byBmaWx0ZXIgdGhlIGZpbGVz
LiIpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLXIiLCAiLS1yZWN1cnNpdmUiLCBk
ZXN0PSJyZWN1cnNpdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0
b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJSZWN1cnNlIHRoZSBkaXJlY3RvcmllcyBsaXN0LiIpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLXMiLCAiLS1zYW1lX25hbWUiLCBkZXN0PSJzYW1lX25hbWUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJPbmx5IGNvbnNpZGVyIGZpbGVz
IHdpdGggdGhlIHNhbWUgbmFtZS4iKSwKKyAgICBdCisKKyAgICBvcHRpb25fbGlzdCA9IChjb25m
aWd1cmF0aW9uX29wdGlvbnMpCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBh
cnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRp
b25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIHJldHVybiBvcHRpb25zLCBhcmdzCisK
KworZGVmIG1haW4oKToKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncygpCisgICAgcmV0
dXJuIHJ1bihvcHRpb25zLCBhcmdzKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAg
IHRyeToKKyAgICAgICAgc3lzLmV4aXQobWFpbigpKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVy
cnVwdDoKKyAgICAgICAgIyB0aGlzIG1pcnJvcnMgd2hhdCB0aGUgc2hlbGwgbm9ybWFsbHkgZG9l
cworICAgICAgICBzeXMuZXhpdChzaWduYWwuU0lHSU5UICsgMTI4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59247</attachid>
            <date>2010-06-21 06:34:17 -0700</date>
            <delta_ts>2010-08-10 02:30:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40792-20100621143413.patch</filename>
            <type>text/plain</type>
            <size>23689</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiMDIzNmZkY2RiZDQwMjc0YWI4MjVhZjYwMWFhYzRiNjJlYzY0NTFjLi40MWU2MGJj
ODNmOTQ0YjU5NDcwYzNmMDA1M2Y0NDkyYWEyMTVkNTgxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMDYtMjEgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNjcmlwdCB0byBsaXN0
IGR1cGxpY2F0ZWQgZmlsZXMsIGFuZCBkZWR1cGUgTGF5b3V0VGVzdHMgZXhwZWN0YXRpb25zLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA3OTIKKwor
ICAgICAgICAqIFNjcmlwdHMvZGVkdXBlX2Nocm9taXVtX2xheW91dF90ZXN0cy5weTogQWRkZWQu
CisgICAgICAgIFNjcmlwdCB0aGF0IHJlbW92ZXMgZHVwbGljYXRlZCB0ZXN0IGV4cGVjdGF0aW9u
cyBmcm9tIGEgbGlzdCBvZiBwbGF0Zm9ybXMgbW92ZSB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24u
CisKKyAgICAgICAgKiBTY3JpcHRzL2RlZHVwZV9jaHJvbWl1bV9sYXlvdXRfdGVzdHNfdW5pdHRl
c3QucHk6IEFkZGVkLgorCisgICAgICAgICogU2NyaXB0cy9saXN0X2R1cGxpY2F0ZXMucHk6IEFk
ZGVkLgorICAgICAgICBTY3JpcHQgdGhhdCBsaXN0cyBkdXBsaWNhdGVkIGZpbGVzLgorCisgICAg
ICAgICogU2NyaXB0cy9saXN0X2R1cGxpY2F0ZXNfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9kYXRhL2R1cGxpY2F0ZV9hL25vbl9kdXBsaWNhdGUu
dHh0OiBBZGRlZC4KKyAgICAgICAgVGVzdCBkYXRhIGZvciBsaXN0X2R1cGxpY2F0ZXNfdW5pdHRl
c3QucHkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZGF0YS9kdXBsaWNhdGVf
YS90ZXN0X2R1cGxpY2F0ZV9hLnR4dDogQWRkZWQuCisgICAgICAgIFRlc3QgZGF0YSBmb3IgbGlz
dF9kdXBsaWNhdGVzX3VuaXR0ZXN0LnB5LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90
ZXN0L2RhdGEvZHVwbGljYXRlX2Ivb3RoZXJfbmFtZS50eHQ6IEFkZGVkLgorICAgICAgICBUZXN0
IGRhdGEgZm9yIGxpc3RfZHVwbGljYXRlc191bml0dGVzdC5weS4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvdGVzdC9kYXRhL2R1cGxpY2F0ZV9iL3Rlc3RfZHVwbGljYXRlX2EudHh0OiBB
ZGRlZC4KKyAgICAgICAgVGVzdCBkYXRhIGZvciBsaXN0X2R1cGxpY2F0ZXNfdW5pdHRlc3QucHku
CisKIDIwMTAtMDYtMjAgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvZGVkdXBlX2Nocm9taXVtX2xheW91dF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvZGVkdXBlX2Nocm9taXVtX2xheW91dF90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMWI2MzQx
N2E5MWY3ZGU5MTczYjBhNTJkZTlkOGI0NGNlZTAxMjhlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy9kZWR1cGVfY2hyb21pdW1fbGF5b3V0X3Rlc3RzLnB5CkBAIC0wLDAg
KzEsMTY1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJE
ZS1kdXBsaWNhdGUgQ2hyb21pdW0gTGF5b3V0VGVzdHMuCisKK0Nocm9taXVtIHVzZXMgdGhlIGZv
bGxvd2luZyBoaWVyYXJjaHkgZm9yIHJlYmFzZWxpbmVkIHRlc3RzOgorcGxhdGZvcm0vY2hyb21p
dW0td2luLSogPT4gcGxhdGZvcm0vY2hyb21pdW0td2luID0+IHBsYXRmb3JtL2Nocm9taXVtCitw
bGF0Zm9ybS9jaHJvbWl1bS1saW51eCA9PiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4gPT4gcGxhdGZv
cm0vY2hyb21pdW0KK3BsYXRmb3JtL2Nocm9taXVtLW1hYyA9PiBwbGF0Zm9ybS9jaHJvbWl1bQor
CitXaGVuIHJlYmFzZWxpbmluZywgc29tZSBmaWxlcyBldmVudHVhbGx5IGdldCBkdXBsaWNhdGVk
LiBUaGlzIHNjcmlwdCB0YWtlcyBjYXJlCitvZiByZW1vdmluZyB0aGVtLgorIiIiCisKK2ltcG9y
dCBsaXN0X2R1cGxpY2F0ZXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9y
dCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3
ZWJraXRweS5sYXlvdXRfdGVzdHMuZGVkdXBlX2Nocm9taXVtX3dlYmtpdF90ZXN0cyIpCisKKwor
ZGVmIGdldF9kdXBsaWNhdGVkX2ZpbGVzKHBsYXRmb3Jtcyk6CisgICAgIiIiTGlzdHMgYWxsIGR1
cGxpY2F0ZSBmaWxlcyBpbiBwbGF0Zm9ybXMuCisKKyAgICBBcmdzOgorICAgICAgcGxhdGZvcm1z
OiBsaXN0IG9mIHBsYXRmb3JtcyB1bmRlciBMYXlvdXRUZXN0cy9wbGF0Zm9ybSB0byBjaGVjay4K
KworICAgIFJldHVybnM6CisgICAgICB0aGUgbGlzdCBvZiBkdXBsaWNhdGVkIGZpbGVzLgorICAg
ICIiIgorICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguam9pbignTGF5b3V0VGVzdHMnLCAncGxhdGZv
cm0nKQorICAgIGR1cGxpY2F0ZWQgPSBsaXN0X2R1cGxpY2F0ZXMubGlzdF9kdXBsaWNhdGVzKFtv
cy5wYXRoLmpvaW4oYmFzZV9wYXRoLCBwKSBmb3IgcCBpbiBwbGF0Zm9ybXNdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLnR4dCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgVHJ1ZSkKKyAg
ICByZXR1cm4gZHVwbGljYXRlZAorCisKK2RlZiBleGVjdXRlKGFyZ3MsIGRyeV9ydW4pOgorICAg
IGlmIGRyeV9ydW46CisgICAgICAgIF9sb2cuaW5mbygnV291bGQgZXhlY3V0ZTogJyArIHN0cihh
cmdzKSkKKyAgICBlbHNlOgorICAgICAgICBfbG9nLmluZm8oJ1J1bm5pbmc6ICcgKyBzdHIoYXJn
cykpCisgICAgICAgIGV4ZWN1dGl2ZS5FeGVjdXRpdmUoKS5ydW5fY29tbWFuZChhcmdzKQorCisK
K2RlZiBkZWR1cGUoZHVwbGljYXRlZF9saXN0LCBwbGF0Zm9ybXMsIGRlc3RfZGlyLCBkcnlfcnVu
KToKKyAgICAiIiJEZWR1cGUgYWxsIGZpbGVzIGZyb20gZHVwbGljYXRlZF9saXN0IGFuZCBrZWVw
IGEgc2luZ2xlIGNvcHkgaW4gZGVzdF9kaXIuCisKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgImdp
dCBtdiIgdG8gZGVzdGluYXRpb24gKGlmIG5lZWRlZCksIGFuZCAiZ2l0IHJtIiBhbGwKKyAgICBv
dGhlciBkdXBsaWNhdGVzLgorCisgICAgQXJnczoKKyAgICAgIGR1cGxpY2F0ZWRfbGlzdDogYSBs
aXN0IG9mIGR1cGxpY2F0ZWQgZmlsZXMuCisgICAgICBwbGF0Zm9ybXM6IGEgbGlzdCBvZiBwbGF0
Zm9ybXMuCisgICAgICBkZXN0X2RpcjogdGhlIGZpbmFsIGRlc3RpbmF0aW9uLgorICAgICAgZHJ5
X3J1bjogZHJ5IHJ1bi4KKyAgICAiIiIKKyAgICBybV9jbWQgPSBbJ2dpdCcsICdybSddCisgICAg
bXZfY21kID0gWydnaXQnLCAnbXYnXQorICAgIHNyY19wYXR0ZXJuID0gb3MucGF0aC5qb2luKCdw
bGF0Zm9ybScsICcuKicpCisgICAgc3JjX3BhdHRlcm4gKz0gb3Muc2VwCisgICAgaWYgZGVzdF9k
aXJbLTFdICE9IG9zLnNlcDoKKyAgICAgICAgZGVzdF9kaXIgKz0gb3Muc2VwCisgICAgZGVzdF9w
YXR0ZXJuID0gb3MucGF0aC5qb2luKCdwbGF0Zm9ybScsIGRlc3RfZGlyKQorICAgIG5lZWRzX212
ID0gZGVzdF9kaXIgbm90IGluIFtwICsgb3Muc2VwIGZvciBwIGluIHBsYXRmb3Jtc10KKyAgICBm
b3IgZCBpbiBkdXBsaWNhdGVkX2xpc3Q6CisgICAgICAgIGZvciBmIGluIGQ6CisgICAgICAgICAg
ICBpZiBuZWVkc19tdiBhbmQgZiA9PSBkWzBdOgorICAgICAgICAgICAgICAgICMgTW92ZXMgdGhl
IGZpcnN0IGR1cGxpY2F0ZSB0byBkZXN0LgorICAgICAgICAgICAgICAgIGV4ZWN1dGUobXZfY21k
ICsgW2YsIHJlLnN1YihzcmNfcGF0dGVybiwgZGVzdF9wYXR0ZXJuLCBmKV0sIGRyeV9ydW4pCisg
ICAgICAgICAgICBlbGlmIGRlc3RfZGlyIG5vdCBpbiBmOgorICAgICAgICAgICAgICAgICMgUmVt
b3ZlcyByZW1haW5pbmcgZHVwbGljYXRlcy4KKyAgICAgICAgICAgICAgICBleGVjdXRlKHJtX2Nt
ZCArIFtmXSwgZHJ5X3J1bikKKworCitkZWYgZGVkdXBsaWNhdGVfdGVzdHMocGxhdGZvcm1zLCBk
ZXN0LCBkcnlfcnVuKToKKyAgICAiIiJEZWR1cGxpY2F0ZXMgYWxsIGxheW91dCB0ZXN0cyBmcm9t
IHRoZSBwbGF0Zm9ybXMgZ2l2ZW4gYXMgb3B0aW9ucy4KKworICAgIEFyZ3M6CisgICAgICBwbGF0
Zm9ybXM6IGEgbGlzdCBvZiBwbGF0Zm9ybXMgdW5kZXIgTGF5b3V0VGVzdHMvcGxhdGZvcm0gdG8g
ZGVkdXBsaWNhdGUuCisgICAgICBkZXN0OiB0aGUgZGVzdGluYXRpb24gcGxhdGZvcm0uCisgICAg
ICBkcnlfcnVuOiB3aGV0aGVyIG9yIG5vdCB0byBhY3R1YWxseSAocmUpbW92ZSB0aGUgZHVwbGlj
YXRlZCBmaWxlcy4KKyAgICBSZXR1cm5zOgorICAgICAgdGhlIG51bWJlciBvZiBkdXBsaWNhdGVk
IGZpbGVzLgorICAgICIiIgorICAgIGR1cGxpY2F0ZWQgPSBnZXRfZHVwbGljYXRlZF9maWxlcyhw
bGF0Zm9ybXMpCisgICAgZGVkdXBlKGR1cGxpY2F0ZWQsIHBsYXRmb3JtcywgZGVzdCwgZHJ5X3J1
bikKKyAgICByZXR1cm4gbGVuKGR1cGxpY2F0ZWQpCisKKworZGVmIHJ1bihvcHRpb25zLCBhcmdz
KToKKyAgICAiIiJEZWR1cGxpY2F0ZXMgYWxsIGxheW91dCB0ZXN0cyBmcm9tIHRoZSBwbGF0Zm9y
bXMgZ2l2ZW4gYXMgb3B0aW9ucy4KKworICAgIEFyZ3M6CisgICAgICBvcHRpb25zOiBhIGRpY3Rp
b25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgICBSZXR1cm5zOgorICAgICAgdGhlIG51
bWJlciBvZiBkdXBsaWNhdGVkIGZpbGVzLgorICAgICIiIgorICAgIHJldHVybiBkZWR1cGxpY2F0
ZV90ZXN0cyhvcHRpb25zLnBsYXRmb3Jtcywgb3B0aW9ucy5kZXN0LCBvcHRpb25zLmRyeV9ydW4p
CisKKworZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKKyAgICAiIiJQcm92aWRlcyBhIGRlZmF1
bHQgc2V0IG9mIGNvbW1hbmQgbGluZSBhcmdzLgorCisgICAgUmV0dXJucyBhIHR1cGxlIG9mIG9w
dGlvbnMsIGFyZ3MgZnJvbSBvcHRwYXJzZSIiIgorCisgICAgY29uZmlndXJhdGlvbl9vcHRpb25z
ID0gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLW4iLCAiLS1kcnktcnVuIiwgZGVz
dD0iZHJ5X3J1biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IkRyeSBydW4uIiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItcCIsICItLXBsYXRm
b3JtIiwgZGVzdD0icGxhdGZvcm1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0
aW9uPSJhcHBlbmQiLCBoZWxwPSJQbGF0Zm9ybXMgdG8gY2hlY2suIiksCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItZCIsICItLWRlc3QiLCBkZXN0PSJkZXN0IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iRGVzdGluYXRpb24gcGxhdGZvcm0iKSwKKyAgICBdCisK
KyAgICBvcHRpb25fbGlzdCA9IChjb25maWd1cmF0aW9uX29wdGlvbnMpCisgICAgb3B0aW9uX3Bh
cnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKwor
ICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAg
IHJldHVybiBvcHRpb25zLCBhcmdzCisKKworZGVmIG1haW4oKToKKyAgICBvcHRpb25zLCBhcmdz
ID0gcGFyc2VfYXJncygpCisgICAgcmV0dXJuIHJ1bihvcHRpb25zLCBhcmdzKQorCitpZiAnX19t
YWluX18nID09IF9fbmFtZV9fOgorICAgIHRyeToKKyAgICAgICAgc3lzLmV4aXQobWFpbigpKQor
ICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgIyB0aGlzIG1pcnJvcnMgd2hh
dCB0aGUgc2hlbGwgbm9ybWFsbHkgZG9lcworICAgICAgICBzeXMuZXhpdChzaWduYWwuU0lHSU5U
ICsgMTI4KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9kZWR1cGVfY2hyb21pdW1f
bGF5b3V0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9kZWR1cGVfY2hy
b21pdW1fbGF5b3V0X3Rlc3RzX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmZTgyYjQ2NDdjMWEw
MWM5OTRhZGM2ODU1MzQxNGFmYTY5MjRjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL2RlZHVwZV9jaHJvbWl1bV9sYXlvdXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTAs
MCArMSw4MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBkZWR1cGVfY2hyb21pdW1fbGF5b3V0
X3Rlc3RzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIE1vY2tMaXN0RHVw
bGljYXRlcyhvYmplY3QpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbGlzdF9kdXBsaWNh
dGVzKGRpcmVjdG9yaWVzLCBnbG9iX3BhdHRlcm4sIHJlY3Vyc2l2ZSwgc2FtZV9uYW1lKToKKyAg
ICAgICAgcmV0dXJuIFtbJ3BsYXRmb3JtL2Nocm9taXVtLXdpbi9hLnR4dCcsICdwbGF0Zm9ybS9j
aHJvbWl1bS1tYWMvYS50eHQnXSwKKyAgICAgICAgICAgICAgICBbJ3BsYXRmb3JtL2Nocm9taXVt
LXdpbi9iLnR4dCcsICdwbGF0Zm9ybS9jaHJvbWl1bS1tYWMvYi50eHQnXV0KKworCitjbGFzcyBN
b2NrRXhlY3V0aXZlKG9iamVjdCk6CisgICAgbGFzdF9ydW5fY29tbWFuZCA9IFtdCisKKyAgICBj
bGFzcyBFeGVjdXRpdmUob2JqZWN0KToKKyAgICAgICAgZGVmIHJ1bl9jb21tYW5kKHNlbGYsCisg
ICAgICAgICAgICAgICAgICAgICAgICBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgY3dk
PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dD1Ob25lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfaGFuZGxlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuX2V4aXRfY29kZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl9z
dGRlcnI9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9vdXRwdXQ9VHJ1ZSk6
CisgICAgICAgICAgICBNb2NrRXhlY3V0aXZlLmxhc3RfcnVuX2NvbW1hbmQgKz0gW2FyZ3NdCisK
KworY2xhc3MgTGlzdER1cGxpY2F0ZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYg
c2V0VXAoc2VsZik6CisgICAgICAgIE1vY2tFeGVjdXRpdmUubGFzdF9ydW5fY29tbWFuZCA9IFtd
CisgICAgICAgIGRlZHVwZV9jaHJvbWl1bV9sYXlvdXRfdGVzdHMubGlzdF9kdXBsaWNhdGVzID0g
TW9ja0xpc3REdXBsaWNhdGVzCisgICAgICAgIGRlZHVwZV9jaHJvbWl1bV9sYXlvdXRfdGVzdHMu
ZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZQorCisgICAgZGVmIHRlc3RfZHJ5X3J1bl9kb2VzbnRf
ZXhlY3V0ZV9hbnl0aGluZyhzZWxmKToKKyAgICAgICAgZmlsZXMgPSBkZWR1cGVfY2hyb21pdW1f
bGF5b3V0X3Rlc3RzLmRlZHVwbGljYXRlX3Rlc3RzKFsnY2hyb21pdW0td2luJywgJ2Nocm9taXVt
LW1hYyddLCAnY2hyb21pdW0nLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCBs
ZW4oTW9ja0V4ZWN1dGl2ZS5sYXN0X3J1bl9jb21tYW5kKSkKKworICAgIGRlZiB0ZXN0X21vdmVf
b25lX3RvX25ld19wbGFjZV9hbmRfcmVtb3ZlX290aGVyX2ZpbGUoc2VsZik6CisgICAgICAgIGZp
bGVzID0gZGVkdXBlX2Nocm9taXVtX2xheW91dF90ZXN0cy5kZWR1cGxpY2F0ZV90ZXN0cyhbJ2No
cm9taXVtLXdpbicsICdjaHJvbWl1bS1tYWMnXSwgJ2Nocm9taXVtJywgRmFsc2UpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKDQsIGxlbihNb2NrRXhlY3V0aXZlLmxhc3RfcnVuX2NvbW1hbmQp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2dpdCcsICdtdicsICdwbGF0Zm9ybS9jaHJv
bWl1bS13aW4vYS50eHQnLCAncGxhdGZvcm0vY2hyb21pdW0vYS50eHQnXSwgTW9ja0V4ZWN1dGl2
ZS5sYXN0X3J1bl9jb21tYW5kWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2dpdCcs
ICdybScsICdwbGF0Zm9ybS9jaHJvbWl1bS1tYWMvYS50eHQnXSwgTW9ja0V4ZWN1dGl2ZS5sYXN0
X3J1bl9jb21tYW5kWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2dpdCcsICdtdics
ICdwbGF0Zm9ybS9jaHJvbWl1bS13aW4vYi50eHQnLCAncGxhdGZvcm0vY2hyb21pdW0vYi50eHQn
XSwgTW9ja0V4ZWN1dGl2ZS5sYXN0X3J1bl9jb21tYW5kWzJdKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhbJ2dpdCcsICdybScsICdwbGF0Zm9ybS9jaHJvbWl1bS1tYWMvYi50eHQnXSwgTW9j
a0V4ZWN1dGl2ZS5sYXN0X3J1bl9jb21tYW5kWzNdKQorCisgICAgZGVmIHRlc3Rfa2VlcF9kZXN0
X2FuZF9yZW1vdmVfb2xkX2ZpbGUoc2VsZik6CisgICAgICAgIGZpbGVzID0gZGVkdXBlX2Nocm9t
aXVtX2xheW91dF90ZXN0cy5kZWR1cGxpY2F0ZV90ZXN0cyhbJ2Nocm9taXVtLXdpbicsICdjaHJv
bWl1bS1tYWMnXSwgJ2Nocm9taXVtLXdpbicsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygyLCBsZW4oTW9ja0V4ZWN1dGl2ZS5sYXN0X3J1bl9jb21tYW5kKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoWydnaXQnLCAncm0nLCAncGxhdGZvcm0vY2hyb21pdW0tbWFjL2EudHh0
J10sIE1vY2tFeGVjdXRpdmUubGFzdF9ydW5fY29tbWFuZFswXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoWydnaXQnLCAncm0nLCAncGxhdGZvcm0vY2hyb21pdW0tbWFjL2IudHh0J10sIE1v
Y2tFeGVjdXRpdmUubGFzdF9ydW5fY29tbWFuZFsxXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9saXN0X2R1cGxpY2F0ZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL2xpc3RfZHVwbGlj
YXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNmJiNzQ4Y2VjZmEyYTQ2NGNkZWFjMGUyNjAwNGMzZTg2NjY2
NTQxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9saXN0X2R1cGxpY2F0
ZXMucHkKQEAgLTAsMCArMSwxNzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIkxpc3RzIGZpbGVzIHRoYXQgYXJlIGR1cGxpY2F0ZWQgaW4gdGhlIGlucHV0
IGRpcmVjdG9yaWVzLgorCitUaGlzIHNjcmlwdCByZWFkcyBzZXZlcmFsIGRpcmVjdG9yaWVzIGFu
ZCBsaXN0cyB0aGUgZmlsZXMgdGhhdCBhcmUgZHVwbGljYXRlZC4KK0l0J3MgbW9zdGx5IHVzZWZ1
bCB0byBkZS1kdXBsaWNhdGUgTGF5b3V0VGVzdHMgYmFzZWxpbmVzIHNwcmVhZCBhY3Jvc3MgZGlm
ZmVyZW50CitwbGF0Zm9ybXMuCisiIiIKKworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0
Zm9ybQoraW1wb3J0IHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCisKK19sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxpc3RfZHVwbGljYXRlcyIpCisK
KworZGVmIGdldF9maWxlX2NvbnRlbnRfaGFzaChmaWxlX25hbWUpOgorICAgICIiIlJldHVybnMg
dGhlIHNoYTEgaGFzaCBmb3IgdGhlIGNvbnRlbnRzIG9mIGZpbGVfbmFtZS4KKworICAgIEFyZ3M6
CisgICAgICBmaWxlX25hbWU6IGZpbGUgbmFtZS4KKyAgICBSZXR1cm5zOgorICAgICAgVGhlIHNo
YTEgaGFzaCBmb3IgdGhlIGNvbnRlbnRzIG9mIGZpbGVfbmFtZS4KKyAgICAiIiIKKyAgICBmID0g
ZmlsZShmaWxlX25hbWUsICdyYicpCisgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgZi5jbG9z
ZSgpCisgICAgaCA9IGhhc2hsaWIuc2hhMSgpCisgICAgaC51cGRhdGUoY29udGVudCkKKyAgICBy
ZXR1cm4gaC5oZXhkaWdlc3QoKQorCisKK2RlZiBnZXRfZmlsZXNfbGlzdChkaXJlY3Rvcmllcywg
Z2xvYl9wYXR0ZXJuLCByZWN1cnNpdmUpOgorICAgICIiIlJldHVybnMgYSBsaXN0IG9mIGZpbGUg
bmFtZXMgZm9yIHRoZSBnaXZlbiBsaXN0IG9mIGRpcmVjdG9yaWVzLgorCisgICAgQXJnczoKKyAg
ICAgIGRpcmVjdG9yaWVzOiBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gZm9sbG93LgorICAgICAg
Z2xvYl9wYXR0ZXJuOiBhIGZpbHRlciB0byBhcHBseSB0byBmaWxlIG5hbWVzLAorICAgICAgcmVj
dXJzaXZlOiB3aGV0aGVyIG9yIG5vdCB0byByZWN1cnNlIHRoZSBkaXJlY3Rvcmllcy4KKyAgICBS
ZXR1cm5zOgorICAgICAgYSBsaXN0IG9mIGZpbGUgbmFtZXMuCisgICAgIiIiCisgICAgcmV0ID0g
W10KKyAgICBpZiByZWN1cnNpdmU6CisgICAgICAgIGZvciBkIGluIGRpcmVjdG9yaWVzOgorICAg
ICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAg
ICAgICAgcmV0ICs9IFtvcy5wYXRoLmpvaW4ocm9vdCwgeCkgZm9yIHggaW4gZmlsZXMgaWYgZm5t
YXRjaC5mbm1hdGNoKHgsIGdsb2JfcGF0dGVybildCisgICAgZWxzZToKKyAgICAgICAgZm9yIGQg
aW4gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKGQpOgorICAg
ICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihkLCBmKQorICAgICAgICAgICAg
ICAgIGlmIGZubWF0Y2guZm5tYXRjaChmdWxsX3BhdGgsIGdsb2JfcGF0dGVybikgYW5kIG9zLnBh
dGguaXNmaWxlKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJldCArPSBbZnVsbF9w
YXRoXQorICAgIHJldHVybiByZXQKKworCitkZWYgbGlzdF9kdXBsaWNhdGVzKGRpcmVjdG9yaWVz
LCBnbG9iX3BhdHRlcm4sIHJlY3Vyc2l2ZSwgc2FtZV9uYW1lKToKKyAgICAiIiJSZXR1cm5zIGEg
bGlzdCBvZiBsaXN0cyBvZiBmaWxlcyB3aXRoIGR1cGxpY2F0ZWQgY29udGVudC4KKworICAgIEFy
Z3M6CisgICAgICBkaXJlY3RvcmllczogYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGZvbGxvdy4K
KyAgICAgIGdsb2JfcGF0dGVybjogYSBmaWx0ZXIgdG8gYXBwbHkgdG8gZmlsZSBuYW1lcy4KKyAg
ICAgIHJlY3Vyc2l2ZTogd2hldGhlciBvciBub3QgdG8gcmVjdXJzZSB0aGUgZGlyZWN0b3JpZXMu
CisgICAgICBzYW1lX25hbWU6IG9ubHkgY29uc2lkZXIgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1l
LgorICAgIFJldHVybnM6CisgICAgICBhIGxpc3Qgb2YgbGlzdHMgb2YgZmlsZSBuYW1lcyB3aXRo
IGR1cGxpY2F0ZWQgY29udGVudC4KKyAgICAiIiIKKyAgICBhbGxfZmlsZXMgPSBnZXRfZmlsZXNf
bGlzdChkaXJlY3RvcmllcywgZ2xvYl9wYXR0ZXJuLCByZWN1cnNpdmUpCisgICAgY29udGVudF9o
YXNoX21hcCA9IHt9CisgICAgZm9yIGYgaW4gYWxsX2ZpbGVzOgorICAgICAgICBoYXNoID0gZ2V0
X2ZpbGVfY29udGVudF9oYXNoKGYpCisgICAgICAgIGlmIGhhc2ggaW4gY29udGVudF9oYXNoX21h
cDoKKyAgICAgICAgICAgIGlmIChub3Qgc2FtZV9uYW1lIG9yCisgICAgICAgICAgICAgICAgKG9z
LnBhdGguYmFzZW5hbWUoY29udGVudF9oYXNoX21hcFtoYXNoXVswXSkgPT0KKyAgICAgICAgICAg
ICAgICAgb3MucGF0aC5iYXNlbmFtZShmKSkpOgorICAgICAgICAgICAgICAgIGNvbnRlbnRfaGFz
aF9tYXBbaGFzaF0gKz0gW2ZdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250ZW50X2hh
c2hfbWFwW2hhc2hdID0gW2ZdCisgICAgZHVwbGljYXRlZCA9IFtjb250ZW50X2hhc2hfbWFwW2td
IGZvciBrIGluIGNvbnRlbnRfaGFzaF9tYXAgaWYgbGVuKGNvbnRlbnRfaGFzaF9tYXBba10pID4g
MV0KKyAgICByZXR1cm4gZHVwbGljYXRlZAorCisKK2RlZiBydW4ob3B0aW9ucywgYXJncyk6Cisg
ICAgIiIiTGlzdHMgYWxsIGR1cGxpY2F0ZSBmaWxlcyBpbiB0aGUgbGlzdCBvZiBkaXJlY3Rvcmll
cyBnaXZlbiBhcyBvcHRpb25zLgorCisgICAgQXJnczoKKyAgICAgIG9wdGlvbnM6IGEgZGljdGlv
bmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgIFJldHVybnM6CisgICAgICB0aGUgbnVt
YmVyIG9mIGR1cGxpY2F0ZWQgZmlsZXMuCisgICAgIiIiCisgICAgZHVwbGljYXRlZCA9IGxpc3Rf
ZHVwbGljYXRlcyhvcHRpb25zLmRpcmVjdG9yaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucy5nbG9iX3BhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcHRpb25zLnJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMuc2FtZV9uYW1lKQorICAgIGZvciBkIGluIGR1cGxpY2F0ZWQ6CisgICAgICAg
IHByaW50ICctLScKKyAgICAgICAgZm9yIGYgaW4gZDoKKyAgICAgICAgICAgIHByaW50IGYKKyAg
ICByZXR1cm4gbGVuKGR1cGxpY2F0ZWQpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToK
KyAgICAiIiJQcm92aWRlcyBhIGRlZmF1bHQgc2V0IG9mIGNvbW1hbmQgbGluZSBhcmdzLgorCisg
ICAgUmV0dXJucyBhIHR1cGxlIG9mIG9wdGlvbnMsIGFyZ3MgZnJvbSBvcHRwYXJzZSIiIgorCisg
ICAgY29uZmlndXJhdGlvbl9vcHRpb25zID0gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLWQiLCAiLS1kaXJlY3RvcnkiLCBkZXN0PSJkaXJlY3RvcmllcyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFjdGlvbj0iYXBwZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0iU3BlY2lmeSB3aGVyZSB0byBsb29rIGZvciBkdXBsaWNhdGVzLiIpLAorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLWciLCAiLS1nbG9iIiwgZGVzdD0iZ2xvYl9wYXR0
ZXJuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iKiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNwZWNpZnkgdGhlIGdsb2IgdG8gZmlsdGVyIHRo
ZSBmaWxlcy4iKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1yIiwgIi0tcmVjdXJz
aXZlIiwgZGVzdD0icmVjdXJzaXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0
aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0iUmVjdXJzZSB0aGUgZGlyZWN0b3JpZXMgbGlzdC4iKSwKKyAgICAgICAgb3B0
cGFyc2UubWFrZV9vcHRpb24oIi1zIiwgIi0tc2FtZV9uYW1lIiwgZGVzdD0ic2FtZV9uYW1lIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVs
dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iT25seSBjb25zaWRl
ciBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUuIiksCisgICAgXQorCisgICAgb3B0aW9uX2xpc3Qg
PSAoY29uZmlndXJhdGlvbl9vcHRpb25zKQorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5P
cHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCisKKyAgICBvcHRpb25zLCBhcmdz
ID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICByZXR1cm4gb3B0aW9ucywg
YXJncworCisKK2RlZiBtYWluKCk6CisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQor
ICAgIHJldHVybiBydW4ob3B0aW9ucywgYXJncykKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVf
XzoKKyAgICB0cnk6CisgICAgICAgIHN5cy5leGl0KG1haW4oKSkKKyAgICBleGNlcHQgS2V5Ym9h
cmRJbnRlcnJ1cHQ6CisgICAgICAgICMgdGhpcyBtaXJyb3JzIHdoYXQgdGhlIHNoZWxsIG5vcm1h
bGx5IGRvZXMKKyAgICAgICAgc3lzLmV4aXQoc2lnbmFsLlNJR0lOVCArIDEyOCkKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbGlzdF9kdXBsaWNhdGVzX3VuaXR0ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy9saXN0X2R1cGxpY2F0ZXNfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2ZkZDYyNWJhZWYwMDk5OThjOTE5YzE4ZTI4MThlNDQ4NGRhMDFmMAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbGlzdF9kdXBsaWNhdGVzX3VuaXR0ZXN0LnB5CkBAIC0w
LDAgKzEsNjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbGlzdF9kdXBsaWNhdGVzCitpbXBv
cnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIExpc3REdXBsaWNhdGVzVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGJhc2VfZGF0
YV9wYXRoID0gb3MucGF0aC5qb2luKCdXZWJLaXRUb29scycsICdTY3JpcHRzJywgJ3dlYmtpdHB5
JywgJ3Rlc3QnLCAnZGF0YScpCisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXMgPSBbb3MucGF0aC5q
b2luKGJhc2VfZGF0YV9wYXRoLCAnZHVwbGljYXRlX2EnKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcy5wYXRoLmpvaW4oYmFzZV9kYXRhX3BhdGgsICdkdXBsaWNhdGVfYicpXQorCisg
ICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IGxpc3RfZHVwbGljYXRl
cy5saXN0X2R1cGxpY2F0ZXMoc2VsZi5kaXJlY3RvcmllcywgJyonLCBUcnVlLCBGYWxzZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKGZpbGVzKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoMywgbGVuKGZpbGVzWzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBh
dGguam9pbihzZWxmLmRpcmVjdG9yaWVzWzBdLCAndGVzdF9kdXBsaWNhdGVfYS50eHQnKSBpbiBm
aWxlc1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguam9pbihzZWxmLmRpcmVj
dG9yaWVzWzFdLCAndGVzdF9kdXBsaWNhdGVfYS50eHQnKSBpbiBmaWxlc1swXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yaWVzWzFdLCAnb3RoZXJf
bmFtZS50eHQnKSBpbiBmaWxlc1swXSkKKworICAgIGRlZiB0ZXN0X3NhbWVfbmFtZShzZWxmKToK
KyAgICAgICAgZmlsZXMgPSBsaXN0X2R1cGxpY2F0ZXMubGlzdF9kdXBsaWNhdGVzKHNlbGYuZGly
ZWN0b3JpZXMsICcqJywgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwg
bGVuKGZpbGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgbGVuKGZpbGVzWzBdKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yaWVzWzBd
LCAndGVzdF9kdXBsaWNhdGVfYS50eHQnKSBpbiBmaWxlc1swXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yaWVzWzFdLCAndGVzdF9kdXBsaWNhdGVf
YS50eHQnKSBpbiBmaWxlc1swXSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2dsb2Ioc2VsZik6Cisg
ICAgICAgIGZpbGVzID0gbGlzdF9kdXBsaWNhdGVzLmxpc3RfZHVwbGljYXRlcyhzZWxmLmRpcmVj
dG9yaWVzLCAnbm9maWxlc3dpbGxtYXRjaConLCBUcnVlLCBUcnVlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscygwLCBsZW4oZmlsZXMpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvZGF0YS9kdXBsaWNhdGVfYS9ub25fZHVwbGljYXRlLnR4dCBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9kYXRhL2R1cGxpY2F0ZV9hL25vbl9kdXBsaWNhdGUu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAxYzYwOGJlNWQwZDQ3NzRjNzY5NTE5OTFiNTEzMThmNzBmNTI3YTEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZGF0
YS9kdXBsaWNhdGVfYS9ub25fZHVwbGljYXRlLnR4dApAQCAtMCwwICsxIEBACitBIG5vbi1kdXBs
aWNhdGVkIGZpbGUuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rl
c3QvZGF0YS9kdXBsaWNhdGVfYS90ZXN0X2R1cGxpY2F0ZV9hLnR4dCBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9kYXRhL2R1cGxpY2F0ZV9hL3Rlc3RfZHVwbGljYXRlX2EudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg4ZmEwNzUzMjdkODhjNTI0MjUxNDEwZDI3ODM5MzExYTk1MGFlNTEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZGF0YS9k
dXBsaWNhdGVfYS90ZXN0X2R1cGxpY2F0ZV9hLnR4dApAQCAtMCwwICsxIEBACitUZXN0IGR1cGxp
Y2F0ZSBhCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZGF0
YS9kdXBsaWNhdGVfYi9vdGhlcl9uYW1lLnR4dCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGVzdC9kYXRhL2R1cGxpY2F0ZV9iL290aGVyX25hbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4ZmEw
NzUzMjdkODhjNTI0MjUxNDEwZDI3ODM5MzExYTk1MGFlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZGF0YS9kdXBsaWNhdGVfYi9vdGhlcl9u
YW1lLnR4dApAQCAtMCwwICsxIEBACitUZXN0IGR1cGxpY2F0ZSBhCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZGF0YS9kdXBsaWNhdGVfYi90ZXN0X2R1cGxp
Y2F0ZV9hLnR4dCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9kYXRhL2R1cGxp
Y2F0ZV9iL3Rlc3RfZHVwbGljYXRlX2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4ZmEwNzUzMjdkODhjNTI0
MjUxNDEwZDI3ODM5MzExYTk1MGFlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvZGF0YS9kdXBsaWNhdGVfYi90ZXN0X2R1cGxpY2F0ZV9hLnR4
dApAQCAtMCwwICsxIEBACitUZXN0IGR1cGxpY2F0ZSBhCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>