<?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>53908</bug_id>
          
          <creation_ts>2011-02-07 00:43:17 -0800</creation_ts>
          <short_desc>Get rid of code which writes test results from test_type/* classes.</short_desc>
          <delta_ts>2011-02-18 01:05:23 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>51091</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>346501</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-07 00:43:17 -0800</bug_when>
    <thetext>This is a separated patch from https://bugs.webkit.org/show_bug.cgi?id=51091.

This patch introduced test_result_writer and get rid of code which writes test_results from each test_type/* class.
Writing a test result now happens inside of single_test_runner, using newly introduced test_result_writer.

This patch is only refactoring. There is no functional changes.

Subsequent patches will delete test_type/* classes completely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346515</commentid>
    <comment_count>1</comment_count>
      <attachid>81462</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-07 01:32:21 -0800</bug_when>
    <thetext>Created attachment 81462
refactor-test-result-writing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346665</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-07 10:41:21 -0800</bug_when>
    <thetext>Did you mean to set the r? flag for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347204</commentid>
    <comment_count>3</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-08 00:10:37 -0800</bug_when>
    <thetext>Oh. Thank you for taking care of that.

I am reluctant to set &apos;r?&apos; to this patch (A) because it depends on other patch (B), https://bugs.webkit.org/show_bug.cgi?id=53071, in my local git repository.

These two patches are not strongly related, but this patch (A) needs patch (B) to be applied correctly, I guess.

I am now setting &apos;r?&apos; to this patch. I think this patch doesn&apos;t have such a &apos;physical&apos; patchablity issue. I can merge that easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347214</commentid>
    <comment_count>4</comment_count>
      <attachid>81610</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-08 00:36:12 -0800</bug_when>
    <thetext>Created attachment 81610
refactor-test-result-writing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348611</commentid>
    <comment_count>5</comment_count>
      <attachid>81610</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 15:00:26 -0800</bug_when>
    <thetext>Comment on attachment 81610
refactor-test-result-writing

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:81
&gt; +

I feel like this should still be a transitional patch in the code and we can still do better. I think the fact that we&apos;re keeping test_types as a list of classes and iterating over them without knowing what they are is just making us have to create these big complicated if blocks. I think if we got rid of the lists of classes and just created the test type objects directly in single_test runner (at line 285) and then handled the failures directly it would be a lot more obvious what&apos;s going on. But, if that&apos;s too much to change at once, this looks okay as a stopgap.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:131
&gt; +    def _write_into_file_at_path(self, file_path, contents, encoding):

You can get rid of the encoding parameter now, right? At which point, this whole function might be kind of unnecessary.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:173
&gt; +    def copy_text(self, actual_text, expected_text):

I would probably call this &quot;copy_text_files&quot; to make it clear that you are copying both files. I was confused at first in write_test_result() because it looked like you were copying the value of actual_text to expected_text,

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:208
&gt; +    def copy_image(self, actual_image, expected_image):

smae thing ... copy_image_files()

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:213
&gt; +    def copy_image_hash(self, actual_image_hash, expected_image_hash):

copy_image_hashes()

&gt; Tools/Scripts/webkitpy/layout_tests/test_types/image_diff.py:-84
&gt; -            self._copy_image(filename, actual_driver_output.image, expected_image=None)

You can actually delete _copy_image() and _copy_hash() as well, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352659</commentid>
    <comment_count>6</comment_count>
      <attachid>81610</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-02-17 00:58:09 -0800</bug_when>
    <thetext>Comment on attachment 81610
refactor-test-result-writing

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:53
&gt; +            writer.copy_image_hash(driver_output.image_hash,
&gt; +                                   expected_driver_output.image_hash)

webkit doesn&apos;t have an 80char rule. I think this line and the ones below would be easier to read on one line.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:57
&gt; +            writer.copy_image_hash(driver_output.image_hash,
&gt; +                                   expected_image_hash=None)

ditto

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:61
&gt; +            writer.copy_image_hash(driver_output.image_hash,
&gt; +                                   expected_driver_output.image_hash)

ditto

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:75
&gt; +    # whether iamges are same or not. So need this hack until we have a better

typo: iamges

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:92
&gt; +    FILENAME_SUFFIX_COMPARE = &quot;-diff.png&quot;

FILENAME_SUFFIX_IMAGE_DIFF ?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:95
&gt; +        &quot;&quot;&quot;Initialize a TestTypeBase object.

This comment is wrong and not necessary anyways (i.e. clearly __init__ initializes). :)

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:109
&gt; +        &quot;&quot;&quot;Creates the output directory (if needed) for a given test
&gt; +        filename.&quot;&quot;&quot;

no need to wrap here

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:125
&gt; +        For example, if filename is c:/.../fast/dom/foo.html and modifier is
&gt; +        &quot;-expected.txt&quot;, the return value is
&gt; +        c:/cygwin/tmp/layout-test-results/fast/dom/foo-expected.txt
&gt; +
&gt; +        Args:
&gt; +          modifier: a string to replace the extension of filename with
&gt; +
&gt; +        Return:
&gt; +          The absolute windows path to the output filename

I think these comments are outdated. I don&apos;t see anything windows specific about these paths.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:131
&gt;&gt; +    def _write_into_file_at_path(self, file_path, contents, encoding):
&gt; 
&gt; You can get rid of the encoding parameter now, right? At which point, this whole function might be kind of unnecessary.

Looks like it&apos;s still used to me. There one case where &apos;ascii&apos; is passed in. Although, I&apos;m not convinced it&apos;s needed for the image hashes.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:158
&gt; +        actual_filename = self.output_filename(self.FILENAME_SUFFIX_ACTUAL +
&gt; +                                               file_type)
&gt; +        expected_filename = self.output_filename(self.FILENAME_SUFFIX_EXPECTED +
&gt; +                                                 file_type)

ditto: re 80c wrapping. this would be more readable without wrapping.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:160
&gt; +        # FIXME: This function is poorly designed.  We should be passing in some
&gt; +        # sort of encoding information from the callers.

I&apos;m confused by this FIXME. Aren&apos;t we already already passing the encoding from the callers?

&gt; Tools/Scripts/webkitpy/layout_tests/test_types/text_diff.py:69
&gt;              # Text doesn&apos;t match, write output files.

This comment no longer matches. It&apos;s a pretty useless comment anyways. Please just delete it. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352715</commentid>
    <comment_count>7</comment_count>
      <attachid>81610</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-17 03:07:44 -0800</bug_when>
    <thetext>Comment on attachment 81610
refactor-test-result-writing

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:53
&gt;&gt; +                                   expected_driver_output.image_hash)
&gt; 
&gt; webkit doesn&apos;t have an 80char rule. I think this line and the ones below would be easier to read on one line.

Thank you. I&apos;ve fixed the style of this file, assuming about 100 chars per line are permitted.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:75
&gt;&gt; +    # whether iamges are same or not. So need this hack until we have a better
&gt; 
&gt; typo: iamges

Thank you. Fixed.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:81
&gt;&gt; +
&gt; 
&gt; I feel like this should still be a transitional patch in the code and we can still do better. I think the fact that we&apos;re keeping test_types as a list of classes and iterating over them without knowing what they are is just making us have to create these big complicated if blocks. I think if we got rid of the lists of classes and just created the test type objects directly in single_test runner (at line 285) and then handled the failures directly it would be a lot more obvious what&apos;s going on. But, if that&apos;s too much to change at once, this looks okay as a stopgap.

Thank you. I agree this is an ugly long &apos;if&apos; blocks. I tried moving this each clause to each corresponding TestFailures class , but I didn&apos;t.

In Subsequent patches,  I will eliminate test type classes. So I think it will be possible to handle these failures directly in single_test_runner. For now, I&apos;d like to keep this ugly if else block as is.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:92
&gt;&gt; +    FILENAME_SUFFIX_COMPARE = &quot;-diff.png&quot;
&gt; 
&gt; FILENAME_SUFFIX_IMAGE_DIFF ?

Thank you. Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:95
&gt;&gt; +        &quot;&quot;&quot;Initialize a TestTypeBase object.
&gt; 
&gt; This comment is wrong and not necessary anyways (i.e. clearly __init__ initializes). :)

Thank you. I removed this doc comment itself at all.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:109
&gt;&gt; +        filename.&quot;&quot;&quot;
&gt; 
&gt; no need to wrap here

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:125
&gt;&gt; +          The absolute windows path to the output filename
&gt; 
&gt; I think these comments are outdated. I don&apos;t see anything windows specific about these paths.

Thank you. I updated the comment.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:131
&gt;&gt;&gt; +    def _write_into_file_at_path(self, file_path, contents, encoding):
&gt;&gt; 
&gt;&gt; You can get rid of the encoding parameter now, right? At which point, this whole function might be kind of unnecessary.
&gt; 
&gt; Looks like it&apos;s still used to me. There one case where &apos;ascii&apos; is passed in. Although, I&apos;m not convinced it&apos;s needed for the image hashes.

We can remove encoding parameter. We can assume all data is in &apos;binary&apos;, which includes &apos;ASCII&apos; safely.

I did similar things in another patch. https://bugs.webkit.org/show_bug.cgi?id=54066

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:160
&gt;&gt; +        # sort of encoding information from the callers.
&gt; 
&gt; I&apos;m confused by this FIXME. Aren&apos;t we already already passing the encoding from the callers?

I removed the comment.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:173
&gt;&gt; +    def copy_text(self, actual_text, expected_text):
&gt; 
&gt; I would probably call this &quot;copy_text_files&quot; to make it clear that you are copying both files. I was confused at first in write_test_result() because it looked like you were copying the value of actual_text to expected_text,

Thank you and sorry for confusion. I renamed all &apos;copy_xxx&apos; function to &apos;write_xxx&apos; . I think &apos;write_xx&apos; is better than &apos;copy_&apos; in these cases.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:208
&gt;&gt; +    def copy_image(self, actual_image, expected_image):
&gt; 
&gt; smae thing ... copy_image_files()

Thank you. I renamed that to write_image_files().

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:213
&gt;&gt; +    def copy_image_hash(self, actual_image_hash, expected_image_hash):
&gt; 
&gt; copy_image_hashes()

Thank you. I renamed that to write_image_hashes().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352718</commentid>
    <comment_count>8</comment_count>
      <attachid>82775</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-17 03:11:58 -0800</bug_when>
    <thetext>Created attachment 82775
fixed-as-suggested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353119</commentid>
    <comment_count>9</comment_count>
      <attachid>82775</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-17 12:52:28 -0800</bug_when>
    <thetext>Comment on attachment 82775
fixed-as-suggested

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:153
&gt; +    def write_text_diff(self, actual_text, expected_text):

Unlike the other methods, write_text_diff() and write_diff_image() are actually doing the diffs as well as writing them. They should probably be renamed, and I&apos;m not sure if they even belong in this module as opposed to being in the caller (or elsewhere). But, I&apos;m keen to see this patch land so we can make progress, so as long as all of the tests pass this is fine for now. Maybe add a FIXME and at least rename them?

LGTM otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353324</commentid>
    <comment_count>10</comment_count>
      <attachid>82775</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-17 19:03:52 -0800</bug_when>
    <thetext>Comment on attachment 82775
fixed-as-suggested

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_result_writer.py:153
&gt;&gt; +    def write_text_diff(self, actual_text, expected_text):
&gt; 
&gt; Unlike the other methods, write_text_diff() and write_diff_image() are actually doing the diffs as well as writing them. They should probably be renamed, and I&apos;m not sure if they even belong in this module as opposed to being in the caller (or elsewhere). But, I&apos;m keen to see this patch land so we can make progress, so as long as all of the tests pass this is fine for now. Maybe add a FIXME and at least rename them?
&gt; 
&gt; LGTM otherwise.

Thank you. I&apos;ve renamed two functions. The two functions are now &apos;create_text_diff_and_write_result&apos; and &apos;create_image_diff_and_write_result&apos;.
I&apos;ve added a FIXME as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353327</commentid>
    <comment_count>11</comment_count>
      <attachid>82897</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-17 19:05:08 -0800</bug_when>
    <thetext>Created attachment 82897
renamed-write-functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353432</commentid>
    <comment_count>12</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-17 22:48:09 -0800</bug_when>
    <thetext>Committed r78961: &lt;http://trac.webkit.org/changeset/78961&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353469</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-18 01:05:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78961 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81462</attachid>
            <date>2011-02-07 01:32:21 -0800</date>
            <delta_ts>2011-02-08 00:36:07 -0800</delta_ts>
            <desc>refactor-test-result-writing</desc>
            <filename>bug-53908-20110207183219.patch</filename>
            <type>text/plain</type>
            <size>21405</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2ZDQ2
MWI1NDM2NWZmZDY4NmVlNDIyMDQwZWIwNzkxYzQ5ZWQ0NGY3Li45N2YyMjhmZTBjMTliOTk3N2Vk
NjliYmM0MWJlMGNlZDVkNWE1NzA0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDItMDcgIEhheWF0byBJdG8g
IDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdldCByaWQgb2YgY29kZSB3aGljaCB3cml0ZXMgdGVzdCByZXN1bHRz
IGZyb20gdGVzdF90eXBlJ3MKKyAgICAgICAgY29tcGFyZV9vdXRwdXQoKSBtZXRob2QuCisgICAg
ICAgIFdyaXRpbmcgdGVzdCByZXN1bHRzIG5vdyBoYXBwZW5zIGluIHNpbmdsZV90ZXN0X3J1bm5l
ciwgdXNpbmcKKyAgICAgICAgbmV3bHkgaW50cm9kdWNlZCB0ZXN0X3Jlc3VsdF93cml0ZXIgbW9k
dWxlLgorCisgICAgICAgIFN1YnNlcXVlbnQgcGF0Y2hlcyB3aWxsIGVsaW1pbmF0ZSB0ZXN0X3R5
cGUvKiBjbGFzc2VzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MzkwMworCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcmVzdWx0X3dyaXRlci5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHk6CisKIDIwMTEtMDItMDMg
IEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVu
bmVyLnB5CmluZGV4IDJjNGY0MGQxY2Q5ZTdjOWE0YmJhNjFhMzcyMDUzZDE0ZWQ2ZWZkNWQuLjYw
NzBlMzRkNjk3YzA5ODMyZGFmMzVjNzI2OTIyNGJmMmYxMzY4MWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0
X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKQEAgLTMzLDYgKzMzLDcgQEAgaW1wb3J0
IHRpbWUKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgYmFzZQogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVy
ZXMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X3Jlc3VsdF93cml0ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
LnRlc3RfcmVzdWx0cyBpbXBvcnQgVGVzdFJlc3VsdAogCiAKQEAgLTE4Nyw2ICsxODgsOCBAQCBj
bGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICAgICAgIyB3ZSBzdGlsbCB3YW50IHRvIHNl
ZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgogICAgICAgICAgICAgaWYgbm90IGRyaXZlcl9v
dXRwdXQuY3Jhc2g6CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWlsdXJl
cykKKyAgICAgICAgICAgIHRlc3RfcmVzdWx0X3dyaXRlci53cml0ZV90ZXN0X3Jlc3VsdChzZWxm
Ll9wb3J0LCBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lLCBkcml2ZXJf
b3V0cHV0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LCBuZXdfZmFpbHVyZXMpCiAgICAgICAgICAg
ICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKICAgICAg
ICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9y
ZXN1bHRfd3JpdGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvdGVzdF9yZXN1bHRfd3JpdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMmFmNmVlNzRi
YWZiZDYzNGZkNTc0N2RhOWEzZmY0YWFhNjU5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3Jlc3VsdF93
cml0ZXIucHkKQEAgLTAsMCArMSwyMDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgb3MKKworaW1wb3J0IHRlc3RfZmFpbHVyZXMKKworX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9y
ZXN1bHRfd3JpdGVyIikKKworCitkZWYgd3JpdGVfdGVzdF9yZXN1bHQocG9ydCwgcm9vdF9vdXRw
dXRfZGlyLCBmaWxlbmFtZSwgZHJpdmVyX291dHB1dCwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dCwg
ZmFpbHVyZXMpOgorICAgICMgRklYTUU6IFRlc3RGYWlsdXJlIGNsYXNzIG1heSBoYXZlIGEgcmVz
cG9uc2liaWxpdHkuCisgICAgd3JpdGVyID0gVGVzdFJlc3VsdFdyaXRlcihwb3J0LCByb290X291
dHB1dF9kaXIsIGZpbGVuYW1lKQorICAgIGZvciBmYWlsdXJlIGluIGZhaWx1cmVzOgorICAgICAg
ICBpZiBpc2luc3RhbmNlKGZhaWx1cmUsICh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nUmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWx1cmVzLkZhaWx1
cmVUZXh0TWlzbWF0Y2gpKToKKyAgICAgICAgICAgIHdyaXRlci5jb3B5X3RleHQoZHJpdmVyX291
dHB1dC50ZXh0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LnRleHQpCisgICAgICAgICAgICB3cml0
ZXIuY3JlYXRlX3RleHRfZGlmZihkcml2ZXJfb3V0cHV0LnRleHQsIGV4cGVjdGVkX2RyaXZlcl9v
dXRwdXQudGV4dCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZhaWx1cmUsIHRlc3RfZmFpbHVy
ZXMuRmFpbHVyZU1pc3NpbmdJbWFnZSk6CisgICAgICAgICAgICB3cml0ZXIuY29weV9pbWFnZShk
cml2ZXJfb3V0cHV0LmltYWdlLCBleHBlY3RlZF9pbWFnZT1Ob25lKQorICAgICAgICAgICAgd3Jp
dGVyLmNvcHlfaW1hZ2VfaGFzaChkcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFz
aCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZhaWx1cmUsIHRlc3RfZmFpbHVyZXMuRmFpbHVy
ZU1pc3NpbmdJbWFnZUhhc2gpOgorICAgICAgICAgICAgd3JpdGVyLmNvcHlfaW1hZ2UoZHJpdmVy
X291dHB1dC5pbWFnZSwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZSkKKyAgICAgICAgICAg
IHdyaXRlci5jb3B5X2ltYWdlX2hhc2goZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9pbWFnZV9oYXNoPU5vbmUpCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFn
ZUhhc2hNaXNtYXRjaCk6CisgICAgICAgICAgICB3cml0ZXIuY29weV9pbWFnZShkcml2ZXJfb3V0
cHV0LmltYWdlLCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlKQorICAgICAgICAgICAgd3Jp
dGVyLmNvcHlfaW1hZ2VfaGFzaChkcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFz
aCkKKyAgICAgICAgICAgIGltYWdlc19hcmVfZGlmZmVyZW50ID0gd3JpdGVyLmNyZWF0ZV9kaWZm
X2ltYWdlKAorICAgICAgICAgICAgICAgIGRyaXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2Ry
aXZlcl9vdXRwdXQuaW1hZ2UpCisgICAgICAgICAgICBpZiBub3QgaW1hZ2VzX2FyZV9kaWZmZXJl
bnQ6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBGYWlsdXJlSW1hZ2VI
YXNoSW5jb3JyZWN0CisgICAgICAgICAgICAgICAgcmFpc2UgJ0ludmFsaWQgaW1hZ2VfaGFzaC4u
LicKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZhaWx1cmUsIHRlc3RfZmFpbHVyZXMuRmFpbHVy
ZUNyYXNoKToKKyAgICAgICAgICAgIHdyaXRlci53cml0ZV9jcmFzaF9yZXBvcnQoZHJpdmVyX291
dHB1dC5lcnJvcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNl
KGZhaWx1cmUsICh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0LCkpCisKKworY2xhc3MgVGVz
dFJlc3VsdFdyaXRlcihvYmplY3QpOgorICAgICIiIkEgY2xhc3Mgd2hpY2ggaGFuZGxlcyBhbGwg
d3JpdGluZyBvcGVyYXRpb25zIHRvIHRoZSByZXN1bHQgZGlyZWN0b3J5LiIiIgorCisgICAgIyBG
aWxlbmFtZSBwaWVjZXMgd2hlbiB3cml0aW5nIGZhaWx1cmVzIHRvIHRoZSB0ZXN0IHJlc3VsdHMg
ZGlyZWN0b3J5LgorICAgIEZJTEVOQU1FX1NVRkZJWF9BQ1RVQUwgPSAiLWFjdHVhbCIKKyAgICBG
SUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgPSAiLWV4cGVjdGVkIgorICAgIEZJTEVOQU1FX1NVRkZJ
WF9ESUZGID0gIi1kaWZmIgorICAgIEZJTEVOQU1FX1NVRkZJWF9XRElGRiA9ICItd2RpZmYuaHRt
bCIKKyAgICBGSUxFTkFNRV9TVUZGSVhfUFJFVFRZX1BBVENIID0gIi1wcmV0dHktZGlmZi5odG1s
IgorICAgIEZJTEVOQU1FX1NVRkZJWF9DT01QQVJFID0gIi1kaWZmLnBuZyIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCByb290X291dHB1dF9kaXIsIGZpbGVuYW1lKToKKyAgICAgICAg
IiIiSW5pdGlhbGl6ZSBhIFRlc3RUeXBlQmFzZSBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBwb3J0OiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lmaWMgaW5mb3JtYXRp
b24gYW5kIG1ldGhvZHMKKyAgICAgICAgICByb290X291dHB1dF9kaXI6IFRoZSB1bml4IHN0eWxl
IHBhdGggdG8gdGhlIG91dHB1dCBkaXIuCisgICAgICAgICAgZmlsZW5hbWU6IHBhdGggdG8gdGhl
IHRlc3QgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAg
ICAgc2VsZi5fcm9vdF9vdXRwdXRfZGlyID0gcm9vdF9vdXRwdXRfZGlyCisgICAgICAgIHNlbGYu
X2ZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5fdGVzdG5hbWUgPSBwb3J0LnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCisKKyAgICBkZWYgX21ha2Vfb3V0cHV0X2RpcmVj
dG9yeShzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlcyB0aGUgb3V0cHV0IGRpcmVjdG9yeSAoaWYg
bmVlZGVkKSBmb3IgYSBnaXZlbiB0ZXN0CisgICAgICAgIGZpbGVuYW1lLiIiIgorICAgICAgICBm
cyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KKyAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gZnMu
am9pbihzZWxmLl9yb290X291dHB1dF9kaXIsIHNlbGYuX3Rlc3RuYW1lKQorICAgICAgICBzZWxm
Ll9wb3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUob3V0cHV0X2ZpbGVuYW1lKSkK
KworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZiwgbW9kaWZpZXIpOgorICAgICAgICAiIiJS
ZXR1cm5zIGEgZmlsZW5hbWUgaW5zaWRlIHRoZSBvdXRwdXQgZGlyIHRoYXQgY29udGFpbnMgbW9k
aWZpZXIuCisKKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGZpbGVuYW1lIGlzIGM6Ly4uLi9mYXN0
L2RvbS9mb28uaHRtbCBhbmQgbW9kaWZpZXIgaXMKKyAgICAgICAgIi1leHBlY3RlZC50eHQiLCB0
aGUgcmV0dXJuIHZhbHVlIGlzCisgICAgICAgIGM6L2N5Z3dpbi90bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2RvbS9mb28tZXhwZWN0ZWQudHh0CisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICBtb2RpZmllcjogYSBzdHJpbmcgdG8gcmVwbGFjZSB0aGUgZXh0ZW5zaW9uIG9mIGZpbGVuYW1l
IHdpdGgKKworICAgICAgICBSZXR1cm46CisgICAgICAgICAgVGhlIGFic29sdXRlIHdpbmRvd3Mg
cGF0aCB0byB0aGUgb3V0cHV0IGZpbGVuYW1lCisgICAgICAgICIiIgorICAgICAgICBmcyA9IHNl
bGYuX3BvcnQuX2ZpbGVzeXN0ZW0KKyAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gZnMuam9pbihz
ZWxmLl9yb290X291dHB1dF9kaXIsIHNlbGYuX3Rlc3RuYW1lKQorICAgICAgICByZXR1cm4gZnMu
c3BsaXRleHQob3V0cHV0X2ZpbGVuYW1lKVswXSArIG1vZGlmaWVyCisKKyAgICBkZWYgX3dyaXRl
X2ludG9fZmlsZV9hdF9wYXRoKHNlbGYsIGZpbGVfcGF0aCwgY29udGVudHMsIGVuY29kaW5nKToK
KyAgICAgICAgIiIiVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGJ5dGVfYXJyYXkgaXMgYWxyZWFk
eSBlbmNvZGVkCisgICAgICAgIGludG8gdGhlIHJpZ2h0IGZvcm1hdC4iIiIKKyAgICAgICAgZnMg
PSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6Cisg
ICAgICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZShmaWxlX3BhdGgsIGNvbnRlbnRzKQorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShmaWxlX3BhdGgsIGNv
bnRlbnRzKQorCisgICAgZGVmIHdyaXRlX291dHB1dF9maWxlcyhzZWxmLCBmaWxlX3R5cGUsIG91
dHB1dCwgZXhwZWN0ZWQsIGVuY29kaW5nKToKKyAgICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91
dHB1dCwgdGhlIGV4cGVjdGVkIG91dHB1dCBhbmQgb3B0aW9uYWxseSB0aGUgZGlmZgorICAgICAg
ICBiZXR3ZWVuIHRoZSB0d28gdG8gZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgorCisg
ICAgICAgIFRoZSBmdWxsIG91dHB1dCBmaWxlbmFtZSBvZiB0aGUgYWN0dWFsLCBmb3IgZXhhbXBs
ZSwgd2lsbCBiZQorICAgICAgICAgIDxmaWxlbmFtZT4tYWN0dWFsPGZpbGVfdHlwZT4KKyAgICAg
ICAgRm9yIGluc3RhbmNlLAorICAgICAgICAgIG15X3Rlc3QtYWN0dWFsLnR4dAorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgZmlsZV90eXBlOiBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0
IG91dHB1dCBmaWxlIHR5cGUsIGUuZy4gIi50eHQiCisgICAgICAgICAgb3V0cHV0OiBBIHN0cmlu
ZyBjb250YWluaW5nIHRoZSB0ZXN0IG91dHB1dAorICAgICAgICAgIGV4cGVjdGVkOiBBIHN0cmlu
ZyBjb250YWluaW5nIHRoZSBleHBlY3RlZCB0ZXN0IG91dHB1dAorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5fbWFrZV9vdXRwdXRfZGlyZWN0b3J5KCkKKyAgICAgICAgYWN0dWFsX2ZpbGVuYW1l
ID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhfQUNUVUFMICsgZmls
ZV90eXBlKQorICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1l
KHNlbGYuRklMRU5BTUVfU1VGRklYX0VYUEVDVEVEICsgZmlsZV90eXBlKQorICAgICAgICAjIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHBvb3JseSBkZXNpZ25lZC4gIFdlIHNob3VsZCBiZSBwYXNz
aW5nIGluIHNvbWUgc29ydCBvZgorICAgICAgICAjIGVuY29kaW5nIGluZm9ybWF0aW9uIGZyb20g
dGhlIGNhbGxlcnMuCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRl
X2ludG9fZmlsZV9hdF9wYXRoKGFjdHVhbF9maWxlbmFtZSwgb3V0cHV0LCBlbmNvZGluZykKKyAg
ICAgICAgaWYgZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9pbnRvX2ZpbGVfYXRf
cGF0aChleHBlY3RlZF9maWxlbmFtZSwgZXhwZWN0ZWQsIGVuY29kaW5nKQorCisgICAgZGVmIHdy
aXRlX2NyYXNoX3JlcG9ydChzZWxmLCBlcnJvcik6CisgICAgICAgICIiIldyaXRlIGNyYXNoIGlu
Zm9ybWF0aW9uLiIiIgorICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KKyAgICAg
ICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZSgiLXN0YWNrLnR4dCIpCisgICAgICAg
IGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUoZmlsZW5hbWUpKQorICAgICAgICBm
cy53cml0ZV90ZXh0X2ZpbGUoZmlsZW5hbWUsIGVycm9yKQorCisgICAgZGVmIGNvcHlfdGV4dChz
ZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgIHNlbGYud3JpdGVfb3V0
cHV0X2ZpbGVzKCIudHh0IiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPU5vbmUpCisKKyAgICBkZWYgY3JlYXRlX3Rl
eHRfZGlmZihzZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgIGlmIG5v
dCBhY3R1YWxfdGV4dCBvciBub3QgZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgIHNlbGYuX21ha2Vfb3V0cHV0X2RpcmVjdG9yeSgpCisgICAgICAgIGZpbGVfdHlw
ZSA9ICcudHh0JworICAgICAgICBhY3R1YWxfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFt
ZShzZWxmLkZJTEVOQU1FX1NVRkZJWF9BQ1RVQUwgKyBmaWxlX3R5cGUpCisgICAgICAgIGV4cGVj
dGVkX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhf
RVhQRUNURUQgKyBmaWxlX3R5cGUpCisKKyAgICAgICAgIyBOb3RlOiBXZSBwYXNzIGVuY29kaW5n
PU5vbmUgZm9yIGFsbCBkaWZmIHdyaXRlcywgYXMgd2UgdHJlYXQgZGlmZgorICAgICAgICAjIG91
dHB1dCBhcyBiaW5hcnkuICBEaWZmIG91dHB1dCBtYXkgY29udGFpbiBtdWx0aXBsZSBmaWxlcyBp
bgorICAgICAgICAjIGNvbmZsaWN0aW5nIGVuY29kaW5ncy4KKyAgICAgICAgZGlmZiA9IHNlbGYu
X3BvcnQuZGlmZl90ZXh0KGV4cGVjdGVkX3RleHQsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF9maWxl
bmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQorICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRw
dXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhfRElGRiArIGZpbGVfdHlwZSkKKyAgICAg
ICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgoZGlmZl9maWxlbmFtZSwgZGlmZiwgZW5j
b2Rpbmc9Tm9uZSkKKworICAgICAgICAjIFNoZWxsIG91dCB0byB3ZGlmZiB0byBnZXQgY29sb3Jl
ZCBpbmxpbmUgZGlmZnMuCisgICAgICAgIHdkaWZmID0gc2VsZi5fcG9ydC53ZGlmZl90ZXh0KGV4
cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpCisgICAgICAgIHdkaWZmX2ZpbGVuYW1l
ID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhfV0RJRkYpCisgICAg
ICAgIHNlbGYuX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKHdkaWZmX2ZpbGVuYW1lLCB3ZGlmZiwg
ZW5jb2Rpbmc9Tm9uZSkKKworICAgICAgICAjIFVzZSBXZWJLaXQncyBQcmV0dHlQYXRjaC5yYiB0
byBnZXQgYW4gSFRNTCBkaWZmLgorICAgICAgICBwcmV0dHlfcGF0Y2ggPSBzZWxmLl9wb3J0LnBy
ZXR0eV9wYXRjaF90ZXh0KGRpZmZfZmlsZW5hbWUpCisgICAgICAgIHByZXR0eV9wYXRjaF9maWxl
bmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX1BSRVRUWV9Q
QVRDSCkKKyAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgocHJldHR5X3BhdGNo
X2ZpbGVuYW1lLCBwcmV0dHlfcGF0Y2gsIGVuY29kaW5nPU5vbmUpCisKKyAgICBkZWYgY29weV9p
bWFnZShzZWxmLCBhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlKToKKyAgICAgICAgc2VsZi53
cml0ZV9vdXRwdXRfZmlsZXMoJy5wbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQ9YWN0dWFsX2ltYWdlLCBleHBlY3RlZD1leHBlY3RlZF9pbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSkKKworICAgIGRlZiBjb3B5X2lt
YWdlX2hhc2goc2VsZiwgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hhc2gpOgor
ICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcygnLmNoZWNrc3VtJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hh
c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIpCisK
KyAgICBkZWYgY3JlYXRlX2RpZmZfaW1hZ2Uoc2VsZiwgYWN0dWFsX2ltYWdlLCBleHBlY3RlZF9p
bWFnZSk6CisgICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBlY3Rl
ZC9hY3R1YWwgUE5Hcy4KKworICAgICAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGltYWdlcyBhcmUg
ZGlmZmVyZW50LgorICAgICAgICAiIiIKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0
cHV0X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX0NPTVBBUkUpCisgICAgICAgIHJldHVy
biBzZWxmLl9wb3J0LmRpZmZfaW1hZ2UoYWN0dWFsX2ltYWdlLCBleHBlY3RlZF9pbWFnZSwgZGlm
Zl9maWxlbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQppbmRleCAxZDdlMTA3MjQ3NmQ0MzZk
NGU4ZDIyYWJiYzkwODgzOTc5MDZkZmJjLi43NzdmZTk1OWEyMjJjYjA5YTRlOTE5YTJjNjFmMzY5
ZGZhOTI0NzMxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC04MSwzNyArODEsMTQgQEAg
Y2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAKICAgICAgICAg
aWYgbm90IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2U6CiAgICAgICAgICAgICAjIFJlcG9y
dCBhIG1pc3NpbmcgZXhwZWN0ZWQgUE5HIGZpbGUuCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2lt
YWdlKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZSwgZXhwZWN0ZWRfaW1hZ2U9
Tm9uZSkKLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2VfaGFzaChmaWxlbmFtZSwgYWN0dWFs
X2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gpCiAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFpbHVyZXMKICAgICAgICAgaWYgbm90IGV4cGVjdGVkX2RyaXZlcl9vdXRw
dXQuaW1hZ2VfaGFzaDoKICAgICAgICAgICAgICMgUmVwb3J0IGEgbWlzc2luZyBleHBlY3RlZCBj
aGVja3N1bSBmaWxlLgotICAgICAgICAgICAgc2VsZi5fY29weV9pbWFnZShmaWxlbmFtZSwgYWN0
dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2UpCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdl
X2hhc2goZmlsZW5hbWUsIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaW1hZ2VfaGFzaD1Ob25lKQogICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFn
ZUhhc2goKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwotCi0gICAgICAgIGlmIGFjdHVh
bF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2ggPT0gZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFn
ZV9oYXNoOgotICAgICAgICAgICAgIyBIYXNoIG1hdGNoZWQgKG5vIGRpZmYgbmVlZGVkLCBva2F5
IHRvIHJldHVybikuCi0gICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKLQotICAgICAgICBzZWxm
Ll9jb3B5X2ltYWdlKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlKQotICAgICAg
ICBzZWxmLl9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUsIGFjdHVhbF9kcml2ZXJfb3V0cHV0Lmlt
YWdlX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJf
b3V0cHV0LmltYWdlX2hhc2gpCi0KLSAgICAgICAgIyBFdmVuIHRob3VnaCB3ZSBvbmx5IHVzZSB0
aGUgcmVzdWx0IGluIG9uZSBjb2RlcGF0aCBiZWxvdyBidXQgd2UKLSAgICAgICAgIyBzdGlsbCBu
ZWVkIHRvIGNhbGwgQ3JlYXRlSW1hZ2VEaWZmIGZvciBvdGhlciBjb2RlcGF0aHMuCi0gICAgICAg
IGltYWdlc19hcmVfZGlmZmVyZW50ID0gc2VsZi5fY3JlYXRlX2RpZmZfaW1hZ2UocG9ydCwgZmls
ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5p
bWFnZSkKLSAgICAgICAgaWYgbm90IGltYWdlc19hcmVfZGlmZmVyZW50OgotICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaEluY29ycmVjdCgp
KQotICAgICAgICBlbHNlOgorICAgICAgICBpZiBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZV9o
YXNoICE9IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaDoKICAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L3Rlc3RfdHlwZV9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weQppbmRleCAwOWJmYzMxYzEyOTAwMzVlOTc4MTky
NzQwNmUyMGMyODE0ZDRiOTNkLi40ZTA1MTNhZDIwYzMxZDkwZTdjZjI4OTJmMjI5YzkxMWQ1YTUy
ODc1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0
X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKQEAgLTQ0LDE0ICs0NCw2IEBA
IF93ZGlmZl9hdmFpbGFibGUgPSBUcnVlCiAKIGNsYXNzIFRlc3RUeXBlQmFzZShvYmplY3QpOgog
Ci0gICAgIyBGaWxlbmFtZSBwaWVjZXMgd2hlbiB3cml0aW5nIGZhaWx1cmVzIHRvIHRoZSB0ZXN0
IHJlc3VsdHMgZGlyZWN0b3J5LgotICAgIEZJTEVOQU1FX1NVRkZJWF9BQ1RVQUwgPSAiLWFjdHVh
bCIKLSAgICBGSUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgPSAiLWV4cGVjdGVkIgotICAgIEZJTEVO
QU1FX1NVRkZJWF9ESUZGID0gIi1kaWZmIgotICAgIEZJTEVOQU1FX1NVRkZJWF9XRElGRiA9ICIt
d2RpZmYuaHRtbCIKLSAgICBGSUxFTkFNRV9TVUZGSVhfUFJFVFRZX1BBVENIID0gIi1wcmV0dHkt
ZGlmZi5odG1sIgotICAgIEZJTEVOQU1FX1NVRkZJWF9DT01QQVJFID0gIi1kaWZmLnBuZyIKLQog
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCByb290X291dHB1dF9kaXIpOgogICAgICAgICAi
IiJJbml0aWFsaXplIGEgVGVzdFR5cGVCYXNlIG9iamVjdC4KIApAQCAtNjIsMzMgKzU0LDYgQEAg
Y2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Jvb3Rfb3V0cHV0X2Rp
ciA9IHJvb3Rfb3V0cHV0X2RpcgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogCi0gICAgZGVm
IF9tYWtlX291dHB1dF9kaXJlY3Rvcnkoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICAiIiJDcmVh
dGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBuZWVkZWQpIGZvciBhIGdpdmVuIHRlc3QKLSAg
ICAgICAgZmlsZW5hbWUuIiIiCi0gICAgICAgIGZzID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQot
ICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBmcy5qb2luKHNlbGYuX3Jvb3Rfb3V0cHV0X2RpciwK
LSAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkp
Ci0gICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUob3V0cHV0X2ZpbGVu
YW1lKSkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUsIG1vZGlmaWVy
KToKLSAgICAgICAgIiIiUmV0dXJucyBhIGZpbGVuYW1lIGluc2lkZSB0aGUgb3V0cHV0IGRpciB0
aGF0IGNvbnRhaW5zIG1vZGlmaWVyLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBpZiBmaWxlbmFt
ZSBpcyBjOi8uLi4vZmFzdC9kb20vZm9vLmh0bWwgYW5kIG1vZGlmaWVyIGlzCi0gICAgICAgICIt
ZXhwZWN0ZWQudHh0IiwgdGhlIHJldHVybiB2YWx1ZSBpcwotICAgICAgICBjOi9jeWd3aW4vdG1w
L2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9kb20vZm9vLWV4cGVjdGVkLnR4dAotCi0gICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRlc3QgZmls
ZQotICAgICAgICAgIG1vZGlmaWVyOiBhIHN0cmluZyB0byByZXBsYWNlIHRoZSBleHRlbnNpb24g
b2YgZmlsZW5hbWUgd2l0aAotCi0gICAgICAgIFJldHVybjoKLSAgICAgICAgICBUaGUgYWJzb2x1
dGUgd2luZG93cyBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZW5hbWUKLSAgICAgICAgIiIiCi0gICAg
ICAgIGZzID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQotICAgICAgICBvdXRwdXRfZmlsZW5hbWUg
PSBmcy5qb2luKHNlbGYuX3Jvb3Rfb3V0cHV0X2RpciwKLSAgICAgICAgICAgIHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmcy5zcGxp
dGV4dChvdXRwdXRfZmlsZW5hbWUpWzBdICsgbW9kaWZpZXIKLQogICAgIGRlZiBjb21wYXJlX291
dHB1dChzZWxmLCBwb3J0LCBmaWxlbmFtZSwgb3B0aW9ucywgYWN0dWFsX2RyaXZlcl9vdXRwdXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0KToKICAgICAg
ICAgIiIiTWV0aG9kIHRoYXQgY29tcGFyZXMgdGhlIG91dHB1dCBmcm9tIHRoZSB0ZXN0IHdpdGgg
dGhlCkBAIC0xMDksNjMgKzc0LDMgQEAgY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAgICAg
ICAgICAgYSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMsIGVtcHR5IGlmIHRoZSB0ZXN0IHBh
c3NlcwogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0g
ICAgZGVmIF93cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aChzZWxmLCBmaWxlX3BhdGgsIGNvbnRlbnRz
LCBlbmNvZGluZyk6Ci0gICAgICAgICIiIlRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBieXRlX2Fy
cmF5IGlzIGFscmVhZHkgZW5jb2RlZAotICAgICAgICBpbnRvIHRoZSByaWdodCBmb3JtYXQuIiIi
Ci0gICAgICAgIGZzID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQotICAgICAgICBpZiBlbmNvZGlu
ZyBpcyBOb25lOgotICAgICAgICAgICAgZnMud3JpdGVfYmluYXJ5X2ZpbGUoZmlsZV9wYXRoLCBj
b250ZW50cykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBmcy53cml0ZV90ZXh0X2ZpbGUo
ZmlsZV9wYXRoLCBjb250ZW50cykKLQotICAgIGRlZiB3cml0ZV9vdXRwdXRfZmlsZXMoc2VsZiwg
ZmlsZW5hbWUsIGZpbGVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwg
ZXhwZWN0ZWQsIGVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdGV4
dF9kaWZmcz1GYWxzZSk6Ci0gICAgICAgICIiIldyaXRlcyB0aGUgdGVzdCBvdXRwdXQsIHRoZSBl
eHBlY3RlZCBvdXRwdXQgYW5kIG9wdGlvbmFsbHkgdGhlIGRpZmYKLSAgICAgICAgYmV0d2VlbiB0
aGUgdHdvIHRvIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeS4KLQotICAgICAgICBUaGUg
ZnVsbCBvdXRwdXQgZmlsZW5hbWUgb2YgdGhlIGFjdHVhbCwgZm9yIGV4YW1wbGUsIHdpbGwgYmUK
LSAgICAgICAgICA8ZmlsZW5hbWU+LWFjdHVhbDxmaWxlX3R5cGU+Ci0gICAgICAgIEZvciBpbnN0
YW5jZSwKLSAgICAgICAgICBteV90ZXN0LWFjdHVhbC50eHQKLQotICAgICAgICBBcmdzOgotICAg
ICAgICAgIGZpbGVuYW1lOiBUaGUgdGVzdCBmaWxlbmFtZQotICAgICAgICAgIGZpbGVfdHlwZTog
QSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdGVzdCBvdXRwdXQgZmlsZSB0eXBlLCBlLmcuICIudHh0
IgotICAgICAgICAgIG91dHB1dDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdGVzdCBvdXRwdXQK
LSAgICAgICAgICBleHBlY3RlZDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXhwZWN0ZWQgdGVz
dCBvdXRwdXQKLSAgICAgICAgICBwcmludF90ZXh0X2RpZmZzOiBUcnVlIGZvciB0ZXh0IGRpZmZz
LiAoRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIGZyb20gdGhlIGZpbGUgdHlw
ZT8pCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9tYWtlX291dHB1dF9kaXJlY3RvcnkoZmls
ZW5hbWUpCi0gICAgICAgIGFjdHVhbF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZp
bGVuYW1lLCBzZWxmLkZJTEVOQU1FX1NVRkZJWF9BQ1RVQUwgKyBmaWxlX3R5cGUpCi0gICAgICAg
IGV4cGVjdGVkX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsIHNlbGYu
RklMRU5BTUVfU1VGRklYX0VYUEVDVEVEICsgZmlsZV90eXBlKQotICAgICAgICAjIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGlzIHBvb3JseSBkZXNpZ25lZC4gIFdlIHNob3VsZCBiZSBwYXNzaW5nIGlu
IHNvbWUgc29ydCBvZgotICAgICAgICAjIGVuY29kaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGNh
bGxlcnMuCi0gICAgICAgIGlmIG91dHB1dDoKLSAgICAgICAgICAgIHNlbGYuX3dyaXRlX2ludG9f
ZmlsZV9hdF9wYXRoKGFjdHVhbF9maWxlbmFtZSwgb3V0cHV0LCBlbmNvZGluZykKLSAgICAgICAg
aWYgZXhwZWN0ZWQ6Ci0gICAgICAgICAgICBzZWxmLl93cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aChl
eHBlY3RlZF9maWxlbmFtZSwgZXhwZWN0ZWQsIGVuY29kaW5nKQotCi0gICAgICAgIGlmIG5vdCBv
dXRwdXQgb3Igbm90IGV4cGVjdGVkOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYg
bm90IHByaW50X3RleHRfZGlmZnM6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIE5v
dGU6IFdlIHBhc3MgZW5jb2Rpbmc9Tm9uZSBmb3IgYWxsIGRpZmYgd3JpdGVzLCBhcyB3ZSB0cmVh
dCBkaWZmCi0gICAgICAgICMgb3V0cHV0IGFzIGJpbmFyeS4gIERpZmYgb3V0cHV0IG1heSBjb250
YWluIG11bHRpcGxlIGZpbGVzIGluCi0gICAgICAgICMgY29uZmxpY3RpbmcgZW5jb2RpbmdzLgot
ICAgICAgICBkaWZmID0gc2VsZi5fcG9ydC5kaWZmX3RleHQoZXhwZWN0ZWQsIG91dHB1dCwgZXhw
ZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSkKLSAgICAgICAgZGlmZl9maWxlbmFtZSA9
IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLCBzZWxmLkZJTEVOQU1FX1NVRkZJWF9ESUZG
ICsgZmlsZV90eXBlKQotICAgICAgICBzZWxmLl93cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aChkaWZm
X2ZpbGVuYW1lLCBkaWZmLCBlbmNvZGluZz1Ob25lKQotCi0gICAgICAgICMgU2hlbGwgb3V0IHRv
IHdkaWZmIHRvIGdldCBjb2xvcmVkIGlubGluZSBkaWZmcy4KLSAgICAgICAgd2RpZmYgPSBzZWxm
Ll9wb3J0LndkaWZmX3RleHQoZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSkKLSAg
ICAgICAgd2RpZmZfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwgc2Vs
Zi5GSUxFTkFNRV9TVUZGSVhfV0RJRkYpCi0gICAgICAgIHNlbGYuX3dyaXRlX2ludG9fZmlsZV9h
dF9wYXRoKHdkaWZmX2ZpbGVuYW1lLCB3ZGlmZiwgZW5jb2Rpbmc9Tm9uZSkKLQotICAgICAgICAj
IFVzZSBXZWJLaXQncyBQcmV0dHlQYXRjaC5yYiB0byBnZXQgYW4gSFRNTCBkaWZmLgotICAgICAg
ICBwcmV0dHlfcGF0Y2ggPSBzZWxmLl9wb3J0LnByZXR0eV9wYXRjaF90ZXh0KGRpZmZfZmlsZW5h
bWUpCi0gICAgICAgIHByZXR0eV9wYXRjaF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1l
KGZpbGVuYW1lLCBzZWxmLkZJTEVOQU1FX1NVRkZJWF9QUkVUVFlfUEFUQ0gpCi0gICAgICAgIHNl
bGYuX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKHByZXR0eV9wYXRjaF9maWxlbmFtZSwgcHJldHR5
X3BhdGNoLCBlbmNvZGluZz1Ob25lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQppbmRleCAwN2MzZDAz
ZmE1NDk3MTVjNGUwZTdiYjI2ZWZhNTY2ZTNkZjdlY2ZiLi4yNmRiOGRiZTE2MzUxNGI1ZjA1NDdh
MjhmMWE5ZWU3Y2ZmYWI5N2IxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQpAQCAtNjcsMTAgKzY3
LDYgQEAgY2xhc3MgVGVzdFRleHREaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAg
ICAgICAgICMgV3JpdGUgb3V0cHV0IGZpbGVzIGZvciBuZXcgdGVzdHMsIHRvby4KICAgICAgICAg
aWYgcG9ydC5jb21wYXJlX3RleHQoYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgogICAgICAg
ICAgICAgIyBUZXh0IGRvZXNuJ3QgbWF0Y2gsIHdyaXRlIG91dHB1dCBmaWxlcy4KLSAgICAgICAg
ICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKGZpbGVuYW1lLCAiLnR4dCIsIGFjdHVhbF90ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dCwgZW5j
b2Rpbmc9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3Rl
eHRfZGlmZnM9VHJ1ZSkKLQogICAgICAgICAgICAgaWYgZXhwZWN0ZWRfdGV4dCA9PSAnJzoKICAg
ICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2lu
Z1Jlc3VsdCgpKQogICAgICAgICAgICAgZWxzZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81610</attachid>
            <date>2011-02-08 00:36:12 -0800</date>
            <delta_ts>2011-02-17 03:11:53 -0800</delta_ts>
            <desc>refactor-test-result-writing</desc>
            <filename>bug-53908-20110208173610.patch</filename>
            <type>text/plain</type>
            <size>22412</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2ZDQ2
MWI1NDM2NWZmZDY4NmVlNDIyMDQwZWIwNzkxYzQ5ZWQ0NGY3Li4zZjdiMzNlODZkZWM3NTE3YTFi
NmZhN2FhYjJmOGRjY2NiN2YwNDFkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDItMDcgIEhheWF0byBJdG8g
IDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdldCByaWQgb2YgY29kZSB3aGljaCB3cml0ZXMgdGVzdCByZXN1bHRz
IGZyb20gdGVzdF90eXBlJ3MKKyAgICAgICAgY29tcGFyZV9vdXRwdXQoKSBtZXRob2QuCisgICAg
ICAgIFdyaXRpbmcgdGVzdCByZXN1bHRzIG5vdyBoYXBwZW5zIGluIHNpbmdsZV90ZXN0X3J1bm5l
ciwgdXNpbmcKKyAgICAgICAgbmV3bHkgaW50cm9kdWNlZCB0ZXN0X3Jlc3VsdF93cml0ZXIgbW9k
dWxlLgorCisgICAgICAgIFN1YnNlcXVlbnQgcGF0Y2hlcyB3aWxsIGVsaW1pbmF0ZSB0ZXN0X3R5
cGUvKiBjbGFzc2VzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MzkwOAorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcmVzdWx0X3dyaXRlci5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHk6CisKIDIwMTEtMDItMDMg
IEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVu
bmVyLnB5CmluZGV4IDJjNGY0MGQxY2Q5ZTdjOWE0YmJhNjFhMzcyMDUzZDE0ZWQ2ZWZkNWQuLmVh
YTlmY2YzZGI4MGFiMTBhOGM3YTUxMjliYjljNDNjODJlYTJiMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0
X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKQEAgLTMzLDYgKzMzLDcgQEAgaW1wb3J0
IHRpbWUKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgYmFzZQogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVy
ZXMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X3Jlc3VsdF93cml0ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
LnRlc3RfcmVzdWx0cyBpbXBvcnQgVGVzdFJlc3VsdAogCiAKQEAgLTE4Nyw2ICsxODgsOSBAQCBj
bGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICAgICAgIyB3ZSBzdGlsbCB3YW50IHRvIHNl
ZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgogICAgICAgICAgICAgaWYgbm90IGRyaXZlcl9v
dXRwdXQuY3Jhc2g6CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWlsdXJl
cykKKyAgICAgICAgICAgIHRlc3RfcmVzdWx0X3dyaXRlci53cml0ZV90ZXN0X3Jlc3VsdCgKKyAg
ICAgICAgICAgICAgICBzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
LCBzZWxmLl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICBkcml2ZXJfb3V0cHV0LCBleHBlY3Rl
ZF9kcml2ZXJfb3V0cHV0LCBuZXdfZmFpbHVyZXMpCiAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZm
c1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKICAgICAgICAgICAgICAgICB0aW1l
LnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9yZXN1bHRfd3JpdGVyLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVz
dF9yZXN1bHRfd3JpdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlN2JiNTlmMmU1ZDU2NjYyNjFmZDhkYWFk
NzUwNjZmMTlhMGQyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3Jlc3VsdF93cml0ZXIucHkKQEAgLTAs
MCArMSwyMjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
b3MKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfZmFpbHVyZXMKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
ZGVmIHdyaXRlX3Rlc3RfcmVzdWx0KHBvcnQsIHJvb3Rfb3V0cHV0X2RpciwgZmlsZW5hbWUsIGRy
aXZlcl9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZHJpdmVyX291dHB1
dCwgZmFpbHVyZXMpOgorICAgICIiIldyaXRlIHRoZSB0ZXN0IHJlc3VsdCB0byB0aGUgcmVzdWx0
IG91dHB1dCBkaXJlY3RvcnkuIiIiCisgICAgY2hlY2tzdW1zX21pc21hdGNoX2J1dF9pbWFnZXNf
YXJlX3NhbWUgPSBGYWxzZQorICAgIGltYWdlaGFzaF9taXNtYXRjaF9mYWlsdXJlID0gTm9uZQor
ICAgIHdyaXRlciA9IFRlc3RSZXN1bHRXcml0ZXIocG9ydCwgcm9vdF9vdXRwdXRfZGlyLCBmaWxl
bmFtZSkKKyAgICBmb3IgZmFpbHVyZSBpbiBmYWlsdXJlczoKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShmYWlsdXJlLCAodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ1Jlc3VsdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNo
KSk6CisgICAgICAgICAgICB3cml0ZXIuY29weV90ZXh0KGRyaXZlcl9vdXRwdXQudGV4dCwgZXhw
ZWN0ZWRfZHJpdmVyX291dHB1dC50ZXh0KQorICAgICAgICAgICAgd3JpdGVyLmNyZWF0ZV90ZXh0
X2RpZmYoZHJpdmVyX291dHB1dC50ZXh0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LnRleHQpCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNz
aW5nSW1hZ2UpOgorICAgICAgICAgICAgd3JpdGVyLmNvcHlfaW1hZ2UoZHJpdmVyX291dHB1dC5p
bWFnZSwgZXhwZWN0ZWRfaW1hZ2U9Tm9uZSkKKyAgICAgICAgICAgIHdyaXRlci5jb3B5X2ltYWdl
X2hhc2goZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gpCisgICAgICAgIGVs
aWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2VI
YXNoKToKKyAgICAgICAgICAgIHdyaXRlci5jb3B5X2ltYWdlKGRyaXZlcl9vdXRwdXQuaW1hZ2Us
IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2UpCisgICAgICAgICAgICB3cml0ZXIuY29weV9p
bWFnZV9oYXNoKGRyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRfaW1hZ2VfaGFzaD1Ob25lKQorICAgICAgICBlbGlmIGlz
aW5zdGFuY2UoZmFpbHVyZSwgdGVzdF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2gp
OgorICAgICAgICAgICAgd3JpdGVyLmNvcHlfaW1hZ2UoZHJpdmVyX291dHB1dC5pbWFnZSwgZXhw
ZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZSkKKyAgICAgICAgICAgIHdyaXRlci5jb3B5X2ltYWdl
X2hhc2goZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gpCisgICAgICAgICAg
ICBpbWFnZXNfYXJlX2RpZmZlcmVudCA9IHdyaXRlci5jcmVhdGVfZGlmZl9pbWFnZSgKKyAgICAg
ICAgICAgICAgICBkcml2ZXJfb3V0cHV0LmltYWdlLCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0Lmlt
YWdlKQorICAgICAgICAgICAgaWYgbm90IGltYWdlc19hcmVfZGlmZmVyZW50OgorICAgICAgICAg
ICAgICAgIGNoZWNrc3Vtc19taXNtYXRjaF9idXRfaW1hZ2VzX2FyZV9zYW1lID0gVHJ1ZQorICAg
ICAgICAgICAgICAgIGltYWdlaGFzaF9taXNtYXRjaF9mYWlsdXJlID0gZmFpbHVyZQorICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgdGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2gpOgor
ICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NyYXNoX3JlcG9ydChkcml2ZXJfb3V0cHV0LmVycm9y
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmFpbHVyZSwg
KHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQsKSkKKworICAgICMgRklYTUU6IFRoaXMgaXMg
YSB1Z2x5IGhhY2sgdG8gaGFuZGxlIEZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QgY2FzZS4KKyAg
ICAjIElkZWFsbHksIEZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QgY2FzZSBzaG91bGQgYmUgZGV0
ZWN0ZWQgYmVmb3JlIHRoaXMKKyAgICAjIGZ1bmN0aW9uIGlzIGNhbGxlZC4gQnV0IGl0IHJlcXVp
cmVzIGNhbGxpbmcgY3JlYXRlX2RpZmZfaW1hZ2UoKSB0byBkZXRlY3QKKyAgICAjIHdoZXRoZXIg
aWFtZ2VzIGFyZSBzYW1lIG9yIG5vdC4gU28gbmVlZCB0aGlzIGhhY2sgdW50aWwgd2UgaGF2ZSBh
IGJldHRlcgorICAgICMgYXBwcm9hY2guCisgICAgaWYgY2hlY2tzdW1zX21pc21hdGNoX2J1dF9p
bWFnZXNfYXJlX3NhbWU6CisgICAgICAgICMgUmVwbGFjZSBGYWlsdXJlSW1hZ2VIYXNoTWlzbWF0
Y2ggd2l0aCBGYWlsdXJlSW1hZ2VIYXNoSW5jb3JyZWN0LgorICAgICAgICBmYWlsdXJlcy5yZW1v
dmUoaW1hZ2VoYXNoX21pc21hdGNoX2ZhaWx1cmUpCisgICAgICAgIGZpYWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QoKSkKKworCitjbGFzcyBUZXN0
UmVzdWx0V3JpdGVyKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyB3aGljaCBoYW5kbGVzIGFsbCB3
cml0aW5nIG9wZXJhdGlvbnMgdG8gdGhlIHJlc3VsdCBkaXJlY3RvcnkuIiIiCisKKyAgICAjIEZp
bGVuYW1lIHBpZWNlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZXMgdG8gdGhlIHRlc3QgcmVzdWx0cyBk
aXJlY3RvcnkuCisgICAgRklMRU5BTUVfU1VGRklYX0FDVFVBTCA9ICItYWN0dWFsIgorICAgIEZJ
TEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCA9ICItZXhwZWN0ZWQiCisgICAgRklMRU5BTUVfU1VGRklY
X0RJRkYgPSAiLWRpZmYiCisgICAgRklMRU5BTUVfU1VGRklYX1dESUZGID0gIi13ZGlmZi5odG1s
IgorICAgIEZJTEVOQU1FX1NVRkZJWF9QUkVUVFlfUEFUQ0ggPSAiLXByZXR0eS1kaWZmLmh0bWwi
CisgICAgRklMRU5BTUVfU1VGRklYX0NPTVBBUkUgPSAiLWRpZmYucG5nIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIHJvb3Rfb3V0cHV0X2RpciwgZmlsZW5hbWUpOgorICAgICAgICAi
IiJJbml0aWFsaXplIGEgVGVzdFR5cGVCYXNlIG9iamVjdC4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYyBpbmZvcm1hdGlv
biBhbmQgbWV0aG9kcworICAgICAgICAgIHJvb3Rfb3V0cHV0X2RpcjogVGhlIHVuaXggc3R5bGUg
cGF0aCB0byB0aGUgb3V0cHV0IGRpci4KKyAgICAgICAgICBmaWxlbmFtZTogcGF0aCB0byB0aGUg
dGVzdCBmaWxlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAg
ICBzZWxmLl9yb290X291dHB1dF9kaXIgPSByb290X291dHB1dF9kaXIKKyAgICAgICAgc2VsZi5f
ZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLl90ZXN0bmFtZSA9IHBvcnQucmVsYXRp
dmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKworICAgIGRlZiBfbWFrZV9vdXRwdXRfZGlyZWN0
b3J5KHNlbGYpOgorICAgICAgICAiIiJDcmVhdGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBu
ZWVkZWQpIGZvciBhIGdpdmVuIHRlc3QKKyAgICAgICAgZmlsZW5hbWUuIiIiCisgICAgICAgIGZz
ID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBmcy5q
b2luKHNlbGYuX3Jvb3Rfb3V0cHV0X2Rpciwgc2VsZi5fdGVzdG5hbWUpCisgICAgICAgIHNlbGYu
X3BvcnQubWF5YmVfbWFrZV9kaXJlY3RvcnkoZnMuZGlybmFtZShvdXRwdXRfZmlsZW5hbWUpKQor
CisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmLCBtb2RpZmllcik6CisgICAgICAgICIiIlJl
dHVybnMgYSBmaWxlbmFtZSBpbnNpZGUgdGhlIG91dHB1dCBkaXIgdGhhdCBjb250YWlucyBtb2Rp
Zmllci4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaWYgZmlsZW5hbWUgaXMgYzovLi4uL2Zhc3Qv
ZG9tL2Zvby5odG1sIGFuZCBtb2RpZmllciBpcworICAgICAgICAiLWV4cGVjdGVkLnR4dCIsIHRo
ZSByZXR1cm4gdmFsdWUgaXMKKyAgICAgICAgYzovY3lnd2luL3RtcC9sYXlvdXQtdGVzdC1yZXN1
bHRzL2Zhc3QvZG9tL2Zvby1leHBlY3RlZC50eHQKKworICAgICAgICBBcmdzOgorICAgICAgICAg
IG1vZGlmaWVyOiBhIHN0cmluZyB0byByZXBsYWNlIHRoZSBleHRlbnNpb24gb2YgZmlsZW5hbWUg
d2l0aAorCisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBUaGUgYWJzb2x1dGUgd2luZG93cyBw
YXRoIHRvIHRoZSBvdXRwdXQgZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIGZzID0gc2Vs
Zi5fcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBmcy5qb2luKHNl
bGYuX3Jvb3Rfb3V0cHV0X2Rpciwgc2VsZi5fdGVzdG5hbWUpCisgICAgICAgIHJldHVybiBmcy5z
cGxpdGV4dChvdXRwdXRfZmlsZW5hbWUpWzBdICsgbW9kaWZpZXIKKworICAgIGRlZiBfd3JpdGVf
aW50b19maWxlX2F0X3BhdGgoc2VsZiwgZmlsZV9wYXRoLCBjb250ZW50cywgZW5jb2RpbmcpOgor
ICAgICAgICAiIiJUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgYnl0ZV9hcnJheSBpcyBhbHJlYWR5
IGVuY29kZWQKKyAgICAgICAgaW50byB0aGUgcmlnaHQgZm9ybWF0LiIiIgorICAgICAgICBmcyA9
IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAg
ICAgICAgICAgIGZzLndyaXRlX2JpbmFyeV9maWxlKGZpbGVfcGF0aCwgY29udGVudHMpCisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgZnMud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwgY29u
dGVudHMpCisKKyAgICBkZWYgd3JpdGVfb3V0cHV0X2ZpbGVzKHNlbGYsIGZpbGVfdHlwZSwgb3V0
cHV0LCBleHBlY3RlZCwgZW5jb2RpbmcpOgorICAgICAgICAiIiJXcml0ZXMgdGhlIHRlc3Qgb3V0
cHV0LCB0aGUgZXhwZWN0ZWQgb3V0cHV0IGFuZCBvcHRpb25hbGx5IHRoZSBkaWZmCisgICAgICAg
IGJldHdlZW4gdGhlIHR3byB0byBmaWxlcyBpbiB0aGUgcmVzdWx0cyBkaXJlY3RvcnkuCisKKyAg
ICAgICAgVGhlIGZ1bGwgb3V0cHV0IGZpbGVuYW1lIG9mIHRoZSBhY3R1YWwsIGZvciBleGFtcGxl
LCB3aWxsIGJlCisgICAgICAgICAgPGZpbGVuYW1lPi1hY3R1YWw8ZmlsZV90eXBlPgorICAgICAg
ICBGb3IgaW5zdGFuY2UsCisgICAgICAgICAgbXlfdGVzdC1hY3R1YWwudHh0CisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBmaWxlX3R5cGU6IEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3Qg
b3V0cHV0IGZpbGUgdHlwZSwgZS5nLiAiLnR4dCIKKyAgICAgICAgICBvdXRwdXQ6IEEgc3RyaW5n
IGNvbnRhaW5pbmcgdGhlIHRlc3Qgb3V0cHV0CisgICAgICAgICAgZXhwZWN0ZWQ6IEEgc3RyaW5n
IGNvbnRhaW5pbmcgdGhlIGV4cGVjdGVkIHRlc3Qgb3V0cHV0CisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLl9tYWtlX291dHB1dF9kaXJlY3RvcnkoKQorICAgICAgICBhY3R1YWxfZmlsZW5hbWUg
PSBzZWxmLm91dHB1dF9maWxlbmFtZShzZWxmLkZJTEVOQU1FX1NVRkZJWF9BQ1RVQUwgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpCisg
ICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxF
TkFNRV9TVUZGSVhfRVhQRUNURUQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkKKyAgICAgICAgIyBGSVhNRTogVGhpcyBmdW5jdGlv
biBpcyBwb29ybHkgZGVzaWduZWQuICBXZSBzaG91bGQgYmUgcGFzc2luZyBpbiBzb21lCisgICAg
ICAgICMgc29ydCBvZiBlbmNvZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjYWxsZXJzLgorICAg
ICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9pbnRvX2ZpbGVfYXRfcGF0
aChhY3R1YWxfZmlsZW5hbWUsIG91dHB1dCwgZW5jb2RpbmcpCisgICAgICAgIGlmIGV4cGVjdGVk
OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgoZXhwZWN0ZWRfZmls
ZW5hbWUsIGV4cGVjdGVkLCBlbmNvZGluZykKKworICAgIGRlZiB3cml0ZV9jcmFzaF9yZXBvcnQo
c2VsZiwgZXJyb3IpOgorICAgICAgICAiIiJXcml0ZSBjcmFzaCBpbmZvcm1hdGlvbi4iIiIKKyAg
ICAgICAgZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIGZpbGVuYW1lID0gc2Vs
Zi5vdXRwdXRfZmlsZW5hbWUoIi1zdGFjay50eHQiKQorICAgICAgICBmcy5tYXliZV9tYWtlX2Rp
cmVjdG9yeShmcy5kaXJuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgZnMud3JpdGVfdGV4dF9maWxl
KGZpbGVuYW1lLCBlcnJvcikKKworICAgIGRlZiBjb3B5X3RleHQoc2VsZiwgYWN0dWFsX3RleHQs
IGV4cGVjdGVkX3RleHQpOgorICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcygiLnR4dCIs
IGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmNvZGluZz1Ob25lKQorCisgICAgZGVmIGNyZWF0ZV90ZXh0X2RpZmYoc2VsZiwgYWN0
dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgorICAgICAgICBpZiBub3QgYWN0dWFsX3RleHQgb3Ig
bm90IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9t
YWtlX291dHB1dF9kaXJlY3RvcnkoKQorICAgICAgICBmaWxlX3R5cGUgPSAnLnR4dCcKKyAgICAg
ICAgYWN0dWFsX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9T
VUZGSVhfQUNUVUFMICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZV90eXBlKQorICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYub3V0cHV0
X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX0VYUEVDVEVEICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpCisKKyAgICAgICAg
IyBOb3RlOiBXZSBwYXNzIGVuY29kaW5nPU5vbmUgZm9yIGFsbCBkaWZmIHdyaXRlcywgYXMgd2Ug
dHJlYXQgZGlmZgorICAgICAgICAjIG91dHB1dCBhcyBiaW5hcnkuICBEaWZmIG91dHB1dCBtYXkg
Y29udGFpbiBtdWx0aXBsZSBmaWxlcyBpbgorICAgICAgICAjIGNvbmZsaWN0aW5nIGVuY29kaW5n
cy4KKyAgICAgICAgZGlmZiA9IHNlbGYuX3BvcnQuZGlmZl90ZXh0KGV4cGVjdGVkX3RleHQsIGFj
dHVhbF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
ZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSkKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYu
b3V0cHV0X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX0RJRkYgKyBmaWxlX3R5cGUpCisg
ICAgICAgIHNlbGYuX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKGRpZmZfZmlsZW5hbWUsIGRpZmYs
IGVuY29kaW5nPU5vbmUpCisKKyAgICAgICAgIyBTaGVsbCBvdXQgdG8gd2RpZmYgdG8gZ2V0IGNv
bG9yZWQgaW5saW5lIGRpZmZzLgorICAgICAgICB3ZGlmZiA9IHNlbGYuX3BvcnQud2RpZmZfdGV4
dChleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQorICAgICAgICB3ZGlmZl9maWxl
bmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX1dESUZGKQor
ICAgICAgICBzZWxmLl93cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aCh3ZGlmZl9maWxlbmFtZSwgd2Rp
ZmYsIGVuY29kaW5nPU5vbmUpCisKKyAgICAgICAgIyBVc2UgV2ViS2l0J3MgUHJldHR5UGF0Y2gu
cmIgdG8gZ2V0IGFuIEhUTUwgZGlmZi4KKyAgICAgICAgcHJldHR5X3BhdGNoID0gc2VsZi5fcG9y
dC5wcmV0dHlfcGF0Y2hfdGV4dChkaWZmX2ZpbGVuYW1lKQorICAgICAgICBwcmV0dHlfcGF0Y2hf
ZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZSgKKyAgICAgICAgICAgIHNlbGYuRklMRU5B
TUVfU1VGRklYX1BSRVRUWV9QQVRDSCkKKyAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0
X3BhdGgocHJldHR5X3BhdGNoX2ZpbGVuYW1lLCBwcmV0dHlfcGF0Y2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPU5vbmUpCisKKyAgICBkZWYgY29weV9p
bWFnZShzZWxmLCBhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlKToKKyAgICAgICAgc2VsZi53
cml0ZV9vdXRwdXRfZmlsZXMoJy5wbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQ9YWN0dWFsX2ltYWdlLCBleHBlY3RlZD1leHBlY3RlZF9pbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSkKKworICAgIGRlZiBjb3B5X2lt
YWdlX2hhc2goc2VsZiwgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hhc2gpOgor
ICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcygnLmNoZWNrc3VtJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hh
c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIpCisK
KyAgICBkZWYgY3JlYXRlX2RpZmZfaW1hZ2Uoc2VsZiwgYWN0dWFsX2ltYWdlLCBleHBlY3RlZF9p
bWFnZSk6CisgICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBlY3Rl
ZC9hY3R1YWwgUE5Hcy4KKworICAgICAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGltYWdlcyBhcmUg
ZGlmZmVyZW50LgorICAgICAgICAiIiIKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0
cHV0X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX0NPTVBBUkUpCisgICAgICAgIHJldHVy
biBzZWxmLl9wb3J0LmRpZmZfaW1hZ2UoYWN0dWFsX2ltYWdlLCBleHBlY3RlZF9pbWFnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFn
ZV9kaWZmLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy9pbWFnZV9kaWZmLnB5CmluZGV4IDFkN2UxMDcyNDc2ZDQzNmQ0ZThkMjJhYmJjOTA4ODM5Nzkw
NmRmYmMuLjc3N2ZlOTU5YTIyMmNiMDlhNGU5MTlhMmM2MWYzNjlkZmE5MjQ3MzEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2Vf
ZGlmZi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL2ltYWdlX2RpZmYucHkKQEAgLTgxLDM3ICs4MSwxNCBAQCBjbGFzcyBJbWFnZURpZmYodGVz
dF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKIAogICAgICAgICBpZiBub3QgZXhwZWN0ZWRfZHJp
dmVyX291dHB1dC5pbWFnZToKICAgICAgICAgICAgICMgUmVwb3J0IGEgbWlzc2luZyBleHBlY3Rl
ZCBQTkcgZmlsZS4KLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2UoZmlsZW5hbWUsIGFjdHVh
bF9kcml2ZXJfb3V0cHV0LmltYWdlLCBleHBlY3RlZF9pbWFnZT1Ob25lKQotICAgICAgICAgICAg
c2VsZi5fY29weV9pbWFnZV9oYXNoKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFn
ZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZl
cl9vdXRwdXQuaW1hZ2VfaGFzaCkKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJl
cwogICAgICAgICBpZiBub3QgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoOgogICAg
ICAgICAgICAgIyBSZXBvcnQgYSBtaXNzaW5nIGV4cGVjdGVkIGNoZWNrc3VtIGZpbGUuCi0gICAg
ICAgICAgICBzZWxmLl9jb3B5X2ltYWdlKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5p
bWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZHJpdmVyX291dHB1
dC5pbWFnZSkKLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2VfaGFzaChmaWxlbmFtZSwgYWN0
dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9pbWFnZV9oYXNoPU5vbmUpCiAgICAgICAgICAgICBmYWlsdXJlcy5h
cHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlSGFzaCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhaWx1cmVzCi0KLSAgICAgICAgaWYgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1h
Z2VfaGFzaCA9PSBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2g6Ci0gICAgICAgICAg
ICAjIEhhc2ggbWF0Y2hlZCAobm8gZGlmZiBuZWVkZWQsIG9rYXkgdG8gcmV0dXJuKS4KLSAgICAg
ICAgICAgIHJldHVybiBmYWlsdXJlcwotCi0gICAgICAgIHNlbGYuX2NvcHlfaW1hZ2UoZmlsZW5h
bWUsIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2UpCi0gICAgICAgIHNlbGYuX2NvcHlfaW1hZ2Vf
aGFzaChmaWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCkK
LQotICAgICAgICAjIEV2ZW4gdGhvdWdoIHdlIG9ubHkgdXNlIHRoZSByZXN1bHQgaW4gb25lIGNv
ZGVwYXRoIGJlbG93IGJ1dCB3ZQotICAgICAgICAjIHN0aWxsIG5lZWQgdG8gY2FsbCBDcmVhdGVJ
bWFnZURpZmYgZm9yIG90aGVyIGNvZGVwYXRocy4KLSAgICAgICAgaW1hZ2VzX2FyZV9kaWZmZXJl
bnQgPSBzZWxmLl9jcmVhdGVfZGlmZl9pbWFnZShwb3J0LCBmaWxlbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZHJpdmVy
X291dHB1dC5pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlKQotICAgICAgICBpZiBu
b3QgaW1hZ2VzX2FyZV9kaWZmZXJlbnQ6Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVz
dF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoSW5jb3JyZWN0KCkpCi0gICAgICAgIGVsc2U6Cisg
ICAgICAgIGlmIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2ggIT0gZXhwZWN0ZWRfZHJp
dmVyX291dHB1dC5pbWFnZV9oYXNoOgogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3Rf
ZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFpbHVyZXMKIAogICAgICAgICByZXR1cm4gZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlw
ZV9iYXNlLnB5CmluZGV4IDA5YmZjMzFjMTI5MDAzNWU5NzgxOTI3NDA2ZTIwYzI4MTRkNGI5M2Qu
LjRlMDUxM2FkMjBjMzFkOTBlN2NmMjg5MmYyMjljOTExZDVhNTI4NzUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jh
c2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy90ZXN0X3R5cGVfYmFzZS5weQpAQCAtNDQsMTQgKzQ0LDYgQEAgX3dkaWZmX2F2YWlsYWJsZSA9
IFRydWUKIAogY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAKLSAgICAjIEZpbGVuYW1lIHBp
ZWNlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZXMgdG8gdGhlIHRlc3QgcmVzdWx0cyBkaXJlY3Rvcnku
Ci0gICAgRklMRU5BTUVfU1VGRklYX0FDVFVBTCA9ICItYWN0dWFsIgotICAgIEZJTEVOQU1FX1NV
RkZJWF9FWFBFQ1RFRCA9ICItZXhwZWN0ZWQiCi0gICAgRklMRU5BTUVfU1VGRklYX0RJRkYgPSAi
LWRpZmYiCi0gICAgRklMRU5BTUVfU1VGRklYX1dESUZGID0gIi13ZGlmZi5odG1sIgotICAgIEZJ
TEVOQU1FX1NVRkZJWF9QUkVUVFlfUEFUQ0ggPSAiLXByZXR0eS1kaWZmLmh0bWwiCi0gICAgRklM
RU5BTUVfU1VGRklYX0NPTVBBUkUgPSAiLWRpZmYucG5nIgotCiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnQsIHJvb3Rfb3V0cHV0X2Rpcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgYSBUZXN0
VHlwZUJhc2Ugb2JqZWN0LgogCkBAIC02MiwzMyArNTQsNiBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uo
b2JqZWN0KToKICAgICAgICAgc2VsZi5fcm9vdF9vdXRwdXRfZGlyID0gcm9vdF9vdXRwdXRfZGly
CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAKLSAgICBkZWYgX21ha2Vfb3V0cHV0X2RpcmVj
dG9yeShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIkNyZWF0ZXMgdGhlIG91dHB1dCBkaXJl
Y3RvcnkgKGlmIG5lZWRlZCkgZm9yIGEgZ2l2ZW4gdGVzdAotICAgICAgICBmaWxlbmFtZS4iIiIK
LSAgICAgICAgZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCi0gICAgICAgIG91dHB1dF9maWxl
bmFtZSA9IGZzLmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLAotICAgICAgICAgICAgc2VsZi5f
cG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKLSAgICAgICAgZnMubWF5YmVf
bWFrZV9kaXJlY3RvcnkoZnMuZGlybmFtZShvdXRwdXRfZmlsZW5hbWUpKQotCi0gICAgZGVmIG91
dHB1dF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSwgbW9kaWZpZXIpOgotICAgICAgICAiIiJSZXR1
cm5zIGEgZmlsZW5hbWUgaW5zaWRlIHRoZSBvdXRwdXQgZGlyIHRoYXQgY29udGFpbnMgbW9kaWZp
ZXIuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGZpbGVuYW1lIGlzIGM6Ly4uLi9mYXN0L2Rv
bS9mb28uaHRtbCBhbmQgbW9kaWZpZXIgaXMKLSAgICAgICAgIi1leHBlY3RlZC50eHQiLCB0aGUg
cmV0dXJuIHZhbHVlIGlzCi0gICAgICAgIGM6L2N5Z3dpbi90bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2RvbS9mb28tZXhwZWN0ZWQudHh0Ci0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBm
aWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCi0gICAgICAgICAgbW9kaWZp
ZXI6IGEgc3RyaW5nIHRvIHJlcGxhY2UgdGhlIGV4dGVuc2lvbiBvZiBmaWxlbmFtZSB3aXRoCi0K
LSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBhYnNvbHV0ZSB3aW5kb3dzIHBhdGggdG8g
dGhlIG91dHB1dCBmaWxlbmFtZQotICAgICAgICAiIiIKLSAgICAgICAgZnMgPSBzZWxmLl9wb3J0
Ll9maWxlc3lzdGVtCi0gICAgICAgIG91dHB1dF9maWxlbmFtZSA9IGZzLmpvaW4oc2VsZi5fcm9v
dF9vdXRwdXRfZGlyLAotICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZzLnNwbGl0ZXh0KG91dHB1dF9maWxlbmFt
ZSlbMF0gKyBtb2RpZmllcgotCiAgICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIHBvcnQsIGZp
bGVuYW1lLCBvcHRpb25zLCBhY3R1YWxfZHJpdmVyX291dHB1dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpOgogICAgICAgICAiIiJNZXRob2QgdGhhdCBj
b21wYXJlcyB0aGUgb3V0cHV0IGZyb20gdGhlIHRlc3Qgd2l0aCB0aGUKQEAgLTEwOSw2MyArNzQs
MyBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICBhIGxpc3Qgb2YgVGVz
dEZhaWx1cmUgb2JqZWN0cywgZW1wdHkgaWYgdGhlIHRlc3QgcGFzc2VzCiAgICAgICAgICIiIgog
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgX3dyaXRlX2ludG9f
ZmlsZV9hdF9wYXRoKHNlbGYsIGZpbGVfcGF0aCwgY29udGVudHMsIGVuY29kaW5nKToKLSAgICAg
ICAgIiIiVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGJ5dGVfYXJyYXkgaXMgYWxyZWFkeSBlbmNv
ZGVkCi0gICAgICAgIGludG8gdGhlIHJpZ2h0IGZvcm1hdC4iIiIKLSAgICAgICAgZnMgPSBzZWxm
Ll9wb3J0Ll9maWxlc3lzdGVtCi0gICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAg
ICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZShmaWxlX3BhdGgsIGNvbnRlbnRzKQotICAgICAgICAg
ICAgcmV0dXJuCi0gICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShmaWxlX3BhdGgsIGNvbnRlbnRz
KQotCi0gICAgZGVmIHdyaXRlX291dHB1dF9maWxlcyhzZWxmLCBmaWxlbmFtZSwgZmlsZV90eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBleHBlY3RlZCwgZW5jb2Rpbmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF90ZXh0X2RpZmZzPUZhbHNlKToKLSAg
ICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91dHB1dCwgdGhlIGV4cGVjdGVkIG91dHB1dCBhbmQg
b3B0aW9uYWxseSB0aGUgZGlmZgotICAgICAgICBiZXR3ZWVuIHRoZSB0d28gdG8gZmlsZXMgaW4g
dGhlIHJlc3VsdHMgZGlyZWN0b3J5LgotCi0gICAgICAgIFRoZSBmdWxsIG91dHB1dCBmaWxlbmFt
ZSBvZiB0aGUgYWN0dWFsLCBmb3IgZXhhbXBsZSwgd2lsbCBiZQotICAgICAgICAgIDxmaWxlbmFt
ZT4tYWN0dWFsPGZpbGVfdHlwZT4KLSAgICAgICAgRm9yIGluc3RhbmNlLAotICAgICAgICAgIG15
X3Rlc3QtYWN0dWFsLnR4dAotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZmlsZW5hbWU6IFRo
ZSB0ZXN0IGZpbGVuYW1lCi0gICAgICAgICAgZmlsZV90eXBlOiBBIHN0cmluZyBkZXNjcmliaW5n
IHRoZSB0ZXN0IG91dHB1dCBmaWxlIHR5cGUsIGUuZy4gIi50eHQiCi0gICAgICAgICAgb3V0cHV0
OiBBIHN0cmluZyBjb250YWluaW5nIHRoZSB0ZXN0IG91dHB1dAotICAgICAgICAgIGV4cGVjdGVk
OiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBleHBlY3RlZCB0ZXN0IG91dHB1dAotICAgICAgICAg
IHByaW50X3RleHRfZGlmZnM6IFRydWUgZm9yIHRleHQgZGlmZnMuIChGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gZ2V0IHRoaXMgZnJvbSB0aGUgZmlsZSB0eXBlPykKLSAgICAgICAgIiIiCi0g
ICAgICAgIHNlbGYuX21ha2Vfb3V0cHV0X2RpcmVjdG9yeShmaWxlbmFtZSkKLSAgICAgICAgYWN0
dWFsX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsIHNlbGYuRklMRU5B
TUVfU1VGRklYX0FDVFVBTCArIGZpbGVfdHlwZSkKLSAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUg
PSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwgc2VsZi5GSUxFTkFNRV9TVUZGSVhfRVhQ
RUNURUQgKyBmaWxlX3R5cGUpCi0gICAgICAgICMgRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgcG9v
cmx5IGRlc2lnbmVkLiAgV2Ugc2hvdWxkIGJlIHBhc3NpbmcgaW4gc29tZSBzb3J0IG9mCi0gICAg
ICAgICMgZW5jb2RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgY2FsbGVycy4KLSAgICAgICAgaWYg
b3V0cHV0OgotICAgICAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgoYWN0dWFs
X2ZpbGVuYW1lLCBvdXRwdXQsIGVuY29kaW5nKQotICAgICAgICBpZiBleHBlY3RlZDoKLSAgICAg
ICAgICAgIHNlbGYuX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKGV4cGVjdGVkX2ZpbGVuYW1lLCBl
eHBlY3RlZCwgZW5jb2RpbmcpCi0KLSAgICAgICAgaWYgbm90IG91dHB1dCBvciBub3QgZXhwZWN0
ZWQ6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBub3QgcHJpbnRfdGV4dF9kaWZm
czoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgTm90ZTogV2UgcGFzcyBlbmNvZGlu
Zz1Ob25lIGZvciBhbGwgZGlmZiB3cml0ZXMsIGFzIHdlIHRyZWF0IGRpZmYKLSAgICAgICAgIyBv
dXRwdXQgYXMgYmluYXJ5LiAgRGlmZiBvdXRwdXQgbWF5IGNvbnRhaW4gbXVsdGlwbGUgZmlsZXMg
aW4KLSAgICAgICAgIyBjb25mbGljdGluZyBlbmNvZGluZ3MuCi0gICAgICAgIGRpZmYgPSBzZWxm
Ll9wb3J0LmRpZmZfdGV4dChleHBlY3RlZCwgb3V0cHV0LCBleHBlY3RlZF9maWxlbmFtZSwgYWN0
dWFsX2ZpbGVuYW1lKQotICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5h
bWUoZmlsZW5hbWUsIHNlbGYuRklMRU5BTUVfU1VGRklYX0RJRkYgKyBmaWxlX3R5cGUpCi0gICAg
ICAgIHNlbGYuX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKGRpZmZfZmlsZW5hbWUsIGRpZmYsIGVu
Y29kaW5nPU5vbmUpCi0KLSAgICAgICAgIyBTaGVsbCBvdXQgdG8gd2RpZmYgdG8gZ2V0IGNvbG9y
ZWQgaW5saW5lIGRpZmZzLgotICAgICAgICB3ZGlmZiA9IHNlbGYuX3BvcnQud2RpZmZfdGV4dChl
eHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQotICAgICAgICB3ZGlmZl9maWxlbmFt
ZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLCBzZWxmLkZJTEVOQU1FX1NVRkZJWF9X
RElGRikKLSAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgod2RpZmZfZmlsZW5h
bWUsIHdkaWZmLCBlbmNvZGluZz1Ob25lKQotCi0gICAgICAgICMgVXNlIFdlYktpdCdzIFByZXR0
eVBhdGNoLnJiIHRvIGdldCBhbiBIVE1MIGRpZmYuCi0gICAgICAgIHByZXR0eV9wYXRjaCA9IHNl
bGYuX3BvcnQucHJldHR5X3BhdGNoX3RleHQoZGlmZl9maWxlbmFtZSkKLSAgICAgICAgcHJldHR5
X3BhdGNoX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsIHNlbGYuRklM
RU5BTUVfU1VGRklYX1BSRVRUWV9QQVRDSCkKLSAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxl
X2F0X3BhdGgocHJldHR5X3BhdGNoX2ZpbGVuYW1lLCBwcmV0dHlfcGF0Y2gsIGVuY29kaW5nPU5v
bmUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0
X3R5cGVzL3RleHRfZGlmZi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CmluZGV4IDA3YzNkMDNmYTU0OTcxNWM0ZTBlN2JiMjZl
ZmE1NjZlM2RmN2VjZmIuLjI2ZGI4ZGJlMTYzNTE0YjVmMDU0N2EyOGYxYTllZTdjZmZhYjk3YjEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlw
ZXMvdGV4dF9kaWZmLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CkBAIC02NywxMCArNjcsNiBAQCBjbGFzcyBUZXN0VGV4
dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAgICAgIyBXcml0ZSBvdXRw
dXQgZmlsZXMgZm9yIG5ldyB0ZXN0cywgdG9vLgogICAgICAgICBpZiBwb3J0LmNvbXBhcmVfdGV4
dChhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6CiAgICAgICAgICAgICAjIFRleHQgZG9lc24n
dCBtYXRjaCwgd3JpdGUgb3V0cHV0IGZpbGVzLgotICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRw
dXRfZmlsZXMoZmlsZW5hbWUsICIudHh0IiwgYWN0dWFsX3RleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0LCBlbmNvZGluZz1Ob25lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdGV4dF9kaWZmcz1UcnVlKQotCiAg
ICAgICAgICAgICBpZiBleHBlY3RlZF90ZXh0ID09ICcnOgogICAgICAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nUmVzdWx0KCkpCiAgICAgICAg
ICAgICBlbHNlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82775</attachid>
            <date>2011-02-17 03:11:58 -0800</date>
            <delta_ts>2011-02-17 19:05:02 -0800</delta_ts>
            <desc>fixed-as-suggested</desc>
            <filename>bug-53908-20110217201156.patch</filename>
            <type>text/plain</type>
            <size>22485</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg2ODUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5M2E2YzdiZDdiNDQ1ZmE3MjUyNjAxYTNhYjgzNDQ4OTUx
NDdkYjFkLi42NjAwZjk0MDM5YjE2ODkwODk0MDM3ZGFiNTFiMzRmZGVjMTM3Y2E0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTEtMDItMDcgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgY29k
ZSB3aGljaCB3cml0ZXMgdGVzdCByZXN1bHRzIGZyb20gdGVzdF90eXBlJ3MKKyAgICAgICAgY29t
cGFyZV9vdXRwdXQoKSBtZXRob2QuCisgICAgICAgIFdyaXRpbmcgdGVzdCByZXN1bHRzIG5vdyBo
YXBwZW5zIGluIHNpbmdsZV90ZXN0X3J1bm5lciwgdXNpbmcKKyAgICAgICAgbmV3bHkgaW50cm9k
dWNlZCB0ZXN0X3Jlc3VsdF93cml0ZXIgbW9kdWxlLgorCisgICAgICAgIFN1YnNlcXVlbnQgcGF0
Y2hlcyB3aWxsIGVsaW1pbmF0ZSB0ZXN0X3R5cGUvKiBjbGFzc2VzLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzkwOAorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVu
bmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfcmVzdWx0X3dyaXRlci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2Uu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90
ZXh0X2RpZmYucHk6CisKIDIwMTEtMDItMTUgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5n
bGVfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKaW5kZXggMDg2OGNiNTliYWY3YjQ5
OWNmMTYyNzY0ZWEyYWM3MzM3MDY4MTY5NS4uNDM3N2ZkMTNhNGQyYjVkZDExZDRiN2U5MmIzNDM3
ZGMyNmI1MWY4YyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5l
ci5weQpAQCAtMzIsNiArMzIsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBiYXNlCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0X3dyaXRlcgogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9yZXN1bHRzIGltcG9ydCBUZXN0UmVz
dWx0CiAKIApAQCAtMTg1LDYgKzE4Niw5IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAgICAg
ICAgICAgICAjIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQu
CiAgICAgICAgICAgICBpZiBub3QgZHJpdmVyX291dHB1dC5jcmFzaDoKICAgICAgICAgICAgICAg
ICBmYWlsdXJlcy5leHRlbmQobmV3X2ZhaWx1cmVzKQorICAgICAgICAgICAgdGVzdF9yZXN1bHRf
d3JpdGVyLndyaXRlX3Rlc3RfcmVzdWx0KAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHNlbGYuX2ZpbGVuYW1lLAorICAgICAgICAg
ICAgICAgIGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQsIG5ld19mYWlsdXJl
cykKICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1l
X19dID0gKAogICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQog
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X3Jlc3VsdF93cml0ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3Jlc3VsdF93cml0ZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmQwYWY4MTE3MWQ5ZGQzMDc4OGEyODg1ZDkzOGZmMGRhMmJlYzlkOQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfcmVzdWx0X3dyaXRlci5weQpAQCAtMCwwICsxLDE5MCBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworCisKK19sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYgd3JpdGVfdGVzdF9yZXN1bHQocG9ydCwg
cm9vdF9vdXRwdXRfZGlyLCBmaWxlbmFtZSwgZHJpdmVyX291dHB1dCwKKyAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LCBmYWlsdXJlcyk6CisgICAgIiIiV3JpdGUg
dGhlIHRlc3QgcmVzdWx0IHRvIHRoZSByZXN1bHQgb3V0cHV0IGRpcmVjdG9yeS4iIiIKKyAgICBj
aGVja3N1bXNfbWlzbWF0Y2hfYnV0X2ltYWdlc19hcmVfc2FtZSA9IEZhbHNlCisgICAgaW1hZ2Vo
YXNoX21pc21hdGNoX2ZhaWx1cmUgPSBOb25lCisgICAgd3JpdGVyID0gVGVzdFJlc3VsdFdyaXRl
cihwb3J0LCByb290X291dHB1dF9kaXIsIGZpbGVuYW1lKQorICAgIGZvciBmYWlsdXJlIGluIGZh
aWx1cmVzOgorICAgICAgICAjIEZJWE1FOiBJbnN0ZWFkIG9mIHRoaXMgbG9uZyAnaWYnIGJsb2Nr
LCBlYWNoIGZhaWx1cmUgY2xhc3MgbWlnaHQKKyAgICAgICAgIyBoYXZlIGEgcmVzcG9uc2liaWxp
dHkgZm9yIHdyaXRpbmcgYSB0ZXN0IHJlc3VsdC4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShmYWls
dXJlLCAodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ1Jlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNoKSk6Cisg
ICAgICAgICAgICB3cml0ZXIud3JpdGVfdGV4dF9maWxlcyhkcml2ZXJfb3V0cHV0LnRleHQsIGV4
cGVjdGVkX2RyaXZlcl9vdXRwdXQudGV4dCkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZV90ZXh0
X2RpZmYoZHJpdmVyX291dHB1dC50ZXh0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LnRleHQpCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNz
aW5nSW1hZ2UpOgorICAgICAgICAgICAgd3JpdGVyLndyaXRlX2ltYWdlX2ZpbGVzKGRyaXZlcl9v
dXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCisgICAgICAgICAgICB3cml0ZXIud3Jp
dGVfaW1hZ2VfaGFzaGVzKGRyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwgZXhwZWN0ZWRfZHJpdmVy
X291dHB1dC5pbWFnZV9oYXNoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgdGVz
dF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlSGFzaCk6CisgICAgICAgICAgICB3cml0ZXIu
d3JpdGVfaW1hZ2VfZmlsZXMoZHJpdmVyX291dHB1dC5pbWFnZSwgZXhwZWN0ZWRfZHJpdmVyX291
dHB1dC5pbWFnZSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZV9pbWFnZV9oYXNoZXMoZHJpdmVy
X291dHB1dC5pbWFnZV9oYXNoLCBleHBlY3RlZF9pbWFnZV9oYXNoPU5vbmUpCisgICAgICAgIGVs
aWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hNaXNt
YXRjaCk6CisgICAgICAgICAgICB3cml0ZXIud3JpdGVfaW1hZ2VfZmlsZXMoZHJpdmVyX291dHB1
dC5pbWFnZSwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZSkKKyAgICAgICAgICAgIHdyaXRl
ci53cml0ZV9pbWFnZV9oYXNoZXMoZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoLCBleHBlY3RlZF9k
cml2ZXJfb3V0cHV0LmltYWdlX2hhc2gpCisgICAgICAgICAgICBpbWFnZXNfYXJlX2RpZmZlcmVu
dCA9IHdyaXRlci53cml0ZV9kaWZmX2ltYWdlKGRyaXZlcl9vdXRwdXQuaW1hZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2UpCisgICAgICAgICAgICBpZiBub3QgaW1hZ2VzX2FyZV9k
aWZmZXJlbnQ6CisgICAgICAgICAgICAgICAgY2hlY2tzdW1zX21pc21hdGNoX2J1dF9pbWFnZXNf
YXJlX3NhbWUgPSBUcnVlCisgICAgICAgICAgICAgICAgaW1hZ2VoYXNoX21pc21hdGNoX2ZhaWx1
cmUgPSBmYWlsdXJlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1
cmVzLkZhaWx1cmVDcmFzaCk6CisgICAgICAgICAgICB3cml0ZXIud3JpdGVfY3Jhc2hfcmVwb3J0
KGRyaXZlcl9vdXRwdXQuZXJyb3IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQg
aXNpbnN0YW5jZShmYWlsdXJlLCAodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCwpKQorCisg
ICAgIyBGSVhNRTogVGhpcyBpcyBhbiB1Z2x5IGhhY2sgdG8gaGFuZGxlIEZhaWx1cmVJbWFnZUhh
c2hJbmNvcnJlY3QgY2FzZS4KKyAgICAjIElkZWFsbHksIEZhaWx1cmVJbWFnZUhhc2hJbmNvcnJl
Y3QgY2FzZSBzaG91bGQgYmUgZGV0ZWN0ZWQgYmVmb3JlIHRoaXMKKyAgICAjIGZ1bmN0aW9uIGlz
IGNhbGxlZC4gQnV0IGl0IHJlcXVpcmVzIGNhbGxpbmcgY3JlYXRlX2RpZmZfaW1hZ2UoKSB0byBk
ZXRlY3QKKyAgICAjIHdoZXRoZXIgdHdvIGltYWdlcyBhcmUgc2FtZSBvciBub3QuIFNvIHdlIG5l
ZWQgdGhpcyBoYWNrIHVudGlsIHdlIGhhdmUgYSBiZXR0ZXIgYXBwcm9hY2guCisgICAgaWYgY2hl
Y2tzdW1zX21pc21hdGNoX2J1dF9pbWFnZXNfYXJlX3NhbWU6CisgICAgICAgICMgUmVwbGFjZSBG
YWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2ggd2l0aCBGYWlsdXJlSW1hZ2VIYXNoSW5jb3JyZWN0Lgor
ICAgICAgICBmYWlsdXJlcy5yZW1vdmUoaW1hZ2VoYXNoX21pc21hdGNoX2ZhaWx1cmUpCisgICAg
ICAgIGZpYWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJl
Y3QoKSkKKworCitjbGFzcyBUZXN0UmVzdWx0V3JpdGVyKG9iamVjdCk6CisgICAgIiIiQSBjbGFz
cyB3aGljaCBoYW5kbGVzIGFsbCB3cml0aW5nIG9wZXJhdGlvbnMgdG8gdGhlIHJlc3VsdCBkaXJl
Y3RvcnkuIiIiCisKKyAgICAjIEZpbGVuYW1lIHBpZWNlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZXMg
dG8gdGhlIHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCisgICAgRklMRU5BTUVfU1VGRklYX0FDVFVB
TCA9ICItYWN0dWFsIgorICAgIEZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCA9ICItZXhwZWN0ZWQi
CisgICAgRklMRU5BTUVfU1VGRklYX0RJRkYgPSAiLWRpZmYiCisgICAgRklMRU5BTUVfU1VGRklY
X1dESUZGID0gIi13ZGlmZi5odG1sIgorICAgIEZJTEVOQU1FX1NVRkZJWF9QUkVUVFlfUEFUQ0gg
PSAiLXByZXR0eS1kaWZmLmh0bWwiCisgICAgRklMRU5BTUVfU1VGRklYX0lNQUdFX0RJRkYgPSAi
LWRpZmYucG5nIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHJvb3Rfb3V0cHV0X2Rp
ciwgZmlsZW5hbWUpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9y
b290X291dHB1dF9kaXIgPSByb290X291dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fZmlsZW5hbWUg
PSBmaWxlbmFtZQorICAgICAgICBzZWxmLl90ZXN0bmFtZSA9IHBvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmaWxlbmFtZSkKKworICAgIGRlZiBfbWFrZV9vdXRwdXRfZGlyZWN0b3J5KHNlbGYp
OgorICAgICAgICAiIiJDcmVhdGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBuZWVkZWQpIGZv
ciBhIGdpdmVuIHRlc3QgZmlsZW5hbWUuIiIiCisgICAgICAgIGZzID0gc2VsZi5fcG9ydC5fZmls
ZXN5c3RlbQorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBmcy5qb2luKHNlbGYuX3Jvb3Rfb3V0
cHV0X2Rpciwgc2VsZi5fdGVzdG5hbWUpCisgICAgICAgIHNlbGYuX3BvcnQubWF5YmVfbWFrZV9k
aXJlY3RvcnkoZnMuZGlybmFtZShvdXRwdXRfZmlsZW5hbWUpKQorCisgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmLCBtb2RpZmllcik6CisgICAgICAgICIiIlJldHVybnMgYSBmaWxlbmFtZSBp
bnNpZGUgdGhlIG91dHB1dCBkaXIgdGhhdCBjb250YWlucyBtb2RpZmllci4KKworICAgICAgICBG
b3IgZXhhbXBsZSwgaWYgdGVzdCBuYW1lIGlzICJmYXN0L2RvbS9mb28uaHRtbCIgYW5kIG1vZGlm
aWVyIGlzICItZXhwZWN0ZWQudHh0IiwKKyAgICAgICAgdGhlIHJldHVybiB2YWx1ZSBpcyAiLzxw
YXRoLXRvLXJvb3Qtb3V0cHV0LWRpcj4vZmFzdC9kb20vZm9vLWV4cGVjdGVkLnR4dCIuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICBtb2RpZmllcjogYSBzdHJpbmcgdG8gcmVwbGFjZSB0aGUg
ZXh0ZW5zaW9uIG9mIGZpbGVuYW1lIHdpdGgKKworICAgICAgICBSZXR1cm46CisgICAgICAgICAg
VGhlIGFic29sdXRlIHBhdGggdG8gdGhlIG91dHB1dCBmaWxlbmFtZQorICAgICAgICAiIiIKKyAg
ICAgICAgZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIG91dHB1dF9maWxlbmFt
ZSA9IGZzLmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLCBzZWxmLl90ZXN0bmFtZSkKKyAgICAg
ICAgcmV0dXJuIGZzLnNwbGl0ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgorCisg
ICAgZGVmIHdyaXRlX291dHB1dF9maWxlcyhzZWxmLCBmaWxlX3R5cGUsIG91dHB1dCwgZXhwZWN0
ZWQpOgorICAgICAgICAiIiJXcml0ZXMgdGhlIHRlc3Qgb3V0cHV0LCB0aGUgZXhwZWN0ZWQgb3V0
cHV0IGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeS4KKworICAgICAgICBUaGUgZnVsbCBvdXRwdXQg
ZmlsZW5hbWUgb2YgdGhlIGFjdHVhbCwgZm9yIGV4YW1wbGUsIHdpbGwgYmUKKyAgICAgICAgICA8
ZmlsZW5hbWU+LWFjdHVhbDxmaWxlX3R5cGU+CisgICAgICAgIEZvciBpbnN0YW5jZSwKKyAgICAg
ICAgICBteV90ZXN0LWFjdHVhbC50eHQKKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVf
dHlwZTogQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdGVzdCBvdXRwdXQgZmlsZSB0eXBlLCBlLmcu
ICIudHh0IgorICAgICAgICAgIG91dHB1dDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdGVzdCBv
dXRwdXQKKyAgICAgICAgICBleHBlY3RlZDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXhwZWN0
ZWQgdGVzdCBvdXRwdXQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX21ha2Vfb3V0cHV0X2Rp
cmVjdG9yeSgpCisgICAgICAgIGFjdHVhbF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1l
KHNlbGYuRklMRU5BTUVfU1VGRklYX0FDVFVBTCArIGZpbGVfdHlwZSkKKyAgICAgICAgZXhwZWN0
ZWRfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShzZWxmLkZJTEVOQU1FX1NVRkZJWF9F
WFBFQ1RFRCArIGZpbGVfdHlwZSkKKworICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0
ZW0KKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgZnMud3JpdGVfYmluYXJ5X2ZpbGUo
YWN0dWFsX2ZpbGVuYW1lLCBvdXRwdXQpCisgICAgICAgIGlmIGV4cGVjdGVkOgorICAgICAgICAg
ICAgZnMud3JpdGVfYmluYXJ5X2ZpbGUoZXhwZWN0ZWRfZmlsZW5hbWUsIGV4cGVjdGVkKQorCisg
ICAgZGVmIHdyaXRlX2NyYXNoX3JlcG9ydChzZWxmLCBlcnJvcik6CisgICAgICAgICIiIldyaXRl
IGNyYXNoIGluZm9ybWF0aW9uLiIiIgorICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0
ZW0KKyAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZSgiLXN0YWNrLnR4dCIp
CisgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUoZmlsZW5hbWUpKQor
ICAgICAgICBmcy53cml0ZV90ZXh0X2ZpbGUoZmlsZW5hbWUsIGVycm9yKQorCisgICAgZGVmIHdy
aXRlX3RleHRfZmlsZXMoc2VsZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgorICAgICAg
ICBzZWxmLndyaXRlX291dHB1dF9maWxlcygiLnR4dCIsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF90
ZXh0KQorCisgICAgZGVmIHdyaXRlX3RleHRfZGlmZihzZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0
ZWRfdGV4dCk6CisgICAgICAgIGlmIG5vdCBhY3R1YWxfdGV4dCBvciBub3QgZXhwZWN0ZWRfdGV4
dDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX21ha2Vfb3V0cHV0X2RpcmVj
dG9yeSgpCisgICAgICAgIGZpbGVfdHlwZSA9ICcudHh0JworICAgICAgICBhY3R1YWxfZmlsZW5h
bWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShzZWxmLkZJTEVOQU1FX1NVRkZJWF9BQ1RVQUwgKyBm
aWxlX3R5cGUpCisgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5h
bWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgKyBmaWxlX3R5cGUpCisgICAgICAgIGZz
ID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICAjIFdlIHRyZWF0IGRpZmYgb3V0cHV0
IGFzIGJpbmFyeS4gRGlmZiBvdXRwdXQgbWF5IGNvbnRhaW4gbXVsdGlwbGUgZmlsZXMKKyAgICAg
ICAgIyBpbiBjb25mbGljdGluZyBlbmNvZGluZ3MuCisgICAgICAgIGRpZmYgPSBzZWxmLl9wb3J0
LmRpZmZfdGV4dChleHBlY3RlZF90ZXh0LCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfZmlsZW5hbWUs
IGFjdHVhbF9maWxlbmFtZSkKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2Zp
bGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX0RJRkYgKyBmaWxlX3R5cGUpCisgICAgICAgIGZz
LndyaXRlX2JpbmFyeV9maWxlKGRpZmZfZmlsZW5hbWUsIGRpZmYpCisKKyAgICAgICAgIyBTaGVs
bCBvdXQgdG8gd2RpZmYgdG8gZ2V0IGNvbG9yZWQgaW5saW5lIGRpZmZzLgorICAgICAgICB3ZGlm
ZiA9IHNlbGYuX3BvcnQud2RpZmZfdGV4dChleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVu
YW1lKQorICAgICAgICB3ZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKHNlbGYu
RklMRU5BTUVfU1VGRklYX1dESUZGKQorICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZSh3ZGlm
Zl9maWxlbmFtZSwgd2RpZmYpCisKKyAgICAgICAgIyBVc2UgV2ViS2l0J3MgUHJldHR5UGF0Y2gu
cmIgdG8gZ2V0IGFuIEhUTUwgZGlmZi4KKyAgICAgICAgcHJldHR5X3BhdGNoID0gc2VsZi5fcG9y
dC5wcmV0dHlfcGF0Y2hfdGV4dChkaWZmX2ZpbGVuYW1lKQorICAgICAgICBwcmV0dHlfcGF0Y2hf
ZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShzZWxmLkZJTEVOQU1FX1NVRkZJWF9QUkVU
VFlfUEFUQ0gpCisgICAgICAgIGZzLndyaXRlX2JpbmFyeV9maWxlKHByZXR0eV9wYXRjaF9maWxl
bmFtZSwgcHJldHR5X3BhdGNoKQorCisgICAgZGVmIHdyaXRlX2ltYWdlX2ZpbGVzKHNlbGYsIGFj
dHVhbF9pbWFnZSwgZXhwZWN0ZWRfaW1hZ2UpOgorICAgICAgICBzZWxmLndyaXRlX291dHB1dF9m
aWxlcygnLnBuZycsIGFjdHVhbF9pbWFnZSwgZXhwZWN0ZWRfaW1hZ2UpCisKKyAgICBkZWYgd3Jp
dGVfaW1hZ2VfaGFzaGVzKHNlbGYsIGFjdHVhbF9pbWFnZV9oYXNoLCBleHBlY3RlZF9pbWFnZV9o
YXNoKToKKyAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoJy5jaGVja3N1bScsIGFjdHVh
bF9pbWFnZV9oYXNoLCBleHBlY3RlZF9pbWFnZV9oYXNoKQorCisgICAgZGVmIHdyaXRlX2RpZmZf
aW1hZ2Uoc2VsZiwgYWN0dWFsX2ltYWdlLCBleHBlY3RlZF9pbWFnZSk6CisgICAgICAgICIiIldy
aXRlcyB0aGUgdmlzdWFsIGRpZmYgb2YgdGhlIGV4cGVjdGVkL2FjdHVhbCBQTkdzLgorCisgICAg
ICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgaW1hZ2VzIGFyZSBkaWZmZXJlbnQuCisgICAgICAgICIi
IgorICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxF
TkFNRV9TVUZGSVhfSU1BR0VfRElGRikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuZGlmZl9p
bWFnZShhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlLCBkaWZmX2ZpbGVuYW1lKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFn
ZV9kaWZmLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy9pbWFnZV9kaWZmLnB5CmluZGV4IDFkN2UxMDcyNDc2ZDQzNmQ0ZThkMjJhYmJjOTA4ODM5Nzkw
NmRmYmMuLjU3MzBmMmI3ZGNkNDJjMmY4MTg0ZTI0MDNmMWNjMjQwZGE5MGMyYTEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2Vf
ZGlmZi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL2ltYWdlX2RpZmYucHkKQEAgLTQ5LDI1ICs0OSw2IEBAIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMuaW1hZ2VfZGlmZiIpCiAKIGNs
YXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogCi0gICAgZGVmIF9j
b3B5X2ltYWdlKHNlbGYsIGZpbGVuYW1lLCBhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlKToK
LSAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICcucG5nJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0PWFjdHVhbF9pbWFnZSwgZXhwZWN0ZWQ9
ZXhwZWN0ZWRfaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5n
PU5vbmUsIHByaW50X3RleHRfZGlmZnM9RmFsc2UpCi0KLSAgICBkZWYgX2NvcHlfaW1hZ2VfaGFz
aChzZWxmLCBmaWxlbmFtZSwgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hhc2gp
OgotICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgJy5jaGVja3N1bScs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoLCBleHBl
Y3RlZF9pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGlu
Zz0iYXNjaWkiLCBwcmludF90ZXh0X2RpZmZzPUZhbHNlKQotCi0gICAgZGVmIF9jcmVhdGVfZGlm
Zl9pbWFnZShzZWxmLCBwb3J0LCBmaWxlbmFtZSwgYWN0dWFsX2ltYWdlLCBleHBlY3RlZF9pbWFn
ZSk6Ci0gICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBlY3RlZC9h
Y3R1YWwgUE5Hcy4KLQotICAgICAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGltYWdlcyBhcmUgZGlm
ZmVyZW50LgotICAgICAgICAiIiIKLSAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0
X2ZpbGVuYW1lKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5GSUxFTkFNRV9TVUZGSVhfQ09NUEFSRSkKLSAgICAgICAgcmV0dXJuIHBv
cnQuZGlmZl9pbWFnZShhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlLCBkaWZmX2ZpbGVuYW1l
KQotCiAgICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIHBvcnQsIGZpbGVuYW1lLCBvcHRpb25z
LCBhY3R1YWxfZHJpdmVyX291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
ZHJpdmVyX291dHB1dCk6CiAgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRw
dXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCBpbWFnZSBhbmQKQEAgLTgxLDM3ICs2MiwxNCBAQCBj
bGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKIAogICAgICAgICBp
ZiBub3QgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZToKICAgICAgICAgICAgICMgUmVwb3J0
IGEgbWlzc2luZyBleHBlY3RlZCBQTkcgZmlsZS4KLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1h
Z2UoZmlsZW5hbWUsIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlLCBleHBlY3RlZF9pbWFnZT1O
b25lKQotICAgICAgICAgICAgc2VsZi5fY29weV9pbWFnZV9oYXNoKGZpbGVuYW1lLCBhY3R1YWxf
ZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCkKICAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2UoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWlsdXJlcwogICAgICAgICBpZiBub3QgZXhwZWN0ZWRfZHJpdmVyX291dHB1
dC5pbWFnZV9oYXNoOgogICAgICAgICAgICAgIyBSZXBvcnQgYSBtaXNzaW5nIGV4cGVjdGVkIGNo
ZWNrc3VtIGZpbGUuCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdlKGZpbGVuYW1lLCBhY3R1
YWxfZHJpdmVyX291dHB1dC5pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZSkKLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2Vf
aGFzaChmaWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9pbWFnZV9oYXNoPU5vbmUpCiAgICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdl
SGFzaCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCi0KLSAgICAgICAgaWYgYWN0dWFs
X2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCA9PSBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdl
X2hhc2g6Ci0gICAgICAgICAgICAjIEhhc2ggbWF0Y2hlZCAobm8gZGlmZiBuZWVkZWQsIG9rYXkg
dG8gcmV0dXJuKS4KLSAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwotCi0gICAgICAgIHNlbGYu
X2NvcHlfaW1hZ2UoZmlsZW5hbWUsIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2UpCi0gICAgICAg
IHNlbGYuX2NvcHlfaW1hZ2VfaGFzaChmaWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1h
Z2VfaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9v
dXRwdXQuaW1hZ2VfaGFzaCkKLQotICAgICAgICAjIEV2ZW4gdGhvdWdoIHdlIG9ubHkgdXNlIHRo
ZSByZXN1bHQgaW4gb25lIGNvZGVwYXRoIGJlbG93IGJ1dCB3ZQotICAgICAgICAjIHN0aWxsIG5l
ZWQgdG8gY2FsbCBDcmVhdGVJbWFnZURpZmYgZm9yIG90aGVyIGNvZGVwYXRocy4KLSAgICAgICAg
aW1hZ2VzX2FyZV9kaWZmZXJlbnQgPSBzZWxmLl9jcmVhdGVfZGlmZl9pbWFnZShwb3J0LCBmaWxl
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0Lmlt
YWdlKQotICAgICAgICBpZiBub3QgaW1hZ2VzX2FyZV9kaWZmZXJlbnQ6Ci0gICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoSW5jb3JyZWN0KCkp
Ci0gICAgICAgIGVsc2U6CisgICAgICAgIGlmIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlX2hh
c2ggIT0gZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoOgogICAgICAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAogICAgICAgICByZXR1cm4gZmFpbHVyZXMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMv
dGVzdF90eXBlX2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5CmluZGV4IDA5YmZjMzFjMTI5MDAzNWU5NzgxOTI3
NDA2ZTIwYzI4MTRkNGI5M2QuLjRlMDUxM2FkMjBjMzFkOTBlN2NmMjg5MmYyMjljOTExZDVhNTI4
NzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rf
dHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weQpAQCAtNDQsMTQgKzQ0LDYgQEAg
X3dkaWZmX2F2YWlsYWJsZSA9IFRydWUKIAogY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAK
LSAgICAjIEZpbGVuYW1lIHBpZWNlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZXMgdG8gdGhlIHRlc3Qg
cmVzdWx0cyBkaXJlY3RvcnkuCi0gICAgRklMRU5BTUVfU1VGRklYX0FDVFVBTCA9ICItYWN0dWFs
IgotICAgIEZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCA9ICItZXhwZWN0ZWQiCi0gICAgRklMRU5B
TUVfU1VGRklYX0RJRkYgPSAiLWRpZmYiCi0gICAgRklMRU5BTUVfU1VGRklYX1dESUZGID0gIi13
ZGlmZi5odG1sIgotICAgIEZJTEVOQU1FX1NVRkZJWF9QUkVUVFlfUEFUQ0ggPSAiLXByZXR0eS1k
aWZmLmh0bWwiCi0gICAgRklMRU5BTUVfU1VGRklYX0NPTVBBUkUgPSAiLWRpZmYucG5nIgotCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHJvb3Rfb3V0cHV0X2Rpcik6CiAgICAgICAgICIi
IkluaXRpYWxpemUgYSBUZXN0VHlwZUJhc2Ugb2JqZWN0LgogCkBAIC02MiwzMyArNTQsNiBAQCBj
bGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgc2VsZi5fcm9vdF9vdXRwdXRfZGly
ID0gcm9vdF9vdXRwdXRfZGlyCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAKLSAgICBkZWYg
X21ha2Vfb3V0cHV0X2RpcmVjdG9yeShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIkNyZWF0
ZXMgdGhlIG91dHB1dCBkaXJlY3RvcnkgKGlmIG5lZWRlZCkgZm9yIGEgZ2l2ZW4gdGVzdAotICAg
ICAgICBmaWxlbmFtZS4iIiIKLSAgICAgICAgZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCi0g
ICAgICAgIG91dHB1dF9maWxlbmFtZSA9IGZzLmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLAot
ICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkK
LSAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3RvcnkoZnMuZGlybmFtZShvdXRwdXRfZmlsZW5h
bWUpKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSwgbW9kaWZpZXIp
OgotICAgICAgICAiIiJSZXR1cm5zIGEgZmlsZW5hbWUgaW5zaWRlIHRoZSBvdXRwdXQgZGlyIHRo
YXQgY29udGFpbnMgbW9kaWZpZXIuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGZpbGVuYW1l
IGlzIGM6Ly4uLi9mYXN0L2RvbS9mb28uaHRtbCBhbmQgbW9kaWZpZXIgaXMKLSAgICAgICAgIi1l
eHBlY3RlZC50eHQiLCB0aGUgcmV0dXJuIHZhbHVlIGlzCi0gICAgICAgIGM6L2N5Z3dpbi90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2RvbS9mb28tZXhwZWN0ZWQudHh0Ci0KLSAgICAgICAg
QXJnczoKLSAgICAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxl
Ci0gICAgICAgICAgbW9kaWZpZXI6IGEgc3RyaW5nIHRvIHJlcGxhY2UgdGhlIGV4dGVuc2lvbiBv
ZiBmaWxlbmFtZSB3aXRoCi0KLSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBhYnNvbHV0
ZSB3aW5kb3dzIHBhdGggdG8gdGhlIG91dHB1dCBmaWxlbmFtZQotICAgICAgICAiIiIKLSAgICAg
ICAgZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCi0gICAgICAgIG91dHB1dF9maWxlbmFtZSA9
IGZzLmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLAotICAgICAgICAgICAgc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZzLnNwbGl0
ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgotCiAgICAgZGVmIGNvbXBhcmVfb3V0
cHV0KHNlbGYsIHBvcnQsIGZpbGVuYW1lLCBvcHRpb25zLCBhY3R1YWxfZHJpdmVyX291dHB1dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpOgogICAgICAg
ICAiIiJNZXRob2QgdGhhdCBjb21wYXJlcyB0aGUgb3V0cHV0IGZyb20gdGhlIHRlc3Qgd2l0aCB0
aGUKQEAgLTEwOSw2MyArNzQsMyBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAg
ICAgICBhIGxpc3Qgb2YgVGVzdEZhaWx1cmUgb2JqZWN0cywgZW1wdHkgaWYgdGhlIHRlc3QgcGFz
c2VzCiAgICAgICAgICIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAg
ICBkZWYgX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKHNlbGYsIGZpbGVfcGF0aCwgY29udGVudHMs
IGVuY29kaW5nKToKLSAgICAgICAgIiIiVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGJ5dGVfYXJy
YXkgaXMgYWxyZWFkeSBlbmNvZGVkCi0gICAgICAgIGludG8gdGhlIHJpZ2h0IGZvcm1hdC4iIiIK
LSAgICAgICAgZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCi0gICAgICAgIGlmIGVuY29kaW5n
IGlzIE5vbmU6Ci0gICAgICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZShmaWxlX3BhdGgsIGNv
bnRlbnRzKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShm
aWxlX3BhdGgsIGNvbnRlbnRzKQotCi0gICAgZGVmIHdyaXRlX291dHB1dF9maWxlcyhzZWxmLCBm
aWxlbmFtZSwgZmlsZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBl
eHBlY3RlZCwgZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF90ZXh0
X2RpZmZzPUZhbHNlKToKLSAgICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91dHB1dCwgdGhlIGV4
cGVjdGVkIG91dHB1dCBhbmQgb3B0aW9uYWxseSB0aGUgZGlmZgotICAgICAgICBiZXR3ZWVuIHRo
ZSB0d28gdG8gZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgotCi0gICAgICAgIFRoZSBm
dWxsIG91dHB1dCBmaWxlbmFtZSBvZiB0aGUgYWN0dWFsLCBmb3IgZXhhbXBsZSwgd2lsbCBiZQot
ICAgICAgICAgIDxmaWxlbmFtZT4tYWN0dWFsPGZpbGVfdHlwZT4KLSAgICAgICAgRm9yIGluc3Rh
bmNlLAotICAgICAgICAgIG15X3Rlc3QtYWN0dWFsLnR4dAotCi0gICAgICAgIEFyZ3M6Ci0gICAg
ICAgICAgZmlsZW5hbWU6IFRoZSB0ZXN0IGZpbGVuYW1lCi0gICAgICAgICAgZmlsZV90eXBlOiBB
IHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0IG91dHB1dCBmaWxlIHR5cGUsIGUuZy4gIi50eHQi
Ci0gICAgICAgICAgb3V0cHV0OiBBIHN0cmluZyBjb250YWluaW5nIHRoZSB0ZXN0IG91dHB1dAot
ICAgICAgICAgIGV4cGVjdGVkOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBleHBlY3RlZCB0ZXN0
IG91dHB1dAotICAgICAgICAgIHByaW50X3RleHRfZGlmZnM6IFRydWUgZm9yIHRleHQgZGlmZnMu
IChGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoaXMgZnJvbSB0aGUgZmlsZSB0eXBl
PykKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX21ha2Vfb3V0cHV0X2RpcmVjdG9yeShmaWxl
bmFtZSkKLSAgICAgICAgYWN0dWFsX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmls
ZW5hbWUsIHNlbGYuRklMRU5BTUVfU1VGRklYX0FDVFVBTCArIGZpbGVfdHlwZSkKLSAgICAgICAg
ZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwgc2VsZi5G
SUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgKyBmaWxlX3R5cGUpCi0gICAgICAgICMgRklYTUU6IFRo
aXMgZnVuY3Rpb24gaXMgcG9vcmx5IGRlc2lnbmVkLiAgV2Ugc2hvdWxkIGJlIHBhc3NpbmcgaW4g
c29tZSBzb3J0IG9mCi0gICAgICAgICMgZW5jb2RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgY2Fs
bGVycy4KLSAgICAgICAgaWYgb3V0cHV0OgotICAgICAgICAgICAgc2VsZi5fd3JpdGVfaW50b19m
aWxlX2F0X3BhdGgoYWN0dWFsX2ZpbGVuYW1lLCBvdXRwdXQsIGVuY29kaW5nKQotICAgICAgICBp
ZiBleHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKGV4
cGVjdGVkX2ZpbGVuYW1lLCBleHBlY3RlZCwgZW5jb2RpbmcpCi0KLSAgICAgICAgaWYgbm90IG91
dHB1dCBvciBub3QgZXhwZWN0ZWQ6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBu
b3QgcHJpbnRfdGV4dF9kaWZmczoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgTm90
ZTogV2UgcGFzcyBlbmNvZGluZz1Ob25lIGZvciBhbGwgZGlmZiB3cml0ZXMsIGFzIHdlIHRyZWF0
IGRpZmYKLSAgICAgICAgIyBvdXRwdXQgYXMgYmluYXJ5LiAgRGlmZiBvdXRwdXQgbWF5IGNvbnRh
aW4gbXVsdGlwbGUgZmlsZXMgaW4KLSAgICAgICAgIyBjb25mbGljdGluZyBlbmNvZGluZ3MuCi0g
ICAgICAgIGRpZmYgPSBzZWxmLl9wb3J0LmRpZmZfdGV4dChleHBlY3RlZCwgb3V0cHV0LCBleHBl
Y3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQotICAgICAgICBkaWZmX2ZpbGVuYW1lID0g
c2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsIHNlbGYuRklMRU5BTUVfU1VGRklYX0RJRkYg
KyBmaWxlX3R5cGUpCi0gICAgICAgIHNlbGYuX3dyaXRlX2ludG9fZmlsZV9hdF9wYXRoKGRpZmZf
ZmlsZW5hbWUsIGRpZmYsIGVuY29kaW5nPU5vbmUpCi0KLSAgICAgICAgIyBTaGVsbCBvdXQgdG8g
d2RpZmYgdG8gZ2V0IGNvbG9yZWQgaW5saW5lIGRpZmZzLgotICAgICAgICB3ZGlmZiA9IHNlbGYu
X3BvcnQud2RpZmZfdGV4dChleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQotICAg
ICAgICB3ZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLCBzZWxm
LkZJTEVOQU1FX1NVRkZJWF9XRElGRikKLSAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0
X3BhdGgod2RpZmZfZmlsZW5hbWUsIHdkaWZmLCBlbmNvZGluZz1Ob25lKQotCi0gICAgICAgICMg
VXNlIFdlYktpdCdzIFByZXR0eVBhdGNoLnJiIHRvIGdldCBhbiBIVE1MIGRpZmYuCi0gICAgICAg
IHByZXR0eV9wYXRjaCA9IHNlbGYuX3BvcnQucHJldHR5X3BhdGNoX3RleHQoZGlmZl9maWxlbmFt
ZSkKLSAgICAgICAgcHJldHR5X3BhdGNoX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUo
ZmlsZW5hbWUsIHNlbGYuRklMRU5BTUVfU1VGRklYX1BSRVRUWV9QQVRDSCkKLSAgICAgICAgc2Vs
Zi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgocHJldHR5X3BhdGNoX2ZpbGVuYW1lLCBwcmV0dHlf
cGF0Y2gsIGVuY29kaW5nPU5vbmUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CmluZGV4IDA3YzNkMDNm
YTU0OTcxNWM0ZTBlN2JiMjZlZmE1NjZlM2RmN2VjZmIuLmFiNjc5ZjRiNGNkN2UxYmYxN2VhYjAy
MGY4MTlhZTQyNmE5NGJkMmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CkBAIC02NCwxMyArNjQs
NyBAQCBjbGFzcyBUZXN0VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAg
ICAgICAgIyBBc3N1bWluZyBleHBlY3RlZF90ZXh0IGlzIGFscmVhZHkgbm9ybWFsaXplZC4KICAg
ICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQudGV4dAogCi0gICAg
ICAgICMgV3JpdGUgb3V0cHV0IGZpbGVzIGZvciBuZXcgdGVzdHMsIHRvby4KICAgICAgICAgaWYg
cG9ydC5jb21wYXJlX3RleHQoYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgotICAgICAgICAg
ICAgIyBUZXh0IGRvZXNuJ3QgbWF0Y2gsIHdyaXRlIG91dHB1dCBmaWxlcy4KLSAgICAgICAgICAg
IHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKGZpbGVuYW1lLCAiLnR4dCIsIGFjdHVhbF90ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dCwgZW5jb2Rp
bmc9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3RleHRf
ZGlmZnM9VHJ1ZSkKLQogICAgICAgICAgICAgaWYgZXhwZWN0ZWRfdGV4dCA9PSAnJzoKICAgICAg
ICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ1Jl
c3VsdCgpKQogICAgICAgICAgICAgZWxzZToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82897</attachid>
            <date>2011-02-17 19:05:08 -0800</date>
            <delta_ts>2011-02-17 22:12:50 -0800</delta_ts>
            <desc>renamed-write-functions</desc>
            <filename>bug-53908-20110218120505.patch</filename>
            <type>text/plain</type>
            <size>22940</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg2ODUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5M2E2YzdiZDdiNDQ1ZmE3MjUyNjAxYTNhYjgzNDQ4OTUx
NDdkYjFkLi42NjAwZjk0MDM5YjE2ODkwODk0MDM3ZGFiNTFiMzRmZGVjMTM3Y2E0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTEtMDItMDcgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgY29k
ZSB3aGljaCB3cml0ZXMgdGVzdCByZXN1bHRzIGZyb20gdGVzdF90eXBlJ3MKKyAgICAgICAgY29t
cGFyZV9vdXRwdXQoKSBtZXRob2QuCisgICAgICAgIFdyaXRpbmcgdGVzdCByZXN1bHRzIG5vdyBo
YXBwZW5zIGluIHNpbmdsZV90ZXN0X3J1bm5lciwgdXNpbmcKKyAgICAgICAgbmV3bHkgaW50cm9k
dWNlZCB0ZXN0X3Jlc3VsdF93cml0ZXIgbW9kdWxlLgorCisgICAgICAgIFN1YnNlcXVlbnQgcGF0
Y2hlcyB3aWxsIGVsaW1pbmF0ZSB0ZXN0X3R5cGUvKiBjbGFzc2VzLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzkwOAorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVu
bmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfcmVzdWx0X3dyaXRlci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2Uu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90
ZXh0X2RpZmYucHk6CisKIDIwMTEtMDItMTUgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5n
bGVfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKaW5kZXggMDg2OGNiNTliYWY3YjQ5
OWNmMTYyNzY0ZWEyYWM3MzM3MDY4MTY5NS4uNDM3N2ZkMTNhNGQyYjVkZDExZDRiN2U5MmIzNDM3
ZGMyNmI1MWY4YyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5l
ci5weQpAQCAtMzIsNiArMzIsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBiYXNlCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0X3dyaXRlcgogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9yZXN1bHRzIGltcG9ydCBUZXN0UmVz
dWx0CiAKIApAQCAtMTg1LDYgKzE4Niw5IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAgICAg
ICAgICAgICAjIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQu
CiAgICAgICAgICAgICBpZiBub3QgZHJpdmVyX291dHB1dC5jcmFzaDoKICAgICAgICAgICAgICAg
ICBmYWlsdXJlcy5leHRlbmQobmV3X2ZhaWx1cmVzKQorICAgICAgICAgICAgdGVzdF9yZXN1bHRf
d3JpdGVyLndyaXRlX3Rlc3RfcmVzdWx0KAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHNlbGYuX2ZpbGVuYW1lLAorICAgICAgICAg
ICAgICAgIGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQsIG5ld19mYWlsdXJl
cykKICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1l
X19dID0gKAogICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQog
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X3Jlc3VsdF93cml0ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3Jlc3VsdF93cml0ZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODgyZGE5MTcyMTY3NzNkNGJhNzQzYjdkM2U3ZDI1M2JkYjIyMzdhZAotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfcmVzdWx0X3dyaXRlci5weQpAQCAtMCwwICsxLDE5NSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworCisKK19sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYgd3JpdGVfdGVzdF9yZXN1bHQocG9ydCwg
cm9vdF9vdXRwdXRfZGlyLCBmaWxlbmFtZSwgZHJpdmVyX291dHB1dCwKKyAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LCBmYWlsdXJlcyk6CisgICAgIiIiV3JpdGUg
dGhlIHRlc3QgcmVzdWx0IHRvIHRoZSByZXN1bHQgb3V0cHV0IGRpcmVjdG9yeS4iIiIKKyAgICBj
aGVja3N1bXNfbWlzbWF0Y2hfYnV0X2ltYWdlc19hcmVfc2FtZSA9IEZhbHNlCisgICAgaW1hZ2Vo
YXNoX21pc21hdGNoX2ZhaWx1cmUgPSBOb25lCisgICAgd3JpdGVyID0gVGVzdFJlc3VsdFdyaXRl
cihwb3J0LCByb290X291dHB1dF9kaXIsIGZpbGVuYW1lKQorICAgIGZvciBmYWlsdXJlIGluIGZh
aWx1cmVzOgorICAgICAgICAjIEZJWE1FOiBJbnN0ZWFkIG9mIHRoaXMgbG9uZyAnaWYnIGJsb2Nr
LCBlYWNoIGZhaWx1cmUgY2xhc3MgbWlnaHQKKyAgICAgICAgIyBoYXZlIGEgcmVzcG9uc2liaWxp
dHkgZm9yIHdyaXRpbmcgYSB0ZXN0IHJlc3VsdC4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShmYWls
dXJlLCAodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ1Jlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNoKSk6Cisg
ICAgICAgICAgICB3cml0ZXIud3JpdGVfdGV4dF9maWxlcyhkcml2ZXJfb3V0cHV0LnRleHQsIGV4
cGVjdGVkX2RyaXZlcl9vdXRwdXQudGV4dCkKKyAgICAgICAgICAgIHdyaXRlci5jcmVhdGVfdGV4
dF9kaWZmX2FuZF93cml0ZV9yZXN1bHQoZHJpdmVyX291dHB1dC50ZXh0LCBleHBlY3RlZF9kcml2
ZXJfb3V0cHV0LnRleHQpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2UpOgorICAgICAgICAgICAgd3JpdGVyLndyaXRlX2lt
YWdlX2ZpbGVzKGRyaXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCisgICAg
ICAgICAgICB3cml0ZXIud3JpdGVfaW1hZ2VfaGFzaGVzKGRyaXZlcl9vdXRwdXQuaW1hZ2VfaGFz
aCwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoKQorICAgICAgICBlbGlmIGlzaW5z
dGFuY2UoZmFpbHVyZSwgdGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlSGFzaCk6Cisg
ICAgICAgICAgICB3cml0ZXIud3JpdGVfaW1hZ2VfZmlsZXMoZHJpdmVyX291dHB1dC5pbWFnZSwg
ZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZV9p
bWFnZV9oYXNoZXMoZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoLCBleHBlY3RlZF9pbWFnZV9oYXNo
PU5vbmUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZh
aWx1cmVJbWFnZUhhc2hNaXNtYXRjaCk6CisgICAgICAgICAgICB3cml0ZXIud3JpdGVfaW1hZ2Vf
ZmlsZXMoZHJpdmVyX291dHB1dC5pbWFnZSwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZSkK
KyAgICAgICAgICAgIHdyaXRlci53cml0ZV9pbWFnZV9oYXNoZXMoZHJpdmVyX291dHB1dC5pbWFn
ZV9oYXNoLCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gpCisgICAgICAgICAgICBp
bWFnZXNfYXJlX2RpZmZlcmVudCA9IHdyaXRlci5jcmVhdGVfaW1hZ2VfZGlmZl9hbmRfd3JpdGVf
cmVzdWx0KAorICAgICAgICAgICAgICAgIGRyaXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2Ry
aXZlcl9vdXRwdXQuaW1hZ2UpCisgICAgICAgICAgICBpZiBub3QgaW1hZ2VzX2FyZV9kaWZmZXJl
bnQ6CisgICAgICAgICAgICAgICAgY2hlY2tzdW1zX21pc21hdGNoX2J1dF9pbWFnZXNfYXJlX3Nh
bWUgPSBUcnVlCisgICAgICAgICAgICAgICAgaW1hZ2VoYXNoX21pc21hdGNoX2ZhaWx1cmUgPSBm
YWlsdXJlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZh
aWx1cmVDcmFzaCk6CisgICAgICAgICAgICB3cml0ZXIud3JpdGVfY3Jhc2hfcmVwb3J0KGRyaXZl
cl9vdXRwdXQuZXJyb3IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShmYWlsdXJlLCAodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCwpKQorCisgICAgIyBG
SVhNRTogVGhpcyBpcyBhbiB1Z2x5IGhhY2sgdG8gaGFuZGxlIEZhaWx1cmVJbWFnZUhhc2hJbmNv
cnJlY3QgY2FzZS4KKyAgICAjIElkZWFsbHksIEZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QgY2Fz
ZSBzaG91bGQgYmUgZGV0ZWN0ZWQgYmVmb3JlIHRoaXMKKyAgICAjIGZ1bmN0aW9uIGlzIGNhbGxl
ZC4gQnV0IGl0IHJlcXVpcmVzIGNhbGxpbmcgY3JlYXRlX2RpZmZfaW1hZ2UoKSB0byBkZXRlY3QK
KyAgICAjIHdoZXRoZXIgdHdvIGltYWdlcyBhcmUgc2FtZSBvciBub3QuIFNvIHdlIG5lZWQgdGhp
cyBoYWNrIHVudGlsIHdlIGhhdmUgYSBiZXR0ZXIgYXBwcm9hY2guCisgICAgaWYgY2hlY2tzdW1z
X21pc21hdGNoX2J1dF9pbWFnZXNfYXJlX3NhbWU6CisgICAgICAgICMgUmVwbGFjZSBGYWlsdXJl
SW1hZ2VIYXNoTWlzbWF0Y2ggd2l0aCBGYWlsdXJlSW1hZ2VIYXNoSW5jb3JyZWN0LgorICAgICAg
ICBmYWlsdXJlcy5yZW1vdmUoaW1hZ2VoYXNoX21pc21hdGNoX2ZhaWx1cmUpCisgICAgICAgIGZh
aWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QoKSkK
KworCitjbGFzcyBUZXN0UmVzdWx0V3JpdGVyKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyB3aGlj
aCBoYW5kbGVzIGFsbCB3cml0aW5nIG9wZXJhdGlvbnMgdG8gdGhlIHJlc3VsdCBkaXJlY3Rvcnku
IiIiCisKKyAgICAjIEZpbGVuYW1lIHBpZWNlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZXMgdG8gdGhl
IHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCisgICAgRklMRU5BTUVfU1VGRklYX0FDVFVBTCA9ICIt
YWN0dWFsIgorICAgIEZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCA9ICItZXhwZWN0ZWQiCisgICAg
RklMRU5BTUVfU1VGRklYX0RJRkYgPSAiLWRpZmYiCisgICAgRklMRU5BTUVfU1VGRklYX1dESUZG
ID0gIi13ZGlmZi5odG1sIgorICAgIEZJTEVOQU1FX1NVRkZJWF9QUkVUVFlfUEFUQ0ggPSAiLXBy
ZXR0eS1kaWZmLmh0bWwiCisgICAgRklMRU5BTUVfU1VGRklYX0lNQUdFX0RJRkYgPSAiLWRpZmYu
cG5nIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHJvb3Rfb3V0cHV0X2RpciwgZmls
ZW5hbWUpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9yb290X291
dHB1dF9kaXIgPSByb290X291dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fZmlsZW5hbWUgPSBmaWxl
bmFtZQorICAgICAgICBzZWxmLl90ZXN0bmFtZSA9IHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShmaWxlbmFtZSkKKworICAgIGRlZiBfbWFrZV9vdXRwdXRfZGlyZWN0b3J5KHNlbGYpOgorICAg
ICAgICAiIiJDcmVhdGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBuZWVkZWQpIGZvciBhIGdp
dmVuIHRlc3QgZmlsZW5hbWUuIiIiCisgICAgICAgIGZzID0gc2VsZi5fcG9ydC5fZmlsZXN5c3Rl
bQorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBmcy5qb2luKHNlbGYuX3Jvb3Rfb3V0cHV0X2Rp
ciwgc2VsZi5fdGVzdG5hbWUpCisgICAgICAgIHNlbGYuX3BvcnQubWF5YmVfbWFrZV9kaXJlY3Rv
cnkoZnMuZGlybmFtZShvdXRwdXRfZmlsZW5hbWUpKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFt
ZShzZWxmLCBtb2RpZmllcik6CisgICAgICAgICIiIlJldHVybnMgYSBmaWxlbmFtZSBpbnNpZGUg
dGhlIG91dHB1dCBkaXIgdGhhdCBjb250YWlucyBtb2RpZmllci4KKworICAgICAgICBGb3IgZXhh
bXBsZSwgaWYgdGVzdCBuYW1lIGlzICJmYXN0L2RvbS9mb28uaHRtbCIgYW5kIG1vZGlmaWVyIGlz
ICItZXhwZWN0ZWQudHh0IiwKKyAgICAgICAgdGhlIHJldHVybiB2YWx1ZSBpcyAiLzxwYXRoLXRv
LXJvb3Qtb3V0cHV0LWRpcj4vZmFzdC9kb20vZm9vLWV4cGVjdGVkLnR4dCIuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBtb2RpZmllcjogYSBzdHJpbmcgdG8gcmVwbGFjZSB0aGUgZXh0ZW5z
aW9uIG9mIGZpbGVuYW1lIHdpdGgKKworICAgICAgICBSZXR1cm46CisgICAgICAgICAgVGhlIGFi
c29sdXRlIHBhdGggdG8gdGhlIG91dHB1dCBmaWxlbmFtZQorICAgICAgICAiIiIKKyAgICAgICAg
ZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIG91dHB1dF9maWxlbmFtZSA9IGZz
LmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLCBzZWxmLl90ZXN0bmFtZSkKKyAgICAgICAgcmV0
dXJuIGZzLnNwbGl0ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgorCisgICAgZGVm
IHdyaXRlX291dHB1dF9maWxlcyhzZWxmLCBmaWxlX3R5cGUsIG91dHB1dCwgZXhwZWN0ZWQpOgor
ICAgICAgICAiIiJXcml0ZXMgdGhlIHRlc3Qgb3V0cHV0LCB0aGUgZXhwZWN0ZWQgb3V0cHV0IGlu
IHRoZSByZXN1bHRzIGRpcmVjdG9yeS4KKworICAgICAgICBUaGUgZnVsbCBvdXRwdXQgZmlsZW5h
bWUgb2YgdGhlIGFjdHVhbCwgZm9yIGV4YW1wbGUsIHdpbGwgYmUKKyAgICAgICAgICA8ZmlsZW5h
bWU+LWFjdHVhbDxmaWxlX3R5cGU+CisgICAgICAgIEZvciBpbnN0YW5jZSwKKyAgICAgICAgICBt
eV90ZXN0LWFjdHVhbC50eHQKKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVfdHlwZTog
QSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdGVzdCBvdXRwdXQgZmlsZSB0eXBlLCBlLmcuICIudHh0
IgorICAgICAgICAgIG91dHB1dDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdGVzdCBvdXRwdXQK
KyAgICAgICAgICBleHBlY3RlZDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXhwZWN0ZWQgdGVz
dCBvdXRwdXQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX21ha2Vfb3V0cHV0X2RpcmVjdG9y
eSgpCisgICAgICAgIGFjdHVhbF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKHNlbGYu
RklMRU5BTUVfU1VGRklYX0FDVFVBTCArIGZpbGVfdHlwZSkKKyAgICAgICAgZXhwZWN0ZWRfZmls
ZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RF
RCArIGZpbGVfdHlwZSkKKworICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KKyAg
ICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgZnMud3JpdGVfYmluYXJ5X2ZpbGUoYWN0dWFs
X2ZpbGVuYW1lLCBvdXRwdXQpCisgICAgICAgIGlmIGV4cGVjdGVkOgorICAgICAgICAgICAgZnMu
d3JpdGVfYmluYXJ5X2ZpbGUoZXhwZWN0ZWRfZmlsZW5hbWUsIGV4cGVjdGVkKQorCisgICAgZGVm
IHdyaXRlX2NyYXNoX3JlcG9ydChzZWxmLCBlcnJvcik6CisgICAgICAgICIiIldyaXRlIGNyYXNo
IGluZm9ybWF0aW9uLiIiIgorICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KKyAg
ICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZSgiLXN0YWNrLnR4dCIpCisgICAg
ICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUoZmlsZW5hbWUpKQorICAgICAg
ICBmcy53cml0ZV90ZXh0X2ZpbGUoZmlsZW5hbWUsIGVycm9yKQorCisgICAgZGVmIHdyaXRlX3Rl
eHRfZmlsZXMoc2VsZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgorICAgICAgICBzZWxm
LndyaXRlX291dHB1dF9maWxlcygiLnR4dCIsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0KQor
CisgICAgZGVmIGNyZWF0ZV90ZXh0X2RpZmZfYW5kX3dyaXRlX3Jlc3VsdChzZWxmLCBhY3R1YWxf
dGV4dCwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgICMgRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMg
YWN0dWFsbHkgZG9pbmcgdGhlIGRpZmZzIGFzIHdlbGwgYXMgd3JpdGluZyByZXN1bHRzLgorICAg
ICAgICAjIEl0IG1pZ2h0IGJlIGJldHRlciB0byBleHRyYWN0IGNvZGUgd2hpY2ggZG9lcyAnZGlm
ZicgYW5kIG1ha2UgaXQgYSBzZXBhcmF0ZSBmdW5jdGlvbi4KKyAgICAgICAgaWYgbm90IGFjdHVh
bF90ZXh0IG9yIG5vdCBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgc2VsZi5fbWFrZV9vdXRwdXRfZGlyZWN0b3J5KCkKKyAgICAgICAgZmlsZV90eXBlID0gJy50
eHQnCisgICAgICAgIGFjdHVhbF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKHNlbGYu
RklMRU5BTUVfU1VGRklYX0FDVFVBTCArIGZpbGVfdHlwZSkKKyAgICAgICAgZXhwZWN0ZWRfZmls
ZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RF
RCArIGZpbGVfdHlwZSkKKyAgICAgICAgZnMgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtCisgICAg
ICAgICMgV2UgdHJlYXQgZGlmZiBvdXRwdXQgYXMgYmluYXJ5LiBEaWZmIG91dHB1dCBtYXkgY29u
dGFpbiBtdWx0aXBsZSBmaWxlcworICAgICAgICAjIGluIGNvbmZsaWN0aW5nIGVuY29kaW5ncy4K
KyAgICAgICAgZGlmZiA9IHNlbGYuX3BvcnQuZGlmZl90ZXh0KGV4cGVjdGVkX3RleHQsIGFjdHVh
bF90ZXh0LCBleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQorICAgICAgICBkaWZm
X2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhfRElG
RiArIGZpbGVfdHlwZSkKKyAgICAgICAgZnMud3JpdGVfYmluYXJ5X2ZpbGUoZGlmZl9maWxlbmFt
ZSwgZGlmZikKKworICAgICAgICAjIFNoZWxsIG91dCB0byB3ZGlmZiB0byBnZXQgY29sb3JlZCBp
bmxpbmUgZGlmZnMuCisgICAgICAgIHdkaWZmID0gc2VsZi5fcG9ydC53ZGlmZl90ZXh0KGV4cGVj
dGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpCisgICAgICAgIHdkaWZmX2ZpbGVuYW1lID0g
c2VsZi5vdXRwdXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhfV0RJRkYpCisgICAgICAg
IGZzLndyaXRlX2JpbmFyeV9maWxlKHdkaWZmX2ZpbGVuYW1lLCB3ZGlmZikKKworICAgICAgICAj
IFVzZSBXZWJLaXQncyBQcmV0dHlQYXRjaC5yYiB0byBnZXQgYW4gSFRNTCBkaWZmLgorICAgICAg
ICBwcmV0dHlfcGF0Y2ggPSBzZWxmLl9wb3J0LnByZXR0eV9wYXRjaF90ZXh0KGRpZmZfZmlsZW5h
bWUpCisgICAgICAgIHByZXR0eV9wYXRjaF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1l
KHNlbGYuRklMRU5BTUVfU1VGRklYX1BSRVRUWV9QQVRDSCkKKyAgICAgICAgZnMud3JpdGVfYmlu
YXJ5X2ZpbGUocHJldHR5X3BhdGNoX2ZpbGVuYW1lLCBwcmV0dHlfcGF0Y2gpCisKKyAgICBkZWYg
d3JpdGVfaW1hZ2VfZmlsZXMoc2VsZiwgYWN0dWFsX2ltYWdlLCBleHBlY3RlZF9pbWFnZSk6Cisg
ICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKCcucG5nJywgYWN0dWFsX2ltYWdlLCBleHBl
Y3RlZF9pbWFnZSkKKworICAgIGRlZiB3cml0ZV9pbWFnZV9oYXNoZXMoc2VsZiwgYWN0dWFsX2lt
YWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hhc2gpOgorICAgICAgICBzZWxmLndyaXRlX291dHB1
dF9maWxlcygnLmNoZWNrc3VtJywgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hh
c2gpCisKKyAgICBkZWYgY3JlYXRlX2ltYWdlX2RpZmZfYW5kX3dyaXRlX3Jlc3VsdChzZWxmLCBh
Y3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlKToKKyAgICAgICAgIiIiV3JpdGVzIHRoZSB2aXN1
YWwgZGlmZiBvZiB0aGUgZXhwZWN0ZWQvYWN0dWFsIFBOR3MuCisKKyAgICAgICAgUmV0dXJucyBU
cnVlIGlmIHRoZSBpbWFnZXMgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgIiIiCisgICAgICAgICMg
RklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcgdGhlIGRpZmYgYXMgd2VsbCBh
cyB3cml0aW5nIGEgcmVzdWx0LgorICAgICAgICAjIEl0IG1pZ2h0IGJlIGJldHRlciB0byBleHRy
YWN0ICdkaWZmJyBjb2RlIGFuZCBtYWtlIGl0IGEgc2VwYXJhdGUgZnVuY3Rpb24uCisgICAgICAg
ICMgVG8gZG8gc28sIHdlIGhhdmUgdG8gY2hhbmdlIHBvcnQuZGlmZl9pbWFnZSgpIGFzIHdlbGwu
CisgICAgICAgIGRpZmZfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShzZWxmLkZJTEVO
QU1FX1NVRkZJWF9JTUFHRV9ESUZGKQorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5kaWZmX2lt
YWdlKGFjdHVhbF9pbWFnZSwgZXhwZWN0ZWRfaW1hZ2UsIGRpZmZfZmlsZW5hbWUpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdl
X2RpZmYucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L2ltYWdlX2RpZmYucHkKaW5kZXggMWQ3ZTEwNzI0NzZkNDM2ZDRlOGQyMmFiYmM5MDg4Mzk3OTA2
ZGZiYy4uNTczMGYyYjdkY2Q0MmMyZjgxODRlMjQwM2YxY2MyNDBkYTkwYzJhMSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9k
aWZmLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlw
ZXMvaW1hZ2VfZGlmZi5weQpAQCAtNDksMjUgKzQ5LDYgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcy5pbWFnZV9kaWZmIikKIAogY2xh
c3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAKLSAgICBkZWYgX2Nv
cHlfaW1hZ2Uoc2VsZiwgZmlsZW5hbWUsIGFjdHVhbF9pbWFnZSwgZXhwZWN0ZWRfaW1hZ2UpOgot
ICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgJy5wbmcnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQ9YWN0dWFsX2ltYWdlLCBleHBlY3RlZD1l
eHBlY3RlZF9pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9
Tm9uZSwgcHJpbnRfdGV4dF9kaWZmcz1GYWxzZSkKLQotICAgIGRlZiBfY29weV9pbWFnZV9oYXNo
KHNlbGYsIGZpbGVuYW1lLCBhY3R1YWxfaW1hZ2VfaGFzaCwgZXhwZWN0ZWRfaW1hZ2VfaGFzaCk6
Ci0gICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKGZpbGVuYW1lLCAnLmNoZWNrc3VtJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVj
dGVkX2ltYWdlX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5n
PSJhc2NpaSIsIHByaW50X3RleHRfZGlmZnM9RmFsc2UpCi0KLSAgICBkZWYgX2NyZWF0ZV9kaWZm
X2ltYWdlKHNlbGYsIHBvcnQsIGZpbGVuYW1lLCBhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdl
KToKLSAgICAgICAgIiIiQ3JlYXRlcyB0aGUgdmlzdWFsIGRpZmYgb2YgdGhlIGV4cGVjdGVkL2Fj
dHVhbCBQTkdzLgotCi0gICAgICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgaW1hZ2VzIGFyZSBkaWZm
ZXJlbnQuCi0gICAgICAgICIiIgotICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRf
ZmlsZW5hbWUoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9DT01QQVJFKQotICAgICAgICByZXR1cm4gcG9y
dC5kaWZmX2ltYWdlKGFjdHVhbF9pbWFnZSwgZXhwZWN0ZWRfaW1hZ2UsIGRpZmZfZmlsZW5hbWUp
Ci0KICAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIG9wdGlvbnMs
IGFjdHVhbF9kcml2ZXJfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9k
cml2ZXJfb3V0cHV0KToKICAgICAgICAgIiIiSW1wbGVtZW50YXRpb24gb2YgQ29tcGFyZU91dHB1
dCB0aGF0IGNoZWNrcyB0aGUgb3V0cHV0IGltYWdlIGFuZApAQCAtODEsMzcgKzYyLDE0IEBAIGNs
YXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogCiAgICAgICAgIGlm
IG5vdCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlOgogICAgICAgICAgICAgIyBSZXBvcnQg
YSBtaXNzaW5nIGV4cGVjdGVkIFBORyBmaWxlLgotICAgICAgICAgICAgc2VsZi5fY29weV9pbWFn
ZShmaWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5v
bmUpCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUsIGFjdHVhbF9k
cml2ZXJfb3V0cHV0LmltYWdlX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoKQogICAgICAgICAgICAgZmFpbHVy
ZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhaWx1cmVzCiAgICAgICAgIGlmIG5vdCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0
LmltYWdlX2hhc2g6CiAgICAgICAgICAgICAjIFJlcG9ydCBhIG1pc3NpbmcgZXhwZWN0ZWQgY2hl
Y2tzdW0gZmlsZS4KLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2UoZmlsZW5hbWUsIGFjdHVh
bF9kcml2ZXJfb3V0cHV0LmltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlKQotICAgICAgICAgICAgc2VsZi5fY29weV9pbWFnZV9o
YXNoKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ltYWdlX2hhc2g9Tm9uZSkKICAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2VI
YXNoKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKLQotICAgICAgICBpZiBhY3R1YWxf
ZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoID09IGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2Vf
aGFzaDoKLSAgICAgICAgICAgICMgSGFzaCBtYXRjaGVkIChubyBkaWZmIG5lZWRlZCwgb2theSB0
byByZXR1cm4pLgotICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCi0KLSAgICAgICAgc2VsZi5f
Y29weV9pbWFnZShmaWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZSkKLSAgICAgICAg
c2VsZi5fY29weV9pbWFnZV9oYXNoKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFn
ZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZHJpdmVyX291
dHB1dC5pbWFnZV9oYXNoKQotCi0gICAgICAgICMgRXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgdGhl
IHJlc3VsdCBpbiBvbmUgY29kZXBhdGggYmVsb3cgYnV0IHdlCi0gICAgICAgICMgc3RpbGwgbmVl
ZCB0byBjYWxsIENyZWF0ZUltYWdlRGlmZiBmb3Igb3RoZXIgY29kZXBhdGhzLgotICAgICAgICBp
bWFnZXNfYXJlX2RpZmZlcmVudCA9IHNlbGYuX2NyZWF0ZV9kaWZmX2ltYWdlKHBvcnQsIGZpbGVu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1h
Z2UpCi0gICAgICAgIGlmIG5vdCBpbWFnZXNfYXJlX2RpZmZlcmVudDoKLSAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QoKSkK
LSAgICAgICAgZWxzZToKKyAgICAgICAgaWYgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2VfaGFz
aCAhPSBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2g6CiAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2goKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlcwogCiAgICAgICAgIHJldHVybiBmYWlsdXJlcwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90
ZXN0X3R5cGVfYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKaW5kZXggMDliZmMzMWMxMjkwMDM1ZTk3ODE5Mjc0
MDZlMjBjMjgxNGQ0YjkzZC4uNGUwNTEzYWQyMGMzMWQ5MGU3Y2YyODkyZjIyOWM5MTFkNWE1Mjg3
NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy90ZXN0X3R5cGVfYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5CkBAIC00NCwxNCArNDQsNiBAQCBf
d2RpZmZfYXZhaWxhYmxlID0gVHJ1ZQogCiBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKIAot
ICAgICMgRmlsZW5hbWUgcGllY2VzIHdoZW4gd3JpdGluZyBmYWlsdXJlcyB0byB0aGUgdGVzdCBy
ZXN1bHRzIGRpcmVjdG9yeS4KLSAgICBGSUxFTkFNRV9TVUZGSVhfQUNUVUFMID0gIi1hY3R1YWwi
Ci0gICAgRklMRU5BTUVfU1VGRklYX0VYUEVDVEVEID0gIi1leHBlY3RlZCIKLSAgICBGSUxFTkFN
RV9TVUZGSVhfRElGRiA9ICItZGlmZiIKLSAgICBGSUxFTkFNRV9TVUZGSVhfV0RJRkYgPSAiLXdk
aWZmLmh0bWwiCi0gICAgRklMRU5BTUVfU1VGRklYX1BSRVRUWV9QQVRDSCA9ICItcHJldHR5LWRp
ZmYuaHRtbCIKLSAgICBGSUxFTkFNRV9TVUZGSVhfQ09NUEFSRSA9ICItZGlmZi5wbmciCi0KICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgcm9vdF9vdXRwdXRfZGlyKToKICAgICAgICAgIiIi
SW5pdGlhbGl6ZSBhIFRlc3RUeXBlQmFzZSBvYmplY3QuCiAKQEAgLTYyLDMzICs1NCw2IEBAIGNs
YXNzIFRlc3RUeXBlQmFzZShvYmplY3QpOgogICAgICAgICBzZWxmLl9yb290X291dHB1dF9kaXIg
PSByb290X291dHB1dF9kaXIKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKIAotICAgIGRlZiBf
bWFrZV9vdXRwdXRfZGlyZWN0b3J5KHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgIiIiQ3JlYXRl
cyB0aGUgb3V0cHV0IGRpcmVjdG9yeSAoaWYgbmVlZGVkKSBmb3IgYSBnaXZlbiB0ZXN0Ci0gICAg
ICAgIGZpbGVuYW1lLiIiIgotICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KLSAg
ICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gZnMuam9pbihzZWxmLl9yb290X291dHB1dF9kaXIsCi0g
ICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQot
ICAgICAgICBmcy5tYXliZV9tYWtlX2RpcmVjdG9yeShmcy5kaXJuYW1lKG91dHB1dF9maWxlbmFt
ZSkpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lLCBtb2RpZmllcik6
Ci0gICAgICAgICIiIlJldHVybnMgYSBmaWxlbmFtZSBpbnNpZGUgdGhlIG91dHB1dCBkaXIgdGhh
dCBjb250YWlucyBtb2RpZmllci4KLQotICAgICAgICBGb3IgZXhhbXBsZSwgaWYgZmlsZW5hbWUg
aXMgYzovLi4uL2Zhc3QvZG9tL2Zvby5odG1sIGFuZCBtb2RpZmllciBpcwotICAgICAgICAiLWV4
cGVjdGVkLnR4dCIsIHRoZSByZXR1cm4gdmFsdWUgaXMKLSAgICAgICAgYzovY3lnd2luL3RtcC9s
YXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZG9tL2Zvby1leHBlY3RlZC50eHQKLQotICAgICAgICBB
cmdzOgotICAgICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUK
LSAgICAgICAgICBtb2RpZmllcjogYSBzdHJpbmcgdG8gcmVwbGFjZSB0aGUgZXh0ZW5zaW9uIG9m
IGZpbGVuYW1lIHdpdGgKLQotICAgICAgICBSZXR1cm46Ci0gICAgICAgICAgVGhlIGFic29sdXRl
IHdpbmRvd3MgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGVuYW1lCi0gICAgICAgICIiIgotICAgICAg
ICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KLSAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0g
ZnMuam9pbihzZWxmLl9yb290X291dHB1dF9kaXIsCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZnMuc3BsaXRl
eHQob3V0cHV0X2ZpbGVuYW1lKVswXSArIG1vZGlmaWVyCi0KICAgICBkZWYgY29tcGFyZV9vdXRw
dXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIG9wdGlvbnMsIGFjdHVhbF9kcml2ZXJfb3V0cHV0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZHJpdmVyX291dHB1dCk6CiAgICAgICAg
ICIiIk1ldGhvZCB0aGF0IGNvbXBhcmVzIHRoZSBvdXRwdXQgZnJvbSB0aGUgdGVzdCB3aXRoIHRo
ZQpAQCAtMTA5LDYzICs3NCwzIEBAIGNsYXNzIFRlc3RUeXBlQmFzZShvYmplY3QpOgogICAgICAg
ICAgIGEgbGlzdCBvZiBUZXN0RmFpbHVyZSBvYmplY3RzLCBlbXB0eSBpZiB0aGUgdGVzdCBwYXNz
ZXMKICAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAg
IGRlZiBfd3JpdGVfaW50b19maWxlX2F0X3BhdGgoc2VsZiwgZmlsZV9wYXRoLCBjb250ZW50cywg
ZW5jb2RpbmcpOgotICAgICAgICAiIiJUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgYnl0ZV9hcnJh
eSBpcyBhbHJlYWR5IGVuY29kZWQKLSAgICAgICAgaW50byB0aGUgcmlnaHQgZm9ybWF0LiIiIgot
ICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KLSAgICAgICAgaWYgZW5jb2Rpbmcg
aXMgTm9uZToKLSAgICAgICAgICAgIGZzLndyaXRlX2JpbmFyeV9maWxlKGZpbGVfcGF0aCwgY29u
dGVudHMpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZnMud3JpdGVfdGV4dF9maWxlKGZp
bGVfcGF0aCwgY29udGVudHMpCi0KLSAgICBkZWYgd3JpdGVfb3V0cHV0X2ZpbGVzKHNlbGYsIGZp
bGVuYW1lLCBmaWxlX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGV4
cGVjdGVkLCBlbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3RleHRf
ZGlmZnM9RmFsc2UpOgotICAgICAgICAiIiJXcml0ZXMgdGhlIHRlc3Qgb3V0cHV0LCB0aGUgZXhw
ZWN0ZWQgb3V0cHV0IGFuZCBvcHRpb25hbGx5IHRoZSBkaWZmCi0gICAgICAgIGJldHdlZW4gdGhl
IHR3byB0byBmaWxlcyBpbiB0aGUgcmVzdWx0cyBkaXJlY3RvcnkuCi0KLSAgICAgICAgVGhlIGZ1
bGwgb3V0cHV0IGZpbGVuYW1lIG9mIHRoZSBhY3R1YWwsIGZvciBleGFtcGxlLCB3aWxsIGJlCi0g
ICAgICAgICAgPGZpbGVuYW1lPi1hY3R1YWw8ZmlsZV90eXBlPgotICAgICAgICBGb3IgaW5zdGFu
Y2UsCi0gICAgICAgICAgbXlfdGVzdC1hY3R1YWwudHh0Ci0KLSAgICAgICAgQXJnczoKLSAgICAg
ICAgICBmaWxlbmFtZTogVGhlIHRlc3QgZmlsZW5hbWUKLSAgICAgICAgICBmaWxlX3R5cGU6IEEg
c3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3Qgb3V0cHV0IGZpbGUgdHlwZSwgZS5nLiAiLnR4dCIK
LSAgICAgICAgICBvdXRwdXQ6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRlc3Qgb3V0cHV0Ci0g
ICAgICAgICAgZXhwZWN0ZWQ6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4cGVjdGVkIHRlc3Qg
b3V0cHV0Ci0gICAgICAgICAgcHJpbnRfdGV4dF9kaWZmczogVHJ1ZSBmb3IgdGV4dCBkaWZmcy4g
KEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhpcyBmcm9tIHRoZSBmaWxlIHR5cGU/
KQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fbWFrZV9vdXRwdXRfZGlyZWN0b3J5KGZpbGVu
YW1lKQotICAgICAgICBhY3R1YWxfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxl
bmFtZSwgc2VsZi5GSUxFTkFNRV9TVUZGSVhfQUNUVUFMICsgZmlsZV90eXBlKQotICAgICAgICBl
eHBlY3RlZF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLCBzZWxmLkZJ
TEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArIGZpbGVfdHlwZSkKLSAgICAgICAgIyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBpcyBwb29ybHkgZGVzaWduZWQuICBXZSBzaG91bGQgYmUgcGFzc2luZyBpbiBz
b21lIHNvcnQgb2YKLSAgICAgICAgIyBlbmNvZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjYWxs
ZXJzLgotICAgICAgICBpZiBvdXRwdXQ6Ci0gICAgICAgICAgICBzZWxmLl93cml0ZV9pbnRvX2Zp
bGVfYXRfcGF0aChhY3R1YWxfZmlsZW5hbWUsIG91dHB1dCwgZW5jb2RpbmcpCi0gICAgICAgIGlm
IGV4cGVjdGVkOgotICAgICAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgoZXhw
ZWN0ZWRfZmlsZW5hbWUsIGV4cGVjdGVkLCBlbmNvZGluZykKLQotICAgICAgICBpZiBub3Qgb3V0
cHV0IG9yIG5vdCBleHBlY3RlZDoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIG5v
dCBwcmludF90ZXh0X2RpZmZzOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgIyBOb3Rl
OiBXZSBwYXNzIGVuY29kaW5nPU5vbmUgZm9yIGFsbCBkaWZmIHdyaXRlcywgYXMgd2UgdHJlYXQg
ZGlmZgotICAgICAgICAjIG91dHB1dCBhcyBiaW5hcnkuICBEaWZmIG91dHB1dCBtYXkgY29udGFp
biBtdWx0aXBsZSBmaWxlcyBpbgotICAgICAgICAjIGNvbmZsaWN0aW5nIGVuY29kaW5ncy4KLSAg
ICAgICAgZGlmZiA9IHNlbGYuX3BvcnQuZGlmZl90ZXh0KGV4cGVjdGVkLCBvdXRwdXQsIGV4cGVj
dGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpCi0gICAgICAgIGRpZmZfZmlsZW5hbWUgPSBz
ZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwgc2VsZi5GSUxFTkFNRV9TVUZGSVhfRElGRiAr
IGZpbGVfdHlwZSkKLSAgICAgICAgc2VsZi5fd3JpdGVfaW50b19maWxlX2F0X3BhdGgoZGlmZl9m
aWxlbmFtZSwgZGlmZiwgZW5jb2Rpbmc9Tm9uZSkKLQotICAgICAgICAjIFNoZWxsIG91dCB0byB3
ZGlmZiB0byBnZXQgY29sb3JlZCBpbmxpbmUgZGlmZnMuCi0gICAgICAgIHdkaWZmID0gc2VsZi5f
cG9ydC53ZGlmZl90ZXh0KGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpCi0gICAg
ICAgIHdkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsIHNlbGYu
RklMRU5BTUVfU1VGRklYX1dESUZGKQotICAgICAgICBzZWxmLl93cml0ZV9pbnRvX2ZpbGVfYXRf
cGF0aCh3ZGlmZl9maWxlbmFtZSwgd2RpZmYsIGVuY29kaW5nPU5vbmUpCi0KLSAgICAgICAgIyBV
c2UgV2ViS2l0J3MgUHJldHR5UGF0Y2gucmIgdG8gZ2V0IGFuIEhUTUwgZGlmZi4KLSAgICAgICAg
cHJldHR5X3BhdGNoID0gc2VsZi5fcG9ydC5wcmV0dHlfcGF0Y2hfdGV4dChkaWZmX2ZpbGVuYW1l
KQotICAgICAgICBwcmV0dHlfcGF0Y2hfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShm
aWxlbmFtZSwgc2VsZi5GSUxFTkFNRV9TVUZGSVhfUFJFVFRZX1BBVENIKQotICAgICAgICBzZWxm
Ll93cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aChwcmV0dHlfcGF0Y2hfZmlsZW5hbWUsIHByZXR0eV9w
YXRjaCwgZW5jb2Rpbmc9Tm9uZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKaW5kZXggMDdjM2QwM2Zh
NTQ5NzE1YzRlMGU3YmIyNmVmYTU2NmUzZGY3ZWNmYi4uYWI2NzlmNGI0Y2Q3ZTFiZjE3ZWFiMDIw
ZjgxOWFlNDI2YTk0YmQyZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKQEAgLTY0LDEzICs2NCw3
IEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAg
ICAgICAjIEFzc3VtaW5nIGV4cGVjdGVkX3RleHQgaXMgYWxyZWFkeSBub3JtYWxpemVkLgogICAg
ICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfZHJpdmVyX291dHB1dC50ZXh0CiAKLSAgICAg
ICAgIyBXcml0ZSBvdXRwdXQgZmlsZXMgZm9yIG5ldyB0ZXN0cywgdG9vLgogICAgICAgICBpZiBw
b3J0LmNvbXBhcmVfdGV4dChhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6Ci0gICAgICAgICAg
ICAjIFRleHQgZG9lc24ndCBtYXRjaCwgd3JpdGUgb3V0cHV0IGZpbGVzLgotICAgICAgICAgICAg
c2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICIudHh0IiwgYWN0dWFsX3RleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0LCBlbmNvZGlu
Zz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdGV4dF9k
aWZmcz1UcnVlKQotCiAgICAgICAgICAgICBpZiBleHBlY3RlZF90ZXh0ID09ICcnOgogICAgICAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nUmVz
dWx0KCkpCiAgICAgICAgICAgICBlbHNlOgo=
</data>
<flag name="review"
          id="74616"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>