<?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>77170</bug_id>
          
          <creation_ts>2012-01-26 18:27:45 -0800</creation_ts>
          <short_desc>nrwt: fix the dryrun and mock ports to work w/ DriverProxy, reftests</short_desc>
          <delta_ts>2012-01-31 17:41:46 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>543717</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-26 18:27:45 -0800</bug_when>
    <thetext>nrwt: fix the dryrun and mock ports to work w/ DriverProxy, reftests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543737</commentid>
    <comment_count>1</comment_count>
      <attachid>124237</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-26 19:22:36 -0800</bug_when>
    <thetext>Created attachment 124237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543740</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-26 19:27:51 -0800</bug_when>
    <thetext>The code in MockDRT port to override the command line is particularly ugly. I am open to suggestions for improving it.

I hope to land a bunch of changes to test-webkitpy soon that will allow this code to be exercised reliably on the bots, at which point we&apos;ll be able to get much better coverage of webkit.py, server_process.py, chromium.py, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543742</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-26 19:31:53 -0800</bug_when>
    <thetext>Why do we want this code?  Ojan seems to be testing perf w/o these working?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543743</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-26 19:32:16 -0800</bug_when>
    <thetext>(I&apos;m not saying we don&apos;t want it.  But we should have justification as to why we want it fixed isntead of removing it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543801</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-26 21:04:09 -0800</bug_when>
    <thetext>Understood; these are good questions ...

First, I&apos;m not actually convinced that dryrun.py is still particularly useful; it predates mock_drt.py and I&apos;m not sure that running it tells me anything than mock_drt won&apos;t, so we could probably get rid of it.

mock_drt, on the other hand, serves (or will serve) a few purposes.

First, it captures in python code how exactly we expect DRTs to behave, so it&apos;s good documentation for the protocols (easier to read than the corresponding C++ code). If something breaks or acts weird on the bots, it allows me to pretty quickly triage whether the problem is likely to be in DRT or in NRWT (or in some interaction). I&apos;ve found a bunch of subtle bugs this way.

Second, it allows us to write integration tests that will exercise the port code in a way that is pretty clear and obvious. This will allow us to get good test coverage from black-box tests (which as you&apos;ve probably learned I generally prefer over white box unit tests as long as they&apos;re not slow and don&apos;t affect the environment). I think having a &quot;real&quot; MockDRT object will be almost as useful as the MockFileSystem has been.

Third, it does provide a realistic end-to-end test for benchmarking (assuming a DRT that is as fast as one could expect it to be), and can be used to benchmark running tests in parallel that are actually exercising the file system, IPC, etc. For me, in tuning how well the manager/worker code works, it&apos;s been worth it for this alone.

Ojan&apos;s benchmarking is testing other parts of the NRWT code base (how fast everything but running the test is). It&apos;s very useful as well, but not at all the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544216</commentid>
    <comment_count>6</comment_count>
      <attachid>124237</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-27 11:35:53 -0800</bug_when>
    <thetext>Comment on attachment 124237
Patch

cancelling review - I&apos;m going to delete the dryrun port and rework the mock port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544357</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-27 14:18:56 -0800</bug_when>
    <thetext>Thank you Dirk. Sorry for being slow to respond this morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545728</commentid>
    <comment_count>8</comment_count>
      <attachid>124660</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-30 19:01:26 -0800</bug_when>
    <thetext>Created attachment 124660
remove dryrun, clean up mock_drt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546453</commentid>
    <comment_count>9</comment_count>
      <attachid>124660</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-31 13:43:40 -0800</bug_when>
    <thetext>Comment on attachment 124660
remove dryrun, clean up mock_drt

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:49
&gt; +# Since we execute this script directly as part of the unit tests, we need to ensure
&gt; +# that Tools/Scripts is in sys.path for the next imports to work correctly.
&gt; +script_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
&gt; +if script_dir not in sys.path:
&gt; +    sys.path.append(script_dir)

Why are we doing more of these?

&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:166
&gt; +        self.assertEqual(stderr.getvalue(), &apos;&apos; if options.chromium else &apos;#EOF\n&apos;)

:(  Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546473</commentid>
    <comment_count>10</comment_count>
      <attachid>124660</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-31 14:04:55 -0800</bug_when>
    <thetext>Comment on attachment 124660
remove dryrun, clean up mock_drt

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py:49
&gt;&gt; +    sys.path.append(script_dir)
&gt; 
&gt; Why are we doing more of these?

This code would&apos;ve always been necessary, but perhaps I was the only one running this code and I always have the Scripts dir in my PYTHONPATH. I could split the executable script out and move it into Tools/Scripts, but I thought it was somewhat better to have everything in one file.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:166
&gt;&gt; +        self.assertEqual(stderr.getvalue(), &apos;&apos; if options.chromium else &apos;#EOF\n&apos;)
&gt; 
&gt; :(  Why?

Chromium never writes anything to stderr by default, but apparently the Apple DRT port does (which surprises me; I need to look into that further).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546495</commentid>
    <comment_count>11</comment_count>
      <attachid>124660</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-31 14:25:57 -0800</bug_when>
    <thetext>Comment on attachment 124660
remove dryrun, clean up mock_drt

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:698
&gt; +        filename = self._filesystem.abspath(filename)
&gt;          assert filename.startswith(self.layout_tests_dir()), &quot;%s did not start with %s&quot; % (filename, self.layout_tests_dir())
&gt;          return filename[len(self.layout_tests_dir()) + 1:]
&gt;  
&gt;      def relative_perf_test_filename(self, filename):
&gt; +        filename = self._filesystem.abspath(filename)

What is our normal convention for paths?  Relative to the webkit root?  absolute?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546557</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-31 15:23:00 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 124660 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124660&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:698
&gt; &gt; +        filename = self._filesystem.abspath(filename)
&gt; &gt;          assert filename.startswith(self.layout_tests_dir()), &quot;%s did not start with %s&quot; % (filename, self.layout_tests_dir())
&gt; &gt;          return filename[len(self.layout_tests_dir()) + 1:]
&gt; &gt;  
&gt; &gt;      def relative_perf_test_filename(self, filename):
&gt; &gt; +        filename = self._filesystem.abspath(filename)
&gt; 
&gt; What is our normal convention for paths?  Relative to the webkit root?  absolute?

I don&apos;t know that we have a &quot;normal&quot; convention across all of webkit.py; however, these routines are designed to take full paths and return paths relative to Source/LayoutTests. I need to add the abspath to account for some changes Ojan made in bug 77170 that I didn&apos;t fully understand (I think). I can go back and remove those and see what breaks (I&apos;ve forgotten at the moment).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546561</commentid>
    <comment_count>13</comment_count>
      <attachid>124660</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-31 15:27:38 -0800</bug_when>
    <thetext>Comment on attachment 124660
remove dryrun, clean up mock_drt

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:698
&gt;&gt;&gt; +        filename = self._filesystem.abspath(filename)
&gt;&gt; 
&gt;&gt; What is our normal convention for paths?  Relative to the webkit root?  absolute?
&gt; 
&gt; I don&apos;t know that we have a &quot;normal&quot; convention across all of webkit.py; however, these routines are designed to take full paths and return paths relative to Source/LayoutTests. I need to add the abspath to account for some changes Ojan made in bug 77170 that I didn&apos;t fully understand (I think). I can go back and remove those and see what breaks (I&apos;ve forgotten at the moment).

Are these routines which are only used by the mock port?  I&apos;m confused why these fixes would be needed for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546566</commentid>
    <comment_count>14</comment_count>
      <attachid>124660</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-31 15:34:57 -0800</bug_when>
    <thetext>Comment on attachment 124660
remove dryrun, clean up mock_drt

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

&gt; Tools/ChangeLog:13
&gt; +        never worked w/ reftests. Since we don&apos;t exercise this module in

Nit: please spell-out &quot;with&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546582</commentid>
    <comment_count>15</comment_count>
      <attachid>124660</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-31 15:50:11 -0800</bug_when>
    <thetext>Comment on attachment 124660
remove dryrun, clean up mock_drt

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

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:698
&gt;&gt;&gt;&gt; +        filename = self._filesystem.abspath(filename)
&gt;&gt;&gt; 
&gt;&gt;&gt; What is our normal convention for paths?  Relative to the webkit root?  absolute?
&gt;&gt; 
&gt;&gt; I don&apos;t know that we have a &quot;normal&quot; convention across all of webkit.py; however, these routines are designed to take full paths and return paths relative to Source/LayoutTests. I need to add the abspath to account for some changes Ojan made in bug 77170 that I didn&apos;t fully understand (I think). I can go back and remove those and see what breaks (I&apos;ve forgotten at the moment).
&gt; 
&gt; Are these routines which are only used by the mock port?  I&apos;m confused why these fixes would be needed for this patch?

No, they are used elsewhere. 

You are asking good questions; I&apos;m thinking that maybe I developed this patch on a machine where I had some symlinks that were otherwise confusing things, but if I delete these lines now, everything still seems to work, so I will delete them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546583</commentid>
    <comment_count>16</comment_count>
      <attachid>124837</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-31 15:51:52 -0800</bug_when>
    <thetext>Created attachment 124837
remove abspath call, fix nit in changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546589</commentid>
    <comment_count>17</comment_count>
      <attachid>124837</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-31 15:55:54 -0800</bug_when>
    <thetext>Comment on attachment 124837
remove abspath call, fix nit in changelog

OK.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546692</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-31 17:41:46 -0800</bug_when>
    <thetext>Committed r106416: &lt;http://trac.webkit.org/changeset/106416&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124237</attachid>
            <date>2012-01-26 19:22:36 -0800</date>
            <delta_ts>2012-01-30 19:01:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77170-20120126192235.patch</filename>
            <type>text/plain</type>
            <size>11025</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MDY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTcxZmVmZDkzMGMzZjU5NjU4ZDAzODhjOGE5Mzk2M2Q1
OGMzOTNiZS4uOGVlMWVjMDM1NWI0MDQyNzg1NWVjMzRiNzgwZjVjOTNmOGFhMmY0MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMw
IEBACisyMDEyLTAxLTI2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIG5yd3Q6IGZpeCB0aGUgZHJ5cnVuIGFuZCBtb2NrIHBvcnRzIHRvIHdvcmsgdy8gRHJp
dmVyUHJveHksIHJlZnRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NzE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBEcnlydW5Qb3J0IHVzZWQgZm9yIGJlbmNobWFya2luZyBhbmQgdGVzdGlu
ZyBOUldUIGhhcyBiZWVuCisgICAgICAgIGJyb2tlbiBzaW5jZSB3ZSBhZGRlZCB0aGUgRHJpdmVy
UHJveHkgY29kZS4gVGhlIE1vY2tEUlQgcG9ydCB3YXMKKyAgICAgICAgYWxzbyBicm9rZW4gYnkg
dGhhdCwgYW5kIG1vcmVvdmVyLCBuZXZlciB3b3JrZWQgdy8gcmVmdGVzdHMuCisKKyAgICAgICAg
U2luY2Ugd2UgZG9uJ3QgZXhlcmNpc2UgZWl0aGVyIG9mIHRoZXNlIG1vZHVsZXMgYnkgZGVmYXVs
dCBpbgorICAgICAgICB0aGUgdW5pdCB0ZXN0cywgdGhlIGNvZGUgaGFkIGFsc28gYml0cm90dGVk
IHNvbWUgOiguCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2RyeXJ1bi5weToKKyAgICAgICAgKERyeVJ1blBvcnQuX19pbml0X18pOgorICAgICAgICAoRHJ5
UnVuUG9ydCk6CisgICAgICAgIChEcnlSdW5Qb3J0LnJlYWxfbmFtZSk6CisgICAgICAgIChEcnlS
dW5Qb3J0LmNyZWF0ZV9kcml2ZXIpOgorICAgICAgICAoRHJ5UnVuUG9ydC5kcml2ZXJfY21kX2xp
bmUpOgorICAgICAgICAoRHJ5UnVuUG9ydC5fZHJpdmVyX2NsYXNzKToKKyAgICAgICAgKERyeXJ1
bkRyaXZlcik6CisgICAgICAgIChEcnlydW5Ecml2ZXIucnVuX3Rlc3QpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHk6CisgICAgICAgIChN
b2NrRFJUUG9ydC5jcmVhdGVfZHJpdmVyKToKKyAgICAgICAgKE1vY2tDaHJvbWl1bURSVC5ydW5f
b25lX3Rlc3QpOgorCiAyMDEyLTAxLTI2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIHJ1bi1wZXJmLXRlc3Qgc2hvdWxkIGluY2x1ZGUgcmVsYXRpdmUgZmlsZSBw
YXRocyBpbiB0ZXN0IG5hbWVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggZWRkNjE2NjA5MGVjYjJhMDBkMWQyMTJiM2FmYWI5ZWNm
NDU3ZGI5ZC4uM2E1ZmIxZTg1NTBhZjYyMDc3YjZkNzhjZWI0NTVmOWZmZDNlMjk0NyAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAt
NjkwLDEwICs2OTAsMTIgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBhbiBlcnJvci4i
IiIKICAgICAgICAgIyBQb3J0cyB0aGF0IHJ1biBvbiB3aW5kb3dzIG5lZWQgdG8gb3ZlcnJpZGUg
dGhpcyBtZXRob2QgdG8gZGVhbCB3aXRoCiAgICAgICAgICMgZmlsZW5hbWVzIHdpdGggYmFja3Ns
YXNoZXMgaW4gdGhlbS4KKyAgICAgICAgZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmFic3Bh
dGgoZmlsZW5hbWUpCiAgICAgICAgIGFzc2VydCBmaWxlbmFtZS5zdGFydHN3aXRoKHNlbGYubGF5
b3V0X3Rlc3RzX2RpcigpKSwgIiVzIGRpZCBub3Qgc3RhcnQgd2l0aCAlcyIgJSAoZmlsZW5hbWUs
IHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKQogICAgICAgICByZXR1cm4gZmlsZW5hbWVbbGVuKHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XQogCiAgICAgZGVmIHJlbGF0aXZlX3BlcmZfdGVz
dF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGZpbGVuYW1lID0gc2VsZi5fZmls
ZXN5c3RlbS5hYnNwYXRoKGZpbGVuYW1lKQogICAgICAgICBhc3NlcnQgZmlsZW5hbWUuc3RhcnRz
d2l0aChzZWxmLnBlcmZfdGVzdHNfZGlyKCkpLCAiJXMgZGlkIG5vdCBzdGFydCB3aXRoICVzIiAl
IChmaWxlbmFtZSwgc2VsZi5wZXJmX3Rlc3RzX2RpcigpKQogICAgICAgICByZXR1cm4gZmlsZW5h
bWVbbGVuKHNlbGYucGVyZl90ZXN0c19kaXIoKSkgKyAxOl0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQppbmRleCAyNDJhYmVlZWRk
ZmIzOTRiMTZlYmZiMGE4MzM2ZGU3OGVmOWMxODRhLi5hNzNlOTVmMWE3N2FjMTM2ZGEzZDc5YzYy
MWVjM2ZkY2Q1NmRhODE5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQpAQCAtNDQsMTMgKzQ0LDExIEBACiAgICBUaGlzIGltcGxl
bWVudGF0aW9uIGFsc28gbW9kaWZpZXMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIHNvIHRoYXQgYWxs
CiAgICB0ZXN0cyBhcmUgZWl0aGVyIFNLSVBQRUQgb3IgZXhwZWN0ZWQgdG8gUEFTUy4iIiIKIAot
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCiBpbXBvcnQgb3MKIGltcG9y
dCBzeXMKIGltcG9ydCB0aW1lCiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IERyaXZlciwgRHJpdmVyT3V0cHV0LCBmYWN0b3J5Citmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIsIGZhY3RvcnkKIAogCiAjIE5vdGUgdGhhdCB3ZSBkb24n
dCBpbmhlcml0IGZyb20gYmFzZS5Qb3J0IGluIG9yZGVyIGZvciBkZWxlZ2F0aW9uIHRvCkBAIC02
OCw2ICs2NiwxMCBAQCBjbGFzcyBEcnlSdW5Qb3J0KG9iamVjdCk6CiAKICAgICBkZWYgX19pbml0
X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYuX19kZWxl
Z2F0ZSA9IGZhY3RvcnkuUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFtZS5yZXBsYWNlKCdk
cnlydW4tJywgJycpLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fX3JlYWxfbmFtZSA9IHBvcnRf
bmFtZQorCisgICAgZGVmIHJlYWxfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19y
ZWFsX25hbWUKIAogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKICAgICAgICAgcmV0
dXJuIGdldGF0dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQpAQCAtODQsNiArODYsMTIgQEAgY2xh
c3MgRHJ5UnVuUG9ydChvYmplY3QpOgogICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVk
c19odHRwKToKICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgIGRlZiBjcmVhdGVfZHJpdmVyKHNl
bGYsIHdvcmtlcl9udW1iZXIsIG5vX3RpbWVvdXQ9RmFsc2UpOgorICAgICAgICByZXR1cm4gZHJp
dmVyLkRyaXZlclByb3h5KHNlbGYsIHdvcmtlcl9udW1iZXIsIHNlbGYuX2RyaXZlcl9jbGFzcygp
LCBwaXhlbF90ZXN0cz1zZWxmLmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyksIG5vX3RpbWVvdXQ9
bm9fdGltZW91dCkKKworICAgIGRlZiBkcml2ZXJfY21kX2xpbmUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLmNyZWF0ZV9kcml2ZXIoMCkuY21kX2xpbmUoKQorCiAgICAgZGVmIHN0YXJ0X2hl
bHBlcihzZWxmKToKICAgICAgICAgcGFzcwogCkBAIC0xMDIsMTEgKzExMCwxMSBAQCBjbGFzcyBE
cnlSdW5Qb3J0KG9iamVjdCk6CiAgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcihzZWxmKToK
ICAgICAgICAgcGFzcwogCi0gICAgZGVmIGRyaXZlcl9jbGFzcyhzZWxmKToKKyAgICBkZWYgX2Ry
aXZlcl9jbGFzcyhzZWxmKToKICAgICAgICAgcmV0dXJuIERyeXJ1bkRyaXZlcgogCiAKLWNsYXNz
IERyeXJ1bkRyaXZlcihEcml2ZXIpOgorY2xhc3MgRHJ5cnVuRHJpdmVyKGRyaXZlci5Ecml2ZXIp
OgogICAgICIiIkRyeXJ1biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgLyBE
cml2ZXIgaW50ZXJmYWNlLiIiIgogCiAgICAgZGVmIGNtZF9saW5lKHNlbGYpOgpAQCAtMTMwLDcg
KzEzOCw3IEBAIGNsYXNzIERyeXJ1bkRyaXZlcihEcml2ZXIpOgogICAgICAgICAgICAgaW1hZ2Ug
PSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCiAgICAg
ICAgICAgICBjaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oZHJpdmVyX2lu
cHV0LnRlc3RfbmFtZSkKICAgICAgICAgICAgIGF1ZGlvID0gc2VsZi5fcG9ydC5leHBlY3RlZF9h
dWRpbyhkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQotICAgICAgICByZXR1cm4gRHJpdmVyT3V0cHV0
KHRleHQsIGltYWdlLCBjaGVja3N1bSwgYXVkaW8sIGNyYXNoPUZhbHNlLCB0ZXN0X3RpbWU9dGlt
ZS50aW1lKCkgLSBzdGFydF90aW1lLCB0aW1lb3V0PUZhbHNlLCBlcnJvcj0nJykKKyAgICAgICAg
cmV0dXJuIGRyaXZlci5Ecml2ZXJPdXRwdXQodGV4dCwgaW1hZ2UsIGNoZWNrc3VtLCBhdWRpbywg
Y3Jhc2g9RmFsc2UsIHRlc3RfdGltZT10aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsIHRpbWVvdXQ9
RmFsc2UsIGVycm9yPScnKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIHBhc3MKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19k
cnQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0
LnB5CmluZGV4IGYyODRlNzY5ZmU5MjNmNzkwN2RhMjhmZWM3NGM2YTgyODNmMjYzNzYuLjc1N2E1
MWQwNGQ4MWRkY2E1OTIxNWY0YjAzY2M2NDlhNDM3Y2JkMDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpAQCAtMzksOCAr
MzksMTUgQEAgTW9ja0RSVCB0byBjcmFzaCkuCiAKIGltcG9ydCBiYXNlNjQKIGltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MKIGltcG9ydCBzeXMKIAorIyBTaW5jZSB3ZSBleGVjdXRlIHRoaXMgc2Ny
aXB0IGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhlIHVuaXQgdGVzdHMsIHdlIG5lZWQgdG8gZW5zdXJl
CisjIHRoYXQgVG9vbHMvU2NyaXB0cyBpcyBpbiBzeXMucGF0aCBmb3IgdGhlIG5leHQgaW1wb3J0
cyB0byB3b3JrIGNvcnJlY3RseS4KK3NjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0
aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRo
KF9fZmlsZV9fKSkpKSkKK2lmIHNjcmlwdF9kaXIgbm90IGluIHN5cy5wYXRoOgorICAgIHN5cy5w
YXRoLmFwcGVuZChzY3JpcHRfZGlyKQorCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lz
dGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9y
dC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29s
IGltcG9ydCBNb2NrT3B0aW9ucwpAQCAtODAsNyArODcsNyBAQCBjbGFzcyBNb2NrRFJUUG9ydChv
YmplY3QpOgogICAgICAgICByZXR1cm4gZHJpdmVyLmNtZF9saW5lKCkKIAogICAgIGRlZiBfcGF0
aF90b19kcml2ZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0u
YWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5h
YnNwYXRoKF9fZmlsZV9fLnJlcGxhY2UoJy5weWMnLCAnLnB5JykpCiAKICAgICBkZWYgY3JlYXRl
X2RyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKICAgICAgICAgIyBXZSBuZWVkIHRvIGNyZWF0
ZSBhIGRyaXZlciBvYmplY3QgYXMgdGhlIGRlbGVnYXRlIHdvdWxkLCBidXQKQEAgLTg5LDE2ICs5
NiwyMiBAQCBjbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgogICAgICAgICAjIG1ldGhvZCB0aGF0
IHNwbGljZXMgaW4gdGhlIG1vY2tfZHJ0IHBhdGggYW5kIGNvbW1hbmQgbGluZSBhcmd1bWVudHMK
ICAgICAgICAgIyBpbiBwbGFjZSBvZiB0aGUgYWN0dWFsIHBhdGggdG8gdGhlIGRyaXZlciBiaW5h
cnkuCiAKLSAgICAgICAgZGVmIG92ZXJyaWRpbmdfY21kX2xpbmUoKToKLSAgICAgICAgICAgIGNt
ZCA9IHNlbGYuX19vcmlnaW5hbF9kcml2ZXJfY21kX2xpbmUoKQotICAgICAgICAgICAgaW5kZXgg
PSBjbWQuaW5kZXgoc2VsZi5fX2RlbGVnYXRlLl9wYXRoX3RvX2RyaXZlcigpKQotICAgICAgICAg
ICAgIyBGSVhNRTogV2h5IGRvZXMgdGhpcyBuZWVkIHRvIHVzZSBzeXMuZXhlY3V0YWJsZSAoaW5z
dGVhZCBvZiBzb21ldGhpbmcgbW9ja2FibGUpPwotICAgICAgICAgICAgY21kW2luZGV4OmluZGV4
ICsgMV0gPSBbc3lzLmV4ZWN1dGFibGUsIHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksICctLXBsYXRm
b3JtJywgc2VsZi5uYW1lKCldCi0gICAgICAgICAgICByZXR1cm4gY21kCisgICAgICAgIGRlZiBv
dmVycmlkaW5nX2NtZF9saW5lKG9yaWdpbmFsX2NtZF9saW5lKToKKyAgICAgICAgICAgIGRlZiBu
ZXdfY21kX2xpbmUoKToKKyAgICAgICAgICAgICAgICBjbWQgPSBvcmlnaW5hbF9jbWRfbGluZSgp
CisgICAgICAgICAgICAgICAgaW5kZXggPSBjbWQuaW5kZXgoc2VsZi5fX2RlbGVnYXRlLl9wYXRo
X3RvX2RyaXZlcigpKQorICAgICAgICAgICAgICAgICMgRklYTUU6IFdoeSBkb2VzIHRoaXMgbmVl
ZCB0byB1c2Ugc3lzLmV4ZWN1dGFibGUgKGluc3RlYWQgb2Ygc29tZXRoaW5nIG1vY2thYmxlKT8K
KyAgICAgICAgICAgICAgICBjbWRbaW5kZXg6aW5kZXggKyAxXSA9IFtzeXMuZXhlY3V0YWJsZSwg
c2VsZi5fcGF0aF90b19kcml2ZXIoKSwgJy0tcGxhdGZvcm0nLCBzZWxmLm5hbWUoKV0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gY21kCisgICAgICAgICAgICByZXR1cm4gbmV3X2NtZF9saW5lCiAK
ICAgICAgICAgZGVsZWdhdGVkX2RyaXZlciA9IHNlbGYuX19kZWxlZ2F0ZS5jcmVhdGVfZHJpdmVy
KHdvcmtlcl9udW1iZXIpCi0gICAgICAgIHNlbGYuX19vcmlnaW5hbF9kcml2ZXJfY21kX2xpbmUg
PSBkZWxlZ2F0ZWRfZHJpdmVyLmNtZF9saW5lCi0gICAgICAgIGRlbGVnYXRlZF9kcml2ZXIuY21k
X2xpbmUgPSBvdmVycmlkaW5nX2NtZF9saW5lCisKKyAgICAgICAgc2VsZi5fX29yaWdpbmFsX2Ry
aXZlcl9jbWRfbGluZSA9IGRlbGVnYXRlZF9kcml2ZXIuX2RyaXZlci5jbWRfbGluZQorICAgICAg
ICBzZWxmLl9fb3JpZ2luYWxfcmVmdGVzdF9kcml2ZXJfY21kX2xpbmUgPSBkZWxlZ2F0ZWRfZHJp
dmVyLl9yZWZ0ZXN0X2RyaXZlci5jbWRfbGluZQorCisgICAgICAgIGRlbGVnYXRlZF9kcml2ZXIu
X2RyaXZlci5jbWRfbGluZSA9IG92ZXJyaWRpbmdfY21kX2xpbmUoc2VsZi5fX29yaWdpbmFsX2Ry
aXZlcl9jbWRfbGluZSkKKyAgICAgICAgZGVsZWdhdGVkX2RyaXZlci5fcmVmdGVzdF9kcml2ZXIu
Y21kX2xpbmUgPSBvdmVycmlkaW5nX2NtZF9saW5lKHNlbGYuX19vcmlnaW5hbF9yZWZ0ZXN0X2Ry
aXZlcl9jbWRfbGluZSkKICAgICAgICAgcmV0dXJuIGRlbGVnYXRlZF9kcml2ZXIKIAogICAgIGRl
ZiBzdGFydF9oZWxwZXIoc2VsZik6CkBAIC0yMTgsNyArMjMxLDE3IEBAIGNsYXNzIE1vY2tEUlQo
b2JqZWN0KToKIAogICAgICAgICBhY3R1YWxfdGV4dCA9IHBvcnQuZXhwZWN0ZWRfdGV4dCh0ZXN0
X25hbWUpCiAgICAgICAgIGFjdHVhbF9hdWRpbyA9IHBvcnQuZXhwZWN0ZWRfYXVkaW8odGVzdF9u
YW1lKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCB0ZXN0X2lucHV0
LmNoZWNrc3VtOgorICAgICAgICBpc19yZWZ0ZXN0ID0gRmFsc2UKKyAgICAgICAgaWYgcG9ydC5p
c19yZWZ0ZXN0KHRlc3RfbmFtZSkgb3IgdGVzdF9uYW1lLmVuZHN3aXRoKCctZXhwZWN0ZWQuaHRt
bCcpIG9yIHRlc3RfbmFtZS5lbmRzd2l0aCgnLW1pc21hdGNoLmh0bWwnKToKKyAgICAgICAgICAg
IGlzX3JlZnRlc3QgPSBUcnVlCisgICAgICAgICAgICAjIE1ha2UgdXAgc29tZXRoaW5nIGlmIHRo
aXMgaXMgYSByZWYtdGVzdC4KKyAgICAgICAgICAgIGFjdHVhbF90ZXh0ID0gJ3JlZmVyZW5jZSB0
ZXh0XG4nCisgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSAnTm9uZScKKyAgICAgICAgICAg
IGFjdHVhbF9pbWFnZSA9ICdibGFuaycKKyAgICAgICAgICAgIGlmIHRlc3RfbmFtZS5lbmRzd2l0
aCgnLW1pc21hdGNoLmh0bWwnKToKKyAgICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSAn
VHJ1ZScKKyAgICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSAnbm90IGJsYW5rJworICAgICAg
ICBlbGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQuY2hlY2tzdW06
CiAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHRl
c3RfbmFtZSkKICAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9IHBvcnQuZXhwZWN0ZWRfaW1hZ2Uo
dGVzdF9uYW1lKQogCkBAIC0yMzUsNyArMjU4LDcgQEAgY2xhc3MgTW9ja0RSVChvYmplY3QpOgog
CiAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnI0VPRlxuJykKIAotICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCB0ZXN0X2lucHV0LmNoZWNrc3VtOgorICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCAodGVzdF9pbnB1dC5jaGVja3N1bSBvciBp
c19yZWZ0ZXN0KToKICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnXG4nKQogICAgICAg
ICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdBY3R1YWxIYXNoOiAlc1xuJyAlIGFjdHVhbF9jaGVj
a3N1bSkKICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnRXhwZWN0ZWRIYXNoOiAlc1xu
JyAlIHRlc3RfaW5wdXQuY2hlY2tzdW0pCkBAIC0yNDUsNiArMjY4LDcgQEAgY2xhc3MgTW9ja0RS
VChvYmplY3QpOgogICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShhY3R1YWxfaW1h
Z2UpCiAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnI0VPRlxuJykKICAgICAgICAgc2VsZi5f
c3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc2VsZi5fc3RkZXJyLndyaXRlKCcjRU9GXG4nKQogICAg
ICAgICBzZWxmLl9zdGRlcnIuZmx1c2goKQogCiAKQEAgLTI2OSwxNiArMjkzLDI4IEBAIGNsYXNz
IE1vY2tDaHJvbWl1bURSVChNb2NrRFJUKToKICAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKICAg
ICAgICAgdGVzdF9uYW1lID0gc2VsZi5fZHJpdmVyLnVyaV90b190ZXN0KHRlc3RfaW5wdXQudXJp
KQogCi0gICAgICAgIGFjdHVhbF90ZXh0ID0gcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfbmFtZSkK
KyAgICAgICAgYWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVkX3RleHQodGVzdF9uYW1lKSBvciAn
XG4nCiAgICAgICAgIGFjdHVhbF9pbWFnZSA9ICcnCiAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9
ICcnCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQu
Y2hlY2tzdW06CisKKyAgICAgICAgaXNfcmVmdGVzdCA9IEZhbHNlCisgICAgICAgIGlmIHBvcnQu
aXNfcmVmdGVzdCh0ZXN0X25hbWUpIG9yIHRlc3RfbmFtZS5lbmRzd2l0aCgnLWV4cGVjdGVkLmh0
bWwnKSBvciB0ZXN0X25hbWUuZW5kc3dpdGgoJy1taXNtYXRjaC5odG1sJyk6CisgICAgICAgICAg
ICBpc19yZWZ0ZXN0ID0gVHJ1ZQorICAgICAgICAgICAgIyBNYWtlIHVwIHNvbWV0aGluZyBpZiB0
aGlzIGlzIGEgcmVmLXRlc3QuCisgICAgICAgICAgICBhY3R1YWxfdGV4dCA9ICdyZWZlcmVuY2Ug
dGV4dFxuJworICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gJ05vbmUnCisgICAgICAgICAg
ICBhY3R1YWxfaW1hZ2UgPSAnYmxhbmsnCisgICAgICAgICAgICBpZiB0ZXN0X25hbWUuZW5kc3dp
dGgoJy1taXNtYXRjaC5odG1sJyk6CisgICAgICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0g
J1RydWUnCisgICAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlID0gJ25vdCBibGFuaycKKworICAg
ICAgICBlbGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQuY2hlY2tz
dW06CiAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3Vt
KHRlc3RfbmFtZSkKICAgICAgICAgICAgIGlmIGFjdHVhbF9jaGVja3N1bSAhPSB0ZXN0X2lucHV0
LmNoZWNrc3VtOgogICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9IHBvcnQuZXhwZWN0ZWRf
aW1hZ2UodGVzdF9uYW1lKQogCiAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiI1VSTDolc1xu
IiAlIHRlc3RfaW5wdXQudXJpKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3Rz
IGFuZCB0ZXN0X2lucHV0LmNoZWNrc3VtOgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzIGFuZCAodGVzdF9pbnB1dC5jaGVja3N1bSBvciBpc19yZWZ0ZXN0KToKICAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dC53cml0ZSgiI01ENTolc1xuIiAlIGFjdHVhbF9jaGVja3N1bSkKICAg
ICAgICAgICAgIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShzZWxmLl9v
cHRpb25zLnBpeGVsX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFjdHVhbF9pbWFnZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124660</attachid>
            <date>2012-01-30 19:01:26 -0800</date>
            <delta_ts>2012-01-31 15:51:47 -0800</delta_ts>
            <desc>remove dryrun, clean up mock_drt</desc>
            <filename>bug-77170-20120130190125.patch</filename>
            <type>text/plain</type>
            <size>24541</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MDY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTcxZmVmZDkzMGMzZjU5NjU4ZDAzODhjOGE5Mzk2M2Q1
OGMzOTNiZS4uMWEyYjBmZjQ3NzAzYTRkZTY3MjUwZWRjOTI4NjBlYjNiZDk5MTllMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDEyLTAxLTI2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIG5yd3Q6IGZpeCB0aGUgZHJ5cnVuIGFuZCBtb2NrIHBvcnRzIHRvIHdvcmsgdy8gRHJp
dmVyUHJveHksIHJlZnRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NzE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBEcnlydW5Qb3J0IHVzZWQgZm9yIGJlbmNobWFya2luZyBhbmQgdGVzdGlu
ZyBOUldUIGhhcyBiZWVuCisgICAgICAgIGJyb2tlbiBzaW5jZSB3ZSBhZGRlZCB0aGUgRHJpdmVy
UHJveHkgY29kZS4gSXQgaXNuJ3QgcmVhbGx5CisgICAgICAgIG5lZWRlZCBhbnkgbW9yZSwgc28g
SSd2ZSByZW1vdmVkIGl0LgorCisgICAgICAgIFRoZSBNb2NrRFJUIHBvcnQgd2FzIGFsc28gYnJv
a2VuIGJ5IERyaXZlclByb3h5LCBhbmQgbW9yZW92ZXIsCisgICAgICAgIG5ldmVyIHdvcmtlZCB3
LyByZWZ0ZXN0cy4gU2luY2Ugd2UgZG9uJ3QgZXhlcmNpc2UgdGhpcyBtb2R1bGUgaW4KKyAgICAg
ICAgdGhlIHVuaXQgdGVzdHMsIHRoZSBjb2RlIGhhZCBhbHNvIGJpdHJvdHRlZCBzb21lLiBJIGhh
dmUgY2xlYW5lZAorICAgICAgICBpdCB1cCBhbmQgbWFkZSBpdCB1c2UgRHJpdmVySW5wdXQgYW5k
IERyaXZlck91dHB1dCBmb3IKKyAgICAgICAgY29uc2lzdGVuY3kuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weToKKyAgICAgICAgKERyeVJ1
blBvcnQuX19pbml0X18pOgorICAgICAgICAoRHJ5UnVuUG9ydCk6CisgICAgICAgIChEcnlSdW5Q
b3J0LnJlYWxfbmFtZSk6CisgICAgICAgIChEcnlSdW5Qb3J0LmNyZWF0ZV9kcml2ZXIpOgorICAg
ICAgICAoRHJ5UnVuUG9ydC5kcml2ZXJfY21kX2xpbmUpOgorICAgICAgICAoRHJ5UnVuUG9ydC5f
ZHJpdmVyX2NsYXNzKToKKyAgICAgICAgKERyeXJ1bkRyaXZlcik6CisgICAgICAgIChEcnlydW5E
cml2ZXIucnVuX3Rlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvbW9ja19kcnQucHk6CisgICAgICAgIChNb2NrRFJUUG9ydC5jcmVhdGVfZHJpdmVyKToK
KyAgICAgICAgKE1vY2tDaHJvbWl1bURSVC5ydW5fb25lX3Rlc3QpOgorCiAyMDEyLTAxLTI2ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIHJ1bi1wZXJmLXRlc3Qg
c2hvdWxkIGluY2x1ZGUgcmVsYXRpdmUgZmlsZSBwYXRocyBpbiB0ZXN0IG5hbWVzCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggZWRk
NjE2NjA5MGVjYjJhMDBkMWQyMTJiM2FmYWI5ZWNmNDU3ZGI5ZC4uM2E1ZmIxZTg1NTBhZjYyMDc3
YjZkNzhjZWI0NTVmOWZmZDNlMjk0NyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtNjkwLDEwICs2OTAsMTIgQEAgY2xhc3MgUG9y
dChvYmplY3QpOgogICAgICAgICBhbiBlcnJvci4iIiIKICAgICAgICAgIyBQb3J0cyB0aGF0IHJ1
biBvbiB3aW5kb3dzIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZGVhbCB3aXRoCiAg
ICAgICAgICMgZmlsZW5hbWVzIHdpdGggYmFja3NsYXNoZXMgaW4gdGhlbS4KKyAgICAgICAgZmls
ZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoZmlsZW5hbWUpCiAgICAgICAgIGFzc2Vy
dCBmaWxlbmFtZS5zdGFydHN3aXRoKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKSwgIiVzIGRpZCBu
b3Qgc3RhcnQgd2l0aCAlcyIgJSAoZmlsZW5hbWUsIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKQog
ICAgICAgICByZXR1cm4gZmlsZW5hbWVbbGVuKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6
XQogCiAgICAgZGVmIHJlbGF0aXZlX3BlcmZfdGVzdF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6
CisgICAgICAgIGZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKGZpbGVuYW1lKQog
ICAgICAgICBhc3NlcnQgZmlsZW5hbWUuc3RhcnRzd2l0aChzZWxmLnBlcmZfdGVzdHNfZGlyKCkp
LCAiJXMgZGlkIG5vdCBzdGFydCB3aXRoICVzIiAlIChmaWxlbmFtZSwgc2VsZi5wZXJmX3Rlc3Rz
X2RpcigpKQogICAgICAgICByZXR1cm4gZmlsZW5hbWVbbGVuKHNlbGYucGVyZl90ZXN0c19kaXIo
KSkgKyAxOl0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9kcnlydW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2RyeXJ1bi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyYWJlZWVkZGZi
Mzk0YjE2ZWJmYjBhODMzNmRlNzhlZjljMTg0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2RyeXJ1bi5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0jIS91c3IvYmlu
L2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGhpcyBpcyBhIHRlc3QgaW1wbGVtZW50YXRpb24g
b2YgdGhlIFBvcnQgaW50ZXJmYWNlIHRoYXQgZ2VuZXJhdGVzIHRoZQotICAgY29ycmVjdCBvdXRw
dXQgZm9yIGV2ZXJ5IHRlc3QuIEl0IGNhbiBiZSB1c2VkIGZvciBwZXJmIHRlc3RpbmcsIGJlY2F1
c2UKLSAgIGl0IGlzIHByZXR0eSBtdWNoIGEgbG93ZXIgbGltaXQgb24gaG93IGZhc3QgYSBwb3J0
IGNhbiBwb3NzaWJseSBydW4uCi0KLSAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWN0cyBhcyBhIHdy
YXBwZXIgYXJvdW5kIGEgcmVhbCBwb3J0ICh0aGUgcmVhbCBwb3J0Ci0gICBpcyBoZWxkIGFzIGEg
ZGVsZWdhdGUgb2JqZWN0KS4gVG8gc3BlY2lmeSB3aGljaCBwb3J0LCB1c2UgdGhlIHBvcnQgbmFt
ZQotICAgJ2RyeXJ1bi1YWFgnIChlLmcuLCAnZHJ5cnVuLWNocm9taXVtLW1hYy1sZW9wYXJkJyku
IElmIHlvdSB1c2UganVzdAotICAgJ2RyeXJ1bicsIGl0IHVzZXMgdGhlIGRlZmF1bHQgcG9ydC4K
LQotICAgTm90ZSB0aGF0IGJlY2F1c2UgdGhpcyBpcyByZWFsbHkgYWN0aW5nIGFzIGEgd3JhcHBl
ciBhcm91bmQgdGhlIHVuZGVybHlpbmcKLSAgIHBvcnQsIHlvdSBtdXN0IGJlIGFibGUgdG8gcnVu
IHRoZSB1bmRlcmx5aW5nIHBvcnQgYXMgd2VsbAotICAgKGNoZWNrX2J1aWxkKCkgYW5kIGNoZWNr
X3N5c19kZXBzKCkgbXVzdCBwYXNzIGFuZCBhdXhpbGlhcnkgYmluYXJpZXMKLSAgIGxpa2UgbGF5
b3V0X3Rlc3RfaGVscGVyIGFuZCBodHRwZCBtdXN0IHdvcmspLgotCi0gICBUaGlzIGltcGxlbWVu
dGF0aW9uIGFsc28gbW9kaWZpZXMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIHNvIHRoYXQgYWxsCi0g
ICB0ZXN0cyBhcmUgZWl0aGVyIFNLSVBQRUQgb3IgZXhwZWN0ZWQgdG8gUEFTUy4iIiIKLQotZnJv
bSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCi1pbXBvcnQgb3MKLWltcG9ydCBz
eXMKLWltcG9ydCB0aW1lCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0
IERyaXZlciwgRHJpdmVyT3V0cHV0LCBmYWN0b3J5Ci0KLQotIyBOb3RlIHRoYXQgd2UgZG9uJ3Qg
aW5oZXJpdCBmcm9tIGJhc2UuUG9ydCBpbiBvcmRlciBmb3IgZGVsZWdhdGlvbiB0bwotIyB3b3Jr
IHByb3Blcmx5OiBleGNlcHQgZm9yIHRoZSBtZXRob2RzIGRlZmluZWQgaGVyZSwgd2Ugd2FudCB0
byBlbnN1cmUgdGhhdAotIyBhbGwgb2YgdGhlIG1ldGhvZHMgYXJlIHBhc3NlZCB0byB0aGUgX19k
ZWxlZ2F0ZSwgbm90IHRvIHRoZSBiYXNlIGNsYXNzLgotY2xhc3MgRHJ5UnVuUG9ydChvYmplY3Qp
OgotICAgICIiIkRyeVJ1biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIi
Ci0gICAgcG9ydF9uYW1lID0gJ2RyeXJ1bicKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBk
ZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgot
ICAgICAgICAiIiJSZXR1cm4gYSBmdWxseS1zcGVjaWZpZWQgcG9ydCBuYW1lIHRoYXQgY2FuIGJl
IHVzZWQgdG8gY29uc3RydWN0IG9iamVjdHMuIiIiCi0gICAgICAgICMgU3ViY2xhc3NlcyB3aWxs
IHVzdWFsbHkgb3ZlcnJpZGUgdGhpcy4KLSAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQotCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgotICAgICAgICBz
ZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5LlBvcnRGYWN0b3J5KGhvc3QpLmdldChwb3J0X25hbWUu
cmVwbGFjZSgnZHJ5cnVuLScsICcnKSwgKiprd2FyZ3MpCi0KLSAgICBkZWYgX19nZXRhdHRyX18o
c2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFt
ZSkKLQotICAgIGRlZiBhY3F1aXJlX2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAgcGFzcwotCi0g
ICAgZGVmIHJlbGVhc2VfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYg
Y2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAg
ICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIHJldHVybiBU
cnVlCi0KLSAgICBkZWYgc3RhcnRfaGVscGVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBk
ZWYgc3RhcnRfaHR0cF9zZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdGFy
dF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RvcF9o
ZWxwZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdG9wX2h0dHBfc2VydmVyKHNl
bGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYp
OgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gRHJ5cnVuRHJpdmVyCi0KLQotY2xhc3MgRHJ5cnVuRHJpdmVyKERyaXZlcik6Ci0gICAg
IiIiRHJ5cnVuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSAvIERyaXZlciBp
bnRlcmZhY2UuIiIiCi0KLSAgICBkZWYgY21kX2xpbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBb
J05vbmUnXQotCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6Ci0gICAgICAg
IHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVz
eXN0ZW0KLSAgICAgICAgaWYgKHNlbGYuX3BvcnQuaXNfcmVmdGVzdChkcml2ZXJfaW5wdXQudGVz
dF9uYW1lKSBvciBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLmVuZHN3aXRoKCctZXhwZWN0ZWQuaHRt
bCcpKToKLSAgICAgICAgICAgIHRleHQgPSAndGVzdC10ZXh0JwotICAgICAgICAgICAgaW1hZ2Ug
PSAndGVzdC1pbWFnZScKLSAgICAgICAgICAgIGNoZWNrc3VtID0gJ3Rlc3QtY2hlY2tzdW0nCi0g
ICAgICAgICAgICBhdWRpbyA9IE5vbmUKLSAgICAgICAgZWxpZiBkcml2ZXJfaW5wdXQudGVzdF9u
YW1lLmVuZHN3aXRoKCctZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCcpOgotICAgICAgICAgICAgdGV4
dCA9ICd0ZXN0LXRleHQtbWlzbWF0Y2gnCi0gICAgICAgICAgICBpbWFnZSA9ICd0ZXN0LWltYWdl
LW1pc21hdGNoJwotICAgICAgICAgICAgY2hlY2tzdW0gPSAndGVzdC1jaGVja3N1bS1taXNtYXRj
aCcKLSAgICAgICAgICAgIGF1ZGlvID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
dGV4dCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQot
ICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKGRyaXZlcl9pbnB1
dC50ZXN0X25hbWUpCi0gICAgICAgICAgICBjaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRf
Y2hlY2tzdW0oZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKLSAgICAgICAgICAgIGF1ZGlvID0gc2Vs
Zi5fcG9ydC5leHBlY3RlZF9hdWRpbyhkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQotICAgICAgICBy
ZXR1cm4gRHJpdmVyT3V0cHV0KHRleHQsIGltYWdlLCBjaGVja3N1bSwgYXVkaW8sIGNyYXNoPUZh
bHNlLCB0ZXN0X3RpbWU9dGltZS50aW1lKCkgLSBzdGFydF90aW1lLCB0aW1lb3V0PUZhbHNlLCBl
cnJvcj0nJykKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBwYXNzCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXgg
MWFkM2MwMmVmMDc5NTc2NDhlMjFhZjI2OTZmOWQ2OWFlMGY5YjdlNS4uYThhMWNkMGU4YjMxODRk
NjgwZjJhYWQ1MTY2Zjk1NmI3OTdlZTAyYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtNDgsNyArNDgsNiBAQCBjbGFz
cyBQb3J0RmFjdG9yeShvYmplY3QpOgogICAgICAgICAnY2hyb21pdW1fbGludXguQ2hyb21pdW1M
aW51eFBvcnQnLAogICAgICAgICAnY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydCcsCiAgICAg
ICAgICdjaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0JywKLSAgICAgICAgJ2RyeXJ1bi5EcnlS
dW5Qb3J0JywKICAgICAgICAgJ2VmbC5FZmxQb3J0JywKICAgICAgICAgJ2dvb2dsZV9jaHJvbWUu
R29vZ2xlQ2hyb21lTGludXgzMlBvcnQnLAogICAgICAgICAnZ29vZ2xlX2Nocm9tZS5Hb29nbGVD
aHJvbWVMaW51eDY0UG9ydCcsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkKaW5kZXggODgyODUxODVm
N2IzN2Q0NjRiNTgxN2NjZWQ3MDE5ZjZjOGI5ZjA3MC4uZTY0NzhlZWZjNThhZThmZGQ4MjUwMWRm
NzJmZTVjYTc1MTk0NmY1YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQpAQCAtMzUsNyArMzUs
NiBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bV9ncHUK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX2xpbnV4CiBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bV9tYWMKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX3dpbgotZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJ5cnVuCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBnb29nbGVfY2hyb21lCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
IGltcG9ydCBndGsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbW9ja19kcnQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L21vY2tfZHJ0LnB5CmluZGV4IGYyODRlNzY5ZmU5MjNmNzkwN2RhMjhmZWM3NGM2YTgy
ODNmMjYzNzYuLmY0Njk2Njk4ZjZjNzc1ZDkwZmFjYzNiYTQ0YjA3NzNkMGM0OWYwZjAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2Ry
dC5weQpAQCAtMSw1ICsxLDUgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC0zOSw5ICszOSwxNyBAQCBNb2NrRFJUIHRvIGNyYXNoKS4KIAog
aW1wb3J0IGJhc2U2NAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcwogaW1wb3J0IHN5cwogCisj
IFNpbmNlIHdlIGV4ZWN1dGUgdGhpcyBzY3JpcHQgZGlyZWN0bHkgYXMgcGFydCBvZiB0aGUgdW5p
dCB0ZXN0cywgd2UgbmVlZCB0byBlbnN1cmUKKyMgdGhhdCBUb29scy9TY3JpcHRzIGlzIGluIHN5
cy5wYXRoIGZvciB0aGUgbmV4dCBpbXBvcnRzIHRvIHdvcmsgY29ycmVjdGx5Lgorc2NyaXB0X2Rp
ciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBh
dGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKQoraWYgc2NyaXB0X2RpciBu
b3QgaW4gc3lzLnBhdGg6CisgICAgc3lzLnBhdGguYXBwZW5kKHNjcmlwdF9kaXIpCisKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVySW5wdXQsIERy
aXZlck91dHB1dCwgRHJpdmVyUHJveHkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQu
ZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBp
bXBvcnQgTW9ja09wdGlvbnMKIApAQCAtNDksMTkgKzU3LDE1IEBAIF9sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIAogCiBjbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgotICAgICIi
Ik1vY2tQb3J0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKICAgICBw
b3J0X25hbWUgPSAnbW9jaycKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBkZXRlcm1pbmVf
ZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgotICAgICAgICAi
IiJSZXR1cm4gYSBmdWxseS1zcGVjaWZpZWQgcG9ydCBuYW1lIHRoYXQgY2FuIGJlIHVzZWQgdG8g
Y29uc3RydWN0IG9iamVjdHMuIiIiCi0gICAgICAgICMgU3ViY2xhc3NlcyB3aWxsIHVzdWFsbHkg
b3ZlcnJpZGUgdGhpcy4KICAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQogCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLl9fZGVs
ZWdhdGUgPSBQb3J0RmFjdG9yeShob3N0KS5nZXQocG9ydF9uYW1lLnJlcGxhY2UoJ21vY2stJywg
JycpLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fX3JlYWxfbmFtZSA9IHBvcnRfbmFtZQotICAg
ICAgICBzZWxmLl9ob3N0ID0gaG9zdAogCiAgICAgZGVmIHJlYWxfbmFtZShzZWxmKToKICAgICAg
ICAgcmV0dXJuIHNlbGYuX19yZWFsX25hbWUKQEAgLTc1LDMxICs3OSwzMSBAQCBjbGFzcyBNb2Nr
RFJUUG9ydChvYmplY3QpOgogICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRw
KToKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiBkcml2ZXJfY21kX2xpbmUoc2VsZik6
Ci0gICAgICAgIGRyaXZlciA9IHNlbGYuY3JlYXRlX2RyaXZlcigwKQotICAgICAgICByZXR1cm4g
ZHJpdmVyLmNtZF9saW5lKCkKLQotICAgIGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uYWJzcGF0aChfX2ZpbGVfXykKLQotICAg
IGRlZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgotICAgICAgICAjIFdlIG5l
ZWQgdG8gY3JlYXRlIGEgZHJpdmVyIG9iamVjdCBhcyB0aGUgZGVsZWdhdGUgd291bGQsIGJ1dAot
ICAgICAgICAjIG92ZXJ3cml0ZSB0aGUgcGF0aCB0byB0aGUgZHJpdmVyIGJpbmFyeSBpbiBpdHMg
Y29tbWFuZCBsaW5lLiBXZSBkbwotICAgICAgICAjIHRoaXMgYnkgYWN0dWFsbHkgb3ZlcndyaXRp
bmcgaXRzIGNtZF9saW5lKCkgbWV0aG9kIHdpdGggYSBwcm94eQotICAgICAgICAjIG1ldGhvZCB0
aGF0IHNwbGljZXMgaW4gdGhlIG1vY2tfZHJ0IHBhdGggYW5kIGNvbW1hbmQgbGluZSBhcmd1bWVu
dHMKLSAgICAgICAgIyBpbiBwbGFjZSBvZiB0aGUgYWN0dWFsIHBhdGggdG8gdGhlIGRyaXZlciBi
aW5hcnkuCi0KLSAgICAgICAgZGVmIG92ZXJyaWRpbmdfY21kX2xpbmUoKToKLSAgICAgICAgICAg
IGNtZCA9IHNlbGYuX19vcmlnaW5hbF9kcml2ZXJfY21kX2xpbmUoKQotICAgICAgICAgICAgaW5k
ZXggPSBjbWQuaW5kZXgoc2VsZi5fX2RlbGVnYXRlLl9wYXRoX3RvX2RyaXZlcigpKQotICAgICAg
ICAgICAgIyBGSVhNRTogV2h5IGRvZXMgdGhpcyBuZWVkIHRvIHVzZSBzeXMuZXhlY3V0YWJsZSAo
aW5zdGVhZCBvZiBzb21ldGhpbmcgbW9ja2FibGUpPwotICAgICAgICAgICAgY21kW2luZGV4Omlu
ZGV4ICsgMV0gPSBbc3lzLmV4ZWN1dGFibGUsIHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksICctLXBs
YXRmb3JtJywgc2VsZi5uYW1lKCldCi0gICAgICAgICAgICByZXR1cm4gY21kCi0KLSAgICAgICAg
ZGVsZWdhdGVkX2RyaXZlciA9IHNlbGYuX19kZWxlZ2F0ZS5jcmVhdGVfZHJpdmVyKHdvcmtlcl9u
dW1iZXIpCi0gICAgICAgIHNlbGYuX19vcmlnaW5hbF9kcml2ZXJfY21kX2xpbmUgPSBkZWxlZ2F0
ZWRfZHJpdmVyLmNtZF9saW5lCi0gICAgICAgIGRlbGVnYXRlZF9kcml2ZXIuY21kX2xpbmUgPSBv
dmVycmlkaW5nX2NtZF9saW5lCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZWRfZHJpdmVyCisgICAg
ZGVmIGNyZWF0ZV9kcml2ZXIoc2VsZiwgd29ya2VyX251bWJlciwgbm9fdGltZW91dD1GYWxzZSk6
CisgICAgICAgICMgVGhlIG1hZ2ljIG9mIHRoZSBNb2NrRFJUUG9ydCBpcyB0aGF0IHdlIGNyZWF0
ZSBhIGRyaXZlciB0aGF0IGhhcyBhCisgICAgICAgICMgY21kX2xpbmUoKSBtZXRob2QgbW9ua2V5
LXBhdGNoZWQgdG8gaW52b2tlIHRoaXMgc2NyaXB0IGluc3RlYWQgb2YgRFJULgorICAgICAgICBy
ZXR1cm4gRHJpdmVyUHJveHkoc2VsZiwgd29ya2VyX251bWJlciwgc2VsZi5fbW9ja2VkX2RyaXZl
cl9tYWtlciwgcGl4ZWxfdGVzdHM9c2VsZi5nZXRfb3B0aW9uKCdwaXhlbF90ZXN0cycpLCBub190
aW1lb3V0PW5vX3RpbWVvdXQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9tb2NrZWRf
ZHJpdmVyX21ha2VyKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0
PUZhbHNlKToKKyAgICAgICAgcGF0aF90b190aGlzX2ZpbGUgPSBwb3J0Lmhvc3QuZmlsZXN5c3Rl
bS5hYnNwYXRoKF9fZmlsZV9fLnJlcGxhY2UoJy5weWMnLCAnLnB5JykpCisgICAgICAgIGRyaXZl
ciA9IHBvcnQuX19kZWxlZ2F0ZS5fZHJpdmVyX2NsYXNzKCkocG9ydCwgd29ya2VyX251bWJlciwg
cGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQpCisgICAgICAgIGRyaXZlci5jbWRfbGluZSA9IHBvcnQu
X292ZXJyaWRpbmdfY21kX2xpbmUoZHJpdmVyLmNtZF9saW5lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX19kZWxlZ2F0ZS5fcGF0aF90
b19kcml2ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXRoX3RvX3RoaXNfZmlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ll9fZGVsZWdhdGUubmFtZSgp
KQorICAgICAgICByZXR1cm4gZHJpdmVyCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9v
dmVycmlkaW5nX2NtZF9saW5lKG9yaWdpbmFsX2NtZF9saW5lLCBkcml2ZXJfcGF0aCwgcHl0aG9u
X2V4ZSwgdGhpc19maWxlLCBwb3J0X25hbWUpOgorICAgICAgICBkZWYgbmV3X2NtZF9saW5lKCk6
CisgICAgICAgICAgICBjbWRfbGluZSA9IG9yaWdpbmFsX2NtZF9saW5lKCkKKyAgICAgICAgICAg
IGluZGV4ID0gY21kX2xpbmUuaW5kZXgoZHJpdmVyX3BhdGgpCisgICAgICAgICAgICBjbWRfbGlu
ZVtpbmRleDppbmRleCArIDFdID0gW3B5dGhvbl9leGUsIHRoaXNfZmlsZSwgJy0tcGxhdGZvcm0n
LCBwb3J0X25hbWVdCisgICAgICAgICAgICByZXR1cm4gY21kX2xpbmUKKworICAgICAgICByZXR1
cm4gbmV3X2NtZF9saW5lCiAKICAgICBkZWYgc3RhcnRfaGVscGVyKHNlbGYpOgogICAgICAgICBw
YXNzCkBAIC0xNjQsMjYgKzE2OCw3IEBAIGRlZiBwYXJzZV9vcHRpb25zKGFyZ3YpOgogICAgIHJl
dHVybiAob3B0aW9ucywgW10pCiAKIAotIyBGSVhNRTogU2hvdWxkIHByb2JhYmx5IGNoYW5nZSB0
aGlzIHRvIHVzZSBEcml2ZXJJbnB1dCBhZnRlcgotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTMwMDQgbGFuZHMgKGl0J3MgbGFuZGVkIGFzIG9mIDIvMy8xMSkuCi1j
bGFzcyBfRFJUSW5wdXQob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6Ci0g
ICAgICAgIHZhbHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIiciKQotICAgICAgICBpZiBsZW4odmFs
cykgPT0gMToKLSAgICAgICAgICAgIHNlbGYudXJpID0gdmFsc1swXQotICAgICAgICAgICAgc2Vs
Zi5jaGVja3N1bSA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYudXJpID0g
dmFsc1swXQotICAgICAgICAgICAgc2VsZi5jaGVja3N1bSA9IHZhbHNbMV0KLQotCiBjbGFzcyBN
b2NrRFJUKG9iamVjdCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRldGVybWluZV9mdWxs
X3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0gICAgICAgICIiIlJl
dHVybiBhIGZ1bGx5LXNwZWNpZmllZCBwb3J0IG5hbWUgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25z
dHJ1Y3Qgb2JqZWN0cy4iIiIKLSAgICAgICAgIyBTdWJjbGFzc2VzIHdpbGwgdXN1YWxseSBvdmVy
cmlkZSB0aGlzLgotICAgICAgICByZXR1cm4gY2xzLnBvcnRfbmFtZQotCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CiAg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdz
CkBAIC0yMDIsOTEgKzE4NywxMDUgQEAgY2xhc3MgTW9ja0RSVChvYmplY3QpOgogICAgICAgICB3
aGlsZSBUcnVlOgogICAgICAgICAgICAgbGluZSA9IHNlbGYuX3N0ZGluLnJlYWRsaW5lKCkKICAg
ICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAg
ICBzZWxmLnJ1bl9vbmVfdGVzdChzZWxmLnBhcnNlX2lucHV0KGxpbmUpKQotICAgICAgICByZXR1
cm4gMAorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBzZWxmLnJ1bl9vbmVf
dGVzdChzZWxmLmlucHV0X2Zyb21fbGluZShsaW5lKSkKIAotICAgIGRlZiBwYXJzZV9pbnB1dChz
ZWxmLCBsaW5lKToKLSAgICAgICAgcmV0dXJuIF9EUlRJbnB1dChsaW5lKQorICAgIGRlZiBpbnB1
dF9mcm9tX2xpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIHZhbHMgPSBsaW5lLnN0cmlwKCkuc3Bs
aXQoIiciKQorICAgICAgICBpZiBsZW4odmFscykgPT0gMToKKyAgICAgICAgICAgIHVyaSA9IHZh
bHNbMF0KKyAgICAgICAgICAgIGNoZWNrc3VtID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgdXJpID0gdmFsc1swXQorICAgICAgICAgICAgY2hlY2tzdW0gPSB2YWxzWzFdCisgICAg
ICAgIGlmIHVyaS5zdGFydHN3aXRoKCdodHRwOi8vJykgb3IgdXJpLnN0YXJ0c3dpdGgoJ2h0dHBz
Oi8vJyk6CisgICAgICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9kcml2ZXIudXJpX3RvX3Rlc3Qo
dXJpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHVyaSkKIAotICAgIGRlZiBydW5fb25lX3Rlc3Qoc2VsZiwg
dGVzdF9pbnB1dCk6CisgICAgICAgIGlzX3JlZnRlc3QgPSAoc2VsZi5fcG9ydC5pc19yZWZ0ZXN0
KHRlc3RfbmFtZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICB0ZXN0X25hbWUuZW5kc3dpdGgo
Jy1leHBlY3RlZC5odG1sJykgb3IKKyAgICAgICAgICAgICAgICAgICAgICB0ZXN0X25hbWUuZW5k
c3dpdGgoJy1taXNtYXRjaC5odG1sJykpCisgICAgICAgIHJldHVybiBEcml2ZXJJbnB1dCh0ZXN0
X25hbWUsIDAsIGNoZWNrc3VtLCBpc19yZWZ0ZXN0KQorCisgICAgZGVmIG91dHB1dF9mb3JfdGVz
dChzZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKLSAgICAgICAg
aWYgdGVzdF9pbnB1dC51cmkuc3RhcnRzd2l0aCgnaHR0cDovLycpIG9yIHRlc3RfaW5wdXQudXJp
LnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJyk6Ci0gICAgICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9k
cml2ZXIudXJpX3RvX3Rlc3QodGVzdF9pbnB1dC51cmkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB0ZXN0X25hbWUgPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC51
cmkpCisgICAgICAgIGFjdHVhbF90ZXh0ID0gcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfaW5wdXQu
dGVzdF9uYW1lKQorICAgICAgICBhY3R1YWxfYXVkaW8gPSBwb3J0LmV4cGVjdGVkX2F1ZGlvKHRl
c3RfaW5wdXQudGVzdF9uYW1lKQorICAgICAgICBhY3R1YWxfaW1hZ2UgPSBOb25lCisgICAgICAg
IGFjdHVhbF9jaGVja3N1bSA9IE5vbmUKKyAgICAgICAgaWYgdGVzdF9pbnB1dC5pc19yZWZ0ZXN0
OgorICAgICAgICAgICAgIyBNYWtlIHVwIHNvbWUgb3V0cHV0IGZvciByZWZ0ZXN0cy4KKyAgICAg
ICAgICAgIGFjdHVhbF90ZXh0ID0gJ3JlZmVyZW5jZSB0ZXh0XG4nCisgICAgICAgICAgICBhY3R1
YWxfY2hlY2tzdW0gPSAnTm9uZScKKyAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9ICdibGFuaycK
KyAgICAgICAgICAgIGlmIHRlc3RfbmFtZS5lbmRzd2l0aCgnLW1pc21hdGNoLmh0bWwnKToKKyAg
ICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSAnVHJ1ZScKKyAgICAgICAgICAgICAgICBh
Y3R1YWxfaW1hZ2UgPSAnbm90IGJsYW5rJworICAgICAgICBlbGlmIHNlbGYuX29wdGlvbnMucGl4
ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGFjdHVhbF9j
aGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9pbnB1dC50ZXN0X25hbWUpCisg
ICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfaW5wdXQu
dGVzdF9uYW1lKQorCisgICAgICAgIHJldHVybiBEcml2ZXJPdXRwdXQoYWN0dWFsX3RleHQsIGFj
dHVhbF9pbWFnZSwgYWN0dWFsX2NoZWNrc3VtLCBhY3R1YWxfYXVkaW8pCiAKLSAgICAgICAgYWN0
dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVkX3RleHQodGVzdF9uYW1lKQotICAgICAgICBhY3R1YWxf
YXVkaW8gPSBwb3J0LmV4cGVjdGVkX2F1ZGlvKHRlc3RfbmFtZSkKLSAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgdGVzdF9pbnB1dC5jaGVja3N1bToKLSAgICAgICAgICAg
IGFjdHVhbF9jaGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9uYW1lKQotICAg
ICAgICAgICAgYWN0dWFsX2ltYWdlID0gcG9ydC5leHBlY3RlZF9pbWFnZSh0ZXN0X25hbWUpCisg
ICAgZGVmIHJ1bl9vbmVfdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgb3V0cHV0ID0g
c2VsZi5vdXRwdXRfZm9yX3Rlc3QodGVzdF9pbnB1dCkKIAotICAgICAgICBpZiBhY3R1YWxfYXVk
aW86CisgICAgICAgIGlmIG91dHB1dC5hdWRpbzoKICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53
cml0ZSgnQ29udGVudC1UeXBlOiBhdWRpby93YXZcbicpCiAgICAgICAgICAgICBzZWxmLl9zdGRv
dXQud3JpdGUoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxuJykKLSAgICAgICAg
ICAgIG91dHB1dCA9IGJhc2U2NC5iNjRlbmNvZGUoYWN0dWFsX2F1ZGlvKQotICAgICAgICAgICAg
c2VsZi5fc3Rkb3V0LndyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0
ZShiYXNlNjQuYjY0ZW5jb2RlKG91dHB1dC5hdWRpbykpCiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxuJykKICAg
ICAgICAgICAgICMgRklYTUU6IE5vdGUgdGhhdCB3ZSBkb24ndCBlbnN1cmUgdGhlcmUgaXMgYSB0
cmFpbGluZyBuZXdsaW5lIQogICAgICAgICAgICAgIyBUaGlzIG1pcnJvcnMgYWN0dWFsIChNYWMp
IERSVCBiZWhhdmlvciBidXQgaXMgYSBidWcuCi0gICAgICAgICAgICBzZWxmLl9zdGRvdXQud3Jp
dGUoYWN0dWFsX3RleHQpCisgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUob3V0cHV0LnRl
eHQpCiAKICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCcjRU9GXG4nKQogCi0gICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQuY2hlY2tzdW06CisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kICh0ZXN0X2lucHV0LmltYWdlX2hh
c2ggb3IgaXNfcmVmdGVzdCk6CiAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ1xuJykK
LSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQWN0dWFsSGFzaDogJXNcbicgJSBhY3R1
YWxfY2hlY2tzdW0pCi0gICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0V4cGVjdGVkSGFz
aDogJXNcbicgJSB0ZXN0X2lucHV0LmNoZWNrc3VtKQotICAgICAgICAgICAgaWYgYWN0dWFsX2No
ZWNrc3VtICE9IHRlc3RfaW5wdXQuY2hlY2tzdW06CisgICAgICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUoJ0FjdHVhbEhhc2g6ICVzXG4nICUgb3V0cHV0LmltYWdlX2hhc2gpCisgICAgICAgICAg
ICBzZWxmLl9zdGRvdXQud3JpdGUoJ0V4cGVjdGVkSGFzaDogJXNcbicgJSB0ZXN0X2lucHV0Lmlt
YWdlX2hhc2gpCisgICAgICAgICAgICBpZiBvdXRwdXQuaW1hZ2VfaGFzaCAhPSB0ZXN0X2lucHV0
LmltYWdlX2hhc2g6CiAgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdDb250ZW50
LVR5cGU6IGltYWdlL3BuZ1xuJykKLSAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUo
J0NvbnRlbnQtTGVuZ3RoOiAlc1xuJyAlIGxlbihhY3R1YWxfaW1hZ2UpKQotICAgICAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dC53cml0ZShhY3R1YWxfaW1hZ2UpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fc3Rkb3V0LndyaXRlKCdDb250ZW50LUxlbmd0aDogJXNcbicgJSBsZW4ob3V0cHV0LmltYWdl
KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUob3V0cHV0LmltYWdlKQogICAg
ICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJyNFT0ZcbicpCiAgICAgICAgIHNlbGYuX3N0ZG91dC5m
bHVzaCgpCisgICAgICAgIHNlbGYuX3N0ZGVyci53cml0ZSgnI0VPRlxuJykKICAgICAgICAgc2Vs
Zi5fc3RkZXJyLmZsdXNoKCkKIAogCi0jIEZJWE1FOiBTaG91bGQgcHJvYmFibHkgY2hhbmdlIHRo
aXMgdG8gdXNlIERyaXZlcklucHV0IGFmdGVyCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MzAwNCBsYW5kcy4KLWNsYXNzIF9DaHJvbWl1bURSVElucHV0KF9EUlRJ
bnB1dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorY2xhc3MgTW9ja0Nocm9taXVt
RFJUKE1vY2tEUlQpOgorICAgIGRlZiBpbnB1dF9mcm9tX2xpbmUoc2VsZiwgbGluZSk6CiAgICAg
ICAgIHZhbHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoKQogICAgICAgICBpZiBsZW4odmFscykgPT0g
MzoKLSAgICAgICAgICAgIHNlbGYudXJpLCBzZWxmLnRpbWVvdXQsIHNlbGYuY2hlY2tzdW0gPSB2
YWxzCisgICAgICAgICAgICB1cmksIHRpbWVvdXQsIGNoZWNrc3VtID0gdmFscwogICAgICAgICBl
bHNlOgotICAgICAgICAgICAgc2VsZi51cmkgPSB2YWxzWzBdCi0gICAgICAgICAgICBzZWxmLnRp
bWVvdXQgPSB2YWxzWzFdCi0gICAgICAgICAgICBzZWxmLmNoZWNrc3VtID0gTm9uZQorICAgICAg
ICAgICAgdXJpLCB0aW1lb3V0ID0gdmFscworICAgICAgICAgICAgY2hlY2tzdW0gPSBOb25lCiAK
KyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fZHJpdmVyLnVyaV90b190ZXN0KHVyaSkKKyAgICAg
ICAgaXNfcmVmdGVzdCA9IChzZWxmLl9wb3J0LmlzX3JlZnRlc3QodGVzdF9uYW1lKSBvcgorICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZS5lbmRzd2l0aCgnLWV4cGVjdGVkLmh0bWwnKSBv
cgorICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZS5lbmRzd2l0aCgnLW1pc21hdGNoLmh0
bWwnKSkKIAotY2xhc3MgTW9ja0Nocm9taXVtRFJUKE1vY2tEUlQpOgotICAgIGRlZiBwYXJzZV9p
bnB1dChzZWxmLCBsaW5lKToKLSAgICAgICAgcmV0dXJuIF9DaHJvbWl1bURSVElucHV0KGxpbmUp
CisgICAgICAgIHJldHVybiBEcml2ZXJJbnB1dCh0ZXN0X25hbWUsIHRpbWVvdXQsIGNoZWNrc3Vt
LCBpc19yZWZ0ZXN0KQogCiAgICAgZGVmIHJ1bl9vbmVfdGVzdChzZWxmLCB0ZXN0X2lucHV0KToK
LSAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKLSAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fZHJp
dmVyLnVyaV90b190ZXN0KHRlc3RfaW5wdXQudXJpKQotCi0gICAgICAgIGFjdHVhbF90ZXh0ID0g
cG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfbmFtZSkKLSAgICAgICAgYWN0dWFsX2ltYWdlID0gJycK
LSAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gJycKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5w
aXhlbF90ZXN0cyBhbmQgdGVzdF9pbnB1dC5jaGVja3N1bToKLSAgICAgICAgICAgIGFjdHVhbF9j
aGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9uYW1lKQotICAgICAgICAgICAg
aWYgYWN0dWFsX2NoZWNrc3VtICE9IHRlc3RfaW5wdXQuY2hlY2tzdW06Ci0gICAgICAgICAgICAg
ICAgYWN0dWFsX2ltYWdlID0gcG9ydC5leHBlY3RlZF9pbWFnZSh0ZXN0X25hbWUpCi0KLSAgICAg
ICAgc2VsZi5fc3Rkb3V0LndyaXRlKCIjVVJMOiVzXG4iICUgdGVzdF9pbnB1dC51cmkpCi0gICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQuY2hlY2tzdW06
Ci0gICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIiNNRDU6JXNcbiIgJSBhY3R1YWxfY2hl
Y2tzdW0pCisgICAgICAgIG91dHB1dCA9IHNlbGYub3V0cHV0X2Zvcl90ZXN0KHRlc3RfaW5wdXQp
CisKKyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCIjVVJMOiVzXG4iICUgc2VsZi5fZHJpdmVy
LnRlc3RfdG9fdXJpKHRlc3RfaW5wdXQudGVzdF9uYW1lKSkKKyAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5waXhlbF90ZXN0cyBhbmQgKHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCBvciB0ZXN0X2lucHV0
LmlzX3JlZnRlc3QpOgorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCIjTUQ1OiVzXG4i
ICUgb3V0cHV0LmltYWdlX2hhc2gpCiAgICAgICAgICAgICBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0u
d3JpdGVfYmluYXJ5X2ZpbGUoc2VsZi5fb3B0aW9ucy5waXhlbF9wYXRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2UpCi0gICAgICAg
IHNlbGYuX3N0ZG91dC53cml0ZShhY3R1YWxfdGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuaW1hZ2UpCisgICAgICAgIHNlbGYu
X3N0ZG91dC53cml0ZShvdXRwdXQudGV4dCkKIAogICAgICAgICAjIEZJWE1FOiAoU2VlIGFib3Zl
IEZJWE1FIGFzIHdlbGwpLiBDaHJvbWl1bSBEUlQgYXBwZWFycyB0byBhbHdheXMKICAgICAgICAg
IyBlbnN1cmUgdGhlIHRleHQgb3V0cHV0IGhhcyBhIHRyYWlsaW5nIG5ld2xpbmUuIE1hYyBEUlQg
ZG9lcyBub3QuCi0gICAgICAgIGlmIG5vdCBhY3R1YWxfdGV4dC5lbmRzd2l0aCgnXG4nKToKKyAg
ICAgICAgaWYgbm90IG91dHB1dC50ZXh0LmVuZHN3aXRoKCdcbicpOgogICAgICAgICAgICAgc2Vs
Zi5fc3Rkb3V0LndyaXRlKCdcbicpCiAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnI0VPRlxu
JykKICAgICAgICAgc2VsZi5fc3Rkb3V0LmZsdXNoKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5
CmluZGV4IDJmMGE4OTQzYTE3NjE3ZDhiNDBkNjE0ZWRmODYzYzczNWU4ZTBhNDguLmVkODhlOGI3
Y2Y3Y2ZmNGMwYzZmMjhhMzViOGYxNzkzZjEwZjY2ZWUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVz
dC5weQpAQCAtMTYzLDcgKzE2Myw3IEBAIGNsYXNzIE1vY2tEUlRUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgIyBXZSB1c2UgdGhlIFN0cmluZ0lPLmJ1Zmxpc3QgaGVyZSBpbnN0ZWFk
IG9mIGdldHZhbHVlKCkgYmVjYXVzZQogICAgICAgICAjIHRoZSBTdHJpbmdJTyBtaWdodCBiZSBh
IG1peCBvZiB1bmljb2RlL2FzY2lpIGFuZCA4LWJpdCBzdHJpbmdzLgogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHN0ZG91dC5idWZsaXN0LCBkcnRfb3V0cHV0KQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHN0ZGVyci5nZXR2YWx1ZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
dGRlcnIuZ2V0dmFsdWUoKSwgJycgaWYgb3B0aW9ucy5jaHJvbWl1bSBlbHNlICcjRU9GXG4nKQog
CiAgICAgZGVmIHRlc3RfbWFpbihzZWxmKToKICAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKaW5kZXggNDhm
OTBhNGY0YTIxZWI4NjQ0ZjI3ZjllYTMyOTdhYTVhY2FiOTQzYS4uYmVjNzIwODA1MWM1OWRkMTk3
ZWMwMGIzZDRlNGYwZTdjNTIwMjI5NyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRl
Z3JhdGlvbnRlc3QucHkKQEAgLTkyMywyMSArOTIzLDUgQEAgY2xhc3MgUmViYXNlbGluZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgIi9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9w
YXJkL2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UiLCBbIi50eHQiLCAiLnBuZyJdLCBl
cnIpCiAKIAotY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIyBGSVhN
RTogaXQncyBoYXJkIHRvIGtub3cgd2hpY2ggcGxhdGZvcm1zIGFyZSBzYWZlIHRvIHRlc3Q7IHRo
ZQotICAgICMgY2hyb21pdW0gcGxhdGZvcm1zIHJlcXVpcmUgYSBjaHJvbWl1bSBjaGVja291dCwg
YW5kIHRoZSBtYWMgcGxhdGZvcm0KLSAgICAjIHJlcXVpcmVzIGZjbnRsLCBzbyBpdCBjYW4ndCBi
ZSB0ZXN0ZWQgb24gd2luMzIsIGV0Yy4gVGhlcmUgaXMKLSAgICAjIHByb2JhYmx5IGEgYmV0dGVy
IHdheSBvZiBoYW5kbGluZyB0aGlzLgotICAgIGRlZiBkaXNhYmxlZF90ZXN0X2RhcndpbihzZWxm
KToKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iOgotICAgICAgICAgICAgcmV0
dXJuCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScs
ICdkcnlydW4nLCAnZmFzdC9odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1tYWMnLCAn
ZmFzdC9odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpKQotCi0gICAgZGVmIHRlc3RfdGVzdChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScs
ICdkcnlydW4tdGVzdCcsICctLXBpeGVsLXRlc3RzJ10pKQotCi0KIGlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124837</attachid>
            <date>2012-01-31 15:51:52 -0800</date>
            <delta_ts>2012-01-31 15:55:54 -0800</delta_ts>
            <desc>remove abspath call, fix nit in changelog</desc>
            <filename>bug-77170-20120131155151.patch</filename>
            <type>text/plain</type>
            <size>23502</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDA4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDkxOGMwNGQ2MmUzMWU2NGRiOTZhMGIyMWY2ZGY2NjIy
ODk5NmM0YS4uMjAyMzkyYmY3MGMxZjc1OThhOTJiMGFlNGU0OTZiYzUwMGQxYzQwNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDEyLTAxLTMxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIG5yd3Q6IGZpeCB0aGUgbW9jayBwb3J0IHRvIHdvcmsgd2l0aCBEcml2ZXJQcm94eSwg
cmVmdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc3MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIERyeXJ1blBvcnQgdXNlZCBmb3IgYmVuY2htYXJraW5nIGFuZCB0ZXN0aW5nIE5SV1QgaGFz
IGJlZW4KKyAgICAgICAgYnJva2VuIHNpbmNlIHdlIGFkZGVkIHRoZSBEcml2ZXJQcm94eSBjb2Rl
LiBJdCBpc24ndCByZWFsbHkKKyAgICAgICAgbmVlZGVkIGFueSBtb3JlLCBzbyBJJ3ZlIHJlbW92
ZWQgaXQuCisKKyAgICAgICAgVGhlIE1vY2tEUlQgcG9ydCB3YXMgYWxzbyBicm9rZW4gYnkgRHJp
dmVyUHJveHksIGFuZCBtb3Jlb3ZlciwKKyAgICAgICAgbmV2ZXIgd29ya2VkIHcvIHJlZnRlc3Rz
LiBTaW5jZSB3ZSBkb24ndCBleGVyY2lzZSB0aGlzIG1vZHVsZSBpbgorICAgICAgICB0aGUgdW5p
dCB0ZXN0cywgdGhlIGNvZGUgaGFkIGFsc28gYml0cm90dGVkIHNvbWUuIEkgaGF2ZSBjbGVhbmVk
CisgICAgICAgIGl0IHVwIGFuZCBtYWRlIGl0IHVzZSBEcml2ZXJJbnB1dCBhbmQgRHJpdmVyT3V0
cHV0IGZvcgorICAgICAgICBjb25zaXN0ZW5jeS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OgorICAgICAgICAoRHJ5UnVuUG9ydC5fX2lu
aXRfXyk6CisgICAgICAgIChEcnlSdW5Qb3J0KToKKyAgICAgICAgKERyeVJ1blBvcnQucmVhbF9u
YW1lKToKKyAgICAgICAgKERyeVJ1blBvcnQuY3JlYXRlX2RyaXZlcik6CisgICAgICAgIChEcnlS
dW5Qb3J0LmRyaXZlcl9jbWRfbGluZSk6CisgICAgICAgIChEcnlSdW5Qb3J0Ll9kcml2ZXJfY2xh
c3MpOgorICAgICAgICAoRHJ5cnVuRHJpdmVyKToKKyAgICAgICAgKERyeXJ1bkRyaXZlci5ydW5f
dGVzdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2Nr
X2RydC5weToKKyAgICAgICAgKE1vY2tEUlRQb3J0LmNyZWF0ZV9kcml2ZXIpOgorICAgICAgICAo
TW9ja0Nocm9taXVtRFJULnJ1bl9vbmVfdGVzdCk6CisKIDIwMTItMDEtMzEgIEVoc2FuIEFraGdh
cmkgIDxlaHNhbi5ha2hnYXJpQGdtYWlsLmNvbT4KIAogICAgICAgICBGaXggdGhlIHVwZGF0ZV93
ZWJnbF9jb25mb3JtYW5jZV90ZXN0cy5weSBzY3JpcHQgaW4gb3JkZXIgdG8gZW5hYmxlIGl0CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1
bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDJhYmVlZWRkZmIzOTRiMTZlYmZiMGE4
MzM2ZGU3OGVmOWMxODRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgot
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0iIiJUaGlzIGlzIGEgdGVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBp
bnRlcmZhY2UgdGhhdCBnZW5lcmF0ZXMgdGhlCi0gICBjb3JyZWN0IG91dHB1dCBmb3IgZXZlcnkg
dGVzdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHBlcmYgdGVzdGluZywgYmVjYXVzZQotICAgaXQgaXMg
cHJldHR5IG11Y2ggYSBsb3dlciBsaW1pdCBvbiBob3cgZmFzdCBhIHBvcnQgY2FuIHBvc3NpYmx5
IHJ1bi4KLQotICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhY3RzIGFzIGEgd3JhcHBlciBhcm91bmQg
YSByZWFsIHBvcnQgKHRoZSByZWFsIHBvcnQKLSAgIGlzIGhlbGQgYXMgYSBkZWxlZ2F0ZSBvYmpl
Y3QpLiBUbyBzcGVjaWZ5IHdoaWNoIHBvcnQsIHVzZSB0aGUgcG9ydCBuYW1lCi0gICAnZHJ5cnVu
LVhYWCcgKGUuZy4sICdkcnlydW4tY2hyb21pdW0tbWFjLWxlb3BhcmQnKS4gSWYgeW91IHVzZSBq
dXN0Ci0gICAnZHJ5cnVuJywgaXQgdXNlcyB0aGUgZGVmYXVsdCBwb3J0LgotCi0gICBOb3RlIHRo
YXQgYmVjYXVzZSB0aGlzIGlzIHJlYWxseSBhY3RpbmcgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUg
dW5kZXJseWluZwotICAgcG9ydCwgeW91IG11c3QgYmUgYWJsZSB0byBydW4gdGhlIHVuZGVybHlp
bmcgcG9ydCBhcyB3ZWxsCi0gICAoY2hlY2tfYnVpbGQoKSBhbmQgY2hlY2tfc3lzX2RlcHMoKSBt
dXN0IHBhc3MgYW5kIGF1eGlsaWFyeSBiaW5hcmllcwotICAgbGlrZSBsYXlvdXRfdGVzdF9oZWxw
ZXIgYW5kIGh0dHBkIG11c3Qgd29yaykuCi0KLSAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBt
b2RpZmllcyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgc28gdGhhdCBhbGwKLSAgIHRlc3RzIGFyZSBl
aXRoZXIgU0tJUFBFRCBvciBleHBlY3RlZCB0byBQQVNTLiIiIgotCi1mcm9tIF9fZnV0dXJlX18g
aW1wb3J0IHdpdGhfc3RhdGVtZW50Ci0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRp
bWUKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgRHJpdmVyLCBEcml2
ZXJPdXRwdXQsIGZhY3RvcnkKLQotCi0jIE5vdGUgdGhhdCB3ZSBkb24ndCBpbmhlcml0IGZyb20g
YmFzZS5Qb3J0IGluIG9yZGVyIGZvciBkZWxlZ2F0aW9uIHRvCi0jIHdvcmsgcHJvcGVybHk6IGV4
Y2VwdCBmb3IgdGhlIG1ldGhvZHMgZGVmaW5lZCBoZXJlLCB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0
Ci0jIGFsbCBvZiB0aGUgbWV0aG9kcyBhcmUgcGFzc2VkIHRvIHRoZSBfX2RlbGVnYXRlLCBub3Qg
dG8gdGhlIGJhc2UgY2xhc3MuCi1jbGFzcyBEcnlSdW5Qb3J0KG9iamVjdCk6Ci0gICAgIiIiRHJ5
UnVuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKLSAgICBwb3J0X25h
bWUgPSAnZHJ5cnVuJwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRldGVybWluZV9mdWxs
X3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0gICAgICAgICIiIlJl
dHVybiBhIGZ1bGx5LXNwZWNpZmllZCBwb3J0IG5hbWUgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25z
dHJ1Y3Qgb2JqZWN0cy4iIiIKLSAgICAgICAgIyBTdWJjbGFzc2VzIHdpbGwgdXN1YWxseSBvdmVy
cmlkZSB0aGlzLgotICAgICAgICByZXR1cm4gcG9ydF9uYW1lCi0KLSAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIHNlbGYuX19kZWxlZ2F0
ZSA9IGZhY3RvcnkuUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFtZS5yZXBsYWNlKCdkcnly
dW4tJywgJycpLCAqKmt3YXJncykKLQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToK
LSAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQotCi0gICAgZGVm
IGFjcXVpcmVfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmVsZWFz
ZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBjaGVja19idWlsZChz
ZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBjaGVja19z
eXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBzdGFydF9oZWxwZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdGFydF9odHRw
X3NlcnZlcihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9z
ZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToK
LSAgICAgICAgcGFzcwotCi0gICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoc2VsZik6Ci0gICAgICAg
IHBhc3MKLQotICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHBh
c3MKLQotICAgIGRlZiBkcml2ZXJfY2xhc3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBEcnlydW5E
cml2ZXIKLQotCi1jbGFzcyBEcnlydW5Ecml2ZXIoRHJpdmVyKToKLSAgICAiIiJEcnlydW4gaW1w
bGVtZW50YXRpb24gb2YgdGhlIER1bXBSZW5kZXJUcmVlIC8gRHJpdmVyIGludGVyZmFjZS4iIiIK
LQotICAgIGRlZiBjbWRfbGluZShzZWxmKToKLSAgICAgICAgcmV0dXJuIFsnTm9uZSddCi0KLSAg
ICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0KToKLSAgICAgICAgc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCi0gICAgICAgIGZzID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQotICAgICAg
ICBpZiAoc2VsZi5fcG9ydC5pc19yZWZ0ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpIG9yIGRy
aXZlcl9pbnB1dC50ZXN0X25hbWUuZW5kc3dpdGgoJy1leHBlY3RlZC5odG1sJykpOgotICAgICAg
ICAgICAgdGV4dCA9ICd0ZXN0LXRleHQnCi0gICAgICAgICAgICBpbWFnZSA9ICd0ZXN0LWltYWdl
JwotICAgICAgICAgICAgY2hlY2tzdW0gPSAndGVzdC1jaGVja3N1bScKLSAgICAgICAgICAgIGF1
ZGlvID0gTm9uZQotICAgICAgICBlbGlmIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUuZW5kc3dpdGgo
Jy1leHBlY3RlZC1taXNtYXRjaC5odG1sJyk6Ci0gICAgICAgICAgICB0ZXh0ID0gJ3Rlc3QtdGV4
dC1taXNtYXRjaCcKLSAgICAgICAgICAgIGltYWdlID0gJ3Rlc3QtaW1hZ2UtbWlzbWF0Y2gnCi0g
ICAgICAgICAgICBjaGVja3N1bSA9ICd0ZXN0LWNoZWNrc3VtLW1pc21hdGNoJwotICAgICAgICAg
ICAgYXVkaW8gPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0ZXh0ID0gc2VsZi5f
cG9ydC5leHBlY3RlZF90ZXh0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgICAgICBp
bWFnZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfaW1hZ2UoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkK
LSAgICAgICAgICAgIGNoZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShkcml2
ZXJfaW5wdXQudGVzdF9uYW1lKQotICAgICAgICAgICAgYXVkaW8gPSBzZWxmLl9wb3J0LmV4cGVj
dGVkX2F1ZGlvKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgIHJldHVybiBEcml2ZXJP
dXRwdXQodGV4dCwgaW1hZ2UsIGNoZWNrc3VtLCBhdWRpbywgY3Jhc2g9RmFsc2UsIHRlc3RfdGlt
ZT10aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsIHRpbWVvdXQ9RmFsc2UsIGVycm9yPScnKQotCi0g
ICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQppbmRleCAxYWQzYzAyZWYwNzk1
NzY0OGUyMWFmMjY5NmY5ZDY5YWUwZjliN2U1Li5hOGExY2QwZThiMzE4NGQ2ODBmMmFhZDUxNjZm
OTU2Yjc5N2VlMDJjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2ZhY3RvcnkucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9mYWN0b3J5LnB5CkBAIC00OCw3ICs0OCw2IEBAIGNsYXNzIFBvcnRGYWN0b3J5
KG9iamVjdCk6CiAgICAgICAgICdjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCcsCiAg
ICAgICAgICdjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0JywKICAgICAgICAgJ2Nocm9taXVt
X3dpbi5DaHJvbWl1bVdpblBvcnQnLAotICAgICAgICAnZHJ5cnVuLkRyeVJ1blBvcnQnLAogICAg
ICAgICAnZWZsLkVmbFBvcnQnLAogICAgICAgICAnZ29vZ2xlX2Nocm9tZS5Hb29nbGVDaHJvbWVM
aW51eDMyUG9ydCcsCiAgICAgICAgICdnb29nbGVfY2hyb21lLkdvb2dsZUNocm9tZUxpbnV4NjRQ
b3J0JywKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvZmFjdG9yeV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQppbmRleCA4ODI4NTE4NWY3YjM3ZDQ2NGI1ODE3
Y2NlZDcwMTlmNmM4YjlmMDcwLi5lNjQ3OGVlZmM1OGFlOGZkZDgyNTAxZGY3MmZlNWNhNzUxOTQ2
ZjVhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2ZhY3RvcnlfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CkBAIC0zNSw3ICszNSw2IEBAIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX2dwdQogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW1fbGludXgKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX21hYwogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW1fd2luCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBkcnlydW4KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQg
aW1wb3J0IGZhY3RvcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGdv
b2dsZV9jaHJvbWUKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGd0awpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2Nr
X2RydC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19k
cnQucHkKaW5kZXggZjI4NGU3NjlmZTkyM2Y3OTA3ZGEyOGZlYzc0YzZhODI4M2YyNjM3Ni4uZjQ2
OTY2OThmNmM3NzVkOTBmYWNjM2JhNDRiMDc3M2QwYzQ5ZjBmMCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CkBAIC0xLDUg
KzEsNSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTM5LDkgKzM5LDE3IEBAIE1vY2tEUlQgdG8gY3Jhc2gpLgogCiBpbXBvcnQgYmFzZTY0
CiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKKyMgU2luY2Ugd2UgZXhl
Y3V0ZSB0aGlzIHNjcmlwdCBkaXJlY3RseSBhcyBwYXJ0IG9mIHRoZSB1bml0IHRlc3RzLCB3ZSBu
ZWVkIHRvIGVuc3VyZQorIyB0aGF0IFRvb2xzL1NjcmlwdHMgaXMgaW4gc3lzLnBhdGggZm9yIHRo
ZSBuZXh0IGltcG9ydHMgdG8gd29yayBjb3JyZWN0bHkuCitzY3JpcHRfZGlyID0gb3MucGF0aC5k
aXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9z
LnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpCitpZiBzY3JpcHRfZGlyIG5vdCBpbiBzeXMucGF0
aDoKKyAgICBzeXMucGF0aC5hcHBlbmQoc2NyaXB0X2RpcikKKwogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJJbnB1dCwgRHJpdmVyT3V0cHV0LCBE
cml2ZXJQcm94eQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5mYWN0b3J5IGltcG9y
dCBQb3J0RmFjdG9yeQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0
aW9ucwogCkBAIC00OSwxOSArNTcsMTUgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFt
ZV9fKQogCiAKIGNsYXNzIE1vY2tEUlRQb3J0KG9iamVjdCk6Ci0gICAgIiIiTW9ja1BvcnQgaW1w
bGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgogICAgIHBvcnRfbmFtZSA9ICdt
b2NrJwogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFt
ZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiBhIGZ1
bGx5LXNwZWNpZmllZCBwb3J0IG5hbWUgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3Qgb2Jq
ZWN0cy4iIiIKLSAgICAgICAgIyBTdWJjbGFzc2VzIHdpbGwgdXN1YWxseSBvdmVycmlkZSB0aGlz
LgogICAgICAgICByZXR1cm4gcG9ydF9uYW1lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYuX19kZWxlZ2F0ZSA9IFBvcnRG
YWN0b3J5KGhvc3QpLmdldChwb3J0X25hbWUucmVwbGFjZSgnbW9jay0nLCAnJyksICoqa3dhcmdz
KQogICAgICAgICBzZWxmLl9fcmVhbF9uYW1lID0gcG9ydF9uYW1lCi0gICAgICAgIHNlbGYuX2hv
c3QgPSBob3N0CiAKICAgICBkZWYgcmVhbF9uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5fX3JlYWxfbmFtZQpAQCAtNzUsMzEgKzc5LDMxIEBAIGNsYXNzIE1vY2tEUlRQb3J0KG9iamVj
dCk6CiAgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICBy
ZXR1cm4gVHJ1ZQogCi0gICAgZGVmIGRyaXZlcl9jbWRfbGluZShzZWxmKToKLSAgICAgICAgZHJp
dmVyID0gc2VsZi5jcmVhdGVfZHJpdmVyKDApCi0gICAgICAgIHJldHVybiBkcml2ZXIuY21kX2xp
bmUoKQotCi0gICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX2hvc3QuZmlsZXN5c3RlbS5hYnNwYXRoKF9fZmlsZV9fKQotCi0gICAgZGVmIGNyZWF0ZV9k
cml2ZXIoc2VsZiwgd29ya2VyX251bWJlcik6Ci0gICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUg
YSBkcml2ZXIgb2JqZWN0IGFzIHRoZSBkZWxlZ2F0ZSB3b3VsZCwgYnV0Ci0gICAgICAgICMgb3Zl
cndyaXRlIHRoZSBwYXRoIHRvIHRoZSBkcml2ZXIgYmluYXJ5IGluIGl0cyBjb21tYW5kIGxpbmUu
IFdlIGRvCi0gICAgICAgICMgdGhpcyBieSBhY3R1YWxseSBvdmVyd3JpdGluZyBpdHMgY21kX2xp
bmUoKSBtZXRob2Qgd2l0aCBhIHByb3h5Ci0gICAgICAgICMgbWV0aG9kIHRoYXQgc3BsaWNlcyBp
biB0aGUgbW9ja19kcnQgcGF0aCBhbmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwotICAgICAgICAj
IGluIHBsYWNlIG9mIHRoZSBhY3R1YWwgcGF0aCB0byB0aGUgZHJpdmVyIGJpbmFyeS4KLQotICAg
ICAgICBkZWYgb3ZlcnJpZGluZ19jbWRfbGluZSgpOgotICAgICAgICAgICAgY21kID0gc2VsZi5f
X29yaWdpbmFsX2RyaXZlcl9jbWRfbGluZSgpCi0gICAgICAgICAgICBpbmRleCA9IGNtZC5pbmRl
eChzZWxmLl9fZGVsZWdhdGUuX3BhdGhfdG9fZHJpdmVyKCkpCi0gICAgICAgICAgICAjIEZJWE1F
OiBXaHkgZG9lcyB0aGlzIG5lZWQgdG8gdXNlIHN5cy5leGVjdXRhYmxlIChpbnN0ZWFkIG9mIHNv
bWV0aGluZyBtb2NrYWJsZSk/Ci0gICAgICAgICAgICBjbWRbaW5kZXg6aW5kZXggKyAxXSA9IFtz
eXMuZXhlY3V0YWJsZSwgc2VsZi5fcGF0aF90b19kcml2ZXIoKSwgJy0tcGxhdGZvcm0nLCBzZWxm
Lm5hbWUoKV0KLSAgICAgICAgICAgIHJldHVybiBjbWQKLQotICAgICAgICBkZWxlZ2F0ZWRfZHJp
dmVyID0gc2VsZi5fX2RlbGVnYXRlLmNyZWF0ZV9kcml2ZXIod29ya2VyX251bWJlcikKLSAgICAg
ICAgc2VsZi5fX29yaWdpbmFsX2RyaXZlcl9jbWRfbGluZSA9IGRlbGVnYXRlZF9kcml2ZXIuY21k
X2xpbmUKLSAgICAgICAgZGVsZWdhdGVkX2RyaXZlci5jbWRfbGluZSA9IG92ZXJyaWRpbmdfY21k
X2xpbmUKLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlZF9kcml2ZXIKKyAgICBkZWYgY3JlYXRlX2Ry
aXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCBub190aW1lb3V0PUZhbHNlKToKKyAgICAgICAgIyBU
aGUgbWFnaWMgb2YgdGhlIE1vY2tEUlRQb3J0IGlzIHRoYXQgd2UgY3JlYXRlIGEgZHJpdmVyIHRo
YXQgaGFzIGEKKyAgICAgICAgIyBjbWRfbGluZSgpIG1ldGhvZCBtb25rZXktcGF0Y2hlZCB0byBp
bnZva2UgdGhpcyBzY3JpcHQgaW5zdGVhZCBvZiBEUlQuCisgICAgICAgIHJldHVybiBEcml2ZXJQ
cm94eShzZWxmLCB3b3JrZXJfbnVtYmVyLCBzZWxmLl9tb2NrZWRfZHJpdmVyX21ha2VyLCBwaXhl
bF90ZXN0cz1zZWxmLmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyksIG5vX3RpbWVvdXQ9bm9fdGlt
ZW91dCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21vY2tlZF9kcml2ZXJfbWFrZXIo
cG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2UpOgorICAg
ICAgICBwYXRoX3RvX3RoaXNfZmlsZSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtLmFic3BhdGgoX19m
aWxlX18ucmVwbGFjZSgnLnB5YycsICcucHknKSkKKyAgICAgICAgZHJpdmVyID0gcG9ydC5fX2Rl
bGVnYXRlLl9kcml2ZXJfY2xhc3MoKShwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywg
bm9fdGltZW91dCkKKyAgICAgICAgZHJpdmVyLmNtZF9saW5lID0gcG9ydC5fb3ZlcnJpZGluZ19j
bWRfbGluZShkcml2ZXIuY21kX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9ydC5fX2RlbGVnYXRlLl9wYXRoX3RvX2RyaXZlcigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5l
eGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGhfdG9fdGhpc19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX19kZWxlZ2F0ZS5uYW1lKCkpCisgICAgICAgIHJl
dHVybiBkcml2ZXIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX292ZXJyaWRpbmdfY21k
X2xpbmUob3JpZ2luYWxfY21kX2xpbmUsIGRyaXZlcl9wYXRoLCBweXRob25fZXhlLCB0aGlzX2Zp
bGUsIHBvcnRfbmFtZSk6CisgICAgICAgIGRlZiBuZXdfY21kX2xpbmUoKToKKyAgICAgICAgICAg
IGNtZF9saW5lID0gb3JpZ2luYWxfY21kX2xpbmUoKQorICAgICAgICAgICAgaW5kZXggPSBjbWRf
bGluZS5pbmRleChkcml2ZXJfcGF0aCkKKyAgICAgICAgICAgIGNtZF9saW5lW2luZGV4OmluZGV4
ICsgMV0gPSBbcHl0aG9uX2V4ZSwgdGhpc19maWxlLCAnLS1wbGF0Zm9ybScsIHBvcnRfbmFtZV0K
KyAgICAgICAgICAgIHJldHVybiBjbWRfbGluZQorCisgICAgICAgIHJldHVybiBuZXdfY21kX2xp
bmUKIAogICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTE2NCwy
NiArMTY4LDcgQEAgZGVmIHBhcnNlX29wdGlvbnMoYXJndik6CiAgICAgcmV0dXJuIChvcHRpb25z
LCBbXSkKIAogCi0jIEZJWE1FOiBTaG91bGQgcHJvYmFibHkgY2hhbmdlIHRoaXMgdG8gdXNlIERy
aXZlcklucHV0IGFmdGVyCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MzAwNCBsYW5kcyAoaXQncyBsYW5kZWQgYXMgb2YgMi8zLzExKS4KLWNsYXNzIF9EUlRJbnB1
dChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKLSAgICAgICAgdmFscyA9
IGxpbmUuc3RyaXAoKS5zcGxpdCgiJyIpCi0gICAgICAgIGlmIGxlbih2YWxzKSA9PSAxOgotICAg
ICAgICAgICAgc2VsZi51cmkgPSB2YWxzWzBdCi0gICAgICAgICAgICBzZWxmLmNoZWNrc3VtID0g
Tm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi51cmkgPSB2YWxzWzBdCi0gICAg
ICAgICAgICBzZWxmLmNoZWNrc3VtID0gdmFsc1sxXQotCi0KIGNsYXNzIE1vY2tEUlQob2JqZWN0
KToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNs
cywgaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKToKLSAgICAgICAgIiIiUmV0dXJuIGEgZnVsbHkt
c3BlY2lmaWVkIHBvcnQgbmFtZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBvYmplY3Rz
LiIiIgotICAgICAgICAjIFN1YmNsYXNzZXMgd2lsbCB1c3VhbGx5IG92ZXJyaWRlIHRoaXMuCi0g
ICAgICAgIHJldHVybiBjbHMucG9ydF9uYW1lCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0
aW9ucywgYXJncywgaG9zdCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKICAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKQEAgLTIwMiw5MSAr
MTg3LDEwNSBAQCBjbGFzcyBNb2NrRFJUKG9iamVjdCk6CiAgICAgICAgIHdoaWxlIFRydWU6CiAg
ICAgICAgICAgICBsaW5lID0gc2VsZi5fc3RkaW4ucmVhZGxpbmUoKQogICAgICAgICAgICAgaWYg
bm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHNlbGYucnVuX29u
ZV90ZXN0KHNlbGYucGFyc2VfaW5wdXQobGluZSkpCi0gICAgICAgIHJldHVybiAwCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHNlbGYucnVuX29uZV90ZXN0KHNlbGYuaW5w
dXRfZnJvbV9saW5lKGxpbmUpKQogCi0gICAgZGVmIHBhcnNlX2lucHV0KHNlbGYsIGxpbmUpOgot
ICAgICAgICByZXR1cm4gX0RSVElucHV0KGxpbmUpCisgICAgZGVmIGlucHV0X2Zyb21fbGluZShz
ZWxmLCBsaW5lKToKKyAgICAgICAgdmFscyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiJyIpCisgICAg
ICAgIGlmIGxlbih2YWxzKSA9PSAxOgorICAgICAgICAgICAgdXJpID0gdmFsc1swXQorICAgICAg
ICAgICAgY2hlY2tzdW0gPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1cmkgPSB2
YWxzWzBdCisgICAgICAgICAgICBjaGVja3N1bSA9IHZhbHNbMV0KKyAgICAgICAgaWYgdXJpLnN0
YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBvciB1cmkuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKToKKyAgICAg
ICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX2RyaXZlci51cmlfdG9fdGVzdCh1cmkpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUodXJpKQogCi0gICAgZGVmIHJ1bl9vbmVfdGVzdChzZWxmLCB0ZXN0X2lucHV0KToK
KyAgICAgICAgaXNfcmVmdGVzdCA9IChzZWxmLl9wb3J0LmlzX3JlZnRlc3QodGVzdF9uYW1lKSBv
cgorICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZS5lbmRzd2l0aCgnLWV4cGVjdGVkLmh0
bWwnKSBvcgorICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZS5lbmRzd2l0aCgnLW1pc21h
dGNoLmh0bWwnKSkKKyAgICAgICAgcmV0dXJuIERyaXZlcklucHV0KHRlc3RfbmFtZSwgMCwgY2hl
Y2tzdW0sIGlzX3JlZnRlc3QpCisKKyAgICBkZWYgb3V0cHV0X2Zvcl90ZXN0KHNlbGYsIHRlc3Rf
aW5wdXQpOgogICAgICAgICBwb3J0ID0gc2VsZi5fcG9ydAotICAgICAgICBpZiB0ZXN0X2lucHV0
LnVyaS5zdGFydHN3aXRoKCdodHRwOi8vJykgb3IgdGVzdF9pbnB1dC51cmkuc3RhcnRzd2l0aCgn
aHR0cHM6Ly8nKToKLSAgICAgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX2RyaXZlci51cmlfdG9f
dGVzdCh0ZXN0X2lucHV0LnVyaSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3RfbmFt
ZSA9IHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LnVyaSkKKyAgICAgICAg
YWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVkX3RleHQodGVzdF9pbnB1dC50ZXN0X25hbWUpCisg
ICAgICAgIGFjdHVhbF9hdWRpbyA9IHBvcnQuZXhwZWN0ZWRfYXVkaW8odGVzdF9pbnB1dC50ZXN0
X25hbWUpCisgICAgICAgIGFjdHVhbF9pbWFnZSA9IE5vbmUKKyAgICAgICAgYWN0dWFsX2NoZWNr
c3VtID0gTm9uZQorICAgICAgICBpZiB0ZXN0X2lucHV0LmlzX3JlZnRlc3Q6CisgICAgICAgICAg
ICAjIE1ha2UgdXAgc29tZSBvdXRwdXQgZm9yIHJlZnRlc3RzLgorICAgICAgICAgICAgYWN0dWFs
X3RleHQgPSAncmVmZXJlbmNlIHRleHRcbicKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9
ICdOb25lJworICAgICAgICAgICAgYWN0dWFsX2ltYWdlID0gJ2JsYW5rJworICAgICAgICAgICAg
aWYgdGVzdF9uYW1lLmVuZHN3aXRoKCctbWlzbWF0Y2guaHRtbCcpOgorICAgICAgICAgICAgICAg
IGFjdHVhbF9jaGVja3N1bSA9ICdUcnVlJworICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9
ICdub3QgYmxhbmsnCisgICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQg
dGVzdF9pbnB1dC5pbWFnZV9oYXNoOgorICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gcG9y
dC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X2lucHV0LnRlc3RfbmFtZSkKKyAgICAgICAgICAgIGFj
dHVhbF9pbWFnZSA9IHBvcnQuZXhwZWN0ZWRfaW1hZ2UodGVzdF9pbnB1dC50ZXN0X25hbWUpCisK
KyAgICAgICAgcmV0dXJuIERyaXZlck91dHB1dChhY3R1YWxfdGV4dCwgYWN0dWFsX2ltYWdlLCBh
Y3R1YWxfY2hlY2tzdW0sIGFjdHVhbF9hdWRpbykKIAotICAgICAgICBhY3R1YWxfdGV4dCA9IHBv
cnQuZXhwZWN0ZWRfdGV4dCh0ZXN0X25hbWUpCi0gICAgICAgIGFjdHVhbF9hdWRpbyA9IHBvcnQu
ZXhwZWN0ZWRfYXVkaW8odGVzdF9uYW1lKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzIGFuZCB0ZXN0X2lucHV0LmNoZWNrc3VtOgotICAgICAgICAgICAgYWN0dWFsX2NoZWNr
c3VtID0gcG9ydC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X25hbWUpCi0gICAgICAgICAgICBhY3R1
YWxfaW1hZ2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfbmFtZSkKKyAgICBkZWYgcnVuX29u
ZV90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLm91dHB1dF9m
b3JfdGVzdCh0ZXN0X2lucHV0KQogCi0gICAgICAgIGlmIGFjdHVhbF9hdWRpbzoKKyAgICAgICAg
aWYgb3V0cHV0LmF1ZGlvOgogICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdDb250ZW50
LVR5cGU6IGF1ZGlvL3dhdlxuJykKICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQ29u
dGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG4nKQotICAgICAgICAgICAgb3V0cHV0ID0g
YmFzZTY0LmI2NGVuY29kZShhY3R1YWxfYXVkaW8pCi0gICAgICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUob3V0cHV0KQorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGJhc2U2NC5iNjRl
bmNvZGUob3V0cHV0LmF1ZGlvKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3N0
ZG91dC53cml0ZSgnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4nKQogICAgICAgICAgICAgIyBG
SVhNRTogTm90ZSB0aGF0IHdlIGRvbid0IGVuc3VyZSB0aGVyZSBpcyBhIHRyYWlsaW5nIG5ld2xp
bmUhCiAgICAgICAgICAgICAjIFRoaXMgbWlycm9ycyBhY3R1YWwgKE1hYykgRFJUIGJlaGF2aW9y
IGJ1dCBpcyBhIGJ1Zy4KLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShhY3R1YWxfdGV4
dCkKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShvdXRwdXQudGV4dCkKIAogICAgICAg
ICBzZWxmLl9zdGRvdXQud3JpdGUoJyNFT0ZcbicpCiAKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy5waXhlbF90ZXN0cyBhbmQgdGVzdF9pbnB1dC5jaGVja3N1bToKKyAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgKHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCBvciBpc19yZWZ0
ZXN0KToKICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnXG4nKQotICAgICAgICAgICAg
c2VsZi5fc3Rkb3V0LndyaXRlKCdBY3R1YWxIYXNoOiAlc1xuJyAlIGFjdHVhbF9jaGVja3N1bSkK
LSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnRXhwZWN0ZWRIYXNoOiAlc1xuJyAlIHRl
c3RfaW5wdXQuY2hlY2tzdW0pCi0gICAgICAgICAgICBpZiBhY3R1YWxfY2hlY2tzdW0gIT0gdGVz
dF9pbnB1dC5jaGVja3N1bToKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQWN0dWFs
SGFzaDogJXNcbicgJSBvdXRwdXQuaW1hZ2VfaGFzaCkKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91
dC53cml0ZSgnRXhwZWN0ZWRIYXNoOiAlc1xuJyAlIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCkKKyAg
ICAgICAgICAgIGlmIG91dHB1dC5pbWFnZV9oYXNoICE9IHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoK
ICAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtVHlwZTogaW1hZ2Uv
cG5nXG4nKQotICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQ29udGVudC1MZW5n
dGg6ICVzXG4nICUgbGVuKGFjdHVhbF9pbWFnZSkpCi0gICAgICAgICAgICAgICAgc2VsZi5fc3Rk
b3V0LndyaXRlKGFjdHVhbF9pbWFnZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3Jp
dGUoJ0NvbnRlbnQtTGVuZ3RoOiAlc1xuJyAlIGxlbihvdXRwdXQuaW1hZ2UpKQorICAgICAgICAg
ICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShvdXRwdXQuaW1hZ2UpCiAgICAgICAgIHNlbGYuX3N0
ZG91dC53cml0ZSgnI0VPRlxuJykKICAgICAgICAgc2VsZi5fc3Rkb3V0LmZsdXNoKCkKKyAgICAg
ICAgc2VsZi5fc3RkZXJyLndyaXRlKCcjRU9GXG4nKQogICAgICAgICBzZWxmLl9zdGRlcnIuZmx1
c2goKQogCiAKLSMgRklYTUU6IFNob3VsZCBwcm9iYWJseSBjaGFuZ2UgdGhpcyB0byB1c2UgRHJp
dmVySW5wdXQgYWZ0ZXIKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUzMDA0IGxhbmRzLgotY2xhc3MgX0Nocm9taXVtRFJUSW5wdXQoX0RSVElucHV0KToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgbGluZSk6CitjbGFzcyBNb2NrQ2hyb21pdW1EUlQoTW9ja0RSVCk6
CisgICAgZGVmIGlucHV0X2Zyb21fbGluZShzZWxmLCBsaW5lKToKICAgICAgICAgdmFscyA9IGxp
bmUuc3RyaXAoKS5zcGxpdCgpCiAgICAgICAgIGlmIGxlbih2YWxzKSA9PSAzOgotICAgICAgICAg
ICAgc2VsZi51cmksIHNlbGYudGltZW91dCwgc2VsZi5jaGVja3N1bSA9IHZhbHMKKyAgICAgICAg
ICAgIHVyaSwgdGltZW91dCwgY2hlY2tzdW0gPSB2YWxzCiAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBzZWxmLnVyaSA9IHZhbHNbMF0KLSAgICAgICAgICAgIHNlbGYudGltZW91dCA9IHZhbHNb
MV0KLSAgICAgICAgICAgIHNlbGYuY2hlY2tzdW0gPSBOb25lCisgICAgICAgICAgICB1cmksIHRp
bWVvdXQgPSB2YWxzCisgICAgICAgICAgICBjaGVja3N1bSA9IE5vbmUKIAorICAgICAgICB0ZXN0
X25hbWUgPSBzZWxmLl9kcml2ZXIudXJpX3RvX3Rlc3QodXJpKQorICAgICAgICBpc19yZWZ0ZXN0
ID0gKHNlbGYuX3BvcnQuaXNfcmVmdGVzdCh0ZXN0X25hbWUpIG9yCisgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9uYW1lLmVuZHN3aXRoKCctZXhwZWN0ZWQuaHRtbCcpIG9yCisgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9uYW1lLmVuZHN3aXRoKCctbWlzbWF0Y2guaHRtbCcpKQogCi1jbGFz
cyBNb2NrQ2hyb21pdW1EUlQoTW9ja0RSVCk6Ci0gICAgZGVmIHBhcnNlX2lucHV0KHNlbGYsIGxp
bmUpOgotICAgICAgICByZXR1cm4gX0Nocm9taXVtRFJUSW5wdXQobGluZSkKKyAgICAgICAgcmV0
dXJuIERyaXZlcklucHV0KHRlc3RfbmFtZSwgdGltZW91dCwgY2hlY2tzdW0sIGlzX3JlZnRlc3Qp
CiAKICAgICBkZWYgcnVuX29uZV90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICBwb3J0
ID0gc2VsZi5fcG9ydAotICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9kcml2ZXIudXJpX3RvX3Rl
c3QodGVzdF9pbnB1dC51cmkpCi0KLSAgICAgICAgYWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVk
X3RleHQodGVzdF9uYW1lKQotICAgICAgICBhY3R1YWxfaW1hZ2UgPSAnJwotICAgICAgICBhY3R1
YWxfY2hlY2tzdW0gPSAnJwotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFu
ZCB0ZXN0X2lucHV0LmNoZWNrc3VtOgotICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gcG9y
dC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X25hbWUpCi0gICAgICAgICAgICBpZiBhY3R1YWxfY2hl
Y2tzdW0gIT0gdGVzdF9pbnB1dC5jaGVja3N1bToKLSAgICAgICAgICAgICAgICBhY3R1YWxfaW1h
Z2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfbmFtZSkKLQotICAgICAgICBzZWxmLl9zdGRv
dXQud3JpdGUoIiNVUkw6JXNcbiIgJSB0ZXN0X2lucHV0LnVyaSkKLSAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgdGVzdF9pbnB1dC5jaGVja3N1bToKLSAgICAgICAgICAg
IHNlbGYuX3N0ZG91dC53cml0ZSgiI01ENTolc1xuIiAlIGFjdHVhbF9jaGVja3N1bSkKKyAgICAg
ICAgb3V0cHV0ID0gc2VsZi5vdXRwdXRfZm9yX3Rlc3QodGVzdF9pbnB1dCkKKworICAgICAgICBz
ZWxmLl9zdGRvdXQud3JpdGUoIiNVUkw6JXNcbiIgJSBzZWxmLl9kcml2ZXIudGVzdF90b191cmko
dGVzdF9pbnB1dC50ZXN0X25hbWUpKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rl
c3RzIGFuZCAodGVzdF9pbnB1dC5pbWFnZV9oYXNoIG9yIHRlc3RfaW5wdXQuaXNfcmVmdGVzdCk6
CisgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoIiNNRDU6JXNcbiIgJSBvdXRwdXQuaW1h
Z2VfaGFzaCkKICAgICAgICAgICAgIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlf
ZmlsZShzZWxmLl9vcHRpb25zLnBpeGVsX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZSkKLSAgICAgICAgc2VsZi5fc3Rkb3V0
LndyaXRlKGFjdHVhbF90ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5pbWFnZSkKKyAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRl
KG91dHB1dC50ZXh0KQogCiAgICAgICAgICMgRklYTUU6IChTZWUgYWJvdmUgRklYTUUgYXMgd2Vs
bCkuIENocm9taXVtIERSVCBhcHBlYXJzIHRvIGFsd2F5cwogICAgICAgICAjIGVuc3VyZSB0aGUg
dGV4dCBvdXRwdXQgaGFzIGEgdHJhaWxpbmcgbmV3bGluZS4gTWFjIERSVCBkb2VzIG5vdC4KLSAg
ICAgICAgaWYgbm90IGFjdHVhbF90ZXh0LmVuZHN3aXRoKCdcbicpOgorICAgICAgICBpZiBub3Qg
b3V0cHV0LnRleHQuZW5kc3dpdGgoJ1xuJyk6CiAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3Jp
dGUoJ1xuJykKICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCcjRU9GXG4nKQogICAgICAgICBz
ZWxmLl9zdGRvdXQuZmx1c2goKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKaW5kZXggMmYwYTg5
NDNhMTc2MTdkOGI0MGQ2MTRlZGY4NjNjNzM1ZThlMGE0OC4uZWQ4OGU4YjdjZjdjZmY0YzBjNmYy
OGEzNWI4ZjE3OTNmMTBmNjZlZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5CkBAIC0xNjMs
NyArMTYzLDcgQEAgY2xhc3MgTW9ja0RSVFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAjIFdlIHVzZSB0aGUgU3RyaW5nSU8uYnVmbGlzdCBoZXJlIGluc3RlYWQgb2YgZ2V0dmFsdWUo
KSBiZWNhdXNlCiAgICAgICAgICMgdGhlIFN0cmluZ0lPIG1pZ2h0IGJlIGEgbWl4IG9mIHVuaWNv
ZGUvYXNjaWkgYW5kIDgtYml0IHN0cmluZ3MuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rk
b3V0LmJ1Zmxpc3QsIGRydF9vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJy
LmdldHZhbHVlKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyci5nZXR2YWx1
ZSgpLCAnJyBpZiBvcHRpb25zLmNocm9taXVtIGVsc2UgJyNFT0ZcbicpCiAKICAgICBkZWYgdGVz
dF9tYWluKHNlbGYpOgogICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19p
bnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQppbmRleCA0OGY5MGE0ZjRhMjFlYjg2
NDRmMjdmOWVhMzI5N2FhNWFjYWI5NDNhLi5iZWM3MjA4MDUxYzU5ZGQxOTdlYzAwYjNkNGU0ZjBl
N2M1MjAyMjk3IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5w
eQpAQCAtOTIzLDIxICs5MjMsNSBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMv
ZXhwZWN0ZWQvbWlzc2luZ19pbWFnZSIsIFsiLnR4dCIsICIucG5nIl0sIGVycikKIAogCi1jbGFz
cyBEcnlydW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIEZJWE1FOiBpdCdzIGhhcmQg
dG8ga25vdyB3aGljaCBwbGF0Zm9ybXMgYXJlIHNhZmUgdG8gdGVzdDsgdGhlCi0gICAgIyBjaHJv
bWl1bSBwbGF0Zm9ybXMgcmVxdWlyZSBhIGNocm9taXVtIGNoZWNrb3V0LCBhbmQgdGhlIG1hYyBw
bGF0Zm9ybQotICAgICMgcmVxdWlyZXMgZmNudGwsIHNvIGl0IGNhbid0IGJlIHRlc3RlZCBvbiB3
aW4zMiwgZXRjLiBUaGVyZSBpcwotICAgICMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IG9mIGhhbmRs
aW5nIHRoaXMuCi0gICAgZGVmIGRpc2FibGVkX3Rlc3RfZGFyd2luKHNlbGYpOgotICAgICAgICBp
ZiBzeXMucGxhdGZvcm0gIT0gImRhcndpbiI6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bicsICdm
YXN0L2h0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuLW1hYycsICdmYXN0L2h0bWwnXSwg
dGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCi0KLSAgICBkZWYgdGVzdF90ZXN0KHNlbGYpOgotICAgICAg
ICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi10ZXN0
JywgJy0tcGl4ZWwtdGVzdHMnXSkpCi0KLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAg
ICB1bml0dGVzdC5tYWluKCkK
</data>
<flag name="review"
          id="126205"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>