<?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>53126</bug_id>
          
          <creation_ts>2011-01-25 14:30:42 -0800</creation_ts>
          <short_desc>nrwt: add a &quot;mock&quot; DRT implementation for better testing of new-run-webkit-tests</short_desc>
          <delta_ts>2011-01-28 17:41:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53194</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jberlin</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>339925</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 14:30:42 -0800</bug_when>
    <thetext>nrwt: add a &quot;mock&quot; DRT implementation for better testing of new-run-webkit-tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339926</commentid>
    <comment_count>1</comment_count>
      <attachid>80121</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 14:31:02 -0800</bug_when>
    <thetext>Created attachment 80121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339929</commentid>
    <comment_count>2</comment_count>
      <attachid>80124</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 14:33:23 -0800</bug_when>
    <thetext>Created attachment 80124
add bug # to ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339963</commentid>
    <comment_count>3</comment_count>
      <attachid>80124</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-25 15:21:35 -0800</bug_when>
    <thetext>Comment on attachment 80124
add bug # to ChangeLog

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

&gt; Tools/ChangeLog:6
&gt; +        DumpRenderTree is supposed to be, and a --mock-drt flag

Do we have to add a new flag? Can we just use a different platform?  e.g., rather than having to edit chromium.py and webkit.py, can we just add a platform that overrides driver_name (maybe pass in a base port to the ctor)?  I guess the tradeoff is that get() would be more complicated.  I don&apos;t know, what do you think?

&gt; Tools/ChangeLog:11
&gt; +        This will eventually replace port/dryrun.py and allow us to get
&gt; +        better test coverage of the new-run-webkit-tests code as well as
&gt; +        a reference for what new-run-webkit-tests expects from DRT.

This sounds like a good goal.

&gt; Tools/Scripts/webkitpy/layout_tests/mock_drt.py:1
&gt; +#!/usr/bin/env python

Is this always going to work on windows/cygwin?  I guess we don&apos;t have to handle the no-cygwin case.  Do we have to worry about having the execute bit set?

&gt; Tools/Scripts/webkitpy/layout_tests/mock_drt.py:86
&gt; +                (url, expected_checksum) = self.parse_input(line)

No ()s on the left side of the assignment.

&gt; Tools/Scripts/webkitpy/layout_tests/mock_drt.py:102
&gt; +        if &quot;&apos;&quot; in line:
&gt; +            return line.split(&quot;&apos;&quot;)

line.split(&quot;&apos;&quot;, 1)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339977</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 15:39:22 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 80124 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80124&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:6
&gt; &gt; +        DumpRenderTree is supposed to be, and a --mock-drt flag
&gt; 
&gt; Do we have to add a new flag? Can we just use a different platform?  e.g., rather than having to edit chromium.py and webkit.py, can we just add a platform that overrides driver_name (maybe pass in a base port to the ctor)?  I guess the tradeoff is that get() would be more complicated.  I don&apos;t know, what do you think?

It&apos;s a cross-cutting flag, so it&apos;ll affect pretty much every port. I think I can probably implement this with a delegate (much like DryRunPort does today). I&apos;ll look into it.

Ideally I&apos;d check this in as is and look at replacing it with a different platform later. What do you think?

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/mock_drt.py:1
&gt; &gt; +#!/usr/bin/env python
&gt; 
&gt; Is this always going to work on windows/cygwin?  I guess we don&apos;t have to handle the no-cygwin case.  Do we have to worry about having the execute bit set?
&gt;

On Windows I&apos;ll probably launch python directly and pass it the argument. We will probably want to make the non-cygwin case work since this&apos;ll eventually be enabled as part of the unit/integration tests.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/mock_drt.py:86
&gt; &gt; +                (url, expected_checksum) = self.parse_input(line)
&gt; 
&gt; No ()s on the left side of the assignment.
&gt;

Will do.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/mock_drt.py:102
&gt; &gt; +        if &quot;&apos;&quot; in line:
&gt; &gt; +            return line.split(&quot;&apos;&quot;)
&gt; 
&gt; line.split(&quot;&apos;&quot;, 1)?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340068</commentid>
    <comment_count>5</comment_count>
      <attachid>80155</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 18:08:31 -0800</bug_when>
    <thetext>Created attachment 80155
replace --mock-drt flag with mock-* port implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340327</commentid>
    <comment_count>6</comment_count>
      <attachid>80155</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 10:04:21 -0800</bug_when>
    <thetext>Comment on attachment 80155
replace --mock-drt flag with mock-* port implementation

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

r=me with the following changes.

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:41
&gt; +import base
&gt; +import factory

This should include the full import path from Scripts.  E.g., see how files in webkitpy/common/system import other files from webkitpy/common/system.

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:50
&gt; +        pfx = &apos;mock-&apos;

pfx -&gt; prefix

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:138
&gt; +class MockDRT(object):
&gt; +    def __init__(self, options, args, stdin, stdout, stderr):

Please add a docstring.  At some point, we may want to move this into a separate file. Maybe we&apos;re not there yet.

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:38
&gt; +import mock_drt
&gt; +import factory
&gt; +import port_testcase

These should also be imports with the full path.

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:87
&gt; +            drt_output = &quot;&quot;&quot;Content-Type: text/plain
&gt; +%s#EOF
&gt; +
&gt; +ActualHash: %s
&gt; +ExpectedHash: %s
&gt; +#EOF
&gt; +&quot;&quot;&quot; % (text_output, expected_checksum, expected_checksum)

I find code like this easier to read when the indention is preserved.  E.g.,
    drt_output = (
        &quot;Content-Type: text/plain\n&quot;
        &quot;%s#EOF\n&quot;
        ... &quot;) % (text_output, expected_checksum, expected_checksum)

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:102
&gt; +        res = drt.run()

res -&gt; result</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340336</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 10:29:03 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 80155 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80155&amp;action=review
&gt; 
&gt; r=me with the following changes.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:41
&gt; &gt; +import base
&gt; &gt; +import factory
&gt; 
&gt; This should include the full import path from Scripts.  E.g., see how files in webkitpy/common/system import other files from webkitpy/common/system.
&gt; 

I can do this, but why do you think that this is better?

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:50
&gt; &gt; +        pfx = &apos;mock-&apos;
&gt; 
&gt; pfx -&gt; prefix
&gt;

Ok.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:138
&gt; &gt; +class MockDRT(object):
&gt; &gt; +    def __init__(self, options, args, stdin, stdout, stderr):
&gt; 
&gt; Please add a docstring.  At some point, we may want to move this into a separate file. Maybe we&apos;re not there yet.
&gt;

Ok. I actually had these in two files initially, but thought it might be clearer or better to have them in a single file. Do you think two is better?
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:38
&gt; &gt; +import mock_drt
&gt; &gt; +import factory
&gt; &gt; +import port_testcase
&gt; 
&gt; These should also be imports with the full path.
&gt; 

As above.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:87
&gt; &gt; +            drt_output = &quot;&quot;&quot;Content-Type: text/plain
&gt; &gt; +%s#EOF
&gt; &gt; +
&gt; &gt; +ActualHash: %s
&gt; &gt; +ExpectedHash: %s
&gt; &gt; +#EOF
&gt; &gt; +&quot;&quot;&quot; % (text_output, expected_checksum, expected_checksum)
&gt; 
&gt; I find code like this easier to read when the indention is preserved.  E.g.,
&gt;     drt_output = (
&gt;         &quot;Content-Type: text/plain\n&quot;
&gt;         &quot;%s#EOF\n&quot;
&gt;         ... &quot;) % (text_output, expected_checksum, expected_checksum)
&gt;

Okay.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:102
&gt; &gt; +        res = drt.run()
&gt; 
&gt; res -&gt; result

Okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340341</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 10:36:31 -0800</bug_when>
    <thetext>Explicit imports are better because it&apos;s easier to find the file being imported.  It also makes it clear what is a system library and what is a library we wrote.  It also avoids problems with files shadowing other files.

I think one file is fine for now.  We can revisit as the class grows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340358</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 11:26:08 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Explicit imports are better because it&apos;s easier to find the file being imported.  It also makes it clear what is a system library and what is a library we wrote.  It also avoids problems with files shadowing other files.

These are good points. On the other hand, this file is intended to be (using java terminology) package-private, and it references other package-private files (factory, base), and specifying the full paths would probably lead people to think otherwise. In addition, because there are symbols exported from port/__init__.py, I think importing things through the full path can cause symbol and namespace conflicts. Does that make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340363</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 11:39:13 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Explicit imports are better because it&apos;s easier to find the file being imported.  It also makes it clear what is a system library and what is a library we wrote.  It also avoids problems with files shadowing other files.
&gt; 
&gt; These are good points. On the other hand, this file is intended to be (using java terminology) package-private, and it references other package-private files (factory, base), and specifying the full paths would probably lead people to think otherwise. In addition, because there are symbols exported from port/__init__.py, I think importing things through the full path can cause symbol and namespace conflicts. Does that make sense?

(Note that I will make the change as you suggested, I&apos;m just trying to understand the tradeoffs better).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340384</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 12:05:18 -0800</bug_when>
    <thetext>Hm. PEP 8 requires full or absolute imports, and there is a discussion of this in PEP 328:

http://www.python.org/dev/peps/pep-0328/

In fact, it looks like relative imports might actually break in Python 3. It looks like &quot;__all__&quot; should be used to address the public/private thing I am concerned about.

It looks like &quot;from . import factory&quot; might also be acceptable. What do you think of this alternative?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340405</commentid>
    <comment_count>12</comment_count>
      <attachid>80224</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 12:33:28 -0800</bug_when>
    <thetext>Created attachment 80224
update w/ review feedback from tony</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340413</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 12:45:50 -0800</bug_when>
    <thetext>Committed r76709: &lt;http://trac.webkit.org/changeset/76709&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340415</commentid>
    <comment_count>14</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 12:48:55 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Hm. PEP 8 requires full or absolute imports, and there is a discussion of this in PEP 328:
&gt; 
&gt; http://www.python.org/dev/peps/pep-0328/
&gt; 
&gt; In fact, it looks like relative imports might actually break in Python 3. It looks like &quot;__all__&quot; should be used to address the public/private thing I am concerned about.
&gt; 
&gt; It looks like &quot;from . import factory&quot; might also be acceptable. What do you think of this alternative?

I think the full path is more consistent with the rest of our code.

I am not convinced that an import usage in X.py will be sufficient to stop people from importing a &apos;private&apos; Y.py.  Actually, I&apos;m not sure we should bother to even have such a distinction of private packages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340418</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 12:53:04 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I am not convinced that an import usage in X.py will be sufficient to stop people from importing a &apos;private&apos; Y.py.  Actually, I&apos;m not sure we should bother to even have such a distinction of private packages.

I think that the port/* package is a pretty good example of something where you really only want people calling one or two routines and not whatever they happen to find lying around. some concept of public/private is a good way to document the intended usage and/or have check-webkit-style or other linters complain.

I agree that there&apos;s not many examples of this, though. I&apos;m not even sure if there are any others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340456</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-01-26 14:07:56 -0800</bug_when>
    <thetext>r76709 made one webkitpy test fail on Qt and GTK bots:

ERROR: test_pixeltest (webkitpy.layout_tests.port.mock_drt_unittest.MockDRTTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File &quot;/home/webkitbuildbot/slaves/release32bit/buildslave/qt-linux-release/build/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py&quot;, line 108, in test_pixeltest
    self.assertTest(&apos;fast/html/keygen.html&apos;, True)
  File &quot;/home/webkitbuildbot/slaves/release32bit/buildslave/qt-linux-release/build/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py&quot;, line 104, in assertTest
    self.assertEqual(stdout.getvalue(), drt_output)
  File &quot;/usr/lib/python2.5/StringIO.py&quot;, line 270, in getvalue
    self.buf += &apos;&apos;.join(self.buflist)
UnicodeDecodeError: &apos;ascii&apos; codec can&apos;t decode byte 0x89 in position 0: ordinal not in range(128)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340640</commentid>
    <comment_count>17</comment_count>
      <attachid>80278</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-26 17:33:54 -0800</bug_when>
    <thetext>Created attachment 80278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340963</commentid>
    <comment_count>18</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-27 11:13:55 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=80278) [details]
&gt; Patch

There seem to be a lot of changes from the previous patch.  Can you summarize the changes?  Alternately, you could have the new patch have the minimal number of changes to work and add a follow up change with more refactoring/adding test cases.  I like the extra test cases, but it&apos;s not clear to me which were related to the test breakage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340989</commentid>
    <comment_count>19</comment_count>
      <attachid>80354</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-27 12:13:21 -0800</bug_when>
    <thetext>Created attachment 80354
delta from r76709</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340993</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-27 12:24:36 -0800</bug_when>
    <thetext>Okay, I&apos;ve uploaded the delta from the patch that was committed, for easier review. There were two problems with the patch that got committed. The first was that DRT (and MockDRT) writes 8-bit strings to stdout (including the PNG output), but the MockDRT port was attempting to combine all of the output using StringIO. Some of the output in MockDRT is actually unicode, so it was attempting to convert the 8-bit to unicode while concatenating all of the text together (in stdout.getvalue()), and choking. The fix is to not concatenate the files and compare the individual write()s (in the .buflist field).

Alternatively I could try to get MockDRT to only output raw strings and hope that StringIO doesn&apos;t decide that some of them should be unicode and try to convert them. I&apos;m looking for feedback here.

Now, this problem was triggered by the fact that I was using the actual snow-leopard expectations, but had a bug where instead of reading the snow-leopard &quot;actuals&quot;, I was using whatever the default port was (linux, mac-leopard, etc). So, I fixed that bug (in MockDRTPortTest.make_drt()), but also switched from the mac-snowleopard expectations to the test port expectations, to be platform- and filesystem- independent.

Fixing these things made me realize that I didn&apos;t have a test case for when the checksums mismatched and DRT actually output the PNG, so I added that, and I modified the TestPort implementation to include non-unicode characters in the PNG output.

I then ran some coverage tests and added tests for the other stuff that was missing (mostly the stub routines like start_http_server on both mock_drt.py and dryrun.py. I also changed the syntax so that --platform mock won&apos;t work, you have to say --platform mock-X to be explicit about which port you want to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341042</commentid>
    <comment_count>21</comment_count>
      <attachid>80278</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-27 14:13:07 -0800</bug_when>
    <thetext>Comment on attachment 80278
Patch

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

I&apos;m still a bit confused as to where we need to use unicode().  From your description, it sounds like we don&apos;t need to use unicode() since you use .buflist?

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:189
&gt; +            self._stdout.write(&quot;ExpectedHash: %s\n&quot; % unicode(expected_checksum))

Do we need the call to unicode() here if we&apos;re using .buflist?  If so, why doesn&apos;t |actual_checksum| need to call it?

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:46
&gt; +    def test_port_name_in_constructor(self):
&gt; +        self.assertTrue(mock_drt.MockDRTPort(port_name=&apos;mock-test&apos;))

This will always return an object unless there&apos;s an exception.  Maybe just remove the assertTrue call?

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:146
&gt; +    def assertTest(self, test_name, pixel_tests, expected_checksum=None, drt_output=None):

Nit: Maybe name this test something other than assertTest.  It kind of looks like one of the assertion methods in unittest.TestCase.

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:55
&gt; +        self.actual_text = unicode(self.base + &apos;-txt&apos;)
&gt; +        self.actual_checksum = unicode(self.base + &apos;-checksum&apos;)

I don&apos;t understand why we need the unicode() calls here.  Is this change related to the mock drt failures?  If not, why is it in this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341054</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-27 14:27:21 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 80278 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80278&amp;action=review
&gt; 
&gt; I&apos;m still a bit confused as to where we need to use unicode().  From your description, it sounds like we don&apos;t need to use unicode() since you use .buflist?
&gt; 

Fair enough. I can get rid of all of the unicode() calls and u&quot;&quot; literals and the tests will still pass. It does however obscure the issue around StringIO&apos;s handling of a mixture of the two types. There doesn&apos;t appear to be a way to tell StringIO to *only* use 8-bit (non-encoded) strings. I thought that perhaps explicitly mixing unicode and non-unicode might be a little clearer about this, but maybe this is adequately addressed through just having the comment near the .buflist.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:189
&gt; &gt; +            self._stdout.write(&quot;ExpectedHash: %s\n&quot; % unicode(expected_checksum))
&gt; 
&gt; Do we need the call to unicode() here if we&apos;re using .buflist?  If so, why doesn&apos;t |actual_checksum| need to call it?
&gt;

See above. actual_checksum, coming from the split routine called previously, is already unicode.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:46
&gt; &gt; +    def test_port_name_in_constructor(self):
&gt; &gt; +        self.assertTrue(mock_drt.MockDRTPort(port_name=&apos;mock-test&apos;))
&gt; 
&gt; This will always return an object unless there&apos;s an exception.  Maybe just remove the assertTrue call?
&gt; 

Good point. Will do.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:146
&gt; &gt; +    def assertTest(self, test_name, pixel_tests, expected_checksum=None, drt_output=None):
&gt; 
&gt; Nit: Maybe name this test something other than assertTest.  It kind of looks like one of the assertion methods in unittest.TestCase.
&gt;

It was supposed to :) Would it be better to call it something like assertOneTestRunsFine(), or would you prefer it not to be called assert* at all?

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:55
&gt; &gt; +        self.actual_text = unicode(self.base + &apos;-txt&apos;)
&gt; &gt; +        self.actual_checksum = unicode(self.base + &apos;-checksum&apos;)
&gt; 
&gt; I don&apos;t understand why we need the unicode() calls here.  Is this change related to the mock drt failures?  If not, why is it in this change?

Yes, it is related. I encode these as unicode to ensure that it replicates the bug we saw with mixing unicode and non-unicode strings. Would adding a comment here help? I thought I had added a comment about the \x89 in the png string, but I didn&apos;t, and it seems like that at the very least should be there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341061</commentid>
    <comment_count>23</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-27 14:43:56 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I thought that perhaps explicitly mixing unicode and non-unicode might be a little clearer about this, but maybe this is adequately addressed through just having the comment near the .buflist.

I think the mixed usage is confusing me.  If I understand correctly, the problem is that we are putting unicode() strings and unencoded strings into a StringIO buffer and that is confusing StringIO.  Can we only put unencoded strings into the StringIO buffer since the image data is unencoded?  E.g., on unicode strings, call .encode(&apos;ascii&apos;) or .encode(&apos;utf8&apos;)?

&gt; It was supposed to :) Would it be better to call it something like assertOneTestRunsFine(), or would you prefer it not to be called assert* at all?

Oh, I see.  Yeah, this is fine.  Maybe something like assertOneTestRun?

&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:55
&gt; &gt; &gt; +        self.actual_text = unicode(self.base + &apos;-txt&apos;)
&gt; &gt; &gt; +        self.actual_checksum = unicode(self.base + &apos;-checksum&apos;)
&gt; &gt; 
&gt; &gt; I don&apos;t understand why we need the unicode() calls here.  Is this change related to the mock drt failures?  If not, why is it in this change?
&gt; 
&gt; Yes, it is related. I encode these as unicode to ensure that it replicates the bug we saw with mixing unicode and non-unicode strings. Would adding a comment here help? I thought I had added a comment about the \x89 in the png string, but I didn&apos;t, and it seems like that at the very least should be there.

Seems like it would be better to not mix unicode and non-unicode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341080</commentid>
    <comment_count>24</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-27 15:16:33 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; I thought that perhaps explicitly mixing unicode and non-unicode might be a little clearer about this, but maybe this is adequately addressed through just having the comment near the .buflist.
&gt; 
&gt; I think the mixed usage is confusing me.  If I understand correctly, the problem is that we are putting unicode() strings and unencoded strings into a StringIO buffer and that is confusing StringIO.  Can we only put unencoded strings into the StringIO buffer since the image data is unencoded?  E.g., on unicode strings, call .encode(&apos;ascii&apos;) or .encode(&apos;utf8&apos;)?

DRT mixes MIME types on its output (text/plain and image/png). I don&apos;t know if it is defined that DRT is only supposed to return ASCII, or UTF-8, or if it could be either. But, NRWT reads the text output as if it is UTF-8, so that appears to work.

So, DRT already mixes unicode and non-unicode. I think the unit tests should reflect this and do the same thing.

&gt; &gt; It was supposed to :) Would it be better to call it something like assertOneTestRunsFine(), or would you prefer it not to be called assert* at all?
&gt; 
&gt; Oh, I see.  Yeah, this is fine.  Maybe something like assertOneTestRun?
&gt;

Sure.
 
&gt; &gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:55
&gt; &gt; &gt; &gt; +        self.actual_text = unicode(self.base + &apos;-txt&apos;)
&gt; &gt; &gt; &gt; +        self.actual_checksum = unicode(self.base + &apos;-checksum&apos;)
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t understand why we need the unicode() calls here.  Is this change related to the mock drt failures?  If not, why is it in this change?
&gt; &gt; 
&gt; &gt; Yes, it is related. I encode these as unicode to ensure that it replicates the bug we saw with mixing unicode and non-unicode strings. Would adding a comment here help? I thought I had added a comment about the \x89 in the png string, but I didn&apos;t, and it seems like that at the very least should be there.
&gt; 
&gt; Seems like it would be better to not mix unicode and non-unicode.

As per above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341182</commentid>
    <comment_count>25</comment_count>
      <attachid>80387</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-27 17:45:47 -0800</bug_when>
    <thetext>Created attachment 80387
put the encoding/decoding of utf-8 where it should be, in filesystem_mock and MockDRT()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341185</commentid>
    <comment_count>26</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-27 17:49:48 -0800</bug_when>
    <thetext>Okey, in a conversation over IM tony and eventually worked out that we think the most realistic way to reproduce what the real code is doing is to have test.py store values as raw byte strings (no unicode casts or literals), rely on filesystem_mock to do the conversion to unicode, and to have the MockDRT code explicitly convert the unicode strings *back* into byte strings to be written to &quot;stdout&quot;.

As a result, it probably should be safe to use StringIO.getvalue() since everything should be raw strings, but I&apos;ll leave the code as a buflist for now.

You can mostly disregard the diffs in test.py, they&apos;re just indentation cleanup. However, look at the comments in TestInstance() over how we expect unicode to be handled. And, this actually revealed a bug in the mock diff_image implementation, which was writing a text file instead of a binary file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341491</commentid>
    <comment_count>27</comment_count>
      <attachid>80387</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-28 09:50:57 -0800</bug_when>
    <thetext>Comment on attachment 80387
put the encoding/decoding of utf-8 where it should be, in filesystem_mock and MockDRT()

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:180
&gt; +        actual_text = port.expected_text(test_path).encode(&apos;utf-8&apos;)
&gt; +        if self._options.pixel_tests and expected_checksum:
&gt; +            actual_checksum = port.expected_checksum(test_path).encode(&apos;utf-8&apos;)
&gt; +            actual_image = port.expected_image(test_path)

Nit: Rather than calling encode(&apos;utf-8&apos;) in lots of places, maybe there should be a helper &quot;write_text_file_data_to_stdout&quot; that does the conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341692</commentid>
    <comment_count>28</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 13:34:19 -0800</bug_when>
    <thetext>Committed r76982: &lt;http://trac.webkit.org/changeset/76982&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341724</commentid>
    <comment_count>29</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 14:10:10 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 80387 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80387&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:180
&gt; &gt; +        actual_text = port.expected_text(test_path).encode(&apos;utf-8&apos;)
&gt; &gt; +        if self._options.pixel_tests and expected_checksum:
&gt; &gt; +            actual_checksum = port.expected_checksum(test_path).encode(&apos;utf-8&apos;)
&gt; &gt; +            actual_image = port.expected_image(test_path)
&gt; 
&gt; Nit: Rather than calling encode(&apos;utf-8&apos;) in lots of places, maybe there should be a helper &quot;write_text_file_data_to_stdout&quot; that does the conversion.

Good suggestion. I decided to do something slightly different and added a raw_bytes() method and changed a bunch of variable names to make it clearer that we were writing byte strings rather than unicode strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341749</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-28 14:37:49 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76982 might have broken Leopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341806</commentid>
    <comment_count>31</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-01-28 15:40:28 -0800</bug_when>
    <thetext>I think these changes have broken the Windows 7 Release Tests

http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/8769
http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/8770</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341852</commentid>
    <comment_count>32</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 16:40:59 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; I think these changes have broken the Windows 7 Release Tests
&gt; 
&gt; http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/8769
&gt; http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/8770

I checked in a temporary fix to work around this in r77023. I will upload a different patch with a cleaner fix for review, but hopefully this unblocks things and keeps us from having to revert this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341898</commentid>
    <comment_count>33</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 17:41:59 -0800</bug_when>
    <thetext>Committed r77038: &lt;http://trac.webkit.org/changeset/77038&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80121</attachid>
            <date>2011-01-25 14:31:02 -0800</date>
            <delta_ts>2011-01-25 14:33:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53126-20110125143101.patch</filename>
            <type>text/plain</type>
            <size>14146</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi42ODAzNWZmMGQ0N2Y4NjUwN2Nj
Njk4YzU0MWExOTRhZjBlYWY5ZjczIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMjUgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgIk1vY2tEUlQiIFB5dGhvbiBzY3JpcHQgdGhhdCBlbXVs
YXRlcyB3aGF0IHRoZSBiZWhhdmlvciBvZgorICAgICAgICBEdW1wUmVuZGVyVHJlZSBpcyBzdXBw
b3NlZCB0byBiZSwgYW5kIGEgLS1tb2NrLWRydCBmbGFnCisgICAgICAgIHRvIG5ldy1ydW4td2Vi
a2l0LXRlc3RzIHRvIHVzZSB0aGlzIGluc3RlYWQgb2YgdGhlIHJlYWwgYmluYXJ5LgorCisgICAg
ICAgIFRoaXMgd2lsbCBldmVudHVhbGx5IHJlcGxhY2UgcG9ydC9kcnlydW4ucHkgYW5kIGFsbG93
IHVzIHRvIGdldAorICAgICAgICBiZXR0ZXIgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgbmV3LXJ1bi13
ZWJraXQtdGVzdHMgY29kZSBhcyB3ZWxsIGFzCisgICAgICAgIGEgcmVmZXJlbmNlIGZvciB3aGF0
IG5ldy1ydW4td2Via2l0LXRlc3RzIGV4cGVjdHMgZnJvbSBEUlQuCisKKyAgICAgICAgVGhpcyBp
cyB0aGUgZmlyc3QgYXR0ZW1wdCBhdCB0aGlzLCBhbmQgaXQgaXMgcHJldHR5IGJhcmUtYm9uZWQu
IEl0CisgICAgICAgIHJlYWxseSBvbmx5IGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgJ21hYycgcG9y
dCAoYW5kIGEgbGl0dGxlIG9uCisgICAgICAgIHRoZSAnY2hyb21pdW0tbWFjJyBwb3J0LgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnQucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vY2tfZHJ0X3VuaXR0
ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Via2l0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHk6CisKIDIwMTEtMDEtMjQgIEFuZHJlYXMgS2xpbmcgIDxrbGlu
Z0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnQucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2NrX2RydC5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YTQwNGQ5MzM1ZDM3NWE2NGNlNzdjMWM2ZDU4MWYyYjQwZjJkNmY1Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnQucHkKQEAg
LTAsMCArMSwxMzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyIiIk1vY2tlZC1vdXQgaW1wbGVtZW50YXRpb24gb2YgRHVtcFJlbmRlclRyZWUuIiIiCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBvcnQK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBtYWluKGFyZ3Ys
IHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgIiIiUnVuIHRoZSB0ZXN0cy4iIiIKKworICAg
IG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9vcHRpb25zKGFyZ3YpCisgICAgZHJ0ID0gTW9ja0RSVChv
cHRpb25zLCBhcmdzLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIGRydC5ydW4o
KQorCisKK2RlZiBwYXJzZV9vcHRpb25zKGFyZ3YpOgorICAgICMgRklYTUU6IFdlIG5lZWQgdG8g
ZmlndXJlIG91dCBob3cgdG8gaGFuZGxlIHZhcmlhbnRzIHRoYXQgaGF2ZQorICAgICMgZGlmZmVy
ZW50IGNvbW1hbmQtbGluZSBjb252ZW50aW9ucy4KKyAgICBvcHRpb25fbGlzdCA9IFsKKyAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcGxhdGZvcm0nLCBhY3Rpb249J3N0b3JlJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncGxhdGZvcm0gdG8gZW11bGF0ZScpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1sYXlvdXQtdGVzdHMnLCBhY3Rpb249J3N0
b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGhl
bHA9J3J1biBsYXlvdXQgdGVzdHMnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0t
cGl4ZWwtdGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdvdXRwdXQgaW1hZ2UgZm9yIHBpeGVsIHRlc3RzJyksCisgICAgXQorICAgIG9wdGlvbl9wYXJz
ZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCisgICAg
cmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisKK2NsYXNzIE1vY2tEUlQo
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgYXJncywgc3RkaW4sIHN0
ZG91dCwgc3RkZXJyKToKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAg
c2VsZi5fYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5fc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAg
IHNlbGYuX3N0ZGluID0gc3RkaW4KKyAgICAgICAgc2VsZi5fc3RkZXJyID0gc3RkZXJyCisKKyAg
ICAgICAgcG9ydF9uYW1lID0gTm9uZQorICAgICAgICBpZiBvcHRpb25zLnBsYXRmb3JtOgorICAg
ICAgICAgICAgcG9ydF9uYW1lID0gb3B0aW9ucy5wbGF0Zm9ybQorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydC5nZXQocG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMpCisgICAgICAgIHNlbGYuX2V4
aXRfc3RhdHVzID0gMAorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fc3RkaW4ucmVh
ZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAg
ICBicmVhaworCisgICAgICAgICAgICAgICAgKHVybCwgZXhwZWN0ZWRfY2hlY2tzdW0pID0gc2Vs
Zi5wYXJzZV9pbnB1dChsaW5lKQorICAgICAgICAgICAgICAgIHNlbGYucnVuX29uZV90ZXN0KHVy
bCwgZXhwZWN0ZWRfY2hlY2tzdW0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAg
ICAgICAgICAgc2VsZi5fc3RkZXJyLndyaXRlKCJNb2NrRFJUIGV4aXRpbmcsIFZhbHVlRXJyb3Ig
cmFpc2VkOiAnJXMnXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzdHIoZSkp
CisgICAgICAgICAgICBzZWxmLl9leGl0X3N0YXR1cyA9IDEKKyAgICAgICAgZXhjZXB0IEV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyci53cml0ZSgiTW9ja0RSVCBleGl0aW5n
LCB1bmV4cGVjdGVkIGV4Y2VwdGlvbjogJyVzJ1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICUgc3RyKGUpKQorICAgICAgICAgICAgc2VsZi5fZXhpdF9zdGF0dXMgPSAtMQorCisg
ICAgICAgIHJldHVybiBzZWxmLl9leGl0X3N0YXR1cworCisgICAgZGVmIHBhcnNlX2lucHV0KHNl
bGYsIGxpbmUpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmICInIiBp
biBsaW5lOgorICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoIiciKQorICAgICAgICByZXR1
cm4gKGxpbmUsIE5vbmUpCisKKyAgICBkZWYgcnVuX29uZV90ZXN0KHNlbGYsIHVybCwgZXhwZWN0
ZWRfY2hlY2tzdW0pOgorICAgICAgICBwb3J0ID0gc2VsZi5fcG9ydAorICAgICAgICBpZiB1cmwu
c3RhcnRzd2l0aCgnZmlsZTovLy8nKSBvciB1cmwuc3RhcnRzd2l0aCgnaHR0cCcpOgorICAgICAg
ICAgICAgdGVzdF9uYW1lID0gcG9ydC51cmlfdG9fdGVzdF9uYW1lKHVybCkKKyAgICAgICAgICAg
IHRlc3RfcGF0aCA9IHBvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsIHRl
c3RfbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RfcGF0aCA9IHVybAorCisg
ICAgICAgIGFjdHVhbF90ZXh0ID0gcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfcGF0aCkKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgZXhwZWN0ZWRfY2hlY2tzdW06Cisg
ICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHRlc3Rf
cGF0aCkKKyAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9IHBvcnQuZXhwZWN0ZWRfaW1hZ2UodGVz
dF9wYXRoKQorCisgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiQ29udGVudC1UeXBlOiB0ZXh0
L3BsYWluXG4iKQorICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoYWN0dWFsX3RleHQpCisgICAg
ICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiI0VPRlxuIikKKworICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzIGFuZCBleHBlY3RlZF9jaGVja3N1bToKKyAgICAgICAgICAgIHNlbGYu
X3N0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCJBY3R1
YWxIYXNoOiAlc1xuIiAlIGFjdHVhbF9jaGVja3N1bSkKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91
dC53cml0ZSgiRXhwZWN0ZWRIYXNoOiAlc1xuIiAlIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAg
ICAgICAgaWYgYWN0dWFsX2NoZWNrc3VtICE9IGV4cGVjdGVkX2NoZWNrc3VtOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiQ29udGVudC1MZW5ndGg6ICVzXG5cbiIgJSBsZW4o
YWN0dWFsX2ltYWdlKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoYWN0dWFs
X2ltYWdlKQorICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIiNFT0ZcbiIpCisgICAgICAgIHNl
bGYuX3N0ZG91dC5mbHVzaCgpCisgICAgICAgIHNlbGYuX3N0ZGVyci5mbHVzaCgpCisKKworaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwg
c3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vY2tfZHJ0X3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnRfdW5pdHRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTNkZTY2NDliNWQzMzY3NTQ0MTQzYWVmMjEyYmI4MWZmOTAzZGY1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vY2tfZHJ0X3Vu
aXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTA4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBNb2NrRFJULiIiIgorCitpbXBvcnQgdW5p
dHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG5ld3N0cmluZ2lvCisKK2ltcG9y
dCBtb2NrX2RydAoraW1wb3J0IHBvcnQKKworCitjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydC5n
ZXQoJ21hYy1zbm93bGVvcGFyZCcpCisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgPSBz
ZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQorCisgICAgZGVmIHRvX3BhdGgoc2VsZiwgdGVz
dF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
Ll9sYXlvdXRfdGVzdHNfZGlyLCB0ZXN0X25hbWUpCisKKyAgICBkZWYgaW5wdXRfbGluZShzZWxm
LCB0ZXN0X25hbWUsIGNoZWNrc3VtPU5vbmUpOgorICAgICAgICB1cmwgPSBzZWxmLl9wb3J0LmZp
bGVuYW1lX3RvX3VyaShzZWxmLnRvX3BhdGgodGVzdF9uYW1lKSkKKyAgICAgICAgaWYgY2hlY2tz
dW06CisgICAgICAgICAgICByZXR1cm4gdXJsICsgIiciICsgY2hlY2tzdW0gKyAnXG4nCisgICAg
ICAgIHJldHVybiB1cmwgKyAnXG4nCisKKyAgICBkZWYgbWFrZV9kcnQoc2VsZiwgaW5wdXRfc3Ry
aW5nLCBhcmdzPU5vbmUsIGV4dHJhX2FyZ3M9Tm9uZSk6CisgICAgICAgIGFyZ3MgPSBhcmdzIG9y
IFsnLS1wbGF0Zm9ybScsICdtYWMtc25vd2xlb3BhcmQnLCAnLSddCisgICAgICAgIGV4dHJhX2Fy
Z3MgPSBleHRyYV9hcmdzIG9yIFtdCisgICAgICAgIGFyZ3MgKz0gZXh0cmFfYXJncworICAgICAg
ICBzdGRpbiA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKGlucHV0X3N0cmluZykKKyAgICAgICAgc3Rk
b3V0ID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQorICAgICAgICBzdGRlcnIgPSBuZXdzdHJpbmdp
by5TdHJpbmdJTygpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBtb2NrX2RydC5wYXJzZV9vcHRp
b25zKGFyZ3MpCisgICAgICAgIGRydCA9IG1vY2tfZHJ0Lk1vY2tEUlQob3B0aW9ucywgYXJncywg
c3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICByZXR1cm4gKGRydCwgc3Rkb3V0LCBzdGRl
cnIpCisKKyAgICBkZWYgbWFrZV9pbnB1dF9vdXRwdXQoc2VsZiwgdGVzdF9uYW1lLCBwaXhlbF90
ZXN0cyk6CisgICAgICAgIHBhdGggPSBzZWxmLnRvX3BhdGgodGVzdF9uYW1lKQorICAgICAgICBl
eHBlY3RlZF9jaGVja3N1bSA9IE5vbmUKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAg
ICAgICBleHBlY3RlZF9jaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0ocGF0
aCkKKyAgICAgICAgZHJ0X2lucHV0ID0gc2VsZi5pbnB1dF9saW5lKHRlc3RfbmFtZSwgZXhwZWN0
ZWRfY2hlY2tzdW0pCisgICAgICAgIHRleHRfb3V0cHV0ID0gc2VsZi5fcG9ydC5leHBlY3RlZF90
ZXh0KHBhdGgpCisKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBkcnRfb3V0
cHV0ID0gIiIiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCislcyNFT0YKKworQWN0dWFsSGFzaDog
JXMKK0V4cGVjdGVkSGFzaDogJXMKKyNFT0YKKyIiIiAlICh0ZXh0X291dHB1dCwgZXhwZWN0ZWRf
Y2hlY2tzdW0sIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ZHJ0X291dHB1dCA9ICIiIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorJXMjRU9GCisjRU9GCisi
IiIgJSAodGV4dF9vdXRwdXQpCisKKyAgICAgICAgcmV0dXJuIChkcnRfaW5wdXQsIGRydF9vdXRw
dXQpCisKKyAgICBkZWYgYXNzZXJ0VGVzdChzZWxmLCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzKToK
KyAgICAgICAgZHJ0X2lucHV0LCBkcnRfb3V0cHV0ID0gc2VsZi5tYWtlX2lucHV0X291dHB1dCh0
ZXN0X25hbWUsIHBpeGVsX3Rlc3RzKQorICAgICAgICBleHRyYV9hcmdzID0gW10KKyAgICAgICAg
aWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBleHRyYV9hcmdzID0gWyctLXBpeGVsLXRlc3Rz
J10KKyAgICAgICAgZHJ0LCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYubWFrZV9kcnQoZHJ0X2lucHV0
LCBleHRyYV9hcmdzKQorICAgICAgICByZXMgPSBkcnQucnVuKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVl
KCksIGRydF9vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZhbHVl
KCksICcnKQorCisgICAgZGVmIHRlc3RfcGl4ZWx0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydFRlc3QoJ2Zhc3QvaHRtbC9rZXlnZW4uaHRtbCcsIFRydWUpCisKKyAgICBkZWYgdGVzdF90
ZXh0b25seShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdmYXN0L2h0bWwvYXJ0aWNs
ZS1lbGVtZW50Lmh0bWwnLCBGYWxzZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggYWQxYmVhNjU4ODgxOWExZDVkNzNkN2E3
YWU1MzdjMzQ1Yzk2NGNkYi4uM2JmMjFhZGJkMGY0YjE2ZjBiODBmY2U4ZmY3YWVkOTMyYjVlNWEx
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CkBAIC0xNzgsNiArMTc4LDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2Uu
UG9ydCk6CiAgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnVzZV90ZXN0X3NoZWxsOgogICAgICAgICAgICAgcmV0dXJuICJ0ZXN0X3NoZWxsIgorICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ21vY2tfZHJ0Jyk6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnd2Via2l0cHkn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRf
dGVzdHMnLCAnbW9ja19kcnQucHknKQogICAgICAgICByZXR1cm4gIkR1bXBSZW5kZXJUcmVlIgog
CiAgICAgZGVmIHBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKHNlbGYsICpjb21wcyk6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CmluZGV4
IDQ3NjU1NWM1YTI5YzA5OWIwMmNhZjRiY2E0Y2Q4Mzk3OWRjZDc4MzcuLjRjMmMzZWNhYWFlZjMy
MDNiMDA3YjQ1ZGQwMzVjYTE0ODY5ZGVmZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBAIC0zNDQsNiArMzQ0LDkgQEAgY2xh
c3MgV2ViS2l0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgc2VsZi5nZXRfb3B0aW9uKCdj
b25maWd1cmF0aW9uJykpLCAqY29tcHMpCiAKICAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ21vY2tfZHJ0Jyk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnd2Vi
a2l0cHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICds
YXlvdXRfdGVzdHMnLCAnbW9ja19kcnQucHknKQogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRf
cGF0aCgnRHVtcFJlbmRlclRyZWUnKQogCiAgICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFy
eShzZWxmKToKQEAgLTM4OSw2ICszOTIsOSBAQCBjbGFzcyBXZWJLaXREcml2ZXIoYmFzZS5Ecml2
ZXIpOgogICAgICAgICBjbWQgPSBzZWxmLl9jb21tYW5kX3dyYXBwZXIoc2VsZi5fcG9ydC5nZXRf
b3B0aW9uKCd3cmFwcGVyJykpCiAgICAgICAgIGNtZCArPSBbc2VsZi5fcG9ydC5fcGF0aF90b19k
cml2ZXIoKSwgJy0nXQogCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbignbW9ja19k
cnQnKSBhbmQgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdwbGF0Zm9ybScpOgorICAgICAgICAgICAg
Y21kICs9IFsnLS1wbGF0Zm9ybScsIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigncGxhdGZvcm0nKV0K
KwogICAgICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyk6CiAgICAg
ICAgICAgICBjbWQuYXBwZW5kKCctLXBpeGVsLXRlc3RzJykKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXgg
MTdiNmU4OTk4Njg3OTE5NWNkY2VhMzUwYTViOGExMDFkYTc3YWRiMC4uMDZkMDk2Yzg0NmM1MWQx
NTBmMmM3NmEwNjRmY2QxY2U2OTkyYTgwZiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yMDMsNiArMjAz
LDkgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Q9J1JlbGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIFJlbGVhc2Un
KSwKICAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBhbHNvIGFjY2VwdHMgLWMsIC0tY29u
ZmlndXJhdGlvbiBDT05GSUdVUkFUSU9OLgorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1tb2NrLWRydCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1VzZSB0aGUgZmFrZSBEdW1wUmVuZGVyVHJlZSBiaW5hcnkgaW5zdGVhZCAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIHRoZSByZWFsIG9uZSwgZm9y
IHRlc3RpbmcnKSwKICAgICBdCiAKICAgICBwcmludF9vcHRpb25zID0gcHJpbnRpbmcucHJpbnRf
b3B0aW9ucygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80124</attachid>
            <date>2011-01-25 14:33:23 -0800</date>
            <delta_ts>2011-01-25 18:08:27 -0800</delta_ts>
            <desc>add bug # to ChangeLog</desc>
            <filename>bug-53126-20110125143321.patch</filename>
            <type>text/plain</type>
            <size>14203</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi45MWZmNDhlN2ZkN2RkYjEwMzU5
YjA2NzUwYjBhNmZkZGQ1ZTU4ZDA0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDEtMjUgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgIk1vY2tEUlQiIFB5dGhvbiBzY3JpcHQgdGhhdCBlbXVs
YXRlcyB3aGF0IHRoZSBiZWhhdmlvciBvZgorICAgICAgICBEdW1wUmVuZGVyVHJlZSBpcyBzdXBw
b3NlZCB0byBiZSwgYW5kIGEgLS1tb2NrLWRydCBmbGFnCisgICAgICAgIHRvIG5ldy1ydW4td2Vi
a2l0LXRlc3RzIHRvIHVzZSB0aGlzIGluc3RlYWQgb2YgdGhlIHJlYWwgYmluYXJ5LgorCisgICAg
ICAgIFRoaXMgd2lsbCBldmVudHVhbGx5IHJlcGxhY2UgcG9ydC9kcnlydW4ucHkgYW5kIGFsbG93
IHVzIHRvIGdldAorICAgICAgICBiZXR0ZXIgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgbmV3LXJ1bi13
ZWJraXQtdGVzdHMgY29kZSBhcyB3ZWxsIGFzCisgICAgICAgIGEgcmVmZXJlbmNlIGZvciB3aGF0
IG5ldy1ydW4td2Via2l0LXRlc3RzIGV4cGVjdHMgZnJvbSBEUlQuCisKKyAgICAgICAgVGhpcyBp
cyB0aGUgZmlyc3QgYXR0ZW1wdCBhdCB0aGlzLCBhbmQgaXQgaXMgcHJldHR5IGJhcmUtYm9uZWQu
IEl0CisgICAgICAgIHJlYWxseSBvbmx5IGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgJ21hYycgcG9y
dCAoYW5kIGEgbGl0dGxlIG9uCisgICAgICAgIHRoZSAnY2hyb21pdW0tbWFjJyBwb3J0LgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzEyNgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnQucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vY2tfZHJ0X3VuaXR0
ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Via2l0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHk6CisKIDIwMTEtMDEtMjQgIEFuZHJlYXMgS2xpbmcgIDxrbGlu
Z0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnQucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2NrX2RydC5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YTQwNGQ5MzM1ZDM3NWE2NGNlNzdjMWM2ZDU4MWYyYjQwZjJkNmY1Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnQucHkKQEAg
LTAsMCArMSwxMzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyIiIk1vY2tlZC1vdXQgaW1wbGVtZW50YXRpb24gb2YgRHVtcFJlbmRlclRyZWUuIiIiCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBvcnQK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBtYWluKGFyZ3Ys
IHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgIiIiUnVuIHRoZSB0ZXN0cy4iIiIKKworICAg
IG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9vcHRpb25zKGFyZ3YpCisgICAgZHJ0ID0gTW9ja0RSVChv
cHRpb25zLCBhcmdzLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIGRydC5ydW4o
KQorCisKK2RlZiBwYXJzZV9vcHRpb25zKGFyZ3YpOgorICAgICMgRklYTUU6IFdlIG5lZWQgdG8g
ZmlndXJlIG91dCBob3cgdG8gaGFuZGxlIHZhcmlhbnRzIHRoYXQgaGF2ZQorICAgICMgZGlmZmVy
ZW50IGNvbW1hbmQtbGluZSBjb252ZW50aW9ucy4KKyAgICBvcHRpb25fbGlzdCA9IFsKKyAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcGxhdGZvcm0nLCBhY3Rpb249J3N0b3JlJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncGxhdGZvcm0gdG8gZW11bGF0ZScpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1sYXlvdXQtdGVzdHMnLCBhY3Rpb249J3N0
b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGhl
bHA9J3J1biBsYXlvdXQgdGVzdHMnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0t
cGl4ZWwtdGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdvdXRwdXQgaW1hZ2UgZm9yIHBpeGVsIHRlc3RzJyksCisgICAgXQorICAgIG9wdGlvbl9wYXJz
ZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCisgICAg
cmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisKK2NsYXNzIE1vY2tEUlQo
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgYXJncywgc3RkaW4sIHN0
ZG91dCwgc3RkZXJyKToKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAg
c2VsZi5fYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5fc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAg
IHNlbGYuX3N0ZGluID0gc3RkaW4KKyAgICAgICAgc2VsZi5fc3RkZXJyID0gc3RkZXJyCisKKyAg
ICAgICAgcG9ydF9uYW1lID0gTm9uZQorICAgICAgICBpZiBvcHRpb25zLnBsYXRmb3JtOgorICAg
ICAgICAgICAgcG9ydF9uYW1lID0gb3B0aW9ucy5wbGF0Zm9ybQorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydC5nZXQocG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMpCisgICAgICAgIHNlbGYuX2V4
aXRfc3RhdHVzID0gMAorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fc3RkaW4ucmVh
ZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAg
ICBicmVhaworCisgICAgICAgICAgICAgICAgKHVybCwgZXhwZWN0ZWRfY2hlY2tzdW0pID0gc2Vs
Zi5wYXJzZV9pbnB1dChsaW5lKQorICAgICAgICAgICAgICAgIHNlbGYucnVuX29uZV90ZXN0KHVy
bCwgZXhwZWN0ZWRfY2hlY2tzdW0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAg
ICAgICAgICAgc2VsZi5fc3RkZXJyLndyaXRlKCJNb2NrRFJUIGV4aXRpbmcsIFZhbHVlRXJyb3Ig
cmFpc2VkOiAnJXMnXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzdHIoZSkp
CisgICAgICAgICAgICBzZWxmLl9leGl0X3N0YXR1cyA9IDEKKyAgICAgICAgZXhjZXB0IEV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyci53cml0ZSgiTW9ja0RSVCBleGl0aW5n
LCB1bmV4cGVjdGVkIGV4Y2VwdGlvbjogJyVzJ1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICUgc3RyKGUpKQorICAgICAgICAgICAgc2VsZi5fZXhpdF9zdGF0dXMgPSAtMQorCisg
ICAgICAgIHJldHVybiBzZWxmLl9leGl0X3N0YXR1cworCisgICAgZGVmIHBhcnNlX2lucHV0KHNl
bGYsIGxpbmUpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmICInIiBp
biBsaW5lOgorICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoIiciKQorICAgICAgICByZXR1
cm4gKGxpbmUsIE5vbmUpCisKKyAgICBkZWYgcnVuX29uZV90ZXN0KHNlbGYsIHVybCwgZXhwZWN0
ZWRfY2hlY2tzdW0pOgorICAgICAgICBwb3J0ID0gc2VsZi5fcG9ydAorICAgICAgICBpZiB1cmwu
c3RhcnRzd2l0aCgnZmlsZTovLy8nKSBvciB1cmwuc3RhcnRzd2l0aCgnaHR0cCcpOgorICAgICAg
ICAgICAgdGVzdF9uYW1lID0gcG9ydC51cmlfdG9fdGVzdF9uYW1lKHVybCkKKyAgICAgICAgICAg
IHRlc3RfcGF0aCA9IHBvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsIHRl
c3RfbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RfcGF0aCA9IHVybAorCisg
ICAgICAgIGFjdHVhbF90ZXh0ID0gcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfcGF0aCkKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgZXhwZWN0ZWRfY2hlY2tzdW06Cisg
ICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHRlc3Rf
cGF0aCkKKyAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9IHBvcnQuZXhwZWN0ZWRfaW1hZ2UodGVz
dF9wYXRoKQorCisgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiQ29udGVudC1UeXBlOiB0ZXh0
L3BsYWluXG4iKQorICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoYWN0dWFsX3RleHQpCisgICAg
ICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiI0VPRlxuIikKKworICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzIGFuZCBleHBlY3RlZF9jaGVja3N1bToKKyAgICAgICAgICAgIHNlbGYu
X3N0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCJBY3R1
YWxIYXNoOiAlc1xuIiAlIGFjdHVhbF9jaGVja3N1bSkKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91
dC53cml0ZSgiRXhwZWN0ZWRIYXNoOiAlc1xuIiAlIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAg
ICAgICAgaWYgYWN0dWFsX2NoZWNrc3VtICE9IGV4cGVjdGVkX2NoZWNrc3VtOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiQ29udGVudC1MZW5ndGg6ICVzXG5cbiIgJSBsZW4o
YWN0dWFsX2ltYWdlKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoYWN0dWFs
X2ltYWdlKQorICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIiNFT0ZcbiIpCisgICAgICAgIHNl
bGYuX3N0ZG91dC5mbHVzaCgpCisgICAgICAgIHNlbGYuX3N0ZGVyci5mbHVzaCgpCisKKworaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwg
c3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vY2tfZHJ0X3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9ja19kcnRfdW5pdHRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTNkZTY2NDliNWQzMzY3NTQ0MTQzYWVmMjEyYmI4MWZmOTAzZGY1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vY2tfZHJ0X3Vu
aXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTA4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBNb2NrRFJULiIiIgorCitpbXBvcnQgdW5p
dHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG5ld3N0cmluZ2lvCisKK2ltcG9y
dCBtb2NrX2RydAoraW1wb3J0IHBvcnQKKworCitjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydC5n
ZXQoJ21hYy1zbm93bGVvcGFyZCcpCisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgPSBz
ZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQorCisgICAgZGVmIHRvX3BhdGgoc2VsZiwgdGVz
dF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
Ll9sYXlvdXRfdGVzdHNfZGlyLCB0ZXN0X25hbWUpCisKKyAgICBkZWYgaW5wdXRfbGluZShzZWxm
LCB0ZXN0X25hbWUsIGNoZWNrc3VtPU5vbmUpOgorICAgICAgICB1cmwgPSBzZWxmLl9wb3J0LmZp
bGVuYW1lX3RvX3VyaShzZWxmLnRvX3BhdGgodGVzdF9uYW1lKSkKKyAgICAgICAgaWYgY2hlY2tz
dW06CisgICAgICAgICAgICByZXR1cm4gdXJsICsgIiciICsgY2hlY2tzdW0gKyAnXG4nCisgICAg
ICAgIHJldHVybiB1cmwgKyAnXG4nCisKKyAgICBkZWYgbWFrZV9kcnQoc2VsZiwgaW5wdXRfc3Ry
aW5nLCBhcmdzPU5vbmUsIGV4dHJhX2FyZ3M9Tm9uZSk6CisgICAgICAgIGFyZ3MgPSBhcmdzIG9y
IFsnLS1wbGF0Zm9ybScsICdtYWMtc25vd2xlb3BhcmQnLCAnLSddCisgICAgICAgIGV4dHJhX2Fy
Z3MgPSBleHRyYV9hcmdzIG9yIFtdCisgICAgICAgIGFyZ3MgKz0gZXh0cmFfYXJncworICAgICAg
ICBzdGRpbiA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKGlucHV0X3N0cmluZykKKyAgICAgICAgc3Rk
b3V0ID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQorICAgICAgICBzdGRlcnIgPSBuZXdzdHJpbmdp
by5TdHJpbmdJTygpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBtb2NrX2RydC5wYXJzZV9vcHRp
b25zKGFyZ3MpCisgICAgICAgIGRydCA9IG1vY2tfZHJ0Lk1vY2tEUlQob3B0aW9ucywgYXJncywg
c3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICByZXR1cm4gKGRydCwgc3Rkb3V0LCBzdGRl
cnIpCisKKyAgICBkZWYgbWFrZV9pbnB1dF9vdXRwdXQoc2VsZiwgdGVzdF9uYW1lLCBwaXhlbF90
ZXN0cyk6CisgICAgICAgIHBhdGggPSBzZWxmLnRvX3BhdGgodGVzdF9uYW1lKQorICAgICAgICBl
eHBlY3RlZF9jaGVja3N1bSA9IE5vbmUKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAg
ICAgICBleHBlY3RlZF9jaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0ocGF0
aCkKKyAgICAgICAgZHJ0X2lucHV0ID0gc2VsZi5pbnB1dF9saW5lKHRlc3RfbmFtZSwgZXhwZWN0
ZWRfY2hlY2tzdW0pCisgICAgICAgIHRleHRfb3V0cHV0ID0gc2VsZi5fcG9ydC5leHBlY3RlZF90
ZXh0KHBhdGgpCisKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBkcnRfb3V0
cHV0ID0gIiIiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCislcyNFT0YKKworQWN0dWFsSGFzaDog
JXMKK0V4cGVjdGVkSGFzaDogJXMKKyNFT0YKKyIiIiAlICh0ZXh0X291dHB1dCwgZXhwZWN0ZWRf
Y2hlY2tzdW0sIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ZHJ0X291dHB1dCA9ICIiIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorJXMjRU9GCisjRU9GCisi
IiIgJSAodGV4dF9vdXRwdXQpCisKKyAgICAgICAgcmV0dXJuIChkcnRfaW5wdXQsIGRydF9vdXRw
dXQpCisKKyAgICBkZWYgYXNzZXJ0VGVzdChzZWxmLCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzKToK
KyAgICAgICAgZHJ0X2lucHV0LCBkcnRfb3V0cHV0ID0gc2VsZi5tYWtlX2lucHV0X291dHB1dCh0
ZXN0X25hbWUsIHBpeGVsX3Rlc3RzKQorICAgICAgICBleHRyYV9hcmdzID0gW10KKyAgICAgICAg
aWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBleHRyYV9hcmdzID0gWyctLXBpeGVsLXRlc3Rz
J10KKyAgICAgICAgZHJ0LCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYubWFrZV9kcnQoZHJ0X2lucHV0
LCBleHRyYV9hcmdzKQorICAgICAgICByZXMgPSBkcnQucnVuKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVl
KCksIGRydF9vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZhbHVl
KCksICcnKQorCisgICAgZGVmIHRlc3RfcGl4ZWx0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydFRlc3QoJ2Zhc3QvaHRtbC9rZXlnZW4uaHRtbCcsIFRydWUpCisKKyAgICBkZWYgdGVzdF90
ZXh0b25seShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdmYXN0L2h0bWwvYXJ0aWNs
ZS1lbGVtZW50Lmh0bWwnLCBGYWxzZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggYWQxYmVhNjU4ODgxOWExZDVkNzNkN2E3
YWU1MzdjMzQ1Yzk2NGNkYi4uM2JmMjFhZGJkMGY0YjE2ZjBiODBmY2U4ZmY3YWVkOTMyYjVlNWEx
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CkBAIC0xNzgsNiArMTc4LDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2Uu
UG9ydCk6CiAgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnVzZV90ZXN0X3NoZWxsOgogICAgICAgICAgICAgcmV0dXJuICJ0ZXN0X3NoZWxsIgorICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ21vY2tfZHJ0Jyk6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnd2Via2l0cHkn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRf
dGVzdHMnLCAnbW9ja19kcnQucHknKQogICAgICAgICByZXR1cm4gIkR1bXBSZW5kZXJUcmVlIgog
CiAgICAgZGVmIHBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKHNlbGYsICpjb21wcyk6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CmluZGV4
IDQ3NjU1NWM1YTI5YzA5OWIwMmNhZjRiY2E0Y2Q4Mzk3OWRjZDc4MzcuLjRjMmMzZWNhYWFlZjMy
MDNiMDA3YjQ1ZGQwMzVjYTE0ODY5ZGVmZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBAIC0zNDQsNiArMzQ0LDkgQEAgY2xh
c3MgV2ViS2l0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgc2VsZi5nZXRfb3B0aW9uKCdj
b25maWd1cmF0aW9uJykpLCAqY29tcHMpCiAKICAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ21vY2tfZHJ0Jyk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnd2Vi
a2l0cHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICds
YXlvdXRfdGVzdHMnLCAnbW9ja19kcnQucHknKQogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRf
cGF0aCgnRHVtcFJlbmRlclRyZWUnKQogCiAgICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFy
eShzZWxmKToKQEAgLTM4OSw2ICszOTIsOSBAQCBjbGFzcyBXZWJLaXREcml2ZXIoYmFzZS5Ecml2
ZXIpOgogICAgICAgICBjbWQgPSBzZWxmLl9jb21tYW5kX3dyYXBwZXIoc2VsZi5fcG9ydC5nZXRf
b3B0aW9uKCd3cmFwcGVyJykpCiAgICAgICAgIGNtZCArPSBbc2VsZi5fcG9ydC5fcGF0aF90b19k
cml2ZXIoKSwgJy0nXQogCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbignbW9ja19k
cnQnKSBhbmQgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdwbGF0Zm9ybScpOgorICAgICAgICAgICAg
Y21kICs9IFsnLS1wbGF0Zm9ybScsIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigncGxhdGZvcm0nKV0K
KwogICAgICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyk6CiAgICAg
ICAgICAgICBjbWQuYXBwZW5kKCctLXBpeGVsLXRlc3RzJykKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXgg
MTdiNmU4OTk4Njg3OTE5NWNkY2VhMzUwYTViOGExMDFkYTc3YWRiMC4uMDZkMDk2Yzg0NmM1MWQx
NTBmMmM3NmEwNjRmY2QxY2U2OTkyYTgwZiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yMDMsNiArMjAz
LDkgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Q9J1JlbGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIFJlbGVhc2Un
KSwKICAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBhbHNvIGFjY2VwdHMgLWMsIC0tY29u
ZmlndXJhdGlvbiBDT05GSUdVUkFUSU9OLgorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1tb2NrLWRydCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1VzZSB0aGUgZmFrZSBEdW1wUmVuZGVyVHJlZSBiaW5hcnkgaW5zdGVhZCAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIHRoZSByZWFsIG9uZSwgZm9y
IHRlc3RpbmcnKSwKICAgICBdCiAKICAgICBwcmludF9vcHRpb25zID0gcHJpbnRpbmcucHJpbnRf
b3B0aW9ucygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80155</attachid>
            <date>2011-01-25 18:08:31 -0800</date>
            <delta_ts>2011-01-26 12:33:25 -0800</delta_ts>
            <desc>replace --mock-drt flag with mock-* port implementation</desc>
            <filename>bug-53126-20110125180829.patch</filename>
            <type>text/plain</type>
            <size>14747</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi4wMDExMDE2MDRhZjU4NDAyOTBi
OTBhOTcwZTVhMTI2MDE3NmExZTg0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMjUgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFkZCBhICJtb2NrIERSVCIg
cG9ydCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgYSBzZXBhcmF0ZSBjbGFzcyB0aGF0IGVt
dWxhdGVzIHdoYXQgd2UgZXhwZWN0IHRoZQorICAgICAgICBEdW1wUmVuZGVyVHJlZSBiZWhhdmlv
ciB0byBiZS4KKworICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIHBvcnQvZHJ5
cnVuLnB5IGFuZCBhbGxvdyB1cyB0byBnZXQKKyAgICAgICAgYmV0dGVyIHRlc3QgY292ZXJhZ2Ug
b2YgdGhlIG5ldy1ydW4td2Via2l0LXRlc3RzIGNvZGUgYXMgd2VsbCBhcworICAgICAgICBhIHJl
ZmVyZW5jZSBmb3Igd2hhdCBuZXctcnVuLXdlYmtpdC10ZXN0cyBleHBlY3RzIGZyb20gRFJULgor
CisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IGF0dGVtcHQgYXQgdGhpcywgYW5kIGl0IGlzIHBy
ZXR0eSBiYXJlLWJvbmVkLiBJdAorICAgICAgICByZWFsbHkgb25seSBoYXMgYmVlbiB0ZXN0ZWQg
b24gdGhlICdtYWMnIHBvcnQgKGFuZCBhIGxpdHRsZSBvbgorICAgICAgICB0aGUgJ2Nocm9taXVt
LW1hYycgcG9ydC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTMxMjYKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbW9ja19kcnQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weToKKwogMjAxMS0wMS0yNCAg
QW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXggNjkzNTc0NDJhZWJlMzFlMGExNDVkM2M5YTNlMTU5MDc3
YjEwNDU2MC4uNzAyZDcyMzc1NzUzMmQ5ZTNkZmE5NWFkNTM0MTM2Mzk5M2Y4OGFlMyAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5w
eQpAQCAtMzIsNyArMzIsNyBAQAogCiBpbXBvcnQgc3lzCiAKLUFMTF9QT1JUX05BTUVTID0gWyd0
ZXN0JywgJ2RyeXJ1bicsICdtYWMnLCAnd2luJywgJ2d0aycsICdxdCcsICdjaHJvbWl1bS1tYWMn
LAorQUxMX1BPUlRfTkFNRVMgPSBbJ3Rlc3QnLCAnZHJ5cnVuJywgJ21vY2snLCAnbWFjJywgJ3dp
bicsICdndGsnLCAncXQnLCAnY2hyb21pdW0tbWFjJywKICAgICAgICAgICAgICAgICAgICdjaHJv
bWl1bS1saW51eCcsICdjaHJvbWl1bS13aW4nLCAnZ29vZ2xlLWNocm9tZS13aW4nLAogICAgICAg
ICAgICAgICAgICAgJ2dvb2dsZS1jaHJvbWUtbWFjJywgJ2dvb2dsZS1jaHJvbWUtbGludXgzMics
ICdnb29nbGUtY2hyb21lLWxpbnV4NjQnXQogCkBAIC03Niw2ICs3Niw5IEBAIGRlZiBfZ2V0X2t3
YXJncygqKmt3YXJncyk6CiAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdkcnlydW4n
KToKICAgICAgICAgaW1wb3J0IGRyeXJ1bgogICAgICAgICBtYWtlciA9IGRyeXJ1bi5EcnlSdW5Q
b3J0CisgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtb2NrJyk6CisgICAgICAgIGlt
cG9ydCBtb2NrX2RydAorICAgICAgICBtYWtlciA9IG1vY2tfZHJ0Lk1vY2tEUlRQb3J0CiAgICAg
ZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtYWMnKToKICAgICAgICAgaW1wb3J0IG1hYwog
ICAgICAgICBtYWtlciA9IG1hYy5NYWNQb3J0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWQ1ZDhjNzhj
MDAxNThlZWJhNjc5ZTU1YzZmNTFlMjIyYzc5OTdhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpAQCAtMCwwICsx
LDIwNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29n
bGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorVGhpcyBpcyBh
biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UgdGhhdCBvdmVycmlkZXMgb3Ro
ZXIKK3BvcnRzIGFuZCBjaGFuZ2VzIHRoZSBEcml2ZXIgYmluYXJ5IHRvICJNb2NrRFJUIi4KKyIi
IgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBz
eXMKKworaW1wb3J0IGJhc2UKK2ltcG9ydCBmYWN0b3J5CisKK19sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKKworCitjbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgorICAgICIiIk1v
Y2tQb3J0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHBmeCA9ICdtb2NrLScKKyAgICAg
ICAgaWYgJ3BvcnRfbmFtZScgaW4ga3dhcmdzOgorICAgICAgICAgICAgaWYga3dhcmdzWydwb3J0
X25hbWUnXS5zdGFydHN3aXRoKHBmeCk6CisgICAgICAgICAgICAgICAga3dhcmdzWydwb3J0X25h
bWUnXSA9IGt3YXJnc1sncG9ydF9uYW1lJ11bbGVuKHBmeCk6XQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBrd2FyZ3NbJ3BvcnRfbmFtZSddID0gTm9uZQorICAgICAgICBzZWxm
Ll9fZGVsZWdhdGUgPSBmYWN0b3J5LmdldCgqKmt3YXJncykKKworICAgIGRlZiBfX2dldGF0dHJf
XyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fX2RlbGVnYXRlLCBu
YW1lKQorCisgICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHApOgor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRyaXZlcl9jbWRfbGluZShzZWxmKToKKyAg
ICAgICAgZHJpdmVyID0gc2VsZi5jcmVhdGVfZHJpdmVyKDApCisgICAgICAgIHJldHVybiBkcml2
ZXIuY21kX2xpbmUoKQorCisgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKKyAgICAgICAg
cmV0dXJuIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKworICAgIGRlZiBjcmVhdGVfZHJpdmVy
KHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIGEgZHJp
dmVyIG9iamVjdCBhcyB0aGUgZGVsZWdhdGUgd291bGQsIGJ1dAorICAgICAgICAjIG92ZXJ3cml0
ZSB0aGUgcGF0aCB0byB0aGUgZHJpdmVyIGJpbmFyeSBpbiBpdHMgY29tbWFuZCBsaW5lLiBXZSBk
bworICAgICAgICAjIHRoaXMgYnkgYWN0dWFsbHkgb3ZlcndyaXRpbmcgaXRzIGNtZF9saW5lKCkg
bWV0aG9kIHdpdGggYSBwcm94eQorICAgICAgICAjIG1ldGhvZCB0aGF0IHNwbGljZXMgaW4gdGhl
IG1vY2tfZHJ0IHBhdGggYW5kIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgICAgICAgIyBpbiBw
bGFjZSBvZiB0aGUgYWN0dWFsIHBhdGggdG8gdGhlIGRyaXZlciBiaW5hcnkuCisKKyAgICAgICAg
IyBGSVhNRTogVGhpcyBkb2Vzbid0IHlldCB3b3JrIGZvciBDaHJvbWl1bSB0ZXN0X3NoZWxsIHBv
cnRzLgorICAgICAgICBkZWYgb3ZlcnJpZGluZ19jbWRfbGluZSgpOgorICAgICAgICAgICAgY21k
ID0gc2VsZi5fX29yaWdpbmFsX2RyaXZlcl9jbWRfbGluZSgpCisgICAgICAgICAgICBpbmRleCA9
IGNtZC5pbmRleChzZWxmLl9fZGVsZWdhdGUuX3BhdGhfdG9fZHJpdmVyKCkpCisgICAgICAgICAg
ICBjbWRbaW5kZXg6aW5kZXggKyAxXSA9IFtzeXMuZXhlY3V0YWJsZSwgc2VsZi5fcGF0aF90b19k
cml2ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXBsYXRmb3Jt
Jywgc2VsZi5uYW1lKCldCisgICAgICAgICAgICByZXR1cm4gY21kCisKKyAgICAgICAgZGVsZWdh
dGVkX2RyaXZlciA9IHNlbGYuX19kZWxlZ2F0ZS5jcmVhdGVfZHJpdmVyKHdvcmtlcl9udW1iZXIp
CisgICAgICAgIHNlbGYuX19vcmlnaW5hbF9kcml2ZXJfY21kX2xpbmUgPSBkZWxlZ2F0ZWRfZHJp
dmVyLmNtZF9saW5lCisgICAgICAgIGRlbGVnYXRlZF9kcml2ZXIuY21kX2xpbmUgPSBvdmVycmlk
aW5nX2NtZF9saW5lCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZWRfZHJpdmVyCisKKyAgICBkZWYg
c3RhcnRfaGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRfaHR0cF9z
ZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2Vy
dmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6Cisg
ICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICBw
YXNzCisKKyAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNz
CisKKworZGVmIG1haW4oYXJndiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKKyAgICAiIiJSdW4g
dGhlIHRlc3RzLiIiIgorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX29wdGlvbnMoYXJndikK
KyAgICBkcnQgPSBNb2NrRFJUKG9wdGlvbnMsIGFyZ3MsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikK
KyAgICByZXR1cm4gZHJ0LnJ1bigpCisKKworZGVmIHBhcnNlX29wdGlvbnMoYXJndik6CisgICAg
IyBGSVhNRTogV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBoYW5kbGUgdmFyaWFudHMgdGhh
dCBoYXZlCisgICAgIyBkaWZmZXJlbnQgY29tbWFuZC1saW5lIGNvbnZlbnRpb25zLgorICAgIG9w
dGlvbl9saXN0ID0gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1wbGF0Zm9ybScs
IGFjdGlvbj0nc3RvcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwbGF0
Zm9ybSB0byBlbXVsYXRlJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWxheW91
dC10ZXN0cycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9VHJ1ZSwgaGVscD0ncnVuIGxheW91dCB0ZXN0cycpLAorICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbignLS1waXhlbC10ZXN0cycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J291dHB1dCBpbWFnZSBmb3IgcGl4ZWwgdGVzdHMnKSwKKyAg
ICBdCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlz
dD1vcHRpb25fbGlzdCkKKyAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3Yp
CisKKworY2xhc3MgTW9ja0RSVChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRp
b25zLCBhcmdzLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICAgICBzZWxmLl9vcHRpb25z
ID0gb3B0aW9ucworICAgICAgICBzZWxmLl9hcmdzID0gYXJncworICAgICAgICBzZWxmLl9zdGRv
dXQgPSBzdGRvdXQKKyAgICAgICAgc2VsZi5fc3RkaW4gPSBzdGRpbgorICAgICAgICBzZWxmLl9z
dGRlcnIgPSBzdGRlcnIKKworICAgICAgICBwb3J0X25hbWUgPSBOb25lCisgICAgICAgIGlmIG9w
dGlvbnMucGxhdGZvcm06CisgICAgICAgICAgICBwb3J0X25hbWUgPSBvcHRpb25zLnBsYXRmb3Jt
CisgICAgICAgIHNlbGYuX3BvcnQgPSBmYWN0b3J5LmdldChwb3J0X25hbWUsIG9wdGlvbnM9b3B0
aW9ucykKKyAgICAgICAgc2VsZi5fZXhpdF9zdGF0dXMgPSAwCisKKyAgICBkZWYgcnVuKHNlbGYp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAg
IGxpbmUgPSBzZWxmLl9zdGRpbi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxp
bmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICB1cmwsIGV4
cGVjdGVkX2NoZWNrc3VtID0gc2VsZi5wYXJzZV9pbnB1dChsaW5lKQorICAgICAgICAgICAgICAg
IHNlbGYucnVuX29uZV90ZXN0KHVybCwgZXhwZWN0ZWRfY2hlY2tzdW0pCisgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5fc3RkZXJyLndyaXRlKCJNb2NrRFJU
IGV4aXRpbmcsIFZhbHVlRXJyb3IgcmFpc2VkOiAnJXMnXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJSBzdHIoZSkpCisgICAgICAgICAgICBzZWxmLl9leGl0X3N0YXR1cyA9IDEK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyci53
cml0ZSgiTW9ja0RSVCBleGl0aW5nLCB1bmV4cGVjdGVkIGV4Y2VwdGlvbjogJyVzJ1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc3RyKGUpKQorICAgICAgICAgICAgc2VsZi5f
ZXhpdF9zdGF0dXMgPSAtMQorCisgICAgICAgIHJldHVybiBzZWxmLl9leGl0X3N0YXR1cworCisg
ICAgZGVmIHBhcnNlX2lucHV0KHNlbGYsIGxpbmUpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJp
cCgpCisgICAgICAgIGlmICInIiBpbiBsaW5lOgorICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3Bs
aXQoIiciLCAxKQorICAgICAgICByZXR1cm4gKGxpbmUsIE5vbmUpCisKKyAgICBkZWYgcnVuX29u
ZV90ZXN0KHNlbGYsIHVybCwgZXhwZWN0ZWRfY2hlY2tzdW0pOgorICAgICAgICBwb3J0ID0gc2Vs
Zi5fcG9ydAorICAgICAgICBpZiB1cmwuc3RhcnRzd2l0aCgnZmlsZTovLy8nKSBvciB1cmwuc3Rh
cnRzd2l0aCgnaHR0cCcpOgorICAgICAgICAgICAgdGVzdF9uYW1lID0gcG9ydC51cmlfdG9fdGVz
dF9uYW1lKHVybCkKKyAgICAgICAgICAgIHRlc3RfcGF0aCA9IHBvcnQucGF0aF9mcm9tX3dlYmtp
dF9iYXNlKCdMYXlvdXRUZXN0cycsIHRlc3RfbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHRlc3RfcGF0aCA9IHVybAorCisgICAgICAgIGFjdHVhbF90ZXh0ID0gcG9ydC5leHBlY3Rl
ZF90ZXh0KHRlc3RfcGF0aCkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBh
bmQgZXhwZWN0ZWRfY2hlY2tzdW06CisgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBwb3J0
LmV4cGVjdGVkX2NoZWNrc3VtKHRlc3RfcGF0aCkKKyAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9
IHBvcnQuZXhwZWN0ZWRfaW1hZ2UodGVzdF9wYXRoKQorCisgICAgICAgIHNlbGYuX3N0ZG91dC53
cml0ZSgiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4iKQorICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUoYWN0dWFsX3RleHQpCisgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiI0VPRlxuIikK
KworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCBleHBlY3RlZF9jaGVj
a3N1bToKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAg
c2VsZi5fc3Rkb3V0LndyaXRlKCJBY3R1YWxIYXNoOiAlc1xuIiAlIGFjdHVhbF9jaGVja3N1bSkK
KyAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiRXhwZWN0ZWRIYXNoOiAlc1xuIiAlIGV4
cGVjdGVkX2NoZWNrc3VtKQorICAgICAgICAgICAgaWYgYWN0dWFsX2NoZWNrc3VtICE9IGV4cGVj
dGVkX2NoZWNrc3VtOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiQ29udGVu
dC1MZW5ndGg6ICVzXG5cbiIgJSBsZW4oYWN0dWFsX2ltYWdlKSkKKyAgICAgICAgICAgICAgICBz
ZWxmLl9zdGRvdXQud3JpdGUoYWN0dWFsX2ltYWdlKQorICAgICAgICBzZWxmLl9zdGRvdXQud3Jp
dGUoIiNFT0ZcbiIpCisgICAgICAgIHNlbGYuX3N0ZG91dC5mbHVzaCgpCisgICAgICAgIHNlbGYu
X3N0ZGVyci5mbHVzaCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMu
ZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJy
KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
bW9ja19kcnRfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0OGQ4MjZhYmMzZjExMjNh
ODRkN2E3OTdkNTg1MGFmNzE2YjhlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5CkBAIC0wLDAg
KzEsMTE1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJV
bml0IHRlc3RzIGZvciBNb2NrRFJULiIiIgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJr
aXRweS5jb21tb24gaW1wb3J0IG5ld3N0cmluZ2lvCisKK2ltcG9ydCBtb2NrX2RydAoraW1wb3J0
IGZhY3RvcnkKK2ltcG9ydCBwb3J0X3Rlc3RjYXNlCisKKworY2xhc3MgTW9ja0RSVFBvcnRUZXN0
KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKKyAgICBkZWYgbWFrZV9wb3J0KHNlbGYpOgor
ICAgICAgICByZXR1cm4gbW9ja19kcnQuTW9ja0RSVFBvcnQoKQorCisKK2NsYXNzIE1vY2tEUlRU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMg
V2UgYmFzZSBvdXIgdGVzdHMgb24gdGhlIG1hYy1zbm93bGVvcGFyZCBwb3J0LgorICAgICAgICBz
ZWxmLl9wb3J0ID0gZmFjdG9yeS5nZXQoJ21hYy1zbm93bGVvcGFyZCcpCisgICAgICAgIHNlbGYu
X2xheW91dF90ZXN0c19kaXIgPSBzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQorCisgICAg
ZGVmIHRvX3BhdGgoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9sYXlvdXRfdGVzdHNfZGlyLCB0ZXN0X25hbWUpCisKKyAg
ICBkZWYgaW5wdXRfbGluZShzZWxmLCB0ZXN0X25hbWUsIGNoZWNrc3VtPU5vbmUpOgorICAgICAg
ICB1cmwgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaShzZWxmLnRvX3BhdGgodGVzdF9uYW1l
KSkKKyAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICByZXR1cm4gdXJsICsgIiciICsg
Y2hlY2tzdW0gKyAnXG4nCisgICAgICAgIHJldHVybiB1cmwgKyAnXG4nCisKKyAgICBkZWYgbWFr
ZV9kcnQoc2VsZiwgaW5wdXRfc3RyaW5nLCBhcmdzPU5vbmUsIGV4dHJhX2FyZ3M9Tm9uZSk6Cisg
ICAgICAgIGFyZ3MgPSBhcmdzIG9yIFsnLS1wbGF0Zm9ybScsICdtYWMtc25vd2xlb3BhcmQnLCAn
LSddCisgICAgICAgIGV4dHJhX2FyZ3MgPSBleHRyYV9hcmdzIG9yIFtdCisgICAgICAgIGFyZ3Mg
Kz0gZXh0cmFfYXJncworICAgICAgICBzdGRpbiA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKGlucHV0
X3N0cmluZykKKyAgICAgICAgc3Rkb3V0ID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQorICAgICAg
ICBzdGRlcnIgPSBuZXdzdHJpbmdpby5TdHJpbmdJTygpCisgICAgICAgIG9wdGlvbnMsIGFyZ3Mg
PSBtb2NrX2RydC5wYXJzZV9vcHRpb25zKGFyZ3MpCisgICAgICAgIGRydCA9IG1vY2tfZHJ0Lk1v
Y2tEUlQob3B0aW9ucywgYXJncywgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICByZXR1
cm4gKGRydCwgc3Rkb3V0LCBzdGRlcnIpCisKKyAgICBkZWYgbWFrZV9pbnB1dF9vdXRwdXQoc2Vs
ZiwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0cyk6CisgICAgICAgIHBhdGggPSBzZWxmLnRvX3BhdGgo
dGVzdF9uYW1lKQorICAgICAgICBleHBlY3RlZF9jaGVja3N1bSA9IE5vbmUKKyAgICAgICAgaWYg
cGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBleHBlY3RlZF9jaGVja3N1bSA9IHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfY2hlY2tzdW0ocGF0aCkKKyAgICAgICAgZHJ0X2lucHV0ID0gc2VsZi5pbnB1dF9s
aW5lKHRlc3RfbmFtZSwgZXhwZWN0ZWRfY2hlY2tzdW0pCisgICAgICAgIHRleHRfb3V0cHV0ID0g
c2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHBhdGgpCisKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6
CisgICAgICAgICAgICBkcnRfb3V0cHV0ID0gIiIiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisl
cyNFT0YKKworQWN0dWFsSGFzaDogJXMKK0V4cGVjdGVkSGFzaDogJXMKKyNFT0YKKyIiIiAlICh0
ZXh0X291dHB1dCwgZXhwZWN0ZWRfY2hlY2tzdW0sIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZHJ0X291dHB1dCA9ICIiIkNvbnRlbnQtVHlwZTogdGV4dC9w
bGFpbgorJXMjRU9GCisjRU9GCisiIiIgJSAodGV4dF9vdXRwdXQpCisKKyAgICAgICAgcmV0dXJu
IChkcnRfaW5wdXQsIGRydF9vdXRwdXQpCisKKyAgICBkZWYgYXNzZXJ0VGVzdChzZWxmLCB0ZXN0
X25hbWUsIHBpeGVsX3Rlc3RzKToKKyAgICAgICAgZHJ0X2lucHV0LCBkcnRfb3V0cHV0ID0gc2Vs
Zi5tYWtlX2lucHV0X291dHB1dCh0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzKQorICAgICAgICBleHRy
YV9hcmdzID0gW10KKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBleHRyYV9h
cmdzID0gWyctLXBpeGVsLXRlc3RzJ10KKyAgICAgICAgZHJ0LCBzdGRvdXQsIHN0ZGVyciA9IHNl
bGYubWFrZV9kcnQoZHJ0X2lucHV0LCBleHRyYV9hcmdzKQorICAgICAgICByZXMgPSBkcnQucnVu
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksIGRydF9vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3RkZXJyLmdldHZhbHVlKCksICcnKQorCisgICAgZGVmIHRlc3RfcGl4ZWx0ZXN0KHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2Zhc3QvaHRtbC9rZXlnZW4uaHRtbCcsIFRy
dWUpCisKKyAgICBkZWYgdGVzdF90ZXh0b25seShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRU
ZXN0KCdmYXN0L2h0bWwvYXJ0aWNsZS1lbGVtZW50Lmh0bWwnLCBGYWxzZSkKKworCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80224</attachid>
            <date>2011-01-26 12:33:28 -0800</date>
            <delta_ts>2011-01-26 17:33:51 -0800</delta_ts>
            <desc>update w/ review feedback from tony</desc>
            <filename>bug-53126-20110126123327.patch</filename>
            <type>text/plain</type>
            <size>15086</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi4wMDExMDE2MDRhZjU4NDAyOTBi
OTBhOTcwZTVhMTI2MDE3NmExZTg0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMjUgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFkZCBhICJtb2NrIERSVCIg
cG9ydCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgYSBzZXBhcmF0ZSBjbGFzcyB0aGF0IGVt
dWxhdGVzIHdoYXQgd2UgZXhwZWN0IHRoZQorICAgICAgICBEdW1wUmVuZGVyVHJlZSBiZWhhdmlv
ciB0byBiZS4KKworICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIHBvcnQvZHJ5
cnVuLnB5IGFuZCBhbGxvdyB1cyB0byBnZXQKKyAgICAgICAgYmV0dGVyIHRlc3QgY292ZXJhZ2Ug
b2YgdGhlIG5ldy1ydW4td2Via2l0LXRlc3RzIGNvZGUgYXMgd2VsbCBhcworICAgICAgICBhIHJl
ZmVyZW5jZSBmb3Igd2hhdCBuZXctcnVuLXdlYmtpdC10ZXN0cyBleHBlY3RzIGZyb20gRFJULgor
CisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IGF0dGVtcHQgYXQgdGhpcywgYW5kIGl0IGlzIHBy
ZXR0eSBiYXJlLWJvbmVkLiBJdAorICAgICAgICByZWFsbHkgb25seSBoYXMgYmVlbiB0ZXN0ZWQg
b24gdGhlICdtYWMnIHBvcnQgKGFuZCBhIGxpdHRsZSBvbgorICAgICAgICB0aGUgJ2Nocm9taXVt
LW1hYycgcG9ydC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTMxMjYKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbW9ja19kcnQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weToKKwogMjAxMS0wMS0yNCAg
QW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXggNjkzNTc0NDJhZWJlMzFlMGExNDVkM2M5YTNlMTU5MDc3
YjEwNDU2MC4uNzAyZDcyMzc1NzUzMmQ5ZTNkZmE5NWFkNTM0MTM2Mzk5M2Y4OGFlMyAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5w
eQpAQCAtMzIsNyArMzIsNyBAQAogCiBpbXBvcnQgc3lzCiAKLUFMTF9QT1JUX05BTUVTID0gWyd0
ZXN0JywgJ2RyeXJ1bicsICdtYWMnLCAnd2luJywgJ2d0aycsICdxdCcsICdjaHJvbWl1bS1tYWMn
LAorQUxMX1BPUlRfTkFNRVMgPSBbJ3Rlc3QnLCAnZHJ5cnVuJywgJ21vY2snLCAnbWFjJywgJ3dp
bicsICdndGsnLCAncXQnLCAnY2hyb21pdW0tbWFjJywKICAgICAgICAgICAgICAgICAgICdjaHJv
bWl1bS1saW51eCcsICdjaHJvbWl1bS13aW4nLCAnZ29vZ2xlLWNocm9tZS13aW4nLAogICAgICAg
ICAgICAgICAgICAgJ2dvb2dsZS1jaHJvbWUtbWFjJywgJ2dvb2dsZS1jaHJvbWUtbGludXgzMics
ICdnb29nbGUtY2hyb21lLWxpbnV4NjQnXQogCkBAIC03Niw2ICs3Niw5IEBAIGRlZiBfZ2V0X2t3
YXJncygqKmt3YXJncyk6CiAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdkcnlydW4n
KToKICAgICAgICAgaW1wb3J0IGRyeXJ1bgogICAgICAgICBtYWtlciA9IGRyeXJ1bi5EcnlSdW5Q
b3J0CisgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtb2NrJyk6CisgICAgICAgIGlt
cG9ydCBtb2NrX2RydAorICAgICAgICBtYWtlciA9IG1vY2tfZHJ0Lk1vY2tEUlRQb3J0CiAgICAg
ZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtYWMnKToKICAgICAgICAgaW1wb3J0IG1hYwog
ICAgICAgICBtYWtlciA9IG1hYy5NYWNQb3J0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmM0ZjcxMjU1
OTI0Y2U4M2QyMGEzMzY3Njg5YWIwNjRlMjQ1Mzg2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpAQCAtMCwwICsx
LDIwNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29n
bGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorVGhpcyBpcyBh
biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UgdGhhdCBvdmVycmlkZXMgb3Ro
ZXIKK3BvcnRzIGFuZCBjaGFuZ2VzIHRoZSBEcml2ZXIgYmluYXJ5IHRvICJNb2NrRFJUIi4KKyIi
IgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBz
eXMKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgYmFzZQorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQorCitfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgTW9ja0RSVFBvcnQob2JqZWN0KToKKyAg
ICAiIiJNb2NrUG9ydCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBwcmVmaXggPSAnbW9j
ay0nCisgICAgICAgIGlmICdwb3J0X25hbWUnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGlmIGt3
YXJnc1sncG9ydF9uYW1lJ10uc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgIGt3
YXJnc1sncG9ydF9uYW1lJ10gPSBrd2FyZ3NbJ3BvcnRfbmFtZSddW2xlbihwcmVmaXgpOl0KKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga3dhcmdzWydwb3J0X25hbWUnXSA9IE5v
bmUKKyAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gZmFjdG9yeS5nZXQoKiprd2FyZ3MpCisKKyAg
ICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNl
bGYuX19kZWxlZ2F0ZSwgbmFtZSkKKworICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19o
dHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxm
LCBuZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkcml2ZXJfY21k
X2xpbmUoc2VsZik6CisgICAgICAgIGRyaXZlciA9IHNlbGYuY3JlYXRlX2RyaXZlcigwKQorICAg
ICAgICByZXR1cm4gZHJpdmVyLmNtZF9saW5lKCkKKworICAgIGRlZiBfcGF0aF90b19kcml2ZXIo
c2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisKKyAgICBk
ZWYgY3JlYXRlX2RyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgIyBXZSBuZWVk
IHRvIGNyZWF0ZSBhIGRyaXZlciBvYmplY3QgYXMgdGhlIGRlbGVnYXRlIHdvdWxkLCBidXQKKyAg
ICAgICAgIyBvdmVyd3JpdGUgdGhlIHBhdGggdG8gdGhlIGRyaXZlciBiaW5hcnkgaW4gaXRzIGNv
bW1hbmQgbGluZS4gV2UgZG8KKyAgICAgICAgIyB0aGlzIGJ5IGFjdHVhbGx5IG92ZXJ3cml0aW5n
IGl0cyBjbWRfbGluZSgpIG1ldGhvZCB3aXRoIGEgcHJveHkKKyAgICAgICAgIyBtZXRob2QgdGhh
dCBzcGxpY2VzIGluIHRoZSBtb2NrX2RydCBwYXRoIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRz
CisgICAgICAgICMgaW4gcGxhY2Ugb2YgdGhlIGFjdHVhbCBwYXRoIHRvIHRoZSBkcml2ZXIgYmlu
YXJ5LgorCisgICAgICAgICMgRklYTUU6IFRoaXMgZG9lc24ndCB5ZXQgd29yayBmb3IgQ2hyb21p
dW0gdGVzdF9zaGVsbCBwb3J0cy4KKyAgICAgICAgZGVmIG92ZXJyaWRpbmdfY21kX2xpbmUoKToK
KyAgICAgICAgICAgIGNtZCA9IHNlbGYuX19vcmlnaW5hbF9kcml2ZXJfY21kX2xpbmUoKQorICAg
ICAgICAgICAgaW5kZXggPSBjbWQuaW5kZXgoc2VsZi5fX2RlbGVnYXRlLl9wYXRoX3RvX2RyaXZl
cigpKQorICAgICAgICAgICAgY21kW2luZGV4OmluZGV4ICsgMV0gPSBbc3lzLmV4ZWN1dGFibGUs
IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1wbGF0Zm9ybScsIHNlbGYubmFtZSgpXQorICAgICAgICAgICAgcmV0dXJuIGNtZAor
CisgICAgICAgIGRlbGVnYXRlZF9kcml2ZXIgPSBzZWxmLl9fZGVsZWdhdGUuY3JlYXRlX2RyaXZl
cih3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl9fb3JpZ2luYWxfZHJpdmVyX2NtZF9saW5l
ID0gZGVsZWdhdGVkX2RyaXZlci5jbWRfbGluZQorICAgICAgICBkZWxlZ2F0ZWRfZHJpdmVyLmNt
ZF9saW5lID0gb3ZlcnJpZGluZ19jbWRfbGluZQorICAgICAgICByZXR1cm4gZGVsZWdhdGVkX2Ry
aXZlcgorCisgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3Rh
cnRfd2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Bf
aGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9odHRwX3NlcnZlcihz
ZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcihzZWxm
KToKKyAgICAgICAgcGFzcworCisKK2RlZiBtYWluKGFyZ3YsIHN0ZGluLCBzdGRvdXQsIHN0ZGVy
cik6CisgICAgIiIiUnVuIHRoZSB0ZXN0cy4iIiIKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJz
ZV9vcHRpb25zKGFyZ3YpCisgICAgZHJ0ID0gTW9ja0RSVChvcHRpb25zLCBhcmdzLCBzdGRpbiwg
c3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIGRydC5ydW4oKQorCisKK2RlZiBwYXJzZV9vcHRp
b25zKGFyZ3YpOgorICAgICMgRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gaGFu
ZGxlIHZhcmlhbnRzIHRoYXQgaGF2ZQorICAgICMgZGlmZmVyZW50IGNvbW1hbmQtbGluZSBjb252
ZW50aW9ucy4KKyAgICBvcHRpb25fbGlzdCA9IFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tcGxhdGZvcm0nLCBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0ncGxhdGZvcm0gdG8gZW11bGF0ZScpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1sYXlvdXQtdGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGhlbHA9J3J1biBsYXlvdXQgdGVzdHMn
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcGl4ZWwtdGVzdHMnLCBhY3Rpb249
J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRwdXQgaW1hZ2UgZm9yIHBp
eGVsIHRlc3RzJyksCisgICAgXQorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25Q
YXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIu
cGFyc2VfYXJncyhhcmd2KQorCisKK2NsYXNzIE1vY2tEUlQob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgb3B0aW9ucywgYXJncywgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKKyAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKKyAg
ICAgICAgc2VsZi5fc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgIHNlbGYuX3N0ZGluID0gc3RkaW4K
KyAgICAgICAgc2VsZi5fc3RkZXJyID0gc3RkZXJyCisKKyAgICAgICAgcG9ydF9uYW1lID0gTm9u
ZQorICAgICAgICBpZiBvcHRpb25zLnBsYXRmb3JtOgorICAgICAgICAgICAgcG9ydF9uYW1lID0g
b3B0aW9ucy5wbGF0Zm9ybQorICAgICAgICBzZWxmLl9wb3J0ID0gZmFjdG9yeS5nZXQocG9ydF9u
YW1lLCBvcHRpb25zPW9wdGlvbnMpCisgICAgICAgIHNlbGYuX2V4aXRfc3RhdHVzID0gMAorCisg
ICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToK
KyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fc3RkaW4ucmVhZGxpbmUoKQorICAgICAgICAg
ICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAg
ICAgICAgICAgdXJsLCBleHBlY3RlZF9jaGVja3N1bSA9IHNlbGYucGFyc2VfaW5wdXQobGluZSkK
KyAgICAgICAgICAgICAgICBzZWxmLnJ1bl9vbmVfdGVzdCh1cmwsIGV4cGVjdGVkX2NoZWNrc3Vt
KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVy
ci53cml0ZSgiTW9ja0RSVCBleGl0aW5nLCBWYWx1ZUVycm9yIHJhaXNlZDogJyVzJ1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc3RyKGUpKQorICAgICAgICAgICAgc2VsZi5f
ZXhpdF9zdGF0dXMgPSAxCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICBzZWxmLl9zdGRlcnIud3JpdGUoIk1vY2tEUlQgZXhpdGluZywgdW5leHBlY3RlZCBleGNlcHRp
b246ICclcydcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHN0cihlKSkKKyAg
ICAgICAgICAgIHNlbGYuX2V4aXRfc3RhdHVzID0gLTEKKworICAgICAgICByZXR1cm4gc2VsZi5f
ZXhpdF9zdGF0dXMKKworICAgIGRlZiBwYXJzZV9pbnB1dChzZWxmLCBsaW5lKToKKyAgICAgICAg
bGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiAiJyIgaW4gbGluZToKKyAgICAgICAgICAg
IHJldHVybiBsaW5lLnNwbGl0KCInIiwgMSkKKyAgICAgICAgcmV0dXJuIChsaW5lLCBOb25lKQor
CisgICAgZGVmIHJ1bl9vbmVfdGVzdChzZWxmLCB1cmwsIGV4cGVjdGVkX2NoZWNrc3VtKToKKyAg
ICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoJ2ZpbGU6
Ly8vJykgb3IgdXJsLnN0YXJ0c3dpdGgoJ2h0dHAnKToKKyAgICAgICAgICAgIHRlc3RfbmFtZSA9
IHBvcnQudXJpX3RvX3Rlc3RfbmFtZSh1cmwpCisgICAgICAgICAgICB0ZXN0X3BhdGggPSBwb3J0
LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnLCB0ZXN0X25hbWUpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICB0ZXN0X3BhdGggPSB1cmwKKworICAgICAgICBhY3R1YWxfdGV4
dCA9IHBvcnQuZXhwZWN0ZWRfdGV4dCh0ZXN0X3BhdGgpCisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMucGl4ZWxfdGVzdHMgYW5kIGV4cGVjdGVkX2NoZWNrc3VtOgorICAgICAgICAgICAgYWN0dWFs
X2NoZWNrc3VtID0gcG9ydC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X3BhdGgpCisgICAgICAgICAg
ICBhY3R1YWxfaW1hZ2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfcGF0aCkKKworICAgICAg
ICBzZWxmLl9zdGRvdXQud3JpdGUoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxuIikKKyAgICAg
ICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF90ZXh0KQorICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUoIiNFT0ZcbiIpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBh
bmQgZXhwZWN0ZWRfY2hlY2tzdW06CisgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIlxu
IikKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiQWN0dWFsSGFzaDogJXNcbiIgJSBh
Y3R1YWxfY2hlY2tzdW0pCisgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIkV4cGVjdGVk
SGFzaDogJXNcbiIgJSBleHBlY3RlZF9jaGVja3N1bSkKKyAgICAgICAgICAgIGlmIGFjdHVhbF9j
aGVja3N1bSAhPSBleHBlY3RlZF9jaGVja3N1bToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRv
dXQud3JpdGUoIkNvbnRlbnQtTGVuZ3RoOiAlc1xuXG4iICUgbGVuKGFjdHVhbF9pbWFnZSkpCisg
ICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF9pbWFnZSkKKyAgICAgICAg
c2VsZi5fc3Rkb3V0LndyaXRlKCIjRU9GXG4iKQorICAgICAgICBzZWxmLl9zdGRvdXQuZmx1c2go
KQorICAgICAgICBzZWxmLl9zdGRlcnIuZmx1c2goKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRpbiwgc3lzLnN0
ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YmU5MTFjYjUyZTRjMzM3NDVjMGEyYTAzZDAwMTZmYzI4MzdkMTQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0
dGVzdC5weQpAQCAtMCwwICsxLDExNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgTW9ja0RSVC4iIiIKKworaW1wb3J0IHVuaXR0
ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBuZXdzdHJpbmdpbworCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBtb2NrX2RydAorZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIE1vY2tEUlRQb3J0VGVzdChw
b3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6CisgICAgZGVmIG1ha2VfcG9ydChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KCkKKworCitjbGFzcyBNb2NrRFJUVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFdl
IGJhc2Ugb3VyIHRlc3RzIG9uIHRoZSBtYWMtc25vd2xlb3BhcmQgcG9ydC4KKyAgICAgICAgc2Vs
Zi5fcG9ydCA9IGZhY3RvcnkuZ2V0KCdtYWMtc25vd2xlb3BhcmQnKQorICAgICAgICBzZWxmLl9s
YXlvdXRfdGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKKworICAgIGRl
ZiB0b19wYXRoKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciwgdGVzdF9uYW1lKQorCisgICAg
ZGVmIGlucHV0X2xpbmUoc2VsZiwgdGVzdF9uYW1lLCBjaGVja3N1bT1Ob25lKToKKyAgICAgICAg
dXJsID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkoc2VsZi50b19wYXRoKHRlc3RfbmFtZSkp
CisgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgcmV0dXJuIHVybCArICInIiArIGNo
ZWNrc3VtICsgJ1xuJworICAgICAgICByZXR1cm4gdXJsICsgJ1xuJworCisgICAgZGVmIG1ha2Vf
ZHJ0KHNlbGYsIGlucHV0X3N0cmluZywgYXJncz1Ob25lLCBleHRyYV9hcmdzPU5vbmUpOgorICAg
ICAgICBhcmdzID0gYXJncyBvciBbJy0tcGxhdGZvcm0nLCAnbWFjLXNub3dsZW9wYXJkJywgJy0n
XQorICAgICAgICBleHRyYV9hcmdzID0gZXh0cmFfYXJncyBvciBbXQorICAgICAgICBhcmdzICs9
IGV4dHJhX2FyZ3MKKyAgICAgICAgc3RkaW4gPSBuZXdzdHJpbmdpby5TdHJpbmdJTyhpbnB1dF9z
dHJpbmcpCisgICAgICAgIHN0ZG91dCA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKKyAgICAgICAg
c3RkZXJyID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQorICAgICAgICBvcHRpb25zLCBhcmdzID0g
bW9ja19kcnQucGFyc2Vfb3B0aW9ucyhhcmdzKQorICAgICAgICBkcnQgPSBtb2NrX2RydC5Nb2Nr
RFJUKG9wdGlvbnMsIGFyZ3MsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgcmV0dXJu
IChkcnQsIHN0ZG91dCwgc3RkZXJyKQorCisgICAgZGVmIG1ha2VfaW5wdXRfb3V0cHV0KHNlbGYs
IHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMpOgorICAgICAgICBwYXRoID0gc2VsZi50b19wYXRoKHRl
c3RfbmFtZSkKKyAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0gPSBOb25lCisgICAgICAgIGlmIHBp
eGVsX3Rlc3RzOgorICAgICAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4
cGVjdGVkX2NoZWNrc3VtKHBhdGgpCisgICAgICAgIGRydF9pbnB1dCA9IHNlbGYuaW5wdXRfbGlu
ZSh0ZXN0X25hbWUsIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAgICB0ZXh0X291dHB1dCA9IHNl
bGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChwYXRoKQorCisgICAgICAgIGlmIHBpeGVsX3Rlc3RzOgor
ICAgICAgICAgICAgZHJ0X291dHB1dCA9ICgKKyAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBl
OiB0ZXh0L3BsYWluXG4iCisgICAgICAgICAgICAgICAgIiVzI0VPRlxuIgorICAgICAgICAgICAg
ICAgICJcbiIKKyAgICAgICAgICAgICAgICAiQWN0dWFsSGFzaDogJXNcbiIKKyAgICAgICAgICAg
ICAgICAiRXhwZWN0ZWRIYXNoOiAlc1xuIgorICAgICAgICAgICAgICAgICIjRU9GXG4iKSAlICh0
ZXh0X291dHB1dCwgZXhwZWN0ZWRfY2hlY2tzdW0sIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZHJ0X291dHB1dCA9ICgKKyAgICAgICAgICAgICAgICAiQ29u
dGVudC1UeXBlOiB0ZXh0L3BsYWluXG4iCisgICAgICAgICAgICAgICAgIiVzI0VPRlxuIgorICAg
ICAgICAgICAgICAgICIjRU9GXG4iKSAlIHRleHRfb3V0cHV0CisKKyAgICAgICAgcmV0dXJuIChk
cnRfaW5wdXQsIGRydF9vdXRwdXQpCisKKyAgICBkZWYgYXNzZXJ0VGVzdChzZWxmLCB0ZXN0X25h
bWUsIHBpeGVsX3Rlc3RzKToKKyAgICAgICAgZHJ0X2lucHV0LCBkcnRfb3V0cHV0ID0gc2VsZi5t
YWtlX2lucHV0X291dHB1dCh0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzKQorICAgICAgICBleHRyYV9h
cmdzID0gW10KKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBleHRyYV9hcmdz
ID0gWyctLXBpeGVsLXRlc3RzJ10KKyAgICAgICAgZHJ0LCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYu
bWFrZV9kcnQoZHJ0X2lucHV0LCBleHRyYV9hcmdzKQorICAgICAgICByZXMgPSBkcnQucnVuKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc3Rkb3V0LmdldHZhbHVlKCksIGRydF9vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc3RkZXJyLmdldHZhbHVlKCksICcnKQorCisgICAgZGVmIHRlc3RfcGl4ZWx0ZXN0KHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2Zhc3QvaHRtbC9rZXlnZW4uaHRtbCcsIFRydWUp
CisKKyAgICBkZWYgdGVzdF90ZXh0b25seShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUZXN0
KCdmYXN0L2h0bWwvYXJ0aWNsZS1lbGVtZW50Lmh0bWwnLCBGYWxzZSkKKworCitpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80278</attachid>
            <date>2011-01-26 17:33:54 -0800</date>
            <delta_ts>2011-01-27 17:45:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53126-20110126173353.patch</filename>
            <type>text/plain</type>
            <size>20011</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi4wMDExMDE2MDRhZjU4NDAyOTBi
OTBhOTcwZTVhMTI2MDE3NmExZTg0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMjUgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFkZCBhICJtb2NrIERSVCIg
cG9ydCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgYSBzZXBhcmF0ZSBjbGFzcyB0aGF0IGVt
dWxhdGVzIHdoYXQgd2UgZXhwZWN0IHRoZQorICAgICAgICBEdW1wUmVuZGVyVHJlZSBiZWhhdmlv
ciB0byBiZS4KKworICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIHBvcnQvZHJ5
cnVuLnB5IGFuZCBhbGxvdyB1cyB0byBnZXQKKyAgICAgICAgYmV0dGVyIHRlc3QgY292ZXJhZ2Ug
b2YgdGhlIG5ldy1ydW4td2Via2l0LXRlc3RzIGNvZGUgYXMgd2VsbCBhcworICAgICAgICBhIHJl
ZmVyZW5jZSBmb3Igd2hhdCBuZXctcnVuLXdlYmtpdC10ZXN0cyBleHBlY3RzIGZyb20gRFJULgor
CisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IGF0dGVtcHQgYXQgdGhpcywgYW5kIGl0IGlzIHBy
ZXR0eSBiYXJlLWJvbmVkLiBJdAorICAgICAgICByZWFsbHkgb25seSBoYXMgYmVlbiB0ZXN0ZWQg
b24gdGhlICdtYWMnIHBvcnQgKGFuZCBhIGxpdHRsZSBvbgorICAgICAgICB0aGUgJ2Nocm9taXVt
LW1hYycgcG9ydC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTMxMjYKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbW9ja19kcnQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weToKKwogMjAxMS0wMS0yNCAg
QW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2RyeXJ1bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJ5cnVuLnB5CmluZGV4IDRlZDM0ZTY0ODhlZjI4NDc1MGM2OWZkMDU0ZDAzMTAwYmVl
ZDViNmYuLjAxZGVhOGU1YmEzMmMzNGMzNThiYjRjNjZmZTlkYzQ4N2IxODdiZTcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5CkBA
IC03MSw2ICs3MSwxMiBAQCBjbGFzcyBEcnlSdW5Qb3J0KG9iamVjdCk6CiAgICAgZGVmIF9fZ2V0
YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdh
dGUsIG5hbWUpCiAKKyAgICBkZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6CisgICAgICAgIHBh
c3MKKworICAgIGRlZiByZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgcGFzcworCiAg
ICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXR1cm4gVHJ1
ZQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Zh
Y3RvcnkucHkKaW5kZXggNjkzNTc0NDJhZWJlMzFlMGExNDVkM2M5YTNlMTU5MDc3YjEwNDU2MC4u
YzUzMGI0NjU0M2Q3MGFhNmVlMDA1ZDZkNzRmNTdiM2Y1YzI2ZWJhNiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtNzYs
NiArNzYsOSBAQCBkZWYgX2dldF9rd2FyZ3MoKiprd2FyZ3MpOgogICAgIGVsaWYgcG9ydF90b191
c2Uuc3RhcnRzd2l0aCgnZHJ5cnVuJyk6CiAgICAgICAgIGltcG9ydCBkcnlydW4KICAgICAgICAg
bWFrZXIgPSBkcnlydW4uRHJ5UnVuUG9ydAorICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0
aCgnbW9jay0nKToKKyAgICAgICAgaW1wb3J0IG1vY2tfZHJ0CisgICAgICAgIG1ha2VyID0gbW9j
a19kcnQuTW9ja0RSVFBvcnQKICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ21hYycp
OgogICAgICAgICBpbXBvcnQgbWFjCiAgICAgICAgIG1ha2VyID0gbWFjLk1hY1BvcnQKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVkMmNhOGMxNGY3ODRiYjc2Zjk0ZTgyYTJiNmY5ODNhZDIwYzkxZTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L21vY2tfZHJ0LnB5CkBAIC0wLDAgKzEsMjAwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMg
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworIiIiCitUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVy
ZmFjZSB0aGF0IG92ZXJyaWRlcyBvdGhlcgorcG9ydHMgYW5kIGNoYW5nZXMgdGhlIERyaXZlciBi
aW5hcnkgdG8gIk1vY2tEUlQiLgorIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFy
c2UKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBiYXNlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBm
YWN0b3J5CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBN
b2NrRFJUUG9ydChvYmplY3QpOgorICAgICIiIk1vY2tQb3J0IGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBQb3J0IGludGVyZmFjZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6
CisgICAgICAgIHByZWZpeCA9ICdtb2NrLScKKyAgICAgICAgaWYgJ3BvcnRfbmFtZScgaW4ga3dh
cmdzOgorICAgICAgICAgICAga3dhcmdzWydwb3J0X25hbWUnXSA9IGt3YXJnc1sncG9ydF9uYW1l
J11bbGVuKHByZWZpeCk6XQorICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5LmdldCgq
Kmt3YXJncykKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0
dXJuIGdldGF0dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQorCisgICAgZGVmIGFjcXVpcmVfaHR0
cF9sb2NrKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2so
c2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19o
dHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxm
LCBuZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkcml2ZXJfY21k
X2xpbmUoc2VsZik6CisgICAgICAgIGRyaXZlciA9IHNlbGYuY3JlYXRlX2RyaXZlcigwKQorICAg
ICAgICByZXR1cm4gZHJpdmVyLmNtZF9saW5lKCkKKworICAgIGRlZiBfcGF0aF90b19kcml2ZXIo
c2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisKKyAgICBk
ZWYgY3JlYXRlX2RyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgIyBXZSBuZWVk
IHRvIGNyZWF0ZSBhIGRyaXZlciBvYmplY3QgYXMgdGhlIGRlbGVnYXRlIHdvdWxkLCBidXQKKyAg
ICAgICAgIyBvdmVyd3JpdGUgdGhlIHBhdGggdG8gdGhlIGRyaXZlciBiaW5hcnkgaW4gaXRzIGNv
bW1hbmQgbGluZS4gV2UgZG8KKyAgICAgICAgIyB0aGlzIGJ5IGFjdHVhbGx5IG92ZXJ3cml0aW5n
IGl0cyBjbWRfbGluZSgpIG1ldGhvZCB3aXRoIGEgcHJveHkKKyAgICAgICAgIyBtZXRob2QgdGhh
dCBzcGxpY2VzIGluIHRoZSBtb2NrX2RydCBwYXRoIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRz
CisgICAgICAgICMgaW4gcGxhY2Ugb2YgdGhlIGFjdHVhbCBwYXRoIHRvIHRoZSBkcml2ZXIgYmlu
YXJ5LgorCisgICAgICAgICMgRklYTUU6IFRoaXMgZG9lc24ndCB5ZXQgd29yayBmb3IgQ2hyb21p
dW0gdGVzdF9zaGVsbCBwb3J0cy4KKyAgICAgICAgZGVmIG92ZXJyaWRpbmdfY21kX2xpbmUoKToK
KyAgICAgICAgICAgIGNtZCA9IHNlbGYuX19vcmlnaW5hbF9kcml2ZXJfY21kX2xpbmUoKQorICAg
ICAgICAgICAgaW5kZXggPSBjbWQuaW5kZXgoc2VsZi5fX2RlbGVnYXRlLl9wYXRoX3RvX2RyaXZl
cigpKQorICAgICAgICAgICAgY21kW2luZGV4OmluZGV4ICsgMV0gPSBbc3lzLmV4ZWN1dGFibGUs
IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1wbGF0Zm9ybScsIHNlbGYubmFtZSgpXQorICAgICAgICAgICAgcmV0dXJuIGNtZAor
CisgICAgICAgIGRlbGVnYXRlZF9kcml2ZXIgPSBzZWxmLl9fZGVsZWdhdGUuY3JlYXRlX2RyaXZl
cih3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl9fb3JpZ2luYWxfZHJpdmVyX2NtZF9saW5l
ID0gZGVsZWdhdGVkX2RyaXZlci5jbWRfbGluZQorICAgICAgICBkZWxlZ2F0ZWRfZHJpdmVyLmNt
ZF9saW5lID0gb3ZlcnJpZGluZ19jbWRfbGluZQorICAgICAgICByZXR1cm4gZGVsZWdhdGVkX2Ry
aXZlcgorCisgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3Rh
cnRfd2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Bf
aGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9odHRwX3NlcnZlcihz
ZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcihzZWxm
KToKKyAgICAgICAgcGFzcworCisKK2RlZiBtYWluKGFyZ3YsIHN0ZGluLCBzdGRvdXQsIHN0ZGVy
cik6CisgICAgIiIiUnVuIHRoZSB0ZXN0cy4iIiIKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJz
ZV9vcHRpb25zKGFyZ3YpCisgICAgZHJ0ID0gTW9ja0RSVChvcHRpb25zLCBhcmdzLCBzdGRpbiwg
c3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIGRydC5ydW4oKQorCisKK2RlZiBwYXJzZV9vcHRp
b25zKGFyZ3YpOgorICAgICMgRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gaGFu
ZGxlIHZhcmlhbnRzIHRoYXQgaGF2ZQorICAgICMgZGlmZmVyZW50IGNvbW1hbmQtbGluZSBjb252
ZW50aW9ucy4KKyAgICBvcHRpb25fbGlzdCA9IFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tcGxhdGZvcm0nLCBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0ncGxhdGZvcm0gdG8gZW11bGF0ZScpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1sYXlvdXQtdGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGhlbHA9J3J1biBsYXlvdXQgdGVzdHMn
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcGl4ZWwtdGVzdHMnLCBhY3Rpb249
J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRwdXQgaW1hZ2UgZm9yIHBp
eGVsIHRlc3RzJyksCisgICAgXQorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25Q
YXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIu
cGFyc2VfYXJncyhhcmd2KQorCisKK2NsYXNzIE1vY2tEUlQob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgb3B0aW9ucywgYXJncywgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKKyAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKKyAg
ICAgICAgc2VsZi5fc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgIHNlbGYuX3N0ZGluID0gc3RkaW4K
KyAgICAgICAgc2VsZi5fc3RkZXJyID0gc3RkZXJyCisKKyAgICAgICAgcG9ydF9uYW1lID0gTm9u
ZQorICAgICAgICBpZiBvcHRpb25zLnBsYXRmb3JtOgorICAgICAgICAgICAgcG9ydF9uYW1lID0g
b3B0aW9ucy5wbGF0Zm9ybQorICAgICAgICBzZWxmLl9wb3J0ID0gZmFjdG9yeS5nZXQocG9ydF9u
YW1lLCBvcHRpb25zPW9wdGlvbnMpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB3aGls
ZSBUcnVlOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX3N0ZGluLnJlYWRsaW5lKCkKKyAgICAg
ICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAg
IHVybCwgZXhwZWN0ZWRfY2hlY2tzdW0gPSBzZWxmLnBhcnNlX2lucHV0KGxpbmUpCisgICAgICAg
ICAgICBzZWxmLnJ1bl9vbmVfdGVzdCh1cmwsIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAgICBy
ZXR1cm4gMAorCisgICAgZGVmIHBhcnNlX2lucHV0KHNlbGYsIGxpbmUpOgorICAgICAgICBsaW5l
ID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmICInIiBpbiBsaW5lOgorICAgICAgICAgICAgcmV0
dXJuIGxpbmUuc3BsaXQoIiciLCAxKQorICAgICAgICByZXR1cm4gKGxpbmUsIE5vbmUpCisKKyAg
ICBkZWYgcnVuX29uZV90ZXN0KHNlbGYsIHVybCwgZXhwZWN0ZWRfY2hlY2tzdW0pOgorICAgICAg
ICBwb3J0ID0gc2VsZi5fcG9ydAorICAgICAgICBpZiB1cmwuc3RhcnRzd2l0aCgnaHR0cCcpOgor
ICAgICAgICAgICAgdGVzdF9uYW1lID0gcG9ydC51cmlfdG9fdGVzdF9uYW1lKHVybCkKKyAgICAg
ICAgICAgIHRlc3RfcGF0aCA9IHBvcnQuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91dF90ZXN0
c19kaXIoKSwgdGVzdF9uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVzdF9wYXRo
ID0gdXJsCisKKyAgICAgICAgYWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVkX3RleHQodGVzdF9w
YXRoKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCBleHBlY3RlZF9j
aGVja3N1bToKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRfY2hl
Y2tzdW0odGVzdF9wYXRoKQorICAgICAgICAgICAgYWN0dWFsX2ltYWdlID0gcG9ydC5leHBlY3Rl
ZF9pbWFnZSh0ZXN0X3BhdGgpCisKKyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCJDb250ZW50
LVR5cGU6IHRleHQvcGxhaW5cbiIpCisgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShhY3R1YWxf
dGV4dCkKKyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCIjRU9GXG4iKQorCisgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIGV4cGVjdGVkX2NoZWNrc3VtOgorICAgICAg
ICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUoIkFjdHVhbEhhc2g6ICVzXG4iICUgYWN0dWFsX2NoZWNrc3VtKQorICAgICAgICAgICAg
c2VsZi5fc3Rkb3V0LndyaXRlKCJFeHBlY3RlZEhhc2g6ICVzXG4iICUgdW5pY29kZShleHBlY3Rl
ZF9jaGVja3N1bSkpCisgICAgICAgICAgICBpZiBhY3R1YWxfY2hlY2tzdW0gIT0gZXhwZWN0ZWRf
Y2hlY2tzdW06CisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCJDb250ZW50LVR5
cGU6IGltYWdlL3BuZ1xuIikKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIkNv
bnRlbnQtTGVuZ3RoOiAlc1xuXG4iICUgbGVuKGFjdHVhbF9pbWFnZSkpCisgICAgICAgICAgICAg
ICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF9pbWFnZSkKKyAgICAgICAgc2VsZi5fc3Rkb3V0
LndyaXRlKCIjRU9GXG4iKQorICAgICAgICBzZWxmLl9zdGRvdXQuZmx1c2goKQorICAgICAgICBz
ZWxmLl9zdGRlcnIuZmx1c2goKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
c3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0
ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODE5NDhkNWU3ZWM4
NzhiZWYzODk4YTY0ZDNiYTc2ZDlmOWZlYjE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQpAQCAt
MCwwICsxLDE5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiVW5pdCB0ZXN0cyBmb3IgTW9ja0RSVC4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20g
d2Via2l0cHkuY29tbW9uIGltcG9ydCBuZXdzdHJpbmdpbworCitmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBtb2NrX2RydAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydCBpbXBvcnQgZmFjdG9yeQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIE1vY2tEUlRQb3J0VGVzdChwb3J0X3Rlc3RjYXNl
LlBvcnRUZXN0Q2FzZSk6CisgICAgZGVmIG1ha2VfcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJu
IG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KCkKKworICAgIGRlZiB0ZXN0X3BvcnRfbmFtZV9pbl9jb25z
dHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZHJ0Lk1vY2tEUlRQ
b3J0KHBvcnRfbmFtZT0nbW9jay10ZXN0JykpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2h0dHBf
bG9jayhzZWxmKToKKyAgICAgICAgIyBPbmx5IGNoZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlz
IHJhaXNlZC4KKyAgICAgICAgc2VsZi5tYWtlX3BvcnQoKS5hY3F1aXJlX2h0dHBfbG9jaygpCisK
KyAgICBkZWYgdGVzdF9yZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgIyBPbmx5IGNo
ZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5tYWtlX3Bv
cnQoKS5yZWxlYXNlX2h0dHBfbG9jaygpCisKKyAgICBkZWYgdGVzdF9jaGVja19idWlsZChzZWxm
KToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHBvcnQuY2hlY2tfYnVpbGQoVHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9jaGVja19zeXNfZGVw
cyhzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHBvcnQuY2hlY2tfc3lzX2RlcHMoVHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9zdGFy
dF9oZWxwZXIoc2VsZik6CisgICAgICAgICMgT25seSBjaGVja2luZyB0aGF0IG5vIGV4Y2VwdGlv
biBpcyByYWlzZWQuCisgICAgICAgIHNlbGYubWFrZV9wb3J0KCkuc3RhcnRfaGVscGVyKCkKKwor
ICAgIGRlZiB0ZXN0X3N0YXJ0X2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICAjIE9ubHkgY2hl
Y2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICBzZWxmLm1ha2VfcG9y
dCgpLnN0YXJ0X2h0dHBfc2VydmVyKCkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X3dlYnNvY2tldF9z
ZXJ2ZXIoc2VsZik6CisgICAgICAgICMgT25seSBjaGVja2luZyB0aGF0IG5vIGV4Y2VwdGlvbiBp
cyByYWlzZWQuCisgICAgICAgIHNlbGYubWFrZV9wb3J0KCkuc3RhcnRfd2Vic29ja2V0X3NlcnZl
cigpCisKKyAgICBkZWYgdGVzdF9zdG9wX2hlbHBlcihzZWxmKToKKyAgICAgICAgIyBPbmx5IGNo
ZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5tYWtlX3Bv
cnQoKS5zdG9wX2hlbHBlcigpCisKKyAgICBkZWYgdGVzdF9zdG9wX2h0dHBfc2VydmVyKHNlbGYp
OgorICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgor
ICAgICAgICBzZWxmLm1ha2VfcG9ydCgpLnN0b3BfaHR0cF9zZXJ2ZXIoKQorCisgICAgZGVmIHRl
c3Rfc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgorICAgICAgICAjIE9ubHkgY2hlY2tpbmcg
dGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICBzZWxmLm1ha2VfcG9ydCgpLnN0
b3Bfd2Vic29ja2V0X3NlcnZlcigpCisKKworY2xhc3MgTW9ja0RSVFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IGZhY3Rv
cnkuZ2V0KCd0ZXN0JykKKyAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3Bv
cnQubGF5b3V0X3Rlc3RzX2RpcigpCisKKyAgICBkZWYgdG9fcGF0aChzZWxmLCB0ZXN0X25hbWUp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2xheW91
dF90ZXN0c19kaXIsIHRlc3RfbmFtZSkKKworICAgIGRlZiBpbnB1dF9saW5lKHNlbGYsIHRlc3Rf
bmFtZSwgY2hlY2tzdW09Tm9uZSk6CisgICAgICAgIHVybCA9IHNlbGYuX3BvcnQuZmlsZW5hbWVf
dG9fdXJpKHNlbGYudG9fcGF0aCh0ZXN0X25hbWUpKQorICAgICAgICBpZiB1cmwuc3RhcnRzd2l0
aCgnZmlsZTovLy8nKToKKyAgICAgICAgICAgIHVybCA9IHVybFtsZW4oJ2ZpbGU6Ly8vJykgLSAx
Ol0KKworICAgICAgICBpZiBjaGVja3N1bToKKyAgICAgICAgICAgIHJldHVybiB1cmwgKyAiJyIg
KyBjaGVja3N1bSArICdcbicKKyAgICAgICAgcmV0dXJuIHVybCArICdcbicKKworICAgIGRlZiBt
YWtlX2RydChzZWxmLCBpbnB1dF9zdHJpbmcsIGV4dHJhX2FyZ3M9Tm9uZSk6CisgICAgICAgIGFy
Z3MgPSBbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctJ10KKyAgICAgICAgZXh0cmFfYXJncyA9IGV4
dHJhX2FyZ3Mgb3IgW10KKyAgICAgICAgYXJncyArPSBleHRyYV9hcmdzCisgICAgICAgIHN0ZGlu
ID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oaW5wdXRfc3RyaW5nKQorICAgICAgICBzdGRvdXQgPSBu
ZXdzdHJpbmdpby5TdHJpbmdJTygpCisgICAgICAgIHN0ZGVyciA9IG5ld3N0cmluZ2lvLlN0cmlu
Z0lPKCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IG1vY2tfZHJ0LnBhcnNlX29wdGlvbnMoYXJn
cykKKyAgICAgICAgZHJ0ID0gbW9ja19kcnQuTW9ja0RSVChvcHRpb25zLCBhcmdzLCBzdGRpbiwg
c3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHJldHVybiAoZHJ0LCBzdGRvdXQsIHN0ZGVycikKKwor
ICAgIGRlZiBtYWtlX2lucHV0X291dHB1dChzZWxmLCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzLCBl
eHBlY3RlZF9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ0X291dHB1dCwg
ZHJ0X2lucHV0PU5vbmUpOgorICAgICAgICBwYXRoID0gc2VsZi50b19wYXRoKHRlc3RfbmFtZSkK
KyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBpZiBub3QgZXhwZWN0ZWRfY2hl
Y2tzdW06CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4
cGVjdGVkX2NoZWNrc3VtKHBhdGgpCisgICAgICAgIGlmIG5vdCBkcnRfaW5wdXQ6CisgICAgICAg
ICAgICBkcnRfaW5wdXQgPSBzZWxmLmlucHV0X2xpbmUodGVzdF9uYW1lLCBleHBlY3RlZF9jaGVj
a3N1bSkKKyAgICAgICAgdGV4dF9vdXRwdXQgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX3RleHQocGF0
aCkKKworICAgICAgICBpZiBub3QgZHJ0X291dHB1dDoKKyAgICAgICAgICAgIGlmIHBpeGVsX3Rl
c3RzOgorICAgICAgICAgICAgICAgIGRydF9vdXRwdXQgPSBbCisgICAgICAgICAgICAgICAgICAg
ICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbiIsCisgICAgICAgICAgICAgICAgICAgIHRleHRf
b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAiI0VPRlxuIiwKKyAgICAgICAgICAgICAgICAg
ICAgIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgIkFjdHVhbEhhc2g6ICVzXG4iICUgZXhwZWN0
ZWRfY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZEhhc2g6ICVzXG4iICUg
ZXhwZWN0ZWRfY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgICIjRU9GXG4iXQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkcnRfb3V0cHV0ID0gWworICAgICAgICAgICAg
ICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4iLAorICAgICAgICAgICAgICAgICAg
ICB0ZXh0X291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgIiNFT0ZcbiIsCisgICAgICAgICAg
ICAgICAgICAgICIjRU9GXG4iXQorCisgICAgICAgIHJldHVybiAoZHJ0X2lucHV0LCBkcnRfb3V0
cHV0KQorCisgICAgZGVmIGFzc2VydFRlc3Qoc2VsZiwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0cywg
ZXhwZWN0ZWRfY2hlY2tzdW09Tm9uZSwgZHJ0X291dHB1dD1Ob25lKToKKyAgICAgICAgZHJ0X2lu
cHV0LCBkcnRfb3V0cHV0ID0gc2VsZi5tYWtlX2lucHV0X291dHB1dCh0ZXN0X25hbWUsIHBpeGVs
X3Rlc3RzLAorICAgICAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0sIGRydF9vdXRwdXQpCisgICAg
ICAgIGV4dHJhX2FyZ3MgPSBbXQorICAgICAgICBpZiBwaXhlbF90ZXN0czoKKyAgICAgICAgICAg
IGV4dHJhX2FyZ3MgPSBbJy0tcGl4ZWwtdGVzdHMnXQorICAgICAgICBkcnQsIHN0ZG91dCwgc3Rk
ZXJyID0gc2VsZi5tYWtlX2RydChkcnRfaW5wdXQsIGV4dHJhX2FyZ3MpCisgICAgICAgIHJlcyA9
IGRydC5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKKworICAgICAgICAj
IFdlIHVzZSB0aGUgU3RyaW5nSU8uYnVmbGlzdCBoZXJlIGluc3RlYWQgb2YgZ2V0dmFsdWUoKSBi
ZWNhdXNlCisgICAgICAgICMgdGhlIFN0cmluZ0lPIG1pZ2h0IGJlIGEgbWl4IG9mIHVuaWNvZGUv
YXNjaWkgYW5kIDgtYml0IHN0cmluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0
LmJ1Zmxpc3QsIGRydF9vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdl
dHZhbHVlKCksICcnKQorCisgICAgZGVmIHRlc3RfbWFpbihzZWxmKToKKyAgICAgICAgc3RkaW4g
PSBuZXdzdHJpbmdpby5TdHJpbmdJTygpCisgICAgICAgIHN0ZG91dCA9IG5ld3N0cmluZ2lvLlN0
cmluZ0lPKCkKKyAgICAgICAgc3RkZXJyID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQorICAgICAg
ICByZXMgPSBtb2NrX2RydC5tYWluKFsnLS1wbGF0Zm9ybScsICd0ZXN0JywgJy0nXSwgc3RkaW4s
IHN0ZG91dCwgc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZhbHVlKCksICcnKQorCisgICAgZGVmIHRlc3RfcGl4ZWx0
ZXN0X3Bhc3NlcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGFsc28gdGVzdHMgdGhhdCB3ZSBoYW5k
bGUgSFRUUDogdGVzdCBVUkxzIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2h0
dHAvdGVzdHMvcGFzc2VzL3RleHQuaHRtbCcsIFRydWUpCisKKyAgICBkZWYgdGVzdF9waXhlbHRl
c3RfX2ZhaWxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2ZhaWx1cmVzL2V4cGVj
dGVkL2NoZWNrc3VtLmh0bWwnLCBwaXhlbF90ZXN0cz1UcnVlLAorICAgICAgICAgICAgZXhwZWN0
ZWRfY2hlY2tzdW09J3dyb25nLWNoZWNrc3VtJywKKyAgICAgICAgICAgIGRydF9vdXRwdXQ9WydD
b250ZW50LVR5cGU6IHRleHQvcGxhaW5cbicsCisgICAgICAgICAgICAgICAgICAgICAgICB1J2No
ZWNrc3VtLXR4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnI0VPRlxuJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICB1J0FjdHVhbEhh
c2g6IGNoZWNrc3VtLWNoZWNrc3VtXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgdSdFeHBl
Y3RlZEhhc2g6IHdyb25nLWNoZWNrc3VtXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0Nv
bnRlbnQtVHlwZTogaW1hZ2UvcG5nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRl
bnQtTGVuZ3RoOiAxM1xuXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2NoZWNrc3VtXHg4
YS1wbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgJyNFT0ZcbiddKQorCisgICAgZGVmIHRl
c3RfdGV4dG9ubHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgncGFzc2VzL2ltYWdl
Lmh0bWwnLCBGYWxzZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0
ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC90ZXN0LnB5CmluZGV4IDVkZjVjMmQ5ZDYyMTliZjk0Njk0OTZmMjU3NGU2M2MxODExMmFkZTQu
LjU0MmU3MjQ4ZTNjZTRiMTUzYzFkYWYwMTg3NTRlMWE3OGE3N2FlYzQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTUxLDkgKzUx
LDkgQEAgY2xhc3MgVGVzdEluc3RhbmNlOgogICAgICAgICBzZWxmLmtleWJvYXJkID0gRmFsc2UK
ICAgICAgICAgc2VsZi5lcnJvciA9ICcnCiAgICAgICAgIHNlbGYudGltZW91dCA9IEZhbHNlCi0g
ICAgICAgIHNlbGYuYWN0dWFsX3RleHQgPSBzZWxmLmJhc2UgKyAnLXR4dFxuJwotICAgICAgICBz
ZWxmLmFjdHVhbF9jaGVja3N1bSA9IHNlbGYuYmFzZSArICctY2hlY2tzdW1cbicKLSAgICAgICAg
c2VsZi5hY3R1YWxfaW1hZ2UgPSBzZWxmLmJhc2UgKyAnLXBuZ1xuJworICAgICAgICBzZWxmLmFj
dHVhbF90ZXh0ID0gdW5pY29kZShzZWxmLmJhc2UgKyAnLXR4dCcpCisgICAgICAgIHNlbGYuYWN0
dWFsX2NoZWNrc3VtID0gdW5pY29kZShzZWxmLmJhc2UgKyAnLWNoZWNrc3VtJykKKyAgICAgICAg
c2VsZi5hY3R1YWxfaW1hZ2UgPSBzZWxmLmJhc2UgKyAnXHg4YScgKyAnLXBuZycKICAgICAgICAg
c2VsZi5leHBlY3RlZF90ZXh0ID0gc2VsZi5hY3R1YWxfdGV4dAogICAgICAgICBzZWxmLmV4cGVj
dGVkX2NoZWNrc3VtID0gc2VsZi5hY3R1YWxfY2hlY2tzdW0KICAgICAgICAgc2VsZi5leHBlY3Rl
ZF9pbWFnZSA9IHNlbGYuYWN0dWFsX2ltYWdlCkBAIC02OCw3ICs2OCwxMCBAQCBjbGFzcyBUZXN0
TGlzdDoKICAgICBkZWYgYWRkKHNlbGYsIG5hbWUsICoqa3dhcmdzKToKICAgICAgICAgdGVzdCA9
IFRlc3RJbnN0YW5jZShuYW1lKQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRl
bXMoKToKLSAgICAgICAgICAgIHRlc3QuX19kaWN0X19ba2V5XSA9IHZhbHVlCisgICAgICAgICAg
ICBpZiAoJ3RleHQnIGluIGtleSBvciAnY2hlY2tzdW0nIGluIGtleSkgYW5kIHZhbHVlOgorICAg
ICAgICAgICAgICAgIHRlc3QuX19kaWN0X19ba2V5XSA9IHVuaWNvZGUodmFsdWUpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRlc3QuX19kaWN0X19ba2V5XSA9IHZhbHVlCiAg
ICAgICAgIHNlbGYudGVzdHNbbmFtZV0gPSB0ZXN0CiAKICAgICBkZWYga2V5cyhzZWxmKToKQEAg
LTIxMyw2ICsyMTYsMTEgQEAgY2xhc3MgVGVzdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAga3dh
cmdzLnNldGRlZmF1bHQoJ3BvcnRfbmFtZScsICd0ZXN0JykKICAgICAgICAgYmFzZS5Qb3J0Ll9f
aW5pdF9fKHNlbGYsICoqa3dhcmdzKQogCisgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToK
KyAgICAgICAgIyBUaGlzIHJvdXRpbmUgc2hvdWxkbid0IG5vcm1hbGx5IGJlIGNhbGxlZCwgYnV0
IGl0IGlzIGNhbGxlZCBieQorICAgICAgICAjIHRoZSBtb2NrX2RydCBEcml2ZXIuIFdlIHJldHVy
biBzb21ldGhpbmcsIGJ1dCBtYWtlIHN1cmUgaXQncyB1c2VsZXNzLgorICAgICAgICByZXR1cm4g
J2p1bmsnCisKICAgICBkZWYgYmFzZWxpbmVfcGF0aChzZWxmKToKICAgICAgICAgcmV0dXJuIHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUoKSArIHNlbGYu
dmVyc2lvbigpKQpAQCAtMjg3LDcgKzI5NSw3IEBAIGNsYXNzIFRlc3REcml2ZXIoYmFzZS5Ecml2
ZXIpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogCiAgICAgZGVmIGNtZF9saW5lKHNlbGYp
OgotICAgICAgICByZXR1cm4gWydOb25lJ10KKyAgICAgICAgcmV0dXJuIFtzZWxmLl9wb3J0Ll9w
YXRoX3RvX2RyaXZlcigpXQogCiAgICAgZGVmIHBvbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBU
cnVlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80354</attachid>
            <date>2011-01-27 12:13:21 -0800</date>
            <delta_ts>2011-01-27 17:45:44 -0800</delta_ts>
            <desc>delta from r76709</desc>
            <filename>diff_from_r76709.diff</filename>
            <type>text/plain</type>
            <size>14118</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5
cnVuLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4u
cHkKaW5kZXggNGVkMzRlNi4uMDFkZWE4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKQEAgLTcxLDYgKzcxLDEyIEBAIGNsYXNz
IERyeVJ1blBvcnQob2JqZWN0KToKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CiAg
ICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKIAorICAgIGRlZiBh
Y3F1aXJlX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJlbGVhc2Vf
aHR0cF9sb2NrKHNlbGYpOgorICAgICAgICBwYXNzCisKICAgICBkZWYgY2hlY2tfYnVpbGQoc2Vs
ZiwgbmVlZHNfaHR0cCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQppbmRleCA3MDJkNzIz
Li5jNTMwYjQ2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2ZhY3RvcnkucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9mYWN0b3J5LnB5CkBAIC0zMiw3ICszMiw3IEBACiAKIGltcG9ydCBzeXMKIAotQUxM
X1BPUlRfTkFNRVMgPSBbJ3Rlc3QnLCAnZHJ5cnVuJywgJ21vY2snLCAnbWFjJywgJ3dpbicsICdn
dGsnLCAncXQnLCAnY2hyb21pdW0tbWFjJywKK0FMTF9QT1JUX05BTUVTID0gWyd0ZXN0JywgJ2Ry
eXJ1bicsICdtYWMnLCAnd2luJywgJ2d0aycsICdxdCcsICdjaHJvbWl1bS1tYWMnLAogICAgICAg
ICAgICAgICAgICAgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdnb29nbGUtY2hy
b21lLXdpbicsCiAgICAgICAgICAgICAgICAgICAnZ29vZ2xlLWNocm9tZS1tYWMnLCAnZ29vZ2xl
LWNocm9tZS1saW51eDMyJywgJ2dvb2dsZS1jaHJvbWUtbGludXg2NCddCiAKQEAgLTc2LDcgKzc2
LDcgQEAgZGVmIF9nZXRfa3dhcmdzKCoqa3dhcmdzKToKICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0
YXJ0c3dpdGgoJ2RyeXJ1bicpOgogICAgICAgICBpbXBvcnQgZHJ5cnVuCiAgICAgICAgIG1ha2Vy
ID0gZHJ5cnVuLkRyeVJ1blBvcnQKLSAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ21v
Y2snKToKKyAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ21vY2stJyk6CiAgICAgICAg
IGltcG9ydCBtb2NrX2RydAogICAgICAgICBtYWtlciA9IG1vY2tfZHJ0Lk1vY2tEUlRQb3J0CiAg
ICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtYWMnKToKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CmluZGV4IDM2YzRm
NzEuLmVkMmNhOGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbW9ja19kcnQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tb2NrX2RydC5weQpAQCAtNDksMTUgKzQ5LDE4IEBAIGNsYXNzIE1vY2tEUlRQ
b3J0KG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAg
cHJlZml4ID0gJ21vY2stJwogICAgICAgICBpZiAncG9ydF9uYW1lJyBpbiBrd2FyZ3M6Ci0gICAg
ICAgICAgICBpZiBrd2FyZ3NbJ3BvcnRfbmFtZSddLnN0YXJ0c3dpdGgocHJlZml4KToKLSAgICAg
ICAgICAgICAgICBrd2FyZ3NbJ3BvcnRfbmFtZSddID0ga3dhcmdzWydwb3J0X25hbWUnXVtsZW4o
cHJlZml4KTpdCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGt3YXJnc1sncG9y
dF9uYW1lJ10gPSBOb25lCisgICAgICAgICAgICBrd2FyZ3NbJ3BvcnRfbmFtZSddID0ga3dhcmdz
Wydwb3J0X25hbWUnXVtsZW4ocHJlZml4KTpdCiAgICAgICAgIHNlbGYuX19kZWxlZ2F0ZSA9IGZh
Y3RvcnkuZ2V0KCoqa3dhcmdzKQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgog
ICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUsIG5hbWUpCiAKKyAgICBkZWYg
YWNxdWlyZV9odHRwX2xvY2soc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiByZWxlYXNl
X2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgcGFzcworCiAgICAgZGVmIGNoZWNrX2J1aWxkKHNl
bGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC0xNDYsMjcgKzE0OSwx
NiBAQCBjbGFzcyBNb2NrRFJUKG9iamVjdCk6CiAgICAgICAgIGlmIG9wdGlvbnMucGxhdGZvcm06
CiAgICAgICAgICAgICBwb3J0X25hbWUgPSBvcHRpb25zLnBsYXRmb3JtCiAgICAgICAgIHNlbGYu
X3BvcnQgPSBmYWN0b3J5LmdldChwb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucykKLSAgICAgICAg
c2VsZi5fZXhpdF9zdGF0dXMgPSAwCiAKICAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9z
dGRpbi5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgICAgICB1cmwsIGV4cGVjdGVkX2NoZWNrc3Vt
ID0gc2VsZi5wYXJzZV9pbnB1dChsaW5lKQotICAgICAgICAgICAgICAgIHNlbGYucnVuX29uZV90
ZXN0KHVybCwgZXhwZWN0ZWRfY2hlY2tzdW0pCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBl
OgotICAgICAgICAgICAgc2VsZi5fc3RkZXJyLndyaXRlKCJNb2NrRFJUIGV4aXRpbmcsIFZhbHVl
RXJyb3IgcmFpc2VkOiAnJXMnXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBz
dHIoZSkpCi0gICAgICAgICAgICBzZWxmLl9leGl0X3N0YXR1cyA9IDEKLSAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHNlbGYuX3N0ZGVyci53cml0ZSgiTW9ja0RSVCBl
eGl0aW5nLCB1bmV4cGVjdGVkIGV4Y2VwdGlvbjogJyVzJ1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICUgc3RyKGUpKQotICAgICAgICAgICAgc2VsZi5fZXhpdF9zdGF0dXMgPSAt
MQotCi0gICAgICAgIHJldHVybiBzZWxmLl9leGl0X3N0YXR1cworICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX3N0ZGluLnJlYWRsaW5lKCkKKyAgICAgICAgICAg
IGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHVybCwg
ZXhwZWN0ZWRfY2hlY2tzdW0gPSBzZWxmLnBhcnNlX2lucHV0KGxpbmUpCisgICAgICAgICAgICBz
ZWxmLnJ1bl9vbmVfdGVzdCh1cmwsIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAgICByZXR1cm4g
MAogCiAgICAgZGVmIHBhcnNlX2lucHV0KHNlbGYsIGxpbmUpOgogICAgICAgICBsaW5lID0gbGlu
ZS5zdHJpcCgpCkBAIC0xNzYsOSArMTY4LDkgQEAgY2xhc3MgTW9ja0RSVChvYmplY3QpOgogCiAg
ICAgZGVmIHJ1bl9vbmVfdGVzdChzZWxmLCB1cmwsIGV4cGVjdGVkX2NoZWNrc3VtKToKICAgICAg
ICAgcG9ydCA9IHNlbGYuX3BvcnQKLSAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8v
Jykgb3IgdXJsLnN0YXJ0c3dpdGgoJ2h0dHAnKToKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgo
J2h0dHAnKToKICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHBvcnQudXJpX3RvX3Rlc3RfbmFtZSh1
cmwpCi0gICAgICAgICAgICB0ZXN0X3BhdGggPSBwb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
TGF5b3V0VGVzdHMnLCB0ZXN0X25hbWUpCisgICAgICAgICAgICB0ZXN0X3BhdGggPSBwb3J0Ll9m
aWxlc3lzdGVtLmpvaW4ocG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3RfbmFtZSkKICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHVybAogCkBAIC0xOTQsOCArMTg2LDkg
QEAgY2xhc3MgTW9ja0RSVChvYmplY3QpOgogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzIGFuZCBleHBlY3RlZF9jaGVja3N1bToKICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53
cml0ZSgiXG4iKQogICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCJBY3R1YWxIYXNoOiAl
c1xuIiAlIGFjdHVhbF9jaGVja3N1bSkKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgi
RXhwZWN0ZWRIYXNoOiAlc1xuIiAlIGV4cGVjdGVkX2NoZWNrc3VtKQorICAgICAgICAgICAgc2Vs
Zi5fc3Rkb3V0LndyaXRlKCJFeHBlY3RlZEhhc2g6ICVzXG4iICUgdW5pY29kZShleHBlY3RlZF9j
aGVja3N1bSkpCiAgICAgICAgICAgICBpZiBhY3R1YWxfY2hlY2tzdW0gIT0gZXhwZWN0ZWRfY2hl
Y2tzdW06CisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCJDb250ZW50LVR5cGU6
IGltYWdlL3BuZ1xuIikKICAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIkNvbnRl
bnQtTGVuZ3RoOiAlc1xuXG4iICUgbGVuKGFjdHVhbF9pbWFnZSkpCiAgICAgICAgICAgICAgICAg
c2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF9pbWFnZSkKICAgICAgICAgc2VsZi5fc3Rkb3V0Lndy
aXRlKCIjRU9GXG4iKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKaW5kZXggZmJlOTExYy4uYTgx
OTQ4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tb2NrX2RydF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5CkBAIC00MiwxMSArNDIsNTMgQEAgY2xh
c3MgTW9ja0RSVFBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKICAgICBkZWYg
bWFrZV9wb3J0KHNlbGYpOgogICAgICAgICByZXR1cm4gbW9ja19kcnQuTW9ja0RSVFBvcnQoKQog
CisgICAgZGVmIHRlc3RfcG9ydF9uYW1lX2luX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydFRydWUobW9ja19kcnQuTW9ja0RSVFBvcnQocG9ydF9uYW1lPSdtb2NrLXRlc3Qn
KSkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmVfaHR0cF9sb2NrKHNlbGYpOgorICAgICAgICAjIE9u
bHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICBzZWxmLm1h
a2VfcG9ydCgpLmFjcXVpcmVfaHR0cF9sb2NrKCkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2VfaHR0
cF9sb2NrKHNlbGYpOgorICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24g
aXMgcmFpc2VkLgorICAgICAgICBzZWxmLm1ha2VfcG9ydCgpLnJlbGVhc2VfaHR0cF9sb2NrKCkK
KworICAgIGRlZiB0ZXN0X2NoZWNrX2J1aWxkKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5jaGVja19idWlsZChUcnVl
KSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX3N5c19kZXBzKHNlbGYpOgorICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5jaGVja19zeXNf
ZGVwcyhUcnVlKSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAgICAg
IyBPbmx5IGNoZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgc2Vs
Zi5tYWtlX3BvcnQoKS5zdGFydF9oZWxwZXIoKQorCisgICAgZGVmIHRlc3Rfc3RhcnRfaHR0cF9z
ZXJ2ZXIoc2VsZik6CisgICAgICAgICMgT25seSBjaGVja2luZyB0aGF0IG5vIGV4Y2VwdGlvbiBp
cyByYWlzZWQuCisgICAgICAgIHNlbGYubWFrZV9wb3J0KCkuc3RhcnRfaHR0cF9zZXJ2ZXIoKQor
CisgICAgZGVmIHRlc3Rfc3RhcnRfd2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAgICAgIyBP
bmx5IGNoZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5t
YWtlX3BvcnQoKS5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKworICAgIGRlZiB0ZXN0X3N0b3Bf
aGVscGVyKHNlbGYpOgorICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24g
aXMgcmFpc2VkLgorICAgICAgICBzZWxmLm1ha2VfcG9ydCgpLnN0b3BfaGVscGVyKCkKKworICAg
IGRlZiB0ZXN0X3N0b3BfaHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAgICMgT25seSBjaGVja2lu
ZyB0aGF0IG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICAgICAgIHNlbGYubWFrZV9wb3J0KCku
c3RvcF9odHRwX3NlcnZlcigpCisKKyAgICBkZWYgdGVzdF9zdG9wX3dlYnNvY2tldF9zZXJ2ZXIo
c2VsZik6CisgICAgICAgICMgT25seSBjaGVja2luZyB0aGF0IG5vIGV4Y2VwdGlvbiBpcyByYWlz
ZWQuCisgICAgICAgIHNlbGYubWFrZV9wb3J0KCkuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKwog
CiBjbGFzcyBNb2NrRFJUVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNl
bGYpOgotICAgICAgICAjIFdlIGJhc2Ugb3VyIHRlc3RzIG9uIHRoZSBtYWMtc25vd2xlb3BhcmQg
cG9ydC4KLSAgICAgICAgc2VsZi5fcG9ydCA9IGZhY3RvcnkuZ2V0KCdtYWMtc25vd2xlb3BhcmQn
KQorICAgICAgICBzZWxmLl9wb3J0ID0gZmFjdG9yeS5nZXQoJ3Rlc3QnKQogICAgICAgICBzZWxm
Ll9sYXlvdXRfdGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKIAogICAg
IGRlZiB0b19wYXRoKHNlbGYsIHRlc3RfbmFtZSk6CkBAIC01NCwxMiArOTYsMTUgQEAgY2xhc3Mg
TW9ja0RSVFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGlucHV0X2xpbmUoc2Vs
ZiwgdGVzdF9uYW1lLCBjaGVja3N1bT1Ob25lKToKICAgICAgICAgdXJsID0gc2VsZi5fcG9ydC5m
aWxlbmFtZV90b191cmkoc2VsZi50b19wYXRoKHRlc3RfbmFtZSkpCisgICAgICAgIGlmIHVybC5z
dGFydHN3aXRoKCdmaWxlOi8vLycpOgorICAgICAgICAgICAgdXJsID0gdXJsW2xlbignZmlsZTov
Ly8nKSAtIDE6XQorCiAgICAgICAgIGlmIGNoZWNrc3VtOgogICAgICAgICAgICAgcmV0dXJuIHVy
bCArICInIiArIGNoZWNrc3VtICsgJ1xuJwogICAgICAgICByZXR1cm4gdXJsICsgJ1xuJwogCi0g
ICAgZGVmIG1ha2VfZHJ0KHNlbGYsIGlucHV0X3N0cmluZywgYXJncz1Ob25lLCBleHRyYV9hcmdz
PU5vbmUpOgotICAgICAgICBhcmdzID0gYXJncyBvciBbJy0tcGxhdGZvcm0nLCAnbWFjLXNub3ds
ZW9wYXJkJywgJy0nXQorICAgIGRlZiBtYWtlX2RydChzZWxmLCBpbnB1dF9zdHJpbmcsIGV4dHJh
X2FyZ3M9Tm9uZSk6CisgICAgICAgIGFyZ3MgPSBbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctJ10K
ICAgICAgICAgZXh0cmFfYXJncyA9IGV4dHJhX2FyZ3Mgb3IgW10KICAgICAgICAgYXJncyArPSBl
eHRyYV9hcmdzCiAgICAgICAgIHN0ZGluID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oaW5wdXRfc3Ry
aW5nKQpAQCAtNjksNDYgKzExNCw3OSBAQCBjbGFzcyBNb2NrRFJUVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIGRydCA9IG1vY2tfZHJ0Lk1vY2tEUlQob3B0aW9ucywgYXJncywgc3Rk
aW4sIHN0ZG91dCwgc3RkZXJyKQogICAgICAgICByZXR1cm4gKGRydCwgc3Rkb3V0LCBzdGRlcnIp
CiAKLSAgICBkZWYgbWFrZV9pbnB1dF9vdXRwdXQoc2VsZiwgdGVzdF9uYW1lLCBwaXhlbF90ZXN0
cyk6CisgICAgZGVmIG1ha2VfaW5wdXRfb3V0cHV0KHNlbGYsIHRlc3RfbmFtZSwgcGl4ZWxfdGVz
dHMsIGV4cGVjdGVkX2NoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkcnRfb3V0
cHV0LCBkcnRfaW5wdXQ9Tm9uZSk6CiAgICAgICAgIHBhdGggPSBzZWxmLnRvX3BhdGgodGVzdF9u
YW1lKQotICAgICAgICBleHBlY3RlZF9jaGVja3N1bSA9IE5vbmUKICAgICAgICAgaWYgcGl4ZWxf
dGVzdHM6Ci0gICAgICAgICAgICBleHBlY3RlZF9jaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0
ZWRfY2hlY2tzdW0ocGF0aCkKLSAgICAgICAgZHJ0X2lucHV0ID0gc2VsZi5pbnB1dF9saW5lKHRl
c3RfbmFtZSwgZXhwZWN0ZWRfY2hlY2tzdW0pCisgICAgICAgICAgICBpZiBub3QgZXhwZWN0ZWRf
Y2hlY2tzdW06CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0gPSBzZWxmLl9wb3J0
LmV4cGVjdGVkX2NoZWNrc3VtKHBhdGgpCisgICAgICAgIGlmIG5vdCBkcnRfaW5wdXQ6CisgICAg
ICAgICAgICBkcnRfaW5wdXQgPSBzZWxmLmlucHV0X2xpbmUodGVzdF9uYW1lLCBleHBlY3RlZF9j
aGVja3N1bSkKICAgICAgICAgdGV4dF9vdXRwdXQgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX3RleHQo
cGF0aCkKIAotICAgICAgICBpZiBwaXhlbF90ZXN0czoKLSAgICAgICAgICAgIGRydF9vdXRwdXQg
PSAoCi0gICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxuIgotICAgICAg
ICAgICAgICAgICIlcyNFT0ZcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAg
ICAgIkFjdHVhbEhhc2g6ICVzXG4iCi0gICAgICAgICAgICAgICAgIkV4cGVjdGVkSGFzaDogJXNc
biIKLSAgICAgICAgICAgICAgICAiI0VPRlxuIikgJSAodGV4dF9vdXRwdXQsIGV4cGVjdGVkX2No
ZWNrc3VtLCBleHBlY3RlZF9jaGVja3N1bSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRy
dF9vdXRwdXQgPSAoCi0gICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxu
IgotICAgICAgICAgICAgICAgICIlcyNFT0ZcbiIKLSAgICAgICAgICAgICAgICAiI0VPRlxuIikg
JSB0ZXh0X291dHB1dAorICAgICAgICBpZiBub3QgZHJ0X291dHB1dDoKKyAgICAgICAgICAgIGlm
IHBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgICAgIGRydF9vdXRwdXQgPSBbCisgICAgICAgICAg
ICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbiIsCisgICAgICAgICAgICAgICAg
ICAgIHRleHRfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAiI0VPRlxuIiwKKyAgICAgICAg
ICAgICAgICAgICAgIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgIkFjdHVhbEhhc2g6ICVzXG4i
ICUgZXhwZWN0ZWRfY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZEhhc2g6
ICVzXG4iICUgZXhwZWN0ZWRfY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgICIjRU9GXG4i
XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkcnRfb3V0cHV0ID0gWworICAg
ICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4iLAorICAgICAgICAg
ICAgICAgICAgICB0ZXh0X291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgIiNFT0ZcbiIsCisg
ICAgICAgICAgICAgICAgICAgICIjRU9GXG4iXQogCiAgICAgICAgIHJldHVybiAoZHJ0X2lucHV0
LCBkcnRfb3V0cHV0KQogCi0gICAgZGVmIGFzc2VydFRlc3Qoc2VsZiwgdGVzdF9uYW1lLCBwaXhl
bF90ZXN0cyk6Ci0gICAgICAgIGRydF9pbnB1dCwgZHJ0X291dHB1dCA9IHNlbGYubWFrZV9pbnB1
dF9vdXRwdXQodGVzdF9uYW1lLCBwaXhlbF90ZXN0cykKKyAgICBkZWYgYXNzZXJ0VGVzdChzZWxm
LCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzLCBleHBlY3RlZF9jaGVja3N1bT1Ob25lLCBkcnRfb3V0
cHV0PU5vbmUpOgorICAgICAgICBkcnRfaW5wdXQsIGRydF9vdXRwdXQgPSBzZWxmLm1ha2VfaW5w
dXRfb3V0cHV0KHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMsCisgICAgICAgICAgICBleHBlY3RlZF9j
aGVja3N1bSwgZHJ0X291dHB1dCkKICAgICAgICAgZXh0cmFfYXJncyA9IFtdCiAgICAgICAgIGlm
IHBpeGVsX3Rlc3RzOgogICAgICAgICAgICAgZXh0cmFfYXJncyA9IFsnLS1waXhlbC10ZXN0cydd
CiAgICAgICAgIGRydCwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLm1ha2VfZHJ0KGRydF9pbnB1dCwg
ZXh0cmFfYXJncykKICAgICAgICAgcmVzID0gZHJ0LnJ1bigpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocmVzLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgp
LCBkcnRfb3V0cHV0KQorCisgICAgICAgICMgV2UgdXNlIHRoZSBTdHJpbmdJTy5idWZsaXN0IGhl
cmUgaW5zdGVhZCBvZiBnZXR2YWx1ZSgpIGJlY2F1c2UKKyAgICAgICAgIyB0aGUgU3RyaW5nSU8g
bWlnaHQgYmUgYSBtaXggb2YgdW5pY29kZS9hc2NpaSBhbmQgOC1iaXQgc3RyaW5ncy4KKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuYnVmbGlzdCwgZHJ0X291dHB1dCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgJycpCisKKyAgICBkZWYgdGVzdF9t
YWluKHNlbGYpOgorICAgICAgICBzdGRpbiA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKKyAgICAg
ICAgc3Rkb3V0ID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQorICAgICAgICBzdGRlcnIgPSBuZXdz
dHJpbmdpby5TdHJpbmdJTygpCisgICAgICAgIHJlcyA9IG1vY2tfZHJ0Lm1haW4oWyctLXBsYXRm
b3JtJywgJ3Rlc3QnLCAnLSddLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2
YWx1ZSgpLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwg
JycpCiAKLSAgICBkZWYgdGVzdF9waXhlbHRlc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0
VGVzdCgnZmFzdC9odG1sL2tleWdlbi5odG1sJywgVHJ1ZSkKKyAgICBkZWYgdGVzdF9waXhlbHRl
c3RfcGFzc2VzKHNlbGYpOgorICAgICAgICAjIFRoaXMgYWxzbyB0ZXN0cyB0aGF0IHdlIGhhbmRs
ZSBIVFRQOiB0ZXN0IFVSTHMgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgnaHR0
cC90ZXN0cy9wYXNzZXMvdGV4dC5odG1sJywgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3BpeGVsdGVz
dF9fZmFpbHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgnZmFpbHVyZXMvZXhwZWN0
ZWQvY2hlY2tzdW0uaHRtbCcsIHBpeGVsX3Rlc3RzPVRydWUsCisgICAgICAgICAgICBleHBlY3Rl
ZF9jaGVja3N1bT0nd3JvbmctY2hlY2tzdW0nLAorICAgICAgICAgICAgZHJ0X291dHB1dD1bJ0Nv
bnRlbnQtVHlwZTogdGV4dC9wbGFpblxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnY2hl
Y2tzdW0tdHh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICcjRU9GXG4nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnQWN0dWFsSGFz
aDogY2hlY2tzdW0tY2hlY2tzdW1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICB1J0V4cGVj
dGVkSGFzaDogd3JvbmctY2hlY2tzdW1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAnQ29u
dGVudC1UeXBlOiBpbWFnZS9wbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVu
dC1MZW5ndGg6IDEzXG5cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAnY2hlY2tzdW1ceDhh
LXBuZycsCisgICAgICAgICAgICAgICAgICAgICAgICAnI0VPRlxuJ10pCiAKICAgICBkZWYgdGVz
dF90ZXh0b25seShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdmYXN0L2h0bWwvYXJ0
aWNsZS1lbGVtZW50Lmh0bWwnLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdwYXNz
ZXMvaW1hZ2UuaHRtbCcsIEZhbHNlKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5k
ZXggNWRmNWMyZC4uNTQyZTcyNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtNTEsOSArNTEsOSBAQCBjbGFzcyBUZXN0SW5zdGFu
Y2U6CiAgICAgICAgIHNlbGYua2V5Ym9hcmQgPSBGYWxzZQogICAgICAgICBzZWxmLmVycm9yID0g
JycKICAgICAgICAgc2VsZi50aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5hY3R1YWxfdGV4
dCA9IHNlbGYuYmFzZSArICctdHh0XG4nCi0gICAgICAgIHNlbGYuYWN0dWFsX2NoZWNrc3VtID0g
c2VsZi5iYXNlICsgJy1jaGVja3N1bVxuJwotICAgICAgICBzZWxmLmFjdHVhbF9pbWFnZSA9IHNl
bGYuYmFzZSArICctcG5nXG4nCisgICAgICAgIHNlbGYuYWN0dWFsX3RleHQgPSB1bmljb2RlKHNl
bGYuYmFzZSArICctdHh0JykKKyAgICAgICAgc2VsZi5hY3R1YWxfY2hlY2tzdW0gPSB1bmljb2Rl
KHNlbGYuYmFzZSArICctY2hlY2tzdW0nKQorICAgICAgICBzZWxmLmFjdHVhbF9pbWFnZSA9IHNl
bGYuYmFzZSArICdceDhhJyArICctcG5nJwogICAgICAgICBzZWxmLmV4cGVjdGVkX3RleHQgPSBz
ZWxmLmFjdHVhbF90ZXh0CiAgICAgICAgIHNlbGYuZXhwZWN0ZWRfY2hlY2tzdW0gPSBzZWxmLmFj
dHVhbF9jaGVja3N1bQogICAgICAgICBzZWxmLmV4cGVjdGVkX2ltYWdlID0gc2VsZi5hY3R1YWxf
aW1hZ2UKQEAgLTY4LDcgKzY4LDEwIEBAIGNsYXNzIFRlc3RMaXN0OgogICAgIGRlZiBhZGQoc2Vs
ZiwgbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICB0ZXN0ID0gVGVzdEluc3RhbmNlKG5hbWUpCiAg
ICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVtcygpOgotICAgICAgICAgICAgdGVz
dC5fX2RpY3RfX1trZXldID0gdmFsdWUKKyAgICAgICAgICAgIGlmICgndGV4dCcgaW4ga2V5IG9y
ICdjaGVja3N1bScgaW4ga2V5KSBhbmQgdmFsdWU6CisgICAgICAgICAgICAgICAgdGVzdC5fX2Rp
Y3RfX1trZXldID0gdW5pY29kZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgdGVzdC5fX2RpY3RfX1trZXldID0gdmFsdWUKICAgICAgICAgc2VsZi50ZXN0c1tuYW1l
XSA9IHRlc3QKIAogICAgIGRlZiBrZXlzKHNlbGYpOgpAQCAtMjEzLDYgKzIxNiwxMSBAQCBjbGFz
cyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncG9ydF9u
YW1lJywgJ3Rlc3QnKQogICAgICAgICBiYXNlLlBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3Mp
CiAKKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAgICAgICAjIFRoaXMgcm91dGlu
ZSBzaG91bGRuJ3Qgbm9ybWFsbHkgYmUgY2FsbGVkLCBidXQgaXQgaXMgY2FsbGVkIGJ5CisgICAg
ICAgICMgdGhlIG1vY2tfZHJ0IERyaXZlci4gV2UgcmV0dXJuIHNvbWV0aGluZywgYnV0IG1ha2Ug
c3VyZSBpdCdzIHVzZWxlc3MuCisgICAgICAgIHJldHVybiAnanVuaycKKwogICAgIGRlZiBiYXNl
bGluZV9wYXRoKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpLCAncGxhdGZvcm0nLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYubmFtZSgpICsgc2VsZi52ZXJzaW9uKCkpCkBAIC0yODcsNyAr
Mjk1LDcgQEAgY2xhc3MgVGVzdERyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0CiAKICAgICBkZWYgY21kX2xpbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBbJ05v
bmUnXQorICAgICAgICByZXR1cm4gW3NlbGYuX3BvcnQuX3BhdGhfdG9fZHJpdmVyKCldCiAKICAg
ICBkZWYgcG9sbChzZWxmKToKICAgICAgICAgcmV0dXJuIFRydWUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80387</attachid>
            <date>2011-01-27 17:45:47 -0800</date>
            <delta_ts>2011-01-28 09:50:57 -0800</delta_ts>
            <desc>put the encoding/decoding of utf-8 where it should be, in filesystem_mock and MockDRT()</desc>
            <filename>bug-53126-20110127174546.patch</filename>
            <type>text/plain</type>
            <size>25357</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi45NjI3ODVhYmJiZmY2YjMxNDAw
YTkxMDM1MTdiZjcxM2E1YzBjNTdmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDEtMjUgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFkZCBhICJtb2NrIERSVCIg
cG9ydCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgYSBzZXBhcmF0ZSBjbGFzcyB0aGF0IGVt
dWxhdGVzIHdoYXQgd2UgZXhwZWN0IHRoZQorICAgICAgICBEdW1wUmVuZGVyVHJlZSBiZWhhdmlv
ciB0byBiZS4KKworICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIHBvcnQvZHJ5
cnVuLnB5IGFuZCBhbGxvdyB1cyB0byBnZXQKKyAgICAgICAgYmV0dGVyIHRlc3QgY292ZXJhZ2Ug
b2YgdGhlIG5ldy1ydW4td2Via2l0LXRlc3RzIGNvZGUgYXMgd2VsbCBhcworICAgICAgICBhIHJl
ZmVyZW5jZSBmb3Igd2hhdCBuZXctcnVuLXdlYmtpdC10ZXN0cyBleHBlY3RzIGZyb20gRFJULgor
CisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IGF0dGVtcHQgYXQgdGhpcywgYW5kIGl0IGlzIHBy
ZXR0eSBiYXJlLWJvbmVkLiBJdAorICAgICAgICByZWFsbHkgb25seSBoYXMgYmVlbiB0ZXN0ZWQg
b24gdGhlICdtYWMnIHBvcnQgKGFuZCBhIGxpdHRsZSBvbgorICAgICAgICB0aGUgJ2Nocm9taXVt
LW1hYycgcG9ydC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTMxMjYKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9m
aWxlc3lzdGVtX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9kcnlydW4ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9mYWN0b3J5LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbW9ja19kcnQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKwogMjAxMS0wMS0y
NCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQppbmRleCAwMDA0OTQ0OTk0ZjRiNzM1NDc3NDNl
MGFkMTc4MDc1YWI5YzJlZDYwLi4wZTQwMDcyYTJhNTdkNTJhOTJkZGYxNzc0MDZlODg5OTExMTgw
ZjY2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXN5c3RlbV9tb2NrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlc3lzdGVtX21vY2sucHkKQEAgLTIxMyw3ICsyMTMsNyBAQCBjbGFzcyBNb2NrRmlsZVN5
c3RlbShvYmplY3QpOgogICAgICAgICByZXR1cm4gV3JpdGFibGVGaWxlT2JqZWN0KHNlbGYsIHBh
dGgsIGFwcGVuZCkKIAogICAgIGRlZiByZWFkX3RleHRfZmlsZShzZWxmLCBwYXRoKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYucmVhZF9iaW5hcnlfZmlsZShwYXRoKQorICAgICAgICByZXR1cm4gc2Vs
Zi5yZWFkX2JpbmFyeV9maWxlKHBhdGgpLmRlY29kZSgndXRmLTgnKQogCiAgICAgZGVmIHJlYWRf
YmluYXJ5X2ZpbGUoc2VsZiwgcGF0aCk6CiAgICAgICAgICMgSW50ZW50aW9uYWxseSByYWlzZXMg
S2V5RXJyb3IgaWYgd2UgZG9uJ3QgcmVjb2duaXplIHRoZSBwYXRoLgpAQCAtMjQxLDcgKzI0MSw3
IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIHJldHVybiAocGF0aFsw
OmlkeF0sIHBhdGhbaWR4Ol0pCiAKICAgICBkZWYgd3JpdGVfdGV4dF9maWxlKHNlbGYsIHBhdGgs
IGNvbnRlbnRzKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVfYmluYXJ5X2ZpbGUocGF0aCwg
Y29udGVudHMpCisgICAgICAgIHJldHVybiBzZWxmLndyaXRlX2JpbmFyeV9maWxlKHBhdGgsIGNv
bnRlbnRzLmVuY29kZSgndXRmLTgnKSkKIAogICAgIGRlZiB3cml0ZV9iaW5hcnlfZmlsZShzZWxm
LCBwYXRoLCBjb250ZW50cyk6CiAgICAgICAgIHNlbGYuZmlsZXNbcGF0aF0gPSBjb250ZW50cwpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnly
dW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5w
eQppbmRleCA0ZWQzNGU2NDg4ZWYyODQ3NTBjNjlmZDA1NGQwMzEwMGJlZWQ1YjZmLi4wMWRlYThl
NWJhMzJjMzRjMzU4YmI0YzY2ZmU5ZGM0ODdiMTg3YmU3IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQpAQCAtNzEsNiArNzEsMTIg
QEAgY2xhc3MgRHJ5UnVuUG9ydChvYmplY3QpOgogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBu
YW1lKToKICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQogCisg
ICAgZGVmIGFjcXVpcmVfaHR0cF9sb2NrKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
cmVsZWFzZV9odHRwX2xvY2soc2VsZik6CisgICAgICAgIHBhc3MKKwogICAgIGRlZiBjaGVja19i
dWlsZChzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CmluZGV4
IDY5MzU3NDQyYWViZTMxZTBhMTQ1ZDNjOWEzZTE1OTA3N2IxMDQ1NjAuLmM1MzBiNDY1NDNkNzBh
YTZlZTAwNWQ2ZDc0ZjU3YjNmNWMyNmViYTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKQEAgLTc2LDYgKzc2LDkgQEAgZGVm
IF9nZXRfa3dhcmdzKCoqa3dhcmdzKToKICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgo
J2RyeXJ1bicpOgogICAgICAgICBpbXBvcnQgZHJ5cnVuCiAgICAgICAgIG1ha2VyID0gZHJ5cnVu
LkRyeVJ1blBvcnQKKyAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ21vY2stJyk6Cisg
ICAgICAgIGltcG9ydCBtb2NrX2RydAorICAgICAgICBtYWtlciA9IG1vY2tfZHJ0Lk1vY2tEUlRQ
b3J0CiAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtYWMnKToKICAgICAgICAgaW1w
b3J0IG1hYwogICAgICAgICBtYWtlciA9IG1hYy5NYWNQb3J0CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YzE3OGNmZGMxMzg2ZDYzMjFlYjU3ZjhjNDFjMzNlNmZlZWY3MTYxCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpA
QCAtMCwwICsxLDIwMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgor
VGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UgdGhhdCBvdmVy
cmlkZXMgb3RoZXIKK3BvcnRzIGFuZCBjaGFuZ2VzIHRoZSBEcml2ZXIgYmluYXJ5IHRvICJNb2Nr
RFJUIi4KKyIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MK
K2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgYmFz
ZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQorCitfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgTW9ja0RSVFBvcnQob2Jq
ZWN0KToKKyAgICAiIiJNb2NrUG9ydCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZh
Y2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBwcmVm
aXggPSAnbW9jay0nCisgICAgICAgIGlmICdwb3J0X25hbWUnIGluIGt3YXJnczoKKyAgICAgICAg
ICAgIGt3YXJnc1sncG9ydF9uYW1lJ10gPSBrd2FyZ3NbJ3BvcnRfbmFtZSddW2xlbihwcmVmaXgp
Ol0KKyAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gZmFjdG9yeS5nZXQoKiprd2FyZ3MpCisKKyAg
ICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNl
bGYuX19kZWxlZ2F0ZSwgbmFtZSkKKworICAgIGRlZiBhY3F1aXJlX2h0dHBfbG9jayhzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIHJlbGVhc2VfaHR0cF9sb2NrKHNlbGYpOgorICAgICAg
ICBwYXNzCisKKyAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6
CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZHJpdmVyX2NtZF9saW5lKHNlbGYpOgor
ICAgICAgICBkcml2ZXIgPSBzZWxmLmNyZWF0ZV9kcml2ZXIoMCkKKyAgICAgICAgcmV0dXJuIGRy
aXZlci5jbWRfbGluZSgpCisKKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAgICAg
ICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQorCisgICAgZGVmIGNyZWF0ZV9kcml2
ZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUgYSBk
cml2ZXIgb2JqZWN0IGFzIHRoZSBkZWxlZ2F0ZSB3b3VsZCwgYnV0CisgICAgICAgICMgb3Zlcndy
aXRlIHRoZSBwYXRoIHRvIHRoZSBkcml2ZXIgYmluYXJ5IGluIGl0cyBjb21tYW5kIGxpbmUuIFdl
IGRvCisgICAgICAgICMgdGhpcyBieSBhY3R1YWxseSBvdmVyd3JpdGluZyBpdHMgY21kX2xpbmUo
KSBtZXRob2Qgd2l0aCBhIHByb3h5CisgICAgICAgICMgbWV0aG9kIHRoYXQgc3BsaWNlcyBpbiB0
aGUgbW9ja19kcnQgcGF0aCBhbmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworICAgICAgICAjIGlu
IHBsYWNlIG9mIHRoZSBhY3R1YWwgcGF0aCB0byB0aGUgZHJpdmVyIGJpbmFyeS4KKworICAgICAg
ICAjIEZJWE1FOiBUaGlzIGRvZXNuJ3QgeWV0IHdvcmsgZm9yIENocm9taXVtIHRlc3Rfc2hlbGwg
cG9ydHMuCisgICAgICAgIGRlZiBvdmVycmlkaW5nX2NtZF9saW5lKCk6CisgICAgICAgICAgICBj
bWQgPSBzZWxmLl9fb3JpZ2luYWxfZHJpdmVyX2NtZF9saW5lKCkKKyAgICAgICAgICAgIGluZGV4
ID0gY21kLmluZGV4KHNlbGYuX19kZWxlZ2F0ZS5fcGF0aF90b19kcml2ZXIoKSkKKyAgICAgICAg
ICAgIGNtZFtpbmRleDppbmRleCArIDFdID0gW3N5cy5leGVjdXRhYmxlLCBzZWxmLl9wYXRoX3Rv
X2RyaXZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcGxhdGZv
cm0nLCBzZWxmLm5hbWUoKV0KKyAgICAgICAgICAgIHJldHVybiBjbWQKKworICAgICAgICBkZWxl
Z2F0ZWRfZHJpdmVyID0gc2VsZi5fX2RlbGVnYXRlLmNyZWF0ZV9kcml2ZXIod29ya2VyX251bWJl
cikKKyAgICAgICAgc2VsZi5fX29yaWdpbmFsX2RyaXZlcl9jbWRfbGluZSA9IGRlbGVnYXRlZF9k
cml2ZXIuY21kX2xpbmUKKyAgICAgICAgZGVsZWdhdGVkX2RyaXZlci5jbWRfbGluZSA9IG92ZXJy
aWRpbmdfY21kX2xpbmUKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlZF9kcml2ZXIKKworICAgIGRl
ZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF9odHRw
X3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9z
ZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBh
c3MKKworCitkZWYgbWFpbihhcmd2LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICIiIlJ1
biB0aGUgdGVzdHMuIiIiCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2Vfb3B0aW9ucyhhcmd2
KQorICAgIGRydCA9IE1vY2tEUlQob3B0aW9ucywgYXJncywgc3RkaW4sIHN0ZG91dCwgc3RkZXJy
KQorICAgIHJldHVybiBkcnQucnVuKCkKKworCitkZWYgcGFyc2Vfb3B0aW9ucyhhcmd2KToKKyAg
ICAjIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGhhbmRsZSB2YXJpYW50cyB0
aGF0IGhhdmUKKyAgICAjIGRpZmZlcmVudCBjb21tYW5kLWxpbmUgY29udmVudGlvbnMuCisgICAg
b3B0aW9uX2xpc3QgPSBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXBsYXRmb3Jt
JywgYWN0aW9uPSdzdG9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Bs
YXRmb3JtIHRvIGVtdWxhdGUnKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tbGF5
b3V0LXRlc3RzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdD1UcnVlLCBoZWxwPSdydW4gbGF5b3V0IHRlc3RzJyksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXBpeGVsLXRlc3RzJywgYWN0aW9uPSdzdG9yZV90cnVlJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nb3V0cHV0IGltYWdlIGZvciBwaXhlbCB0ZXN0cycpLAor
ICAgIF0KKyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9s
aXN0PW9wdGlvbl9saXN0KQorICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJn
dikKKworCitjbGFzcyBNb2NrRFJUKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuX3N0
ZG91dCA9IHN0ZG91dAorICAgICAgICBzZWxmLl9zdGRpbiA9IHN0ZGluCisgICAgICAgIHNlbGYu
X3N0ZGVyciA9IHN0ZGVycgorCisgICAgICAgIHBvcnRfbmFtZSA9IE5vbmUKKyAgICAgICAgaWYg
b3B0aW9ucy5wbGF0Zm9ybToKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9IG9wdGlvbnMucGxhdGZv
cm0KKyAgICAgICAgc2VsZi5fcG9ydCA9IGZhY3RvcnkuZ2V0KHBvcnRfbmFtZSwgb3B0aW9ucz1v
cHRpb25zKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgIGxpbmUgPSBzZWxmLl9zdGRpbi5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3Qg
bGluZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB1cmwsIGV4cGVjdGVk
X2NoZWNrc3VtID0gc2VsZi5wYXJzZV9pbnB1dChsaW5lKQorICAgICAgICAgICAgc2VsZi5ydW5f
b25lX3Rlc3QodXJsLCBleHBlY3RlZF9jaGVja3N1bSkKKyAgICAgICAgcmV0dXJuIDAKKworICAg
IGRlZiBwYXJzZV9pbnB1dChzZWxmLCBsaW5lKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAo
KQorICAgICAgICBpZiAiJyIgaW4gbGluZToKKyAgICAgICAgICAgIHJldHVybiBsaW5lLnNwbGl0
KCInIiwgMSkKKyAgICAgICAgcmV0dXJuIChsaW5lLCBOb25lKQorCisgICAgZGVmIHJ1bl9vbmVf
dGVzdChzZWxmLCB1cmwsIGV4cGVjdGVkX2NoZWNrc3VtKToKKyAgICAgICAgcG9ydCA9IHNlbGYu
X3BvcnQKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoJ2h0dHAnKToKKyAgICAgICAgICAgIHRl
c3RfbmFtZSA9IHBvcnQudXJpX3RvX3Rlc3RfbmFtZSh1cmwpCisgICAgICAgICAgICB0ZXN0X3Bh
dGggPSBwb3J0Ll9maWxlc3lzdGVtLmpvaW4ocG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3Rf
bmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RfcGF0aCA9IHVybAorCisgICAg
ICAgIGFjdHVhbF90ZXh0ID0gcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfcGF0aCkuZW5jb2RlKCd1
dGYtOCcpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIGV4cGVjdGVk
X2NoZWNrc3VtOgorICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gcG9ydC5leHBlY3RlZF9j
aGVja3N1bSh0ZXN0X3BhdGgpLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgYWN0dWFsX2lt
YWdlID0gcG9ydC5leHBlY3RlZF9pbWFnZSh0ZXN0X3BhdGgpCisKKyAgICAgICAgc2VsZi5fc3Rk
b3V0LndyaXRlKCdDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbicpCisgICAgICAgIHNlbGYuX3N0
ZG91dC53cml0ZShhY3R1YWxfdGV4dCkKKyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCcjRU9G
XG4nKQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIGV4cGVjdGVk
X2NoZWNrc3VtOgorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdcbicpCisgICAgICAg
ICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0FjdHVhbEhhc2g6ICVzXG4nICUgYWN0dWFsX2NoZWNr
c3VtKQorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdFeHBlY3RlZEhhc2g6ICVzXG4n
ICUgZXhwZWN0ZWRfY2hlY2tzdW0uZW5jb2RlKCd1dGY4JykpCisgICAgICAgICAgICBpZiBhY3R1
YWxfY2hlY2tzdW0gIT0gZXhwZWN0ZWRfY2hlY2tzdW06CisgICAgICAgICAgICAgICAgc2VsZi5f
c3Rkb3V0LndyaXRlKCdDb250ZW50LVR5cGU6IGltYWdlL3BuZ1xuJykKKyAgICAgICAgICAgICAg
ICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtTGVuZ3RoOiAlc1xuXG4nICUgbGVuKGFjdHVh
bF9pbWFnZSkpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGFjdHVhbF9pbWFn
ZSkKKyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCcjRU9GXG4nKQorICAgICAgICBzZWxmLl9z
dGRvdXQuZmx1c2goKQorICAgICAgICBzZWxmLl9zdGRlcnIuZmx1c2goKQorCisKK2lmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5z
dGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZTg5MjY0NmQyYzJiNWIwZDc3ZjM3ZjJmOWM3YjBiZDZmZjViNTUzCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9t
b2NrX2RydF91bml0dGVzdC5weQpAQCAtMCwwICsxLDE5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgTW9ja0RSVC4iIiIKKwor
aW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBuZXdzdHJpbmdp
bworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBtb2NrX2RydAorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQorZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIE1vY2tE
UlRQb3J0VGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6CisgICAgZGVmIG1ha2VfcG9y
dChzZWxmKToKKyAgICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KCkKKworICAgIGRl
ZiB0ZXN0X3BvcnRfbmFtZV9pbl9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KHBvcnRfbmFtZT0nbW9jay10ZXN0JykpCisKKyAg
ICBkZWYgdGVzdF9hY3F1aXJlX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgIyBPbmx5IGNoZWNr
aW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5tYWtlX3BvcnQo
KS5hY3F1aXJlX2h0dHBfbG9jaygpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX2h0dHBfbG9jayhz
ZWxmKToKKyAgICAgICAgIyBPbmx5IGNoZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNl
ZC4KKyAgICAgICAgc2VsZi5tYWtlX3BvcnQoKS5yZWxlYXNlX2h0dHBfbG9jaygpCisKKyAgICBk
ZWYgdGVzdF9jaGVja19idWlsZChzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuY2hlY2tfYnVpbGQoVHJ1ZSkpCisKKyAg
ICBkZWYgdGVzdF9jaGVja19zeXNfZGVwcyhzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuY2hlY2tfc3lzX2RlcHMoVHJ1
ZSkpCisKKyAgICBkZWYgdGVzdF9zdGFydF9oZWxwZXIoc2VsZik6CisgICAgICAgICMgT25seSBj
aGVja2luZyB0aGF0IG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICAgICAgIHNlbGYubWFrZV9w
b3J0KCkuc3RhcnRfaGVscGVyKCkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2h0dHBfc2VydmVyKHNl
bGYpOgorICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2Vk
LgorICAgICAgICBzZWxmLm1ha2VfcG9ydCgpLnN0YXJ0X2h0dHBfc2VydmVyKCkKKworICAgIGRl
ZiB0ZXN0X3N0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgICMgT25seSBjaGVj
a2luZyB0aGF0IG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICAgICAgIHNlbGYubWFrZV9wb3J0
KCkuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCisKKyAgICBkZWYgdGVzdF9zdG9wX2hlbHBlcihz
ZWxmKToKKyAgICAgICAgIyBPbmx5IGNoZWNraW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNl
ZC4KKyAgICAgICAgc2VsZi5tYWtlX3BvcnQoKS5zdG9wX2hlbHBlcigpCisKKyAgICBkZWYgdGVz
dF9zdG9wX2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBu
byBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICBzZWxmLm1ha2VfcG9ydCgpLnN0b3BfaHR0
cF9zZXJ2ZXIoKQorCisgICAgZGVmIHRlc3Rfc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgor
ICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAg
ICAgICBzZWxmLm1ha2VfcG9ydCgpLnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisKKworY2xhc3Mg
TW9ja0RSVFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAg
ICAgICAgc2VsZi5fcG9ydCA9IGZhY3RvcnkuZ2V0KCd0ZXN0JykKKyAgICAgICAgc2VsZi5fbGF5
b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCisKKyAgICBkZWYg
dG9fcGF0aChzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZmls
ZXN5c3RlbS5qb2luKHNlbGYuX2xheW91dF90ZXN0c19kaXIsIHRlc3RfbmFtZSkKKworICAgIGRl
ZiBpbnB1dF9saW5lKHNlbGYsIHRlc3RfbmFtZSwgY2hlY2tzdW09Tm9uZSk6CisgICAgICAgIHVy
bCA9IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKHNlbGYudG9fcGF0aCh0ZXN0X25hbWUpKQor
ICAgICAgICBpZiB1cmwuc3RhcnRzd2l0aCgnZmlsZTovLy8nKToKKyAgICAgICAgICAgIHVybCA9
IHVybFtsZW4oJ2ZpbGU6Ly8vJykgLSAxOl0KKworICAgICAgICBpZiBjaGVja3N1bToKKyAgICAg
ICAgICAgIHJldHVybiB1cmwgKyAiJyIgKyBjaGVja3N1bSArICdcbicKKyAgICAgICAgcmV0dXJu
IHVybCArICdcbicKKworICAgIGRlZiBtYWtlX2RydChzZWxmLCBpbnB1dF9zdHJpbmcsIGV4dHJh
X2FyZ3M9Tm9uZSk6CisgICAgICAgIGFyZ3MgPSBbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctJ10K
KyAgICAgICAgZXh0cmFfYXJncyA9IGV4dHJhX2FyZ3Mgb3IgW10KKyAgICAgICAgYXJncyArPSBl
eHRyYV9hcmdzCisgICAgICAgIHN0ZGluID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oaW5wdXRfc3Ry
aW5nKQorICAgICAgICBzdGRvdXQgPSBuZXdzdHJpbmdpby5TdHJpbmdJTygpCisgICAgICAgIHN0
ZGVyciA9IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IG1v
Y2tfZHJ0LnBhcnNlX29wdGlvbnMoYXJncykKKyAgICAgICAgZHJ0ID0gbW9ja19kcnQuTW9ja0RS
VChvcHRpb25zLCBhcmdzLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHJldHVybiAo
ZHJ0LCBzdGRvdXQsIHN0ZGVycikKKworICAgIGRlZiBtYWtlX2lucHV0X291dHB1dChzZWxmLCB0
ZXN0X25hbWUsIHBpeGVsX3Rlc3RzLCBleHBlY3RlZF9jaGVja3N1bSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJ0X291dHB1dCwgZHJ0X2lucHV0PU5vbmUpOgorICAgICAgICBwYXRoID0g
c2VsZi50b19wYXRoKHRlc3RfbmFtZSkKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAg
ICAgICBpZiBub3QgZXhwZWN0ZWRfY2hlY2tzdW06CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
Y2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHBhdGgpCisgICAgICAgIGlm
IG5vdCBkcnRfaW5wdXQ6CisgICAgICAgICAgICBkcnRfaW5wdXQgPSBzZWxmLmlucHV0X2xpbmUo
dGVzdF9uYW1lLCBleHBlY3RlZF9jaGVja3N1bSkKKyAgICAgICAgdGV4dF9vdXRwdXQgPSBzZWxm
Ll9wb3J0LmV4cGVjdGVkX3RleHQocGF0aCkKKworICAgICAgICBpZiBub3QgZHJ0X291dHB1dDoK
KyAgICAgICAgICAgIGlmIHBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgICAgIGRydF9vdXRwdXQg
PSBbCisgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbicsCisg
ICAgICAgICAgICAgICAgICAgIHRleHRfb3V0cHV0LmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAg
ICAgICAgICAgICAgJyNFT0ZcbicsCisgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAg
ICAgICAgICAgICAgICdBY3R1YWxIYXNoOiAlc1xuJyAlIGV4cGVjdGVkX2NoZWNrc3VtLmVuY29k
ZSgndXRmLTgnKSwKKyAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkSGFzaDogJXNcbicgJSBl
eHBlY3RlZF9jaGVja3N1bS5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICAgICAgICAgICcj
RU9GXG4nXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkcnRfb3V0cHV0ID0g
WworICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4nLAorICAg
ICAgICAgICAgICAgICAgICB0ZXh0X291dHB1dC5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAg
ICAgICAgICAgICcjRU9GXG4nLAorICAgICAgICAgICAgICAgICAgICAnI0VPRlxuJ10KKworICAg
ICAgICByZXR1cm4gKGRydF9pbnB1dCwgZHJ0X291dHB1dCkKKworICAgIGRlZiBhc3NlcnRUZXN0
KHNlbGYsIHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMsIGV4cGVjdGVkX2NoZWNrc3VtPU5vbmUsIGRy
dF9vdXRwdXQ9Tm9uZSk6CisgICAgICAgIGRydF9pbnB1dCwgZHJ0X291dHB1dCA9IHNlbGYubWFr
ZV9pbnB1dF9vdXRwdXQodGVzdF9uYW1lLCBwaXhlbF90ZXN0cywKKyAgICAgICAgICAgIGV4cGVj
dGVkX2NoZWNrc3VtLCBkcnRfb3V0cHV0KQorICAgICAgICBleHRyYV9hcmdzID0gW10KKyAgICAg
ICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBleHRyYV9hcmdzID0gWyctLXBpeGVsLXRl
c3RzJ10KKyAgICAgICAgZHJ0LCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYubWFrZV9kcnQoZHJ0X2lu
cHV0LCBleHRyYV9hcmdzKQorICAgICAgICByZXMgPSBkcnQucnVuKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChyZXMsIDApCisKKyAgICAgICAgIyBXZSB1c2UgdGhlIFN0cmluZ0lPLmJ1Zmxp
c3QgaGVyZSBpbnN0ZWFkIG9mIGdldHZhbHVlKCkgYmVjYXVzZQorICAgICAgICAjIHRoZSBTdHJp
bmdJTyBtaWdodCBiZSBhIG1peCBvZiB1bmljb2RlL2FzY2lpIGFuZCA4LWJpdCBzdHJpbmdzLgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5idWZsaXN0LCBkcnRfb3V0cHV0KQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyci5nZXR2YWx1ZSgpLCAnJykKKworICAgIGRlZiB0
ZXN0X21haW4oc2VsZik6CisgICAgICAgIHN0ZGluID0gbmV3c3RyaW5naW8uU3RyaW5nSU8oKQor
ICAgICAgICBzdGRvdXQgPSBuZXdzdHJpbmdpby5TdHJpbmdJTygpCisgICAgICAgIHN0ZGVyciA9
IG5ld3N0cmluZ2lvLlN0cmluZ0lPKCkKKyAgICAgICAgcmVzID0gbW9ja19kcnQubWFpbihbJy0t
cGxhdGZvcm0nLCAndGVzdCcsICctJ10sIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0
LmdldHZhbHVlKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyci5nZXR2YWx1
ZSgpLCAnJykKKworICAgIGRlZiB0ZXN0X3BpeGVsdGVzdF9wYXNzZXMoc2VsZik6CisgICAgICAg
ICMgVGhpcyBhbHNvIHRlc3RzIHRoYXQgd2UgaGFuZGxlIEhUVFA6IHRlc3QgVVJMcyBwcm9wZXJs
eS4KKyAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdodHRwL3Rlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwn
LCBUcnVlKQorCisgICAgZGVmIHRlc3RfcGl4ZWx0ZXN0X19mYWlscyhzZWxmKToKKyAgICAgICAg
c2VsZi5hc3NlcnRUZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9jaGVja3N1bS5odG1sJywgcGl4ZWxf
dGVzdHM9VHJ1ZSwKKyAgICAgICAgICAgIGV4cGVjdGVkX2NoZWNrc3VtPSd3cm9uZy1jaGVja3N1
bScsCisgICAgICAgICAgICBkcnRfb3V0cHV0PVsnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4n
LAorICAgICAgICAgICAgICAgICAgICAgICAgJ2NoZWNrc3VtLXR4dCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAnI0VPRlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAnQWN0dWFsSGFzaDogY2hlY2tzdW0tY2hlY2tzdW1cbicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWRIYXNoOiB3cm9uZy1jaGVja3N1bVxuJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGU6IGltYWdlL3BuZ1xuJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogMTNcblxuJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICdjaGVja3N1bVx4OGEtcG5nJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICcjRU9GXG4nXSkKKworICAgIGRlZiB0ZXN0X3RleHRvbmx5KHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydFRlc3QoJ3Bhc3Nlcy9pbWFnZS5odG1sJywgRmFsc2UpCisKKworaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCA1ZGY1YzJkOWQ2MjE5
YmY5NDY5NDk2ZjI1NzRlNjNjMTgxMTJhZGU0Li41NzY2OGU1YTkxMzY1N2Y0OWY5Mzk4ZTI5Nzdm
OGQ2MjgyYmViYmFhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC90ZXN0LnB5CkBAIC01MSw5ICs1MSwxNyBAQCBjbGFzcyBUZXN0SW5zdGFuY2U6CiAg
ICAgICAgIHNlbGYua2V5Ym9hcmQgPSBGYWxzZQogICAgICAgICBzZWxmLmVycm9yID0gJycKICAg
ICAgICAgc2VsZi50aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5hY3R1YWxfdGV4dCA9IHNl
bGYuYmFzZSArICctdHh0XG4nCi0gICAgICAgIHNlbGYuYWN0dWFsX2NoZWNrc3VtID0gc2VsZi5i
YXNlICsgJy1jaGVja3N1bVxuJwotICAgICAgICBzZWxmLmFjdHVhbF9pbWFnZSA9IHNlbGYuYmFz
ZSArICctcG5nXG4nCisKKyAgICAgICAgIyBUaGUgdmFsdWVzIG9mIGVhY2ggZmllbGQgYXJlIHRy
ZWF0ZWQgYXMgcmF3IGJ5dGUgc3RyaW5ncy4gVGhleQorICAgICAgICAjIHdpbGwgYmUgY29udmVy
dGVkIHRvIHVuaWNvZGUgc3RyaW5ncyB3aGVyZSBhcHByb3ByaWF0ZSB1c2luZworICAgICAgICAj
IE1vY2tGaWxlU3lzdGVtLnJlYWRfdGV4dF9maWxlKCkuCisgICAgICAgIHNlbGYuYWN0dWFsX3Rl
eHQgPSBzZWxmLmJhc2UgKyAnLXR4dCcKKyAgICAgICAgc2VsZi5hY3R1YWxfY2hlY2tzdW0gPSBz
ZWxmLmJhc2UgKyAnLWNoZWNrc3VtJworCisgICAgICAgICMgV2UgYWRkIHRoZSAnXHg4YScgZm9y
IHRoZSBpbWFnZSBmaWxlIHRvIHByZXZlbnQgdGhlIHZhbHVlIGZyb20KKyAgICAgICAgIyBiZWlu
ZyB0cmVhdGVkIGFzIFVURi04ICh0aGUgY2hhcmFjdGVyIGlzIGludmFsaWQpCisgICAgICAgIHNl
bGYuYWN0dWFsX2ltYWdlID0gc2VsZi5iYXNlICsgJ1x4OGEnICsgJy1wbmcnCisKICAgICAgICAg
c2VsZi5leHBlY3RlZF90ZXh0ID0gc2VsZi5hY3R1YWxfdGV4dAogICAgICAgICBzZWxmLmV4cGVj
dGVkX2NoZWNrc3VtID0gc2VsZi5hY3R1YWxfY2hlY2tzdW0KICAgICAgICAgc2VsZi5leHBlY3Rl
ZF9pbWFnZSA9IHNlbGYuYWN0dWFsX2ltYWdlCkBAIC04NCw1MyArOTIsNDQgQEAgY2xhc3MgVGVz
dExpc3Q6CiBkZWYgdW5pdF90ZXN0X2xpc3QoKToKICAgICB0ZXN0cyA9IFRlc3RMaXN0KCkKICAg
ICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2NoZWNrc3VtLmh0bWwnLAotICAgICAgICAg
ICAgICAgIGFjdHVhbF9jaGVja3N1bT0nY2hlY2tzdW1fZmFpbC1jaGVja3N1bScpCisgICAgICAg
ICAgICAgIGFjdHVhbF9jaGVja3N1bT0nY2hlY2tzdW1fZmFpbC1jaGVja3N1bScpCiAgICAgdGVz
dHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9jcmFzaC5odG1sJywgY3Jhc2g9VHJ1ZSkKICAgICB0
ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sJywgZXhjZXB0aW9uPVRy
dWUpCiAgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwnLCB0aW1l
b3V0PVRydWUpCiAgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9oYW5nLmh0bWwnLCBo
YW5nPVRydWUpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQu
aHRtbCcsCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dD1Ob25lKQorICAgIHRlc3RzLmFk
ZCgnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ190ZXh0Lmh0bWwnLCBleHBlY3RlZF90ZXh0PU5v
bmUpCiAgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sJywKLSAgICAg
ICAgICAgICAgICBhY3R1YWxfaW1hZ2U9J2ltYWdlX2ZhaWwtcG5nJywKLSAgICAgICAgICAgICAg
ICBleHBlY3RlZF9pbWFnZT0naW1hZ2UtcG5nJykKKyAgICAgICAgICAgICAgYWN0dWFsX2ltYWdl
PSdpbWFnZV9mYWlsLXBuZycsCisgICAgICAgICAgICAgIGV4cGVjdGVkX2ltYWdlPSdpbWFnZS1w
bmcnKQogICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0uaHRt
bCcsCi0gICAgICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtPSdpbWFnZV9jaGVja3N1bV9mYWls
LWNoZWNrc3VtJywKLSAgICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2U9J2ltYWdlX2NoZWNrc3Vt
X2ZhaWwtcG5nJykKLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0
bWwnLAotICAgICAgICAgICAgICAgIGtleWJvYXJkPVRydWUpCi0gICAgdGVzdHMuYWRkKCdmYWls
dXJlcy9leHBlY3RlZC9taXNzaW5nX2NoZWNrLmh0bWwnLAotICAgICAgICAgICAgICAgIGV4cGVj
dGVkX2NoZWNrc3VtPU5vbmUpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9taXNz
aW5nX2ltYWdlLmh0bWwnLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ltYWdlPU5vbmUpCi0g
ICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCcsCi0gICAg
ICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dD1Ob25lKQorICAgICAgICAgICAgICBhY3R1YWxfY2hl
Y2tzdW09J2ltYWdlX2NoZWNrc3VtX2ZhaWwtY2hlY2tzdW0nLAorICAgICAgICAgICAgICBhY3R1
YWxfaW1hZ2U9J2ltYWdlX2NoZWNrc3VtX2ZhaWwtcG5nJykKKyAgICB0ZXN0cy5hZGQoJ2ZhaWx1
cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwnLCBrZXlib2FyZD1UcnVlKQorICAgIHRlc3RzLmFk
ZCgnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19jaGVjay5odG1sJywgZXhwZWN0ZWRfY2hlY2tz
dW09Tm9uZSkKKyAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2Uu
aHRtbCcsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCisgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBl
Y3RlZC9taXNzaW5nX3RleHQuaHRtbCcsIGV4cGVjdGVkX3RleHQ9Tm9uZSkKICAgICB0ZXN0cy5h
ZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL25ld2xpbmVzX2xlYWRpbmcuaHRtbCcsCi0gICAgICAgICAg
ICAgICAgZXhwZWN0ZWRfdGV4dD0iXG5mb29cbiIsCi0gICAgICAgICAgICAgICAgYWN0dWFsX3Rl
eHQ9ImZvb1xuIikKKyAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dD0iXG5mb29cbiIsIGFjdHVh
bF90ZXh0PSJmb29cbiIpCiAgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9uZXdsaW5l
c190cmFpbGluZy5odG1sJywKLSAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0PSJmb29cblxu
IiwKLSAgICAgICAgICAgICAgICBhY3R1YWxfdGV4dD0iZm9vXG4iKQorICAgICAgICAgICAgICBl
eHBlY3RlZF90ZXh0PSJmb29cblxuIiwgYWN0dWFsX3RleHQ9ImZvb1xuIikKICAgICB0ZXN0cy5h
ZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL25ld2xpbmVzX3dpdGhfZXhjZXNzX0NSLmh0bWwnLAotICAg
ICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQ9ImZvb1xyXHJcclxuIiwKLSAgICAgICAgICAgICAg
ICBhY3R1YWxfdGV4dD0iZm9vXG4iKQotICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQv
dGV4dC5odG1sJywKLSAgICAgICAgICAgICAgICBhY3R1YWxfdGV4dD0ndGV4dF9mYWlsLXBuZycp
CisgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQ9ImZvb1xyXHJcclxuIiwgYWN0dWFsX3RleHQ9
ImZvb1xuIikKKyAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsIGFj
dHVhbF90ZXh0PSd0ZXh0X2ZhaWwtcG5nJykKICAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL3VuZXhw
ZWN0ZWQvY3Jhc2guaHRtbCcsIGNyYXNoPVRydWUpCiAgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy91
bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tzdW0uaHRtbCcsCi0gICAgICAgICAgICAgICAgYWN0
dWFsX3RleHQ9J3RleHQtaW1hZ2UtY2hlY2tzdW1fZmFpbC10eHQnLAotICAgICAgICAgICAgICAg
IGFjdHVhbF9jaGVja3N1bT0ndGV4dC1pbWFnZS1jaGVja3N1bV9mYWlsLWNoZWNrc3VtJykKKyAg
ICAgICAgICAgICAgYWN0dWFsX3RleHQ9J3RleHQtaW1hZ2UtY2hlY2tzdW1fZmFpbC10eHQnLAor
ICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW09J3RleHQtaW1hZ2UtY2hlY2tzdW1fZmFpbC1j
aGVja3N1bScpCiAgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy91bmV4cGVjdGVkL3RpbWVvdXQuaHRt
bCcsIHRpbWVvdXQ9VHJ1ZSkKICAgICB0ZXN0cy5hZGQoJ2h0dHAvdGVzdHMvcGFzc2VzL3RleHQu
aHRtbCcpCiAgICAgdGVzdHMuYWRkKCdodHRwL3Rlc3RzL3NzbC90ZXh0Lmh0bWwnKQogICAgIHRl
c3RzLmFkZCgncGFzc2VzL2Vycm9yLmh0bWwnLCBlcnJvcj0nc3R1ZmYgZ29pbmcgdG8gc3RkZXJy
JykKICAgICB0ZXN0cy5hZGQoJ3Bhc3Nlcy9pbWFnZS5odG1sJykKICAgICB0ZXN0cy5hZGQoJ3Bh
c3Nlcy9wbGF0Zm9ybV9pbWFnZS5odG1sJykKKwogICAgICMgVGV4dCBvdXRwdXQgZmlsZXMgY29u
dGFpbiAiXHJcbiIgb24gV2luZG93cy4gIFRoaXMgbWF5IGJlCiAgICAgIyBoZWxwZnVsbHkgZmls
dGVyZWQgdG8gIlxyXHJcbiIgYnkgb3VyIFB5dGhvbi9DeWd3aW4gdG9vbGluZy4KICAgICB0ZXN0
cy5hZGQoJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQ9
J1xuZm9vXG5cbicsCi0gICAgICAgICAgICAgICAgYWN0dWFsX3RleHQ9J1xuZm9vXHJcblxyXHJc
bicpCisgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQ9J1xuZm9vXG5cbicsIGFjdHVhbF90ZXh0
PSdcbmZvb1xyXG5cclxyXG4nKQogICAgIHRlc3RzLmFkZCgnd2Vic29ja2V0L3Rlc3RzL3Bhc3Nl
cy90ZXh0Lmh0bWwnKQogICAgIHJldHVybiB0ZXN0cwogCkBAIC0yMTMsNiArMjEyLDExIEBAIGNs
YXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdwb3J0
X25hbWUnLCAndGVzdCcpCiAgICAgICAgIGJhc2UuUG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJn
cykKIAorICAgIGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6CisgICAgICAgICMgVGhpcyByb3V0
aW5lIHNob3VsZG4ndCBub3JtYWxseSBiZSBjYWxsZWQsIGJ1dCBpdCBpcyBjYWxsZWQgYnkKKyAg
ICAgICAgIyB0aGUgbW9ja19kcnQgRHJpdmVyLiBXZSByZXR1cm4gc29tZXRoaW5nLCBidXQgbWFr
ZSBzdXJlIGl0J3MgdXNlbGVzcy4KKyAgICAgICAgcmV0dXJuICdqdW5rJworCiAgICAgZGVmIGJh
c2VsaW5lX3BhdGgoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
c2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdwbGF0Zm9ybScsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lKCkgKyBzZWxmLnZlcnNpb24oKSkKQEAgLTIyNyw3
ICsyMzEsNyBAQCBjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgICAgICAg
IGRpZmZfZmlsZW5hbWU9Tm9uZSk6CiAgICAgICAgIGRpZmZlZCA9IGFjdHVhbF9jb250ZW50cyAh
PSBleHBlY3RlZF9jb250ZW50cwogICAgICAgICBpZiBkaWZmZWQgYW5kIGRpZmZfZmlsZW5hbWU6
Ci0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShkaWZmX2ZpbGVu
YW1lLAorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShkaWZm
X2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICI8ICVzXG4tLS1cbj4gJXNcbiIgJSAoZXhwZWN0
ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cykpCiAgICAgICAgIHJldHVybiBkaWZmZWQKIApA
QCAtMjg3LDcgKzI5MSw3IEBAIGNsYXNzIFRlc3REcml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAogCiAgICAgZGVmIGNtZF9saW5lKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gWydOb25lJ10KKyAgICAgICAgcmV0dXJuIFtzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZl
cigpXQogCiAgICAgZGVmIHBvbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBUcnVlCg==
</data>
<flag name="review"
          id="71866"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>