<?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>53004</bug_id>
          
          <creation_ts>2011-01-24 05:49:48 -0800</creation_ts>
          <short_desc>Introduces DriverInput and DriverOutput classes and single_test_runner module.</short_desc>
          <delta_ts>2011-02-03 21:36:41 -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>
    
    <blocked>53063</blocked>
    
    <blocked>53071</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>mihaip</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>338962</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-24 05:49:48 -0800</bug_when>
    <thetext>This is a separated patch from https://bugs.webkit.org/show_bug.cgi?id=51091.

This patch does mainly two things:
 - Introduces Input/Output classes used by base.Driver into port/base.py.
 - Move _run_single_test() and _process_output() functions from dump_render_tree_thread.py to a single_test_runner.py as an individual module. 

test_types/* classes are not touched except for renaming variables in this patch. The following patches will move test_type/* classes into a single_test_runner module introduced in this patch.

Please see  https://bugs.webkit.org/show_bug.cgi?id=51091 for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338969</commentid>
    <comment_count>1</comment_count>
      <attachid>79916</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-24 06:11:18 -0800</bug_when>
    <thetext>Created attachment 79916
single_test_runner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339169</commentid>
    <comment_count>2</comment_count>
      <attachid>79916</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-24 12:15:19 -0800</bug_when>
    <thetext>Comment on attachment 79916
single_test_runner

Why would we want to move DriverOutput out of its own file and into a shared file?

This change is still qutie large.  The rename could be done first and easily rubber-stamped.

I guess you&apos;re moving single-test-running logic from dump_render_tree_thread onto its own class?  That sounds like a very good idea.

Are you just moving code, or causing functional changes as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339329</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 15:51:44 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 79916 [details])
&gt; Why would we want to move DriverOutput out of its own file and into a shared file?
&gt;

Read the comments in the other bug ... the motivation is that TestInput and TestOutput are really pretty closely tied to the Driver class, and so it makes sense to rename them and move them to be next to the other class. I suggested that we actually move all of the Driver* classes out of base.py and into a driver.py (or some such file), but I could understand it if Ito-san didn&apos;t want to do that as part of this patch.
 
&gt; This change is still qutie large.  The rename could be done first and easily rubber-stamped.
&gt;

I actually prefer the fact that he&apos;s renaming things and moving them in a single patch, because it allows me to understand what&apos;s going on and review all the changes at once.
 
&gt; I guess you&apos;re moving single-test-running logic from dump_render_tree_thread onto its own class?  That sounds like a very good idea.
&gt;

Yes. Ironically, there&apos;s a large amount of overlap between single_test_runner and what will be the Worker class in the multiprocessing-safe patch (bug 52194), but that&apos;s what I get for taking so long to land the other one. More merging ahead :)
  
&gt; Are you just moving code, or causing functional changes as well?

This change looks like it&apos;s just moving stuff around, and it looks good to me (though I can&apos;t R+ it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339467</commentid>
    <comment_count>4</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-24 21:12:34 -0800</bug_when>
    <thetext>Hi Eric, Dirk, thank you for the reviews.

(In reply to comment #2)
&gt; (From update of attachment 79916 [details])
&gt; Why would we want to move DriverOutput out of its own file and into a shared file?
&gt;

As Dirk mentioned, I&apos;d like to move Driver* classes out of port/base.py as well as Driver class itself in another patch. So in this patch, please forgive me that DriverInput/Out classes are put on port/base.py. Driver and DirverInput/Output classes are tightly related.
 
&gt; This change is still qutie large.  The rename could be done first and easily rubber-stamped.


I could have separated this patch into two patches for easy reviewing, but I couldn&apos;t help but move _process_output() method to a separated module when I tried to modify  _process_output() function in dump_render_thread.py so that that uses DriverInput/Output classes :)

&gt; I guess you&apos;re moving single-test-running logic from dump_render_tree_thread onto its own class?  That sounds like a very good idea.
&gt; 
&gt; Are you just moving code, or causing functional changes as well?

single_test_runner.py contains only moved code from dump_render_tree.py as of now. There is no functional change. That&apos;s just moving stuff around.

It seems that there is no easy way to know &apos;diff&apos; in bugzilla if we move the code and modify it a little. Sorry for the inconvenience.

(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 79916 [details] [details])
&gt; &gt; Why would we want to move DriverOutput out of its own file and into a shared file?
&gt; &gt;
&gt; 
&gt; Read the comments in the other bug ... the motivation is that TestInput and TestOutput are really pretty closely tied to the Driver class, and so it makes sense to rename them and move them to be next to the other class. I suggested that we actually move all of the Driver* classes out of base.py and into a driver.py (or some such file), but I could understand it if Ito-san didn&apos;t want to do that as part of this patch.

Thank you for the comment, Dirk. I think you can tell what I am thinking successfully :) 

&gt; 
&gt; This change looks like it&apos;s just moving stuff around, and it looks good to me (though I can&apos;t R+ it).

There should be no functional change in this patch. Just a first attempt to clean up and keeping things simple. I&apos;ll continue to create patches, which are separated from https://bugs.webkit.org/show_bug.cgi?id=51091

I&apos;ll separe this patch into two patches if that is needed.
If you are confortable as is, r+ is welcome :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343012</commentid>
    <comment_count>5</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-31 21:19:02 -0800</bug_when>
    <thetext>Is there any WebKit reviewer to take a look at this patch and set r+? I&apos;ll appreciate if you review this.


(In reply to comment #4)
&gt; Hi Eric, Dirk, thank you for the reviews.
&gt; 
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 79916 [details] [details])
&gt; &gt; Why would we want to move DriverOutput out of its own file and into a shared file?
&gt; &gt;
&gt; 
&gt; As Dirk mentioned, I&apos;d like to move Driver* classes out of port/base.py as well as Driver class itself in another patch. So in this patch, please forgive me that DriverInput/Out classes are put on port/base.py. Driver and DirverInput/Output classes are tightly related.
&gt; 
&gt; &gt; This change is still qutie large.  The rename could be done first and easily rubber-stamped.
&gt; 
&gt; 
&gt; I could have separated this patch into two patches for easy reviewing, but I couldn&apos;t help but move _process_output() method to a separated module when I tried to modify  _process_output() function in dump_render_thread.py so that that uses DriverInput/Output classes :)
&gt; 
&gt; &gt; I guess you&apos;re moving single-test-running logic from dump_render_tree_thread onto its own class?  That sounds like a very good idea.
&gt; &gt; 
&gt; &gt; Are you just moving code, or causing functional changes as well?
&gt; 
&gt; single_test_runner.py contains only moved code from dump_render_tree.py as of now. There is no functional change. That&apos;s just moving stuff around.
&gt; 
&gt; It seems that there is no easy way to know &apos;diff&apos; in bugzilla if we move the code and modify it a little. Sorry for the inconvenience.
&gt; 
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 79916 [details] [details] [details])
&gt; &gt; &gt; Why would we want to move DriverOutput out of its own file and into a shared file?
&gt; &gt; &gt;
&gt; &gt; 
&gt; &gt; Read the comments in the other bug ... the motivation is that TestInput and TestOutput are really pretty closely tied to the Driver class, and so it makes sense to rename them and move them to be next to the other class. I suggested that we actually move all of the Driver* classes out of base.py and into a driver.py (or some such file), but I could understand it if Ito-san didn&apos;t want to do that as part of this patch.
&gt; 
&gt; Thank you for the comment, Dirk. I think you can tell what I am thinking successfully :) 
&gt; 
&gt; &gt; 
&gt; &gt; This change looks like it&apos;s just moving stuff around, and it looks good to me (though I can&apos;t R+ it).
&gt; 
&gt; There should be no functional change in this patch. Just a first attempt to clean up and keeping things simple. I&apos;ll continue to create patches, which are separated from https://bugs.webkit.org/show_bug.cgi?id=51091
&gt; 
&gt; I&apos;ll separe this patch into two patches if that is needed.
&gt; If you are confortable as is, r+ is welcome :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343664</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-01 16:37:16 -0800</bug_when>
    <thetext>Tony, Mihai - one of you want to take a look at this? As I noted before, this patch LGTM and I&apos;d like to get it landed ASAP because it collides like heck with some of multiprocessing cleanup ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344340</commentid>
    <comment_count>7</comment_count>
      <attachid>79916</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-02 15:56:02 -0800</bug_when>
    <thetext>Comment on attachment 79916
single_test_runner

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

I agree with eric that the renaming (from *_test_output to *_driver_output) could have happened first, which would have made it easier to review the refactoring better.

Otherwise, just some small style nits.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:1
&gt; +# Copyright (C) 2010 Google Inc. All rights reserved.

2011

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:35
&gt; +from webkitpy.layout_tests.port.base import DriverInput
&gt; +from webkitpy.layout_tests.port.base import DriverOutput

This could simply be:
  from webkitpy.layout_tests.port.base import DriverInput, DriverOutput
although I prefer:
  from webkitpy.layout_tests.port import base
and using base.DriverInput and base.DriverOutput in the code.  Either way is better than 2 lines.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:38
&gt; +import test_failures
&gt; +from test_results import TestResult

Please include the full path to these files.  E.g.:
from webkitpy.layout_tests.layout_package import test_failures.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:51
&gt; +class ExpectedDriverOutput:
&gt; +    &quot;&quot;&quot;Groups information about an expected driver output.&quot;&quot;&quot;

Should this class be near DriverInput/DriverOutput?  Alternately, do we need this class at all? Seems like it&apos;s the same as DriverOutput (or we could inherit from DriverOutput).

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:834
&gt; +    def __init__(self, text, image, image_hash,
&gt; +                 crash=None, test_time=None, timeout=None, error=None):

Should crash and timeout default to False?  Should error default to &apos;&apos;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345330</commentid>
    <comment_count>8</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-03 21:27:02 -0800</bug_when>
    <thetext>Thank you for the review.
I&apos;ll land the patch after merging it with ToT, reflecting your comments, because r+ is given.

(In reply to comment #7)
&gt; (From update of attachment 79916 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79916&amp;action=review
&gt; 
&gt; I agree with eric that the renaming (from *_test_output to *_driver_output) could have happened first, which would have made it easier to review the refactoring better.

Sorry for the inconvenience. Please forgive me about this patch. I&apos;ll try to make patch more smaller and separate into logical groups from next.

&gt; 
&gt; Otherwise, just some small style nits.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:1
&gt; &gt; +# Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; 2011

Done.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:35
&gt; &gt; +from webkitpy.layout_tests.port.base import DriverInput
&gt; &gt; +from webkitpy.layout_tests.port.base import DriverOutput
&gt; 
&gt; This could simply be:
&gt;   from webkitpy.layout_tests.port.base import DriverInput, DriverOutput
&gt; although I prefer:
&gt;   from webkitpy.layout_tests.port import base
&gt; and using base.DriverInput and base.DriverOutput in the code.  Either way is better than 2 lines.

Done.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:38
&gt; &gt; +import test_failures
&gt; &gt; +from test_results import TestResult
&gt; 
&gt; Please include the full path to these files.  E.g.:
&gt; from webkitpy.layout_tests.layout_package import test_failures.

Done.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:51
&gt; &gt; +class ExpectedDriverOutput:
&gt; &gt; +    &quot;&quot;&quot;Groups information about an expected driver output.&quot;&quot;&quot;
&gt; 
&gt; Should this class be near DriverInput/DriverOutput?  Alternately, do we need this class at all? Seems like it&apos;s the same as DriverOutput (or we could inherit from DriverOutput).

Although I don&apos;t have a strong opinion whether DriverOutput and ExpectedDriverOutput should be merged into one class or not, I&apos;d like to be conserative to introduce tight relationship between these two classes.
ExpectedDriverOutput is only used in single_test_runner.py and Driver class doesn&apos;t have to know it.

I might change my mind, but for now I&apos;d like to separate these classes.


&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:834
&gt; &gt; +    def __init__(self, text, image, image_hash,
&gt; &gt; +                 crash=None, test_time=None, timeout=None, error=None):
&gt; 
&gt; Should crash and timeout default to False?  Should error default to &apos;&apos;?

I just moved the original TestOutput code to DiverOutput without thinking these default values.

So I&apos;ve taken a look at usage of TestOutput class and found that every client specifies all parameters so these default values don&apos;t matter.

Anyway, I am happy with your suggestions. I&apos;ve updated default values of these parameters as you suggested and also updated client code (layout_tests/port/dryrun.py) so they give parameter values in the same manner.

These changes should not afect the behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345339</commentid>
    <comment_count>9</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-03 21:36:41 -0800</bug_when>
    <thetext>Committed r77603: &lt;http://trac.webkit.org/changeset/77603&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79916</attachid>
            <date>2011-01-24 06:11:18 -0800</date>
            <delta_ts>2011-02-02 15:56:02 -0800</delta_ts>
            <desc>single_test_runner</desc>
            <filename>bug-53004-20110124231116.patch</filename>
            <type>text/plain</type>
            <size>37024</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2Mzc2
MjY0NmMxZDFhMTBjYjQ2MWQ3YTc4MzcyNmQ0NDFlZWY5ODNkLi43OTIzMmUzNTI5YWI1NWI5OWI2
M2RjNTFjNThlM2EyMDc0ZmJlYzEwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDEtMjQgIEhheWF0byBJdG8g
IDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtOUldUXSBJbnRyb2R1Y2VzIElucHV0L091dHB1dCBjbGFzcyB1c2Vk
IGJ5IGJhc2UuRHJpdmVyIGludG8gcG9ydC9iYXNlLnB5IGFuZAorICAgICAgICBtb3ZlIF9ydW5f
c2luZ2xlX3Rlc3QoKSBhbmQgX3Byb2Nlc3Nfb3V0cHV0KCkgZnVuY3Rpb25zIGZyb20KKyAgICAg
ICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgdG8gYSBzaW5nbGVfdGVzdF9ydW5uZXIucHkg
YXMgYW4gaW5kaXZpZHVhbCBtb2R1bGUuCisKKyAgICAgICAgVGhpcyBpcyBjbGVhbiB1cCBhbmQg
YWN0cyBhcyBhIHByZXBhcmF0aW9uIGZvciBlbGltaW5hdGlvbiBvZiB0ZXN0X3R5cGVzLyoKKyAg
ICAgICAgY2xhc3Nlcy4gVGhlc2UgY2xhc3NlcyB3aWxsIG1vdmUgdG8gdGhlIHNpbmdsZV90ZXN0
X3J1bm5lciBtb2R1bGUgaW50cm9kdWNlZAorICAgICAgICBpbiB0aGlzIHBhdGNoLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzAwNAorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2lu
cHV0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3Rfb3V0cHV0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlm
Zi5weToKKwogMjAxMS0wMS0yMiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDA1MGVlZmFlMWIxOGVj
MmIxNjI4ZGE3NWYyNjE0ODhkMGYyYWMzYTUuLjM0MGJjZTFhYzNkMzIzMTI4YTZiZmJiZTk1ZDc4
NjE0MzFkYjg0YTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLnB5CkBAIC01MSw4MCArNTEsMTQgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMudGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlmZgogCitpbXBvcnQgc2luZ2xlX3Rl
c3RfcnVubmVyCiBpbXBvcnQgdGVzdF9mYWlsdXJlcwotaW1wb3J0IHRlc3Rfb3V0cHV0CiBpbXBv
cnQgdGVzdF9yZXN1bHRzCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5
b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQiKQogCiAKLWRlZiBfZXhwZWN0ZWRfdGVzdF9vdXRwdXQocG9y
dCwgZmlsZW5hbWUpOgotICAgICIiIlJldHVybnMgYW4gZXhwZWN0ZWQgVGVzdE91dHB1dCBvYmpl
Y3QuIiIiCi0gICAgcmV0dXJuIHRlc3Rfb3V0cHV0LlRlc3RPdXRwdXQocG9ydC5leHBlY3RlZF90
ZXh0KGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LmV4
cGVjdGVkX2ltYWdlKGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKGZpbGVuYW1lKSkKLQotZGVmIF9wcm9jZXNzX291dHB1
dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAg
ICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LCB3b3JrZXJfbmFtZSk6Ci0gICAgIiIiUmVjZWl2
ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQg
dG8gYQotICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUg
dHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCi0KLSAgICBBcmdzOgotICAgICAgcG9ydDogcG9ydC1z
cGVjaWZpYyBob29rcwotICAgICAgb3B0aW9uczogY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJndW1l
bnQgZnJvbSBvcHRwYXJzZQotICAgICAgcHJvYzogYW4gYWN0aXZlIER1bXBSZW5kZXJUcmVlIHBy
b2Nlc3MKLSAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVu
YW1lIGFuZCB0aW1lb3V0Ci0gICAgICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8g
c3ViamVjdCB0aGUgb3V0cHV0IHRvCi0gICAgICB0ZXN0X2FyZ3M6IGFyZ3VtZW50cyB0byBiZSBw
YXNzZWQgdG8gZWFjaCB0ZXN0Ci0gICAgICB0ZXN0X291dHB1dDogYSBUZXN0T3V0cHV0IG9iamVj
dCBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3QKLSAgICAgIHdvcmtlcl9uYW1lOiB3
b3JrZXIgbmFtZSBmb3IgbG9nZ2luZwotCi0gICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVj
dAotICAgICIiIgotICAgIGZhaWx1cmVzID0gW10KLSAgICBmcyA9IHBvcnQuX2ZpbGVzeXN0ZW0K
LQotICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgotICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVz
dF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKLSAgICBpZiB0ZXN0X291dHB1dC50aW1lb3V0Ogot
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQot
Ci0gICAgdGVzdF9uYW1lID0gcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQu
ZmlsZW5hbWUpCi0gICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6Ci0gICAgICAgIF9sb2cuZGVidWco
IiVzIFN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHdvcmtlcl9uYW1lLCB0ZXN0X25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0
cHV0LmVycm9yKSkKLSAgICAgICAgZmlsZW5hbWUgPSBmcy5qb2luKG9wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnksIHRlc3RfbmFtZSkKLSAgICAgICAgZmlsZW5hbWUgPSBmcy5zcGxpdGV4dChmaWxl
bmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKLSAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3Rvcnko
ZnMuZGlybmFtZShmaWxlbmFtZSkpCi0gICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShmaWxlbmFt
ZSwgdGVzdF9vdXRwdXQuZXJyb3IpCi0gICAgZWxpZiB0ZXN0X291dHB1dC5lcnJvcjoKLSAgICAg
ICAgX2xvZy5kZWJ1ZygiJXMgJXMgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlICh3b3JrZXJf
bmFtZSwgdGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LmVycm9yKSkKLQotICAgIGV4cGVjdGVkX3Rlc3Rf
b3V0cHV0ID0gX2V4cGVjdGVkX3Rlc3Rfb3V0cHV0KHBvcnQsIHRlc3RfaW5wdXQuZmlsZW5hbWUp
Ci0KLSAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMuCi0gICAgc3Rh
cnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgdGltZV9mb3JfZGlmZnMgPSB7fQotICAgIGZvciB0
ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoKLSAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50
aW1lKCkKLSAgICAgICAgbmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHBv
cnQsIHRlc3RfaW5wdXQuZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MsIHRlc3Rfb3V0cHV0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQpCi0g
ICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBh
IGNyYXNoLCBzbyB3ZSBkb24ndAotICAgICAgICAjIGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMu
IFdlIGRvIGRvdWJsZS1yZXBvcnQgZm9yIHRpbWVvdXRzIHNpbmNlCi0gICAgICAgICMgd2Ugc3Rp
bGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdlIG91dHB1dC4KLSAgICAgICAgaWYgbm90
IHRlc3Rfb3V0cHV0LmNyYXNoOgotICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWls
dXJlcykKLSAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlLl9fY2xhc3NfXy5fX25hbWVf
X10gPSAoCi0gICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKLQotICAg
IHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1l
Ci0gICAgcmV0dXJuIHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUs
IGZhaWx1cmVzLCB0ZXN0X291dHB1dC50ZXN0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCi0K
LQogZGVmIF9wYWRfdGltZW91dCh0aW1lb3V0KToKICAgICAiIiJSZXR1cm5zIGEgc2FmZSBtdWx0
aXBsZSBvZiB0aGUgcGVyLXRlc3QgdGltZW91dCB2YWx1ZSB0byB1c2UKICAgICB0byBkZXRlY3Qg
aHVuZyB0ZXN0IHRocmVhZHMuCkBAIC0xNDQsMjAgKzc4LDYgQEAgZGVmIF9zaG91bGRfZmV0Y2hf
ZXhwZWN0ZWRfY2hlY2tzdW0ob3B0aW9ucyk6CiAgICAgcmV0dXJuIG9wdGlvbnMucGl4ZWxfdGVz
dHMgYW5kIG5vdCAob3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igb3B0aW9ucy5yZXNldF9yZXN1bHRz
KQogCiAKLWRlZiBfcnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRl
c3RfdHlwZXMsIHRlc3RfYXJncywgZHJpdmVyLCB3b3JrZXJfbmFtZSk6Ci0gICAgIyBGSVhNRTog
UHVsbCB0aGlzIGludG8gVGVzdFNoZWxsVGhyZWFkLl9ydW4oKS4KLQotICAgICMgVGhlIGltYWdl
IGhhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQotICAgICMg
Y2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYg
d2UKLSAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4g
aW1hZ2UgZnJvbSBhCi0gICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUg
YmFzZWxpbmUuIiIiCi0gICAgaWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShvcHRp
b25zKToKLSAgICAgICAgdGVzdF9pbnB1dC5pbWFnZV9oYXNoID0gcG9ydC5leHBlY3RlZF9jaGVj
a3N1bSh0ZXN0X2lucHV0LmZpbGVuYW1lKQotICAgIHRlc3Rfb3V0cHV0ID0gZHJpdmVyLnJ1bl90
ZXN0KHRlc3RfaW5wdXQpCi0gICAgcmV0dXJuIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25z
LCB0ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0X291dHB1dCwgd29ya2VyX25hbWUpCi0KLQogY2xhc3MgU2luZ2xlVGVzdFRo
cmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3IgcnVubmlu
ZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCiAKQEAgLTE5MywxMCArMTEzLDkgQEAgY2xhc3MgU2lu
Z2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgIyBpbiBjb3ZlcmFnZTog
c2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgogICAgICAg
ICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251
bWJlcikKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5fdGVzdF9y
ZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2lucHV0
LCBzZWxmLl90ZXN0X3R5cGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLCBzZWxmLl9kcml2ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9uYW1lKQorICAgICAgICBzZWxmLl90
ZXN0X3Jlc3VsdCA9IHNpbmdsZV90ZXN0X3J1bm5lci5ydW5fc2luZ2xlX3Rlc3QoCisgICAgICAg
ICAgICBzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLCBzZWxmLl90ZXN0X2lucHV0LCBzZWxmLl9k
cml2ZXIsCisgICAgICAgICAgICBzZWxmLl9uYW1lLCBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90
ZXN0X2FyZ3MpCiAgICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkKIAogICAgIGRlZiBnZXRfdGVz
dF9yZXN1bHQoc2VsZik6CkBAIC01MTQsOSArNDMzLDkgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vjb25k
c190b19zZWNvbmRzKAogICAgICAgICAgICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50
aW1lb3V0KSkpCiAgICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhy
ZWFkX3RpbWVvdXQKLSAgICAgICAgdGVzdF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYu
X3BvcnQsIHNlbGYuX29wdGlvbnMsIHRlc3RfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIsIHNlbGYuX25h
bWUpCisgICAgICAgIHRlc3RfcmVzdWx0ID0gc2luZ2xlX3Rlc3RfcnVubmVyLnJ1bl9zaW5nbGVf
dGVzdCgKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHRlc3RfaW5wdXQs
IHNlbGYuX2RyaXZlciwgc2VsZi5fbmFtZSwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMs
IHNlbGYuX3Rlc3RfYXJncykKICAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzLmFwcGVuZCh0ZXN0
X3Jlc3VsdCkKICAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0
X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2IyNmMwOGZhNWIxZGFj
ZDU5NTM4MTc0N2JjYzg2YzhlNGNjNGQyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVy
LnB5CkBAIC0wLDAgKzEsMTQxIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LmJhc2UgaW1wb3J0IERyaXZlcklucHV0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0LmJhc2UgaW1wb3J0IERyaXZlck91dHB1dAorCitpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJv
bSB0ZXN0X3Jlc3VsdHMgaW1wb3J0IFRlc3RSZXN1bHQKKworCitfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCisKKworZGVmIHJ1bl9zaW5nbGVfdGVzdChwb3J0LCBvcHRpb25zLCB0
ZXN0X2lucHV0LCBkcml2ZXIsIHdvcmtlcl9uYW1lLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpOgor
ICAgICMgRklYTUU6IFB1bGwgdGhpcyBpbnRvIFRlc3RTaGVsbFRocmVhZC5fcnVuKCkuCisgICAg
cnVubmVyID0gU2luZ2xlVGVzdFJ1bm5lcihvcHRpb25zLCBwb3J0LCBkcml2ZXIsIHRlc3RfaW5w
dXQsIHdvcmtlcl9uYW1lLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpCisgICAgcmV0dXJuIHJ1bm5l
ci5ydW4oKQorCisKK2NsYXNzIEV4cGVjdGVkRHJpdmVyT3V0cHV0OgorICAgICIiIkdyb3VwcyBp
bmZvcm1hdGlvbiBhYm91dCBhbiBleHBlY3RlZCBkcml2ZXIgb3V0cHV0LiIiIgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB0ZXh0LCBpbWFnZSwgaW1hZ2VfaGFzaCk6CisgICAgICAgIHNlbGYudGV4
dCA9IHRleHQKKyAgICAgICAgc2VsZi5pbWFnZSA9IGltYWdlCisgICAgICAgIHNlbGYuaW1hZ2Vf
aGFzaCA9IGltYWdlX2hhc2gKKworCitjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHBvcnQsIGRyaXZlciwgdGVzdF9pbnB1dCwgd29ya2Vy
X25hbWUsIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2RyaXZlciA9
IGRyaXZlcgorICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHRlc3RfaW5wdXQuZmlsZW5hbWUKKyAg
ICAgICAgc2VsZi5fdGltZW91dCA9IHRlc3RfaW5wdXQudGltZW91dAorICAgICAgICBzZWxmLl93
b3JrZXJfbmFtZSA9IHdvcmtlcl9uYW1lCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0
X3R5cGVzCisgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncworICAgICAgICBzZWxm
Ll90ZXN0bmFtZSA9IHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVu
YW1lKQorCisgICAgZGVmIF9leHBlY3RlZF9kcml2ZXJfb3V0cHV0KHNlbGYpOgorICAgICAgICBy
ZXR1cm4gRXhwZWN0ZWREcml2ZXJPdXRwdXQoc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHNlbGYu
X2ZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cnQuZXhwZWN0ZWRfaW1hZ2Uoc2VsZi5fZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShzZWxmLl9maWxlbmFt
ZSkpCisKKyAgICBkZWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIChzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZAorICAgICAgICAgICAg
ICAgIG5vdCAoc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNl
dF9yZXN1bHRzKSkKKworICAgIGRlZiBfZHJpdmVyX2lucHV0KHNlbGYpOgorICAgICAgICAjIFRo
ZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUK
KyAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFu
ayB2YWx1ZSBpZiB3ZQorICAgICAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAg
KE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCisgICAgICAgICMgcHJldmlvdXMgcnVuIHdpbGwg
YmUgY29waWVkIGludG8gdGhlIGJhc2VsaW5lLiIiIgorICAgICAgICBpbWFnZV9oYXNoID0gTm9u
ZQorICAgICAgICBpZiBzZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oKToKKyAg
ICAgICAgICAgIGltYWdlX2hhc2ggPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHNlbGYu
X2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gRHJpdmVySW5wdXQoc2VsZi5fZmlsZW5hbWUsIHNl
bGYuX3RpbWVvdXQsIGltYWdlX2hhc2gpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBk
cml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgp
KQorICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vzc19vdXRwdXQoZHJpdmVyX291dHB1dCkKKwor
ICAgIGRlZiBfcHJvY2Vzc19vdXRwdXQoc2VsZiwgZHJpdmVyX291dHB1dCk6CisgICAgICAgICIi
IlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHN1Ympl
Y3RzIGl0IHRvIGEKKyAgICAgICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBhIGxpc3Qg
b2YgZmFpbHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICBkcml2ZXJfb3V0cHV0OiBhIERyaXZlck91dHB1dCBvYmplY3QgY29udGFpbmluZyB0aGUg
b3V0cHV0IGZyb20gdGhlIGRyaXZlcgorCisgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBv
YmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgZnMgPSBz
ZWxmLl9wb3J0Ll9maWxlc3lzdGVtCisKKyAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoK
KyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgp
KQorICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQorCisgICAgICAgIGlmIGRy
aXZlcl9vdXRwdXQuY3Jhc2g6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNl
IGZvciAlczpcbiVzIiAlIChzZWxmLl93b3JrZXJfbmFtZSwgc2VsZi5fdGVzdG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJf
b3V0cHV0LmVycm9yKSkKKyAgICAgICAgICAgIHN0YWNrX2ZpbGVuYW1lID0gZnMuam9pbihzZWxm
Ll9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCBzZWxmLl90ZXN0bmFtZSkKKyAgICAgICAgICAg
IHN0YWNrX2ZpbGVuYW1lID0gZnMuc3BsaXRleHQoc3RhY2tfZmlsZW5hbWUpWzBdICsgIi1zdGFj
ay50eHQiCisgICAgICAgICAgICBmcy5tYXliZV9tYWtlX2RpcmVjdG9yeShmcy5kaXJuYW1lKHN0
YWNrX2ZpbGVuYW1lKSkKKyAgICAgICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShzdGFja19maWxl
bmFtZSwgZHJpdmVyX291dHB1dC5lcnJvcikKKyAgICAgICAgZWxpZiBkcml2ZXJfb3V0cHV0LmVy
cm9yOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgb3V0cHV0IHN0ZGVyciBsaW5lczpc
biVzIiAlIChzZWxmLl93b3JrZXJfbmFtZSwgc2VsZi5fdGVzdG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl9vdXRw
dXQuZXJyb3IpKQorCisgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQgPSBzZWxmLl9leHBl
Y3RlZF9kcml2ZXJfb3V0cHV0KCkKKworICAgICAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNh
dmUgdGhlIHJlc3VsdHMuCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICB0aW1lX2Zvcl9kaWZmcyA9IHt9CisgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gc2VsZi5fdGVz
dF90eXBlczoKKyAgICAgICAgICAgIHN0YXJ0X2RpZmZfdGltZSA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQoc2VsZi5fcG9y
dCwgc2VsZi5fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLCBkcml2ZXJfb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZl
cl9vdXRwdXQpCisgICAgICAgICAgICAjIERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3
ZSBhbHJlYWR5IGhhdmUgYSBjcmFzaCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAgICMgZG91Ymxl
LXJlcG9ydCB0aG9zZSB0ZXN0cy4gV2UgZG8gZG91YmxlLXJlcG9ydCBmb3IgdGltZW91dHMgc2lu
Y2UKKyAgICAgICAgICAgICMgd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdl
IG91dHB1dC4KKyAgICAgICAgICAgIGlmIG5vdCBkcml2ZXJfb3V0cHV0LmNyYXNoOgorICAgICAg
ICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCisgICAgICAgICAgICB0aW1l
X2Zvcl9kaWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKKyAgICAgICAgICAg
ICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZSkKKworICAgICAgICB0b3RhbF90aW1l
X2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQorICAgICAgICBy
ZXR1cm4gVGVzdFJlc3VsdChzZWxmLl9maWxlbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQu
dGVzdF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxf
ZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9pbnB1dC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfaW5wdXQucHkKaW5k
ZXggNGIwMjdjMDRkMjIwZjVlYTk2NGY5OTNmNGEyOGJkM2IwOTQwYzZjMS4uMGFlZDFkZDA5MDRk
NzFiNDFjMmFlNjk4MTIzNWUyYmRlNTZmMzIwZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9pbnB1dC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2lu
cHV0LnB5CkBAIC00MSw3ICs0MSwzIEBAIGNsYXNzIFRlc3RJbnB1dDoKICAgICAgICAgIyBGSVhN
RTogZmlsZW5hbWUgc2hvdWxkIHJlYWxseSBiZSB0ZXN0X25hbWUgYXMgYSByZWxhdGl2ZSBwYXRo
LgogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi50aW1lb3V0
ID0gdGltZW91dAotICAgICAgICAjIFRoZSBpbWFnZV9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9p
bmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKLSAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2guIFRoZSBp
bWFnZV9oYXNoIGlzIHNldCBsYXRlciwgYW5kIG9ubHkgaWYgaXQgaXMgbmVlZGVkCi0gICAgICAg
ICMgZm9yIHRoZSB0ZXN0LgotICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSBOb25lCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90
ZXN0X291dHB1dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3Rfb3V0cHV0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
ODA5YmU2MjVkNWJlOTM2ZTQzMGNlN2MzYjQ2N2UwMDU1YzQ4YTg2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfb3V0cHV0LnB5CisrKyAvZGV2L251bGwKQEAg
LTEsNTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotY2xhc3MgVGVzdE91dHB1dChvYmpl
Y3QpOgotICAgICIiIkdyb3VwcyBpbmZvcm1hdGlvbiBhYm91dCBhIHRlc3Qgb3V0cHV0IGZvciBl
YXN5IHBhc3Npbmcgb2YgZGF0YS4KLQotICAgIFRoaXMgaXMgdXNlZCBub3Qgb25seSBmb3IgYSBh
Y3R1YWwgdGVzdCBvdXRwdXQsIGJ1dCBhbHNvIGZvciBncm91cGluZwotICAgIGV4cGVjdGVkIHRl
c3Qgb3V0cHV0LgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGltYWdl
LCBpbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICBjcmFzaD1Ob25lLCB0ZXN0X3RpbWU9Tm9u
ZSwgdGltZW91dD1Ob25lLCBlcnJvcj1Ob25lKToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBU
ZXN0T3V0cHV0IG9iamVjdC4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRleHQ6IGEgdGV4
dCBvdXRwdXQKLSAgICAgICAgICBpbWFnZTogYW4gaW1hZ2Ugb3V0cHV0Ci0gICAgICAgICAgaW1h
Z2VfaGFzaDogYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hlY2tzdW0gb2YgdGhlIGltYWdlCi0g
ICAgICAgICAgY3Jhc2g6IGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciBj
cmFzaGVkIG9uIHRoZSB0ZXN0Ci0gICAgICAgICAgdGVzdF90aW1lOiBhIHRpbWUgd2hpY2ggdGhl
IHRlc3QgaGFzIHRha2VuCi0gICAgICAgICAgdGltZW91dDogYSBib29sZWFuIGluZGljYXRpbmcg
d2hlaHRlciB0aGUgdGVzdCB0aW1lZCBvdXQKLSAgICAgICAgICBlcnJvcjogYW55IHVuZXhwZWN0
ZWQgb3IgYWRkaXRpb25hbCAob3IgZXJyb3IpIHRleHQgb3V0cHV0Ci0gICAgICAgICIiIgotICAg
ICAgICBzZWxmLnRleHQgPSB0ZXh0Ci0gICAgICAgIHNlbGYuaW1hZ2UgPSBpbWFnZQotICAgICAg
ICBzZWxmLmltYWdlX2hhc2ggPSBpbWFnZV9oYXNoCi0gICAgICAgIHNlbGYuY3Jhc2ggPSBjcmFz
aAotICAgICAgICBzZWxmLnRlc3RfdGltZSA9IHRlc3RfdGltZQotICAgICAgICBzZWxmLnRpbWVv
dXQgPSB0aW1lb3V0Ci0gICAgICAgIHNlbGYuZXJyb3IgPSBlcnJvcgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IDZlNWZhYmMwZDRm
MzY0YTNkNWEzN2IyZmM4ZTFlZWEwMWJjNDcyZWYuLmYwZjJjNzk0Nzk5N2QzMTQ4MDZiMDdjNWU1
ZTIwNzgxN2QxY2U5OGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTgxMCw2ICs4MTAsNDggQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtKQogCiAKK2Ns
YXNzIERyaXZlcklucHV0KG9iamVjdCk6CisgICAgIiIiSG9sZHMgdGhlIGlucHV0IHBhcmFtZXRl
cnMgZm9yIGEgZHJpdmVyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0
aW1lb3V0LCBpbWFnZV9oYXNoKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBEcml2ZXJJbnB1
dCBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogRnVsbCBwYXRo
IHRvIHRoZSB0ZXN0LgorICAgICAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgaW4gbXNlY3MgdGhlIGRy
aXZlciBzaG91bGQgdXNlIHdoaWxlIHJ1bm5pbmcgdGhlIHRlc3QKKyAgICAgICAgICBpbWFnZV9o
YXNoOiBBIGltYWdlIGNoZWNrc3VtIHdoaWNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1h
Z2UgZHVtcCBpZgorICAgICAgICAgICAgICAgICAgICAgdGhlIGNoZWNrc3VtcyBtYXRjaC4KKyAg
ICAgICAgIiIiCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxm
LnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuaW1hZ2VfaGFzaCA9IGltYWdlX2hhc2gK
KworCitjbGFzcyBEcml2ZXJPdXRwdXQob2JqZWN0KToKKyAgICAiIiJHcm91cHMgaW5mb3JtYXRp
b24gYWJvdXQgYSBvdXRwdXQgZnJvbSBkcml2ZXIgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRhLiIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGltYWdlLCBpbWFnZV9oYXNoLAorICAg
ICAgICAgICAgICAgICBjcmFzaD1Ob25lLCB0ZXN0X3RpbWU9Tm9uZSwgdGltZW91dD1Ob25lLCBl
cnJvcj1Ob25lKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBUZXN0T3V0cHV0IG9iamVjdC4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIHRleHQ6IGEgdGV4dCBvdXRwdXQKKyAgICAgICAg
ICBpbWFnZTogYW4gaW1hZ2Ugb3V0cHV0CisgICAgICAgICAgaW1hZ2VfaGFzaDogYSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgY2hlY2tzdW0gb2YgdGhlIGltYWdlCisgICAgICAgICAgY3Jhc2g6IGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciBjcmFzaGVkIG9uIHRoZSB0ZXN0
CisgICAgICAgICAgdGVzdF90aW1lOiBhIHRpbWUgd2hpY2ggdGhlIHRlc3QgaGFzIHRha2VuCisg
ICAgICAgICAgdGltZW91dDogYSBib29sZWFuIGluZGljYXRpbmcgd2hlaHRlciB0aGUgdGVzdCB0
aW1lZCBvdXQKKyAgICAgICAgICBlcnJvcjogYW55IHVuZXhwZWN0ZWQgb3IgYWRkaXRpb25hbCAo
b3IgZXJyb3IpIHRleHQgb3V0cHV0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLnRleHQgPSB0
ZXh0CisgICAgICAgIHNlbGYuaW1hZ2UgPSBpbWFnZQorICAgICAgICBzZWxmLmltYWdlX2hhc2gg
PSBpbWFnZV9oYXNoCisgICAgICAgIHNlbGYuY3Jhc2ggPSBjcmFzaAorICAgICAgICBzZWxmLnRl
c3RfdGltZSA9IHRlc3RfdGltZQorICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAg
ICAgIHNlbGYuZXJyb3IgPSBlcnJvcgorCisKIGNsYXNzIERyaXZlcjoKICAgICAiIiJBYnN0cmFj
dCBpbnRlcmZhY2UgZm9yIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCiAKQEAgLTgy
NCw3ICs4NjYsNyBAQCBjbGFzcyBEcml2ZXI6CiAgICAgICAgICIiIgogICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCdEcml2ZXIuX19pbml0X18nKQogCi0gICAgZGVmIHJ1bl90ZXN0
KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQp
OgogICAgICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBhbmQgcmV0dXJuIHRoZSByZXN1bHRzLgog
CiAgICAgICAgIE5vdGUgdGhhdCBpdCBpcyBva2F5IGlmIGEgdGVzdCB0aW1lcyBvdXQgb3IgY3Jh
c2hlcyBhbmQgbGVhdmVzCkBAIC04MzIsOSArODc0LDkgQEAgY2xhc3MgRHJpdmVyOgogICAgICAg
ICBhcmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFuZCBlbnN1cmluZyB0aGluZ3MgYXJl
IG9rYXkuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB0ZXN0X2lucHV0OiBhIFRlc3RJbnB1
dCBvYmplY3QKKyAgICAgICAgICBkcml2ZXJfaW5wdXQ6IGEgRHJpdmVySW5wdXQgb2JqZWN0CiAK
LSAgICAgICAgUmV0dXJucyBhIFRlc3RPdXRwdXQgb2JqZWN0LgorICAgICAgICBSZXR1cm5zIGEg
RHJpdmVyT3V0cHV0IG9iamVjdC4KICAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoJ0RyaXZlci5ydW5fdGVzdCcpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGFkMWJlYTY1ODg4
MTlhMWQ1ZDczZDdhN2FlNTM3YzM0NWM5NjRjZGIuLmFkMjE1YmE5MzlmN2M4MTgxNTIxMGQ0Yjli
NGE2MTVmMTEyZjk4MDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpAQCAtNDEsNyArNDEsNiBAQCBpbXBvcnQgd2ViYnJv
d3NlcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBjeWdwYXRoCiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X291dHB1
dAogCiBpbXBvcnQgYmFzZQogaW1wb3J0IGh0dHBfc2VydmVyCkBAIC00NjUsNyArNDY0LDcgQEAg
Y2xhc3MgQ2hyb21pdW1Ecml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAgICAgICAgICAgICAgICBy
YWlzZSBlCiAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXRfaW1hZ2UoKQogCi0gICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJf
aW5wdXQpOgogICAgICAgICBvdXRwdXQgPSBbXQogICAgICAgICBlcnJvciA9IFtdCiAgICAgICAg
IGNyYXNoID0gRmFsc2UKQEAgLTQ3NSw5ICs0NzQsOSBAQCBjbGFzcyBDaHJvbWl1bURyaXZlcihi
YXNlLkRyaXZlcik6CiAKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAKLSAgICAg
ICAgdXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkK
LSAgICAgICAgY21kID0gc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5kKHVyaSwgdGVzdF9pbnB1dC50
aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1
dC5pbWFnZV9oYXNoKQorICAgICAgICB1cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaShk
cml2ZXJfaW5wdXQuZmlsZW5hbWUpCisgICAgICAgIGNtZCA9IHNlbGYuX3Rlc3Rfc2hlbGxfY29t
bWFuZCh1cmksIGRyaXZlcl9pbnB1dC50aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gpCiAgICAgICAgIChsaW5lLCBj
cmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoaW5wdXQ9Y21kKQogCiAg
ICAgICAgIHdoaWxlIG5vdCBjcmFzaCBhbmQgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6CkBAIC01
MTksNyArNTE4LDcgQEAgY2xhc3MgQ2hyb21pdW1Ecml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAg
ICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZShp
bnB1dD1Ob25lKQogCiAgICAgICAgIHJ1bl90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1l
Ci0gICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KAorICAgICAgICByZXR1cm4g
YmFzZS5Ecml2ZXJPdXRwdXQoCiAgICAgICAgICAgICAnJy5qb2luKG91dHB1dCksIHNlbGYuX291
dHB1dF9pbWFnZV93aXRoX3JldHJ5KCksIGFjdHVhbF9jaGVja3N1bSwKICAgICAgICAgICAgIGNy
YXNoLCBydW5fdGltZSwgdGltZW91dCwgJycuam9pbihlcnJvcikpCiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKaW5kZXggNGVkMzRl
NjQ4OGVmMjg0NzUwYzY5ZmQwNTRkMDMxMDBiZWVkNWI2Zi4uZWY3YWZhMzE2ZTczY2RhYjcxYTEx
OTBjY2Q3MTI2NzFjNWM1NzhkMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKQEAgLTUwLDggKzUwLDYgQEAgaW1wb3J0IG9zCiBp
bXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9vdXRwdXQKLQogaW1wb3J0IGJhc2UKIGltcG9ydCBmYWN0
b3J5CiAKQEAgLTExMiwxOCArMTEwLDE4IEBAIGNsYXNzIERyeXJ1bkRyaXZlcihiYXNlLkRyaXZl
cik6CiAgICAgZGVmIHBvbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBkZWYg
cnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZl
cl9pbnB1dCk6CiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICB0ZXh0
X291dHB1dCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dCh0ZXN0X2lucHV0LmZpbGVuYW1lKQor
ICAgICAgICB0ZXh0X291dHB1dCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChkcml2ZXJfaW5w
dXQuZmlsZW5hbWUpCiAKLSAgICAgICAgaWYgdGVzdF9pbnB1dC5pbWFnZV9oYXNoIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3Rf
aW5wdXQuZmlsZW5hbWUpCi0gICAgICAgICAgICBoYXNoID0gc2VsZi5fcG9ydC5leHBlY3RlZF9j
aGVja3N1bSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1h
Z2VfaGFzaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGltYWdlID0gc2VsZi5fcG9ydC5leHBl
Y3RlZF9pbWFnZShkcml2ZXJfaW5wdXQuZmlsZW5hbWUpCisgICAgICAgICAgICBoYXNoID0gc2Vs
Zi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShkcml2ZXJfaW5wdXQuZmlsZW5hbWUpCiAgICAgICAg
IGVsc2U6CiAgICAgICAgICAgICBpbWFnZSA9IE5vbmUKICAgICAgICAgICAgIGhhc2ggPSBOb25l
Ci0gICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KHRleHRfb3V0cHV0LCBpbWFn
ZSwgaGFzaCwgRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWUudGltZSgpIC0gc3RhcnRfdGltZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHJldHVybiBiYXNl
LkRyaXZlck91dHB1dCh0ZXh0X291dHB1dCwgaW1hZ2UsIGhhc2gsIEZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF90aW1lLCBGYWxzZSwg
Tm9uZSkKIAogICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDVkZjVjMmQ5
ZDYyMTliZjk0Njk0OTZmMjU3NGU2M2MxODExMmFkZTQuLjc5NmY1NTUzYjMzYjA5MjY4NThkNzVl
NDVhOTRjYmFiZjJjZDBlN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTM0LDggKzM0LDYgQEAgaW1wb3J0IHRpbWUKIAogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtX21vY2sKIAotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rfb3V0cHV0Ci0K
IGltcG9ydCBiYXNlCiAKIApAQCAtMzAyLDEwICszMDAsMTAgQEAgY2xhc3MgVGVzdERyaXZlcihi
YXNlLkRyaXZlcik6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdleGNlcHRpb24gZnJv
bSAnICsgdGVzdF9uYW1lKQogICAgICAgICBpZiB0ZXN0Lmhhbmc6CiAgICAgICAgICAgICB0aW1l
LnNsZWVwKChmbG9hdCh0ZXN0X2lucHV0LnRpbWVvdXQpICogNCkgLyAxMDAwLjApCi0gICAgICAg
IHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KHRlc3QuYWN0dWFsX3RleHQsIHRlc3QuYWN0
dWFsX2ltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LmFj
dHVhbF9jaGVja3N1bSwgdGVzdC5jcmFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF90aW1lLCB0ZXN0LnRpbWVvdXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QuZXJyb3IpCisgICAgICAgIHJldHVy
biBiYXNlLkRyaXZlck91dHB1dCh0ZXN0LmFjdHVhbF90ZXh0LCB0ZXN0LmFjdHVhbF9pbWFnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QuYWN0dWFsX2NoZWNrc3VtLCB0
ZXN0LmNyYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkg
LSBzdGFydF90aW1lLCB0ZXN0LnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0LmVycm9yKQogCiAgICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgICBwYXNzCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5
CmluZGV4IDQ3NjU1NWM1YTI5YzA5OWIwMmNhZjRiY2E0Y2Q4Mzk3OWRjZDc4MzcuLjBkMjAwNDc3
NjNhZDlkMDRiZjhkNjNmNTVkOTg5ZDU2MTQzNDRhODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBAIC00MSw3ICs0MSw2IEBA
IGltcG9ydCB0aW1lCiBpbXBvcnQgd2ViYnJvd3NlcgogCiBpbXBvcnQgd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5vc3BhdGggYXMgb3NwYXRoCi1pbXBvcnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlLnRlc3Rfb3V0cHV0IGFzIHRlc3Rfb3V0cHV0CiBpbXBvcnQgd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQuYmFzZSBhcyBiYXNlCiBpbXBvcnQgd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQuc2VydmVyX3Byb2Nlc3MgYXMgc2VydmVyX3Byb2Nlc3MKIApAQCAtNDEwLDE1ICs0
MDksMTUgQEAgY2xhc3MgV2ViS2l0RHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgcmV0dXJu
CiAKICAgICAjIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGh1Z2UuCi0gICAgZGVmIHJ1bl90ZXN0
KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICB1cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3Rv
X3VyaSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJf
aW5wdXQpOgorICAgICAgICB1cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaShkcml2ZXJf
aW5wdXQuZmlsZW5hbWUpCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8vLyIpOgog
ICAgICAgICAgICAgY29tbWFuZCA9IHVyaVs3Ol0KICAgICAgICAgZWxzZToKICAgICAgICAgICAg
IGNvbW1hbmQgPSB1cmkKIAotICAgICAgICBpZiB0ZXN0X2lucHV0LmltYWdlX2hhc2g6Ci0gICAg
ICAgICAgICBjb21tYW5kICs9ICInIiArIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaAorICAgICAgICBp
ZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsg
ZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKICAgICAgICAgY29tbWFuZCArPSAiXG4iCiAKICAgICAg
ICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBAIC00MjksNyArNDI4LDcgQEAgY2xhc3MgV2Vi
S2l0RHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgb3V0cHV0ID0gc3RyKCkgICMgVXNlIGEg
Ynl0ZSBhcnJheSBmb3Igb3V0cHV0LCBldmVuIHRob3VnaCBpdCBzaG91bGQgYmUgVVRGLTguCiAg
ICAgICAgIGltYWdlID0gc3RyKCkKIAotICAgICAgICB0aW1lb3V0ID0gaW50KHRlc3RfaW5wdXQu
dGltZW91dCkgLyAxMDAwLjAKKyAgICAgICAgdGltZW91dCA9IGludChkcml2ZXJfaW5wdXQudGlt
ZW91dCkgLyAxMDAwLjAKICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQK
ICAgICAgICAgbGluZSA9IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnJlYWRfbGluZSh0aW1lb3V0KQog
ICAgICAgICB3aGlsZSAobm90IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnRpbWVkX291dApAQCAtNDc2
LDExICs0NzUsMTEgQEAgY2xhc3MgV2ViS2l0RHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAg
IyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBzZWN0aW9uIG9mIGNvZGUgdG8gYmUg
ZG9pbmcKICAgICAgICAgIyB0aGlzIHJlc2V0IGluLgogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzcy5lcnJvciA9ICIiCi0gICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KG91
dHB1dCwgaW1hZ2UsIGFjdHVhbF9pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5jcmFzaGVkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnRp
bWVkX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpCisg
ICAgICAgIHJldHVybiBiYXNlLkRyaXZlck91dHB1dChvdXRwdXQsIGltYWdlLCBhY3R1YWxfaW1h
Z2VfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9w
cm9jZXNzLmNyYXNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnRp
bWUoKSAtIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9zZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcikKIAogICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9zZXJ2
ZXJfcHJvY2VzczoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQppbmRleCA0NDYwNWQyZWU4MWI3YjA0
MjE0MTVkMWFjYmQyMjc0ZTVhZTBhODdiLi4zNDk0ZTIxNjBlMTEzOWM2NGU5ZjllZDg3ZmRhYTFh
YWM3MWM3Y2UwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC04NSw1NCArODUsNTQgQEAg
Y2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9D
T01QQVJFKQogICAgICAgICByZXR1cm4gcG9ydC5kaWZmX2ltYWdlKGFjdHVhbF9pbWFnZSwgZXhw
ZWN0ZWRfaW1hZ2UsIGRpZmZfZmlsZW5hbWUpCiAKLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2Vs
ZiwgcG9ydCwgZmlsZW5hbWUsIHRlc3RfYXJncywgYWN0dWFsX3Rlc3Rfb3V0cHV0LAotICAgICAg
ICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCk6CisgICAgZGVmIGNvbXBhcmVf
b3V0cHV0KHNlbGYsIHBvcnQsIGZpbGVuYW1lLCB0ZXN0X2FyZ3MsIGFjdHVhbF9kcml2ZXJfb3V0
cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0KToKICAg
ICAgICAgIiIiSW1wbGVtZW50YXRpb24gb2YgQ29tcGFyZU91dHB1dCB0aGF0IGNoZWNrcyB0aGUg
b3V0cHV0IGltYWdlIGFuZAogICAgICAgICBjaGVja3N1bSBhZ2FpbnN0IHRoZSBleHBlY3RlZCBm
aWxlcyBmcm9tIHRoZSBMYXlvdXRUZXN0IGRpcmVjdG9yeS4KICAgICAgICAgIiIiCiAgICAgICAg
IGZhaWx1cmVzID0gW10KIAogICAgICAgICAjIElmIHdlIGRpZG4ndCBwcm9kdWNlIGEgaGFzaCBm
aWxlLCB0aGlzIHRlc3QgbXVzdCBiZSB0ZXh0LW9ubHkuCi0gICAgICAgIGlmIGFjdHVhbF90ZXN0
X291dHB1dC5pbWFnZV9oYXNoIGlzIE5vbmU6CisgICAgICAgIGlmIGFjdHVhbF9kcml2ZXJfb3V0
cHV0LmltYWdlX2hhc2ggaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwogCiAg
ICAgICAgICMgSWYgd2UncmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZSwgd2UgcGFzcy4KICAg
ICAgICAgaWYgdGVzdF9hcmdzLm5ld19iYXNlbGluZSBvciB0ZXN0X2FyZ3MucmVzZXRfcmVzdWx0
czoKLSAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZmlsZXMoZmlsZW5hbWUsIGFjdHVh
bF90ZXN0X291dHB1dC5pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWN0dWFsX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2gsCisgICAgICAgICAgICBzZWxmLl9zYXZl
X2Jhc2VsaW5lX2ZpbGVzKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2RyaXZlcl9vdXRwdXQu
aW1hZ2VfaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9h
cmdzLm5ld19iYXNlbGluZSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwogCi0gICAgICAg
IGlmIG5vdCBleHBlY3RlZF90ZXN0X291dHB1dC5pbWFnZToKKyAgICAgICAgaWYgbm90IGV4cGVj
dGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2U6CiAgICAgICAgICAgICAjIFJlcG9ydCBhIG1pc3Npbmcg
ZXhwZWN0ZWQgUE5HIGZpbGUuCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdlKGZpbGVuYW1l
LCBhY3R1YWxfdGVzdF9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCi0gICAgICAg
ICAgICBzZWxmLl9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUsIGFjdHVhbF90ZXN0X291dHB1dC5p
bWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Rl
c3Rfb3V0cHV0LmltYWdlX2hhc2gpCisgICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdlKGZpbGVu
YW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZSwgZXhwZWN0ZWRfaW1hZ2U9Tm9uZSkKKyAg
ICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2VfaGFzaChmaWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9v
dXRwdXQuaW1hZ2VfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gpCiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFpbHVyZXMKLSAgICAgICAgaWYgbm90IGV4cGVjdGVkX3Rlc3Rfb3V0cHV0LmltYWdlX2hh
c2g6CisgICAgICAgIGlmIG5vdCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlX2hhc2g6CiAg
ICAgICAgICAgICAjIFJlcG9ydCBhIG1pc3NpbmcgZXhwZWN0ZWQgY2hlY2tzdW0gZmlsZS4KLSAg
ICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2UoZmlsZW5hbWUsIGFjdHVhbF90ZXN0X291dHB1dC5p
bWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQu
aW1hZ2UpCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUsIGFjdHVh
bF90ZXN0X291dHB1dC5pbWFnZV9oYXNoLAorICAgICAgICAgICAgc2VsZi5fY29weV9pbWFnZShm
aWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1hZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2UpCisgICAgICAgICAgICBzZWxm
Ll9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUsIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlX2hh
c2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaW1hZ2VfaGFz
aD1Ob25lKQogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVy
ZU1pc3NpbmdJbWFnZUhhc2goKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwogCi0gICAg
ICAgIGlmIGFjdHVhbF90ZXN0X291dHB1dC5pbWFnZV9oYXNoID09IGV4cGVjdGVkX3Rlc3Rfb3V0
cHV0LmltYWdlX2hhc2g6CisgICAgICAgIGlmIGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlX2hh
c2ggPT0gZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoOgogICAgICAgICAgICAgIyBI
YXNoIG1hdGNoZWQgKG5vIGRpZmYgbmVlZGVkLCBva2F5IHRvIHJldHVybikuCiAgICAgICAgICAg
ICByZXR1cm4gZmFpbHVyZXMKIAotICAgICAgICBzZWxmLl9jb3B5X2ltYWdlKGZpbGVuYW1lLCBh
Y3R1YWxfdGVzdF9vdXRwdXQuaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0
ZWRfdGVzdF9vdXRwdXQuaW1hZ2UpCi0gICAgICAgIHNlbGYuX2NvcHlfaW1hZ2VfaGFzaChmaWxl
bmFtZSwgYWN0dWFsX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2gsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dC5pbWFnZV9oYXNoKQorICAgICAgICBzZWxm
Ll9jb3B5X2ltYWdlKGZpbGVuYW1lLCBhY3R1YWxfZHJpdmVyX291dHB1dC5pbWFnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmltYWdlKQorICAgICAg
ICBzZWxmLl9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUsIGFjdHVhbF9kcml2ZXJfb3V0cHV0Lmlt
YWdlX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kcml2ZXJf
b3V0cHV0LmltYWdlX2hhc2gpCiAKICAgICAgICAgIyBFdmVuIHRob3VnaCB3ZSBvbmx5IHVzZSB0
aGUgcmVzdWx0IGluIG9uZSBjb2RlcGF0aCBiZWxvdyBidXQgd2UKICAgICAgICAgIyBzdGlsbCBu
ZWVkIHRvIGNhbGwgQ3JlYXRlSW1hZ2VEaWZmIGZvciBvdGhlciBjb2RlcGF0aHMuCiAgICAgICAg
IGltYWdlc19hcmVfZGlmZmVyZW50ID0gc2VsZi5fY3JlYXRlX2RpZmZfaW1hZ2UocG9ydCwgZmls
ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWN0dWFsX3Rlc3Rfb3V0cHV0LmltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0LmltYWdl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFjdHVhbF9kcml2ZXJfb3V0cHV0LmltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuaW1hZ2Up
CiAgICAgICAgIGlmIG5vdCBpbWFnZXNfYXJlX2RpZmZlcmVudDoKICAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QoKSkKICAg
ICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5CmluZGV4IGFkNjUwMTZl
ZjI1NDQzNWU1NGRjYTE5YTI2Y2VmMTYwOTEyMGZlOTAuLjMzYWRhNWIzYjkyODdjNDk0MTRlNTYy
YWMyMTk4YWQwZmJjOWEzNjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weQpAQCAt
MTM5LDggKzEzOSw4IEBAIGNsYXNzIFRlc3RUeXBlQmFzZShvYmplY3QpOgogICAgICAgICAgICAg
c2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKICAgICAgICAgcmV0
dXJuIGZzLnNwbGl0ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgogCi0gICAgZGVm
IGNvbXBhcmVfb3V0cHV0KHNlbGYsIHBvcnQsIGZpbGVuYW1lLCB0ZXN0X2FyZ3MsIGFjdHVhbF90
ZXN0X291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0
KToKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIHRlc3RfYXJn
cywgYWN0dWFsX2RyaXZlcl9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZF9kcml2ZXJfb3V0cHV0KToKICAgICAgICAgIiIiTWV0aG9kIHRoYXQgY29tcGFyZXMgdGhlIG91
dHB1dCBmcm9tIHRoZSB0ZXN0IHdpdGggdGhlCiAgICAgICAgIGV4cGVjdGVkIHZhbHVlLgogCkBA
IC0xNTEsMTAgKzE1MSwxMCBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAg
ICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCiAgICAgICAgICAgdGVz
dF9hcmdzOiBhIFRlc3RBcmd1bWVudHMgb2JqZWN0IGhvbGRpbmcgb3B0aW9uYWwgYWRkaXRpb25h
bAogICAgICAgICAgICAgICBhcmd1bWVudHMKLSAgICAgICAgICBhY3R1YWxfdGVzdF9vdXRwdXQ6
IGEgVGVzdE91dHB1dCBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhY3R1YWwgdGVzdAorICAgICAg
ICAgIGFjdHVhbF9kcml2ZXJfb3V0cHV0OiBhIERyaXZlck91dHB1dCBvYmplY3Qgd2hpY2ggcmVw
cmVzZW50cyBhY3R1YWwgdGVzdAogICAgICAgICAgICAgICBvdXRwdXQKLSAgICAgICAgICBleHBl
Y3RlZF90ZXN0X291dHB1dDogYSBUZXN0T3V0cHV0IG9iamVjdCB3aGljaCByZXByZXNlbnRzIGEg
ZXhwZWN0ZWQKLSAgICAgICAgICAgICAgdGVzdCBvdXRwdXQKKyAgICAgICAgICBleHBlY3RlZF9k
cml2ZXJfb3V0cHV0OiBhIEV4cGVjdGVkRHJpdmVyT3V0cHV0IG9iamVjdCB3aGljaCByZXByZXNl
bnRzIGEKKyAgICAgICAgICAgICAgZXhwZWN0ZWQgdGVzdCBvdXRwdXQKIAogICAgICAgICBSZXR1
cm46CiAgICAgICAgICAgYSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMsIGVtcHR5IGlmIHRo
ZSB0ZXN0IHBhc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQppbmRleCA3YjdmZWJlMDViYjcxMzBj
MmExN2M5OWJhZTBmZmNkNmQ4NDM5YTk2Li43Mjk3NjY2NTA4NjU2MzUxZDQ1ZWRiNjFjZTg2YWRj
NjQ3ZTRjZjg3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQpAQCAtNTMsOCArNTMsOCBAQCBjbGFz
cyBUZXN0VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAgICAgIyB0
aGUgbm9ybWFsaXplZCB0ZXh0IGV4cGVjdGF0aW9uIGZpbGVzLgogICAgICAgICByZXR1cm4gb3V0
cHV0LnJlcGxhY2UoIlxyXHJcbiIsICJcclxuIikucmVwbGFjZSgiXHJcbiIsICJcbiIpCiAKLSAg
ICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIHRlc3RfYXJncywgYWN0
dWFsX3Rlc3Rfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9v
dXRwdXQpOgorICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBwb3J0LCBmaWxlbmFtZSwgdGVz
dF9hcmdzLCBhY3R1YWxfZHJpdmVyX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdGVkX2RyaXZlcl9vdXRwdXQpOgogICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBDb21w
YXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgdGV4dCBhZ2FpbnN0CiAgICAgICAgIHRo
ZSBleHBlY3RlZCB0ZXh0IGZyb20gdGhlIExheW91dFRlc3QgZGlyZWN0b3J5LiIiIgogICAgICAg
ICBmYWlsdXJlcyA9IFtdCkBAIC02NCwxNSArNjQsMTUgQEAgY2xhc3MgVGVzdFRleHREaWZmKHRl
c3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgICAgICAjIEFsdGhvdWdoIGFsbCB0
ZXN0X3NoZWxsL0R1bXBSZW5kZXJUcmVlIG91dHB1dCBzaG91bGQgYmUgdXRmLTgsCiAgICAgICAg
ICAgICAjIHdlIGRvIG5vdCBldmVyIGRlY29kZSBpdCBpbnNpZGUgcnVuLXdlYmtpdC10ZXN0cy4g
IEZvciBzb21lIHRlc3RzCiAgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIG1heSBub3Qgb3V0
cHV0IHV0Zi04IHRleHQgKGUuZy4gd2ViYXJjaGl2ZXMpLgotICAgICAgICAgICAgc2VsZi5fc2F2
ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBhY3R1YWxfdGVzdF9vdXRwdXQudGV4dCwKKyAgICAg
ICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShmaWxlbmFtZSwgYWN0dWFsX2RyaXZlcl9v
dXRwdXQudGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnR4dCIs
IGVuY29kaW5nPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVfbmV3X2Jhc2VsaW5lPXRlc3RfYXJncy5uZXdfYmFzZWxpbmUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFpbHVyZXMKIAogICAgICAgICAjIE5vcm1hbGl6ZSB0ZXh0IHRvIGRpZmYKLSAgICAg
ICAgYWN0dWFsX3RleHQgPSBzZWxmLl9nZXRfbm9ybWFsaXplZF9vdXRwdXRfdGV4dChhY3R1YWxf
dGVzdF9vdXRwdXQudGV4dCkKKyAgICAgICAgYWN0dWFsX3RleHQgPSBzZWxmLl9nZXRfbm9ybWFs
aXplZF9vdXRwdXRfdGV4dChhY3R1YWxfZHJpdmVyX291dHB1dC50ZXh0KQogICAgICAgICAjIEFz
c3VtaW5nIGV4cGVjdGVkX3RleHQgaXMgYWxyZWFkeSBub3JtYWxpemVkLgotICAgICAgICBleHBl
Y3RlZF90ZXh0ID0gZXhwZWN0ZWRfdGVzdF9vdXRwdXQudGV4dAorICAgICAgICBleHBlY3RlZF90
ZXh0ID0gZXhwZWN0ZWRfZHJpdmVyX291dHB1dC50ZXh0CiAKICAgICAgICAgIyBXcml0ZSBvdXRw
dXQgZmlsZXMgZm9yIG5ldyB0ZXN0cywgdG9vLgogICAgICAgICBpZiBwb3J0LmNvbXBhcmVfdGV4
dChhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6Cg==
</data>
<flag name="review"
          id="71376"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>