<?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>19418</bug_id>
          
          <creation_ts>2008-06-06 16:00:55 -0700</creation_ts>
          <short_desc>onbeforeunload is broken for framesets</short_desc>
          <delta_ts>2017-03-20 14:01:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>525.x (Safari 3.1)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=169891</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="William J. Edney">bedney</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>ama</cc>
    
    <cc>amoygard</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpopa</cc>
    
    <cc>elliot</cc>
    
    <cc>eric</cc>
    
    <cc>holger.hees</cc>
    
    <cc>jhurshman</cc>
    
    <cc>mjs</cc>
    
    <cc>mslegeir</cc>
    
    <cc>nencioli</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>pablo.platt</cc>
    
    <cc>rniwa</cc>
    
    <cc>ted</cc>
    
    <cc>wdm</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>82480</commentid>
    <comment_count>0</comment_count>
    <who name="William J. Edney">bedney</who>
    <bug_when>2008-06-06 16:00:55 -0700</bug_when>
    <thetext>Folks -

Even though the IE documentation for onbeforeunload (since there&apos;s no real W3C standard for this event, we go by their stuff) says that onbeforeunload should work on &apos;frameset&apos;s as well as &apos;body&apos;s, ever since Safari 3.1 (on both Windows and Mac), this has been broken.

I&apos;ve attached two testcase files - one is the frameset file and the other is the framecontent file. If you launch the frameset file and click the link (which is contained in the frame content file), you are immediately navigated to Google, which is incorrect - the onbeforeunload dialog box should stop you first. Curiously enough, if you try to return to the test page from Google by hitting the back button, you get the frameset&apos;s onbeforeunload message then - but its too late.

Note that if you load the frame content file directly and then try to click the link to go to Google, you get the proper behavior which is to present the onbeforeunload dialog box *before* you navigate to Google.

Marking this as P1 / Major since data loss could result from a loss of state in the client (prevelant amongst AJAX applications).

Cheers,

- Bill</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82481</commentid>
    <comment_count>1</comment_count>
      <attachid>21535</attachid>
    <who name="William J. Edney">bedney</who>
    <bug_when>2008-06-06 16:01:46 -0700</bug_when>
    <thetext>Created attachment 21535
The frameset file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82482</commentid>
    <comment_count>2</comment_count>
      <attachid>21536</attachid>
    <who name="William J. Edney">bedney</who>
    <bug_when>2008-06-06 16:04:21 -0700</bug_when>
    <thetext>Created attachment 21536
The frame content file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98046</commentid>
    <comment_count>3</comment_count>
    <who name="Ted Rust">ted</who>
    <bug_when>2008-11-08 17:13:15 -0800</bug_when>
    <thetext>This issue has stricken us as well.  Can someone mark this confirmed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98855</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-15 02:17:50 -0800</bug_when>
    <thetext>Confirmed with r38387.

See also: bug 15652.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98856</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-15 02:19:54 -0800</bug_when>
    <thetext>...and bug 21699.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98859</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-15 02:30:04 -0800</bug_when>
    <thetext>Note however that fixing this may give a way to ads in iframes to be even more nasty than they are now, and open windows when navigating away from a page with an ad. They could be other undesirable consequences, as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99191</commentid>
    <comment_count>7</comment_count>
    <who name="William J. Edney">bedney</who>
    <bug_when>2008-11-18 11:28:41 -0800</bug_when>
    <thetext>Alexey -

As one of the guys who supported the Mozilla crew adding this to their browser many moons ago (https://bugzilla.mozilla.org/show_bug.cgi?id=68215), I should speak up here.

This was originally added to IE 4.0 in 1997. It is a Microsoft extension and one that has been very handy for those of us who are building &apos;stateful client&apos; applications. It allows us to warn the user that by either closing the window, quitting the browser or navigating away from the &apos;page&apos; that they will lose data and that they should use the approved method of quitting the page.

In the intervening 11 years that this feature has been around, it has not been abused. I have not once been to a page that uses this mechanism in an abusive measure. I surmise that, because of the design of this feature (i.e. just popping up a panel that allows an application-supplied message along with a browser-supplied one and allowing the user to proceed or cancel), that its not really a sufficiently &apos;spoofable&apos; mechanism for the evildoers.

Cheers,

- Bill</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99194</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-18 11:47:21 -0800</bug_when>
    <thetext>What I had in mind was something different - an onload/onbeforeunload handler that opens a new window with window.open(). This is pretty common on the Web, and very annoying. Fixing this bug can let any 3rd party ad in an iframe do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99248</commentid>
    <comment_count>9</comment_count>
    <who name="Ted Rust">ted</who>
    <bug_when>2008-11-18 16:46:36 -0800</bug_when>
    <thetext>I&apos;m not sure I see the significance.  There are already onunload handlers that nefarious people could use to open windows on exit.  And onbeforeunload already exists at the top-level, this is just asking for it to work properly for frames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131825</commentid>
    <comment_count>10</comment_count>
    <who name="pablo">pablo.platt</who>
    <bug_when>2009-07-15 01:52:42 -0700</bug_when>
    <thetext>The onbeforeunload is different then the onunload event because it let you for example add a cookie to the request. The unload event fires after the request is ready so you can&apos;t modify it. 

Why not just enable the event when the iframe and the top frame are from the same domain?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132211</commentid>
    <comment_count>11</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 02:40:08 -0700</bug_when>
    <thetext>*** Bug 21699 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143218</commentid>
    <comment_count>12</comment_count>
    <who name="Kyle Fox">kyle.fox</who>
    <bug_when>2009-08-27 15:39:52 -0700</bug_when>
    <thetext>Any updates on this bug report?

The use case for enabling embedded iframes to handle onbeforeunload seems valid, especially since normal windows support the event just fine.

We are using -- rather, trying to use -- onbeforeunload to track a user&apos;s progress as they navigate through an embedded iframe.

We would really like to see this bug updated.  I would be happy to help further in any way I can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143220</commentid>
    <comment_count>13</comment_count>
    <who name="Ted Rust">ted</who>
    <bug_when>2009-08-27 15:56:57 -0700</bug_when>
    <thetext>Ditto to comment #12 ... just hoping enough *bumps* will put this on someone&apos;s radar.  Very frustrating that there are legitimate uses for this, but our requests are largely ignored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143226</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-27 16:11:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/7177160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155645</commentid>
    <comment_count>15</comment_count>
    <who name="Eric">eric</who>
    <bug_when>2009-10-19 04:23:47 -0700</bug_when>
    <thetext>I must say: wow, open for over a year now. I would love to label my solutions Safari, Chrome, etc. compatible. But still no luck.

Could somebody please fix this?

Now for some actual input: the &quot;same-domain-constraint&quot; mentioned is very reasonable. 

Developers: if there are any other considerations preventing this bug from getting fixed, please share them with us so we can come to a solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165669</commentid>
    <comment_count>16</comment_count>
    <who name="William J. Edney">bedney</who>
    <bug_when>2009-11-21 16:31:23 -0800</bug_when>
    <thetext>In hopes that someone out there on the Webkit team can address this issue soon, here&apos;s my latest set of test files. I tried to make the messages a bit more consistent and clear. These are marked as &apos;The frameset file v2&apos; and &apos;The frame content file v2&apos;.

Unfortunately, the behavior that I noted in comment #1 hasn&apos;t improved. It is consistently broken in the same way.


As of today, I also noticed the following behavior, which is also inconsistent with how both IE and Mozilla work, and is yet another reason we&apos;re broken on Webkit-based browsers.

In IE / Mozilla:

- Launch the v2 versions of these pages.
- Attempt to close the page.
- You&apos;ll see a dialog containing the &apos;onbeforeunload&apos; message installed on the frameset.
- Choose &apos;Ok&apos; to &apos;continue closing&apos; (if you choose &apos;Cancel&apos;, the system will - properly in my opinion - not show you the second dialog)
- Then you&apos;ll see a *second* dialog containing the &apos;onbeforeunload&apos; message installed on the nested frame.

In Webkit-based browsers you *only see the first dialog*. The onbeforeunload handler for the nested frame is not being executed.


The Chromium team has upstreamed their bug report on this behavior back to this bug. Their report is here:

http://code.google.com/p/chromium/issues/detail?id=17157

They also mention this bug in their bug report. It&apos;s probably related:

https://bugs.webkit.org/show_bug.cgi?id=27481


To anyone on the Webkit team - this continues to badly break us. *Please* let me know if I can help in any way insofar as more test cases, etc. I haven&apos;t done C in many moons, so I can&apos;t help there unfortunately. Sam, I&apos;m not sure if the &apos;rdar&apos; bug system reflects changes here, but if not please pass along these comments. Also, feel free to email me or engage me in any fashion to help you all fix this bug - I&apos;ll spend time explaining it over the phone, if that&apos;s necessary - just let me know. As has been noted previously, its been a year. I know you all are amazingly busy but for those of us writing stateful applications, this is a deal breaker for Safari/Chrome/etc. support.

For my part, I&apos;ve tested this on the following browsers. It is (thankfully) consistent between all of them:

Safari 4.0.4 / Mac
Webkit 51280 / Mac
Google Chrome 4.0.249.4 / Mac
Google Chrome 4.0.249.4 / Windows

Safari 4.0.4 / Windows is a strange case indeed. Launching the frameset and then using the link to go to Google doesn&apos;t light up the &apos;Back&apos; button, such that you can&apos;t traverse back. This very well may be another bug. I don&apos;t have a Webkit nightly for Windows, but if there&apos;s interest, I can get one and retry on that.

Thanks to all in advance. Let me know if beer and/or wine bribery will be involved :-) (I know for a fact that the Mozillians can be bribed ;-) ).

Cheers,

- Bill</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165671</commentid>
    <comment_count>17</comment_count>
      <attachid>43664</attachid>
    <who name="William J. Edney">bedney</who>
    <bug_when>2009-11-21 16:34:04 -0800</bug_when>
    <thetext>Created attachment 43664
The frameset file v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165672</commentid>
    <comment_count>18</comment_count>
      <attachid>43665</attachid>
    <who name="William J. Edney">bedney</who>
    <bug_when>2009-11-21 16:34:34 -0800</bug_when>
    <thetext>Created attachment 43665
The frame content file v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209657</commentid>
    <comment_count>19</comment_count>
    <who name="Mike Slegeir">mslegeir</who>
    <bug_when>2010-04-07 08:54:19 -0700</bug_when>
    <thetext>I&apos;ve also ran into problems due to this event not firing in frames, and seeing as I&apos;ve never seen the event hijacked in other browsers, I don&apos;t think it&apos;s much of a security concern (although I also agree that the domain constraint is reasonable).  I doubt this will see resolution any time soon, considering how long this has been open, but I wanted to add myself to the list in case it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246360</commentid>
    <comment_count>20</comment_count>
    <who name="">amoygard</who>
    <bug_when>2010-07-03 16:14:19 -0700</bug_when>
    <thetext>Bump. Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292884</commentid>
    <comment_count>21</comment_count>
    <who name="">nencioli</who>
    <bug_when>2010-10-12 01:31:53 -0700</bug_when>
    <thetext>Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311139</commentid>
    <comment_count>22</comment_count>
      <attachid>74307</attachid>
    <who name="pablo">pablo.platt</who>
    <bug_when>2010-11-18 15:53:12 -0800</bug_when>
    <thetext>Created attachment 74307
Works on FF 3.6 and IE8. Please put parent.html and iframe.html in the same folder and load parent.html. When changing the child url with the button you&apos;ll see PASS on FF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311148</commentid>
    <comment_count>23</comment_count>
    <who name="pablo">pablo.platt</who>
    <bug_when>2010-11-18 16:03:51 -0800</bug_when>
    <thetext>We need the beforeunload event on iframes in addition to the unload event from the same reasons we need both on any page.

The events serve different purpose.
Code in the beforeunload event listener can effect the request while code in the unload event listener can&apos;t.
For example, if we set a cookie in the beforeunload listener, it&apos;ll be sent with that request but if we set the cookie in the unload listener, it&apos;ll only effect the next request.

If the parent and the iframe are both from the same origin, there is no security issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311167</commentid>
    <comment_count>24</comment_count>
      <attachid>74319</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-18 16:34:40 -0800</bug_when>
    <thetext>Created attachment 74319
work in progress

Here&apos;s very easy change to enable this feature.  I have to go check with other contributors to see if enabling this feature makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317710</commentid>
    <comment_count>25</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-12-06 10:44:14 -0800</bug_when>
    <thetext>Alexey, while I agree that (In reply to comment #8)
&gt; What I had in mind was something different - an onload/onbeforeunload handler that opens a new window with window.open(). This is pretty common on the Web, and very annoying. Fixing this bug can let any 3rd party ad in an iframe do this.

Can&apos;t the 3rd party add just window.open without waiting for the unload event? This doesn&apos;t seem to make things worse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317794</commentid>
    <comment_count>26</comment_count>
      <attachid>75730</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-06 12:34:27 -0800</bug_when>
    <thetext>Created attachment 75730
initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317800</commentid>
    <comment_count>27</comment_count>
      <attachid>75730</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-12-06 12:41:15 -0800</bug_when>
    <thetext>Comment on attachment 75730
initial patch

This patch looks good to me. Alexey, you OK with this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317807</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-06 12:54:06 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Created an attachment (id=75730) [details]
&gt; initial patch

I know there are some controversy around this feature so this is more like a starting point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323895</commentid>
    <comment_count>29</comment_count>
      <attachid>75730</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-17 11:30:19 -0800</bug_when>
    <thetext>Comment on attachment 75730
initial patch

Change seems OK to me. Testing seems a little light? Did you test this with the browsers too? What did Safari do? What about a page that has multiple frames that all have beforeunload handlers?

Alexey, any further comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323906</commentid>
    <comment_count>30</comment_count>
    <who name="William J. Edney">bedney</who>
    <bug_when>2010-12-17 11:58:03 -0800</bug_when>
    <thetext>Darin -

Comment #16 has my observations from Nov 2009 regarding nested frames (iframes) from the same domain.

It uses the &apos;The frameset file v2&apos; and &apos;The frame content file v2&apos; files attached to this bug.

Cheers,

- Bill</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323908</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-17 12:01:46 -0800</bug_when>
    <thetext>I think that we should ensure that there is at most one OK/Cancel dialog displayed by onbeforeunload. Otherwise, what does it mean for the user to OK closing a subframe, but to say Cancel about the main frame? That&apos;s confusing to the user, and potentially leaves WebKit in an inconsistent state.

From event handing standpoint, what should a subframe do when it gets a beforeunload event? It doesn&apos;t know whether it&apos;s really going to be navigated away, since the user may cancel navigation from another frame&apos;s beforeunload event handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323936</commentid>
    <comment_count>32</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-17 12:44:11 -0800</bug_when>
    <thetext>Thanks for the comments, Darin &amp; Alexey.

(In reply to comment #29)
&gt; Change seems OK to me. Testing seems a little light? Did you test this with the browsers too? What did Safari do? What about a page that has multiple frames that all have beforeunload handlers?

Thanks.  I&apos;ll add some more tests.

(In reply to comment #31)
&gt; I think that we should ensure that there is at most one OK/Cancel dialog displayed by onbeforeunload. Otherwise, what does it mean for the user to OK closing a subframe, but to say Cancel about the main frame? That&apos;s confusing to the user, and potentially leaves WebKit in an inconsistent state.

As far as I can tell, we don&apos;t show multiple OK/Cancel dialogs when we navigate away the main frame (tested on WebKit TOT Mac port with my patch). loadWithNavigationAction isn&apos;t even called for subframes.

&gt; From event handing standpoint, what should a subframe do when it gets a beforeunload event? It doesn&apos;t know whether it&apos;s really going to be navigated away, since the user may cancel navigation from another frame&apos;s beforeunload event handler.

Because of the above behavior, I think we don&apos;t have to worry about this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323991</commentid>
    <comment_count>33</comment_count>
      <attachid>76910</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-17 14:25:37 -0800</bug_when>
    <thetext>Created attachment 76910
Added more tests per darin&apos;s comment and to address ap&apos;s concern</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323992</commentid>
    <comment_count>34</comment_count>
      <attachid>76910</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-17 14:32:31 -0800</bug_when>
    <thetext>Comment on attachment 76910
Added more tests per darin&apos;s comment and to address ap&apos;s concern

I think I can eliminate one file from this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323995</commentid>
    <comment_count>35</comment_count>
      <attachid>76911</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-17 14:38:07 -0800</bug_when>
    <thetext>Created attachment 76911
Removed before-unload-in-subframe-fail.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326359</commentid>
    <comment_count>36</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-23 16:36:34 -0800</bug_when>
    <thetext>Per ap&apos;s request on IRC, I&apos;ll explain the new behavior of beforeunload (on WebKit mac port):

* beforeunload is fired for each subframe when subframe&apos;s content is replaced by other content
* beforeunload is NOT fired for each subframe if the main frame is to be replaced by another content
* beforeunload continues to be fired for the main frame when it is replaced by another content</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326655</commentid>
    <comment_count>37</comment_count>
      <attachid>76911</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-24 10:17:03 -0800</bug_when>
    <thetext>Comment on attachment 76911
Removed before-unload-in-subframe-fail.html

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

Seems sane to me, but given the long thread here I may be missing context.

&gt; LayoutTests/ChangeLog:22
&gt; +2010-12-17  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

Double entry in your ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326736</commentid>
    <comment_count>38</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-24 13:10:31 -0800</bug_when>
    <thetext>I think Ryosuke was going to do some more testing based on an IRC discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326737</commentid>
    <comment_count>39</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-24 13:12:51 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; I think Ryosuke was going to do some more testing based on an IRC discussion.

Yes, I&apos;m planning to do some research about IE/FF&apos;s behavior and probably add more test cases based on ap&apos;s suggestion on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327171</commentid>
    <comment_count>40</comment_count>
    <who name="Jonathan Hurshman">jhurshman</who>
    <bug_when>2010-12-27 18:47:27 -0800</bug_when>
    <thetext>I&apos;m pretty sure that all other major browsers fire onbeforeunload on subframes when the main frame&apos;s content is being replaced. Not having WebKit follow suit will be a major pain in the butt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327202</commentid>
    <comment_count>41</comment_count>
    <who name="Eric">eric</who>
    <bug_when>2010-12-28 00:59:26 -0800</bug_when>
    <thetext>I would like to confirm Jonathan Hurshmans comment. Both IE (all common versions) and FF (current and several older versions) trigger onbeforeunload on all subframes.

Even if the event would only be triggered on the top frame on replacement, I would be able to work around that one. But following IEs &amp; FFs behaviour would save me that hassle ;). Nonetheless, thank you for finally following up on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329034</commentid>
    <comment_count>42</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-04 10:15:22 -0800</bug_when>
    <thetext>IE and FF both consistently fire onbeforeunload for all subframes prior to initiating navigation. If any of subframe&apos;s beforeunload event handler returns false, then a confirmation dialog is popped up for each and every frame that returned false. Confirmation cascades so canceling any one dialog results in not initiating any navigation at all.

When location.href is rewritten on beforeunload of a child frame, IE and FF behave differently.  Let us suppose that the main frame is navigation away to some external page A, and one of child frame rewrites the main frame&apos;s location.href to some other external page B.

Case 1, user clicks &quot;leave&quot; on each confirmation dialog:
IE: ignores the rewrite and navigates to A
FF: navigates first to B but then quickly navigates back to A. I haven&apos;t tested the case where B had beforeunload event, etc... but FF remembers B in its history stack.

Case 2, user clicks &quot;stay&quot; on the subframe which attempts the rewrite:
IE: ignores the rewrite and does not navigate any page at all.
FF: Rewrite happens before the confirmation dialog is prompted for the subframe which initiated the rewrite so FF tries to navigate to B. Of course, this triggers onbeforeunload on each frame except the subframe from which the rewrite was initiated (for which I click &quot;leave&quot; for the sake of discussion). However, after moving to B, the confirmation for the subframe that initiated rewrite appears and clicking &quot;leave&quot; results in moving to A and clicking &quot;stay&quot; results in staying on B.

I think IE&apos;s behavior is much saner. As a user, I can&apos;t make sense of FF&apos;s behavior at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329062</commentid>
    <comment_count>43</comment_count>
      <attachid>77903</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-04 10:42:34 -0800</bug_when>
    <thetext>Created attachment 77903
test case (zip)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329284</commentid>
    <comment_count>44</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-04 16:21:38 -0800</bug_when>
    <thetext>I experimented with showing just one dialog but it didn&apos;t work because multiple sub frames can return different strings. There are a couple of options to deal with this situation:

1. Show confirmation dialog for each string - this is what IE does. It might be too noisy for users but WebKit browsers can add a check box to suppress dialogs.

2. Show a dialog only for the fist non-null string - this guarantees that exactly one dialog pops up but it limits usage to some extent.  On web apps with multiple iframe gadget for example, the only one of them will be able to show a dialog to users.

3. Show a dialog with concatenated string - this not only shows exactly one dialog but also shows all messages returned by each subframe, allowing each subframe to provide useful information.  However, it&apos;s somewhat questionable if web authors had considered such implementation when determining which string to return.

I&apos;ll go make a patch with option 1 because I discussed about this with ojan and we concluded that option 1 is the simplest yet most compatible.  Please give us a feedback if you prefer other options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329292</commentid>
    <comment_count>45</comment_count>
    <who name="William J. Edney">bedney</who>
    <bug_when>2011-01-04 16:29:21 -0800</bug_when>
    <thetext>As the original reporter of this bug, I&apos;ll also vote for option #1. I agree that its noisy, but its most compatible and allows each sub-frame to show its message as intended. I wouldn&apos;t even worry about a checkbox. None of the other browsers do it and its not what users would expect.

Option #2 is untenable because you never know what is loaded in which sub-frames and they each &apos;need their shot&apos; at giving the user a chance to *not* unload them

Option #3 is just confusing, IMHO.

My 2 cents.

IIRC, if any window or sub-frame returns a null string, the dialog box is *not* shown for that window/sub-frame. I think that&apos;s true in all browsers.

My thanks for fixing this! It&apos;s been kind of languishing, but is extremely important in apps that hold state and want to give the user a chance to not flush that state before taking other actions.

Cheers,

- Bill</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329342</commentid>
    <comment_count>46</comment_count>
      <attachid>77955</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-04 17:53:20 -0800</bug_when>
    <thetext>Created attachment 77955
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329343</commentid>
    <comment_count>47</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-04 17:54:40 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; Created an attachment (id=77955) [details]
&gt; fixes the bug

Unfortunately, I could not figure out how to test location.reload and history.back/history.forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329783</commentid>
    <comment_count>48</comment_count>
      <attachid>77955</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 14:12:48 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

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

Some minor comments below.

&gt; WebCore/loader/FrameLoader.cpp:2879
&gt; +bool FrameLoader::fireBeforeUnloadEvent(Chrome* chrome, Frame* frame)
&gt; +{

I&apos;m confused.  Is this a static?  Why isn&apos;t this a member function?

&gt; WebCore/loader/FrameLoader.cpp:2886
&gt; +    if (!document-&gt;body())
&gt;          return true;

That seems goofy, but I guess it&apos;s here already.

&gt; WebCore/loader/FrameLoader.h:366
&gt; +    static bool fireBeforeUnloadEvent(Chrome*, Frame*);

This shouldn&apos;t be a static.  You&apos;re pass the frame, but you should just use m_frame.

&gt; WebCore/loader/NavigationScheduler.cpp:268
&gt; -    if (!m_frame-&gt;page())
&gt; +    if (!m_frame-&gt;page() || (!protocolIsJavaScript(url) &amp;&amp; !m_frame-&gt;page()-&gt;navigationEnabled()))

This check is copy/pasted four times.  Maybe it should be factored out?

&gt; WebCore/page/Page.h:349
&gt; +        bool m_navigationEnabled;

This seems slightly sketchy to me, but I&apos;m not sure.  It might be ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329808</commentid>
    <comment_count>49</comment_count>
      <attachid>77955</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-05 14:51:57 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

Thanks for the feedback!

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

&gt;&gt; WebCore/loader/FrameLoader.cpp:2879
&gt;&gt; +{
&gt; 
&gt; I&apos;m confused.  Is this a static?  Why isn&apos;t this a member function?

Yes.  This static member function is called by shouldClose on m_frame AND m_frame&apos;s descendents.  So it certainly cannot be a member function because it is called on different frames.  However, it can&apos;t be a non-member static function either because it sets values of m_pageDismissalEventBeingDispatched, which is a private member variable of FrameLoader.

&gt;&gt; WebCore/loader/FrameLoader.h:366
&gt;&gt; +    static bool fireBeforeUnloadEvent(Chrome*, Frame*);
&gt; 
&gt; This shouldn&apos;t be a static.  You&apos;re pass the frame, but you should just use m_frame.

For the reasons I stated above, it cannot use m_frame.

&gt;&gt; WebCore/loader/NavigationScheduler.cpp:268
&gt;&gt; +    if (!m_frame-&gt;page() || (!protocolIsJavaScript(url) &amp;&amp; !m_frame-&gt;page()-&gt;navigationEnabled()))
&gt; 
&gt; This check is copy/pasted four times.  Maybe it should be factored out?

It could be.  hasPageWithNavigationEnabled() ?

&gt;&gt; WebCore/page/Page.h:349
&gt;&gt; +        bool m_navigationEnabled;
&gt; 
&gt; This seems slightly sketchy to me, but I&apos;m not sure.  It might be ok.

Since this is very specific to beforeunload event, I&apos;d like to call it m_navigationDisabledInBeforeaUnload but we don&apos;t really have a disabled flag in WebKit.  I&apos;m open to a better name / approach.  I too hate the fact I&apos;m adding a new reflection to Page just so that beforeunload can do the right thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329840</commentid>
    <comment_count>50</comment_count>
      <attachid>77955</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 15:44:06 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

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

&gt;&gt;&gt; WebCore/loader/FrameLoader.cpp:2879
&gt;&gt;&gt; +bool FrameLoader::fireBeforeUnloadEvent(Chrome* chrome, Frame* frame)
&gt;&gt;&gt; +{
&gt;&gt; 
&gt;&gt; I&apos;m confused.  Is this a static?  Why isn&apos;t this a member function?
&gt; 
&gt; Yes.  This static member function is called by shouldClose on m_frame AND m_frame&apos;s descendents.  So it certainly cannot be a member function because it is called on different frames.  However, it can&apos;t be a non-member static function either because it sets values of m_pageDismissalEventBeingDispatched, which is a private member variable of FrameLoader.

Why can&apos;t you call it like this:

otherFrame-&gt;loader()-&gt; fireBeforeUnloadEvent();

?

&gt;&gt;&gt; WebCore/loader/NavigationScheduler.cpp:268
&gt;&gt;&gt; +    if (!m_frame-&gt;page() || (!protocolIsJavaScript(url) &amp;&amp; !m_frame-&gt;page()-&gt;navigationEnabled()))
&gt;&gt; 
&gt;&gt; This check is copy/pasted four times.  Maybe it should be factored out?
&gt; 
&gt; It could be.  hasPageWithNavigationEnabled() ?

shouldScheduleNavigation() ?  I&apos;d include the null page check too.

&gt;&gt;&gt; WebCore/page/Page.h:349
&gt;&gt;&gt; +        bool m_navigationEnabled;
&gt;&gt; 
&gt;&gt; This seems slightly sketchy to me, but I&apos;m not sure.  It might be ok.
&gt; 
&gt; Since this is very specific to beforeunload event, I&apos;d like to call it m_navigationDisabledInBeforeaUnload but we don&apos;t really have a disabled flag in WebKit.  I&apos;m open to a better name / approach.  I too hate the fact I&apos;m adding a new reflection to Page just so that beforeunload can do the right thing.

Yeah, just adding a bool to Page requires some thought.  Page and Frame are dumping grounds for random state that we&apos;re not sure where to put.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329842</commentid>
    <comment_count>51</comment_count>
      <attachid>77955</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-05 15:53:35 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

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

&gt;&gt;&gt;&gt; WebCore/loader/FrameLoader.cpp:2879
&gt;&gt;&gt;&gt; +{
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m confused.  Is this a static?  Why isn&apos;t this a member function?
&gt;&gt; 
&gt;&gt; Yes.  This static member function is called by shouldClose on m_frame AND m_frame&apos;s descendents.  So it certainly cannot be a member function because it is called on different frames.  However, it can&apos;t be a non-member static function either because it sets values of m_pageDismissalEventBeingDispatched, which is a private member variable of FrameLoader.
&gt; 
&gt; Why can&apos;t you call it like this:
&gt; 
&gt; otherFrame-&gt;loader()-&gt; fireBeforeUnloadEvent();
&gt; 
&gt; ?

Ah, why didn&apos;t I think of that.  Let me try.

&gt;&gt;&gt;&gt; WebCore/loader/NavigationScheduler.cpp:268
&gt;&gt;&gt;&gt; +    if (!m_frame-&gt;page() || (!protocolIsJavaScript(url) &amp;&amp; !m_frame-&gt;page()-&gt;navigationEnabled()))
&gt;&gt;&gt; 
&gt;&gt;&gt; This check is copy/pasted four times.  Maybe it should be factored out?
&gt;&gt; 
&gt;&gt; It could be.  hasPageWithNavigationEnabled() ?
&gt; 
&gt; shouldScheduleNavigation() ?  I&apos;d include the null page check too.

Will do.

&gt;&gt;&gt;&gt; WebCore/page/Page.h:349
&gt;&gt;&gt;&gt; +        bool m_navigationEnabled;
&gt;&gt;&gt; 
&gt;&gt;&gt; This seems slightly sketchy to me, but I&apos;m not sure.  It might be ok.
&gt;&gt; 
&gt;&gt; Since this is very specific to beforeunload event, I&apos;d like to call it m_navigationDisabledInBeforeaUnload but we don&apos;t really have a disabled flag in WebKit.  I&apos;m open to a better name / approach.  I too hate the fact I&apos;m adding a new reflection to Page just so that beforeunload can do the right thing.
&gt; 
&gt; Yeah, just adding a bool to Page requires some thought.  Page and Frame are dumping grounds for random state that we&apos;re not sure where to put.

I experimented with adding a flag to Frame/FrameLoader (FrameLoader already has shouldAllowNavigation) but it gets ugly because shouldAllowNavigation needs to take a url string and then we need to iterate through frames to figure it out.  The same is true if we were to add something to NavigationScheduler.  I could push lock/unlock logic into fireBeforeUnloadEvent though.  That way we can add a flag to FrameLoader or NavigationScheduler although this would still O(n) assignments but that might be negligible given the existing code.  Any preferences?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329859</commentid>
    <comment_count>52</comment_count>
      <attachid>77955</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 16:24:19 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

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

&gt;&gt;&gt;&gt;&gt; WebCore/page/Page.h:349
&gt;&gt;&gt;&gt;&gt; +        bool m_navigationEnabled;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This seems slightly sketchy to me, but I&apos;m not sure.  It might be ok.
&gt;&gt;&gt; 
&gt;&gt;&gt; Since this is very specific to beforeunload event, I&apos;d like to call it m_navigationDisabledInBeforeaUnload but we don&apos;t really have a disabled flag in WebKit.  I&apos;m open to a better name / approach.  I too hate the fact I&apos;m adding a new reflection to Page just so that beforeunload can do the right thing.
&gt;&gt; 
&gt;&gt; Yeah, just adding a bool to Page requires some thought.  Page and Frame are dumping grounds for random state that we&apos;re not sure where to put.
&gt; 
&gt; I experimented with adding a flag to Frame/FrameLoader (FrameLoader already has shouldAllowNavigation) but it gets ugly because shouldAllowNavigation needs to take a url string and then we need to iterate through frames to figure it out.  The same is true if we were to add something to NavigationScheduler.  I could push lock/unlock logic into fireBeforeUnloadEvent though.  That way we can add a flag to FrameLoader or NavigationScheduler although this would still O(n) assignments but that might be negligible given the existing code.  Any preferences?

I don&apos;t really like any of those alternatives.  Maybe someone reading this thread has a clever idea?  If not, we can go this route.

Have you considered the case where the beforeload event in one page triggers a navigation in another page?  Are we supposed to block that navigation too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329860</commentid>
    <comment_count>53</comment_count>
      <attachid>77955</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 16:24:51 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

Marking this R- so you can address the comments from the discussion above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329863</commentid>
    <comment_count>54</comment_count>
      <attachid>77955</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-05 16:29:49 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

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

&gt;&gt;&gt;&gt;&gt;&gt; WebCore/page/Page.h:349
&gt;&gt;&gt;&gt;&gt;&gt; +        bool m_navigationEnabled;
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; This seems slightly sketchy to me, but I&apos;m not sure.  It might be ok.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Since this is very specific to beforeunload event, I&apos;d like to call it m_navigationDisabledInBeforeaUnload but we don&apos;t really have a disabled flag in WebKit.  I&apos;m open to a better name / approach.  I too hate the fact I&apos;m adding a new reflection to Page just so that beforeunload can do the right thing.
&gt;&gt;&gt; 
&gt;&gt;&gt; Yeah, just adding a bool to Page requires some thought.  Page and Frame are dumping grounds for random state that we&apos;re not sure where to put.
&gt;&gt; 
&gt;&gt; I experimented with adding a flag to Frame/FrameLoader (FrameLoader already has shouldAllowNavigation) but it gets ugly because shouldAllowNavigation needs to take a url string and then we need to iterate through frames to figure it out.  The same is true if we were to add something to NavigationScheduler.  I could push lock/unlock logic into fireBeforeUnloadEvent though.  That way we can add a flag to FrameLoader or NavigationScheduler although this would still O(n) assignments but that might be negligible given the existing code.  Any preferences?
&gt; 
&gt; I don&apos;t really like any of those alternatives.  Maybe someone reading this thread has a clever idea?  If not, we can go this route.
&gt; 
&gt; Have you considered the case where the beforeload event in one page triggers a navigation in another page?  Are we supposed to block that navigation too?

Yes, MSIE blocks such navigation so we should do prevent such navigations as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329896</commentid>
    <comment_count>55</comment_count>
      <attachid>77955</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 17:09:30 -0800</bug_when>
    <thetext>Comment on attachment 77955
fixes the bug

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt; WebCore/page/Page.h:349
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +        bool m_navigationEnabled;
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; This seems slightly sketchy to me, but I&apos;m not sure.  It might be ok.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Since this is very specific to beforeunload event, I&apos;d like to call it m_navigationDisabledInBeforeaUnload but we don&apos;t really have a disabled flag in WebKit.  I&apos;m open to a better name / approach.  I too hate the fact I&apos;m adding a new reflection to Page just so that beforeunload can do the right thing.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Yeah, just adding a bool to Page requires some thought.  Page and Frame are dumping grounds for random state that we&apos;re not sure where to put.
&gt;&gt;&gt; 
&gt;&gt;&gt; I experimented with adding a flag to Frame/FrameLoader (FrameLoader already has shouldAllowNavigation) but it gets ugly because shouldAllowNavigation needs to take a url string and then we need to iterate through frames to figure it out.  The same is true if we were to add something to NavigationScheduler.  I could push lock/unlock logic into fireBeforeUnloadEvent though.  That way we can add a flag to FrameLoader or NavigationScheduler although this would still O(n) assignments but that might be negligible given the existing code.  Any preferences?
&gt;&gt; 
&gt;&gt; I don&apos;t really like any of those alternatives.  Maybe someone reading this thread has a clever idea?  If not, we can go this route.
&gt;&gt; 
&gt;&gt; Have you considered the case where the beforeload event in one page triggers a navigation in another page?  Are we supposed to block that navigation too?
&gt; 
&gt; Yes, MSIE blocks such navigation so we should do prevent such navigations as well.

In that case, we should probably use a static variable in a RAII.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329983</commentid>
    <comment_count>56</comment_count>
      <attachid>78089</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-05 19:34:34 -0800</bug_when>
    <thetext>Created attachment 78089
Updated per Adam&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329986</commentid>
    <comment_count>57</comment_count>
      <attachid>78089</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-05 19:42:22 -0800</bug_when>
    <thetext>Comment on attachment 78089
Updated per Adam&apos;s comment

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

&gt; WebCore/loader/FrameLoader.cpp:2864
&gt; +    {
&gt; +        DisallowNavigationInBeforeUnload disallowNavigation;

I&apos;ve got an impression that we normally put a RAII object in a new block when it appears in the middle of a function but I can get rid of it if it&apos;s not customary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329988</commentid>
    <comment_count>58</comment_count>
      <attachid>78089</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 19:47:44 -0800</bug_when>
    <thetext>Comment on attachment 78089
Updated per Adam&apos;s comment

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

&gt;&gt; WebCore/loader/FrameLoader.cpp:2864
&gt;&gt; +        DisallowNavigationInBeforeUnload disallowNavigation;
&gt; 
&gt; I&apos;ve got an impression that we normally put a RAII object in a new block when it appears in the middle of a function but I can get rid of it if it&apos;s not customary.

It&apos;s might not be necessary here, but it&apos;s also nice because it calls attention to the fact that this object has a side-effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329999</commentid>
    <comment_count>59</comment_count>
      <attachid>78089</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 20:24:59 -0800</bug_when>
    <thetext>Comment on attachment 78089
Updated per Adam&apos;s comment

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

&gt; WebCore/loader/NavigationScheduler.cpp:275
&gt; +    return m_frame-&gt;page() &amp;&amp; (protocolIsJavaScript(url) || DisallowNavigationInBeforeUnload::isNavigationAllowed());

I&apos;d call through to shouldScheduleNavigation() here.

&gt; WebCore/loader/NavigationScheduler.h:57
&gt; +    DisallowNavigationInBeforeUnload() { ASSERT(s_navigationIsAllowed); s_navigationIsAllowed = false; }
&gt; +    ~DisallowNavigationInBeforeUnload() { ASSERT(!s_navigationIsAllowed); s_navigationIsAllowed = true; }

Functions with multiple statements shouldn&apos;t be all on one line.

&gt; LayoutTests/fast/events/before-unload-forbidden-navigation.html:4
&gt; +&lt;p&gt;This test ensures navigation is forbidden while beforeunload event is being fired. You should see PASS 1/2 and PASS 2/2 blow:&lt;/p&gt;

blow =&gt; below?

&gt; LayoutTests/fast/events/before-unload-in-multiple-subframes.html:34
&gt; +        log.innerHTML = &apos;PASS\n&apos;;

Is the newline really helpful here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330000</commentid>
    <comment_count>60</comment_count>
      <attachid>78089</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-05 20:26:19 -0800</bug_when>
    <thetext>Comment on attachment 78089
Updated per Adam&apos;s comment

i have some slight reservations about blocking the navigation in the NavigationScheduler, but it seems to be what we&apos;re supposed to do to match IE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330167</commentid>
    <comment_count>61</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-06 08:48:32 -0800</bug_when>
    <thetext>Thanks for the review, Adam.

(In reply to comment #59)
&gt; &gt; WebCore/loader/NavigationScheduler.cpp:275
&gt; &gt; +    return m_frame-&gt;page() &amp;&amp; (protocolIsJavaScript(url) || DisallowNavigationInBeforeUnload::isNavigationAllowed());
&gt; 
&gt; I&apos;d call through to shouldScheduleNavigation() here.

Will do.

&gt; &gt; WebCore/loader/NavigationScheduler.h:57
&gt; &gt; +    DisallowNavigationInBeforeUnload() { ASSERT(s_navigationIsAllowed); s_navigationIsAllowed = false; }
&gt; &gt; +    ~DisallowNavigationInBeforeUnload() { ASSERT(!s_navigationIsAllowed); s_navigationIsAllowed = true; }
&gt; 
&gt; Functions with multiple statements shouldn&apos;t be all on one line.

Oops, will fix.

&gt; &gt; LayoutTests/fast/events/before-unload-forbidden-navigation.html:4
&gt; &gt; +&lt;p&gt;This test ensures navigation is forbidden while beforeunload event is being fired. You should see PASS 1/2 and PASS 2/2 blow:&lt;/p&gt;
&gt; 
&gt; blow =&gt; below?

Yes, will fix (as well as all other tests).

&gt; &gt; LayoutTests/fast/events/before-unload-in-multiple-subframes.html:34
&gt; &gt; +        log.innerHTML = &apos;PASS\n&apos;;
&gt; 
&gt; Is the newline really helpful here?

Nope, fixed.

By the way, do you think of a better name for DisallowNavigationInBeforeUnload?  Classname shouldn&apos;t really be a class name but I couldn&apos;t come up with a better one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330168</commentid>
    <comment_count>62</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-06 08:49:01 -0800</bug_when>
    <thetext>Classname shouldn&apos;t really be a *verb* but I couldn&apos;t come up with a better one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330215</commentid>
    <comment_count>63</comment_count>
      <attachid>78089</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-06 10:46:43 -0800</bug_when>
    <thetext>Comment on attachment 78089
Updated per Adam&apos;s comment

It turned out that I need to a little more attention to the case where iframe is moved within beforeunload event handler. Namely, I end up hitting an assert I added in DisallowNavigationInBeforeUnload&apos;s c&apos;tor and d&apos;tor now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330616</commentid>
    <comment_count>64</comment_count>
      <attachid>78203</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-06 19:42:52 -0800</bug_when>
    <thetext>Created attachment 78203
added more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330985</commentid>
    <comment_count>65</comment_count>
      <attachid>78203</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-07 13:49:58 -0800</bug_when>
    <thetext>Comment on attachment 78203
added more tests

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

&gt; WebCore/loader/FrameLoader.cpp:2876
&gt; +            while (i &lt; descendentFrames.size() &amp;&amp; (!descendentFrames[i]-&gt;tree()-&gt;isDescendantOf(m_frame)
&gt; +                                                   || descendentFrames[i]-&gt;loader()-&gt;fireBeforeUnloadEvent(chrome)))

This condition is kind of out of control.  Maybe use some break statements?

I&apos;d at least put fireBeforeUnloadEvent on its own line b/c it has side effects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330998</commentid>
    <comment_count>66</comment_count>
      <attachid>78268</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-07 14:06:15 -0800</bug_when>
    <thetext>Created attachment 78268
added one more test per abarth&apos;s request</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331002</commentid>
    <comment_count>67</comment_count>
      <attachid>78268</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-07 14:10:26 -0800</bug_when>
    <thetext>Comment on attachment 78268
added one more test per abarth&apos;s request

Ok.  Let&apos;s give this a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331004</commentid>
    <comment_count>68</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-07 14:13:43 -0800</bug_when>
    <thetext>(In reply to comment #67)
&gt; (From update of attachment 78268 [details])
&gt; Ok.  Let&apos;s give this a try.

Thanks for the review!  I&apos;ll land after build &amp; running tests locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331123</commentid>
    <comment_count>69</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-07 18:15:34 -0800</bug_when>
    <thetext>Committed r75305: &lt;http://trac.webkit.org/changeset/75305&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331200</commentid>
    <comment_count>70</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-01-08 09:11:05 -0800</bug_when>
    <thetext>Is it possible that this commit broken all these on Qt Release bots?

fast/workers/dedicated-worker-lifecycle.html -&gt; failed
fast/workers/shared-worker-exception.html -&gt; failed
fast/workers/shared-worker-lifecycle.html -&gt; failed
fast/workers/shared-worker-name.html -&gt; failed
fast/workers/shared-worker-script-error.html -&gt; failed
fast/workers/stress-js-execution.html -&gt; failed
fast/workers/termination-early.html -&gt; failed
fast/workers/termination-with-port-messages.html -&gt; failed
fast/workers/worker-cloneport.html -&gt; failed
fast/workers/worker-close-more.html -&gt; failed
fast/workers/worker-close.html -&gt; failed
fast/workers/worker-context-multi-port.html -&gt; failed
fast/workers/worker-gc2.html -&gt; failed
fast/workers/worker-lifecycle.html -&gt; failed
fast/workers/worker-messageport-gc.html -&gt; failed
fast/workers/worker-multi-port.html -&gt; failed
fast/workers/worker-terminate.html -&gt; failed
fast/workers/storage ...
fast/workers/storage/change-version-sync.html -&gt; failed
fast/workers/storage/interrupt-database.html -&gt; failed
fast/xmlhttprequest .
fast/xmlhttprequest/null-document-xmlhttprequest-open.html -&gt; failed
fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html -&gt; failed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331224</commentid>
    <comment_count>71</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-08 10:57:37 -0800</bug_when>
    <thetext>(In reply to comment #70)
&gt; Is it possible that this commit broken all these on Qt Release bots?
&gt; 
&gt; fast/workers/dedicated-worker-lifecycle.html -&gt; failed
&gt; fast/workers/shared-worker-exception.html -&gt; failed
&gt; fast/workers/shared-worker-lifecycle.html -&gt; failed
&gt; fast/workers/shared-worker-name.html -&gt; failed
&gt; fast/workers/shared-worker-script-error.html -&gt; failed
&gt; fast/workers/stress-js-execution.html -&gt; failed
&gt; fast/workers/termination-early.html -&gt; failed
&gt; fast/workers/termination-with-port-messages.html -&gt; failed
&gt; fast/workers/worker-cloneport.html -&gt; failed
&gt; fast/workers/worker-close-more.html -&gt; failed
&gt; fast/workers/worker-close.html -&gt; failed
&gt; fast/workers/worker-context-multi-port.html -&gt; failed
&gt; fast/workers/worker-gc2.html -&gt; failed
&gt; fast/workers/worker-lifecycle.html -&gt; failed
&gt; fast/workers/worker-messageport-gc.html -&gt; failed
&gt; fast/workers/worker-multi-port.html -&gt; failed
&gt; fast/workers/worker-terminate.html -&gt; failed
&gt; fast/workers/storage ...
&gt; fast/workers/storage/change-version-sync.html -&gt; failed
&gt; fast/workers/storage/interrupt-database.html -&gt; failed
&gt; fast/xmlhttprequest .
&gt; fast/xmlhttprequest/null-document-xmlhttprequest-open.html -&gt; failed
&gt; fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html -&gt; failed

I saw the failure but thought it&apos;s some flakiness because these tests aren&apos;t failing on any other platforms.  But then it has been consistently failing after my patch so I&apos;m less convinced.  Do those tests fail if you ran one by one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331233</commentid>
    <comment_count>72</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-08 11:28:07 -0800</bug_when>
    <thetext>&gt; I saw the failure but thought it&apos;s some flakiness because these tests aren&apos;t failing on any other platforms.  But then it has been consistently failing after my patch so I&apos;m less convinced.  Do those tests fail if you ran one by one?

FAIL: Timed out waiting for notifyDone to be called

Maybe they&apos;re refusing to close for some reason?  It might have to see with how Qt calls into should close.  I would assume it&apos;s related to this patch unless there&apos;s evidence otherwise.  You might want to ask dglazkov if he&apos;s got a machine that can build / test Qt that you can borrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331234</commentid>
    <comment_count>73</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-08 11:30:32 -0800</bug_when>
    <thetext>(In reply to comment #72)
&gt; &gt; I saw the failure but thought it&apos;s some flakiness because these tests aren&apos;t failing on any other platforms.  But then it has been consistently failing after my patch so I&apos;m less convinced.  Do those tests fail if you ran one by one?
&gt; 
&gt; FAIL: Timed out waiting for notifyDone to be called
&gt; 
&gt; Maybe they&apos;re refusing to close for some reason?  It might have to see with how Qt calls into should close.  I would assume it&apos;s related to this patch unless there&apos;s evidence otherwise.  You might want to ask dglazkov if he&apos;s got a machine that can build / test Qt that you can borrow.

I don&apos;t have a Qt machine handy. But I am sure our friendly Qt peeps can help us debug this. Right, friendly Qt peeps? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331286</commentid>
    <comment_count>74</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-01-08 14:32:38 -0800</bug_when>
    <thetext>The Qt fails weren&apos;t caused by this patch. It is Qt-DRT bug: https://bugs.webkit.org/show_bug.cgi?id=42578

I&apos;ll check it and fix will land soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331305</commentid>
    <comment_count>75</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-08 15:41:14 -0800</bug_when>
    <thetext>(In reply to comment #74)
&gt; The Qt fails weren&apos;t caused by this patch. It is Qt-DRT bug: https://bugs.webkit.org/show_bug.cgi?id=42578
&gt; 
&gt; I&apos;ll check it and fix will land soon.

Thanks for the clarification, and thanks for fixing the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365999</commentid>
    <comment_count>76</comment_count>
      <attachid>85476</attachid>
    <who name="Holger Hees">holger.hees</who>
    <bug_when>2011-03-11 07:41:35 -0800</bug_when>
    <thetext>Created attachment 85476
change framecontent with document.write</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366001</commentid>
    <comment_count>77</comment_count>
    <who name="Holger Hees">holger.hees</who>
    <bug_when>2011-03-11 07:45:03 -0800</bug_when>
    <thetext>all works fine if i change the frame content by modifying the frame src.

but when i change the frame content with document.open(..., &apos;replace&apos;), document.write(...), document.close the beforeunload handler is not fired.

tested in chrome 10. and chrome 10 works with all other testcases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366049</commentid>
    <comment_count>78</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-11 09:36:10 -0800</bug_when>
    <thetext>(In reply to comment #77)
&gt; all works fine if i change the frame content by modifying the frame src.
&gt; 
&gt; but when i change the frame content with document.open(..., &apos;replace&apos;), document.write(...), document.close the beforeunload handler is not fired.
&gt; 
&gt; tested in chrome 10. and chrome 10 works with all other testcases.

Please file a new bug as this bug has been closed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366292</commentid>
    <comment_count>79</comment_count>
    <who name="Holger Hees">holger.hees</who>
    <bug_when>2011-03-11 13:49:36 -0800</bug_when>
    <thetext>ok. here is the new bug: https://bugs.webkit.org/show_bug.cgi?id=56221</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>21535</attachid>
            <date>2008-06-06 16:01:46 -0700</date>
            <delta_ts>2011-01-04 10:42:34 -0800</delta_ts>
            <desc>The frameset file</desc>
            <filename>OnBeforeUnload_FS.html</filename>
            <type>text/html</type>
            <size>863</size>
            <attacher name="William J. Edney">bedney</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIN
CiAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5k
dGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5n
PSJlbiIgbGFuZz0iZW4iPg0KPGhlYWQ+DQoJPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+DQoJPHRpdGxlPlRlc3QgT25C
ZWZvcmVVbmxvYWQ8L3RpdGxlPg0KCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJF
ZGl0IDguMCIgLz4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIHNl
dHVwKCkNCnsNCi8vYWxlcnQoJ2dvdCB0byBzZXR1cCcpOw0KLy8gVW5jb21tZW50IHRoaXMgbGlu
ZSBhbmQgcmVtb3ZlIHRoZSAnb25iZWZvcmV1bmxvYWQnIGhhbmRsZXIgZnJvbSB0aGUgJ2ZyYW1l
c2V0JyB0YWcgdG8gaW5zdGFsbCBhbiAnb25iZWZvcmV1bmxvYWQnIGhhbmRsZXIgdXNpbmcgc2Ny
aXB0Lg0KLy93aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbiAoKSB7cmV0dXJuICdnb3Qg
dG8gc2NyaXB0LWluc3RhbGxlZCBoYW5kbGVyIG9uIHRoZSBmcmFtZXNldCB3aW5kb3cnfTsNCn07
DQo8L3NjcmlwdD4NCg0KPC9oZWFkPg0KPGZyYW1lc2V0IG9ubG9hZD0ic2V0dXAoKSIgb25iZWZv
cmV1bmxvYWQ9InJldHVybiAnZ290IHRvIGZyYW1lc2V0IG9uYmVmb3JldW5sb2FkIGhhbmRsZXIn
Ij4NCgk8ZnJhbWUgc3JjPSJPbkJlZm9yZVVubG9hZF9GQy5odG1sIj4NCjwvZnJhbWVzZXQ+DQo8
L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>21536</attachid>
            <date>2008-06-06 16:04:21 -0700</date>
            <delta_ts>2011-01-04 10:42:34 -0800</delta_ts>
            <desc>The frame content file</desc>
            <filename>OnBeforeUnload_FC.html</filename>
            <type>text/html</type>
            <size>562</size>
            <attacher name="William J. Edney">bedney</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIN
CiAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5k
dGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5n
PSJlbiIgbGFuZz0iZW4iPg0KPGhlYWQ+DQoJPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+DQoJPHRpdGxlPlRlc3QgT25C
ZWZvcmVVbmxvYWQ8L3RpdGxlPg0KCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJF
ZGl0IDguMCIgLz4NCg0KPC9oZWFkPg0KPGJvZHkgb25iZWZvcmV1bmxvYWQ9InJldHVybiAnb25i
ZWZvcmV1bmxvYWQgaGFuZGxlciBpbiBuZXN0ZWQgZG9jdW1lbnQnIj4NCkNsaWNrIHRoaXMgbGlu
ayB0byBzZWUgdGhlIG9uYmVmb3JldW5sb2FkIGRpYWxvZzogPGEgaHJlZj0iaHR0cDovL3d3dy5n
b29nbGUuY29tIj5HbyBUbyBHb29nbGU8L2E+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>43664</attachid>
            <date>2009-11-21 16:34:04 -0800</date>
            <delta_ts>2011-01-04 10:42:34 -0800</delta_ts>
            <desc>The frameset file v2</desc>
            <filename>OnBeforeUnload_FS_v2.html</filename>
            <type>text/html</type>
            <size>904</size>
            <attacher name="William J. Edney">bedney</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIN
CiAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5k
dGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5n
PSJlbiIgbGFuZz0iZW4iPg0KPGhlYWQ+DQoJPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+DQoJPHRpdGxlPlRlc3QgT25C
ZWZvcmVVbmxvYWQ8L3RpdGxlPg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCglm
dW5jdGlvbiBzZXR1cCgpDQoJew0KCQlhbGVydCgnZ290IHRvIGZyYW1lc2V0IHNldHVwJyk7DQoJ
CS8vIFVuY29tbWVudCB0aGlzIGxpbmUgYW5kIHJlbW92ZSB0aGUgJ29uYmVmb3JldW5sb2FkJyBo
YW5kbGVyIGZyb20gdGhlICdmcmFtZXNldCcgdGFnIHRvIGluc3RhbGwgYW4gJ29uYmVmb3JldW5s
b2FkJyBoYW5kbGVyIHVzaW5nIHNjcmlwdC4NCgkJd2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVu
Y3Rpb24gKCkge3JldHVybiAnZ290IHRvIHNjcmlwdC1pbnN0YWxsZWQgb25iZWZvcmV1bmxvYWQg
aGFuZGxlciBpbnN0YWxsZWQgb24gdGhlIGZyYW1lc2V0J307DQoJfTsNCgk8L3NjcmlwdD4NCg0K
PC9oZWFkPg0KPCEtLTxmcmFtZXNldCBvbmxvYWQ9InNldHVwKCkiIG9uYmVmb3JldW5sb2FkPSJy
ZXR1cm4gJ2dvdCB0byBvbmJlZm9yZXVubG9hZCBoYW5kbGVyIGluc3RhbGxlZCBvbiB0aGUgZnJh
bWVzZXQnIj4tLT4NCjxmcmFtZXNldCBvbmxvYWQ9InNldHVwKCkiPg0KCTxmcmFtZSBzcmM9Ik9u
QmVmb3JlVW5sb2FkX0ZDX3YyLmh0bWwiPg0KPC9mcmFtZXNldD4NCjwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>43665</attachid>
            <date>2009-11-21 16:34:34 -0800</date>
            <delta_ts>2011-01-04 10:42:34 -0800</delta_ts>
            <desc>The frame content file v2</desc>
            <filename>OnBeforeUnload_FC_v2.html</filename>
            <type>text/html</type>
            <size>954</size>
            <attacher name="William J. Edney">bedney</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIN
CiAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5k
dGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5n
PSJlbiIgbGFuZz0iZW4iPg0KPGhlYWQ+DQoJPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+DQoJPHRpdGxlPlRlc3QgT25C
ZWZvcmVVbmxvYWQ8L3RpdGxlPg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0K
CWZ1bmN0aW9uIHNldHVwKCkNCgl7DQoJCWFsZXJ0KCdnb3QgdG8gbmVzdGVkIGZyYW1lIHNldHVw
Jyk7DQoJCS8vIFVuY29tbWVudCB0aGlzIGxpbmUgYW5kIHJlbW92ZSB0aGUgJ29uYmVmb3JldW5s
b2FkJyBoYW5kbGVyIGZyb20gdGhlICdib2R5JyB0YWcgdG8gaW5zdGFsbCBhbiAnb25iZWZvcmV1
bmxvYWQnIGhhbmRsZXIgdXNpbmcgc2NyaXB0Lg0KCQl3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBm
dW5jdGlvbiAoKSB7cmV0dXJuICdnb3QgdG8gc2NyaXB0LWluc3RhbGxlZCBvbmJlZm9yZXVubG9h
ZCBoYW5kbGVyIGluc3RhbGxlZCBvbiBuZXN0ZWQgZnJhbWUnfTsNCgl9Ow0KCTwvc2NyaXB0Pg0K
DQo8L2hlYWQ+DQo8IS0tPGJvZHkgb25sb2FkPSJzZXR1cCgpIiBvbmJlZm9yZXVubG9hZD0icmV0
dXJuICdnb3QgdG8gb25iZWZvcmV1bmxvYWQgaGFuZGxlciBpbnN0YWxsZWQgb24gbmVzdGVkIGZy
YW1lJyI+LS0+DQo8Ym9keSBvbmxvYWQ9InNldHVwKCkiPg0KQ2xpY2sgdGhpcyBsaW5rIHRvIHNl
ZSB0aGUgb25iZWZvcmV1bmxvYWQgZGlhbG9nOiA8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5j
b20iPkdvIFRvIEdvb2dsZTwvYT4NCjwvYm9keT4NCjwvaHRtbD4NCg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>74307</attachid>
            <date>2010-11-18 15:53:12 -0800</date>
            <delta_ts>2011-01-04 10:42:34 -0800</delta_ts>
            <desc>Works on FF 3.6 and IE8. Please put parent.html and iframe.html in the same folder and load parent.html. When changing the child url with the button you&apos;ll see PASS on FF.</desc>
            <filename>iframe.zip</filename>
            <type>application/zip</type>
            <size>617</size>
            <attacher name="pablo">pablo.platt</attacher>
            
              <data encoding="base64">UEsDBBQAAAAIADAJcz2qIddiMgAAAEYAAAALAAAAaWZyYW1lLmh0bWyzySjJzbHj5bLJSE1MAdH6
MEZSfkolkFYoycgsVgCikoxUhcy0osTcVJAqqCxQOUg/AFBLAwQUAAAACABgDnM9PqHFpF0BAAAj
AwAACwAAAHBhcmVudC5odG1sxZPBagIxEIbPK/gOIRdXKJt7XYUWhAoWCrb0WGIy6wZjsmRnFRHf
vZOsFg/11ENPm0z+mf+bZLascWdnw0FZg9Tx26pgGqRV1TmFxjtmnMF8zE7DQbaXgZkqyB2wKdNe
dTtwWGwA5xbi8vm40DlHaPGrl/HxJKM8U+UH47Q/FFLr+Z6US9MiOAjjWDbrxYXyjoL4+bs052uo
fIDOWS81f2BXwgtclvDAElojQwS7Sxig7SwSXEoDWxhHBi/vr0tKHr09rVajdHQmE2lbSMIz1W6B
nZgQbDHPsvvgiFLViT3n3v0zNXGeh4Ob91S1dBv4CPYPj5reNLXeBkVpvEZsHoU4wHprsPBhI/gk
GZfiZ6Li5jpma6+PzKc7mfJ+wniMX0AMRW8dGdmQrreMI8tnpei3qVqHSJ15p6xR2ym/aZHP+g3r
gi1FL0xz3kiXbC63SvViKB6JCJcW6ef4BlBLAQIUABQAAAAIADAJcz2qIddiMgAAAEYAAAALAAAA
AAAAAAEAIAAAAAAAAABpZnJhbWUuaHRtbFBLAQIUABQAAAAIAGAOcz0+ocWkXQEAACMDAAALAAAA
AAAAAAEAIAAAAFsAAABwYXJlbnQuaHRtbFBLBQYAAAAAAgACAHIAAADhAQAAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74319</attachid>
            <date>2010-11-18 16:34:40 -0800</date>
            <delta_ts>2010-12-06 12:34:22 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>wip19418</filename>
            <type>text/plain</type>
            <size>746</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDcyMzMwKQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTExLDcgKzI5MTEsNyBA
QAogICAgIC8vICAgICAgIGlzIHRoZSB1c2VyIHJlc3BvbmRpbmcgQ2FuY2VsIHRvIHRoZSBmb3Jt
IHJlcG9zdCBuYWcgc2hlZXQuCiAgICAgLy8gICAgMikgVXNlciByZXNwb25kZWQgQ2FuY2VsIHRv
IGFuIGFsZXJ0IHBvcHBlZCB1cCBieSB0aGUgYmVmb3JlIHVubG9hZCBldmVudCBoYW5kbGVyLgog
ICAgIC8vIFRoZSAiYmVmb3JlIHVubG9hZCIgZXZlbnQgaGFuZGxlciBydW5zIG9ubHkgZm9yIHRo
ZSBtYWluIGZyYW1lLgotICAgIGJvb2wgY2FuQ29udGludWUgPSBzaG91bGRDb250aW51ZSAmJiAo
IWlzTG9hZGluZ01haW5GcmFtZSgpIHx8IHNob3VsZENsb3NlKCkpOworICAgIGJvb2wgY2FuQ29u
dGludWUgPSBzaG91bGRDb250aW51ZSAmJiBzaG91bGRDbG9zZSgpOwogCiAgICAgaWYgKCFjYW5D
b250aW51ZSkgewogICAgICAgICAvLyBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGEgcXVpY2sgcmVk
aXJlY3QsIGJ1dCB0aGUgcG9saWN5IGRlbGVnYXRlIGRlY2lkZWQgdG8gaWdub3JlIGl0LCB0aGVu
IHdlIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75730</attachid>
            <date>2010-12-06 12:34:27 -0800</date>
            <delta_ts>2010-12-17 14:25:32 -0800</delta_ts>
            <desc>initial patch</desc>
            <filename>bug-19418-20101206123425.patch</filename>
            <type>text/plain</type>
            <size>4257</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzM4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgb25i
ZWZvcmV1bmxvYWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAgICAgICAgRml4ZWQgdGhlIGJ1
ZyBieSBlbmFibGluZyBvbmJlZm9yZXVubG9hZCBldmVudHMgZm9yIGFsbCBmcmFtZXMuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS5odG1sCisK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeSk6CisKIDIwMTAtMTIt
MDYgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDcz
Mzc0KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTE1LDcgKzI5MTUsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5h
dmlnCiAgICAgLy8gICAgICAgaXMgdGhlIHVzZXIgcmVzcG9uZGluZyBDYW5jZWwgdG8gdGhlIGZv
cm0gcmVwb3N0IG5hZyBzaGVldC4KICAgICAvLyAgICAyKSBVc2VyIHJlc3BvbmRlZCBDYW5jZWwg
dG8gYW4gYWxlcnQgcG9wcGVkIHVwIGJ5IHRoZSBiZWZvcmUgdW5sb2FkIGV2ZW50IGhhbmRsZXIu
CiAgICAgLy8gVGhlICJiZWZvcmUgdW5sb2FkIiBldmVudCBoYW5kbGVyIHJ1bnMgb25seSBmb3Ig
dGhlIG1haW4gZnJhbWUuCi0gICAgYm9vbCBjYW5Db250aW51ZSA9IHNob3VsZENvbnRpbnVlICYm
ICghaXNMb2FkaW5nTWFpbkZyYW1lKCkgfHwgc2hvdWxkQ2xvc2UoKSk7CisgICAgYm9vbCBjYW5D
b250aW51ZSA9IHNob3VsZENvbnRpbnVlICYmIHNob3VsZENsb3NlKCk7CiAKICAgICBpZiAoIWNh
bkNvbnRpbnVlKSB7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBxdWljayBy
ZWRpcmVjdCwgYnV0IHRoZSBwb2xpY3kgZGVsZWdhdGUgZGVjaWRlZCB0byBpZ25vcmUgaXQsIHRo
ZW4gd2UgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzM4MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTEyLTA2ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIG9uYmVmb3JldW5sb2FkIGlzIGJyb2tlbiBmb3IgZnJhbWVzZXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQxOAorCisg
ICAgICAgIEFkZGVkIGEgdGVzdCBmb3IgYmVmb3JldW5sb2FkIGV2ZW50cyBpbiBzdWJmcmFtZXMu
CisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLWNoaWxkLmh0bWw6IEFkZGVkLgorCiAyMDEwLTEyLTA2ICBNaWhhaSBQYXJwYXJp
dGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgbW92ZSBvZiBD
aHJvbWl1bSBiYXNlbGluZXMuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWluLXN1YmZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+
Cis8cD5UaGlzIHRlc3RzIGJlZm9yZXVubG9hZCBldmVudCBpbiBzdWJmcmFtZXMuIFlvdSBzaG91
bGQgc2VlIFBBU1MgYmxvdzo8L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdD4KKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFt
ZXNBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK3ZhciBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7Cit2YXIgZG9uZSA9
IGZhbHNlOworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGlmIChkb25lKSB7CisgICAgICAgIC8v
IGxvZydzIG5vdCBoYXZpbmcgYW55IGNvbnRlbnQgaW1wbGllcyB0aGF0IGxvYWQgZXZlbnQgd2Fz
IGRpc3BhdGNoZWQgZm9yIHRoZSBzZWNvbmQgdGltZSBiZWZvcmUgYmVmb3JldW5sb2FkIGlzIGRp
c3BhdGNoZWQuCisgICAgICAgIGlmICghbG9nLmlubmVySFRNTC5sZW5ndGgpCisgICAgICAgICAg
ICBsb2cuaW5uZXJIVE1MID0gJ0ZBSUw6IGJlZm9yZXVubG9hZCBldmVudCB3YXMgbmV2ZXIgZGlz
cGF0Y2hlZC5cbic7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgZG9uZSA9IHRydWU7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2lmcmFtZScpWzBdLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNv
dXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sJzsKK30KKworZnVuY3Rp
b24gZmlyZWQoKSB7CisgICAgaWYgKCFsb2cuaW5uZXJIVE1MLmxlbmd0aCkKKyAgICAgICAgbG9n
LmlubmVySFRNTCA9ICdQQVNTXG4nOworICAgIGVsc2UKKyAgICAgICAgbG9nLmlubmVySFRNTCA9
ICdGQUlMOiBiZWZvcmV1bmxvYWQgZXZlbnQgd2FzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIHNlY29u
ZCBsb2FkIGV2ZW50LicKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2NyaXB0Pgor
PGlmcmFtZSBvbmxvYWQ9InRlc3QoKSIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1z
dWJmcmFtZS1jaGlsZC5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1l
LWNoaWxkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3Vy
Y2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZy
YW1lLWNoaWxkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5IG9uYmVmb3JldW5sb2FkPSJ0b3AuZmlyZWQoKTsgcmV0dXJuIG51
bGw7Ij4KK0NoaWxkIGxvYWRlZC4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76910</attachid>
            <date>2010-12-17 14:25:37 -0800</date>
            <delta_ts>2010-12-17 14:32:31 -0800</delta_ts>
            <desc>Added more tests per darin&apos;s comment and to address ap&apos;s concern</desc>
            <filename>bug-19418-20101217142535.patch</filename>
            <type>text/plain</type>
            <size>11133</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OWE5ZGJlYTdkMjNkMjkyZTdhMDZjMDA1ZGQ4MDlkZDZlODdkOWQ1Li5iNmY0ZTc2
N2JiYjc2ZGFjZGNjNWZkODk1OTBmNGM3ZTRhNTA2ZDQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTAtMTItMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGJl
Zm9yZXVubG9hZCBldmVudHMgaW4gc3ViZnJhbWVzLgorICAgICAgICBiZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLmh0bWwgdGVzdHMgdGhhdCBiZWZvcmV1bmxvYWQgaXMgZmlyZWQgZm9yIGFuIGlm
cmFtZSBleGFjdGx5IG9uY2UuCisgICAgICAgIGJlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3Vi
ZnJhbWVzLmh0bWwgdGVzdHMgdGhhdCBiZWZvcmV1bmxvYWQgaXMgZmlyZWQgZm9yIGV2ZXJ5IHN1
YmZyYW1lLgorICAgICAgICBiZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWluZnJh
bWUuaHRtbCB0ZXN0cyB0aGF0IGJlZm9yZXVubG9hZCBpcyBub3QgZmlyZWQgZm9yIHN1YmZyYW1l
cworICAgICAgICB3aGVuIHRoZSBtYWluIGZyYW1lIGlzIHVubGFvZGVkLgorCisgICAgICAgICog
ZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLW11bHRp
cGxlLXN1YmZyYW1lcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWluLXN1YmZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS11bmxvYWQtbWFpbmZyYW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJm
cmFtZS11bmxvYWQtbWFpbmZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3Vi
ZnJhbWUtZGVzdGluYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVz
b3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5odG1sOiBBZGRlZC4KKworMjAx
MC0xMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBvbmJlZm9yZXVubG9hZCBpcyBicm9r
ZW4gZm9yIGZyYW1lc2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk0MTgKKworICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4t
c3ViZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2Jl
Zm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbDogQWRkZWQuCisKIDIwMTAtMTItMTcg
IEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGZp
eCBmb3IgV2luZG93cyBib3RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxM2YyZmFhNjg1ZjlhMzBhYzdiOWI5ZGQ1YWZiMDcxMmFl
ZjYzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWluLW11bHRpcGxlLXN1YmZyYW1lcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBA
QAorVGhpcyB0ZXN0cyBiZWZvcmV1bmxvYWQgZXZlbnQgaW4gbXVsdGlwbGUgc3ViZnJhbWVzLiBZ
b3Ugc2hvdWxkIHNlZSBQQVNTIGJsb3c6CisKK1BBU1MKKyAgCisKKy0tLS0tLS0tCitGcmFtZTog
JzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK0NoaWxkIGxvYWRl
ZC4KKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTEtLT4tLT4n
CistLS0tLS0tLQorQ2hpbGQgbG9hZGVkLgorCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQ
YXRoIC8vPCEtLWZyYW1lMi0tPi0tPicKKy0tLS0tLS0tCitDaGlsZCBsb2FkZWQuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLW11bHRpcGxlLXN1
YmZyYW1lcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1t
dWx0aXBsZS1zdWJmcmFtZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2UzZWJmMjIyODYyMTFhYmM5YzJh
ODM2MzM2NTZiYTdjNGZjNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMuaHRtbApAQCAtMCwwICsx
LDQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIGJl
Zm9yZXVubG9hZCBldmVudCBpbiBtdWx0aXBsZSBzdWJmcmFtZXMuIFlvdSBzaG91bGQgc2VlIFBB
U1MgYmxvdzo8L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdD4KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBs
b2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7CisKK2Z1bmN0aW9uIHRlc3QoaWZy
YW1lKSB7CisgICAgaWYgKGlmcmFtZS5kb25lKQorICAgICAgICByZXR1cm47CisgICAgaWZyYW1l
LmRvbmUgPSB0cnVlOworICAgIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAn
cmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCc7Cit9CisKK3Zh
ciBudW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJhbWVzID0gMDsKK3ZhciBudW1iZXJPZkZyYW1l
cyA9IDM7CisKK2Z1bmN0aW9uIGxvZ0Vycm9yKCkgeworICAgIGxvZy5pbm5lckhUTUwgPSAnRkFJ
TDogJyArIG51bWJlck9mQmVmb3JlVW5sb2FkSW5TdWJmcmFtZXMgKyAnIGJlZm9yZXVubG9hZCBl
dmVudHMgYXJlIGZpcmVkIGJ1dCBleHBlY3RlZCAnICsgbnVtYmVyT2ZGcmFtZXMgKyAnIGV2ZW50
cyc7Cit9CisKK2xvZ0Vycm9yKCk7CisKK2Z1bmN0aW9uIGZpcmVkKGNvbnRlbnRXaW5kb3cpIHsK
KyAgICBudW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJhbWVzKys7CisgICAgaWYgKG51bWJlck9m
QmVmb3JlVW5sb2FkSW5TdWJmcmFtZXMgPT0gbnVtYmVyT2ZGcmFtZXMpIHsKKyAgICAgICAgbG9n
LmlubmVySFRNTCA9ICdQQVNTXG4nOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbG9nRXJyb3IoKTsKKyAgICBjb250
ZW50V2luZG93LmZyYW1lRWxlbWVudC5maXJlZCA9IHRydWU7Cit9CisKKzwvc2NyaXB0PgorPGlm
cmFtZSBvbmxvYWQ9InRlc3QodGhpcykiIHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4t
c3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9pZnJhbWU+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCh0aGlz
KSIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sIj48
L2lmcmFtZT4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRoaXMpIiBzcmM9InJlc291cmNlcy9iZWZv
cmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1p
bi1zdWJmcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWluLXN1YmZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIyNGFmZmExZTcy
NWViMTg0YmE5MDZlMzk2MTgxOTcxYWFiOThiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw5IEBACitUaGlzIHRlc3RzIGJlZm9yZXVubG9hZCBldmVudCBpbiBzdWJmcmFtZXMu
IFlvdSBzaG91bGQgc2VlIFBBU1MgYmxvdzoKKworUEFTUworCisKKy0tLS0tLS0tCitGcmFtZTog
JzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK0NoaWxkIGxvYWRl
ZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4t
c3ViZnJhbWUtdW5sb2FkLW1haW5mcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWluZnJhbWUtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA5MGIwMmE2Njk3NDc2ZTYzMGQ1MzIzMmU1MGI5MzIyYzQ0MjAx
NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWluZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MiBAQAorQUxFUlQ6IFBBU1M6IDEvMgorUEFTUzogMi8yCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWluZnJhbWUu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUt
dW5sb2FkLW1haW5mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzNmI0NDA5Y2U0ODlkNDU4MmIyOGRl
MTdjZGM1MmU2Y2VmMWRhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWluZnJhbWUuaHRtbApAQCAt
MCwwICsxLDIyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGlsZEZy
YW1lc0FzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
K30KKworZnVuY3Rpb24gdGVzdChpZnJhbWUpIHsKKyAgICBsb2NhdGlvbi5ocmVmID0gJ3Jlc291
cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWwnOworfQorCis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9uYmVmb3JldW5sb2FkPSJhbGVydCgnUEFTUzogMS8y
Jyk7Ij4KKzxwPlRoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50IGRvZXMgbm90IGZpcmUgaW4g
c3ViZnJhbWVzIHdoZW4gdGhlIG1haW4gZnJhbWUgaXMgbmF2aWdhdGluZyBhd2F5LjwvcD4KKzxp
ZnJhbWUgb25sb2FkPSJ0ZXN0KCkiIHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3Vi
ZnJhbWUtZmFpbC5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNzA0M2M5NDE5Mzg4YzFmYjZiZjZhOGNkNmZhZjZkZWY1MGRkMmRlCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1z
dWJmcmFtZS5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxwPlRoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50IGluIHN1YmZyYW1lcy4gWW91
IHNob3VsZCBzZWUgUEFTUyBibG93OjwvcD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+Cis8c2NyaXB0
PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGls
ZEZyYW1lc0FzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKK30KKwordmFyIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKTsKK3ZhciBk
b25lID0gZmFsc2U7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaWYgKGRvbmUpIHsKKyAgICAg
ICAgLy8gbG9nJ3Mgbm90IGhhdmluZyBhbnkgY29udGVudCBpbXBsaWVzIHRoYXQgbG9hZCBldmVu
dCB3YXMgZGlzcGF0Y2hlZCBmb3IgdGhlIHNlY29uZCB0aW1lIGJlZm9yZSBiZWZvcmV1bmxvYWQg
aXMgZGlzcGF0Y2hlZC4KKyAgICAgICAgaWYgKCFsb2cuaW5uZXJIVE1MLmxlbmd0aCkKKyAgICAg
ICAgICAgIGxvZy5pbm5lckhUTUwgPSAnRkFJTDogYmVmb3JldW5sb2FkIGV2ZW50IHdhcyBuZXZl
ciBkaXNwYXRjaGVkLlxuJzsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBkb25lID0gdHJ1ZTsKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF0uY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID0g
J3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwnOworfQorCitm
dW5jdGlvbiBmaXJlZCgpIHsKKyAgICBpZiAoIWxvZy5pbm5lckhUTUwubGVuZ3RoKQorICAgICAg
ICBsb2cuaW5uZXJIVE1MID0gJ1BBU1Ncbic7CisgICAgZWxzZQorICAgICAgICBsb2cuaW5uZXJI
VE1MID0gJ0ZBSUw6IGJlZm9yZXVubG9hZCBldmVudCB3YXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUg
c2Vjb25kIGxvYWQgZXZlbnQuJworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3Jp
cHQ+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCgpIiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2Fk
LWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQt
aW4tc3ViZnJhbWUtY2hpbGQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNl
cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzZiY2U4
NTZjN2EwZDcyOWQyYjIzMWM0YTJkMzdjYzA1NGM2NTc3NwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1l
LWNoaWxkLmh0bWwKQEAgLTAsMCArMSw2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJv
ZHkgb25iZWZvcmV1bmxvYWQ9InRvcC5maXJlZCh3aW5kb3cpOyByZXR1cm4gbnVsbDsiPgorQ2hp
bGQgbG9hZGVkLgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24u
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2M0MDljYzIyZWZiZWI5NmQ2
ZmJlNTMyZjgxMWU3YjIyZTI1Zjg4NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0aW9u
Lmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5Pgor
UEFTUzogMi8yCis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJj
ZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1mYWlsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1mYWlsLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDMyMjEzYTgwMzcwY2MyNzdiZDg1YWZlYzgyN2MzN2NlNjRiNzNmNgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLWZhaWwuaHRtbApAQCAtMCwwICsxLDYgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8Ym9keSBvbmJlZm9yZXVubG9hZD0iYWxlcnQoJ0ZBSUwnKSI+CitDaGlsZCBs
b2FkZWQuCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNiZGZlOWY4ZGFhNjJlMDVjYzVjZjE3OWYxNjdlOTMx
NjdhOWZhZGEuLjgyOWM1NWJmMDQ0MjY2YjVmMGE3YTdmYmM2NDk1ODVkN2RiYTU4ZjQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTAtMTItMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgb25iZWZvcmV1
bmxvYWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAgICAgICAgRml4ZWQgdGhlIGJ1ZyBieSBl
bmFibGluZyBvbmJlZm9yZXVubG9hZCBldmVudHMgZm9yIGFsbCBmcmFtZXMuCisKKyAgICAgICAg
VGVzdDogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS5odG1sCisKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeSk6CisKIDIwMTAtMTItMTcgIFcu
IEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDNjODBiMjlk
YzA0YmM5NjkxNWY0MDRhZjA3ZDkzNDUxYWU1NTkyNWYuLmNhZGQzNjI1M2RlNzdiNjYzZjFjMjA4
ZWNiNzFkNjIwZmY5ZTI0MjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTI5MDIsOCArMjkw
Miw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGlj
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgLy8gICAgMSkgTmF2aWdhdGlvbiBw
b2xpY3kgZGVsZWdhdGUgc2FpZCB3ZSBjYW4ndCBzbyByZXF1ZXN0IGlzIG5pbC4gQSBwcmltYXJ5
IGNhc2Ugb2YgdGhpcyAKICAgICAvLyAgICAgICBpcyB0aGUgdXNlciByZXNwb25kaW5nIENhbmNl
bCB0byB0aGUgZm9ybSByZXBvc3QgbmFnIHNoZWV0LgogICAgIC8vICAgIDIpIFVzZXIgcmVzcG9u
ZGVkIENhbmNlbCB0byBhbiBhbGVydCBwb3BwZWQgdXAgYnkgdGhlIGJlZm9yZSB1bmxvYWQgZXZl
bnQgaGFuZGxlci4KLSAgICAvLyBUaGUgImJlZm9yZSB1bmxvYWQiIGV2ZW50IGhhbmRsZXIgcnVu
cyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZS4KLSAgICBib29sIGNhbkNvbnRpbnVlID0gc2hvdWxk
Q29udGludWUgJiYgKCFpc0xvYWRpbmdNYWluRnJhbWUoKSB8fCBzaG91bGRDbG9zZSgpKTsKKyAg
ICBib29sIGNhbkNvbnRpbnVlID0gc2hvdWxkQ29udGludWUgJiYgc2hvdWxkQ2xvc2UoKTsKIAog
ICAgIGlmICghY2FuQ29udGludWUpIHsKICAgICAgICAgLy8gSWYgd2Ugd2VyZSB3YWl0aW5nIGZv
ciBhIHF1aWNrIHJlZGlyZWN0LCBidXQgdGhlIHBvbGljeSBkZWxlZ2F0ZSBkZWNpZGVkIHRvIGln
bm9yZSBpdCwgdGhlbiB3ZSAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76911</attachid>
            <date>2010-12-17 14:38:07 -0800</date>
            <delta_ts>2011-01-04 16:49:05 -0800</delta_ts>
            <desc>Removed before-unload-in-subframe-fail.html</desc>
            <filename>bug-19418-20101217143806.patch</filename>
            <type>text/plain</type>
            <size>10634</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OWE5ZGJlYTdkMjNkMjkyZTdhMDZjMDA1ZGQ4MDlkZDZlODdkOWQ1Li40NTg1YWM3
YjhhNTA1OGYxNDgxNzVjMDUyY2E5NmE2MWE3MWYzODVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTAtMTItMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGJl
Zm9yZXVubG9hZCBldmVudHMgaW4gc3ViZnJhbWVzLgorICAgICAgICBiZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLmh0bWwgdGVzdHMgdGhhdCBiZWZvcmV1bmxvYWQgaXMgZmlyZWQgZm9yIGFuIGlm
cmFtZSBleGFjdGx5IG9uY2UuCisgICAgICAgIGJlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3Vi
ZnJhbWVzLmh0bWwgdGVzdHMgdGhhdCBiZWZvcmV1bmxvYWQgaXMgZmlyZWQgZm9yIGV2ZXJ5IHN1
YmZyYW1lLgorICAgICAgICBiZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWluZnJh
bWUuaHRtbCB0ZXN0cyB0aGF0IGJlZm9yZXVubG9hZCBpcyBub3QgZmlyZWQgZm9yIHN1YmZyYW1l
cworICAgICAgICB3aGVuIHRoZSBtYWluIGZyYW1lIGlzIHVubGFvZGVkLgorCisgICAgICAgICog
ZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLW11bHRp
cGxlLXN1YmZyYW1lcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWluLXN1YmZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS11bmxvYWQtbWFpbmZyYW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJm
cmFtZS11bmxvYWQtbWFpbmZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3Vi
ZnJhbWUtZGVzdGluYXRpb24uaHRtbDogQWRkZWQuCisKKzIwMTAtMTItMTcgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgb25iZWZvcmV1bmxvYWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZy
YW1lLWNoaWxkLmh0bWw6IEFkZGVkLgorCiAyMDEwLTEyLTE3ICBBbnRvbmlvIEdvbWVzICA8YWdv
bWVzQHJpbS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBmaXggZm9yIFdpbmRvd3MgYm90cy4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVs
dGlwbGUtc3ViZnJhbWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Jl
Zm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMTNmMmZhYTY4NWY5YTMwYWM3YjliOWRkNWFmYjA3MTJhZWY2MzkxCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1z
dWJmcmFtZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgdGVzdHMgYmVmb3Jl
dW5sb2FkIGV2ZW50IGluIG11bHRpcGxlIHN1YmZyYW1lcy4gWW91IHNob3VsZCBzZWUgUEFTUyBi
bG93OgorCitQQVNTCisgIAorCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEt
LWZyYW1lMC0tPi0tPicKKy0tLS0tLS0tCitDaGlsZCBsb2FkZWQuCisKKy0tLS0tLS0tCitGcmFt
ZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+JworLS0tLS0tLS0KK0NoaWxkIGxv
YWRlZC4KKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTItLT4t
LT4nCistLS0tLS0tLQorQ2hpbGQgbG9hZGVkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjNlM2ViZjIyMjg2MjExYWJjOWMyYTgzNjMzNjU2YmE3YzRmYzVjNwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQt
aW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0bWwKQEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyBiZWZvcmV1bmxvYWQgZXZlbnQgaW4g
bXVsdGlwbGUgc3ViZnJhbWVzLiBZb3Ugc2hvdWxkIHNlZSBQQVNTIGJsb3c6PC9wPgorPHByZSBp
ZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xvZycpOworCitmdW5jdGlvbiB0ZXN0KGlmcmFtZSkgeworICAgIGlmIChpZnJh
bWUuZG9uZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmcmFtZS5kb25lID0gdHJ1ZTsKKyAgICBp
ZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwnOworfQorCit2YXIgbnVtYmVyT2ZCZWZvcmVVbmxv
YWRJblN1YmZyYW1lcyA9IDA7Cit2YXIgbnVtYmVyT2ZGcmFtZXMgPSAzOworCitmdW5jdGlvbiBs
b2dFcnJvcigpIHsKKyAgICBsb2cuaW5uZXJIVE1MID0gJ0ZBSUw6ICcgKyBudW1iZXJPZkJlZm9y
ZVVubG9hZEluU3ViZnJhbWVzICsgJyBiZWZvcmV1bmxvYWQgZXZlbnRzIGFyZSBmaXJlZCBidXQg
ZXhwZWN0ZWQgJyArIG51bWJlck9mRnJhbWVzICsgJyBldmVudHMnOworfQorCitsb2dFcnJvcigp
OworCitmdW5jdGlvbiBmaXJlZChjb250ZW50V2luZG93KSB7CisgICAgbnVtYmVyT2ZCZWZvcmVV
bmxvYWRJblN1YmZyYW1lcysrOworICAgIGlmIChudW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJh
bWVzID09IG51bWJlck9mRnJhbWVzKSB7CisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnUEFTU1xu
JzsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKyAg
ICBlbHNlCisgICAgICAgIGxvZ0Vycm9yKCk7CisgICAgY29udGVudFdpbmRvdy5mcmFtZUVsZW1l
bnQuZmlyZWQgPSB0cnVlOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRo
aXMpIiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwi
PjwvaWZyYW1lPgorPGlmcmFtZSBvbmxvYWQ9InRlc3QodGhpcykiIHNyYz0icmVzb3VyY2VzL2Jl
Zm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9pZnJhbWU+Cis8aWZyYW1lIG9u
bG9hZD0idGVzdCh0aGlzKSIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFt
ZS1jaGlsZC5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRiMjRhZmZhMWU3MjVlYjE4NGJhOTA2ZTM5NjE4MTk3
MWFhYjk4YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhpcyB0
ZXN0cyBiZWZvcmV1bmxvYWQgZXZlbnQgaW4gc3ViZnJhbWVzLiBZb3Ugc2hvdWxkIHNlZSBQQVNT
IGJsb3c6CisKK1BBU1MKKworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEt
LWZyYW1lMC0tPi0tPicKKy0tLS0tLS0tCitDaGlsZCBsb2FkZWQuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWlu
ZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9h
ZC1pbi1zdWJmcmFtZS11bmxvYWQtbWFpbmZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
OTBiMDJhNjY5NzQ3NmU2MzBkNTMyMzJlNTBiOTMyMmM0NDIwMTQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS11bmxv
YWQtbWFpbmZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK0FMRVJUOiBQQVNTOiAx
LzIKK1BBU1M6IDIvMgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3Jl
LXVubG9hZC1pbi1zdWJmcmFtZS11bmxvYWQtbWFpbmZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLXVubG9hZC1tYWluZnJhbWUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NTBjYmQzZmI1OWFlNmEzZTE0YTU0M2MzMjdhMzUwMGFlMzA4NjRlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1p
bi1zdWJmcmFtZS11bmxvYWQtbWFpbmZyYW1lLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
aWZyYW1lKSB7CisgICAgbG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1p
bi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sJzsKK30KKworZnVuY3Rpb24gZmlyZWQoKSB7Cisg
ICAgYWxlcnQoJ0ZBSUwnKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmJlZm9y
ZXVubG9hZD0iYWxlcnQoJ1BBU1M6IDEvMicpOyI+Cis8cD5UaGlzIHRlc3RzIGJlZm9yZXVubG9h
ZCBldmVudCBkb2VzIG5vdCBmaXJlIGluIHN1YmZyYW1lcyB3aGVuIHRoZSBtYWluIGZyYW1lIGlz
IG5hdmlnYXRpbmcgYXdheS48L3A+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCgpIiBzcmM9InJlc291
cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3Jl
LXVubG9hZC1pbi1zdWJmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3Jl
LXVubG9hZC1pbi1zdWJmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MDQzYzk0MTkzODhjMWZiNmJm
NmE4Y2Q2ZmFmNmRlZjUwZGQyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLmh0bWwKQEAgLTAsMCArMSw0MiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyBiZWZvcmV1bmxv
YWQgZXZlbnQgaW4gc3ViZnJhbWVzLiBZb3Ugc2hvdWxkIHNlZSBQQVNTIGJsb3c6PC9wPgorPHBy
ZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2xvZycpOwordmFyIGRvbmUgPSBmYWxzZTsKKworZnVuY3Rpb24gdGVzdCgp
IHsKKyAgICBpZiAoZG9uZSkgeworICAgICAgICAvLyBsb2cncyBub3QgaGF2aW5nIGFueSBjb250
ZW50IGltcGxpZXMgdGhhdCBsb2FkIGV2ZW50IHdhcyBkaXNwYXRjaGVkIGZvciB0aGUgc2Vjb25k
IHRpbWUgYmVmb3JlIGJlZm9yZXVubG9hZCBpcyBkaXNwYXRjaGVkLgorICAgICAgICBpZiAoIWxv
Zy5pbm5lckhUTUwubGVuZ3RoKQorICAgICAgICAgICAgbG9nLmlubmVySFRNTCA9ICdGQUlMOiBi
ZWZvcmV1bmxvYWQgZXZlbnQgd2FzIG5ldmVyIGRpc3BhdGNoZWQuXG4nOworICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRvbmUgPSB0
cnVlOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKVswXS5jb250
ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3Vi
ZnJhbWUtY2hpbGQuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGZpcmVkKCkgeworICAgIGlmICghbG9n
LmlubmVySFRNTC5sZW5ndGgpCisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnUEFTU1xuJzsKKyAg
ICBlbHNlCisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnRkFJTDogYmVmb3JldW5sb2FkIGV2ZW50
IHdhcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBzZWNvbmQgbG9hZCBldmVudC4nCisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KCkiIHNy
Yz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9pZnJh
bWU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hp
bGQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNmJjZTg1NmM3YTBkNzI5ZDJiMjMxYzRhMmQzN2NjMDU0YzY1
Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2Vz
L2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbApAQCAtMCwwICsxLDYgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keSBvbmJlZm9yZXVubG9hZD0idG9wLmZpcmVkKHdp
bmRvdyk7IHJldHVybiBudWxsOyI+CitDaGlsZCBsb2FkZWQuCis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9h
ZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
cmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43YzQwOWNjMjJlZmJlYjk2ZDZmYmU1MzJmODExZTdiMjJlMjVmODg2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxv
YWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CitQQVNTOiAyLzIKKzxzY3JpcHQ+CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2JkZmU5ZjhkYWE2MmUwNWNj
NWNmMTc5ZjE2N2U5MzE2N2E5ZmFkYS4uODI5YzU1YmYwNDQyNjZiNWYwYTdhN2ZiYzY0OTU4NWQ3
ZGJhNThmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBvbmJlZm9yZXVubG9hZCBpcyBicm9rZW4gZm9yIGZyYW1lc2V0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MTgKKworICAgICAgICBGaXhl
ZCB0aGUgYnVnIGJ5IGVuYWJsaW5nIG9uYmVmb3JldW5sb2FkIGV2ZW50cyBmb3IgYWxsIGZyYW1l
cy4KKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1l
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KToKKwog
MjAxMC0xMi0xNyAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
aW5kZXggM2M4MGIyOWRjMDRiYzk2OTE1ZjQwNGFmMDdkOTM0NTFhZTU1OTI1Zi4uY2FkZDM2MjUz
ZGU3N2I2NjNmMWMyMDhlY2I3MWQ2MjBmZjllMjQyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApA
QCAtMjkwMiw4ICsyOTAyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJO
YXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3MKICAgICAvLyAgICAx
KSBOYXZpZ2F0aW9uIHBvbGljeSBkZWxlZ2F0ZSBzYWlkIHdlIGNhbid0IHNvIHJlcXVlc3QgaXMg
bmlsLiBBIHByaW1hcnkgY2FzZSBvZiB0aGlzIAogICAgIC8vICAgICAgIGlzIHRoZSB1c2VyIHJl
c3BvbmRpbmcgQ2FuY2VsIHRvIHRoZSBmb3JtIHJlcG9zdCBuYWcgc2hlZXQuCiAgICAgLy8gICAg
MikgVXNlciByZXNwb25kZWQgQ2FuY2VsIHRvIGFuIGFsZXJ0IHBvcHBlZCB1cCBieSB0aGUgYmVm
b3JlIHVubG9hZCBldmVudCBoYW5kbGVyLgotICAgIC8vIFRoZSAiYmVmb3JlIHVubG9hZCIgZXZl
bnQgaGFuZGxlciBydW5zIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lLgotICAgIGJvb2wgY2FuQ29u
dGludWUgPSBzaG91bGRDb250aW51ZSAmJiAoIWlzTG9hZGluZ01haW5GcmFtZSgpIHx8IHNob3Vs
ZENsb3NlKCkpOworICAgIGJvb2wgY2FuQ29udGludWUgPSBzaG91bGRDb250aW51ZSAmJiBzaG91
bGRDbG9zZSgpOwogCiAgICAgaWYgKCFjYW5Db250aW51ZSkgewogICAgICAgICAvLyBJZiB3ZSB3
ZXJlIHdhaXRpbmcgZm9yIGEgcXVpY2sgcmVkaXJlY3QsIGJ1dCB0aGUgcG9saWN5IGRlbGVnYXRl
IGRlY2lkZWQgdG8gaWdub3JlIGl0LCB0aGVuIHdlIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>77903</attachid>
            <date>2011-01-04 10:42:34 -0800</date>
            <delta_ts>2011-01-04 10:42:34 -0800</delta_ts>
            <desc>test case (zip)</desc>
            <filename>beforeunload-test.zip</filename>
            <type>application/octet-stream</type>
            <size>771</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">UEsDBBQAAAAIAPdNJD69FrNRpQAAAAQBAAALAAAAcGFyZW50Lmh0bWyFj7EOwjAMRHck/sFkKSyt
YG2aBZhh6MLoNg6NlCZVkg78PQkFCSYkS7bk5zsf35wux/Z2PcMQRyPWK/7pnZMPcLYj5TzN1jiU
DUNDPm6LCT3ZWOxqT3H2FhSaQDXLZ5NoBx0gFUKkEMEp+NYogSMMnlTDZFpri1E7W2ZXJu6OVyh4
NWUlrTyOBMH3DesHbeQCgU5/qD1L2EL8ZQ+/bJWTvYZ31CdQSwMEFAAAAAgA71IkPvMkSX/vAAAA
bwEAAAoAAABjaGlsZC5odG1sbVCxbsQgDJ0vUv7BzZJElUBdeyRLe3M73NKRCyYgERwRoqiq+u+F
y/XUociSMe+Z92zx8Pr2cv54P4GJk+vLQtwzSpXzMgQ7x3QrC736IVryEHGJTQtfZXGQDkNs6sFY
p6B+3KxXtDEd5IQnhxP6yKxqj4lpNTT/w9B1UOunuk2sQ6SZORpkFmImoIYEmhjnZ863dNhINDpk
A028zv8GjGvwoKVbMNXf2angd9uC/05yIfUJ5C+oKeDqHUnVVbfufaJjlXlzfzZ2gRTy+g6k4W8T
AyEhO+sqlWDrb17T4qp+JMFlL/h8lc6Su4d9qz9QSwMEFAAAAAgAQk0kPpMfqgcrAAAAPwAAABAA
AABkZXN0aW5hdGlvbi5odG1ss1F08XcOiQxwVcgoyc2x4+WygdFJ+SmVILrAzjUvxUa/AMTWhwnq
Q1UBAFBLAQIUABQAAAAIAPdNJD69FrNRpQAAAAQBAAALAAAAAAAAAAEAIAAAAAAAAABwYXJlbnQu
aHRtbFBLAQIUABQAAAAIAO9SJD7zJEl/7wAAAG8BAAAKAAAAAAAAAAEAIAAAAM4AAABjaGlsZC5o
dG1sUEsBAhQAFAAAAAgAQk0kPpMfqgcrAAAAPwAAABAAAAAAAAAAAQAgAAAA5QEAAGRlc3RpbmF0
aW9uLmh0bWxQSwUGAAAAAAMAAwCvAAAAPgIAAAAA
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77955</attachid>
            <date>2011-01-04 17:53:20 -0800</date>
            <delta_ts>2011-01-05 19:34:29 -0800</delta_ts>
            <desc>fixes the bug</desc>
            <filename>bug-19418-20110104175319.patch</filename>
            <type>text/plain</type>
            <size>24434</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTAzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTEtMDEtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgb25i
ZWZvcmV1bmxvYWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAgICAgICAgQWRkZWQgYmVmb3Jl
dW5sb2FkIGV2ZW50IHN1cHBvcnQgZm9yIHN1YiBmcmFtZXMuIFdlYktpdCdzIGltcGxlbWVudGF0
aW9uIHRyaWVzIHRvIG1hdGNoCisgICAgICAgIHRoYXQgb2YgSW50ZXJuZXQgRXhwbG9yZXIgYXMg
bXVjaCBhcyBwb3NzaWJsZS4gYmVmb3JldW5sb2FkIGV2ZW50IGlzIGZpcmVkIGZvciBlYWNoIGFu
ZAorICAgICAgICBldmVyeSBkZXNjZW5kZW50IG9mIGEgZnJhbWUgdGhhdCBpcyBhYm91dCB0byBu
YXZpZ2F0ZS4KKworICAgICAgICBXaGVuIGEgdmFsdWUgb3RoZXIgdGhhbiBudWxsIGlzIHJldHVy
bmVkIGJ5IGEgYmVmb3JldW5sb2FkIGhhbmRsZXIsIGEgY29uZmlybWF0aW9uIGRpYWxvZworICAg
ICAgICBpcyBzaG93biBmb3IgZWFjaCBoYW5kbGVyIChjYWxscyBjaHJvbWUncyBydW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWwpIGp1c3QgbGlrZSBpdCBpcyBkb25lCisgICAgICAgIGZvciBtYWlu
IGZyYW1lcy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgbmF2aWdhdGlvbiBpcyBmb3JiaWRkZW4g
d2hpbGUgYmVmb3JldW5sb2FkIGhhbmRsZXJzIGFyZSBiZWluZyBjYWxsZWQuCisgICAgICAgIFNl
dHRpbmcgdmFsdWVzIHRvIGxvY2F0aW9uLmhyZWYsIGxvY2F0aW9uLnJlbG9hZCwgYW5kIG90aGVy
IG1lYW5zIG9mIG5hdmlnYXRpb25zIGFyZSB0aHVzCisgICAgICAgIGlnbm9yZWQgd2hpbGUgYmVm
b3JldW5sb2FkIGV2ZW50IGhhbmRsZXIgaXMgYmVpbmcgcmFuLCBtYXRjaGluZyBJbnRlcm5ldCBF
eHBsb3JlcidzIGJlaGF2aW9yLgorCisgICAgICAgIEJlY2F1c2UgbmF2aWdhdGlvbiBuZWVkcyB0
byBwcmV2ZW50ZWQgYXQgcGFnZSBsZXZlbCwgUGFnZTo6bmF2aWdhdGlvbkVuYWJsZWQgd2FzIGFk
ZGVkCisgICAgICAgIGFsb25nIHdpdGggUGFnZTo6c2V0TmF2aWdhdGlvbkVuYWJsZWQuIFRoZSB2
YWx1ZSBvZiBuYXZpZ2F0aW9uRW5hYmxlZCBpcyBjaGVja2VkIGluCisgICAgICAgIE5hdmlnYXRp
b25TY2hlZHVsZXIgdG8gZm9yYmlkIHNjaGVkdWxpbmcgbmF2aWdhdGlvbnMgd2hpbGUgd2UncmUg
aW4gRnJhbWVMb2FkZXI6OnNob3VsZENsb3NlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50
cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmln
YXRpb24uaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRo
LXN1YmZyYW1lcy5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZENsb3NlKTogQ2FsbHMgZmlyZUJlZm9y
ZVVubG9hZEV2ZW50IG9uIGVhY2ggZGVzY2VuZGVudCBmcmFtZS4KKyAgICAgICAgUmV0dXJucyB0
cnVlIG9ubHkgaWYgZXZlcnkgY2FsbCB0byBmaXJlQmVmb3JlVW5sb2FkRXZlbnQgcmV0dXJuZWQg
dHJ1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpmaXJlQmVmb3JlVW5sb2FkRXZl
bnQpOiBGaXJlcyBhIGJlZm9yZXVubG9hZCBldmVudCBmb3IgdGhlIGdpdmVuIGZyYW1lCisgICAg
ICAgIGFuZCBjYWxscyBjaHJvbWUncyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwgYXMgbmVl
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2
aWdhdGlvblBvbGljeSk6IEludm9rZXMgc2hvdWxkQ2xvc2UoKSBmb3IgYWxsIGZyYW1lcy4KKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlv
blNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpz
Y2hlZHVsZVJlZGlyZWN0KTogQ2hlY2tzIHBhZ2UncyBuYXZpZ2F0aW9uRW5hYmxlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxl
UmVmcmVzaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvblNjaGVkdWxlcjo6
c2NoZWR1bGVIaXN0b3J5TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAqIHBhZ2UvUGFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAgICAgICAgKiBwYWdlL1BhZ2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldE5hdmlnYXRpb25FbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6Om5hdmlnYXRpb25FbmFibGVkKToKKwogMjAxMS0wMS0wNCAgVy4g
SmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNp
b24gNzQ5NzIpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4NTQsMTkgKzI4NTQsNDEgQEAgYm9vbCBGcmFtZUxvYWRlcjo6c2hvdWxkQ2xvc2Uo
KQogICAgIGlmICghY2hyb21lIHx8ICFjaHJvbWUtPmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIERPTVdpbmRvdyogZG9tV2luZG93
ID0gbV9mcmFtZS0+ZXhpc3RpbmdET01XaW5kb3coKTsKKyAgICAvLyBTdG9yZSBhbGwgcmVmZXJl
bmNlcyB0byBlYWNoIHN1YmZyYW1lIGluIGFkdmFuY2Ugc2luY2UgYmVmb3JldW5sb2FkJ3MgZXZl
bnQgaGFuZGxlciBtYXkgbW9kaWZ5IGZyYW1lCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBk
ZXNjZW5kZW50RnJhbWVzOworICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgp
LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPnRyYXZlcnNlTmV4
dChtX2ZyYW1lKSkKKyAgICAgICAgZGVzY2VuZGVudEZyYW1lcy5hcHBlbmQoY2hpbGQpOworCisg
ICAgcGFnZS0+c2V0TmF2aWdhdGlvbkVuYWJsZWQoZmFsc2UpOworCisgICAgYm9vbCBzaG91bGRD
bG9zZSA9IGZhbHNlOworICAgIGlmIChmaXJlQmVmb3JlVW5sb2FkRXZlbnQoY2hyb21lLCBtX2Zy
YW1lKSkgeworICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgZGVzY2Vu
ZGVudEZyYW1lcy5zaXplKCkgJiYgZmlyZUJlZm9yZVVubG9hZEV2ZW50KGNocm9tZSwgZGVzY2Vu
ZGVudEZyYW1lc1tpXS5nZXQoKSkpCisgICAgICAgICAgICBpKys7CisgICAgICAgIGlmIChpID09
IGRlc2NlbmRlbnRGcmFtZXMuc2l6ZSgpKQorICAgICAgICAgICAgc2hvdWxkQ2xvc2UgPSB0cnVl
OworICAgIH0KKworICAgIHBhZ2UtPnNldE5hdmlnYXRpb25FbmFibGVkKHRydWUpOworCisgICAg
cmV0dXJuIHNob3VsZENsb3NlOworfQorCitib29sIEZyYW1lTG9hZGVyOjpmaXJlQmVmb3JlVW5s
b2FkRXZlbnQoQ2hyb21lKiBjaHJvbWUsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBET01XaW5kb3cq
IGRvbVdpbmRvdyA9IGZyYW1lLT5leGlzdGluZ0RPTVdpbmRvdygpOwogICAgIGlmICghZG9tV2lu
ZG93KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1l
bnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIEhUTUxFbGVtZW50KiBib2R5ID0gZG9jdW1l
bnQtPmJvZHkoKTsKLSAgICBpZiAoIWJvZHkpCisgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQtPmJvZHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBSZWZQdHI8QmVmb3JlVW5sb2FkRXZlbnQ+IGJlZm9yZVVu
bG9hZEV2ZW50ID0gQmVmb3JlVW5sb2FkRXZlbnQ6OmNyZWF0ZSgpOwotICAgIG1fcGFnZURpc21p
c3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKKyAgICBmcmFtZS0+bG9hZGVyKCktPm1f
cGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKICAgICBkb21XaW5kb3ct
PmRpc3BhdGNoRXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQuZ2V0KCksIGRvbVdpbmRvdy0+ZG9jdW1l
bnQoKSk7Ci0gICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSBmYWxzZTsK
KyAgICBmcmFtZS0+bG9hZGVyKCktPm1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVk
ID0gZmFsc2U7CiAKICAgICBpZiAoIWJlZm9yZVVubG9hZEV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCkpCiAgICAgICAgIGRvY3VtZW50LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGJlZm9yZVVubG9hZEV2
ZW50LmdldCgpKTsKQEAgLTI4NzQsNyArMjg5Niw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3Vs
ZENsb3NlKCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBTdHJpbmcgdGV4dCA9IGRvY3Vt
ZW50LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGJlZm9yZVVubG9hZEV2ZW50LT5y
ZXN1bHQoKSk7Ci0gICAgcmV0dXJuIGNocm9tZS0+cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KHRleHQsIG1fZnJhbWUpOworICAgIHJldHVybiBjaHJvbWUtPnJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbCh0ZXh0LCBmcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9h
ZEFmdGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRy
PEZvcm1TdGF0ZT4gZm9ybVN0YXRlLCBib29sIHNob3VsZENvbnRpbnVlKQpAQCAtMjg5MCw4ICsy
OTEyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZwogICAgIC8v
ICAgIDEpIE5hdmlnYXRpb24gcG9saWN5IGRlbGVnYXRlIHNhaWQgd2UgY2FuJ3Qgc28gcmVxdWVz
dCBpcyBuaWwuIEEgcHJpbWFyeSBjYXNlIG9mIHRoaXMgCiAgICAgLy8gICAgICAgaXMgdGhlIHVz
ZXIgcmVzcG9uZGluZyBDYW5jZWwgdG8gdGhlIGZvcm0gcmVwb3N0IG5hZyBzaGVldC4KICAgICAv
LyAgICAyKSBVc2VyIHJlc3BvbmRlZCBDYW5jZWwgdG8gYW4gYWxlcnQgcG9wcGVkIHVwIGJ5IHRo
ZSBiZWZvcmUgdW5sb2FkIGV2ZW50IGhhbmRsZXIuCi0gICAgLy8gVGhlICJiZWZvcmUgdW5sb2Fk
IiBldmVudCBoYW5kbGVyIHJ1bnMgb25seSBmb3IgdGhlIG1haW4gZnJhbWUuCi0gICAgYm9vbCBj
YW5Db250aW51ZSA9IHNob3VsZENvbnRpbnVlICYmICghaXNMb2FkaW5nTWFpbkZyYW1lKCkgfHwg
c2hvdWxkQ2xvc2UoKSk7CisgICAgYm9vbCBjYW5Db250aW51ZSA9IHNob3VsZENvbnRpbnVlICYm
IHNob3VsZENsb3NlKCk7CiAKICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7CiAgICAgICAgIC8vIElm
IHdlIHdlcmUgd2FpdGluZyBmb3IgYSBxdWljayByZWRpcmVjdCwgYnV0IHRoZSBwb2xpY3kgZGVs
ZWdhdGUgZGVjaWRlZCB0byBpZ25vcmUgaXQsIHRoZW4gd2UgCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmgJKHJldmlzaW9uIDc0OTcyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTsKIGNsYXNzIENhY2hlZEZyYW1lQmFzZTsKIGNsYXNzIENhY2hlZFBhZ2U7CiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZTsKK2NsYXNzIENocm9tZTsKIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKIGNsYXNz
IERvY3VtZW50OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CkBAIC0zNjEsNiArMzYyLDggQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgdm9pZCBjYWxsQ29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9s
aWN5KHZvaWQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4s
IGJvb2wgc2hvdWxkQ29udGludWUpOwogICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUxvYWRB
ZnRlck5ld1dpbmRvd1BvbGljeSh2b2lkKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgTmF2aWdhdGlv
bkFjdGlvbiYsIGJvb2wgc2hvdWxkQ29udGludWUpOwogICAgIHN0YXRpYyB2b2lkIGNhbGxDb250
aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHZvaWQqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGJvb2wgc2hvdWxkQ29udGludWUp
OworICAgIAorICAgIHN0YXRpYyBib29sIGZpcmVCZWZvcmVVbmxvYWRFdmVudChDaHJvbWUqLCBG
cmFtZSopOwogCiAgICAgdm9pZCBjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3koY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBib29sIHNob3VsZENv
bnRpbnVlKTsKICAgICB2b2lkIGNvbnRpbnVlTG9hZEFmdGVyTmV3V2luZG93UG9saWN5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiBm
cmFtZU5hbWUsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBib29sIHNob3VsZENvbnRpbnVlKTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCShyZXZpc2lvbiA3NDk3
MikKKysrIFdlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpjbGVhcigp
CiAKIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVSZWRpcmVjdChkb3VibGUgZGVs
YXksIGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAg
IGlmICghbV9mcmFtZS0+cGFnZSgpIHx8ICghcHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSAmJiAh
bV9mcmFtZS0+cGFnZSgpLT5uYXZpZ2F0aW9uRW5hYmxlZCgpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChkZWxheSA8IDAgfHwgZGVsYXkgPiBJTlRfTUFYIC8gMTAwMCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgTmF2aWdhdGlvblNjaGVkdWxlcjo6bXVzdExv
Y2tCYWNrRm8KIAogdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hh
bmdlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBs
b2NrQmFja0ZvcndhcmRMaXN0KQogewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgIGlm
ICghbV9mcmFtZS0+cGFnZSgpIHx8ICghcHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSAmJiAhbV9m
cmFtZS0+cGFnZSgpLT5uYXZpZ2F0aW9uRW5hYmxlZCgpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0zNDQsNyArMzQ0LDcgQEAg
dm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZUZvcm1TdQogCiB2b2lkIE5hdmlnYXRp
b25TY2hlZHVsZXI6OnNjaGVkdWxlUmVmcmVzaCgpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5wYWdl
KCkpCisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+bmF2aWdh
dGlvbkVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGNvbnN0IEtVUkwmIHVybCA9IG1f
ZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKQEAgLTM1NSw3
ICszNTUsNyBAQCB2b2lkIE5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlUmVmcmVzCiAKIHZv
aWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVIaXN0b3J5TmF2aWdhdGlvbihpbnQgc3Rl
cHMpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCisgICAgaWYgKCFtX2ZyYW1lLT5wYWdl
KCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+bmF2aWdhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gSW52YWxpZCBoaXN0b3J5IG5hdmlnYXRpb25zIChzdWNoIGFzIGhpc3Rv
cnkuZm9yd2FyZCgpIGR1cmluZyBhIG5ldyBsb2FkKSBoYXZlIHRoZSBzaWRlIGVmZmVjdCBvZiBj
YW5jZWxsaW5nIGFueSBzY2hlZHVsZWQKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDc0OTcyKQorKysgV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDcgQEAgUGFn
ZTo6UGFnZShjb25zdCBQYWdlQ2xpZW50cyYgcGFnZUNsaWVudAogICAgICwgbV9vcGVuZWRCeURP
TShmYWxzZSkKICAgICAsIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKHRydWUpCiAgICAg
LCBtX2RlZmVyc0xvYWRpbmcoZmFsc2UpCisgICAgLCBtX25hdmlnYXRpb25FbmFibGVkKHRydWUp
CiAgICAgLCBtX2luTG93UXVhbGl0eUludGVycG9sYXRpb25Nb2RlKGZhbHNlKQogICAgICwgbV9j
b29raWVFbmFibGVkKHRydWUpCiAgICAgLCBtX2FyZU1lbW9yeUNhY2hlQ2xpZW50Q2FsbHNFbmFi
bGVkKHRydWUpCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDc0OTcyKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogICAgICAgICBib29sIGRlZmVy
c0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyc0xvYWRpbmc7IH0KLSAgICAgICAgCisK
KyAgICAgICAgdm9pZCBzZXROYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9uYXZp
Z2F0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICAgICAgYm9vbCBuYXZpZ2F0aW9uRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdGlvbkVuYWJsZWQ7IH0KKwogICAgICAgICB2b2lk
IGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CiAKICAgICAgICAgYm9vbCBpbkxvd1F1YWxpdHlJ
bWFnZUludGVycG9sYXRpb25Nb2RlKCkgY29uc3Q7CkBAIC0zNDMsNiArMzQ2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHM7CiAgICAgICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOworICAgICAgICBib29sIG1fbmF2aWdh
dGlvbkVuYWJsZWQ7CiAKICAgICAgICAgYm9vbCBtX2luTG93UXVhbGl0eUludGVycG9sYXRpb25N
b2RlOwogICAgICAgICBib29sIG1fY29va2llRW5hYmxlZDsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1
MDMwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjggQEAKKzIwMTEtMDEtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgb25iZWZvcmV1bmxv
YWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAgICAgICAgQWRkZWQgdGVzdHMgdG8gZW5zdXJl
IFdlYktpdCBmaXJlcyBiZWZvcmV1bmxvYWQgZXZlbnRzIGZvciBzdWIgZnJhbWVzLAorICAgICAg
ICBhbmQgZGlzYWxsb3dzIG5hdmlnYXRpb24gd2hpbGUgYmVmb3JldW5sb2FkIGV2ZW50IGhhbmRs
ZXJzIGFyZSBiZWluZyBjYWxsZWQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5s
b2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLW11bHRpcGxlLXN1YmZy
YW1lcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11
bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0
aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVu
bG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4t
c3ViZnJhbWUtY2hpbGQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3Vy
Y2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUt
ZmFpbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3Jl
LXVubG9hZC13aXRoLXN1YmZyYW1lcy1wYXJlbnQuaHRtbDogQWRkZWQuCisKIDIwMTEtMDEtMDQg
IEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHRlc3QgZXhwZWN0YXRpb24gdXBkYXRlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2
aWdhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitUaGlzIHRlc3QgZW5zdXJlcyBuYXZpZ2F0aW9uIGlz
IGZvcmJpZGRlbiB3aGlsZSBiZWZvcmV1bmxvYWQgZXZlbnQgaXMgYmVpbmcgZmlyZWQuIFlvdSBz
aG91bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBibG93OgorCitQQVNTIDEvMgorCisKKy0t
LS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0t
LS0KK1BBU1M6IDIvMgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9h
ZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtZm9yYmlkZGVuLW5hdmlnYXRpb24uaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtZm9yYmlkZGVu
LW5hdmlnYXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0IGVuc3VyZXMgbmF2aWdhdGlvbiBp
cyBmb3JiaWRkZW4gd2hpbGUgYmVmb3JldW5sb2FkIGV2ZW50IGlzIGJlaW5nIGZpcmVkLiBZb3Ug
c2hvdWxkIHNlZSBQQVNTIDEvMiBhbmQgUEFTUyAyLzIgYmxvdzo8L3A+Cis8cHJlIGlkPSJsb2ci
PkZBSUw8L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2xvZycpOworCitmdW5jdGlvbiB0ZXN0KGlmcmFtZSkgeworICAgIGlmIChpZnJhbWUu
ZG9uZSkgeworICAgICAgICBpZiAoaWZyYW1lLmhhbGZQYXNzZWQpIHsKKyAgICAgICAgICAgIGlm
cmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxv
YWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbCc7ICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZnJhbWUuaGFsZlBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWZyYW1lLmRvbmUgPSB0cnVlOworICAgIGlmcmFtZS5jb250ZW50V2luZG93
LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hp
bGQuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGZpcmVkKGNvbnRlbnRXaW5kb3cpIHsKKyAgICBsb2Nh
dGlvbi5ocmVmID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWZhaWwuaHRt
bCc7CisgICAgY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNlcy9iZWZvcmUt
dW5sb2FkLWluLXN1YmZyYW1lLWZhaWwuaHRtbCc7CisgICAgbG9nLmlubmVySFRNTCA9ICdQQVNT
IDEvMic7CisgICAgY29udGVudFdpbmRvdy5mcmFtZUVsZW1lbnQuaGFsZlBhc3NlZCA9IHRydWU7
Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRlc3QodGhpcyk7IiBzcmM9InJlc291
cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9h
ZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9y
ZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3RzIGJlZm9yZXVubG9hZCBldmVudCBpbiBtdWx0aXBs
ZSBzdWJmcmFtZXMuIFlvdSBzaG91bGQgc2VlIFBBU1MgYmxvdzoKKworUEFTUworICAKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJh
bWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVu
bG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxwPlRoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50IGluIG11bHRpcGxlIHN1YmZy
YW1lcy4gWW91IHNob3VsZCBzZWUgUEFTUyBibG93OjwvcD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+
Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdsb2cnKTsKKworZnVuY3Rpb24gdGVzdChpZnJhbWUpIHsKKyAgICBpZiAoaWZyYW1lLmRvbmUp
CisgICAgICAgIHJldHVybjsKKyAgICBpZnJhbWUuZG9uZSA9IHRydWU7CisgICAgaWZyYW1lLmNv
bnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1z
dWJmcmFtZS1jaGlsZC5odG1sJzsKK30KKwordmFyIG51bWJlck9mQmVmb3JlVW5sb2FkSW5TdWJm
cmFtZXMgPSAwOwordmFyIG51bWJlck9mRnJhbWVzID0gMzsKKworZnVuY3Rpb24gbG9nRXJyb3Io
KSB7CisgICAgbG9nLmlubmVySFRNTCA9ICdGQUlMOiAnICsgbnVtYmVyT2ZCZWZvcmVVbmxvYWRJ
blN1YmZyYW1lcyArICcgYmVmb3JldW5sb2FkIGV2ZW50cyBhcmUgZmlyZWQgYnV0IGV4cGVjdGVk
ICcgKyBudW1iZXJPZkZyYW1lcyArICcgZXZlbnRzJzsKK30KKworbG9nRXJyb3IoKTsKKworZnVu
Y3Rpb24gZmlyZWQoY29udGVudFdpbmRvdykgeworICAgIG51bWJlck9mQmVmb3JlVW5sb2FkSW5T
dWJmcmFtZXMrKzsKKyAgICBpZiAobnVtYmVyT2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcyA9PSBu
dW1iZXJPZkZyYW1lcykgeworICAgICAgICBsb2cuaW5uZXJIVE1MID0gJ1BBU1Ncbic7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisgICAgZWxzZQor
ICAgICAgICBsb2dFcnJvcigpOworICAgIGNvbnRlbnRXaW5kb3cuZnJhbWVFbGVtZW50LmZpcmVk
ID0gdHJ1ZTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCh0aGlzKSIgc3Jj
PSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sIj48L2lmcmFt
ZT4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRoaXMpIiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPGlmcmFtZSBvbmxvYWQ9InRl
c3QodGhpcykiIHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQu
aHRtbCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkgQEAKK1RoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50IGluIHN1YmZyYW1lcy4gWW91IHNo
b3VsZCBzZWUgUEFTUyBibG93OgorCitQQVNTCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZy
YW1lUGF0aCAvLzwhLS1mcmFtZTAtLT4tLT4nCistLS0tLS0tLQorQ2hpbGQgbG9hZGVkLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4t
c3ViZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Jl
Zm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyBiZWZvcmV1
bmxvYWQgZXZlbnQgaW4gc3ViZnJhbWVzLiBZb3Ugc2hvdWxkIHNlZSBQQVNTIGJsb3c6PC9wPgor
PHByZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xvZycpOwordmFyIGRvbmUgPSBmYWxzZTsKKworZnVuY3Rpb24gdGVz
dCgpIHsKKyAgICBpZiAoZG9uZSkgeworICAgICAgICAvLyBsb2cncyBub3QgaGF2aW5nIGFueSBj
b250ZW50IGltcGxpZXMgdGhhdCBsb2FkIGV2ZW50IHdhcyBkaXNwYXRjaGVkIGZvciB0aGUgc2Vj
b25kIHRpbWUgYmVmb3JlIGJlZm9yZXVubG9hZCBpcyBkaXNwYXRjaGVkLgorICAgICAgICBpZiAo
IWxvZy5pbm5lckhUTUwubGVuZ3RoKQorICAgICAgICAgICAgbG9nLmlubmVySFRNTCA9ICdGQUlM
OiBiZWZvcmV1bmxvYWQgZXZlbnQgd2FzIG5ldmVyIGRpc3BhdGNoZWQuXG4nOworICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRvbmUg
PSB0cnVlOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKVswXS5j
b250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4t
c3ViZnJhbWUtY2hpbGQuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGZpcmVkKCkgeworICAgIGlmICgh
bG9nLmlubmVySFRNTC5sZW5ndGgpCisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnUEFTU1xuJzsK
KyAgICBlbHNlCisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnRkFJTDogYmVmb3JldW5sb2FkIGV2
ZW50IHdhcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBzZWNvbmQgbG9hZCBldmVudC4nCisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KCki
IHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9p
ZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9i
ZWZvcmUtdW5sb2FkLWphdmFzY3JpcHQtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5h
dmlnYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHNldHRpbmcgbG9j
YXRpb24uaHJlZiB3aXRoIGphdmFzY3JpcHQgc2NoZW1lIHByb3Blcmx5IGV4ZWN1dGVzIHRoZSBz
Y3JpcHQgZXZlbiB3aGlsZSBiZWZvcmV1bmxvYWQgZXZlbnQgaXMgYmVpbmcgZmlyZWQuIFlvdSBz
aG91bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBibG93OgorCitQQVNTCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0aW9u
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9h
ZC1qYXZhc2NyaXB0LW5hdmlnYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0aW9uLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9k
eT4KKzxwPlRoaXMgdGVzdCBlbnN1cmVzIHNldHRpbmcgbG9jYXRpb24uaHJlZiB3aXRoIGphdmFz
Y3JpcHQgc2NoZW1lICBwcm9wZXJseSBleGVjdXRlcyB0aGUgc2NyaXB0IGV2ZW4gd2hpbGUgYmVm
b3JldW5sb2FkIGV2ZW50IGlzIGJlaW5nIGZpcmVkLiBZb3Ugc2hvdWxkIHNlZSBQQVNTIDEvMiBh
bmQgUEFTUyAyLzIgYmxvdzo8L3A+Cis8cHJlIGlkPSJsb2ciPkZBSUw8L3ByZT4KKzxzY3JpcHQ+
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworfQorCit2YXIgbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOwor
CitmdW5jdGlvbiB0ZXN0KGlmcmFtZSkgeworICAgIGlmIChpZnJhbWUuZG9uZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmcmFtZS5kb25lID0gdHJ1ZTsKKyAgICBpZnJhbWUuY29udGVudFdpbmRv
dy5sb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNo
aWxkLmh0bWwnOworfQorCitmdW5jdGlvbiBkb25lKCkgeworICAgIGxvZy5pbm5lckhUTUwgPSAn
UEFTUyc7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5j
dGlvbiBmaXJlZChjb250ZW50V2luZG93KSB7CisgICAgbG9jYXRpb24uaHJlZiA9ICdqYXZhc2Ny
aXB0OnRvcC5kb25lKCknOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRo
aXMpOyIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1s
Ij48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVm
b3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOSBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgYmVmb3JldW5sb2FkIGV2ZW50IGZpcmVzIGlu
IGFsbCBzdWJmcmFtZXMgd2hlbiBhIHBhcmVudCBmcmFtZSBpcyBuYXZpZ2F0ZWQuIFlvdSBzaG91
bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBibG93OgorCitQQVNTIDEvMgorCisKKy0tLS0t
LS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0K
K1BBU1M6IDIvMgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13
aXRoLXN1YmZyYW1lcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5
PgorPHA+VGhpcyB0ZXN0IGVuc3VyZXMgYmVmb3JldW5sb2FkIGV2ZW50IGZpcmVzIGluIGFsbCBz
dWJmcmFtZXMgd2hlbiBhIHBhcmVudCBmcmFtZSBpcyBuYXZpZ2F0ZWQuIFlvdSBzaG91bGQgc2Vl
IFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBibG93OjwvcD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+Cis8
c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBDaGlsZEZyYW1lc0FzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKK30KKwordmFyIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKTsK
K3ZhciBudW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJhbWVzID0gMDsKK3ZhciBudW1iZXJPZkZy
YW1lcyA9IDM7CisKK2Z1bmN0aW9uIHRlc3QoaWZyYW1lKSB7CisgICAgaWYgKGlmcmFtZS5kb25l
KSB7CisgICAgICAgIGlmIChudW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJhbWVzID09IG51bWJl
ck9mRnJhbWVzKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmcmFtZS5kb25lID0gdHJ1ZTsKKyAgICBp
ZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWwnOworfQorCitmdW5jdGlvbiBsb2dFcnJv
cigpIHsKKyAgICBsb2cuaW5uZXJIVE1MID0gJ0ZBSUw6ICcgKyBudW1iZXJPZkJlZm9yZVVubG9h
ZEluU3ViZnJhbWVzICsgJyBiZWZvcmV1bmxvYWQgZXZlbnRzIGFyZSBmaXJlZCBidXQgZXhwZWN0
ZWQgJyArIG51bWJlck9mRnJhbWVzICsgJyBldmVudHMnOworfQorCitsb2dFcnJvcigpOworCitm
dW5jdGlvbiBmaXJlZChjb250ZW50V2luZG93KSB7CisgICAgbnVtYmVyT2ZCZWZvcmVVbmxvYWRJ
blN1YmZyYW1lcysrOworICAgIGlmIChudW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJhbWVzID09
IG51bWJlck9mRnJhbWVzKQorICAgICAgICBsb2cuaW5uZXJIVE1MID0gJ1BBU1MgMS8yXG4nOwor
ICAgIGVsc2UKKyAgICAgICAgbG9nRXJyb3IoKTsKKyAgICBjb250ZW50V2luZG93LmZyYW1lRWxl
bWVudC5maXJlZCA9IHRydWU7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRlc3Qo
dGhpcykiIHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMtcGFyZW50
Lmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVu
bG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
Kzxib2R5IG9uYmVmb3JldW5sb2FkPSJ0b3AuZmlyZWQod2luZG93KTsgcmV0dXJuIG51bGw7Ij4K
K0NoaWxkIGxvYWRlZC4KKzxzY3JpcHQ+CisKK2lmICh0b3AubG9hZGVkKQorICAgIHRvcC5sb2Fk
ZWQoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlv
bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9i
ZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJm
cmFtZS1kZXN0aW5hdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CitQQVNTOiAyLzIKKzxzY3JpcHQ+CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWZhaWwu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVm
b3JlLXVubG9hZC1pbi1zdWJmcmFtZS1mYWlsLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1mYWls
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8Ym9keT4KK0ZBSUwKKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291
cmNlcy9iZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLXBhcmVudC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLXdpdGgt
c3ViZnJhbWVzLXBhcmVudC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMtcGFyZW50Lmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxi
b2R5PgorPGlmcmFtZSBzcmM9ImJlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+
PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0iYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5o
dG1sIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSJiZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNo
aWxkLmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78089</attachid>
            <date>2011-01-05 19:34:34 -0800</date>
            <delta_ts>2011-01-06 10:46:42 -0800</delta_ts>
            <desc>Updated per Adam&apos;s comment</desc>
            <filename>bug-19418-20110105193433.patch</filename>
            <type>text/plain</type>
            <size>23983</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTEyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTEtMDEtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgb25i
ZWZvcmV1bmxvYWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAgICAgICAgQWRkZWQgYmVmb3Jl
dW5sb2FkIGV2ZW50IHN1cHBvcnQgZm9yIHN1YiBmcmFtZXMuIFdlYktpdCdzIGltcGxlbWVudGF0
aW9uIHRyaWVzIHRvIG1hdGNoCisgICAgICAgIHRoYXQgb2YgSW50ZXJuZXQgRXhwbG9yZXIgYXMg
bXVjaCBhcyBwb3NzaWJsZS4gYmVmb3JldW5sb2FkIGV2ZW50IGlzIGZpcmVkIGZvciBlYWNoIGFu
ZAorICAgICAgICBldmVyeSBkZXNjZW5kZW50IG9mIGEgZnJhbWUgdGhhdCBpcyBhYm91dCB0byBu
YXZpZ2F0ZS4KKworICAgICAgICBXaGVuIGEgdmFsdWUgb3RoZXIgdGhhbiBudWxsIGlzIHJldHVy
bmVkIGJ5IGEgYmVmb3JldW5sb2FkIGhhbmRsZXIsIGEgY29uZmlybWF0aW9uIGRpYWxvZworICAg
ICAgICBpcyBzaG93biBmb3IgZWFjaCBoYW5kbGVyIChjYWxscyBjaHJvbWUncyBydW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWwpIGp1c3QgbGlrZSBpdCBpcyBkb25lCisgICAgICAgIGZvciBtYWlu
IGZyYW1lcy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgbmF2aWdhdGlvbiBpcyBmb3JiaWRkZW4g
d2hpbGUgYmVmb3JldW5sb2FkIGhhbmRsZXJzIGFyZSBiZWluZyBjYWxsZWQuCisgICAgICAgIFNl
dHRpbmcgdmFsdWVzIHRvIGxvY2F0aW9uLmhyZWYsIGxvY2F0aW9uLnJlbG9hZCwgYW5kIG90aGVy
IG1lYW5zIG9mIG5hdmlnYXRpb25zIGFyZSB0aHVzCisgICAgICAgIGlnbm9yZWQgd2hpbGUgYmVm
b3JldW5sb2FkIGV2ZW50IGhhbmRsZXIgaXMgYmVpbmcgcmFuLCBtYXRjaGluZyBJbnRlcm5ldCBF
eHBsb3JlcidzIGJlaGF2aW9yLgorCisgICAgICAgIEJlY2F1c2UgbmF2aWdhdGlvbiBuZWVkcyB0
byBwcmV2ZW50ZWQgZ2xvYmFsbHksIERpc2FsbG93TmF2aWdhdGlvbkluQmVmb3JlVW5sb2FkIGlz
IGFkZGVkIHRvCisgICAgICAgIE5hdmlnYXRpb25TY2hlZHVsZXIuaCwgd2hpY2ggaXMgaW5zdGFu
dGlhdGVkIGFzIGEgUkFJSSBvYmplY3QgaW4gRnJhbWVMb2FkZXI6OnNob3VsZENsb3NlLgorCisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpzaG91bGRDbG9zZSk6IENhbGxzIGZpcmVCZWZvcmVVbmxvYWRFdmVudCBvbiBtX2Zy
YW1lIGFuZCBtX2ZyYW1lJ3MKKyAgICAgICAgZGVzY2VuZGVudHMuIFJldHVybnMgdHJ1ZSBvbmx5
IGlmIGV2ZXJ5IGNhbGwgdG8gZmlyZUJlZm9yZVVubG9hZEV2ZW50IHJldHVybmVkIHRydWUuCisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZmlyZUJlZm9yZVVubG9hZEV2ZW50KTogRmly
ZXMgYSBiZWZvcmV1bmxvYWQgZXZlbnQgYW5kIGNhbGxzCisgICAgICAgIGNocm9tZSdzIHJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbCBhcyBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzaG91bGRTY2hl
ZHVsZU5hdmlnYXRpb24pOiBDaGVja3MgdGhlIG51bGxpdHkgb2YgUGFnZSBhbmQgY2FsbHMKKyAg
ICAgICAgRGlzYWxsb3dOYXZpZ2F0aW9uSW5CZWZvcmVVbmxvYWQ6OmlzTmF2aWdhdGlvbkFsbG93
ZWQgd2hlbiB1cmwgaXMgbm90IGphdmFzY3JpcHQgc2NoZW1lLgorICAgICAgICAoV2ViQ29yZTo6
TmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVSZWRpcmVjdCk6IENhbGxzIHNob3VsZFNjaGVk
dWxlTmF2aWdhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRpb25TY2hlZHVsZXI6OnNj
aGVkdWxlTG9jYXRpb25DaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRp
b25TY2hlZHVsZXI6OnNjaGVkdWxlUmVmcmVzaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVIaXN0b3J5TmF2aWdhdGlvbik6IERpdHRvLgor
ICAgICAgICAqIGxvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNhbGxvd05hdmlnYXRpb25JbkJlZm9yZVVubG9hZDo6RGlzYWxsb3dOYXZpZ2F0aW9uSW5C
ZWZvcmVVbmxvYWQpOiBEaXNhbGxvd3MgbmF2aWdhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c2FsbG93TmF2aWdhdGlvbkluQmVmb3JlVW5sb2FkOjp+RGlzYWxsb3dOYXZpZ2F0aW9uSW5CZWZv
cmVVbmxvYWQpOiBBbGxvd3MgbmF2aWdhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRpc2FsbG93
TmF2aWdhdGlvbkluQmVmb3JlVW5sb2FkOjppc05hdmlnYXRpb25BbGxvd2VkKTogUmV0dXJucyB0
cnVlIGlmIG5hdmlnYXRpb24gaXMgYWxsb3dlZC4KKwogMjAxMS0wMS0wNSAgSmFtZXMgU2ltb25z
ZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDc0OTcyKQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODU0LDEzICsy
ODU0LDM0IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZENsb3NlKCkKICAgICBpZiAoIWNocm9t
ZSB8fCAhY2hyb21lLT5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKKyAgICAvLyBTdG9yZSBhbGwgcmVmZXJlbmNlcyB0byBlYWNoIHN1YmZy
YW1lIGluIGFkdmFuY2Ugc2luY2UgYmVmb3JldW5sb2FkJ3MgZXZlbnQgaGFuZGxlciBtYXkgbW9k
aWZ5IGZyYW1lCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBkZXNjZW5kZW50RnJhbWVzOwor
ICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2ZyYW1lKSkKKyAgICAg
ICAgZGVzY2VuZGVudEZyYW1lcy5hcHBlbmQoY2hpbGQpOworCisgICAgYm9vbCBzaG91bGRDbG9z
ZSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgRGlzYWxsb3dOYXZpZ2F0aW9uSW5CZWZvcmVVbmxv
YWQgZGlzYWxsb3dOYXZpZ2F0aW9uOworICAgICAgICBpZiAoZmlyZUJlZm9yZVVubG9hZEV2ZW50
KGNocm9tZSkpIHsKKyAgICAgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgICAgIHdoaWxl
IChpIDwgZGVzY2VuZGVudEZyYW1lcy5zaXplKCkgJiYgZGVzY2VuZGVudEZyYW1lc1tpXS0+bG9h
ZGVyKCktPmZpcmVCZWZvcmVVbmxvYWRFdmVudChjaHJvbWUpKQorICAgICAgICAgICAgICAgIGkr
KzsKKyAgICAgICAgICAgIGlmIChpID09IGRlc2NlbmRlbnRGcmFtZXMuc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHNob3VsZENsb3NlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBzaG91bGRDbG9zZTsKK30KKworYm9vbCBGcmFtZUxvYWRlcjo6ZmlyZUJlZm9yZVVubG9h
ZEV2ZW50KENocm9tZSogY2hyb21lKQorewogICAgIERPTVdpbmRvdyogZG9tV2luZG93ID0gbV9m
cmFtZS0+ZXhpc3RpbmdET01XaW5kb3coKTsKICAgICBpZiAoIWRvbVdpbmRvdykKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKLSAgICBIVE1MRWxlbWVudCogYm9keSA9IGRvY3VtZW50LT5ib2R5KCk7Ci0g
ICAgaWYgKCFib2R5KQorICAgIGlmICghZG9jdW1lbnQtPmJvZHkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBSZWZQdHI8QmVmb3JlVW5sb2FkRXZlbnQ+IGJlZm9yZVVubG9hZEV2ZW50
ID0gQmVmb3JlVW5sb2FkRXZlbnQ6OmNyZWF0ZSgpOwpAQCAtMjg5MCw4ICsyOTExLDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZwogICAgIC8vICAgIDEpIE5hdmln
YXRpb24gcG9saWN5IGRlbGVnYXRlIHNhaWQgd2UgY2FuJ3Qgc28gcmVxdWVzdCBpcyBuaWwuIEEg
cHJpbWFyeSBjYXNlIG9mIHRoaXMgCiAgICAgLy8gICAgICAgaXMgdGhlIHVzZXIgcmVzcG9uZGlu
ZyBDYW5jZWwgdG8gdGhlIGZvcm0gcmVwb3N0IG5hZyBzaGVldC4KICAgICAvLyAgICAyKSBVc2Vy
IHJlc3BvbmRlZCBDYW5jZWwgdG8gYW4gYWxlcnQgcG9wcGVkIHVwIGJ5IHRoZSBiZWZvcmUgdW5s
b2FkIGV2ZW50IGhhbmRsZXIuCi0gICAgLy8gVGhlICJiZWZvcmUgdW5sb2FkIiBldmVudCBoYW5k
bGVyIHJ1bnMgb25seSBmb3IgdGhlIG1haW4gZnJhbWUuCi0gICAgYm9vbCBjYW5Db250aW51ZSA9
IHNob3VsZENvbnRpbnVlICYmICghaXNMb2FkaW5nTWFpbkZyYW1lKCkgfHwgc2hvdWxkQ2xvc2Uo
KSk7CisgICAgYm9vbCBjYW5Db250aW51ZSA9IHNob3VsZENvbnRpbnVlICYmIHNob3VsZENsb3Nl
KCk7CiAKICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgd2Fp
dGluZyBmb3IgYSBxdWljayByZWRpcmVjdCwgYnV0IHRoZSBwb2xpY3kgZGVsZWdhdGUgZGVjaWRl
ZCB0byBpZ25vcmUgaXQsIHRoZW4gd2UgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9u
IDc0OTcyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsNyBAQCBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKIGNsYXNzIENh
Y2hlZEZyYW1lQmFzZTsKIGNsYXNzIENhY2hlZFBhZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZTsK
K2NsYXNzIENocm9tZTsKIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKIGNsYXNzIERvY3VtZW50Owog
Y2xhc3MgRG9jdW1lbnRMb2FkZXI7CkBAIC0zNjEsNiArMzYyLDggQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBjYWxsQ29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHZvaWQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGJvb2wgc2hvdWxk
Q29udGludWUpOwogICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRv
d1BvbGljeSh2b2lkKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3Rh
dGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGJv
b2wgc2hvdWxkQ29udGludWUpOwogICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUZyYWdtZW50
U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHZvaWQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGJvb2wgc2hvdWxkQ29udGludWUpOworICAgIAorICAg
IGJvb2wgZmlyZUJlZm9yZVVubG9hZEV2ZW50KENocm9tZSopOwogCiAgICAgdm9pZCBjb250aW51
ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+LCBib29sIHNob3VsZENvbnRpbnVlKTsKICAgICB2b2lkIGNvbnRpbnVl
TG9hZEFmdGVyTmV3V2luZG93UG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IE5hdmlnYXRpb25B
Y3Rpb24mLCBib29sIHNob3VsZENvbnRpbnVlKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL05hdmln
YXRpb25TY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL05hdmlnYXRp
b25TY2hlZHVsZXIuY3BwCShyZXZpc2lvbiA3NDk3MikKKysrIFdlYkNvcmUvbG9hZGVyL05hdmln
YXRpb25TY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorYm9vbCBEaXNhbGxvd05hdmlnYXRpb25JbkJlZm9yZVVubG9h
ZDo6c19uYXZpZ2F0aW9uSXNBbGxvd2VkID0gdHJ1ZTsKKwogY2xhc3MgU2NoZWR1bGVkTmF2aWdh
dGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgU2NoZWR1bGVkTmF2aWdh
dGlvbihkb3VibGUgZGVsYXksIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJk
TGlzdCwgYm9vbCB3YXNEdXJpbmdMb2FkLCBib29sIGlzTG9jYXRpb25DaGFuZ2UpCkBAIC0yNjMs
OSArMjY1LDE5IEBAIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6Y2xlYXIoKQogICAgIG1fcmVk
aXJlY3QuY2xlYXIoKTsKIH0KIAoraW5saW5lIGJvb2wgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2hv
dWxkU2NoZWR1bGVOYXZpZ2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFn
ZSgpOworfQorCitpbmxpbmUgYm9vbCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzaG91bGRTY2hlZHVs
ZU5hdmlnYXRpb24oY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJh
bWUtPnBhZ2UoKSAmJiAocHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSB8fCBEaXNhbGxvd05hdmln
YXRpb25JbkJlZm9yZVVubG9hZDo6aXNOYXZpZ2F0aW9uQWxsb3dlZCgpKTsKK30KKwogdm9pZCBO
YXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZVJlZGlyZWN0KGRvdWJsZSBkZWxheSwgY29uc3Qg
U3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCisgICAgaWYgKCFzaG91
bGRTY2hlZHVsZU5hdmlnYXRpb24odXJsKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChkZWxh
eSA8IDAgfHwgZGVsYXkgPiBJTlRfTUFYIC8gMTAwMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk3
LDcgKzMwOSw3IEBAIGJvb2wgTmF2aWdhdGlvblNjaGVkdWxlcjo6bXVzdExvY2tCYWNrRm8KIAog
dm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0Zvcndh
cmRMaXN0KQogewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmICghc2hvdWxkU2No
ZWR1bGVOYXZpZ2F0aW9uKHVybCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAodXJsLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzQ0LDcgKzM1Niw3IEBAIHZvaWQgTmF2aWdhdGlv
blNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3UKIAogdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpz
Y2hlZHVsZVJlZnJlc2goKQogewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmICgh
c2hvdWxkU2NoZWR1bGVOYXZpZ2F0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBL
VVJMJiB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CiAgICAgaWYgKHVybC5pc0VtcHR5
KCkpCkBAIC0zNTUsNyArMzY3LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVs
ZVJlZnJlcwogCiB2b2lkIE5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlSGlzdG9yeU5hdmln
YXRpb24oaW50IHN0ZXBzKQogewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmICgh
c2hvdWxkU2NoZWR1bGVOYXZpZ2F0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElu
dmFsaWQgaGlzdG9yeSBuYXZpZ2F0aW9ucyAoc3VjaCBhcyBoaXN0b3J5LmZvcndhcmQoKSBkdXJp
bmcgYSBuZXcgbG9hZCkgaGF2ZSB0aGUgc2lkZSBlZmZlY3Qgb2YgY2FuY2VsbGluZyBhbnkgc2No
ZWR1bGVkCkluZGV4OiBXZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5oCShyZXZpc2lvbiA3
NDk3MikKKysrIFdlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00Nyw4ICs0OCwyMiBAQCBjbGFzcyBT
Y2hlZHVsZWROYXZpZ2F0aW9uOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIHN0cnVjdCBGcmFt
ZUxvYWRSZXF1ZXN0OworICAgIAorY2xhc3MgRGlzYWxsb3dOYXZpZ2F0aW9uSW5CZWZvcmVVbmxv
YWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERpc2FsbG93TmF2aWdhdGlvbkluQmVmb3Jl
VW5sb2FkKTsKKworcHVibGljOgorICAgIERpc2FsbG93TmF2aWdhdGlvbkluQmVmb3JlVW5sb2Fk
KCkgeyBBU1NFUlQoc19uYXZpZ2F0aW9uSXNBbGxvd2VkKTsgc19uYXZpZ2F0aW9uSXNBbGxvd2Vk
ID0gZmFsc2U7IH0KKyAgICB+RGlzYWxsb3dOYXZpZ2F0aW9uSW5CZWZvcmVVbmxvYWQoKSB7IEFT
U0VSVCghc19uYXZpZ2F0aW9uSXNBbGxvd2VkKTsgc19uYXZpZ2F0aW9uSXNBbGxvd2VkID0gdHJ1
ZTsgfQorICAgIHN0YXRpYyBib29sIGlzTmF2aWdhdGlvbkFsbG93ZWQoKSB7IHJldHVybiBzX25h
dmlnYXRpb25Jc0FsbG93ZWQ7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBzX25hdmln
YXRpb25Jc0FsbG93ZWQ7Cit9OworICAgIAorY2xhc3MgTmF2aWdhdGlvblNjaGVkdWxlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF2aWdhdGlvblNjaGVkdWxlcik7CiAKLWNsYXNzIE5h
dmlnYXRpb25TY2hlZHVsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIE5h
dmlnYXRpb25TY2hlZHVsZXIoRnJhbWUqKTsKICAgICB+TmF2aWdhdGlvblNjaGVkdWxlcigpOwpA
QCAtNjgsNiArODMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgor
ICAgIGJvb2wgc2hvdWxkU2NoZWR1bGVOYXZpZ2F0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBzaG91
bGRTY2hlZHVsZU5hdmlnYXRpb24oY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OworCiAgICAgdm9p
ZCB0aW1lckZpcmVkKFRpbWVyPE5hdmlnYXRpb25TY2hlZHVsZXI+Kik7CiAgICAgdm9pZCBzY2hl
ZHVsZShQYXNzT3duUHRyPFNjaGVkdWxlZE5hdmlnYXRpb24+KTsKIApJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gNzUwMzApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyOCBAQAorMjAxMS0wMS0wNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBvbmJlZm9y
ZXVubG9hZCBpcyBicm9rZW4gZm9yIGZyYW1lc2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MTgKKworICAgICAgICBBZGRlZCB0ZXN0cyB0byBl
bnN1cmUgV2ViS2l0IGZpcmVzIGJlZm9yZXVubG9hZCBldmVudHMgZm9yIHN1YiBmcmFtZXMsCisg
ICAgICAgIGFuZCBkaXNhbGxvd3MgbmF2aWdhdGlvbiB3aGlsZSBiZWZvcmV1bmxvYWQgZXZlbnQg
aGFuZGxlcnMgYXJlIGJlaW5nIGNhbGxlZC4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9y
ZS11bmxvYWQtZm9yYmlkZGVuLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUt
c3ViZnJhbWVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVm
b3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5h
dmlnYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZv
cmUtdW5sb2FkLWphdmFzY3JpcHQtbmF2aWdhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9h
ZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9y
ZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJm
cmFtZS1mYWlsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy9i
ZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLXBhcmVudC5odG1sOiBBZGRlZC4KKwogMjAxMS0w
MS0wNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgdGVzdCBleHBlY3RhdGlvbiB1cGRhdGUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRl
bi1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtZm9yYmlkZGVuLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIG5hdmlnYXRp
b24gaXMgZm9yYmlkZGVuIHdoaWxlIGJlZm9yZXVubG9hZCBldmVudCBpcyBiZWluZyBmaXJlZC4g
WW91IHNob3VsZCBzZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJsb3c6CisKK1BBU1MgMS8yCisK
KworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTAtLT4tLT4nCist
LS0tLS0tLQorUEFTUzogMi8yCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3Ji
aWRkZW4tbmF2aWdhdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgZW5zdXJlcyBuYXZpZ2F0
aW9uIGlzIGZvcmJpZGRlbiB3aGlsZSBiZWZvcmV1bmxvYWQgZXZlbnQgaXMgYmVpbmcgZmlyZWQu
IFlvdSBzaG91bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBibG93OjwvcD4KKzxwcmUgaWQ9
ImxvZyI+RkFJTDwvcHJlPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbG9nJyk7CisKK2Z1bmN0aW9uIHRlc3QoaWZyYW1lKSB7CisgICAgaWYgKGlm
cmFtZS5kb25lKSB7CisgICAgICAgIGlmIChpZnJhbWUuaGFsZlBhc3NlZCkgeworICAgICAgICAg
ICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3Jl
LXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sJzsgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmcmFtZS5oYWxmUGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZnJhbWUuZG9uZSA9IHRydWU7CisgICAgaWZyYW1lLmNvbnRlbnRX
aW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFt
ZS1jaGlsZC5odG1sJzsKK30KKworZnVuY3Rpb24gZmlyZWQoY29udGVudFdpbmRvdykgeworICAg
IGxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFp
bC5odG1sJzsKKyAgICBjb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2Jl
Zm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5odG1sJzsKKyAgICBsb2cuaW5uZXJIVE1MID0g
J1BBU1MgMS8yJzsKKyAgICBjb250ZW50V2luZG93LmZyYW1lRWxlbWVudC5oYWxmUGFzc2VkID0g
dHJ1ZTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCh0aGlzKTsiIHNyYz0i
cmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9pZnJhbWU+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWluLW11bHRpcGxlLXN1YmZyYW1lcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFt
ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50IGluIG11
bHRpcGxlIHN1YmZyYW1lcy4gWW91IHNob3VsZCBzZWUgUEFTUyBibG93OgorCitQQVNTCisgIApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1z
dWJmcmFtZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZv
cmUtdW5sb2FkLWluLW11bHRpcGxlLXN1YmZyYW1lcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyBiZWZvcmV1bmxvYWQgZXZlbnQgaW4gbXVsdGlwbGUg
c3ViZnJhbWVzLiBZb3Ugc2hvdWxkIHNlZSBQQVNTIGJsb3c6PC9wPgorPHByZSBpZD0ibG9nIj48
L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2xvZycpOworCitmdW5jdGlvbiB0ZXN0KGlmcmFtZSkgeworICAgIGlmIChpZnJhbWUu
ZG9uZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmcmFtZS5kb25lID0gdHJ1ZTsKKyAgICBpZnJh
bWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5sb2Fk
LWluLXN1YmZyYW1lLWNoaWxkLmh0bWwnOworfQorCit2YXIgbnVtYmVyT2ZCZWZvcmVVbmxvYWRJ
blN1YmZyYW1lcyA9IDA7Cit2YXIgbnVtYmVyT2ZGcmFtZXMgPSAzOworCitmdW5jdGlvbiBsb2dF
cnJvcigpIHsKKyAgICBsb2cuaW5uZXJIVE1MID0gJ0ZBSUw6ICcgKyBudW1iZXJPZkJlZm9yZVVu
bG9hZEluU3ViZnJhbWVzICsgJyBiZWZvcmV1bmxvYWQgZXZlbnRzIGFyZSBmaXJlZCBidXQgZXhw
ZWN0ZWQgJyArIG51bWJlck9mRnJhbWVzICsgJyBldmVudHMnOworfQorCitsb2dFcnJvcigpOwor
CitmdW5jdGlvbiBmaXJlZChjb250ZW50V2luZG93KSB7CisgICAgbnVtYmVyT2ZCZWZvcmVVbmxv
YWRJblN1YmZyYW1lcysrOworICAgIGlmIChudW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJhbWVz
ID09IG51bWJlck9mRnJhbWVzKSB7CisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnUEFTU1xuJzsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKyAgICBl
bHNlCisgICAgICAgIGxvZ0Vycm9yKCk7CisgICAgY29udGVudFdpbmRvdy5mcmFtZUVsZW1lbnQu
ZmlyZWQgPSB0cnVlOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRoaXMp
IiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwv
aWZyYW1lPgorPGlmcmFtZSBvbmxvYWQ9InRlc3QodGhpcykiIHNyYz0icmVzb3VyY2VzL2JlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9pZnJhbWU+Cis8aWZyYW1lIG9ubG9h
ZD0idGVzdCh0aGlzKSIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1j
aGlsZC5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJh
bWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOSBAQAorVGhpcyB0ZXN0cyBiZWZvcmV1bmxvYWQgZXZlbnQgaW4gc3ViZnJhbWVzLiBZ
b3Ugc2hvdWxkIHNlZSBQQVNTIGJsb3c6CisKK1BBU1MKKworCistLS0tLS0tLQorRnJhbWU6ICc8
IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0tPicKKy0tLS0tLS0tCitDaGlsZCBsb2FkZWQu
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1l
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9h
ZC1pbi1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIGJl
Zm9yZXVubG9hZCBldmVudCBpbiBzdWJmcmFtZXMuIFlvdSBzaG91bGQgc2VlIFBBU1MgYmxvdzo8
L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7Cit2YXIgZG9uZSA9IGZhbHNlOworCitmdW5jdGlv
biB0ZXN0KCkgeworICAgIGlmIChkb25lKSB7CisgICAgICAgIC8vIGxvZydzIG5vdCBoYXZpbmcg
YW55IGNvbnRlbnQgaW1wbGllcyB0aGF0IGxvYWQgZXZlbnQgd2FzIGRpc3BhdGNoZWQgZm9yIHRo
ZSBzZWNvbmQgdGltZSBiZWZvcmUgYmVmb3JldW5sb2FkIGlzIGRpc3BhdGNoZWQuCisgICAgICAg
IGlmICghbG9nLmlubmVySFRNTC5sZW5ndGgpCisgICAgICAgICAgICBsb2cuaW5uZXJIVE1MID0g
J0ZBSUw6IGJlZm9yZXVubG9hZCBldmVudCB3YXMgbmV2ZXIgZGlzcGF0Y2hlZC5cbic7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ZG9uZSA9IHRydWU7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lmcmFtZScp
WzBdLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9h
ZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sJzsKK30KKworZnVuY3Rpb24gZmlyZWQoKSB7CisgICAg
aWYgKCFsb2cuaW5uZXJIVE1MLmxlbmd0aCkKKyAgICAgICAgbG9nLmlubmVySFRNTCA9ICdQQVNT
XG4nOworICAgIGVsc2UKKyAgICAgICAgbG9nLmlubmVySFRNTCA9ICdGQUlMOiBiZWZvcmV1bmxv
YWQgZXZlbnQgd2FzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIHNlY29uZCBsb2FkIGV2ZW50LicKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRl
c3QoKSIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1s
Ij48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3Jp
cHQtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3JpcHQtbmF2aWdhdGlvbi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgc2V0dGlu
ZyBsb2NhdGlvbi5ocmVmIHdpdGggamF2YXNjcmlwdCBzY2hlbWUgcHJvcGVybHkgZXhlY3V0ZXMg
dGhlIHNjcmlwdCBldmVuIHdoaWxlIGJlZm9yZXVubG9hZCBldmVudCBpcyBiZWluZyBmaXJlZC4g
WW91IHNob3VsZCBzZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJsb3c6CisKK1BBU1MKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmln
YXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWphdmFzY3JpcHQtbmF2aWdhdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRpb24uaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
Kzxib2R5PgorPHA+VGhpcyB0ZXN0IGVuc3VyZXMgc2V0dGluZyBsb2NhdGlvbi5ocmVmIHdpdGgg
amF2YXNjcmlwdCBzY2hlbWUgIHByb3Blcmx5IGV4ZWN1dGVzIHRoZSBzY3JpcHQgZXZlbiB3aGls
ZSBiZWZvcmV1bmxvYWQgZXZlbnQgaXMgYmVpbmcgZmlyZWQuIFlvdSBzaG91bGQgc2VlIFBBU1Mg
MS8yIGFuZCBQQVNTIDIvMiBibG93OjwvcD4KKzxwcmUgaWQ9ImxvZyI+RkFJTDwvcHJlPgorPHNj
cmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9n
Jyk7CisKK2Z1bmN0aW9uIHRlc3QoaWZyYW1lKSB7CisgICAgaWYgKGlmcmFtZS5kb25lKQorICAg
ICAgICByZXR1cm47CisgICAgaWZyYW1lLmRvbmUgPSB0cnVlOworICAgIGlmcmFtZS5jb250ZW50
V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJh
bWUtY2hpbGQuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKSB7CisgICAgbG9nLmlubmVySFRN
TCA9ICdQQVNTJzsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisK
K2Z1bmN0aW9uIGZpcmVkKGNvbnRlbnRXaW5kb3cpIHsKKyAgICBsb2NhdGlvbi5ocmVmID0gJ2ph
dmFzY3JpcHQ6dG9wLmRvbmUoKSc7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRl
c3QodGhpcyk7IiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxk
Lmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZy
YW1lcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9iZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5IEBACitUaGlzIHRlc3QgZW5zdXJlcyBiZWZvcmV1bmxvYWQgZXZlbnQgZmly
ZXMgaW4gYWxsIHN1YmZyYW1lcyB3aGVuIGEgcGFyZW50IGZyYW1lIGlzIG5hdmlnYXRlZC4gWW91
IHNob3VsZCBzZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJsb3c6CisKK1BBU1MgMS8yCisKKwor
LS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTAtLT4tLT4nCistLS0t
LS0tLQorUEFTUzogMi8yCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5s
b2FkLXdpdGgtc3ViZnJhbWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGJvZHk+Cis8cD5UaGlzIHRlc3QgZW5zdXJlcyBiZWZvcmV1bmxvYWQgZXZlbnQgZmlyZXMgaW4g
YWxsIHN1YmZyYW1lcyB3aGVuIGEgcGFyZW50IGZyYW1lIGlzIG5hdmlnYXRlZC4gWW91IHNob3Vs
ZCBzZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJsb3c6PC9wPgorPHByZSBpZD0ibG9nIj48L3By
ZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xv
ZycpOwordmFyIG51bWJlck9mQmVmb3JlVW5sb2FkSW5TdWJmcmFtZXMgPSAwOwordmFyIG51bWJl
ck9mRnJhbWVzID0gMzsKKworZnVuY3Rpb24gdGVzdChpZnJhbWUpIHsKKyAgICBpZiAoaWZyYW1l
LmRvbmUpIHsKKyAgICAgICAgaWYgKG51bWJlck9mQmVmb3JlVW5sb2FkSW5TdWJmcmFtZXMgPT0g
bnVtYmVyT2ZGcmFtZXMpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWZyYW1lLmRvbmUgPSB0cnVlOwor
ICAgIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGxv
Z0Vycm9yKCkgeworICAgIGxvZy5pbm5lckhUTUwgPSAnRkFJTDogJyArIG51bWJlck9mQmVmb3Jl
VW5sb2FkSW5TdWJmcmFtZXMgKyAnIGJlZm9yZXVubG9hZCBldmVudHMgYXJlIGZpcmVkIGJ1dCBl
eHBlY3RlZCAnICsgbnVtYmVyT2ZGcmFtZXMgKyAnIGV2ZW50cyc7Cit9CisKK2xvZ0Vycm9yKCk7
CisKK2Z1bmN0aW9uIGZpcmVkKGNvbnRlbnRXaW5kb3cpIHsKKyAgICBudW1iZXJPZkJlZm9yZVVu
bG9hZEluU3ViZnJhbWVzKys7CisgICAgaWYgKG51bWJlck9mQmVmb3JlVW5sb2FkSW5TdWJmcmFt
ZXMgPT0gbnVtYmVyT2ZGcmFtZXMpCisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnUEFTUyAxLzJc
bic7CisgICAgZWxzZQorICAgICAgICBsb2dFcnJvcigpOworICAgIGNvbnRlbnRXaW5kb3cuZnJh
bWVFbGVtZW50LmZpcmVkID0gdHJ1ZTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIG9ubG9hZD0i
dGVzdCh0aGlzKSIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1w
YXJlbnQuaHRtbCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZv
cmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGls
ZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGJvZHkgb25iZWZvcmV1bmxvYWQ9InRvcC5maXJlZCh3aW5kb3cpOyByZXR1cm4gbnVs
bDsiPgorQ2hpbGQgbG9hZGVkLgorPHNjcmlwdD4KKworaWYgKHRvcC5sb2FkZWQpCisgICAgdG9w
LmxvYWRlZCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWRlc3Rp
bmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3Vy
Y2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KK1BBU1M6IDIvMgorPHNjcmlwdD4KKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUt
ZmFpbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNl
cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWZhaWwuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1l
LWZhaWwuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxib2R5PgorRkFJTAorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
cmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMtcGFyZW50Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQt
d2l0aC1zdWJmcmFtZXMtcGFyZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1wYXJlbnQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5o
dG1sIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSJiZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNo
aWxkLmh0bWwiPjwvaWZyYW1lPgorPGlmcmFtZSBzcmM9ImJlZm9yZS11bmxvYWQtaW4tc3ViZnJh
bWUtY2hpbGQuaHRtbCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78203</attachid>
            <date>2011-01-06 19:42:52 -0800</date>
            <delta_ts>2011-01-07 14:06:08 -0800</delta_ts>
            <desc>added more tests</desc>
            <filename>bug-19418-20110106194251.patch</filename>
            <type>text/plain</type>
            <size>35520</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTEtMDEtMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgb25i
ZWZvcmV1bmxvYWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAgICAgICAgQWRkZWQgYmVmb3Jl
dW5sb2FkIGV2ZW50IHN1cHBvcnQgZm9yIHN1YiBmcmFtZXMuIFdlYktpdCdzIGltcGxlbWVudGF0
aW9uIHRyaWVzIHRvIG1hdGNoCisgICAgICAgIHRoYXQgb2YgSW50ZXJuZXQgRXhwbG9yZXIgYXMg
bXVjaCBhcyBwb3NzaWJsZS4gYmVmb3JldW5sb2FkIGV2ZW50IGlzIGZpcmVkIGZvciBlYWNoIGFu
ZAorICAgICAgICBldmVyeSBkZXNjZW5kZW50IG9mIGEgZnJhbWUgdGhhdCBpcyBhYm91dCB0byBu
YXZpZ2F0ZS4KKworICAgICAgICBXaGVuIGEgdmFsdWUgb3RoZXIgdGhhbiBudWxsIGlzIHJldHVy
bmVkIGJ5IGEgYmVmb3JldW5sb2FkIGhhbmRsZXIsIGEgY29uZmlybWF0aW9uIGRpYWxvZworICAg
ICAgICBpcyBzaG93biBmb3IgZWFjaCBoYW5kbGVyIChjYWxscyBjaHJvbWUncyBydW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWwpIGp1c3QgbGlrZSBpdCBpcyBkb25lCisgICAgICAgIGZvciBtYWlu
IGZyYW1lcy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgbmF2aWdhdGlvbiBpcyBmb3JiaWRkZW4g
d2hpbGUgYmVmb3JldW5sb2FkIGhhbmRsZXJzIGFyZSBiZWluZyBjYWxsZWQuCisgICAgICAgIFNl
dHRpbmcgdmFsdWVzIHRvIGxvY2F0aW9uLmhyZWYsIGxvY2F0aW9uLnJlbG9hZCwgYW5kIG90aGVy
IG1lYW5zIG9mIG5hdmlnYXRpb25zIGFyZSB0aHVzCisgICAgICAgIGlnbm9yZWQgd2hpbGUgYmVm
b3JldW5sb2FkIGV2ZW50IGhhbmRsZXIgaXMgYmVpbmcgcmFuLCBtYXRjaGluZyBJbnRlcm5ldCBF
eHBsb3JlcidzIGJlaGF2aW9yLgorCisgICAgICAgIEJlY2F1c2UgbmF2aWdhdGlvbiBuZWVkcyB0
byBwcmV2ZW50ZWQgZ2xvYmFsbHksIE5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZCBp
cyBhZGRlZCB0bworICAgICAgICBOYXZpZ2F0aW9uU2NoZWR1bGVyLmgsIHdoaWNoIGlzIGluc3Rh
bnRpYXRlZCBhcyBhIFJBSUkgb2JqZWN0IGluIEZyYW1lTG9hZGVyOjpzaG91bGRDbG9zZS4KKwor
ICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1hZG9wdC1zdWJmcmFtZS10
by1vdXRzaWRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQt
YWRvcHQtd2l0aGluLXN1YmZyYW1lcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9i
ZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbAorICAg
ICAgICAgICAgICAgZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRp
b24uaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1yZW1vdmUt
YW5kLWFkZC1zdWJmcmFtZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLXdpdGgtc3ViZnJhbWVzLmh0bWwKKworICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcDoKKyAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZENsb3NlKTogQ2FsbHMg
ZmlyZUJlZm9yZVVubG9hZEV2ZW50IG9uIG1fZnJhbWUgYW5kIG1fZnJhbWUncworICAgICAgIGRl
c2NlbmRlbnRzLiBSZXR1cm5zIHRydWUgb25seSBpZiBldmVyeSBjYWxsIHRvIGZpcmVCZWZvcmVV
bmxvYWRFdmVudCByZXR1cm5lZCB0cnVlLgorICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
ZmlyZUJlZm9yZVVubG9hZEV2ZW50KTogRmlyZXMgYSBiZWZvcmV1bmxvYWQgZXZlbnQgYW5kIGNh
bGxzCisgICAgICAgY2hyb21lJ3MgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsIGFzIG5lZWRl
ZC4KKyAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdh
dGlvblBvbGljeSk6IENhbGxzIHNob3VsZENsb3NlIGZvciBhbGwgZnJhbWVzLgorICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxl
ci5jcHA6CisgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRpb25TY2hlZHVsZXI6OnNob3VsZFNjaGVk
dWxlTmF2aWdhdGlvbik6IENoZWNrcyB0aGUgbnVsbGl0eSBvZiBQYWdlIGFuZCBjYWxscworICAg
ICAgIE5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZDo6aXNOYXZpZ2F0aW9uQWxsb3dl
ZCB3aGVuIHVybCBpcyBub3QgamF2YXNjcmlwdCBzY2hlbWUuCisgICAgICAgKFdlYkNvcmU6Ok5h
dmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlUmVkaXJlY3QpOiBDYWxscyBzaG91bGRTY2hlZHVs
ZU5hdmlnYXRpb24uCisgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVk
dWxlTG9jYXRpb25DaGFuZ2UpOiBEaXR0by4KKyAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvblNj
aGVkdWxlcjo6c2NoZWR1bGVSZWZyZXNoKTogRGl0dG8uCisgICAgICAgKFdlYkNvcmU6Ok5hdmln
YXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlSGlzdG9yeU5hdmlnYXRpb24pOiBEaXR0by4KKyAgICAg
ICAqIGxvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmg6CisgICAgICAgKFdlYkNvcmU6Ok5hdmln
YXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZDo6TmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3Jl
VW5sb2FkKTogRGlzYWJsZXMgbmF2aWdhdGlvbi4KKyAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlv
bkRpc2FibGVyRm9yQmVmb3JlVW5sb2FkOjp+TmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5s
b2FkKTogRW5hYmxlcyBuYXZpZ2F0aW9uCisgICAgICAgd2hlbiBjYWxsZWQgb24gdGhlIGxhc3Qg
aW5zdGFuY2Ugb2YgTmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5sb2FkLgorICAgICAgIChX
ZWJDb3JlOjpOYXZpZ2F0aW9uRGlzYWJsZXJGb3JCZWZvcmVVbmxvYWQ6OmlzTmF2aWdhdGlvbkFs
bG93ZWQpOiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIGluc3RhbmNlCisgICAgICAgb2Yg
TmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5sb2FkIGxlZnQgb24gdGhlIHN0YWNrLgorCiAy
MDExLTAxLTA2ICBKZW5uIEJyYWl0aHdhaXRlICA8amVubmJAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDc1MTMxKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODYyLDEzICsyODYyLDM1IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3Vs
ZENsb3NlKCkKICAgICBpZiAoIWNocm9tZSB8fCAhY2hyb21lLT5jYW5SdW5CZWZvcmVVbmxvYWRD
b25maXJtUGFuZWwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAvLyBTdG9yZSBhbGwg
cmVmZXJlbmNlcyB0byBlYWNoIHN1YmZyYW1lIGluIGFkdmFuY2Ugc2luY2UgYmVmb3JldW5sb2Fk
J3MgZXZlbnQgaGFuZGxlciBtYXkgbW9kaWZ5IGZyYW1lCisgICAgVmVjdG9yPFJlZlB0cjxGcmFt
ZT4gPiBkZXNjZW5kZW50RnJhbWVzOworICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+
dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPnRyYXZl
cnNlTmV4dChtX2ZyYW1lKSkKKyAgICAgICAgZGVzY2VuZGVudEZyYW1lcy5hcHBlbmQoY2hpbGQp
OworCisgICAgYm9vbCBzaG91bGRDbG9zZSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTmF2aWdh
dGlvbkRpc2FibGVyRm9yQmVmb3JlVW5sb2FkIG5hdmlnYXRpb25EaXNhYmxlcjsKKyAgICAgICAg
aWYgKGZpcmVCZWZvcmVVbmxvYWRFdmVudChjaHJvbWUpKSB7CisgICAgICAgICAgICBzaXplX3Qg
aSA9IDA7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGRlc2NlbmRlbnRGcmFtZXMuc2l6ZSgpICYm
ICghZGVzY2VuZGVudEZyYW1lc1tpXS0+dHJlZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2ZyYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZGVz
Y2VuZGVudEZyYW1lc1tpXS0+bG9hZGVyKCktPmZpcmVCZWZvcmVVbmxvYWRFdmVudChjaHJvbWUp
KSkKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBpZiAoaSA9PSBkZXNjZW5kZW50
RnJhbWVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICBzaG91bGRDbG9zZSA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2hvdWxkQ2xvc2U7Cit9CisKK2Jvb2wgRnJhbWVM
b2FkZXI6OmZpcmVCZWZvcmVVbmxvYWRFdmVudChDaHJvbWUqIGNocm9tZSkKK3sKICAgICBET01X
aW5kb3cqIGRvbVdpbmRvdyA9IG1fZnJhbWUtPmV4aXN0aW5nRE9NV2luZG93KCk7CiAgICAgaWYg
KCFkb21XaW5kb3cpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVmUHRyPERvY3VtZW50
PiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgSFRNTEVsZW1lbnQqIGJvZHkg
PSBkb2N1bWVudC0+Ym9keSgpOwotICAgIGlmICghYm9keSkKKyAgICBpZiAoIWRvY3VtZW50LT5i
b2R5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVmUHRyPEJlZm9yZVVubG9hZEV2
ZW50PiBiZWZvcmVVbmxvYWRFdmVudCA9IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsKQEAg
LTI4OTgsOCArMjkyMCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2
aWcKICAgICAvLyAgICAxKSBOYXZpZ2F0aW9uIHBvbGljeSBkZWxlZ2F0ZSBzYWlkIHdlIGNhbid0
IHNvIHJlcXVlc3QgaXMgbmlsLiBBIHByaW1hcnkgY2FzZSBvZiB0aGlzIAogICAgIC8vICAgICAg
IGlzIHRoZSB1c2VyIHJlc3BvbmRpbmcgQ2FuY2VsIHRvIHRoZSBmb3JtIHJlcG9zdCBuYWcgc2hl
ZXQuCiAgICAgLy8gICAgMikgVXNlciByZXNwb25kZWQgQ2FuY2VsIHRvIGFuIGFsZXJ0IHBvcHBl
ZCB1cCBieSB0aGUgYmVmb3JlIHVubG9hZCBldmVudCBoYW5kbGVyLgotICAgIC8vIFRoZSAiYmVm
b3JlIHVubG9hZCIgZXZlbnQgaGFuZGxlciBydW5zIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lLgot
ICAgIGJvb2wgY2FuQ29udGludWUgPSBzaG91bGRDb250aW51ZSAmJiAoIWlzTG9hZGluZ01haW5G
cmFtZSgpIHx8IHNob3VsZENsb3NlKCkpOworICAgIGJvb2wgY2FuQ29udGludWUgPSBzaG91bGRD
b250aW51ZSAmJiBzaG91bGRDbG9zZSgpOwogCiAgICAgaWYgKCFjYW5Db250aW51ZSkgewogICAg
ICAgICAvLyBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGEgcXVpY2sgcmVkaXJlY3QsIGJ1dCB0aGUg
cG9saWN5IGRlbGVnYXRlIGRlY2lkZWQgdG8gaWdub3JlIGl0LCB0aGVuIHdlIApJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCShyZXZpc2lvbiA3NTEzMSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U7CiBjbGFzcyBDYWNoZWRGcmFtZUJhc2U7CiBjbGFzcyBDYWNoZWRQYWdlOwog
Y2xhc3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBDaHJvbWU7CiBjbGFzcyBET01XcmFwcGVyV29y
bGQ7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwpAQCAtMzYxLDYgKzM2
Miw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY2FsbENvbnRpbnVlTG9hZEFmdGVyTmF2
aWdhdGlvblBvbGljeSh2b2lkKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxG
b3JtU3RhdGU+LCBib29sIHNob3VsZENvbnRpbnVlKTsKICAgICBzdGF0aWMgdm9pZCBjYWxsQ29u
dGludWVMb2FkQWZ0ZXJOZXdXaW5kb3dQb2xpY3kodm9pZCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mLCBib29sIHNob3VsZENvbnRpbnVlKTsKICAgICBzdGF0aWMgdm9p
ZCBjYWxsQ29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdhdGlvblBvbGljeSh2b2lkKiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBib29sIHNob3Vs
ZENvbnRpbnVlKTsKKyAgICAKKyAgICBib29sIGZpcmVCZWZvcmVVbmxvYWRFdmVudChDaHJvbWUq
KTsKIAogICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51
ZSk7CiAgICAgdm9pZCBjb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYgZnJhbWVO
YW1lLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgYm9vbCBzaG91bGRDb250aW51ZSk7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gNzUxMzEpCisr
KyBXZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNiArNTEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3Vuc2lnbmVkIE5hdmln
YXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZDo6c19uYXZpZ2F0aW9uRGlzYWJsZUNvdW50ID0g
MDsKKwogY2xhc3MgU2NoZWR1bGVkTmF2aWdhdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBw
dWJsaWM6CiAgICAgU2NoZWR1bGVkTmF2aWdhdGlvbihkb3VibGUgZGVsYXksIGJvb2wgbG9ja0hp
c3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNEdXJpbmdMb2FkLCBib29s
IGlzTG9jYXRpb25DaGFuZ2UpCkBAIC0yNjMsOSArMjY1LDE5IEBAIHZvaWQgTmF2aWdhdGlvblNj
aGVkdWxlcjo6Y2xlYXIoKQogICAgIG1fcmVkaXJlY3QuY2xlYXIoKTsKIH0KIAoraW5saW5lIGJv
b2wgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2hvdWxkU2NoZWR1bGVOYXZpZ2F0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpOworfQorCitpbmxpbmUgYm9vbCBOYXZpZ2F0
aW9uU2NoZWR1bGVyOjpzaG91bGRTY2hlZHVsZU5hdmlnYXRpb24oY29uc3QgU3RyaW5nJiB1cmwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNob3VsZFNjaGVkdWxlTmF2aWdhdGlvbigpICYmIChwcm90
b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IE5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9h
ZDo6aXNOYXZpZ2F0aW9uQWxsb3dlZCgpKTsKK30KKwogdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVy
OjpzY2hlZHVsZVJlZGlyZWN0KGRvdWJsZSBkZWxheSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0g
ICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCisgICAgaWYgKCFzaG91bGRTY2hlZHVsZU5hdmlnYXRp
b24odXJsKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChkZWxheSA8IDAgfHwgZGVsYXkgPiBJ
TlRfTUFYIC8gMTAwMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk3LDcgKzMwOSw3IEBAIGJvb2wg
TmF2aWdhdGlvblNjaGVkdWxlcjo6bXVzdExvY2tCYWNrRm8KIAogdm9pZCBOYXZpZ2F0aW9uU2No
ZWR1bGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
ciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQogewotICAgIGlm
ICghbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmICghc2hvdWxkU2NoZWR1bGVOYXZpZ2F0aW9uKHVy
bCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzQ0LDcgKzM1Niw3IEBAIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1
bGVGb3JtU3UKIAogdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZVJlZnJlc2goKQog
ewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmICghc2hvdWxkU2NoZWR1bGVOYXZp
Z2F0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBLVVJMJiB1cmwgPSBtX2ZyYW1l
LT5sb2FkZXIoKS0+dXJsKCk7CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCkBAIC0zNTUsNyArMzY3
LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZVJlZnJlcwogCiB2b2lkIE5h
dmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlSGlzdG9yeU5hdmlnYXRpb24oaW50IHN0ZXBzKQog
ewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgIGlmICghc2hvdWxkU2NoZWR1bGVOYXZp
Z2F0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEludmFsaWQgaGlzdG9yeSBuYXZp
Z2F0aW9ucyAoc3VjaCBhcyBoaXN0b3J5LmZvcndhcmQoKSBkdXJpbmcgYSBuZXcgbG9hZCkgaGF2
ZSB0aGUgc2lkZSBlZmZlY3Qgb2YgY2FuY2VsbGluZyBhbnkgc2NoZWR1bGVkCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5oCShyZXZpc2lvbiA3NTEzMSkKKysrIFdlYkNvcmUv
bG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CkBAIC00OCw3ICs0OSwyOCBAQCBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAog
c3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiAKLWNsYXNzIE5hdmlnYXRpb25TY2hlZHVsZXIgOiBw
dWJsaWMgTm9uY29weWFibGUgeworY2xhc3MgTmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5s
b2FkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYXZpZ2F0aW9uRGlzYWJsZXJGb3JCZWZv
cmVVbmxvYWQpOworCitwdWJsaWM6CisgICAgTmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5s
b2FkKCkKKyAgICB7CisgICAgICAgIHNfbmF2aWdhdGlvbkRpc2FibGVDb3VudCsrOworICAgIH0K
KyAgICB+TmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5sb2FkKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzX25hdmlnYXRpb25EaXNhYmxlQ291bnQpOworICAgICAgICBzX25hdmlnYXRpb25E
aXNhYmxlQ291bnQtLTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgaXNOYXZpZ2F0aW9uQWxsb3dl
ZCgpIHsgcmV0dXJuICFzX25hdmlnYXRpb25EaXNhYmxlQ291bnQ7IH0KKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgdW5zaWduZWQgc19uYXZpZ2F0aW9uRGlzYWJsZUNvdW50OworfTsKKworY2xhc3Mg
TmF2aWdhdGlvblNjaGVkdWxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF2aWdhdGlv
blNjaGVkdWxlcik7CisKIHB1YmxpYzoKICAgICBOYXZpZ2F0aW9uU2NoZWR1bGVyKEZyYW1lKik7
CiAgICAgfk5hdmlnYXRpb25TY2hlZHVsZXIoKTsKQEAgLTY4LDYgKzkwLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKKyAgICBib29sIHNob3VsZFNjaGVkdWxlTmF2
aWdhdGlvbigpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkU2NoZWR1bGVOYXZpZ2F0aW9uKGNvbnN0
IFN0cmluZyYgdXJsKSBjb25zdDsKKwogICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxOYXZpZ2F0
aW9uU2NoZWR1bGVyPiopOwogICAgIHZvaWQgc2NoZWR1bGUoUGFzc093blB0cjxTY2hlZHVsZWRO
YXZpZ2F0aW9uPik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MjIzKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDEtMDYgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgb25iZWZvcmV1bmxvYWQgaXMgYnJva2VuIGZvciBmcmFt
ZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NDE4CisKKyAgICAgICAgQWRkZWQgdGVzdHMgdG8gZW5zdXJlIFdlYktpdCBmaXJlcyBiZWZvcmV1
bmxvYWQgZXZlbnRzIGZvciBzdWJmcmFtZXMsCisgICAgICAgIGFuZCBkaXNhbGxvd3MgbmF2aWdh
dGlvbiBleGNlcHQgdGhhdCBvZiBqYXZhc2NyaXB0IHNjaGVtZSB3aGlsZSBiZWZvcmV1bmxvYWQg
ZXZlbnQKKyAgICAgICAgaGFuZGxlcnMgYXJlIGJlaW5nIGNhbGxlZC4KKworICAgICAgICBBbHNv
IGFkZGVkIGEgdGVzdCB0byBlbnN1cmUgV2ViS2l0IGZpcmVzIGJlZm9yZXVubG9hZCBldmVudCBm
b3Igc3ViZnJhbWVzIGV4YWN0bHkKKyAgICAgICAgb25jZSBldmVuIGlmIGEgc3ViZnJhbWUgd2Fz
IG1vdmVkIGFyb3VuZCB3aXRoaW4gYSBiZWZvcmV1bmxvYWQgZXZlbnQgaGFuZGxlci4KKworICAg
ICAgICBBIHRlc3QgdGhhdCBlbnN1cmVzIGJlZm9yZXVubG9hZCBldmVudCBpcyBub3QgZmlyZWQg
Zm9yIGFuIGlmcmFtZSBpZiB0aGUgaWZyYW1lCisgICAgICAgIHdhcyBhZGRlZCBvciByZW1vdmVk
IHdpdGhpbiBhIGJlZm9yZXVubG9hZCBldmVudCBoYW5kbGVyIGlzIGFsc28gYWRkZWQuCisKKyAg
ICAgICAgRnVydGhlcm1vcmUsIGEgdGVzdCB0byBlbnN1cmUgV2ViS2l0IGRvZXMgbm90IGZpcmUg
YSBiZWZvcmV1bmxvYWQgZXZlbnQgdG8gYW4gaWZyYW1lCisgICAgICAgIHRoYXQgaGFzIGJlZW4g
YWRvcHRlZCBieSBhIGRvY3VtZW50IG91dHNpZGUgb2YgdGhlIHVubG9hZGluZyBkb2N1bWVudCBp
cyBhZGRlZC4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtYWRvcHQtc3Vi
ZnJhbWUtdG8tb3V0c2lkZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZl
bnRzL2JlZm9yZS11bmxvYWQtYWRvcHQtc3ViZnJhbWUtdG8tb3V0c2lkZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWFkb3B0LXdpdGhpbi1zdWJmcmFt
ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5s
b2FkLWFkb3B0LXdpdGhpbi1zdWJmcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtZm9yYmlkZGVuLW5hdmln
YXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1p
bi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLW11bHRpcGxlLXN1YmZyYW1lcy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJm
cmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWph
dmFzY3JpcHQtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtcmVtb3ZlLWFuZC1hZGQtc3ViZnJh
bWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5s
b2FkLXJlbW92ZS1hbmQtYWRkLXN1YmZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLWNoaWxkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291
cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1l
LWZhaWwuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9y
ZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMtcGFyZW50Lmh0bWw6IEFkZGVkLgorCiAyMDExLTAxLTA2
ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQ7IHlldCBhbm90aGVyIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZS4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtYWRvcHQtc3ViZnJhbWUtdG8tb3V0
c2lkZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC1hZG9wdC1zdWJmcmFtZS10by1vdXRzaWRlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtYWRvcHQt
c3ViZnJhbWUtdG8tb3V0c2lkZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OSBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgYmVmb3JldW5sb2FkIGV2ZW50IGRvZXMgTk9UIGZpcmUg
Zm9yIGEgc3ViZnJhbWUgdGhhdCBoYXMgYmVlbiBhZG9wdGVkIGJ5IGEgZG9jdW1lbnQgb3V0c2lk
ZSBvZiB0aGUgZnJhbWUgaGllcmFyY2h5IHRoYXQgaXMgYWJvdXQgdG8gdW5sb2FkLgorCitQQVNT
OiBmaXJlZCBvbiBwYXJlbnQKK1BBU1M6IGZpcmVkIG9uIGEKK2Fkb3B0aW5nCithZG9wdGVkCitQ
QVNTOiBmaXJlZCBvbiBiCitET05FCisgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9i
ZWZvcmUtdW5sb2FkLWFkb3B0LXN1YmZyYW1lLXRvLW91dHNpZGUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWFkb3B0LXN1YmZyYW1lLXRv
LW91dHNpZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Jl
Zm9yZS11bmxvYWQtYWRvcHQtc3ViZnJhbWUtdG8tb3V0c2lkZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlz
IHRlc3QgZW5zdXJlcyBiZWZvcmV1bmxvYWQgZXZlbnQgZG9lcyBOT1QgZmlyZSBmb3IgYSBzdWJm
cmFtZSB0aGF0IGhhcyBiZWVuIGFkb3B0ZWQgYnkgYSBkb2N1bWVudCBvdXRzaWRlIG9mIHRoZSBm
cmFtZSBoaWVyYXJjaHkgdGhhdCBpcyBhYm91dCB0byB1bmxvYWQuPC9wPgorPHByZSBpZD0ibG9n
Ij48L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBjcmVhdGVGcmFtZShpZCwg
cGFyZW50KSB7CisgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFt
ZScpOworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHBhcmVudC5jb250ZW50RG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpZnJhbWUpOworICAgIGlmICghaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5
KQorICAgICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmFwcGVuZENoaWxkKGlmcmFtZS5jb250
ZW50RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9keScpKTsKKyAgICBpZnJhbWUuY29udGVudERv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShpZCkpOyAgICAKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKyAgICBpZnJh
bWUuY29udGVudFdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uICgpIHsgZmlyZWQoaWZy
YW1lLmNvbnRlbnRXaW5kb3csIGlkKTsgcmV0dXJuIG51bGw7IH0KKyAgICBpZnJhbWUuc3R5bGUu
d2lkdGggPSAnNzAlJzsKKyAgICBpZnJhbWUuc3R5bGUuaGVpZ2h0ID0gJzQwJSc7CisgICAgcmV0
dXJuIGlmcmFtZTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICB2YXIgbG9nID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOworICAgIGxvZy5pbm5lckhUTUwgKz0gbWVz
c2FnZSArICdcbic7Cit9CisKK3ZhciBleHBlY3RlZE9yZGVyID0gWydwYXJlbnQnLCAnYScsICdi
J107Cit2YXIgaSA9IDA7CisKK2Z1bmN0aW9uIGZpcmVkKGNvbnRlbnRXaW5kb3csIGlkKSB7Cisg
ICAgaWYgKGV4cGVjdGVkT3JkZXJbaV0gPT0gaWQpCisgICAgICAgIGxvZygnUEFTUzogZmlyZWQg
b24gJyArIGlkKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygnRkFJTDogZmlyZWQgb24gJyArIGlk
ICsgJyBidXQgZXhwZWN0ZWQgb24gJyArIGV4cGVjdGVkT3JkZXJbaV0pOworICAgIGkrKzsKKwor
ICAgIGlmIChjb250ZW50V2luZG93ID09IGEuY29udGVudFdpbmRvdykgeworICAgICAgICBsb2co
J2Fkb3B0aW5nJyk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
YWRvcHROb2RlKGFkb3B0ZWUpKTsKKyAgICAgICAgbG9nKCdhZG9wdGVkJyk7CisgICAgfQorfQor
Cit2YXIgY29udGFpbmVyID0gY3JlYXRlRnJhbWUoJ3BhcmVudCcpOwordmFyIGEgPSBjcmVhdGVG
cmFtZSgnYScsIGNvbnRhaW5lcik7Cit2YXIgYWRvcHRlZSA9IGNyZWF0ZUZyYW1lKCdhZG9wdGVl
JywgYSk7Cit2YXIgYiA9IGNyZWF0ZUZyYW1lKCdiJywgY29udGFpbmVyKTsKKworY29udGFpbmVy
Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoaSA9PSBleHBlY3RlZE9yZGVyLmxlbmd0
aCkKKyAgICAgICAgbG9nKCdET05FJyk7CisgICAgZWxzZQorICAgICAgICBsb2coJ1JlY2VpdmVk
ICcgKyBpICsgJyBldmVudHMgYnV0IGV4cGVjdGVkICcgKyBleHBlY3RlZE9yZGVyLmxlbmd0aCk7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorY29udGFpbmVyLnNyYyA9ICdyZXNvdXJjZXMv
YmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sJzsKKworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWFkb3B0LXdpdGhpbi1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtYWRvcHQtd2l0aGluLXN1YmZy
YW1lcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9iZWZvcmUtdW5sb2FkLWFkb3B0LXdpdGhpbi1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3QgZW5zdXJlcyBiZWZvcmV1bmxvYWQg
ZXZlbnQgZmlyZXMgZXhhY3RseSBvbmNlIGluIGEgc3ViZnJhbWUgZXZlbiBpZiB0aGUgZnJhbWUg
d2FzIGFkb3B0ZWQgdG8gYSBmcmFtZSB0aGF0IGFwcGVhcnMgbGF0ZXIgaW4gdGhlIHRyZWUuCisK
K1BBU1M6IGZpcmVkIG9uIHBhcmVudAorUEFTUzogZmlyZWQgb24gYQorUEFTUzogZmlyZWQgb24g
YWRvcHRlZQorYWRvcHRpbmcKK2Fkb3B0ZWQKK1BBU1M6IGZpcmVkIG9uIGIKK0RPTkUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1hZG9wdC13aXRoaW4tc3Vi
ZnJhbWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3Jl
LXVubG9hZC1hZG9wdC13aXRoaW4tc3ViZnJhbWVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWFkb3B0LXdpdGhpbi1zdWJmcmFtZXMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0IGVuc3VyZXMgYmVmb3JldW5sb2FkIGV2ZW50IGZpcmVz
IGV4YWN0bHkgb25jZSBpbiBhIHN1YmZyYW1lIGV2ZW4gaWYgdGhlIGZyYW1lIHdhcyBhZG9wdGVk
IHRvIGEgZnJhbWUgdGhhdCBhcHBlYXJzIGxhdGVyIGluIHRoZSB0cmVlLjwvcD4KKzxwcmUgaWQ9
ImxvZyI+PC9wcmU+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlRnJhbWUo
aWQsIHBhcmVudCkgeworICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdp
ZnJhbWUnKTsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBwYXJlbnQuY29udGVudERvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpZCkpOyAg
ICAKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lLmNv
bnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKyAgICBpZnJhbWUuY29udGVudFdp
bmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uICgpIHsgZmlyZWQoaWZyYW1lLmNvbnRlbnRX
aW5kb3csIGlkKTsgcmV0dXJuIG51bGw7IH0KKyAgICBpZnJhbWUuc3R5bGUud2lkdGggPSAnNzAl
JzsKKyAgICBpZnJhbWUuc3R5bGUuaGVpZ2h0ID0gJzQwJSc7CisgICAgcmV0dXJuIGlmcmFtZTsK
K30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICB2YXIgbG9nID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2xvZycpOworICAgIGxvZy5pbm5lckhUTUwgKz0gbWVzc2FnZSArICdcbic7
Cit9CisKK3ZhciBleHBlY3RlZE9yZGVyID0gWydwYXJlbnQnLCAnYScsICdhZG9wdGVlJywgJ2In
XTsKK3ZhciBpID0gMDsKKworZnVuY3Rpb24gZmlyZWQoY29udGVudFdpbmRvdywgaWQpIHsKKyAg
ICBpZiAoZXhwZWN0ZWRPcmRlcltpXSA9PSBpZCkKKyAgICAgICAgbG9nKCdQQVNTOiBmaXJlZCBv
biAnICsgaWQpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCdGQUlMOiBmaXJlZCBvbiAnICsgaWQg
KyAnIGJ1dCBleHBlY3RlZCBvbiAnICsgZXhwZWN0ZWRPcmRlcltpXSk7CisgICAgaSsrOworCisg
ICAgaWYgKGNvbnRlbnRXaW5kb3cgPT0gYWRvcHRlZS5jb250ZW50V2luZG93KSB7CisgICAgICAg
IGxvZygnYWRvcHRpbmcnKTsKKyAgICAgICAgYi5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChiLmNvbnRlbnREb2N1bWVudC5hZG9wdE5vZGUoYWRvcHRlZSkpOworICAgICAgICBsb2co
J2Fkb3B0ZWQnKTsKKyAgICB9Cit9CisKK3ZhciBjb250YWluZXIgPSBjcmVhdGVGcmFtZSgncGFy
ZW50Jyk7Cit2YXIgYSA9IGNyZWF0ZUZyYW1lKCdhJywgY29udGFpbmVyKTsKK3ZhciBhZG9wdGVl
ID0gY3JlYXRlRnJhbWUoJ2Fkb3B0ZWUnLCBhKTsKK3ZhciBiID0gY3JlYXRlRnJhbWUoJ2InLCBj
b250YWluZXIpOworCitjb250YWluZXIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgIGlmIChp
ID09IGV4cGVjdGVkT3JkZXIubGVuZ3RoKQorICAgICAgICBsb2coJ0RPTkUnKTsKKyAgICBlbHNl
CisgICAgICAgIGxvZygnUmVjZWl2ZWQgJyArIGkgKyAnIGV2ZW50cyBidXQgZXhwZWN0ZWQgJyAr
IGV4cGVjdGVkT3JkZXIubGVuZ3RoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Citjb250
YWluZXIuc3JjID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0
aW9uLmh0bWwnOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtZm9yYmlkZGVuLW5hdmlnYXRpb24tZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxv
YWQtZm9yYmlkZGVuLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorVGhpcyB0ZXN0IGVuc3Vy
ZXMgbmF2aWdhdGlvbiBpcyBmb3JiaWRkZW4gd2hpbGUgYmVmb3JldW5sb2FkIGV2ZW50IGlzIGJl
aW5nIGZpcmVkLiBZb3Ugc2hvdWxkIHNlZSBQQVNTIDEvMiBhbmQgUEFTUyAyLzIgYmVsb3c6CisK
K1BBU1MgMS8yCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFt
ZTAtLT4tLT4nCistLS0tLS0tLQorUEFTUzogMi8yCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2aWdh
dGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3Jl
LXVubG9hZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgZW5z
dXJlcyBuYXZpZ2F0aW9uIGlzIGZvcmJpZGRlbiB3aGlsZSBiZWZvcmV1bmxvYWQgZXZlbnQgaXMg
YmVpbmcgZmlyZWQuIFlvdSBzaG91bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBiZWxvdzo8
L3A+Cis8cHJlIGlkPSJsb2ciPkZBSUw8L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOworCitmdW5jdGlvbiB0ZXN0KGlmcmFtZSkg
eworICAgIGlmIChpZnJhbWUuZG9uZSkgeworICAgICAgICBpZiAoaWZyYW1lLmhhbGZQYXNzZWQp
IHsKKyAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVz
b3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbCc7ICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZnJhbWUuaGFsZlBhc3NlZCA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWZyYW1lLmRvbmUgPSB0cnVlOworICAgIGlm
cmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxv
YWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGZpcmVkKGNvbnRlbnRX
aW5kb3cpIHsKKyAgICBsb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLWZhaWwuaHRtbCc7CisgICAgY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID0g
J3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWZhaWwuaHRtbCc7CisgICAgbG9n
LmlubmVySFRNTCA9ICdQQVNTIDEvMic7CisgICAgY29udGVudFdpbmRvdy5mcmFtZUVsZW1lbnQu
aGFsZlBhc3NlZCA9IHRydWU7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRlc3Qo
dGhpcyk7IiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0
bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVs
dGlwbGUtc3ViZnJhbWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3RzIGJlZm9yZXVubG9h
ZCBldmVudCBpbiBtdWx0aXBsZSBzdWJmcmFtZXMuIFlvdSBzaG91bGQgc2VlIFBBU1MgYmVsb3c6
CisKK1BBU1MKKyAgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2Fk
LWluLW11bHRpcGxlLXN1YmZyYW1lcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLW11bHRp
cGxlLXN1YmZyYW1lcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIGJlZm9yZXVubG9hZCBldmVu
dCBpbiBtdWx0aXBsZSBzdWJmcmFtZXMuIFlvdSBzaG91bGQgc2VlIFBBU1MgYmVsb3c6PC9wPgor
PHByZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOworCitmdW5jdGlvbiB0ZXN0KGlmcmFtZSkgewor
ICAgIGlmIChpZnJhbWUuZG9uZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmcmFtZS5kb25lID0g
dHJ1ZTsKKyAgICBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNl
cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwnOworfQorCit2YXIgbnVtYmVy
T2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcyA9IDA7Cit2YXIgbnVtYmVyT2ZGcmFtZXMgPSAzOwor
CitmdW5jdGlvbiBsb2dFcnJvcigpIHsKKyAgICBsb2cuaW5uZXJIVE1MID0gJ0ZBSUw6ICcgKyBu
dW1iZXJPZkJlZm9yZVVubG9hZEluU3ViZnJhbWVzICsgJyBiZWZvcmV1bmxvYWQgZXZlbnRzIGFy
ZSBmaXJlZCBidXQgZXhwZWN0ZWQgJyArIG51bWJlck9mRnJhbWVzICsgJyBldmVudHMnOworfQor
Citsb2dFcnJvcigpOworCitmdW5jdGlvbiBmaXJlZChjb250ZW50V2luZG93KSB7CisgICAgbnVt
YmVyT2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcysrOworICAgIGlmIChudW1iZXJPZkJlZm9yZVVu
bG9hZEluU3ViZnJhbWVzID09IG51bWJlck9mRnJhbWVzKSB7CisgICAgICAgIGxvZy5pbm5lckhU
TUwgPSAnUEFTUyc7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorICAg
IGVsc2UKKyAgICAgICAgbG9nRXJyb3IoKTsKKyAgICBjb250ZW50V2luZG93LmZyYW1lRWxlbWVu
dC5maXJlZCA9IHRydWU7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRlc3QodGhp
cykiIHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+
PC9pZnJhbWU+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCh0aGlzKSIgc3JjPSJyZXNvdXJjZXMvYmVm
b3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sIj48L2lmcmFtZT4KKzxpZnJhbWUgb25s
b2FkPSJ0ZXN0KHRoaXMpIiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1l
LWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJm
cmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5IEBACitUaGlzIHRlc3RzIGJlZm9yZXVubG9hZCBldmVudCBpbiBzdWJmcmFtZXMu
IFlvdSBzaG91bGQgc2VlIFBBU1MgYmVsb3c6CisKK1BBU1MKKworCistLS0tLS0tLQorRnJhbWU6
ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0tPicKKy0tLS0tLS0tCitDaGlsZCBsb2Fk
ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZy
YW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVu
bG9hZC1pbi1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3Rz
IGJlZm9yZXVubG9hZCBldmVudCBpbiBzdWJmcmFtZXMuIFlvdSBzaG91bGQgc2VlIFBBU1MgYmVs
b3c6PC9wPgorPHByZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9nID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOwordmFyIGRvbmUgPSBmYWxzZTsKKworZnVu
Y3Rpb24gdGVzdCgpIHsKKyAgICBpZiAoZG9uZSkgeworICAgICAgICAvLyBsb2cncyBub3QgaGF2
aW5nIGFueSBjb250ZW50IGltcGxpZXMgdGhhdCBsb2FkIGV2ZW50IHdhcyBkaXNwYXRjaGVkIGZv
ciB0aGUgc2Vjb25kIHRpbWUgYmVmb3JlIGJlZm9yZXVubG9hZCBpcyBkaXNwYXRjaGVkLgorICAg
ICAgICBpZiAoIWxvZy5pbm5lckhUTUwubGVuZ3RoKQorICAgICAgICAgICAgbG9nLmlubmVySFRN
TCA9ICdGQUlMOiBiZWZvcmV1bmxvYWQgZXZlbnQgd2FzIG5ldmVyIGRpc3BhdGNoZWQuXG4nOwor
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGRvbmUgPSB0cnVlOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJh
bWUnKVswXS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11
bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGZpcmVkKCkgewor
ICAgIGlmICghbG9nLmlubmVySFRNTC5sZW5ndGgpCisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAn
UEFTU1xuJzsKKyAgICBlbHNlCisgICAgICAgIGxvZy5pbm5lckhUTUwgPSAnRkFJTDogYmVmb3Jl
dW5sb2FkIGV2ZW50IHdhcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBzZWNvbmQgbG9hZCBldmVudC4n
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgb25sb2Fk
PSJ0ZXN0KCkiIHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQu
aHRtbCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3JpcHQtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZh
c2NyaXB0LW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHNl
dHRpbmcgbG9jYXRpb24uaHJlZiB3aXRoIGphdmFzY3JpcHQgc2NoZW1lIHByb3Blcmx5IGV4ZWN1
dGVzIHRoZSBzY3JpcHQgZXZlbiB3aGlsZSBiZWZvcmV1bmxvYWQgZXZlbnQgaXMgYmVpbmcgZmly
ZWQuIFlvdSBzaG91bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBiZWxvdzoKKworUEFTUwor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3JpcHQt
bmF2aWdhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Jl
Zm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3JpcHQtbmF2aWdhdGlv
bi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgZW5zdXJlcyBzZXR0aW5nIGxvY2F0aW9uLmhyZWYg
d2l0aCBqYXZhc2NyaXB0IHNjaGVtZSAgcHJvcGVybHkgZXhlY3V0ZXMgdGhlIHNjcmlwdCBldmVu
IHdoaWxlIGJlZm9yZXVubG9hZCBldmVudCBpcyBiZWluZyBmaXJlZC4gWW91IHNob3VsZCBzZWUg
UEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJlbG93OjwvcD4KKzxwcmUgaWQ9ImxvZyI+RkFJTDwvcHJl
PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbG9nJyk7CisKK2Z1bmN0aW9uIHRlc3QoaWZyYW1lKSB7CisgICAgaWYgKGlmcmFtZS5kb25l
KQorICAgICAgICByZXR1cm47CisgICAgaWZyYW1lLmRvbmUgPSB0cnVlOworICAgIGlmcmFtZS5j
b250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4t
c3ViZnJhbWUtY2hpbGQuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKSB7CisgICAgbG9nLmlu
bmVySFRNTCA9ICdQQVNTJzsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9u
IGZpcmVkKGNvbnRlbnRXaW5kb3cpIHsKKyAgICBsb2NhdGlvbi5ocmVmID0gJ2phdmFzY3JpcHQ6
dG9wLmRvbmUoKSc7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRlc3QodGhpcyk7
IiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwv
aWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC1yZW1vdmUtYW5kLWFkZC1zdWJmcmFtZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1yZW1vdmUtYW5k
LWFkZC1zdWJmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXJlbW92ZS1hbmQtYWRkLXN1YmZyYW1lLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUaGlzIHRlc3QgZW5zdXJlcyBiZWZv
cmV1bmxvYWQgZXZlbnQgZG9lcyBub3QgZmlyZSBmb3Igc3ViZnJhbWVzIHRoYXQgaGFzIGJlZW4g
cmVtb3ZlZCBmcm9tIHRoZSBET00gd2l0aGluIGEgYmVmb3JldW5sb2FkIGV2ZW50IGhhbmRsZXIu
IEFsc28gZW5zdXJlcyB0aGUgZXZlbnQgZG9lc24ndCBmaXJlIGZvciBzdWJmcmFtZXMgYWRkZWQg
d2l0aGluIGEgYmVmb3JldW5sb2FkIGV2ZW50IGhhbmRsZXIuIFRoZSBsYXR0ZXIgYmVoYXZpb3Ig
bWF0Y2hlcyBNU0lFLgorCitQQVNTOiBmaXJlZCBvbiBwYXJlbnQKK1BBU1M6IGZpcmVkIG9uIGEK
K1BBU1M6IGZpcmVkIG9uIGMKK0RPTkUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC1yZW1vdmUtYW5kLWFkZC1zdWJmcmFtZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtcmVtb3ZlLWFuZC1hZGQtc3Vi
ZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9y
ZS11bmxvYWQtcmVtb3ZlLWFuZC1hZGQtc3ViZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0
IGVuc3VyZXMgYmVmb3JldW5sb2FkIGV2ZW50IGRvZXMgbm90IGZpcmUgZm9yIHN1YmZyYW1lcyB0
aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRE9NIHdpdGhpbiBhIGJlZm9yZXVubG9hZCBl
dmVudCBoYW5kbGVyLiBBbHNvIGVuc3VyZXMgdGhlIGV2ZW50IGRvZXNuJ3QgZmlyZSBmb3Igc3Vi
ZnJhbWVzIGFkZGVkIHdpdGhpbiBhIGJlZm9yZXVubG9hZCBldmVudCBoYW5kbGVyLiBUaGUgbGF0
dGVyIGJlaGF2aW9yIG1hdGNoZXMgTVNJRS48L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNj
cmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUZyYW1lKGlkLCBwYXJlbnQpIHsKKyAg
ICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgaWZy
YW1lLmlkID0gaWQ7CisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgcGFyZW50LmNvbnRlbnREb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgaWYgKCFpZnJhbWUuY29udGVudERvY3Vt
ZW50LmJvZHkpCisgICAgICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYXBwZW5kQ2hpbGQoaWZy
YW1lLmNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5JykpOworICAgIGlmcmFtZS5j
b250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUuY29udGVudERvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKGlkKSk7ICAgIAorICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpZnJhbWUuY29udGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOwor
ICAgIGlmcmFtZS5jb250ZW50V2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkgeyBm
aXJlZChpZnJhbWUuY29udGVudFdpbmRvdywgaWQpOyByZXR1cm4gbnVsbDsgfQorICAgIGlmcmFt
ZS5zdHlsZS53aWR0aCA9ICc3MCUnOworICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnNDAlJzsK
KyAgICByZXR1cm4gaWZyYW1lOworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIHZh
ciBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7CisgICAgbG9nLmlubmVySFRN
TCArPSBtZXNzYWdlICsgJ1xuJzsKK30KKwordmFyIGV4cGVjdGVkT3JkZXIgPSBbJ3BhcmVudCcs
ICdhJywgJ2MnXTsKK3ZhciBpID0gMDsKKworZnVuY3Rpb24gZmlyZWQoY29udGVudFdpbmRvdywg
aWQpIHsKKyAgICBpZiAoZXhwZWN0ZWRPcmRlcltpXSA9PSBpZCkKKyAgICAgICAgbG9nKCdQQVNT
OiBmaXJlZCBvbiAnICsgaWQpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCdGQUlMOiBmaXJlZCBv
biAnICsgaWQgKyAnIGJ1dCBleHBlY3RlZCBvbiAnICsgZXhwZWN0ZWRPcmRlcltpXSk7CisgICAg
aSsrOworCisgICAgaWYgKGNvbnRlbnRXaW5kb3cgPT0gYS5jb250ZW50V2luZG93KSB7CisgICAg
ICAgIGIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKTsKKyAgICAgICAgY3JlYXRlRnJhbWUoJ2Qn
LCBjb250YWluZXIpOworICAgIH0KK30KKwordmFyIGNvbnRhaW5lciA9IGNyZWF0ZUZyYW1lKCdw
YXJlbnQnKTsKK3ZhciBhID0gY3JlYXRlRnJhbWUoJ2EnLCBjb250YWluZXIpOwordmFyIGIgPSBj
cmVhdGVGcmFtZSgnYicsIGNvbnRhaW5lcik7Cit2YXIgYyA9IGNyZWF0ZUZyYW1lKCdjJywgY29u
dGFpbmVyKTsKKworY29udGFpbmVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoaSA9
PSBleHBlY3RlZE9yZGVyLmxlbmd0aCkKKyAgICAgICAgbG9nKCdET05FJyk7CisgICAgZWxzZQor
ICAgICAgICBsb2coJ1JlY2VpdmVkICcgKyBpICsgJyBldmVudHMgYnV0IGV4cGVjdGVkICcgKyBl
eHBlY3RlZE9yZGVyLmxlbmd0aCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorY29udGFp
bmVyLnNyYyA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlv
bi5odG1sJzsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXJlbW92ZS1hbmQtYWRk
LXN1YmZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1l
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVm
b3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitUaGlzIHRlc3QgZW5zdXJlcyBi
ZWZvcmV1bmxvYWQgZXZlbnQgZmlyZXMgaW4gYWxsIHN1YmZyYW1lcyB3aGVuIGEgcGFyZW50IGZy
YW1lIGlzIG5hdmlnYXRlZC4gWW91IHNob3VsZCBzZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJl
bG93OgorCitQQVNTIDEvMgorCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK1BBU1M6IDIvMgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxv
YWQtd2l0aC1zdWJmcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0IGVuc3VyZXMgYmVmb3Jl
dW5sb2FkIGV2ZW50IGZpcmVzIGluIGFsbCBzdWJmcmFtZXMgd2hlbiBhIHBhcmVudCBmcmFtZSBp
cyBuYXZpZ2F0ZWQuIFlvdSBzaG91bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBiZWxvdzo8
L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7Cit2YXIgbnVtYmVyT2ZCZWZvcmVVbmxvYWRJblN1
YmZyYW1lcyA9IDA7Cit2YXIgbnVtYmVyT2ZGcmFtZXMgPSAzOworCitmdW5jdGlvbiB0ZXN0KGlm
cmFtZSkgeworICAgIGlmIChpZnJhbWUuZG9uZSkgeworICAgICAgICBpZiAobnVtYmVyT2ZCZWZv
cmVVbmxvYWRJblN1YmZyYW1lcyA9PSBudW1iZXJPZkZyYW1lcykKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZnJhbWUuZG9uZSA9IHRydWU7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24u
aHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5o
dG1sJzsKK30KKworZnVuY3Rpb24gbG9nRXJyb3IoKSB7CisgICAgbG9nLmlubmVySFRNTCA9ICdG
QUlMOiAnICsgbnVtYmVyT2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcyArICcgYmVmb3JldW5sb2Fk
IGV2ZW50cyBhcmUgZmlyZWQgYnV0IGV4cGVjdGVkICcgKyBudW1iZXJPZkZyYW1lcyArICcgZXZl
bnRzJzsKK30KKworbG9nRXJyb3IoKTsKKworZnVuY3Rpb24gZmlyZWQoY29udGVudFdpbmRvdykg
eworICAgIG51bWJlck9mQmVmb3JlVW5sb2FkSW5TdWJmcmFtZXMrKzsKKyAgICBpZiAobnVtYmVy
T2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcyA9PSBudW1iZXJPZkZyYW1lcykKKyAgICAgICAgbG9n
LmlubmVySFRNTCA9ICdQQVNTIDEvMlxuJzsKKyAgICBlbHNlCisgICAgICAgIGxvZ0Vycm9yKCk7
CisgICAgY29udGVudFdpbmRvdy5mcmFtZUVsZW1lbnQuZmlyZWQgPSB0cnVlOworfQorCis8L3Nj
cmlwdD4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRoaXMpIiBzcmM9InJlc291cmNlcy9iZWZvcmUt
dW5sb2FkLXdpdGgtc3ViZnJhbWVzLXBhcmVudC5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUt
dW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keSBvbmJlZm9yZXVubG9hZD0idG9wLmZp
cmVkKHdpbmRvdyk7IHJldHVybiBudWxsOyI+CitDaGlsZCBsb2FkZWQuCis8c2NyaXB0PgorCitp
ZiAodG9wLmxvYWRlZCkKKyAgICB0b3AubG9hZGVkKCk7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11
bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0
aW5hdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVz
b3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5Pgor
UEFTUzogMi8yCis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVm
b3JlLXVubG9hZC1pbi1zdWJmcmFtZS1mYWlsLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2Jl
Zm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CitGQUlMCis8c2NyaXB0Pgor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZy
YW1lcy1wYXJlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9y
ZXNvdXJjZXMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1wYXJlbnQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2Fk
LXdpdGgtc3ViZnJhbWVzLXBhcmVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJiZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPGlmcmFtZSBzcmM9ImJlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0i
YmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78268</attachid>
            <date>2011-01-07 14:06:15 -0800</date>
            <delta_ts>2011-01-07 14:10:26 -0800</delta_ts>
            <desc>added one more test per abarth&apos;s request</desc>
            <filename>bug-19418-20110107140614.patch</filename>
            <type>text/plain</type>
            <size>37884</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTEtMDEtMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgb25i
ZWZvcmV1bmxvYWQgaXMgYnJva2VuIGZvciBmcmFtZXNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4CisKKyAgICAgICAgQWRkZWQgYmVmb3Jl
dW5sb2FkIGV2ZW50IHN1cHBvcnQgZm9yIHN1YiBmcmFtZXMuIFdlYktpdCdzIGltcGxlbWVudGF0
aW9uIHRyaWVzIHRvIG1hdGNoCisgICAgICAgIHRoYXQgb2YgSW50ZXJuZXQgRXhwbG9yZXIgYXMg
bXVjaCBhcyBwb3NzaWJsZS4gYmVmb3JldW5sb2FkIGV2ZW50IGlzIGZpcmVkIGZvciBlYWNoIGFu
ZAorICAgICAgICBldmVyeSBkZXNjZW5kZW50IG9mIGEgZnJhbWUgdGhhdCBpcyBhYm91dCB0byBu
YXZpZ2F0ZS4KKworICAgICAgICBXaGVuIGEgdmFsdWUgb3RoZXIgdGhhbiBudWxsIGlzIHJldHVy
bmVkIGJ5IGEgYmVmb3JldW5sb2FkIGhhbmRsZXIsIGEgY29uZmlybWF0aW9uIGRpYWxvZworICAg
ICAgICBpcyBzaG93biBmb3IgZWFjaCBoYW5kbGVyIChjYWxscyBjaHJvbWUncyBydW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWwpIGp1c3QgbGlrZSBpdCBpcyBkb25lCisgICAgICAgIGZvciBtYWlu
IGZyYW1lcy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgbmF2aWdhdGlvbiBpcyBmb3JiaWRkZW4g
d2hpbGUgYmVmb3JldW5sb2FkIGhhbmRsZXJzIGFyZSBiZWluZyBjYWxsZWQuCisgICAgICAgIFNl
dHRpbmcgdmFsdWVzIHRvIGxvY2F0aW9uLmhyZWYsIGxvY2F0aW9uLnJlbG9hZCwgYW5kIG90aGVy
IG1lYW5zIG9mIG5hdmlnYXRpb25zIGFyZSB0aHVzCisgICAgICAgIGlnbm9yZWQgd2hpbGUgYmVm
b3JldW5sb2FkIGV2ZW50IGhhbmRsZXIgaXMgYmVpbmcgcmFuLCBtYXRjaGluZyBJbnRlcm5ldCBF
eHBsb3JlcidzIGJlaGF2aW9yLgorCisgICAgICAgIEJlY2F1c2UgbmF2aWdhdGlvbiBuZWVkcyB0
byBwcmV2ZW50ZWQgZ2xvYmFsbHksIE5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZCBp
cyBhZGRlZCB0bworICAgICAgICBOYXZpZ2F0aW9uU2NoZWR1bGVyLmgsIHdoaWNoIGlzIGluc3Rh
bnRpYXRlZCBhcyBhIFJBSUkgb2JqZWN0IGluIEZyYW1lTG9hZGVyOjpzaG91bGRDbG9zZS4KKwor
ICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1hZG9wdC1zdWJmcmFtZS10
by1vdXRzaWRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQt
YWRvcHQtd2l0aGluLXN1YmZyYW1lcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9i
ZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbAorICAg
ICAgICAgICAgICAgZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRp
b24uaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1yZW1vdmUt
YW5kLWFkZC1zdWJmcmFtZS5odG1sCisgICAgICAgICAgICAgICBmYWN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLXJlbW92ZS1pdHNlbGYuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvYmVm
b3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy5odG1sCisKKyAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzaG91bGRDbG9zZSk6IENh
bGxzIGZpcmVCZWZvcmVVbmxvYWRFdmVudCBvbiBtX2ZyYW1lIGFuZCBtX2ZyYW1lJ3MKKyAgICAg
ICBkZXNjZW5kZW50cy4gUmV0dXJucyB0cnVlIG9ubHkgaWYgZXZlcnkgY2FsbCB0byBmaXJlQmVm
b3JlVW5sb2FkRXZlbnQgcmV0dXJuZWQgdHJ1ZS4KKyAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmZpcmVCZWZvcmVVbmxvYWRFdmVudCk6IEZpcmVzIGEgYmVmb3JldW5sb2FkIGV2ZW50IGFu
ZCBjYWxscworICAgICAgIGNocm9tZSdzIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCBhcyBu
ZWVkZWQuCisgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5h
dmlnYXRpb25Qb2xpY3kpOiBDYWxscyBzaG91bGRDbG9zZSBmb3IgYWxsIGZyYW1lcy4KKyAgICAg
ICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICogbG9hZGVyL05hdmlnYXRpb25TY2hl
ZHVsZXIuY3BwOgorICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzaG91bGRT
Y2hlZHVsZU5hdmlnYXRpb24pOiBDaGVja3MgdGhlIG51bGxpdHkgb2YgUGFnZSBhbmQgY2FsbHMK
KyAgICAgICBOYXZpZ2F0aW9uRGlzYWJsZXJGb3JCZWZvcmVVbmxvYWQ6OmlzTmF2aWdhdGlvbkFs
bG93ZWQgd2hlbiB1cmwgaXMgbm90IGphdmFzY3JpcHQgc2NoZW1lLgorICAgICAgIChXZWJDb3Jl
OjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZVJlZGlyZWN0KTogQ2FsbHMgc2hvdWxkU2No
ZWR1bGVOYXZpZ2F0aW9uLgorICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpz
Y2hlZHVsZUxvY2F0aW9uQ2hhbmdlKTogRGl0dG8uCisgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRp
b25TY2hlZHVsZXI6OnNjaGVkdWxlUmVmcmVzaCk6IERpdHRvLgorICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKTogRGl0dG8uCisg
ICAgICAgKiBsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5oOgorICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0aW9uRGlzYWJsZXJGb3JCZWZvcmVVbmxvYWQ6Ok5hdmlnYXRpb25EaXNhYmxlckZvckJl
Zm9yZVVubG9hZCk6IERpc2FibGVzIG5hdmlnYXRpb24uCisgICAgICAgKFdlYkNvcmU6Ok5hdmln
YXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZDo6fk5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9y
ZVVubG9hZCk6IEVuYWJsZXMgbmF2aWdhdGlvbgorICAgICAgIHdoZW4gY2FsbGVkIG9uIHRoZSBs
YXN0IGluc3RhbmNlIG9mIE5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZC4KKyAgICAg
ICAoV2ViQ29yZTo6TmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5sb2FkOjppc05hdmlnYXRp
b25BbGxvd2VkKTogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZQorICAgICAg
IG9mIE5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZCBsZWZ0IG9uIHRoZSBzdGFjay4K
KwogMjAxMS0wMS0wNiAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCShyZXZpc2lvbiA3NTEzMSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg2MiwxMyArMjg2MiwzOSBAQCBib29sIEZyYW1lTG9hZGVyOjpz
aG91bGRDbG9zZSgpCiAgICAgaWYgKCFjaHJvbWUgfHwgIWNocm9tZS0+Y2FuUnVuQmVmb3JlVW5s
b2FkQ29uZmlybVBhbmVsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgLy8gU3RvcmUg
YWxsIHJlZmVyZW5jZXMgdG8gZWFjaCBzdWJmcmFtZSBpbiBhZHZhbmNlIHNpbmNlIGJlZm9yZXVu
bG9hZCdzIGV2ZW50IGhhbmRsZXIgbWF5IG1vZGlmeSBmcmFtZQorICAgIFZlY3RvcjxSZWZQdHI8
RnJhbWU+ID4gdGFyZ2V0RnJhbWVzOworICAgIHRhcmdldEZyYW1lcy5hcHBlbmQobV9mcmFtZSk7
CisgICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fZnJhbWUpKQorICAg
ICAgICB0YXJnZXRGcmFtZXMuYXBwZW5kKGNoaWxkKTsKKworICAgIGJvb2wgc2hvdWxkQ2xvc2Ug
PSBmYWxzZTsKKyAgICB7CisgICAgICAgIE5hdmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9h
ZCBuYXZpZ2F0aW9uRGlzYWJsZXI7CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciAo
aSA9IDA7IGkgPCB0YXJnZXRGcmFtZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgh
dGFyZ2V0RnJhbWVzW2ldLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCF0YXJnZXRGcmFtZXNbaV0tPmxv
YWRlcigpLT5maXJlQmVmb3JlVW5sb2FkRXZlbnQoY2hyb21lKSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID09IHRhcmdldEZyYW1lcy5zaXplKCkp
CisgICAgICAgICAgICBzaG91bGRDbG9zZSA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHNo
b3VsZENsb3NlOworfQorCitib29sIEZyYW1lTG9hZGVyOjpmaXJlQmVmb3JlVW5sb2FkRXZlbnQo
Q2hyb21lKiBjaHJvbWUpCit7CiAgICAgRE9NV2luZG93KiBkb21XaW5kb3cgPSBtX2ZyYW1lLT5l
eGlzdGluZ0RPTVdpbmRvdygpOwogICAgIGlmICghZG9tV2luZG93KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpOwotICAgIEhUTUxFbGVtZW50KiBib2R5ID0gZG9jdW1lbnQtPmJvZHkoKTsKLSAgICBpZiAo
IWJvZHkpCisgICAgaWYgKCFkb2N1bWVudC0+Ym9keSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBCZWZv
cmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CkBAIC0yODk4LDggKzI5MjQsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5hdmlnCiAgICAgLy8gICAgMSkgTmF2aWdhdGlvbiBw
b2xpY3kgZGVsZWdhdGUgc2FpZCB3ZSBjYW4ndCBzbyByZXF1ZXN0IGlzIG5pbC4gQSBwcmltYXJ5
IGNhc2Ugb2YgdGhpcyAKICAgICAvLyAgICAgICBpcyB0aGUgdXNlciByZXNwb25kaW5nIENhbmNl
bCB0byB0aGUgZm9ybSByZXBvc3QgbmFnIHNoZWV0LgogICAgIC8vICAgIDIpIFVzZXIgcmVzcG9u
ZGVkIENhbmNlbCB0byBhbiBhbGVydCBwb3BwZWQgdXAgYnkgdGhlIGJlZm9yZSB1bmxvYWQgZXZl
bnQgaGFuZGxlci4KLSAgICAvLyBUaGUgImJlZm9yZSB1bmxvYWQiIGV2ZW50IGhhbmRsZXIgcnVu
cyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZS4KLSAgICBib29sIGNhbkNvbnRpbnVlID0gc2hvdWxk
Q29udGludWUgJiYgKCFpc0xvYWRpbmdNYWluRnJhbWUoKSB8fCBzaG91bGRDbG9zZSgpKTsKKyAg
ICBib29sIGNhbkNvbnRpbnVlID0gc2hvdWxkQ29udGludWUgJiYgc2hvdWxkQ2xvc2UoKTsKIAog
ICAgIGlmICghY2FuQ29udGludWUpIHsKICAgICAgICAgLy8gSWYgd2Ugd2VyZSB3YWl0aW5nIGZv
ciBhIHF1aWNrIHJlZGlyZWN0LCBidXQgdGhlIHBvbGljeSBkZWxlZ2F0ZSBkZWNpZGVkIHRvIGln
bm9yZSBpdCwgdGhlbiB3ZSAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNzUxMzEp
CisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2
ICs1Myw3IEBAIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogY2xhc3MgQ2FjaGVkRnJh
bWVCYXNlOwogY2xhc3MgQ2FjaGVkUGFnZTsKIGNsYXNzIENhY2hlZFJlc291cmNlOworY2xhc3Mg
Q2hyb21lOwogY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBE
b2N1bWVudExvYWRlcjsKQEAgLTM2MSw2ICszNjIsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIGNhbGxDb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kodm9pZCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51
ZSk7CiAgICAgc3RhdGljIHZvaWQgY2FsbENvbnRpbnVlTG9hZEFmdGVyTmV3V2luZG93UG9saWN5
KHZvaWQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNv
bnN0IFN0cmluZyYgZnJhbWVOYW1lLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgYm9vbCBzaG91
bGRDb250aW51ZSk7CiAgICAgc3RhdGljIHZvaWQgY2FsbENvbnRpbnVlRnJhZ21lbnRTY3JvbGxB
ZnRlck5hdmlnYXRpb25Qb2xpY3kodm9pZCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51ZSk7CisgICAgCisgICAgYm9vbCBm
aXJlQmVmb3JlVW5sb2FkRXZlbnQoQ2hyb21lKik7CiAKICAgICB2b2lkIGNvbnRpbnVlTG9hZEFm
dGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4sIGJvb2wgc2hvdWxkQ29udGludWUpOwogICAgIHZvaWQgY29udGludWVMb2FkQWZ0
ZXJOZXdXaW5kb3dQb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3Jt
U3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYs
IGJvb2wgc2hvdWxkQ29udGludWUpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNj
aGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVk
dWxlci5jcHAJKHJldmlzaW9uIDc1MTMxKQorKysgV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNj
aGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCit1bnNpZ25lZCBOYXZpZ2F0aW9uRGlzYWJsZXJGb3JCZWZvcmVVbmxvYWQ6
OnNfbmF2aWdhdGlvbkRpc2FibGVDb3VudCA9IDA7CisKIGNsYXNzIFNjaGVkdWxlZE5hdmlnYXRp
b24gOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIFNjaGVkdWxlZE5hdmlnYXRp
b24oZG91YmxlIGRlbGF5LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExp
c3QsIGJvb2wgd2FzRHVyaW5nTG9hZCwgYm9vbCBpc0xvY2F0aW9uQ2hhbmdlKQpAQCAtMjYzLDkg
KzI2NSwxOSBAQCB2b2lkIE5hdmlnYXRpb25TY2hlZHVsZXI6OmNsZWFyKCkKICAgICBtX3JlZGly
ZWN0LmNsZWFyKCk7CiB9CiAKK2lubGluZSBib29sIE5hdmlnYXRpb25TY2hlZHVsZXI6OnNob3Vs
ZFNjaGVkdWxlTmF2aWdhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2Uo
KTsKK30KKworaW5saW5lIGJvb2wgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2hvdWxkU2NoZWR1bGVO
YXZpZ2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAgIHJldHVybiBzaG91bGRT
Y2hlZHVsZU5hdmlnYXRpb24oKSAmJiAocHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSB8fCBOYXZp
Z2F0aW9uRGlzYWJsZXJGb3JCZWZvcmVVbmxvYWQ6OmlzTmF2aWdhdGlvbkFsbG93ZWQoKSk7Cit9
CisKIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVSZWRpcmVjdChkb3VibGUgZGVs
YXksIGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAg
IGlmICghc2hvdWxkU2NoZWR1bGVOYXZpZ2F0aW9uKHVybCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoZGVsYXkgPCAwIHx8IGRlbGF5ID4gSU5UX01BWCAvIDEwMDApCiAgICAgICAgIHJldHVy
bjsKQEAgLTI5Nyw3ICszMDksNyBAQCBib29sIE5hdmlnYXRpb25TY2hlZHVsZXI6Om11c3RMb2Nr
QmFja0ZvCiAKIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxlcjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5n
ZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9j
a0JhY2tGb3J3YXJkTGlzdCkKIHsKLSAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKKyAgICBpZiAo
IXNob3VsZFNjaGVkdWxlTmF2aWdhdGlvbih1cmwpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM0NCw3ICszNTYsNyBAQCB2b2lk
IE5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlRm9ybVN1CiAKIHZvaWQgTmF2aWdhdGlvblNj
aGVkdWxlcjo6c2NoZWR1bGVSZWZyZXNoKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkK
KyAgICBpZiAoIXNob3VsZFNjaGVkdWxlTmF2aWdhdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgY29uc3QgS1VSTCYgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOwogICAgIGlmICh1
cmwuaXNFbXB0eSgpKQpAQCAtMzU1LDcgKzM2Nyw3IEBAIHZvaWQgTmF2aWdhdGlvblNjaGVkdWxl
cjo6c2NoZWR1bGVSZWZyZXMKIAogdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjpzY2hlZHVsZUhp
c3RvcnlOYXZpZ2F0aW9uKGludCBzdGVwcykKIHsKLSAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkK
KyAgICBpZiAoIXNob3VsZFNjaGVkdWxlTmF2aWdhdGlvbigpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBJbnZhbGlkIGhpc3RvcnkgbmF2aWdhdGlvbnMgKHN1Y2ggYXMgaGlzdG9yeS5mb3J3
YXJkKCkgZHVyaW5nIGEgbmV3IGxvYWQpIGhhdmUgdGhlIHNpZGUgZWZmZWN0IG9mIGNhbmNlbGxp
bmcgYW55IHNjaGVkdWxlZApJbmRleDogV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVsZXIuaAko
cmV2aXNpb24gNzUxMzEpCisrKyBXZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDgsNyArNDksMjgg
QEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogCi1j
bGFzcyBOYXZpZ2F0aW9uU2NoZWR1bGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIE5h
dmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTmF2aWdhdGlvbkRpc2FibGVyRm9yQmVmb3JlVW5sb2FkKTsKKworcHVibGljOgorICAgIE5h
dmlnYXRpb25EaXNhYmxlckZvckJlZm9yZVVubG9hZCgpCisgICAgeworICAgICAgICBzX25hdmln
YXRpb25EaXNhYmxlQ291bnQrKzsKKyAgICB9CisgICAgfk5hdmlnYXRpb25EaXNhYmxlckZvckJl
Zm9yZVVubG9hZCgpCisgICAgeworICAgICAgICBBU1NFUlQoc19uYXZpZ2F0aW9uRGlzYWJsZUNv
dW50KTsKKyAgICAgICAgc19uYXZpZ2F0aW9uRGlzYWJsZUNvdW50LS07CisgICAgfQorICAgIHN0
YXRpYyBib29sIGlzTmF2aWdhdGlvbkFsbG93ZWQoKSB7IHJldHVybiAhc19uYXZpZ2F0aW9uRGlz
YWJsZUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIHNfbmF2aWdhdGlv
bkRpc2FibGVDb3VudDsKK307CisKK2NsYXNzIE5hdmlnYXRpb25TY2hlZHVsZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE5hdmlnYXRpb25TY2hlZHVsZXIpOworCiBwdWJsaWM6CiAgICAg
TmF2aWdhdGlvblNjaGVkdWxlcihGcmFtZSopOwogICAgIH5OYXZpZ2F0aW9uU2NoZWR1bGVyKCk7
CkBAIC02OCw2ICs5MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6
CisgICAgYm9vbCBzaG91bGRTY2hlZHVsZU5hdmlnYXRpb24oKSBjb25zdDsKKyAgICBib29sIHNo
b3VsZFNjaGVkdWxlTmF2aWdhdGlvbihjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CisKICAgICB2
b2lkIHRpbWVyRmlyZWQoVGltZXI8TmF2aWdhdGlvblNjaGVkdWxlcj4qKTsKICAgICB2b2lkIHNj
aGVkdWxlKFBhc3NPd25QdHI8U2NoZWR1bGVkTmF2aWdhdGlvbj4pOwogCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA3NTIyMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQ2IEBACisyMDExLTAxLTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG9uYmVm
b3JldW5sb2FkIGlzIGJyb2tlbiBmb3IgZnJhbWVzZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQxOAorCisgICAgICAgIEFkZGVkIHRlc3RzIHRv
IGVuc3VyZSBXZWJLaXQgZmlyZXMgYmVmb3JldW5sb2FkIGV2ZW50cyBmb3Igc3ViZnJhbWVzLAor
ICAgICAgICBhbmQgZGlzYWxsb3dzIG5hdmlnYXRpb24gZXhjZXB0IHRoYXQgb2YgamF2YXNjcmlw
dCBzY2hlbWUgd2hpbGUgYmVmb3JldW5sb2FkIGV2ZW50CisgICAgICAgIGhhbmRsZXJzIGFyZSBi
ZWluZyBjYWxsZWQuCisKKyAgICAgICAgQWxzbyBhZGRlZCBhIHRlc3QgdG8gZW5zdXJlIFdlYktp
dCBmaXJlcyBiZWZvcmV1bmxvYWQgZXZlbnQgZm9yIHN1YmZyYW1lcyBleGFjdGx5CisgICAgICAg
IG9uY2UgZXZlbiBpZiBhIHN1YmZyYW1lIHdhcyBtb3ZlZCBhcm91bmQgd2l0aGluIGEgYmVmb3Jl
dW5sb2FkIGV2ZW50IGhhbmRsZXIuCisKKyAgICAgICAgQSB0ZXN0IHRoYXQgZW5zdXJlcyBiZWZv
cmV1bmxvYWQgZXZlbnQgaXMgbm90IGZpcmVkIGZvciBhbiBpZnJhbWUgaWYgdGhlIGlmcmFtZQor
ICAgICAgICB3YXMgYWRkZWQgb3IgcmVtb3ZlZCB3aXRoaW4gYSBiZWZvcmV1bmxvYWQgZXZlbnQg
aGFuZGxlciBpcyBhbHNvIGFkZGVkLgorCisgICAgICAgIEZ1cnRoZXJtb3JlLCBhIHRlc3QgdG8g
ZW5zdXJlIFdlYktpdCBkb2VzIG5vdCBmaXJlIGEgYmVmb3JldW5sb2FkIGV2ZW50IHRvIGFuIGlm
cmFtZQorICAgICAgICB0aGF0IGhhcyBiZWVuIGFkb3B0ZWQgYnkgYSBkb2N1bWVudCBvdXRzaWRl
IG9mIHRoZSB1bmxvYWRpbmcgZG9jdW1lbnQgaXMgYWRkZWQuCisKKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9iZWZvcmUtdW5sb2FkLWFkb3B0LXN1YmZyYW1lLXRvLW91dHNpZGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWFkb3B0LXN1YmZy
YW1lLXRvLW91dHNpZGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3Jl
LXVubG9hZC1hZG9wdC13aXRoaW4tc3ViZnJhbWVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1hZG9wdC13aXRoaW4tc3ViZnJhbWVzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtZm9yYmlkZGVu
LW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9i
ZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3ViZnJhbWVzLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0
aXBsZS1zdWJmcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYmVmb3Jl
LXVubG9hZC1pbi1zdWJmcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRpb24tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3Jp
cHQtbmF2aWdhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLXJlbW92ZS1hbmQtYWRkLXN1YmZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1yZW1vdmUtYW5kLWFkZC1zdWJmcmFtZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYWN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXJlbW92ZS1p
dHNlbGYtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYWN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLXJlbW92ZS1pdHNlbGYuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJh
bWUtY2hpbGQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2Jl
Zm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9h
ZC13aXRoLXN1YmZyYW1lcy1wYXJlbnQuaHRtbDogQWRkZWQuCisKIDIwMTEtMDEtMDYgIFN0ZXBo
ZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZDsgeWV0IGFub3RoZXIgdGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlLgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1hZG9wdC1zdWJmcmFtZS10by1vdXRzaWRlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLWFkb3B0LXN1YmZyYW1lLXRvLW91dHNpZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1hZG9wdC1zdWJmcmFt
ZS10by1vdXRzaWRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitU
aGlzIHRlc3QgZW5zdXJlcyBiZWZvcmV1bmxvYWQgZXZlbnQgZG9lcyBOT1QgZmlyZSBmb3IgYSBz
dWJmcmFtZSB0aGF0IGhhcyBiZWVuIGFkb3B0ZWQgYnkgYSBkb2N1bWVudCBvdXRzaWRlIG9mIHRo
ZSBmcmFtZSBoaWVyYXJjaHkgdGhhdCBpcyBhYm91dCB0byB1bmxvYWQuCisKK1BBU1M6IGZpcmVk
IG9uIHBhcmVudAorUEFTUzogZmlyZWQgb24gYQorYWRvcHRpbmcKK2Fkb3B0ZWQKK1BBU1M6IGZp
cmVkIG9uIGIKK0RPTkUKKyAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11
bmxvYWQtYWRvcHQtc3ViZnJhbWUtdG8tb3V0c2lkZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtYWRvcHQtc3ViZnJhbWUtdG8tb3V0c2lk
ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVu
bG9hZC1hZG9wdC1zdWJmcmFtZS10by1vdXRzaWRlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdCBl
bnN1cmVzIGJlZm9yZXVubG9hZCBldmVudCBkb2VzIE5PVCBmaXJlIGZvciBhIHN1YmZyYW1lIHRo
YXQgaGFzIGJlZW4gYWRvcHRlZCBieSBhIGRvY3VtZW50IG91dHNpZGUgb2YgdGhlIGZyYW1lIGhp
ZXJhcmNoeSB0aGF0IGlzIGFib3V0IHRvIHVubG9hZC48L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJl
PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUZyYW1lKGlkLCBwYXJlbnQp
IHsKKyAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7Cisg
ICAgaWYgKHBhcmVudCkKKyAgICAgICAgcGFyZW50LmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGlmcmFtZSk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGlmcmFtZSk7CisgICAgaWYgKCFpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkpCisgICAg
ICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYXBwZW5kQ2hpbGQoaWZyYW1lLmNvbnRlbnREb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdib2R5JykpOworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChpZnJhbWUuY29udGVudERvY3VtZW50LmNyZWF0ZVRleHROb2RlKGlk
KSk7ICAgIAorICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJh
bWUuY29udGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworICAgIGlmcmFtZS5jb250
ZW50V2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkgeyBmaXJlZChpZnJhbWUuY29u
dGVudFdpbmRvdywgaWQpOyByZXR1cm4gbnVsbDsgfQorICAgIGlmcmFtZS5zdHlsZS53aWR0aCA9
ICc3MCUnOworICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnNDAlJzsKKyAgICByZXR1cm4gaWZy
YW1lOworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIHZhciBsb2cgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7CisgICAgbG9nLmlubmVySFRNTCArPSBtZXNzYWdlICsg
J1xuJzsKK30KKwordmFyIGV4cGVjdGVkT3JkZXIgPSBbJ3BhcmVudCcsICdhJywgJ2InXTsKK3Zh
ciBpID0gMDsKKworZnVuY3Rpb24gZmlyZWQoY29udGVudFdpbmRvdywgaWQpIHsKKyAgICBpZiAo
ZXhwZWN0ZWRPcmRlcltpXSA9PSBpZCkKKyAgICAgICAgbG9nKCdQQVNTOiBmaXJlZCBvbiAnICsg
aWQpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCdGQUlMOiBmaXJlZCBvbiAnICsgaWQgKyAnIGJ1
dCBleHBlY3RlZCBvbiAnICsgZXhwZWN0ZWRPcmRlcltpXSk7CisgICAgaSsrOworCisgICAgaWYg
KGNvbnRlbnRXaW5kb3cgPT0gYS5jb250ZW50V2luZG93KSB7CisgICAgICAgIGxvZygnYWRvcHRp
bmcnKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5hZG9wdE5v
ZGUoYWRvcHRlZSkpOworICAgICAgICBsb2coJ2Fkb3B0ZWQnKTsKKyAgICB9Cit9CisKK3ZhciBj
b250YWluZXIgPSBjcmVhdGVGcmFtZSgncGFyZW50Jyk7Cit2YXIgYSA9IGNyZWF0ZUZyYW1lKCdh
JywgY29udGFpbmVyKTsKK3ZhciBhZG9wdGVlID0gY3JlYXRlRnJhbWUoJ2Fkb3B0ZWUnLCBhKTsK
K3ZhciBiID0gY3JlYXRlRnJhbWUoJ2InLCBjb250YWluZXIpOworCitjb250YWluZXIub25sb2Fk
ID0gZnVuY3Rpb24gKCkgeworICAgIGlmIChpID09IGV4cGVjdGVkT3JkZXIubGVuZ3RoKQorICAg
ICAgICBsb2coJ0RPTkUnKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygnUmVjZWl2ZWQgJyArIGkg
KyAnIGV2ZW50cyBidXQgZXhwZWN0ZWQgJyArIGV4cGVjdGVkT3JkZXIubGVuZ3RoKTsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7Cit9Citjb250YWluZXIuc3JjID0gJ3Jlc291cmNlcy9iZWZvcmUt
dW5sb2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWwnOworCis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQt
YWRvcHQtd2l0aGluLXN1YmZyYW1lcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1hZG9wdC13aXRoaW4tc3ViZnJhbWVzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9y
ZS11bmxvYWQtYWRvcHQtd2l0aGluLXN1YmZyYW1lcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIGJlZm9yZXVubG9hZCBldmVudCBm
aXJlcyBleGFjdGx5IG9uY2UgaW4gYSBzdWJmcmFtZSBldmVuIGlmIHRoZSBmcmFtZSB3YXMgYWRv
cHRlZCB0byBhIGZyYW1lIHRoYXQgYXBwZWFycyBsYXRlciBpbiB0aGUgdHJlZS4KKworUEFTUzog
ZmlyZWQgb24gcGFyZW50CitQQVNTOiBmaXJlZCBvbiBhCitQQVNTOiBmaXJlZCBvbiBhZG9wdGVl
CithZG9wdGluZworYWRvcHRlZAorUEFTUzogZmlyZWQgb24gYgorRE9ORQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWFkb3B0LXdpdGhpbi1zdWJmcmFtZXMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2Fk
LWFkb3B0LXdpdGhpbi1zdWJmcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtYWRvcHQtd2l0aGluLXN1YmZyYW1lcy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJv
ZHk+Cis8cD5UaGlzIHRlc3QgZW5zdXJlcyBiZWZvcmV1bmxvYWQgZXZlbnQgZmlyZXMgZXhhY3Rs
eSBvbmNlIGluIGEgc3ViZnJhbWUgZXZlbiBpZiB0aGUgZnJhbWUgd2FzIGFkb3B0ZWQgdG8gYSBm
cmFtZSB0aGF0IGFwcGVhcnMgbGF0ZXIgaW4gdGhlIHRyZWUuPC9wPgorPHByZSBpZD0ibG9nIj48
L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBjcmVhdGVGcmFtZShpZCwgcGFy
ZW50KSB7CisgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScp
OworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHBhcmVudC5jb250ZW50RG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpZnJhbWUpOworICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChpZnJhbWUpOworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChpZnJhbWUuY29udGVudERvY3VtZW50LmNyZWF0ZVRleHROb2RlKGlkKSk7ICAgIAorICAg
IGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUuY29udGVudERv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworICAgIGlmcmFtZS5jb250ZW50V2luZG93Lm9u
YmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkgeyBmaXJlZChpZnJhbWUuY29udGVudFdpbmRvdywg
aWQpOyByZXR1cm4gbnVsbDsgfQorICAgIGlmcmFtZS5zdHlsZS53aWR0aCA9ICc3MCUnOworICAg
IGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnNDAlJzsKKyAgICByZXR1cm4gaWZyYW1lOworfQorCitm
dW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIHZhciBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbG9nJyk7CisgICAgbG9nLmlubmVySFRNTCArPSBtZXNzYWdlICsgJ1xuJzsKK30KKwor
dmFyIGV4cGVjdGVkT3JkZXIgPSBbJ3BhcmVudCcsICdhJywgJ2Fkb3B0ZWUnLCAnYiddOwordmFy
IGkgPSAwOworCitmdW5jdGlvbiBmaXJlZChjb250ZW50V2luZG93LCBpZCkgeworICAgIGlmIChl
eHBlY3RlZE9yZGVyW2ldID09IGlkKQorICAgICAgICBsb2coJ1BBU1M6IGZpcmVkIG9uICcgKyBp
ZCk7CisgICAgZWxzZQorICAgICAgICBsb2coJ0ZBSUw6IGZpcmVkIG9uICcgKyBpZCArICcgYnV0
IGV4cGVjdGVkIG9uICcgKyBleHBlY3RlZE9yZGVyW2ldKTsKKyAgICBpKys7CisKKyAgICBpZiAo
Y29udGVudFdpbmRvdyA9PSBhZG9wdGVlLmNvbnRlbnRXaW5kb3cpIHsKKyAgICAgICAgbG9nKCdh
ZG9wdGluZycpOworICAgICAgICBiLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGIu
Y29udGVudERvY3VtZW50LmFkb3B0Tm9kZShhZG9wdGVlKSk7CisgICAgICAgIGxvZygnYWRvcHRl
ZCcpOworICAgIH0KK30KKwordmFyIGNvbnRhaW5lciA9IGNyZWF0ZUZyYW1lKCdwYXJlbnQnKTsK
K3ZhciBhID0gY3JlYXRlRnJhbWUoJ2EnLCBjb250YWluZXIpOwordmFyIGFkb3B0ZWUgPSBjcmVh
dGVGcmFtZSgnYWRvcHRlZScsIGEpOwordmFyIGIgPSBjcmVhdGVGcmFtZSgnYicsIGNvbnRhaW5l
cik7CisKK2NvbnRhaW5lci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKGkgPT0gZXhw
ZWN0ZWRPcmRlci5sZW5ndGgpCisgICAgICAgIGxvZygnRE9ORScpOworICAgIGVsc2UKKyAgICAg
ICAgbG9nKCdSZWNlaXZlZCAnICsgaSArICcgZXZlbnRzIGJ1dCBleHBlY3RlZCAnICsgZXhwZWN0
ZWRPcmRlci5sZW5ndGgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KK2NvbnRhaW5lci5z
cmMgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24uaHRt
bCc7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3JiaWRkZW4tbmF2aWdhdGlvbi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1mb3Ji
aWRkZW4tbmF2aWdhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitUaGlzIHRlc3QgZW5zdXJlcyBuYXZp
Z2F0aW9uIGlzIGZvcmJpZGRlbiB3aGlsZSBiZWZvcmV1bmxvYWQgZXZlbnQgaXMgYmVpbmcgZmly
ZWQuIFlvdSBzaG91bGQgc2VlIFBBU1MgMS8yIGFuZCBQQVNTIDIvMiBiZWxvdzoKKworUEFTUyAx
LzIKKworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0t
PicKKy0tLS0tLS0tCitQQVNTOiAyLzIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Jl
Zm9yZS11bmxvYWQtZm9yYmlkZGVuLW5hdmlnYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2Fk
LWZvcmJpZGRlbi1uYXZpZ2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdCBlbnN1cmVzIG5h
dmlnYXRpb24gaXMgZm9yYmlkZGVuIHdoaWxlIGJlZm9yZXVubG9hZCBldmVudCBpcyBiZWluZyBm
aXJlZC4gWW91IHNob3VsZCBzZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJlbG93OjwvcD4KKzxw
cmUgaWQ9ImxvZyI+RkFJTDwvcHJlPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7CisKK2Z1bmN0aW9uIHRlc3QoaWZyYW1lKSB7CisgICAg
aWYgKGlmcmFtZS5kb25lKSB7CisgICAgICAgIGlmIChpZnJhbWUuaGFsZlBhc3NlZCkgeworICAg
ICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMv
YmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sJzsgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmcmFtZS5oYWxmUGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZnJhbWUuZG9uZSA9IHRydWU7CisgICAgaWZyYW1lLmNv
bnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1z
dWJmcmFtZS1jaGlsZC5odG1sJzsKK30KKworZnVuY3Rpb24gZmlyZWQoY29udGVudFdpbmRvdykg
eworICAgIGxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJh
bWUtZmFpbC5odG1sJzsKKyAgICBjb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3Vy
Y2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5odG1sJzsKKyAgICBsb2cuaW5uZXJI
VE1MID0gJ1BBU1MgMS8yJzsKKyAgICBjb250ZW50V2luZG93LmZyYW1lRWxlbWVudC5oYWxmUGFz
c2VkID0gdHJ1ZTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCh0aGlzKTsi
IHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9p
ZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9i
ZWZvcmUtdW5sb2FkLWluLW11bHRpcGxlLXN1YmZyYW1lcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1z
dWJmcmFtZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50
IGluIG11bHRpcGxlIHN1YmZyYW1lcy4gWW91IHNob3VsZCBzZWUgUEFTUyBiZWxvdzoKKworUEFT
UworICAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVs
dGlwbGUtc3ViZnJhbWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvYmVmb3JlLXVubG9hZC1pbi1tdWx0aXBsZS1zdWJmcmFtZXMuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tbXVsdGlwbGUtc3Vi
ZnJhbWVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50IGluIG11
bHRpcGxlIHN1YmZyYW1lcy4gWW91IHNob3VsZCBzZWUgUEFTUyBiZWxvdzo8L3A+Cis8cHJlIGlk
PSJsb2ciPjwvcHJlPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbG9nJyk7CisKK2Z1bmN0aW9uIHRlc3QoaWZyYW1lKSB7CisgICAgaWYg
KGlmcmFtZS5kb25lKQorICAgICAgICByZXR1cm47CisgICAgaWZyYW1lLmRvbmUgPSB0cnVlOwor
ICAgIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL2JlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCc7Cit9CisKK3ZhciBudW1iZXJPZkJlZm9y
ZVVubG9hZEluU3ViZnJhbWVzID0gMDsKK3ZhciBudW1iZXJPZkZyYW1lcyA9IDM7CisKK2Z1bmN0
aW9uIGxvZ0Vycm9yKCkgeworICAgIGxvZy5pbm5lckhUTUwgPSAnRkFJTDogJyArIG51bWJlck9m
QmVmb3JlVW5sb2FkSW5TdWJmcmFtZXMgKyAnIGJlZm9yZXVubG9hZCBldmVudHMgYXJlIGZpcmVk
IGJ1dCBleHBlY3RlZCAnICsgbnVtYmVyT2ZGcmFtZXMgKyAnIGV2ZW50cyc7Cit9CisKK2xvZ0Vy
cm9yKCk7CisKK2Z1bmN0aW9uIGZpcmVkKGNvbnRlbnRXaW5kb3cpIHsKKyAgICBudW1iZXJPZkJl
Zm9yZVVubG9hZEluU3ViZnJhbWVzKys7CisgICAgaWYgKG51bWJlck9mQmVmb3JlVW5sb2FkSW5T
dWJmcmFtZXMgPT0gbnVtYmVyT2ZGcmFtZXMpIHsKKyAgICAgICAgbG9nLmlubmVySFRNTCA9ICdQ
QVNTJzsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisgICAgZWxzZQor
ICAgICAgICBsb2dFcnJvcigpOworICAgIGNvbnRlbnRXaW5kb3cuZnJhbWVFbGVtZW50LmZpcmVk
ID0gdHJ1ZTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCh0aGlzKSIgc3Jj
PSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sIj48L2lmcmFt
ZT4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRoaXMpIiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5s
b2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwvaWZyYW1lPgorPGlmcmFtZSBvbmxvYWQ9InRl
c3QodGhpcykiIHNyYz0icmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQu
aHRtbCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkgQEAKK1RoaXMgdGVzdHMgYmVmb3JldW5sb2FkIGV2ZW50IGluIHN1YmZyYW1lcy4gWW91IHNo
b3VsZCBzZWUgUEFTUyBiZWxvdzoKKworUEFTUworCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1m
cmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK0NoaWxkIGxvYWRlZC4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWlu
LXN1YmZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9i
ZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgYmVmb3Jl
dW5sb2FkIGV2ZW50IGluIHN1YmZyYW1lcy4gWW91IHNob3VsZCBzZWUgUEFTUyBiZWxvdzo8L3A+
Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7Cit2YXIgZG9uZSA9IGZhbHNlOworCitmdW5jdGlvbiB0
ZXN0KCkgeworICAgIGlmIChkb25lKSB7CisgICAgICAgIC8vIGxvZydzIG5vdCBoYXZpbmcgYW55
IGNvbnRlbnQgaW1wbGllcyB0aGF0IGxvYWQgZXZlbnQgd2FzIGRpc3BhdGNoZWQgZm9yIHRoZSBz
ZWNvbmQgdGltZSBiZWZvcmUgYmVmb3JldW5sb2FkIGlzIGRpc3BhdGNoZWQuCisgICAgICAgIGlm
ICghbG9nLmlubmVySFRNTC5sZW5ndGgpCisgICAgICAgICAgICBsb2cuaW5uZXJIVE1MID0gJ0ZB
SUw6IGJlZm9yZXVubG9hZCBldmVudCB3YXMgbmV2ZXIgZGlzcGF0Y2hlZC5cbic7CisgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZG9u
ZSA9IHRydWU7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lmcmFtZScpWzBd
LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1p
bi1zdWJmcmFtZS1jaGlsZC5odG1sJzsKK30KKworZnVuY3Rpb24gZmlyZWQoKSB7CisgICAgaWYg
KCFsb2cuaW5uZXJIVE1MLmxlbmd0aCkKKyAgICAgICAgbG9nLmlubmVySFRNTCA9ICdQQVNTXG4n
OworICAgIGVsc2UKKyAgICAgICAgbG9nLmlubmVySFRNTCA9ICdGQUlMOiBiZWZvcmV1bmxvYWQg
ZXZlbnQgd2FzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIHNlY29uZCBsb2FkIGV2ZW50LicKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBvbmxvYWQ9InRlc3Qo
KSIgc3JjPSJyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sIj48
L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3JpcHQt
bmF2aWdhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9iZWZvcmUtdW5sb2FkLWphdmFzY3JpcHQtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgc2V0dGluZyBs
b2NhdGlvbi5ocmVmIHdpdGggamF2YXNjcmlwdCBzY2hlbWUgcHJvcGVybHkgZXhlY3V0ZXMgdGhl
IHNjcmlwdCBldmVuIHdoaWxlIGJlZm9yZXVubG9hZCBldmVudCBpcyBiZWluZyBmaXJlZC4gWW91
IHNob3VsZCBzZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJlbG93OgorCitQQVNTCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0
aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVu
bG9hZC1qYXZhc2NyaXB0LW5hdmlnYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtamF2YXNjcmlwdC1uYXZpZ2F0aW9uLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxwPlRoaXMgdGVzdCBlbnN1cmVzIHNldHRpbmcgbG9jYXRpb24uaHJlZiB3aXRoIGph
dmFzY3JpcHQgc2NoZW1lICBwcm9wZXJseSBleGVjdXRlcyB0aGUgc2NyaXB0IGV2ZW4gd2hpbGUg
YmVmb3JldW5sb2FkIGV2ZW50IGlzIGJlaW5nIGZpcmVkLiBZb3Ugc2hvdWxkIHNlZSBQQVNTIDEv
MiBhbmQgUEFTUyAyLzIgYmVsb3c6PC9wPgorPHByZSBpZD0ibG9nIj5GQUlMPC9wcmU+Cis8c2Ny
aXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKK30KKwordmFyIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cn
KTsKKworZnVuY3Rpb24gdGVzdChpZnJhbWUpIHsKKyAgICBpZiAoaWZyYW1lLmRvbmUpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZnJhbWUuZG9uZSA9IHRydWU7CisgICAgaWZyYW1lLmNvbnRlbnRX
aW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFt
ZS1jaGlsZC5odG1sJzsKK30KKworZnVuY3Rpb24gZG9uZSgpIHsKKyAgICBsb2cuaW5uZXJIVE1M
ID0gJ1BBU1MnOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gZmlyZWQo
Y29udGVudFdpbmRvdykgeworICAgIGxvY2F0aW9uLmhyZWYgPSAnamF2YXNjcmlwdDp0b3AuZG9u
ZSgpJzsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCh0aGlzKTsiIHNyYz0i
cmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbCI+PC9pZnJhbWU+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLXJlbW92ZS1hbmQtYWRkLXN1YmZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXJlbW92ZS1hbmQtYWRkLXN1
YmZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2JlZm9yZS11bmxvYWQtcmVtb3ZlLWFuZC1hZGQtc3ViZnJhbWUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIGJlZm9yZXVubG9h
ZCBldmVudCBkb2VzIG5vdCBmaXJlIGZvciBzdWJmcmFtZXMgdGhhdCBoYXMgYmVlbiByZW1vdmVk
IGZyb20gdGhlIERPTSB3aXRoaW4gYSBiZWZvcmV1bmxvYWQgZXZlbnQgaGFuZGxlci4gQWxzbyBl
bnN1cmVzIHRoZSBldmVudCBkb2Vzbid0IGZpcmUgZm9yIHN1YmZyYW1lcyBhZGRlZCB3aXRoaW4g
YSBiZWZvcmV1bmxvYWQgZXZlbnQgaGFuZGxlci4gVGhlIGxhdHRlciBiZWhhdmlvciBtYXRjaGVz
IE1TSUUuCisKK1BBU1M6IGZpcmVkIG9uIHBhcmVudAorUEFTUzogZmlyZWQgb24gYQorUEFTUzog
ZmlyZWQgb24gYworRE9ORQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLXJlbW92ZS1hbmQtYWRkLXN1YmZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC1yZW1vdmUtYW5kLWFkZC1zdWJmcmFtZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9h
ZC1yZW1vdmUtYW5kLWFkZC1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgZW5zdXJl
cyBiZWZvcmV1bmxvYWQgZXZlbnQgZG9lcyBub3QgZmlyZSBmb3Igc3ViZnJhbWVzIHRoYXQgaGFz
IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBET00gd2l0aGluIGEgYmVmb3JldW5sb2FkIGV2ZW50IGhh
bmRsZXIuIEFsc28gZW5zdXJlcyB0aGUgZXZlbnQgZG9lc24ndCBmaXJlIGZvciBzdWJmcmFtZXMg
YWRkZWQgd2l0aGluIGEgYmVmb3JldW5sb2FkIGV2ZW50IGhhbmRsZXIuIFRoZSBsYXR0ZXIgYmVo
YXZpb3IgbWF0Y2hlcyBNU0lFLjwvcD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+Cis8c2NyaXB0Pgor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlRnJhbWUoaWQsIHBhcmVudCkgeworICAgIHZhciBp
ZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICBpZnJhbWUuaWQg
PSBpZDsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBwYXJlbnQuY29udGVudERvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICBpZiAoIWlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9k
eSkKKyAgICAgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5hcHBlbmRDaGlsZChpZnJhbWUuY29u
dGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JvZHknKSk7CisgICAgaWZyYW1lLmNvbnRlbnRE
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoaWQpKTsgICAgCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisgICAgaWZy
YW1lLmNvbnRlbnRXaW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbiAoKSB7IGZpcmVkKGlm
cmFtZS5jb250ZW50V2luZG93LCBpZCk7IHJldHVybiBudWxsOyB9CisgICAgaWZyYW1lLnN0eWxl
LndpZHRoID0gJzcwJSc7CisgICAgaWZyYW1lLnN0eWxlLmhlaWdodCA9ICc0MCUnOworICAgIHJl
dHVybiBpZnJhbWU7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CisgICAgdmFyIGxvZyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKTsKKyAgICBsb2cuaW5uZXJIVE1MICs9IG1l
c3NhZ2UgKyAnXG4nOworfQorCit2YXIgZXhwZWN0ZWRPcmRlciA9IFsncGFyZW50JywgJ2EnLCAn
YyddOwordmFyIGkgPSAwOworCitmdW5jdGlvbiBmaXJlZChjb250ZW50V2luZG93LCBpZCkgewor
ICAgIGlmIChleHBlY3RlZE9yZGVyW2ldID09IGlkKQorICAgICAgICBsb2coJ1BBU1M6IGZpcmVk
IG9uICcgKyBpZCk7CisgICAgZWxzZQorICAgICAgICBsb2coJ0ZBSUw6IGZpcmVkIG9uICcgKyBp
ZCArICcgYnV0IGV4cGVjdGVkIG9uICcgKyBleHBlY3RlZE9yZGVyW2ldKTsKKyAgICBpKys7CisK
KyAgICBpZiAoY29udGVudFdpbmRvdyA9PSBhLmNvbnRlbnRXaW5kb3cpIHsKKyAgICAgICAgYi5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpOworICAgICAgICBjcmVhdGVGcmFtZSgnZCcsIGNvbnRh
aW5lcik7CisgICAgfQorfQorCit2YXIgY29udGFpbmVyID0gY3JlYXRlRnJhbWUoJ3BhcmVudCcp
OwordmFyIGEgPSBjcmVhdGVGcmFtZSgnYScsIGNvbnRhaW5lcik7Cit2YXIgYiA9IGNyZWF0ZUZy
YW1lKCdiJywgY29udGFpbmVyKTsKK3ZhciBjID0gY3JlYXRlRnJhbWUoJ2MnLCBjb250YWluZXIp
OworCitjb250YWluZXIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgIGlmIChpID09IGV4cGVj
dGVkT3JkZXIubGVuZ3RoKQorICAgICAgICBsb2coJ0RPTkUnKTsKKyAgICBlbHNlCisgICAgICAg
IGxvZygnUmVjZWl2ZWQgJyArIGkgKyAnIGV2ZW50cyBidXQgZXhwZWN0ZWQgJyArIGV4cGVjdGVk
T3JkZXIubGVuZ3RoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Citjb250YWluZXIuc3Jj
ID0gJ3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWRlc3RpbmF0aW9uLmh0bWwn
OworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtcmVtb3ZlLWFuZC1hZGQtc3ViZnJh
bWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXJlbW92ZS1pdHNlbGYtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxv
YWQtcmVtb3ZlLWl0c2VsZi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXJlbW92ZS1pdHNlbGYtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIGEgYmVmb3JldW5s
b2FkIGV2ZW50IGhhbmRsZXIgY2FuIHNhZmVseSByZW1vdmUgdGhlIGZyYW1lIHRvIHdoaWNoIHRo
ZSBldmVudCBpcyBmaXJlZC4gWW91IHNob3VsZCBzZWUgUEFTUyBiZWxvdzoKKworUEFTUworCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2FkLXJlbW92ZS1pdHNlbGYu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtdW5sb2Fk
LXJlbW92ZS1pdHNlbGYuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2JlZm9yZS11bmxvYWQtcmVtb3ZlLWl0c2VsZi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3Qg
ZW5zdXJlcyBhIGJlZm9yZXVubG9hZCBldmVudCBoYW5kbGVyIGNhbiBzYWZlbHkgcmVtb3ZlIHRo
ZSBmcmFtZSB0byB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuIFlvdSBzaG91bGQgc2VlIFBBU1Mg
YmVsb3c6PC9wPgorPHByZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbG9n
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOwordmFyIGRvbmUgPSBmYWxzZTsKKwor
ZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBpZiAoZG9uZSkgeworICAgICAgICAvLyBsb2cncyBub3Qg
aGF2aW5nIGFueSBjb250ZW50IGltcGxpZXMgdGhhdCBsb2FkIGV2ZW50IHdhcyBkaXNwYXRjaGVk
IGZvciB0aGUgc2Vjb25kIHRpbWUgYmVmb3JlIGJlZm9yZXVubG9hZCBpcyBkaXNwYXRjaGVkLgor
ICAgICAgICBpZiAoIWxvZy5pbm5lckhUTUwubGVuZ3RoKQorICAgICAgICAgICAgbG9nLmlubmVy
SFRNTCA9ICdGQUlMOiBiZWZvcmV1bmxvYWQgZXZlbnQgd2FzIG5ldmVyIGRpc3BhdGNoZWQuXG4n
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2cuaW5uZXJIVE1MID0gJ0ZBSUw6IGJlZm9y
ZXVubG9hZCBldmVudCBoYW5kbGVyIGRpZCBub3QgcmVtb3ZlIHRoZSBmcmFtZS5cbic7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ZG9uZSA9IHRydWU7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lmcmFtZScp
WzBdLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9h
ZC1pbi1zdWJmcmFtZS1jaGlsZC5odG1sJzsKK30KKworZnVuY3Rpb24gZmlyZWQoKSB7CisgICAg
ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdpZnJhbWUnKVswXSk7CisgICAgbG9nLmlubmVySFRNTCA9ICdQQVNTXG4nOworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIG9ubG9hZD0idGVzdCgp
IiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwv
aWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
YmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUt
dW5sb2FkLXdpdGgtc3ViZnJhbWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5IEBACitUaGlzIHRlc3QgZW5zdXJlcyBiZWZvcmV1bmxvYWQgZXZlbnQgZmlyZXMgaW4gYWxs
IHN1YmZyYW1lcyB3aGVuIGEgcGFyZW50IGZyYW1lIGlzIG5hdmlnYXRlZC4gWW91IHNob3VsZCBz
ZWUgUEFTUyAxLzIgYW5kIFBBU1MgMi8yIGJlbG93OgorCitQQVNTIDEvMgorCisKKy0tLS0tLS0t
CitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK1BB
U1M6IDIvMgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLXVubG9hZC13aXRo
LXN1YmZyYW1lcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Jl
Zm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS11bmxvYWQtd2l0aC1zdWJmcmFtZXMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5Pgor
PHA+VGhpcyB0ZXN0IGVuc3VyZXMgYmVmb3JldW5sb2FkIGV2ZW50IGZpcmVzIGluIGFsbCBzdWJm
cmFtZXMgd2hlbiBhIHBhcmVudCBmcmFtZSBpcyBuYXZpZ2F0ZWQuIFlvdSBzaG91bGQgc2VlIFBB
U1MgMS8yIGFuZCBQQVNTIDIvMiBiZWxvdzo8L3A+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNj
cmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
Q2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7Cit9CisKK3ZhciBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7Cit2
YXIgbnVtYmVyT2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcyA9IDA7Cit2YXIgbnVtYmVyT2ZGcmFt
ZXMgPSAzOworCitmdW5jdGlvbiB0ZXN0KGlmcmFtZSkgeworICAgIGlmIChpZnJhbWUuZG9uZSkg
eworICAgICAgICBpZiAobnVtYmVyT2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcyA9PSBudW1iZXJP
ZkZyYW1lcykKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZnJhbWUuZG9uZSA9IHRydWU7CisgICAgaWZy
YW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMvYmVmb3JlLXVubG9h
ZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sJzsKK30KKworZnVuY3Rpb24gbG9nRXJyb3Io
KSB7CisgICAgbG9nLmlubmVySFRNTCA9ICdGQUlMOiAnICsgbnVtYmVyT2ZCZWZvcmVVbmxvYWRJ
blN1YmZyYW1lcyArICcgYmVmb3JldW5sb2FkIGV2ZW50cyBhcmUgZmlyZWQgYnV0IGV4cGVjdGVk
ICcgKyBudW1iZXJPZkZyYW1lcyArICcgZXZlbnRzJzsKK30KKworbG9nRXJyb3IoKTsKKworZnVu
Y3Rpb24gZmlyZWQoY29udGVudFdpbmRvdykgeworICAgIG51bWJlck9mQmVmb3JlVW5sb2FkSW5T
dWJmcmFtZXMrKzsKKyAgICBpZiAobnVtYmVyT2ZCZWZvcmVVbmxvYWRJblN1YmZyYW1lcyA9PSBu
dW1iZXJPZkZyYW1lcykKKyAgICAgICAgbG9nLmlubmVySFRNTCA9ICdQQVNTIDEvMlxuJzsKKyAg
ICBlbHNlCisgICAgICAgIGxvZ0Vycm9yKCk7CisgICAgY29udGVudFdpbmRvdy5mcmFtZUVsZW1l
bnQuZmlyZWQgPSB0cnVlOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgb25sb2FkPSJ0ZXN0KHRo
aXMpIiBzcmM9InJlc291cmNlcy9iZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLXBhcmVudC5o
dG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxv
YWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keSBvbmJlZm9yZXVubG9hZD0idG9wLmZpcmVkKHdpbmRvdyk7IHJldHVybiBudWxsOyI+CitD
aGlsZCBsb2FkZWQuCis8c2NyaXB0PgorCitpZiAodG9wLmxvYWRlZCkKKyAgICB0b3AubG9hZGVk
KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZGVzdGluYXRpb24u
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVm
b3JlLXVubG9hZC1pbi1zdWJmcmFtZS1kZXN0aW5hdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJh
bWUtZGVzdGluYXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorUEFTUzogMi8yCis8c2NyaXB0PgorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1mYWlsLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9y
ZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL2JlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtZmFpbC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGJvZHk+CitGQUlMCis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJj
ZXMvYmVmb3JlLXVubG9hZC13aXRoLXN1YmZyYW1lcy1wYXJlbnQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvYmVmb3JlLXVubG9hZC13aXRoLXN1
YmZyYW1lcy1wYXJlbnQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3Jlc291cmNlcy9iZWZvcmUtdW5sb2FkLXdpdGgtc3ViZnJhbWVzLXBhcmVudC5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9k
eT4KKzxpZnJhbWUgc3JjPSJiZWZvcmUtdW5sb2FkLWluLXN1YmZyYW1lLWNoaWxkLmh0bWwiPjwv
aWZyYW1lPgorPGlmcmFtZSBzcmM9ImJlZm9yZS11bmxvYWQtaW4tc3ViZnJhbWUtY2hpbGQuaHRt
bCI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0iYmVmb3JlLXVubG9hZC1pbi1zdWJmcmFtZS1jaGls
ZC5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="69563"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>85476</attachid>
            <date>2011-03-11 07:41:35 -0800</date>
            <delta_ts>2011-03-11 07:41:35 -0800</delta_ts>
            <desc>change framecontent with document.write</desc>
            <filename>beforeunload.zip</filename>
            <type>application/zip</type>
            <size>1794</size>
            <attacher name="Holger Hees">holger.hees</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAACKFaz4AAAAAAAAAAAAAAAANABwAYmVmb3JldW5sb2FkL1VUCQADkEJ6Ta1Cek11
eAsAAQToAwAABGQAAABQSwMEFAAAAAgAIoVrPm2V6zNyAQAAKwMAABcAHABiZWZvcmV1bmxvYWQv
aW5kZXguaHRtbFVUCQADkEJ6TZBCek11eAsAAQToAwAABGQAAACNUrFOwzAQ3fMVJ0so6ZK0dGud
DCCQ+ADE0sW1L42paxfHaYkQ/44dl9DCQJf4fPG9d/fe0cbtVJXQBpnwR8ut3Dtw/R5L4vDdFa/s
wGKWVEndae6k0cCZUs9WZZOPBEAY3u1Qu3yD7kFhCO/6J5GltWU7TCd5a3lJ5HC7zQMhWSafl2D3
RjtfFwA94oFZeOuwDb8fQxmU/7IsQ+FFUc4j6IvUwhzzEcDsUWdxuqEZXxopT+89WUoHXaIstIjH
2ogejF5jbSx2WhkmSsIUWpet0vMszFe+H1LF1ucQcihoEQACWoBOl9e2e7TSYTY2N7m2jivTYjYJ
Uie0iB56i4uT1UMzCWXQWKxL8uPz4mCkyKZ+AD8sV5JvSzL6TSreML1BGFQH72z+SxIw25wWLDDY
78/1JOMekOpSgD802jiopUUR2RIaFwykN2WICJzt3SzuHbSuV361G5Sbxi1m0+nN8iiFa4aQBHni
+xCdFIp+QfIFUEsDBBQAAAAIAOV+az6fsFDIUwAAAGYAAAAZABwAYmVmb3JldW5sb2FkL2lmcmFt
ZTIuaHRtbFVUCQADzTd6Tc03ek11eAsAAQToAwAABGQAAACzySjJzbHjsslITUyxs9EHU1w2Sfkp
lQr5eUmpaflFqaV5OfmJKbZKiTmpRSUa6siCCkbqmtZKdlxuRYm5qQpGCiCx1BQuG32QAUBz9MGm
K3ABAFBLAwQUAAAACAAihWs+Gz0xLHgBAAAyAwAAGAAcAGJlZm9yZXVubG9hZC9pbmRleC5odG1s
flVUCQADkEJ6TZBCek11eAsAAQToAwAABGQAAACNUsFSwyAUvOcr3jDjJLkkrb21JAcdnfEDHC+9
UHhpsBQioa0Zx38XQq2tHuwlvAC7+9h9tHVbVSe0RSb80nMrOwdu6LAirOuU5MxJo8tXtmfxkNRJ
s9M87AJnSj1bleUfCYAwfLdF7Yo1ugeFobwbnkSWNpZtMc2L3vKKyPHvtgi6ZJF8XpLdG+08LhB6
xj2z8LbDPhw/BhhU/6osAvACVPBI+iK1MIfiRGA61Blx+O7KsRkPjZLH+14spaM90R1axmVlxABG
r7AxFndaGSa8Vwqty5bp+S7Mlr4fUsfWZxD2UNAyEAS2QJ0urm33YKXD7NRcfi2OK9NjlgerE1rG
DH3S5THxsZmEMmgtNhX5yXm+N1JkE/8A/1juB2FTkVPepOYt02uE0XXwyRa/LAGzKWjJgoL9/lwv
cpoDUl8a8EdGGweNtCiiWkLjgIH0oYwVgbO5m8a5g94Nyk94i3Lduvl0MrlZHKRw7ViSYE+8H6qj
QzEvSL4AUEsDBBQAAAAIANl+az6cQZzpUwAAAGYAAAAZABwAYmVmb3JldW5sb2FkL2lmcmFtZTEu
aHRtbFVUCQADujd6Tbo3ek11eAsAAQToAwAABGQAAACzySjJzbHjsslITUyxs9EHU1w2SfkplQr5
eUmpaflFqaV5OfmJKbZKiTmpRSUa6siCCobqmtZKdlxuRYm5qQqGCiCx1BQuG32QAUBz9MGmK3AB
AFBLAQIeAwoAAAAAACKFaz4AAAAAAAAAAAAAAAANABgAAAAAAAAAEADtQQAAAABiZWZvcmV1bmxv
YWQvVVQFAAOQQnpNdXgLAAEE6AMAAARkAAAAUEsBAh4DFAAAAAgAIoVrPm2V6zNyAQAAKwMAABcA
GAAAAAAAAQAAAKSBRwAAAGJlZm9yZXVubG9hZC9pbmRleC5odG1sVVQFAAOQQnpNdXgLAAEE6AMA
AARkAAAAUEsBAh4DFAAAAAgA5X5rPp+wUMhTAAAAZgAAABkAGAAAAAAAAQAAAKSBCgIAAGJlZm9y
ZXVubG9hZC9pZnJhbWUyLmh0bWxVVAUAA803ek11eAsAAQToAwAABGQAAABQSwECHgMUAAAACAAi
hWs+Gz0xLHgBAAAyAwAAGAAYAAAAAAABAAAApIGwAgAAYmVmb3JldW5sb2FkL2luZGV4Lmh0bWx+
VVQFAAOQQnpNdXgLAAEE6AMAAARkAAAAUEsBAh4DFAAAAAgA2X5rPpxBnOlTAAAAZgAAABkAGAAA
AAAAAQAAAKSBegQAAGJlZm9yZXVubG9hZC9pZnJhbWUxLmh0bWxVVAUAA7o3ek11eAsAAQToAwAA
BGQAAABQSwUGAAAAAAUABQDMAQAAIAUAAAAA
</data>

          </attachment>
      

    </bug>

</bugzilla>