<?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>38018</bug_id>
          
          <creation_ts>2010-04-22 17:54:26 -0700</creation_ts>
          <short_desc>new-run-webkit-tests: refactor much of the printing code out of run_webkit_tests.py</short_desc>
          <delta_ts>2010-05-03 18:59:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>evan</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>216193</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-22 17:54:26 -0700</bug_when>
    <thetext>run_webkit_tests.py is large, unwieldy, and hard to understand. We need to split a lot of the logic out into multiple files and clean up our modularity and information hiding. It&apos;s perhaps easiest to start with all of the logging/printing code, as it&apos;s scattered throughout everything and all of the --log/--print options have become hard to follow.

This bug will track that progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216205</commentid>
    <comment_count>1</comment_count>
      <attachid>54117</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-22 18:31:53 -0700</bug_when>
    <thetext>Created attachment 54117
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216210</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-22 18:37:20 -0700</bug_when>
    <thetext>Attachment 54117 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:45:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:73:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:84:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:93:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:119:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:120:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:129:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:355:  too many blank lines (2)  [pep8/E303] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:376:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:167:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:900:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1024:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1607:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1611:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/port/test.py:74:  trailing whitespace  [pep8/W291] [5]
Total errors found: 15 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216212</commentid>
    <comment_count>3</comment_count>
      <attachid>54118</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-22 18:44:59 -0700</bug_when>
    <thetext>Created attachment 54118
clean up style nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216519</commentid>
    <comment_count>4</comment_count>
      <attachid>54183</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-23 12:59:26 -0700</bug_when>
    <thetext>Created attachment 54183
merge in --no-retry-failures patch committed recently</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216556</commentid>
    <comment_count>5</comment_count>
      <attachid>54183</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-04-23 14:15:46 -0700</bug_when>
    <thetext>Comment on attachment 54183
merge in --no-retry-failures patch committed recently

It&apos;s great to move this code out of run-webkit-tests. I didn&apos;t look over the unittest code in detail. Also, I assume with the larger print functions, you&apos;re just copy-pasting the code, right? I didn&apos;t look at those too closely.

WebKitTools/ChangeLog:85
 +          This change also renames --log to --print (to be slightly more
This seems gratuitous to me. 

WebKitTools/ChangeLog:114
 +  :e
ummm...

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:79
 +      - if --trace &apos;everything&apos; is specified, it will override the &apos;-progress&apos;
Why have --trace in addition to print? Why not have print just accept trace-unexepected and trace-everything as options?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:109
 +              help=&quot;(DEPRECATED. same as --print)&quot;),
As I said, I don&apos;t see the benefit of renaming log. If you insist on it, it should use Eric&apos;s new deprecated functionality so it doesn&apos;t show up by default when you --help.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:112
 +              help=(&quot;controls test tracing output of test run. &quot;
More reason I don&apos;t think this should be a separate flage. &quot;test tracing output&quot; can mean anything.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:120
 +          optparse.make_option(&quot;--sources&quot;, action=&quot;store_true&quot;,
I thought we were getting rid of this.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:125
 +          optparse.make_option(&quot;--num-slow-tests-to-log&quot;, default=50,
Can we add a &quot;slowest&quot; value to --print and get rid of this flag? The functionality of being able to specify how many slow tests to log is obviated by having the test results dashboard.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:145
 +      &quot;&quot;&quot;Class handling all non-debug output done by run-webkit-tests.&quot;&quot;&quot;
Can you document these arguments? For example, I don&apos;t know what &quot;regular_output&quot; means. Perhaps a more precise word than &quot;regular&quot;?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:147
 +                   child_processes, is_fully_parallel):
Aren&apos;t child_processes and is_fully_parallel already a part of options?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:173
 +      def _exit_early(self, method):
exit_early is really generic. How about something about printing/logging? _avoids_printing? _should_print?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:421
 +          self._meter.update(&quot;%s&quot; % msg)
Can&apos;t you just use msg directly here?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:144
 +  class Controller(object):
Generally, filenames should match the primary class in the file, no? Also, Controller is super generic. Output actually seems like a better name.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:84
 +      return tr
why create the local variable?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:97
 +  class TestFunctions(unittest.TestCase):
Maybe call this TestUtilityFunctions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216557</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-23 14:24:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 54183 [details])
&gt; It&apos;s great to move this code out of run-webkit-tests. I didn&apos;t look over the
&gt; unittest code in detail. Also, I assume with the larger print functions, you&apos;re
&gt; just copy-pasting the code, right? I didn&apos;t look at those too closely.
&gt; 

Yes, pretty much. adjusted the local variables where necessary.

&gt; WebKitTools/ChangeLog:85
&gt;  +          This change also renames --log to --print (to be slightly more
&gt; This seems gratuitous to me. 

I think --print is more intuitive and helps to separate the concept from debug logging, but I don&apos;t fell strongly about this.

&gt; 
&gt; WebKitTools/ChangeLog:114
&gt;  +  :e
&gt; ummm...

whoops :)

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:79
&gt;  +      - if --trace &apos;everything&apos; is specified, it will override the
&gt; &apos;-progress&apos;
&gt; Why have --trace in addition to print? Why not have print just accept
&gt; trace-unexepected and trace-everything as options?

Yeah, I thought about combining the two flags and wasn&apos;t sure if it was a good idea or not. I can add it back in.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:109
&gt;  +              help=&quot;(DEPRECATED. same as --print)&quot;),
&gt; As I said, I don&apos;t see the benefit of renaming log. If you insist on it, it
&gt; should use Eric&apos;s new deprecated functionality so it doesn&apos;t show up by default
&gt; when you --help.

That functionality doesn&apos;t actually exist yet ;)

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:112
&gt;  +              help=(&quot;controls test tracing output of test run. &quot;
&gt; More reason I don&apos;t think this should be a separate flage. &quot;test tracing
&gt; output&quot; can mean anything.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:120
&gt;  +          optparse.make_option(&quot;--sources&quot;, action=&quot;store_true&quot;,
&gt; I thought we were getting rid of this.
&gt; 

We will, but I didn&apos;t want to do it as part of this patch, just to avoid confusing things further.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:125
&gt;  +          optparse.make_option(&quot;--num-slow-tests-to-log&quot;, default=50,
&gt; Can we add a &quot;slowest&quot; value to --print and get rid of this flag? The
&gt; functionality of being able to specify how many slow tests to log is obviated
&gt; by having the test results dashboard.
&gt; 

Sure.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:145
&gt;  +      &quot;&quot;&quot;Class handling all non-debug output done by run-webkit-tests.&quot;&quot;&quot;
&gt; Can you document these arguments? For example, I don&apos;t know what
&gt; &quot;regular_output&quot; means. Perhaps a more precise word than &quot;regular&quot;?

Oops, yeah, I meant to.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:147
&gt;  +                   child_processes, is_fully_parallel):
&gt; Aren&apos;t child_processes and is_fully_parallel already a part of options?

They are, normally, but I made them arguments here so that output.py didn&apos;t assume that options had been set that it hadn&apos;t actually asked to be set. It seemed like a layering violation.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:173
&gt;  +      def _exit_early(self, method):
&gt; exit_early is really generic. How about something about printing/logging?
&gt; _avoids_printing? _should_print?

Okay.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:421
&gt;  +          self._meter.update(&quot;%s&quot; % msg)
&gt; Can&apos;t you just use msg directly here?

Yeah, probably.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:144
&gt;  +  class Controller(object):
&gt; Generally, filenames should match the primary class in the file, no? Also,
&gt; Controller is super generic. Output actually seems like a better name.

Is that regular python practice? I&apos;m not generally sure (and this is one of the things I find most awkward about Python).

I agree that Controller is a better name; I couldn&apos;t think of anything better.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:84
&gt;  +      return tr
&gt; why create the local variable?
&gt; 

As opposed to returning the function call result directly()? This made it easier to debug, but there&apos;s no good reason.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:97
&gt;  +  class TestFunctions(unittest.TestCase):
&gt; Maybe call this TestUtilityFunctions?

Okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216569</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-04-23 14:40:35 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; WebKitTools/ChangeLog:85
&gt; &gt;  +          This change also renames --log to --print (to be slightly more
&gt; &gt; This seems gratuitous to me. 
&gt; 
&gt; I think --print is more intuitive and helps to separate the concept from debug
&gt; logging, but I don&apos;t fell strongly about this.

Fair enough. As long as we only end up with one option visible to users of the script. Do any bots currently use --log? If not, then we can just rename it.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:79
&gt; &gt;  +      - if --trace &apos;everything&apos; is specified, it will override the
&gt; &gt; &apos;-progress&apos;
&gt; &gt; Why have --trace in addition to print? Why not have print just accept
&gt; &gt; trace-unexepected and trace-everything as options?
&gt; 
&gt; Yeah, I thought about combining the two flags and wasn&apos;t sure if it was a good
&gt; idea or not. I can add it back in.

FWIW, I don&apos;t see a benefit to it being a separate flag.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:147
&gt; &gt;  +                   child_processes, is_fully_parallel):
&gt; &gt; Aren&apos;t child_processes and is_fully_parallel already a part of options?
&gt; 
&gt; They are, normally, but I made them arguments here so that output.py didn&apos;t
&gt; assume that options had been set that it hadn&apos;t actually asked to be set. It
&gt; seemed like a layering violation.

I could see the layering violation argument if we weren&apos;t already passing in options.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:144
&gt; &gt;  +  class Controller(object):
&gt; &gt; Generally, filenames should match the primary class in the file, no? Also,
&gt; &gt; Controller is super generic. Output actually seems like a better name.
&gt; 
&gt; Is that regular python practice? I&apos;m not generally sure (and this is one of the
&gt; things I find most awkward about Python).
&gt; 
&gt; I agree that Controller is a better name; I couldn&apos;t think of anything better.

Lols. I was saying the opposite. Output seems like a better name to me than Controller. A controller can do anything really. May as well call it Manager or ThingDoer or Thingy. :) At least with Output, it&apos;s clear that it&apos;s output related.


&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output_unittest.py:84
&gt; &gt;  +      return tr
&gt; &gt; why create the local variable?
&gt; &gt; 
&gt; 
&gt; As opposed to returning the function call result directly()? This made it
&gt; easier to debug, but there&apos;s no good reason.

Not a big deal. I was cringing at the two letter variable name really and saw that it could just be removed. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216584</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-23 15:17:14 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Generally, filenames should match the primary class in the file, no? Also,
&gt; &gt; Controller is super generic. Output actually seems like a better name.
&gt; 
&gt; Is that regular python practice? I&apos;m not generally sure (and this is one of the
&gt; things I find most awkward about Python).
&gt; 
&gt; I agree that Controller is a better name; I couldn&apos;t think of anything better.
&gt; 

Er, I meant &quot;bad name&quot;. Per IM discussion w/ Ojan I&apos;ll change the module to
&quot;printing&quot; and the class to &quot;Printer&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216587</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-23 15:20:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; WebKitTools/ChangeLog:85
&gt; &gt; &gt;  +          This change also renames --log to --print (to be slightly more
&gt; &gt; &gt; This seems gratuitous to me. 
&gt; &gt; 
&gt; &gt; I think --print is more intuitive and helps to separate the concept from debug
&gt; &gt; logging, but I don&apos;t fell strongly about this.
&gt; 
&gt; Fair enough. As long as we only end up with one option visible to users of the
&gt; script. Do any bots currently use --log? If not, then we can just rename it.

I don&apos;t think so; the bots use --verbose. I still have some muscle memory for --log, so I&apos;m inclined to smooth the transition over for a while.

&gt; 
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:79
&gt; &gt; &gt;  +      - if --trace &apos;everything&apos; is specified, it will override the
&gt; &gt; &gt; &apos;-progress&apos;
&gt; &gt; &gt; Why have --trace in addition to print? Why not have print just accept
&gt; &gt; &gt; trace-unexepected and trace-everything as options?
&gt; &gt; 
&gt; &gt; Yeah, I thought about combining the two flags and wasn&apos;t sure if it was a good
&gt; &gt; idea or not. I can add it back in.
&gt; 
&gt; FWIW, I don&apos;t see a benefit to it being a separate flag.

Yeah, I&apos;ve changed it. As you say, it does clean up some things.

&gt; 
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/output.py:147
&gt; &gt; &gt;  +                   child_processes, is_fully_parallel):
&gt; &gt; &gt; Aren&apos;t child_processes and is_fully_parallel already a part of options?
&gt; &gt; 
&gt; &gt; They are, normally, but I made them arguments here so that output.py didn&apos;t
&gt; &gt; assume that options had been set that it hadn&apos;t actually asked to be set. It
&gt; &gt; seemed like a layering violation.
&gt; 
&gt; I could see the layering violation argument if we weren&apos;t already passing in
&gt; options.
&gt; 

I clarified this in the docstring to the function, but I don&apos;t want to assume that options have been set that didn&apos;t come from the print_options() function.

Note that we don&apos;t need these variables at all if we get rid of detailed-progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216588</commentid>
    <comment_count>10</comment_count>
      <attachid>54196</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-23 15:21:21 -0700</bug_when>
    <thetext>Created attachment 54196
revised patch w/ Ojan&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216638</commentid>
    <comment_count>11</comment_count>
      <attachid>54196</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-23 17:39:57 -0700</bug_when>
    <thetext>Comment on attachment 54196
revised patch w/ Ojan&apos;s feedback

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:44
 +  NUM_SLOW_TESTS_TO_LOG = 10
Nice that you changed the default to match ORWT.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:76
 +      slowest             print %d slowest tests and the time they took to run
Yay for printing defaults!

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:101
 +          # NOTE: we keep this around because &quot;print&quot; is a reserved word and
This doesn&apos;t seem like the real reason.  we&apos;ll eventually kill --log, no?  But obviously we still can&apos;t name the option &quot;print&quot; then.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:188
 +      def _exit_early(self, method):
Seems we should process converting everything -&gt; a set of switches up front instead of here.  You mentioned that would have the advantage of being able to print what &quot;everything&quot; actually means.  We could also then print errors when people specify conflicting options.

Also we should consider renaming this.  If everything was processed up front, then we could use this check everywhere intead of manual flag in self._switches.

self.enabled(&quot;switch name&quot;)

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:199
 +          if self._exit_early(&apos;actual&apos;):
This then becomes:
if not self.enabled(&quot;actual&quot;) return or similar.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:253
 +          self._write(&apos;trace: %s\n&apos; % test_name)
I wonder if this bit would be clearer as a multi-line string literal with names.  Not sure.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:291
 +          percent_complete = 100 * (result_summary.expected +
I&apos;m tempted to say this should be a method on result_summary. :)

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:300
 +      def _print_detailed_progress(self, result_summary, test_list):
This is a mind-nummingly complicated hack.  I&apos;m glad we have it, but i&apos;m also glad it will die soon.  It&apos;s nice to know its there in case there is a rebellion when we switch to NRWT.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:327
 +                  self._current_progress_str = &quot;%s: &quot; % self._current_dir
_current_progress_string seems like a long name from a man who likes short names. :)  Is there a non-current progress string?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:353
 +          for test, results in unexpected_results[&apos;tests&apos;].iteritems():
This would be more clear to me if factored out into a function which returned (passes, flaky, regressions), I think...  I was initially confused as to why there was processing going on inside a print method.  Now I see you&apos;re just trying to convert the data into something easier to print.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:69
 +  def get_options(args):
Does PEP8 do get_?  WebKit c++ style avoids get_ in accessors.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:70
 +      lo = printing.print_options()
and behold! :p  option_list would have been clearer.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:86
 +  def get_result_summary(port_obj, test_files, expectations_str):
Never understood why we call it _obj.  Is there a non-obj port?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:92
 +      rs = run_webkit_tests.ResultSummary(expectations, test_files)
A where 80c hurts readability. :(

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:123
 +  class  Testprinter(unittest.TestCase):
TestPrinter?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:106
 +          # self.assertFalse(stream.empty())
Why the commented out code?

I&apos;m only 30% of the way through after thus far a long review. :(

I need to finish my patch for bug 38027 and eat some dinner.  I&apos;ll look at this more this weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216656</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-23 18:18:22 -0700</bug_when>
    <thetext>Generallly speaking I am attempting to avoid changing anything except where necessary to clean up the logging behavior and to do what is strictly necessary to move this code into a new file. There are definitely other things to be cleaned up in this code but I don&apos;t wish to cram too many substantive changes in with the refactoring.

(In reply to comment #11)
&gt; (From update of attachment 54196 [details])
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:44
&gt;  +  NUM_SLOW_TESTS_TO_LOG = 10
&gt; Nice that you changed the default to match ORWT.
&gt; 

It seemed like a decent compromise between having a specifiable number and getting rid of the flag completely. I definitely think 50 is too many.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:76
&gt;  +      slowest             print %d slowest tests and the time they took to
&gt; run
&gt; Yay for printing defaults!
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:101
&gt;  +          # NOTE: we keep this around because &quot;print&quot; is a reserved word and
&gt; This doesn&apos;t seem like the real reason.  we&apos;ll eventually kill --log, no?  But
&gt; obviously we still can&apos;t name the option &quot;print&quot; then.
&gt; 

Well, yeah.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:188
&gt;  +      def _exit_early(self, method):
&gt; Seems we should process converting everything -&gt; a set of switches up front
&gt; instead of here.  You mentioned that would have the advantage of being able to
&gt; print what &quot;everything&quot; actually means.  We could also then print errors when
&gt; people specify conflicting options.
&gt; 
&gt; Also we should consider renaming this.  If everything was processed up front,
&gt; then we could use this check everywhere intead of manual flag in
&gt; self._switches.
&gt; 
&gt; self.enabled(&quot;switch name&quot;)
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:199
&gt;  +          if self._exit_early(&apos;actual&apos;):
&gt; This then becomes:
&gt; if not self.enabled(&quot;actual&quot;) return or similar.
&gt;

Can do.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:253
&gt;  +          self._write(&apos;trace: %s\n&apos; % test_name)
&gt; I wonder if this bit would be clearer as a multi-line string literal with
&gt; names.  Not sure.
&gt;

If we do multi-line output it gets screwed up when using the --verbose switch (we lose the stuff that gets prepended to the line by the logger), so multi-line is bad in most cases.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:291
&gt;  +          percent_complete = 100 * (result_summary.expected +
&gt; I&apos;m tempted to say this should be a method on result_summary. :)
&gt;

Yeah, but I&apos;m not moving it in this  change.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:300
&gt;  +      def _print_detailed_progress(self, result_summary, test_list):
&gt; This is a mind-nummingly complicated hack.  I&apos;m glad we have it, but i&apos;m also
&gt; glad it will die soon.  It&apos;s nice to know its there in case there is a
&gt; rebellion when we switch to NRWT.

Agreed. I&apos;ve actually changed the default to one-line-progress across the board (it used to be detailed-progress that would automatically fall back to one-line-progress if detailed-progress couldn&apos;t be done).

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:327
&gt;  +                  self._current_progress_str = &quot;%s: &quot; % self._current_dir
&gt; _current_progress_string seems like a long name from a man who likes short
&gt; names. :)  Is there a non-current progress string?

All of the text we&apos;ve already printed and flushed; this string is the one that can be overwritten.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:353
&gt;  +          for test, results in unexpected_results[&apos;tests&apos;].iteritems():
&gt; This would be more clear to me if factored out into a function which returned
&gt; (passes, flaky, regressions), I think...  I was initially confused as to why
&gt; there was processing going on inside a print method.  Now I see you&apos;re just
&gt; trying to convert the data into something easier to print.
&gt; 

Yup, this code can definitely be cleaned up, but I don&apos;t want to do it here.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:69
&gt;  +  def get_options(args):
&gt; Does PEP8 do get_?  WebKit c++ style avoids get_ in accessors.
&gt;

Python style is to refer to member variables directly and not use accessors at all. This isn&apos;t an access, it&apos;s a standalone, perhaps confusingly named, function.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:70
&gt;  +      lo = printing.print_options()
&gt; and behold! :p  option_list would have been clearer.

perhaps.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:86
&gt;  +  def get_result_summary(port_obj, test_files, expectations_str):
&gt; Never understood why we call it _obj.  Is there a non-obj port?

Yes, the name of the package (as in &quot;import port&quot;). I have to call it &quot;port_obj&quot; to avoid a name conflict.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:92
&gt;  +      rs = run_webkit_tests.ResultSummary(expectations, test_files)
&gt; A where 80c hurts readability. :(
&gt; 

They do crop up from time to time.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:123
&gt;  +  class  Testprinter(unittest.TestCase):
&gt; TestPrinter?
&gt;

That looks like a search&amp;replace goof.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:106
&gt;  +          # self.assertFalse(stream.empty())
&gt; Why the commented out code?
&gt; 

Because of the FIXME&apos;s above; these tests don&apos;t actually work correctly.

&gt; I&apos;m only 30% of the way through after thus far a long review. :(
&gt; 
&gt; I need to finish my patch for bug 38027 and eat some dinner.  I&apos;ll look at this
&gt; more this weekend.

Okay. I will wait until you are done with the review before posting a patch with any changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216659</commentid>
    <comment_count>13</comment_count>
      <attachid>54196</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-23 18:36:10 -0700</bug_when>
    <thetext>Comment on attachment 54196
revised patch w/ Ojan&apos;s feedback

WebKitTools/ChangeLog:12
 +          The new code has unit tests!
Yay!

I haven&apos;t looked at the actual change, but the pattern of green and red and tests makes me very happy.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216828</commentid>
    <comment_count>14</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-04-25 08:29:17 -0700</bug_when>
    <thetext>Couple more nits. After this and addressing Eric&apos;s feedback, LGTM.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:88
 +        options
These last two could be included in the description of trace-*. E.g. for trace-unexpected you could just add:
(overrides &apos;unexpected&apos;)

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:109
 +          optparse.make_option(&quot;--sources&quot;, action=&quot;store_true&quot;,
Maybe include a FIXME to get rid of this?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:433
 +          self._meter.update(&quot;%s&quot; % msg)
Forgot to fix this?

&gt; &gt; Fair enough. As long as we only end up with one option visible to users of the
&gt; &gt; script. Do any bots currently use --log? If not, then we can just rename it.
&gt; 
&gt; I don&apos;t think so; the bots use --verbose. I still have some muscle memory for
&gt; --log, so I&apos;m inclined to smooth the transition over for a while.

I&apos;d be surprised if anyone but you depended on --log since it&apos;s so new. So, I&apos;d rather just do the rename now, but it&apos;s not a big deal. I trust you to remove it in an upcoming cleanup. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217292</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-26 14:42:59 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Couple more nits. After this and addressing Eric&apos;s feedback, LGTM.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:88
&gt;  +        options
&gt; These last two could be included in the description of trace-*. E.g. for
&gt; trace-unexpected you could just add:
&gt; (overrides &apos;unexpected&apos;)
&gt; 

Good suggestion. Done.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:109
&gt;  +          optparse.make_option(&quot;--sources&quot;, action=&quot;store_true&quot;,
&gt; Maybe include a FIXME to get rid of this?
&gt; 

Done.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:433
&gt;  +          self._meter.update(&quot;%s&quot; % msg)
&gt; Forgot to fix this?
&gt;

Guess so. Done.
 
&gt; &gt; &gt; Fair enough. As long as we only end up with one option visible to users of the
&gt; &gt; &gt; script. Do any bots currently use --log? If not, then we can just rename it.
&gt; &gt; 
&gt; &gt; I don&apos;t think so; the bots use --verbose. I still have some muscle memory for
&gt; &gt; --log, so I&apos;m inclined to smooth the transition over for a while.
&gt; 
&gt; I&apos;d be surprised if anyone but you depended on --log since it&apos;s so new. So, I&apos;d
&gt; rather just do the rename now, but it&apos;s not a big deal. I trust you to remove
&gt; it in an upcoming cleanup. :)

You&apos;re probably right. I&apos;ve removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217344</commentid>
    <comment_count>16</comment_count>
      <attachid>54343</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-26 16:09:28 -0700</bug_when>
    <thetext>Created attachment 54343
update w/ ojan and eseidel&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217345</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-26 16:14:29 -0700</bug_when>
    <thetext>Attachment 54343 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:233:  too many blank lines (2)  [pep8/E303] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217358</commentid>
    <comment_count>18</comment_count>
      <attachid>54343</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-26 16:50:50 -0700</bug_when>
    <thetext>Comment on attachment 54343
update w/ ojan and eseidel&apos;s feedback

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:98
 +  --print &apos;everything&apos; is equivalent to --print &apos;%s&apos;.
There is some way in python to have named string replacements.  That would probably be clearer here, but is also not a big deal.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:119
 +          optparse.make_option(&quot;--sources&quot;, action=&quot;store_true&quot;,
Any reason why we shouldn&apos;t just remove it now?  rs=me to remove it now or later.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:162
 +          switches = switches.union(set(PRINT_EVERYTHING.split(&apos;,&apos;)))
I believe switches.update() is what you&apos;re looking for.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:196
 +            options            OptionParser object w/ command line settings
I&apos;d probably write &quot;with&quot; instead of w/ since you have space.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:248
 +          self.write(msg, &apos;config&apos;)
Wow, now these start to look like we should just be doing self.print(CONFIG, msg)

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:352
 +          if self._current_progress_str == &quot;&quot;:
if not self. _current_progress_str?

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:153
 +      def test_print_actual(self):
OMG these tests are a lot of copy/paste code.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:346
 +          printer, err, out = self.get_printer(
Toooo much copy paste.  This could all be abstracted.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:172
 +      TODO(dpranke): split this data structure into a separate class?
For better or worse we use FIXME in WebKit instead of TODO(name).

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:193
 +      tbe = result_summary.tests_by_expectation
I would rather have written a helper function to which you pass result_summary and NOW, PASS, etc.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:813
 +              exp_str = self._expectations.get_expectations_string(
I don&apos;t think we use get_ in WebKit.  Certainly not in c++ code.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1097
 +          self._printer.print_timing(&quot;  Median:          %6.3f&quot; % median)
I would think that this would be cleaner if you built the string first, and then called print_timing.  Certainly less copied code between lines?

Overall, I like the idea of this change.  I need to look at it again.  I had a hard time seeing through the wall of copy/paste that was the unittests. :(  (Maybe they weren&apos;t copy/paste and I just read it wrong).

Will look again in a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217360</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-26 16:51:47 -0700</bug_when>
    <thetext>For future reference, at least with our limited review tools, 100k is simply too large to really review in bugzilla.  Ojan and I have been through this one enough now though that this is probably reviewable as is, but we should avoid changes this large in the future if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217362</commentid>
    <comment_count>20</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2010-04-26 16:54:37 -0700</bug_when>
    <thetext>+--print &apos;everything&apos; is equivalent to --print &apos;%s&apos;.
+
+The default is to --print &apos;%s&apos;.
+&quot;&quot;&quot; % (NUM_SLOW_TESTS_TO_LOG, PRINT_EVERYTHING, PRINT_DEFAULT)
+



&gt;&gt;&gt; &quot;%(greeting)s, %(name)s!&quot; % {&apos;greeting&apos;:&apos;hi&apos;, &apos;name&apos;:&apos;Dirk&apos;}
&apos;hi, Dirk!&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217373</commentid>
    <comment_count>21</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-26 17:26:16 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; For future reference, at least with our limited review tools, 100k is simply
&gt; too large to really review in bugzilla.  Ojan and I have been through this one
&gt; enough now though that this is probably reviewable as is, but we should avoid
&gt; changes this large in the future if possible.

For changes like this, where you&apos;re basically moving code from one file to another (and adding unit tests), what would you suggest as an alternative? Simply smaller, more incremental changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217382</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-26 17:39:32 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 54343 [details])
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:98
&gt;  +  --print &apos;everything&apos; is equivalent to --print &apos;%s&apos;.
&gt; There is some way in python to have named string replacements.  That would
&gt; probably be clearer here, but is also not a big deal.

Added.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:119
&gt;  +          optparse.make_option(&quot;--sources&quot;, action=&quot;store_true&quot;,
&gt; Any reason why we shouldn&apos;t just remove it now?  rs=me to remove it now or
&gt; later.

I&apos;m trying to contain the scope of this change.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:162
&gt;  +          switches = switches.union(set(PRINT_EVERYTHING.split(&apos;,&apos;)))
&gt; I believe switches.update() is what you&apos;re looking for.

True.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:196
&gt;  +            options            OptionParser object w/ command line settings
&gt; I&apos;d probably write &quot;with&quot; instead of w/ since you have space.
&gt; 

Done.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:248
&gt;  +          self.write(msg, &apos;config&apos;)
&gt; Wow, now these start to look like we should just be doing self.print(CONFIG,
&gt; msg)
&gt; 

Yeah. That&apos;s by design.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:352
&gt;  +          if self._current_progress_str == &quot;&quot;:
&gt; if not self. _current_progress_str?
&gt; 

I&apos;m not a big fan of using &apos;not&apos; for testing if strings are empty. There&apos;s too many ways to be false, and only one way to be empty (well, two if I was to use len()).

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:153
&gt;  +      def test_print_actual(self):
&gt; OMG these tests are a lot of copy/paste code.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:346
&gt;  +          printer, err, out = self.get_printer(
&gt; Toooo much copy paste.  This could all be abstracted.
&gt; 

These tests tend to be 4- or 5-line paragraphs where you initialize with something that changes in each paragraph, then run a test where one parameter varies, and then test that the output is slightly different.

You can probably figure out how to implement these with somewhat less cut-and-paste effort, but it would involve writing helper functions with callbacks and the structure gets (IMO) a lot less clear. In my experience, unit testing is just repetitive :(

I am open to suggestions if you have some in mind.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:172
&gt;  +      TODO(dpranke): split this data structure into a separate class?
&gt; For better or worse we use FIXME in WebKit instead of TODO(name).
&gt; 

Sure. This wasn&apos;t part of the diff, but I&apos;ve changed it.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:193
&gt;  +      tbe = result_summary.tests_by_expectation
&gt; I would rather have written a helper function to which you pass result_summary
&gt; and NOW, PASS, etc.
&gt;

Perhaps, but this code didn&apos;t change in this patch and I&apos;d prefer not to rewrite it now.
 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:813
&gt;  +              exp_str = self._expectations.get_expectations_string(
&gt; I don&apos;t think we use get_ in WebKit.  Certainly not in c++ code.
&gt; 

It&apos;s not an accessor function. Do you have a better suggestion for a name?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1097
&gt;  +          self._printer.print_timing(&quot;  Median:          %6.3f&quot; % median)
&gt; I would think that this would be cleaner if you built the string first, and
&gt; then called print_timing.  Certainly less copied code between lines?
&gt; 

One, I need to preserve the line-at-a-time invocation to get the timestamps right with --verbose.

Two, I didn&apos;t want to change everything at once so I left this alone.

&gt; Overall, I like the idea of this change.  I need to look at it again.  I had a
&gt; hard time seeing through the wall of copy/paste that was the unittests. :( 
&gt; (Maybe they weren&apos;t copy/paste and I just read it wrong).
&gt; 
&gt; Will look again in a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217384</commentid>
    <comment_count>23</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-26 17:42:01 -0700</bug_when>
    <thetext>&gt; &gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:119
&gt; &gt;  +          optparse.make_option(&quot;--sources&quot;, action=&quot;store_true&quot;,
&gt; &gt; Any reason why we shouldn&apos;t just remove it now?  rs=me to remove it now or
&gt; &gt; later.
&gt; 
&gt; I&apos;m trying to contain the scope of this change.
&gt; 
&gt; &gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:162
&gt; &gt;  +          switches = switches.union(set(PRINT_EVERYTHING.split(&apos;,&apos;)))
&gt; &gt; I believe switches.update() is what you&apos;re looking for.
&gt; 
&gt; True.
&gt;

To be more explicit here, removing this switch touches ~5 more files, which I&apos;d just as soon not do at the same time as this. The scope and intent of the files that are changed in this patch is at least pretty clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217414</commentid>
    <comment_count>24</comment_count>
      <attachid>54366</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-26 18:25:34 -0700</bug_when>
    <thetext>Created attachment 54366
more feedback from eseidel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217416</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-26 18:26:59 -0700</bug_when>
    <thetext>Attachment 54366 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:101:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:102:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217956</commentid>
    <comment_count>26</comment_count>
      <attachid>54366</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-27 14:41:34 -0700</bug_when>
    <thetext>Comment on attachment 54366
more feedback from eseidel

The unit tests make me think this API is wrong, if we have to copy/paste so much code to test so little.

Why not a method:
self.test_printer([&quot;args&quot;], expected_err, expected_out)

Wouldn&apos;t that get rid of a lot of the testing boilerplate?

That still leaves the various print_* boilerplate of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217961</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-27 14:44:14 -0700</bug_when>
    <thetext>I&apos;m excited about improving NRWT.  I&apos;m tempted to just rs=me this, except the unit testing code as written is unmaintainable.  Any time we copy/paste we make unmaintainable code.

I think a large part of what has stalled this review so much is the size of the patch.  Everyone is scared to r+ it.  Even me.  The size leaves a lot of space for gray area in the patch.  It&apos;s not a black or white &quot;yes this is all awesome&quot; or &quot;no this is all bad&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217965</commentid>
    <comment_count>28</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-27 14:50:43 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 54366 [details])
&gt; The unit tests make me think this API is wrong, if we have to copy/paste so
&gt; much code to test so little.
&gt; 

This is the downside of switching behavior based on method name.

&gt; Why not a method:
&gt; self.test_printer([&quot;args&quot;], expected_err, expected_out)
&gt; 
&gt; Wouldn&apos;t that get rid of a lot of the testing boilerplate?

I&apos;ll spend some time see if I can come up with a variant that reduces the duplication and post it for comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217967</commentid>
    <comment_count>29</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-27 14:52:09 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; I&apos;m excited about improving NRWT.  I&apos;m tempted to just rs=me this, except the
&gt; unit testing code as written is unmaintainable.  Any time we copy/paste we make
&gt; unmaintainable code.
&gt; 

In my experience, maintaining test code is almost always tedious and hard to maintain. Once you actually understand the patterns of the tests, it&apos;s actually pretty easy to maintain the duplicated code, but like I said in the previous comment, I&apos;ll see if I can make this clearer.

&gt; I think a large part of what has stalled this review so much is the size of the
&gt; patch.  Everyone is scared to r+ it.  Even me.  The size leaves a lot of space
&gt; for gray area in the patch.  It&apos;s not a black or white &quot;yes this is all
&gt; awesome&quot; or &quot;no this is all bad&quot;.

I&apos;m not sure what to do with this comment. Are you suggesting I break this patch up into chunks and re-submit them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217972</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-27 14:54:38 -0700</bug_when>
    <thetext>Oh, in my example I meant to pass the method pointer in my example.
printer.print_config
or whatever it would be.

(In reply to comment #29)
&gt; In my experience, maintaining test code is almost always tedious and hard to
&gt; maintain. Once you actually understand the patterns of the tests, it&apos;s actually
&gt; pretty easy to maintain the duplicated code, but like I said in the previous
&gt; comment, I&apos;ll see if I can make this clearer.

Thanks.

&gt; &gt; I think a large part of what has stalled this review so much is the size of the
&gt; &gt; patch.  Everyone is scared to r+ it.  Even me.  The size leaves a lot of space
&gt; &gt; for gray area in the patch.  It&apos;s not a black or white &quot;yes this is all
&gt; &gt; awesome&quot; or &quot;no this is all bad&quot;.
&gt; 
&gt; I&apos;m not sure what to do with this comment. Are you suggesting I break this
&gt; patch up into chunks and re-submit them?

That is always an option.  But I don&apos;t know if that&apos;s the best use of your time (up to you).  I don&apos;t see super-easy divisions in this patch to cut on.  I think it&apos;s more a comment towards the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218065</commentid>
    <comment_count>31</comment_count>
      <attachid>54480</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-27 17:14:56 -0700</bug_when>
    <thetext>Created attachment 54480
try to reduce cut&amp;paste duplication in test methods

Okay, I&apos;ve attached a patch that only changes printing_unittest.py, in an attempt to reduce the amount of copied code.

Reducing duplication further gets tricky because the method invocation you&apos;re actually testing has varying arguments, and the output starts to vary. This can probably be done using an apply() call, but I&apos;m not sure if this is worth it. Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218119</commentid>
    <comment_count>32</comment_count>
      <attachid>54480</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-27 18:23:27 -0700</bug_when>
    <thetext>Comment on attachment 54480
try to reduce cut&amp;paste duplication in test methods

I think we&apos;ve said more than needs to be said about this patch.  We should land it and move on.  :)

This all needs more iteration, holding up this patch only slows that down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218127</commentid>
    <comment_count>33</comment_count>
      <attachid>54495</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-27 18:41:13 -0700</bug_when>
    <thetext>Created attachment 54495
merge to HEAD</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218129</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-27 18:43:19 -0700</bug_when>
    <thetext>Attachment 54495 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:101:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:102:  whitespace before &apos;}&apos;  [pep8/E202] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:166:  whitespace after &apos;[&apos;  [pep8/E201] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:169:  whitespace after &apos;[&apos;  [pep8/E201] [5]
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:178:  trailing whitespace  [pep8/W291] [5]
WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:41:  expected 2 blank lines, found 1  [pep8/E302] [5]
Total errors found: 6 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218131</commentid>
    <comment_count>35</comment_count>
      <attachid>54496</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-27 18:44:39 -0700</bug_when>
    <thetext>Created attachment 54496
lint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219980</commentid>
    <comment_count>36</comment_count>
      <attachid>54480</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-02 19:22:44 -0700</bug_when>
    <thetext>Comment on attachment 54480
try to reduce cut&amp;paste duplication in test methods

Cleared Eric Seidel&apos;s review+ from obsolete attachment 54480 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220412</commentid>
    <comment_count>37</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-03 18:59:37 -0700</bug_when>
    <thetext>Committed r58728: &lt;http://trac.webkit.org/changeset/58728&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54117</attachid>
            <date>2010-04-22 18:31:53 -0700</date>
            <delta_ts>2010-04-22 18:44:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>97605</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxMzY1ZGMzLi42ZTA1MWIxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTAtMDQt
MjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuIAorCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVuYW1lcyAtLWxvZyB0byAtLXByaW50
ICh0byBiZSBzbGlnaHRseSBtb3JlCisgICAgICAgIGRlc2NyaXB0aXZlKS4gLS1sb2cgaXMgcmV0
YWluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgorICAgICAgICBJIGFkZGVkIGJldHRl
ciBoZWxwIG1lc3NhZ2VzIGZvciBwcmludGluZyBhbmQgdHJhY2luZywgaW4KKyAgICAgICAgLS1o
ZWxwLXByaW50aW5nIGFuZCAtLWhlbHAtdHJhY2UuCisKKyAgICAgICAgVGhlIG5ldyBjb2RlIGhh
cyB1bml0IHRlc3RzIQorCisgICAgICAgIFRoZXJlIGlzIHN0aWxsIG1vcmUgY29kZSB0byBiZSBt
b3ZlZCwgYnV0IHRoaXMgcGF0Y2ggaXMgYmlnIGVub3VnaCBhcworICAgICAgICBpdCBpcy4gTmFt
ZWx5LCBzdGlsbCB0byBtb3ZlIGFyZSB0aGUgcHJpbnRpbmcgb2YgdGhlIGFjdHVhbCByZXN1bHRz
CisgICAgICAgIGFuZCB0aGUgdGltaW5nIHN0YXRpc3RpY3MsIHdoaWNoIHNob3VsZCBtb3ZlIGFu
b3RoZXIgMzAwLTQwMCBsaW5lcworICAgICAgICBvdXQgb2YgdGhlIGZpbGUuCisKKyAgICAgICAg
Tm90YWJsZSBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMucHkgYmV5b25kIGNvZGUgc2ltcGx5
IG1vdmluZzoKKyAgICAgICAgKiBNZXRlcmVkU3RyZWFtIGlzIG5vdyBoaWRkZW4gdW5kZXIgdGhl
IG5ldyBvdXRwdXQuQ29udHJvbGxlciBjbGFzcy4KKyAgICAgICAgICBBbGwgdGhlIHJlZmVyZW5j
ZXMgdG8gc2VsZi5fbWV0ZXIgbm93IHBvaW50IHRvIHNlbGYuX3ByaW50ZXIgLiAKKyAgICAgICAg
KiBBbGwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gb3V0cHV0LkNvbnRyb2xsZXIK
KyAgICAgICAgKiBJbnN0ZWFkIG9mIHVzaW5nIHdyaXRlKCkgbGFtYmRhcyB0byBjb250cm9sIHdo
YXQgaXMgYW5kIGlzbid0CisgICAgICAgICAgcHJpbnRlZCwgd2UgdXNlIHNlcGFyYXRlIG1ldGhv
ZHMgb24gdGhlIHByaW50ZXIgb2JqZWN0LiBUaGlzIHdpbGwKKyAgICAgICAgICBtYWtlIGl0IGVh
c2llciB0byBncmVwIHdoaWNoIHByaW50IHN0YXRlbWVudHMgYXJlIHByaW50ZWQKKyAgICAgICAg
ICB1bmRlciBwcm90ZWN0aW9uIG9mIGVhY2ggZmxhZy4KKyAgICAgICAgKiBUaGUgcHJpbnRfcmVz
dWx0cyBmbGFnIEkgYWRkZWQgYSBmZXcgcmV2cyBiYWNrIHRvIHN1cHByZXNzIHByaW50aW5nCisg
ICAgICAgICAgaW4gdGhlIHVuaXQgdGVzdHMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCAtLXByaW50
IG5vdGhpbmcuCisgICAgICAgICogVGhlIFJlc3VsdFN1bW1hcnkgY2xhc3Mgbm93IHN0b3JlcyB0
aGUgZW50aXJlIFRlc3RSZXN1bHQgZm9yIGVhY2gKKyAgICAgICAgICB0ZXN0LCBub3QganVzdCB0
aGUgYWN0dWFsIHJlc3VsdCB0eXBlLgorICAgICAgICAqIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jl
c3VsdHMoKSBnb3QgbW92ZWQgZnJvbSBhIG1ldGhvZCBvbiBUZXN0UnVubmVyCisgICAgICAgICAg
dG8gYSBzdGFuZGFsb25lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBtb3ZlIGludG8gYSBzZXBhcmF0
ZSBmaWxlCisgICAgICAgICAgYWxvbmcgd2l0aCB0aGUgUmVzdWx0U3VtbWFyeSBjbGFzcyBhbmQg
dGhlIFRlc3RSZXN1bHQgY2xhc3MKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzgwMTgKKzplCisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtp
dC10ZXN0czoKKyAgICAgICAgICAtIHVwZGF0ZSB0byBuZXcgZW50cnkgcG9pbnRzIGluIHJ1bl93
ZWJraXRfdGVzdHMucHkKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weToKKyAgICAgICAgICAtIGZpeCBhIG1pbm9y
IG5pdCB3aGVyZSB3ZSB3ZXJlIHByaW50aW5nIGFuIGVtcHR5IHN0cmluZyB3aGVyZQorICAgICAg
ICAgICAgd2UgZGlkbid0IG5lZWQgdG8KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9vdXRwdXQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1dF91bml0dGVzdC5w
eTogQWRkZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rl
c3QucHk6CisgICAgICAgICAgLSBpbXBsZW1lbnQgcmVsYXRpdmVfdGVzdF9maWxlbmFtZSgpIGFu
ZCBleHBlY3RlZF9maWxlbmFtZSgpIHNvCisgICAgICAgICAgICB3ZSBjYW4gdGVzdCBwcmludGlu
ZyB1bmV4cGVjdGVkIHJlc3VsdHMgaW4gYSBwbGF0Zm9ybS1uZXV0cmFsCisgICAgICAgICAgICB3
YXkKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3J1bl93ZWJraXRfdGVzdC5weToKKyAgICAg
ICAgICAtIG1vdmUgYSBsb3Qgb2YgdGhlIHByaW50aW5nIGNvZGUgaW50byBvdXRwdXQucHkKKyAg
ICAgICAgICAtIGNoYW5nZSB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgZXhwb3J0ZWQgZW50cnkgcG9p
bnRzIGZvciBlYXNpZXIKKyAgICAgICAgICAgIHVuaXQgdGVzdGluZworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgICAtIHVw
ZGF0ZSB3LyBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMgZW50cnkgcG9pbnRzLgorCiAyMDEw
LTA0LTIyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVu
LXdlYmtpdC10ZXN0cyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMK
aW5kZXggMmViZTFkYS4uMDcyOGVlMCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9u
ZXctcnVuLXdlYmtpdC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Vi
a2l0LXRlc3RzCkBAIC0zMyw1ICszMyw0IEBAIGltcG9ydCBzeXMKIGltcG9ydCB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyBhcyBydW5fd2Via2l0X3Rlc3RzCiAKIGlmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVz
dHMucGFyc2VfYXJncygpCi0gICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKG9wdGlv
bnMsIGFyZ3MpKQorICAgIHN5cy5leGl0KHJ1bl93ZWJraXRfdGVzdHMubWFpbigpKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQppbmRleCA5MzBiOWU0
Li5hMzNmYzNhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0
cmVhbS5weQpAQCAtMTExLDcgKzExMSw4IEBAIGNsYXNzIE1ldGVyZWRTdHJlYW06CiAKICAgICAg
ICAgIyBQcmludCB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiBiYWNrc3BhY2VzIHRvIGVyYXNlIHRo
ZSBwcmV2aW91cwogICAgICAgICAjIG1lc3NhZ2UuCi0gICAgICAgIHNlbGYuX3N0cmVhbS53cml0
ZSgiXGIiICogbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSkKKyAgICAgICAgaWYgbGVuKHNlbGYuX2xh
c3RfdXBkYXRlKToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSgiXGIiICogbGVuKHNl
bGYuX2xhc3RfdXBkYXRlKSkKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHN0cikKICAgICAg
ICAgbnVtX3JlbWFpbmluZyA9IGxlbihzZWxmLl9sYXN0X3VwZGF0ZSkgLSBsZW4oc3RyKQogICAg
ICAgICBpZiBudW1fcmVtYWluaW5nID4gMDoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1dC5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1
dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIxMDA3Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2Uvb3V0cHV0LnB5CkBAIC0wLDAgKzEsNDI5IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJQYWNrYWdlIHRoYXQgaGFuZGxlcyBub24tZGVi
dWcsIG5vbi1maWxlIG91dHB1dCBmb3IgcnVuLXdlYmtpdC10ZXN0cy4iIiIKKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcGRiCisKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhw
ZWN0YXRpb25zCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rl
c3RzLnByaW50ZXIiKQorCitUZXN0RXhwZWN0YXRpb25zRmlsZSA9IHRlc3RfZXhwZWN0YXRpb25z
LlRlc3RFeHBlY3RhdGlvbnNGaWxlCisKK1BSSU5UX0RFRkFVTFQgPSAoIm1pc2Msb25lLWxpbmUt
cHJvZ3Jlc3Msb25lLWxpbmUtc3VtbWFyeSx1bmV4cGVjdGVkLCIKKyAgICAgICAgICAgICAgICAg
InVuZXhwZWN0ZWQtcmVzdWx0cyx1cGRhdGVzIikKK0hFTFBfUFJJTlRJTkcgPSAiIiIKK091dHB1
dCBmb3IgcnVuLXdlYmtpdC10ZXN0cyBpcyBjb250cm9sbGVkIGJ5IGEgY29tbWEtc2VwYXJhdGVk
IGxpc3Qgb2YKK3ZhbHVlcyBwYXNzZWQgdG8gLS1wcmludC4gIFZhbHVlcyBlaXRoZXIgaW5mbHVl
bmNlIHRoZSBvdmVyYWxsIG91dHB1dCwgb3IKK3RoZSBvdXRwdXQgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgcnVuLCBkdXJpbmcgdGhlIHJ1biwgb3IgYXQgdGhlIGVuZDoKKworT3ZlcmFsbCBvcHRp
b25zOgorICAgIG5vdGhpbmcgICAgICAgICAgICAgZG9uJ3QgcHJpbnQgYW55dGhpbmcKKyAgICBl
dmVyeXRoaW5nICAgICAgICAgIHByaW50IGV2ZXJ5dGhpbmcKKyAgICBtaXNjICAgICAgICAgICAg
ICAgIHByaW50IG1pc2NlbGxhbmVvdXMgdGhpbmdzIGxpa2UgYmxhbmsgbGluZXMKKworQXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgcnVuOgorICAgIGNvbmZpZyAgICAgICAgICAgICAgcHJpbnQgdGhl
IHRlc3QgcnVuIGNvbmZpZ3VyYXRpb24KKyAgICBleHBlY3RlZCAgICAgICAgICAgIHByaW50IGEg
c3VtbWFyeSBvZiB3aGF0IGlzIGV4cGVjdGVkIHRvIGhhcHBlbgorICAgICAgICAgICAgICAgICAg
ICAgICAgKCMgcGFzc2VzLCAjIGZhaWx1cmVzLCBldGMuKQorCitEdXJpbmcgdGhlIHJ1bjoKKyAg
ICBkZXRhaWxlZC1wcm9ncmVzcyAgIHByaW50IG9uZSBkb3QgcGVyIHRlc3QgY29tcGxldGVkCisg
ICAgb25lLWxpbmUtcHJvZ3Jlc3MgICBwcmludCBhIG9uZS1saW5lIHByb2dyZXNzIGJhcgorICAg
IHVuZXhwZWN0ZWQgICAgICAgICAgcHJpbnQgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyB0aGV5
IG9jY3VyCisgICAgdXBkYXRlcyAgICAgICAgICAgICBwcmludCB1cGRhdGVzIG9uIHdoaWNoIHN0
YWdlIGlzIGV4ZWN1dGluZworCitBdCB0aGUgZW5kIG9mIHRoZSBydW46CisgICAgYWN0dWFsICAg
ICAgICAgICAgICBwcmludCBhIHN1bW1hcnkgb2YgdGhlIGFjdHVhbCByZXN1bHRzCisgICAgdGlt
aW5nICAgICAgICAgICAgICBwcmludCB0aW1pbmcgc3RhdGlzdGljcworICAgIHVuZXhwZWN0ZWQt
cmVzdWx0cyAgcHJpbnQgYSBsaXN0IG9mIHRoZSB0ZXN0cyB3aXRoIHVuZXhwZWN0ZWQgcmVzdWx0
cworICAgIG9uZS1saW5lLXN1bW1hcnkgICAgcHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRo
ZSBydW4KKworTm90ZXM6CisgICAgLSAnZGV0YWlsZWQtcHJvZ3Jlc3MnIGNhbiBvbmx5IGJlIHVz
ZWQgaWYgcnVubmluZyBpbiBhIHNpbmdsZSB0aHJlYWQKKyAgICAgICh1c2luZyAtLWNoaWxkLXBy
b2Nlc3Nlcz0xKSBvciBpZiBydW5uaW5nIHdpdGgKKyAgICAgICAtLWV4cGVyaW1lbnRhbC1mdWxs
eS1wYXJhbGxlbAorICAgIC0gaWYgLS10cmFjZSAndW5leHBlY3RlZCcgaXMgc3BlY2lmaWVkLCBp
dCB3aWxsIG92ZXJyaWRlCisgICAgICAgLS1wcmludCAndW5leHBlY3RlZAorICAgIC0gaWYgLS10
cmFjZSAnZXZlcnl0aGluZycgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIG92ZXJyaWRlIHRoZSAnLXBy
b2dyZXNzJworICAgICAgb3B0aW9ucworCitUaGUgZGVmYXVsdCBpcyAtLXByaW50ICclcycuCisi
IiIgJSBQUklOVF9ERUZBVUxUCisKK1RSQUNFX0RFRkFVTFQgPSAibm90aGluZyIKKworSEVMUF9U
UkFDRSA9ICIiIgorLS10cmFjZSBwcmludHMgZGV0YWlsZWQgZXhwZWN0YXRpb25zIGFuZCByZXN1
bHRzIGZvciBlYWNoIHRlc3QgYXMgaXQKK2V4ZWN1dGVzLiBWYWxpZCBvcHRpb25zIGFyZToKKwor
ICBub3RoaW5nICAgICBkb24ndCB0cmFjZSBhbnkgcmVzdWx0cworICBldmVyeXRoaW5nICB0cmFj
ZSBldmVyeSByZXN1bHQKKyAgdW5leHBlY3RlZCAgdHJhY2Ugb25seSB1bmV4cGVjdGVkIHJlc3Vs
dHMKKworVGhlIC0tdHJhY2Ugc2V0dGluZyB3aWxsIG92ZXJyaWRlIHRoZSBvdXRwdXQgYmVoYXZp
b3IgY29udHJvbGxlZCBieSAtLXByaW50LgorRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAtLWhl
bHAtcHJpbnRpbmcuCisKK1RoZSBkZWZhdWx0IGlzIC0tdHJhY2UgJXMuCisiIiIgJSBUUkFDRV9E
RUZBVUxUCisKKworZGVmIGxvZ2dpbmdfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByaW50IiwgZGVzdD0ibG9nIiwKKyAgICAgICAgICAg
IGRlZmF1bHQ9UFJJTlRfREVGQVVMVCwKKyAgICAgICAgICAgIGhlbHA9KCJjb250cm9scyBwcmlu
dCBvdXRwdXQgb2YgdGVzdCBydW4uICIKKyAgICAgICAgICAgICAgICAgICJVc2UgLS1oZWxwLXBy
aW50aW5nIGZvciBtb3JlLiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbG9n
IiwgZGVzdD0ibG9nIiwKKyAgICAgICAgICAgIGhlbHA9IihERVBSRUNBVEVELiBzYW1lIGFzIC0t
cHJpbnQpIiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRyYWNlIiwKKyAgICAg
ICAgICAgIGRlZmF1bHQ9VFJBQ0VfREVGQVVMVCwKKyAgICAgICAgICAgIGhlbHA9KCJjb250cm9s
cyB0ZXN0IHRyYWNpbmcgb3V0cHV0IG9mIHRlc3QgcnVuLiAiCisgICAgICAgICAgICAgICAgICAi
VXNlIC0taGVscC10cmFjZSBmb3IgbW9yZS4iKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLWhlbHAtcHJpbnRpbmciLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAg
aGVscD0ic2hvdyBkZXRhaWxlZCBoZWxwIG9uIGNvbnRyb2xsaW5nIHByaW50IG91dHB1dCIpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1oZWxwLXRyYWNlIiwgYWN0aW9uPSJzdG9y
ZV90cnVlIiwKKyAgICAgICAgICAgIGhlbHA9InNob3cgZGV0YWlsZWQgaGVscCBvbiBjb250cm9s
bGluZyB0ZXN0IHRyYWNpbmciKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi12Iiwg
Ii0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBkZWZhdWx0PUZh
bHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmciKSwKKyAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oIi0tc291cmNlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAg
ICAgICBoZWxwPSgic2hvdyBleHBlY3RlZCByZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoIHRlc3Qg
IgorICAgICAgICAgICAgICAgICAiKGltcGxpZXMgLS12ZXJib3NlKSIpKSwKKyAgICAgICAgIyBv
bGQtcnVuLXdlYmtpdC10ZXN0cyBoYXMgYSAtLXNsb3dlc3Qgb3B0aW9uIHdoaWNoIGp1c3QgcHJp
bnRzCisgICAgICAgICMgdGhlIHNsb3dlc3QgMTAuCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLW51bS1zbG93LXRlc3RzLXRvLWxvZyIsIGRlZmF1bHQ9NTAsCisgICAgICAgICAgICBo
ZWxwPSJOdW1iZXIgb2Ygc2xvdyB0ZXN0cyB3aG9zZSB0aW1pbmdzIHRvIHByaW50LiIpLAorICAg
IF0KKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgbWV0ZXIpOgorICAgICIiIkNv
bmZpZ3VyZXMgdGhlIGxvZ2dpbmcgc3lzdGVtLiIiIgorICAgIGxvZ19mbXQgPSAnJShtZXNzYWdl
KXMnCisgICAgbG9nX2RhdGVmbXQgPSAnJXklbSVkICVIOiVNOiVTJworICAgIGxvZ19sZXZlbCA9
IGxvZ2dpbmcuSU5GTworICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgbG9nX2ZtdCA9
ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKS00ZCAlKGxldmVsbmFtZSlzICcK
KyAgICAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMnKQorICAgICAgICBsb2dfbGV2ZWwgPSBs
b2dnaW5nLkRFQlVHCisKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZlbCwg
Zm9ybWF0PWxvZ19mbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PWxvZ19kYXRl
Zm10LCBzdHJlYW09bWV0ZXIpCisKKworY2xhc3MgQ29udHJvbGxlcihvYmplY3QpOgorICAgICIi
IkNsYXNzIGhhbmRsaW5nIGFsbCBub24tZGVidWcgb3V0cHV0IGRvbmUgYnkgcnVuLXdlYmtpdC10
ZXN0cy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcmVndWxhcl9v
dXRwdXQsIGJ1aWxkYm90X291dHB1dCwKKyAgICAgICAgICAgICAgICAgY2hpbGRfcHJvY2Vzc2Vz
LCBpc19mdWxseV9wYXJhbGxlbCk6CisgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbSA9IGJ1
aWxkYm90X291dHB1dAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBz
ZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9zdHJlYW0gPSByZWd1bGFyX291dHB1dAor
CisgICAgICAgICMgVGhlc2UgYXJlIHVzZWQgZm9yIC0tbG9nIGRldGFpbGVkLXByb2dyZXNzIHRv
IHRyYWNrIHN0YXR1cyBieQorICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fY3Vy
cmVudF9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIK
KyAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKKworICAgICAgICBzZWxmLl9t
ZXRlciA9IG1ldGVyZWRfc3RyZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9v
dXRwdXQpCisgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYuX29wdGlvbnMsIHNlbGYuX21l
dGVyKQorCisgICAgICAgIGlmIChjaGlsZF9wcm9jZXNzZXMgIT0gMSBhbmQgbm90IGlzX2Z1bGx5
X3BhcmFsbGVsIGFuZAorICAgICAgICAgICAgJ2RldGFpbGVkLXByb2dyZXNzJyBpbiBvcHRpb25z
LmxvZyk6CisgICAgICAgICAgICBfbG9nLndhcm4oIkNhbiBvbmx5IHByaW50ICdkZXRhaWxlZC1w
cm9ncmVzcycgaWYgcnVubmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgIndpdGggLS1jaGls
ZC1wcm9jZXNzZXM9MSBvciAiCisgICAgICAgICAgICAgICAgICAgICAgIndpdGggLS1leHBlcmlt
ZW50YWwtZnVsbHktcGFyYWxsZWwuICIKKyAgICAgICAgICAgICAgICAgICAgICAiVXNpbmcgJ29u
ZS1saW5lLXByb2dyZXNzJyBpbnN0ZWFkLiIpCisgICAgICAgICAgICBvcHRpb25zLmxvZyA9IG9w
dGlvbnMubG9nLnJlcGxhY2UoJ2RldGFpbGVkLXByb2dyZXNzJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lLWxpbmUtcHJvZ3Jlc3MnKQorICAgICAg
ICBzZWxmLl9zd2l0Y2hlcyA9IG9wdGlvbnMubG9nLnNwbGl0KCcsJykKKworICAgIGRlZiBfZXhp
dF9lYXJseShzZWxmLCBtZXRob2QpOgorICAgICAgICBpZiAnbm90aGluZycgaW4gc2VsZi5fc3dp
dGNoZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiAnZXZlcnl0aGluZycg
aW4gc2VsZi5fc3dpdGNoZXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0
dXJuIG1ldGhvZCBub3QgaW4gc2VsZi5fc3dpdGNoZXMKKworICAgIGRlZiBoZWxwX3ByaW50aW5n
KHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZShIRUxQX1BSSU5USU5HKQorCisgICAgZGVmIGhl
bHBfdHJhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlKEhFTFBfVFJBQ0UpCisKKyAgICBk
ZWYgcHJpbnRfYWN0dWFsKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHko
J2FjdHVhbCcpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0
cmVhbS53cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgcHJpbnRfY29uZmlnKHNlbGYsIG1z
Zyk6CisgICAgICAgIHNlbGYud3JpdGUobXNnLCAnY29uZmlnJykKKworICAgIGRlZiBwcmludF9l
eHBlY3RlZChzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2V4cGVjdGVkJykK
KworICAgIGRlZiBwcmludF90aW1pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53cml0ZSht
c2csICd0aW1pbmcnKQorCisgICAgZGVmIHByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZiwgdG90
YWwsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRo
ZSB0ZXN0IHJ1biB0byBzdGRvdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0b3RhbDog
dG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgorICAgICAgICAgIGV4cGVjdGVkOiBudW1iZXIgb2Yg
ZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fZXhpdF9lYXJs
eSgnb25lLWxpbmUtc3VtbWFyeScpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdW5l
eHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKKyAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgor
ICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIkFsbCAlZCB0ZXN0cyByYW4gYXMgZXhwZWN0
ZWQuXG4iICUgZXhwZWN0ZWQpCisgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKKyAgICAgICAg
ICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4n
dDpcblxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIlxuJWQgdGVzdHMgcmFu
IGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGV4cGVjdGVkLCB1bmV4cGVjdGVkKSkKKworICAgIGRlZiBwcmludF90ZXN0X3Jlc3Vs
dChzZWxmLCByZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKToKKyAgICAgICAgIiIi
UHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJpbnQuIiIi
CisgICAgICAgIGlmICgnZXZlcnl0aGluZycgaW4gc2VsZi5fb3B0aW9ucy50cmFjZSBvcgorICAg
ICAgICAgICAgJ3VuZXhwZWN0ZWQnIGluIHNlbGYuX29wdGlvbnMudHJhY2UgYW5kIG5vdCBleHBl
Y3RlZCk6CisgICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCwgZXhwX3N0
ciwgZ290X3N0cikKKyAgICAgICAgZWxpZiAobm90IGV4cGVjdGVkIGFuZAorICAgICAgICAgICAg
ICAoJ3VuZXhwZWN0ZWQnIGluIHNlbGYuX3N3aXRjaGVzIG9yCisgICAgICAgICAgICAgICAnZXZl
cnl0aGluZycgaW4gc2VsZi5fc3dpdGNoZXMpIGFuZAorICAgICAgICAgICAgICBub3QgJ2RldGFp
bGVkLXByb2dyZXNzJyBpbiBzZWxmLl9zd2l0Y2hlcyk6CisgICAgICAgICAgICBzZWxmLl9wcmlu
dF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHJlc3VsdCkKKworICAgIGRlZiBfcHJpbnRfdGVzdF90
cmFjZShzZWxmLCByZXN1bHQsIGV4cF9zdHIsIGdvdF9zdHIpOgorICAgICAgICAiIiJQcmludCBk
ZXRhaWxlZCByZXN1bHRzIG9mIGEgdGVzdCAodHJpZ2dlcmVkIGJ5IC0tbG9nIHRyYWNlKS4KKyAg
ICAgICAgRm9yIGVhY2ggdGVzdCwgcHJpbnQ6CisgICAgICAgICAgIC0gbG9jYXRpb24gb2YgdGhl
IGV4cGVjdGVkIGJhc2VsaW5lcworICAgICAgICAgICAtIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAg
ICAgICAgLSBhY3R1YWwgcmVzdWx0CisgICAgICAgICAgIC0gdGltaW5nIGluZm8KKyAgICAgICAg
IiIiCisgICAgICAgIGZpbGVuYW1lID0gcmVzdWx0LmZpbGVuYW1lCisgICAgICAgIHRlc3RfbmFt
ZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAg
c2VsZi5fd3JpdGUoJ3RyYWNlOiAlc1xuJyAlIHRlc3RfbmFtZSkKKyAgICAgICAgc2VsZi5fd3Jp
dGUoJyAgdHh0OiAlc1xuJyAlCisgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0
ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykpKQorICAgICAgICBwbmdfZmlsZSA9IHNlbGYu
X3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKyAgICAgICAgaWYgb3Mu
cGF0aC5leGlzdHMocG5nX2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJyAgcG5nOiAl
c1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUoZmlsZW5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd3Jp
dGUoJyAgcG5nOiA8bm9uZT5cbicpCisgICAgICAgIHNlbGYuX3dyaXRlKCcgIGV4cDogJXMnICUg
ZXhwX3N0cikKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgZ290OiAlcycgJSBnb3Rfc3RyKQorICAg
ICAgICBzZWxmLl93cml0ZSgnIHRvb2s6ICUtLjNmJyAlIHJlc3VsdC50ZXN0X3J1bl90aW1lKQor
ICAgICAgICBzZWxmLl93cml0ZSgnJykKKworICAgIGRlZiBfcHJpbnRfdW5leHBlY3RlZF90ZXN0
X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJQcmludHMgb25lIHVuZXhwZWN0ZWQg
dGVzdCByZXN1bHQgbGluZS4iIiIKKyAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxl
LkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHQudHlwZV1bMF0KKyAgICAgICAgc2VsZi53
cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVkICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShyZXN1bHQuZmlsZW5hbWUpLAorICAgICAgICAg
ICAgICAgICAgICBkZXNjKSwgInVuZXhwZWN0ZWQiKQorCisgICAgZGVmIHByaW50X3Byb2dyZXNz
KHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeWluZywgdGVzdF9saXN0KToKKyAgICAgICAgIiIi
UHJpbnQgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgdGVzdHMgYXMgZGV0ZXJtaW5lZCBieSAtLXByaW50
LiIiIgorICAgICAgICBpZiAoc2VsZi5fZXhpdF9lYXJseSgnZGV0YWlsZWQtcHJvZ3Jlc3MnKSBh
bmQKKyAgICAgICAgICAgIHNlbGYuX2V4aXRfZWFybHkoJ29uZS1saW5lLXByb2dyZXNzJykpOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgJ2RldGFpbGVkLXByb2dyZXNzJyBpbiBz
ZWxmLl9zd2l0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X2RldGFpbGVkX3Byb2dyZXNz
KHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2xpc3QpCisgICAgICAgIGVsaWYgJ29uZS1saW5lLXByb2dy
ZXNzJyBpbiBzZWxmLl9zd2l0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5l
X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCByZXRyeWluZykKKworICAgICAgICBpZiByZXN1bHRf
c3VtbWFyeS5yZW1haW5pbmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgn
JykKKworICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1h
cnksIHJldHJ5aW5nKToKKyAgICAgICAgIiIiRGlzcGxheXMgdGhlIHByb2dyZXNzIHRocm91Z2gg
dGhlIHRlc3QgcnVuLiIiIgorICAgICAgICBwZXJjZW50X2NvbXBsZXRlID0gMTAwICogKHJlc3Vs
dF9zdW1tYXJ5LmV4cGVjdGVkICsKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0
ZWQpIC8gcmVzdWx0X3N1bW1hcnkudG90YWwKKyAgICAgICAgYWN0aW9uID0gIlRlc3RpbmciCisg
ICAgICAgIGlmIHJldHJ5aW5nOgorICAgICAgICAgICAgYWN0aW9uID0gIlJldHJ5aW5nIgorICAg
ICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMgKCVkJSUpOiAlZCByYW4gYXMgZXhwZWN0ZWQs
ICVkIGRpZG4ndCwiCisgICAgICAgICAgICAiICVkIGxlZnQiICUgKGFjdGlvbiwgcGVyY2VudF9j
b21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCisgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKSkKKworICAgIGRlZiBf
cHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRlc3RfbGlzdCk6
CisgICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0cHV0IHdoZXJlIHdlIHBy
aW50IHRoZSBkaXJlY3RvcnkgbmFtZQorICAgICAgICBhbmQgb25lIGRvdCBmb3IgZWFjaCBjb21w
bGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKKyAgICAgICAgIi0tbG9nIGRldGFpbGVk
LXByb2dyZXNzIi4iIiIKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBs
ZW4odGVzdF9saXN0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG5leHRfdGVzdCA9
IHRlc3RfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICBuZXh0X2RpciA9
IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShuZXh0X3Rlc3QpKQorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0
ciA9PSAiIjoKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAi
ICUgKG5leHRfZGlyKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rpcgor
CisgICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgorICAg
ICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6CisgICAgICAgICAgICAg
ICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogLiIg
JSAobmV4dF9kaXIpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rp
cgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0ciArPSAiLiIKKworICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRfc3Vt
bWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCisgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQn
IGluIHNlbGYuX3N3aXRjaGVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgi
JXNcbiIgJSBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikKKyAgICAgICAgICAgICAgICB0ZXN0
X3Jlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbbmV4dF90ZXN0XQorICAgICAgICAgICAg
ICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQodGVzdF9yZXN1bHQpCisgICAg
ICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSBzZWxmLl9j
dXJyZW50X2RpcgorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyICs9IDEK
KyAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPT0gbGVuKHRlc3RfbGlz
dCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbmV4dF90ZXN0ID0gdGVz
dF9saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAgICAgICAgICBuZXh0X2RpciA9
IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKworICAgICAgICBpZiByZXN1bHRfc3VtbWFyeS5yZW1h
aW5pbmc6CisgICAgICAgICAgICByZW1haW5fc3RyID0gIiAoJWQpIiAlIChyZXN1bHRfc3VtbWFy
eS5yZW1haW5pbmcpCisgICAgICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMlcyIgJSAo
c2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtYWluX3N0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz
ZWxmLl9tZXRlci5wcm9ncmVzcygiJXMiICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkK
KworICAgIGRlZiBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1
bHRzKToKKyAgICAgICAgIiIiUHJpbnRzIGEgbGlzdCBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHRz
IHRvIHRoZSBidWlsZGJvdCBzdHJlYW0uIiIiCisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHko
J3VuZXhwZWN0ZWQtcmVzdWx0cycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGFz
c2VzID0ge30KKyAgICAgICAgZmxha3kgPSB7fQorICAgICAgICByZWdyZXNzaW9ucyA9IHt9CisK
KyAgICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cydd
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3Bs
aXQoIiAiKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0
KCIgIikKKyAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKKyAgICAgICAgICAgICAg
ICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2Rp
Y3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxpZiAnVElN
RU9VVCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9s
aXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
RXhwZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWwsIGJ1dCBwYXNz
ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAg
ICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAgICAgICAgICMgV2UgZ3Jv
dXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgorICAgICAg
ICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBdLCB0ZXN0KQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMo
cmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisgICAgICAgIGlmIGxlbihw
YXNzZXMpIG9yIGxlbihmbGFreSkgb3IgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIHNl
bGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihwYXNzZXMp
OgorICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiJXM6ICglZClcbiIgJSAo
a2V5LCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAg
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVp
bGRib3Rfc3RyZWFtLndyaXRlKCIgICVzXG4iICUgdGVzdCkKKyAgICAgICAgICAgICAgICBzZWxm
Ll9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90
X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihmbGFreSk6CisgICAgICAgICAg
ICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQ
VElPTlMKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5Lml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9O
U1trZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3Jp
dGUoIlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAoJWQpXG4iCisgICAgICAgICAgICAgICAgICAg
ICUgKGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAg
ICB0ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ11bdGVz
dF0KKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0WydhY3R1YWwnXS5zcGxpdCgi
ICIpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0WydleHBlY3RlZCddLnNw
bGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0Zp
bGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgICAgICBuZXdfZXhw
ZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXMiICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25z
X2xpc3QpKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxu
IikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAg
ICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKKyAgICAgICAgICAgIGZv
ciBrZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0K
KyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoCisgICAgICAgICAg
ICAgICAgICAgICJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICglZClcbiIgJSAoCisgICAg
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAg
ICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIg
ICVzID0gJXNcbiIgJSAodGVzdCwga2V5KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJv
dF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53
cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10p
IGFuZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIiVzXG4iICUgIi0iICogNzgpCisKKyAgICBkZWYgcHJpbnRfdXBkYXRlKHNl
bGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHkoJ3VwZGF0ZXMnKToKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUobXNnKQorCisgICAgZGVm
IHdyaXRlKHNlbGYsIG1zZywgb3B0aW9uPSJtaXNjIik6CisgICAgICAgIGlmIHNlbGYuX2V4aXRf
ZWFybHkob3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl93cml0ZSgi
JXNcbiIgJSBtc2cpCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYu
X21ldGVyLnVwZGF0ZSgiJXMiICUgbXNnKQorCisjCisjIFV0aWxpdHkgcm91dGluZXMgdXNlZCBi
eSB0aGUgQ29udHJvbGxlciBjbGFzcworIworCisKK2RlZiBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMo
ZGljdCwga2V5LCB2YWx1ZSk6CisgICAgZGljdC5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2
YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL291dHB1dF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1dF91bml0dGVzdC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTVjYmNjCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2Uvb3V0cHV0X3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNTIyIEBACisjIS91c3IvYmlu
L3B5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlVuaXQgdGVzdHMgZm9yIG91dHB1dC5weS4i
IiIKKworaW1wb3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0
dGVzdAoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0
IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBv
dXRwdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBk
dW1wX3JlbmRlcl90cmVlX3RocmVhZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKKworY2xhc3MgQXJyYXlTdHJlYW0o
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2NvbnRlbnRz
ID0gW10KKworICAgIGRlZiB3cml0ZShzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9jb250ZW50
cy5hcHBlbmQobXNnKQorCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2NvbnRlbnRzCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuX2NvbnRlbnRz
ID0gW10KKworICAgIGRlZiBlbXB0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIChsZW4oc2VsZi5f
Y29udGVudHMpID09IDApCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8QXJyYXlTdHJlYW06ICcg
KyBzdHIoc2VsZi5fY29udGVudHMpICsgJz4nCisKKworZGVmIGdldF9vcHRpb25zKGFyZ3MpOgor
ICAgIGxvID0gb3V0cHV0LmxvZ2dpbmdfb3B0aW9ucygpCisgICAgb3B0aW9uX3BhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1sbykKKyAgICByZXR1cm4gb3B0aW9uX3Bh
cnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKK2RlZiBnZXRfcmVzdWx0KGZpbGVuYW1lLCByZXN1bHRf
dHlwZT10ZXN0X2V4cGVjdGF0aW9ucy5QQVNTLCBydW5fdGltZT0wKToKKyAgICBmYWlsdXJlcyA9
IFtdCisgICAgaWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDoKKyAg
ICAgICAgZmFpbHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpXQorICAgIGVs
aWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAgICAgIGZhaWx1
cmVzID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCldCisgICAgdHIgPSBkdW1wX3JlbmRl
cl90cmVlX3RocmVhZC5UZXN0UmVzdWx0KGZpbGVuYW1lLCBmYWlsdXJlcywgcnVuX3RpbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9y
X2FsbF9kaWZmcz0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lX2Zvcl9kaWZmcz0wKQorICAgIHJldHVybiB0cgorCitkZWYgZ2V0X3Jlc3VsdF9zdW1t
YXJ5KHBvcnRfb2JqLCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnNfc3RyKToKKyAgICBleHBlY3Rh
dGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAorICAgICAgICBwb3J0
X29iaiwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zX3N0ciwKKyAgICAgICAgcG9ydF9vYmoudGVz
dF9wbGF0Zm9ybV9uYW1lKCksIGlzX2RlYnVnX21vZGU9RmFsc2UsCisgICAgICAgIGlzX2xpbnRf
bW9kZT1GYWxzZSwgdGVzdHNfYXJlX3ByZXNlbnQ9RmFsc2UpCisKKyAgICBycyA9IHJ1bl93ZWJr
aXRfdGVzdHMuUmVzdWx0U3VtbWFyeShleHBlY3RhdGlvbnMsIHRlc3RfZmlsZXMpCisgICAgcmV0
dXJuIHJzLCBleHBlY3RhdGlvbnMKKworY2xhc3MgVGVzdEZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uZmlndXJlX2xvZ2dpbmcoc2VsZik6CisgICAgICAgICMg
RklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcmVzZXQgdGhlIGJhc2ljIGxvZ2dl
ci4KKyAgICAgICAgIyBGSVhNRTogSWYgb3RoZXIgdGVzdGluZyBjbGFzc2VzIGNhbGwgbG9nZ2lu
Zy5iYXNpY0NvbmZpZygpIHRoZW4KKyAgICAgICAgIyBGSVhNRTogdGhlc2UgY2FsbHMgYmVjb21l
IG5vLW9wcyBhbmQgd2UgY2FuJ3QgY29udHJvbCB0aGUKKyAgICAgICAgIyBGSVhNRTogY29uZmln
dXJhdGlvbiB0byB0ZXN0IHRoaW5ncyBwcm9wZXJseS4KKyAgICAgICAgb3B0aW9ucywgYXJncyA9
IGdldF9vcHRpb25zKFtdKQorICAgICAgICBzdHJlYW0gPSBBcnJheVN0cmVhbSgpCisgICAgICAg
IG91dHB1dC5jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zLCBzdHJlYW0pCisgICAgICAgIGxvZ2dp
bmcuaW5mbygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFzc2VydEZh
bHNlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgICAgIHN0cmVhbS5yZXNldCgpCisgICAgICAgIGxv
Z2dpbmcuZGVidWcoInRoaXMgc2hvdWxkIG5vdCBiZSBsb2dnZWQiKQorICAgICAgICAjIHNlbGYu
YXNzZXJ0VHJ1ZShzdHJlYW0uZW1wdHkoKSkKKworICAgICAgICBzdHJlYW0ucmVzZXQoKQorICAg
ICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoWyctLXZlcmJvc2UnXSkKKyAgICAgICAg
b3V0cHV0LmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkKKyAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFzc2VydEZh
bHNlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfbG9nZ2luZ19vcHRpb25zKHNlbGYp
OgorICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoW10pCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcHRpb25zIGlzIG5vdCBOb25lKQorCitjbGFzcyAgVGVzdENvbnRyb2xsZXIo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBnZXRfY29udHJvbGxlcihzZWxmLCBhcmdzPU5v
bmUsIHNpbmdsZV90aHJlYWRlZD1GYWxzZSwgCisgICAgICAgICAgICAgICAgICAgICAgIGlzX2Z1
bGx5X3BhcmFsbGVsPUZhbHNlKToKKyAgICAgICAgbG9nZ2luZ19vcHRpb25zID0gb3V0cHV0Lmxv
Z2dpbmdfb3B0aW9ucygpCisgICAgICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25Q
YXJzZXIob3B0aW9uX2xpc3Q9bG9nZ2luZ19vcHRpb25zKQorICAgICAgICBvcHRpb25zLCBhcmdz
ID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBw
b3J0LmdldCgndGVzdCcsIG9wdGlvbnMpCisgICAgICAgIG5wcm9jID0gMgorICAgICAgICBpZiBz
aW5nbGVfdGhyZWFkZWQ6CisgICAgICAgICAgICBucHJvYyA9IDEKKyAgICAgICAgCisgICAgICAg
IHJlZ3VsYXJfb3V0cHV0ID0gQXJyYXlTdHJlYW0oKQorICAgICAgICBidWlsZGJvdF9vdXRwdXQg
PSBBcnJheVN0cmVhbSgpCisgICAgICAgIHByaW50ZXIgPSBvdXRwdXQuQ29udHJvbGxlcihzZWxm
Ll9wb3J0LCBvcHRpb25zLCByZWd1bGFyX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dCwgc2luZ2xlX3RocmVhZGVkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIHJl
dHVybiBwcmludGVyLCByZWd1bGFyX291dHB1dCwgYnVpbGRib3Rfb3V0cHV0CisKKyAgICBkZWYg
dGVzdF9oZWxwX3ByaW50aW5nKHNlbGYpOgorICAgICAgICAjIEhlcmUgYW5kIGJlbG93IHdlJ2xs
IGNhbGwgdGhlICJyZWd1bGFyIiBvdXRwdXQgZXJyIGFuZCB0aGUKKyAgICAgICAgIyBidWlsZGJv
dCBvdXRwdXQgb3V0OyB0aGlzIGNvcnJlc3BvbmRzIHRvIGhvdyB0aGluZ3MgcnVuIG9uIHRoZQor
ICAgICAgICAjIGJvdHMgd2l0aCBzdGRlcnIgYW5kIHN0ZG91dC4KKyAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKCkKKworICAgICAgICAjIFRoaXMgcm91dGlu
ZSBzaG91bGQgcHJpbnQgc29tZXRoaW5nIHRvIHN0ZG91dC4gdGVzdGluZyB3aGF0IGl0IGlzCisg
ICAgICAgICMgaXMga2luZCBvZiBwb2ludGxlc3MuCisgICAgICAgIHByaW50ZXIuaGVscF9wcmlu
dGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X2hlbHBfdHJhY2Uoc2Vs
Zik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcigpCisK
KyAgICAgICAgIyBUaGlzIHJvdXRpbmUgc2hvdWxkIHByaW50IHNvbWV0aGluZyB0byBzdGRvdXQu
IHRlc3Rpbmcgd2hhdCBpdCBpcworICAgICAgICAjIGlzIGtpbmQgb2YgcG9pbnRsZXNzLgorICAg
ICAgICBwcmludGVyLmhlbHBfdHJhY2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5l
bXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYg
dGVzdF9wcmludF9hY3R1YWwoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVy
LnByaW50X2FjdHVhbCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ2FjdHVhbCdd
KQorICAgICAgICBwcmludGVyLnByaW50X2FjdHVhbCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldCgp
LCBbJ2hlbGxvXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2Nv
bnRyb2xsZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmlu
dF9hY3R1YWwoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXQoKSwgWydoZWxsb1xuJ10pCisKKyAgICBk
ZWYgdGVzdF9wcmludF9hY3R1YWxfYnVpbGRib3Qoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRl
c3QgdGhhdCB0aGUgZm9ybWF0IG9mIHRoZSBhY3R1YWwgcmVzdWx0cyBtYXRjaGVzIHdoYXQgdGhl
CisgICAgICAgICMgYnVpbGRib3QgaXMgZXhwZWN0aW5nLgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgdGVzdF9wcmludF9jb25maWcoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0g
c2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmlu
dGVyLnByaW50X2NvbmZpZygnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVt
cHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVy
KFsnLS1wcmludCcsICdjb25maWcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoJ2hl
bGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9cbiddKQor
CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJp
bnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygnaGVsbG8n
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsb1xuJ10pCisKKyAg
ICBkZWYgdGVzdF9wcmludF9leHBlY3RlZChzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBv
dXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAg
IHByaW50ZXIucHJpbnRfZXhwZWN0ZWQoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29u
dHJvbGxlcihbJy0tcHJpbnQnLCAnZXhwZWN0ZWQnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9l
eHBlY3RlZCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydo
ZWxsb1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9s
bGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfZXhw
ZWN0ZWQoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVs
bG9cbiddKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdGltaW5nKHNlbGYpOgorICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcn
XSkKKyAgICAgICAgcHJpbnRlci5wcmludF90aW1pbmcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAndGltaW5nJ10pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfdGltaW5nKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgp
LCBbJ2hlbGxvXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2Nv
bnRyb2xsZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmlu
dF90aW1pbmcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsn
aGVsbG9cbiddKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdXBkYXRlKHNlbGYpOgorICAgICAgICBw
cmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhp
bmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoJ2hlbGxvJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0g
c2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAndXBkYXRlcyddKQorICAgICAgICBwcmlu
dGVyLnByaW50X3VwZGF0ZSgnaGVsbG8nKQorCisgICAgICAgICMgTm90ZSB0aGF0IHRoZXJlIHNo
b3VsZG4ndCBiZSBhIGNhcnJpYWdlIHJldHVybiBoZXJlOyB1cGRhdGVzKCkKKyAgICAgICAgIyBh
cmUgbWVhbnQgdG8gYmUgb3ZlcndyaXR0ZW4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJy
LmdldCgpLCBbJ2hlbGxvJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdl
dF9jb250cm9sbGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfdXBkYXRlKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgp
LCBbJ2hlbGxvJ10pCisKKyAgICBkZWYgdGVzdF9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYp
OgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXBy
aW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5
KDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBw
cmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lLWxpbmUtc3Vt
bWFyeSddKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMSwgMSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLCBbIkFsbCAxIHRlc3RzIHJhbiBhcyBl
eHBlY3RlZC5cbiJdKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29u
dHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50
X29uZV9saW5lX3N1bW1hcnkoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdl
dCgpLCBbIkFsbCAxIHRlc3RzIHJhbiBhcyBleHBlY3RlZC5cbiJdKQorCisgICAgICAgIGVyci5y
ZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgyLCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsiXG4xIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAxIGRpZG4ndDpcblxuIl0pCisKKyAgICAg
ICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDMs
IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgWyJcbjIgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAxIGRpZG4ndDpcblxuIl0p
CisKKyAgICBkZWYgdGVzdF9wcmludF90ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgcmVzdWx0
ID0gZ2V0X3Jlc3VsdCgnZm9vLmh0bWwnKQorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRl
ci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9
IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ3VuZXhwZWN0ZWQnXSkKKyAgICAgICAg
cHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9
JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBwcmludGVyLnByaW50X3Rl
c3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgZm9vLmh0bWwg
LT4gdW5leHBlY3RlZCBwYXNzXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJp
bnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9Jycs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVz
dF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBmb28uaHRtbCAt
PiB1bmV4cGVjdGVkIHBhc3NcbiddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfY29udHJvbGxlcihbJy0tdHJhY2UnLCAnbm90aGluZycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcHJpbnQnLCAnbm90aGluZyddKQor
ICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2Us
IGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0n
JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50
ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tdHJhY2UnLCAndW5leHBlY3Rl
ZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0t
cHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJl
c3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5
KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jl
c3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250
cm9sbGVyKFsnLS10cmFjZScsICdldmVyeXRoaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAg
IHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3Ry
PScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkK
KyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNl
LCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9
JycpCisKKyAgICBkZWYgdGVzdF9wcmludF9wcm9ncmVzcyhzZWxmKToKKyAgICAgICAgdGVzdF9m
aWxlcyA9IFsnZm9vLmh0bWwnLCAnYmFyLmh0bWwnXQorICAgICAgICBleHBlY3RhdGlvbnMgPSAn
JworCisgICAgICAgICMgdGVzdCB0aGF0IHdlIHByaW50IG5vdGhpbmcKKyAgICAgICAgcHJpbnRl
ciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10p
CisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9m
aWxlcywgZXhwZWN0YXRpb25zKQorCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMs
IEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVy
LnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkK
KworICAgICAgICAjIHRlc3QgcmVndWxhciBmdW5jdGlvbmFsaXR5CisgICAgICAgIHByaW50ZXIs
IGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmUtbGluZS1wcm9ncmVzcydd
KQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGVyci5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5y
ZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmls
ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3Byb2dyZXNzX19k
ZXRhaWxlZChzZWxmKToKKyAgICAgICAgdGVzdF9maWxlcyA9IFsncGFzcy9wYXNzLmh0bWwnLCAn
cGFzcy90aW1lb3V0Lmh0bWwnLCAnZmFpbC9jcmFzaC5odG1sJ10KKyAgICAgICAgZXhwZWN0YXRp
b25zID0gJ3Bhc3MvdGltZW91dC5odG1sID0gVElNRU9VVCcKKworICAgICAgICAjIGZpcnN0LCB0
ZXN0IHRoYXQgaXQgaXMgZGlzYWJsZWQgcHJvcGVybHkKKyAgICAgICAgIyBzaG91bGQgc3RpbGwg
cHJpbnQgb25lLWxpbmUtcHJvZ3Jlc3MKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9jb250cm9sbGVyKAorICAgICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dy
ZXNzJ10sIHNpbmdsZV90aHJlYWRlZD1GYWxzZSkKKyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1
bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAg
IHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0
LmVtcHR5KCkpCisKKworICAgICAgICAjIG5vdyB0ZXN0IHRoZSBlbmFibGVkIHBhdGhzCisgICAg
ICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcigKKyAgICAgICAgICAg
IFsnLS1wcmludCcsICdkZXRhaWxlZC1wcm9ncmVzcyddLCBzaW5nbGVfdGhyZWFkZWQ9VHJ1ZSkK
KyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2Zp
bGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZh
bHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0
KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhy
cywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHko
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIHJzLmFk
ZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQp
LCBGYWxzZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1sJyks
IFRydWUpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwnLCB0ZXN0
X2V4cGVjdGF0aW9ucy5DUkFTSCksIFRydWUpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAg
IG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0
ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIAorICAgICAgICAjIFdlIG9u
bHkgY2xlYXIgdGhlIG1ldGVyIHdoZW4gcmV0cnlpbmcgdy8gZGV0YWlsZWQtcHJvZ3Jlc3MuCisg
ICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIu
cHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZXJyLmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5
KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKAor
ICAgICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzLHVuZXhwZWN0ZWQnXSwg
c2luZ2xlX3RocmVhZGVkPVRydWUpCisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1h
cnkoc2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorICAgICAgICBwcmludGVy
LnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgp
KQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHBy
aW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1w
dHkoKSkKKworICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0bWwnLCB0ZXN0
X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgRmFsc2UpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0
KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBUcnVlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
ZmFpbC9jcmFzaC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpLCBUcnVlKQorICAgICAg
ICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50
X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisg
ICAgICAgICMgV2Ugb25seSBjbGVhciB0aGUgbWV0ZXIgd2hlbiByZXRyeWluZyB3LyBkZXRhaWxl
ZC1wcm9ncmVzcy4KKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAg
ICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBw
cmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhp
bmcnXSkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRf
Y29udHJvbGxlcihbJy0tcHJpbnQnLCAnbWlzYyddKQorICAgICAgICBwcmludGVyLndyaXRlKCJm
b28iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBlcnIu
cmVzZXQoKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAiY29uZmlnIikKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0
ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAg
ICBwcmludGVyLndyaXRlKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQorICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAi
Y29uZmlnIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgIGRl
ZiB0ZXN0X3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHJv
dXRpbmUgaXMgdGhlIG9ubHkgb25lIHRoYXQgcHJpbnRzIHN0dWZmIHRoYXQgdGhlIGJvdHMKKyAg
ICAgICAgIyBjYXJlIGFib3V0LgorICAgICAgICBkZWYgZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhl
eHBlY3RlZCwgcGFzc2luZywgZmxha3kpOgorICAgICAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1
bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAg
ICAgICBpZiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFz
cy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3Mv
dGltZW91dC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMu
VElNRU9VVCksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdm
YWlsL2NyYXNoLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksCisgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICBlbGlmIHBhc3Npbmc6CisgICAgICAgICAgICAg
ICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJyksIGV4cGVjdGVkKQorICAgICAg
ICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBleHBlY3Rl
ZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJyks
IGV4cGVjdGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0
X3Jlc3VsdCgncGFzcy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdl
dF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuQ1JBU0gpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQo
Z2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCks
CisgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICByZXRyeSA9IHJzCisg
ICAgICAgICAgICBpZiBmbGFreToKKyAgICAgICAgICAgICAgICByZXRyeSwgZXhwID0gZ2V0X3Jl
c3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMpCisgICAgICAgICAgICAg
ICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJyksIFRydWUpCisgICAgICAg
ICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1sJyksIFRydWUp
CisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcp
LCBUcnVlKQorICAgICAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gcnVuX3dlYmtpdF90ZXN0
cy5zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKAorICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cnQsIGV4cCwgcnMsIHJldHJ5KQorICAgICAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0
cworCisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ3Bhc3MvcGFzcy5odG1sJywgJ3Bhc3MvdGltZW91
dC5odG1sJywgJ2ZhaWwvY3Jhc2guaHRtbCddCisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICcnCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmlu
dCcsICdub3RoaW5nJ10pCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBl
Y3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIu
cHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJy
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5leHBlY3Rl
ZC1yZXN1bHRzJ10pCisKKyAgICAgICAgIyB0ZXN0IGV2ZXJ5dGhpbmcgcnVubmluZyBhcyBleHBl
Y3RlZAorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9VHJ1ZSwg
cGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBl
Y3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRlc3QgZmFp
bHVyZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAg
dXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNl
LCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMo
dXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRlc3QgdW5leHBlY3RlZCBmbGFr
eSByZXN1bHRzCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAg
ICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1U
cnVlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3Vs
dHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRlc3QgdW5leHBlY3RlZCBw
YXNzZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAg
dXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNl
LCBmbGFreT1UcnVlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1
cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91
dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxl
cihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVk
X3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAg
ICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0
eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzX2J1aWxkYm90KHNl
bGYpOgorICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQgcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRz
KCkgcHJvZHVjZXMgdGhlIG91dHB1dCB0aGUKKyAgICAgICAgIyBidWlsZGJvdCBpcyBleHBlY3Rp
bmcuCisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0
dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCBlZGVmNDg1Li5hODg5NGRiIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0
LnB5CkBAIC02Niw2ICs2NiwxMyBAQCBjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSk6CiAgICAgICAg
IHJldHVybiAnJwogCisgICAgZGVmIHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoc2VsZiwgZmlsZW5h
bWUpOgorICAgICAgICByZXR1cm4gZmlsZW5hbWUKKworICAgIGRlZiBleHBlY3RlZF9maWxlbmFt
ZShzZWxmLCBmaWxlbmFtZSwgc3VmZml4KToKKyAgICAgICAgKGJhc2VuYW1lLCBleHQpID0gb3Mu
cGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGJhc2VuYW1lICsgJy4nICsg
c3VmZml4IAorCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1l
CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IGFhOTA1YWIuLjY4OGUzNmUgMTAwNzU1
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNjQsNyArNjQsNyBAQCBpbXBvcnQgdHJhY2ViYWNr
CiAKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvcgotZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KK2Zyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IG91dHB1dAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwog
ZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmlsZXMKQEAgLTgwLDMzICs4MCw2IEBAIGltcG9y
dCBwb3J0CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnJ1bl93ZWJraXRfdGVzdHMiKQogCi0jIGR1bW15IHZhbHVlIHVzZWQgZm9yIGNvbW1hbmQtbGlu
ZSBleHBsaWNpdG5lc3MgdG8gZGlzYWJsZSBkZWZhdWx0cwotTE9HX05PVEhJTkcgPSAnbm90aGlu
ZycKLQotIyBEaXNwbGF5IHRoZSBvbmUtbGluZSBwcm9ncmVzcyBiYXIgKCUgY29tcGxldGVkKSB3
aGlsZSB0ZXN0aW5nCi1MT0dfUFJPR1JFU1MgPSAncHJvZ3Jlc3MnCi0KLSMgSW5kaWNhdGVzIHRo
YXQgd2Ugd2FudCBkZXRhaWxlZCBwcm9ncmVzcyB1cGRhdGVzIGluIHRoZSBvdXRwdXQgKHByaW50
cwotIyBkaXJlY3RvcnktYnktZGlyZWN0b3J5IGZlZWRiYWNrKS4KLUxPR19ERVRBSUxFRF9QUk9H
UkVTUyA9ICdkZXRhaWxlZC1wcm9ncmVzcycKLQotIyBMb2cgdGhlIG9uZS1saW5lIHN1bW1hcnkg
YXQgdGhlIGVuZCBvZiB0aGUgcnVuCi1MT0dfU1VNTUFSWSA9ICdzdW1tYXJ5JwotCi0jICJUcmFj
ZSIgdGhlIHRlc3QgLSBsb2cgdGhlIGV4cGVjdGVkIHJlc3VsdCwgdGhlIGFjdHVhbCByZXN1bHQs
IGFuZCB0aGUKLSMgYmFzZWxpbmVzIHVzZWQKLUxPR19UUkFDRSA9ICd0cmFjZScKLQotIyBMb2cg
YW55IHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGlsZSBydW5uaW5nIChpbnN0ZWFkIG9mIGp1c3QgYXQg
dGhlIGVuZCkuCi1MT0dfVU5FWFBFQ1RFRCA9ICd1bmV4cGVjdGVkJwotTE9HX1VORVhQRUNURURf
UkVTVUxUUyA9ICd1bmV4cGVjdGVkLXJlc3VsdHMnCi0KLUxPR19WQUxVRVMgPSAiLCIuam9pbigo
ImFjdHVhbCIsICJjb25maWciLCBMT0dfREVUQUlMRURfUFJPR1JFU1MsICJleHBlY3RlZCIsCi0g
ICAgICAgICAgICAgICAgICAgICAgTE9HX05PVEhJTkcsIExPR19QUk9HUkVTUywgTE9HX1NVTU1B
UlksICJ0aW1pbmciLAotICAgICAgICAgICAgICAgICAgICAgIExPR19VTkVYUEVDVEVELCBMT0df
VU5FWFBFQ1RFRF9SRVNVTFRTKSkKLUxPR19ERUZBVUxUX1ZBTFVFID0gIiwiLmpvaW4oKExPR19E
RVRBSUxFRF9QUk9HUkVTUywgTE9HX1NVTU1BUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMT0dfVU5FWFBFQ1RFRCwgTE9HX1VORVhQRUNURURfUkVTVUxUUykpCi0KICMgQnVpbGRl
ciBiYXNlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCiBCVUlM
REVSX0JBU0VfVVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvbGF5b3V0
X3Rlc3RfcmVzdWx0cy8iCiAKQEAgLTE4MSw3ICsxNTQsNyBAQCBjbGFzcyBSZXN1bHRTdW1tYXJ5
KG9iamVjdCk6CiAgICAgICAgICIiIgogCiAgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRp
b25bcmVzdWx0LnR5cGVdLmFkZChyZXN1bHQuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYucmVzdWx0
c1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0LnR5cGUKKyAgICAgICAgc2VsZi5yZXN1bHRzW3Jl
c3VsdC5maWxlbmFtZV0gPSByZXN1bHQKICAgICAgICAgc2VsZi5yZW1haW5pbmcgLT0gMQogICAg
ICAgICBpZiBsZW4ocmVzdWx0LmZhaWx1cmVzKToKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXNb
cmVzdWx0LmZpbGVuYW1lXSA9IHJlc3VsdC5mYWlsdXJlcwpAQCAtMTkxLDYgKzE2NCw4MiBAQCBj
bGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnVuZXhwZWN0ZWRf
cmVzdWx0c1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0LnR5cGUKICAgICAgICAgICAgIHNlbGYu
dW5leHBlY3RlZCArPSAxCiAKK2RlZiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHBvcnRf
b2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0cnlfc3VtbWFyeSk6CisgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVj
dGVkIHJlc3VsdHMgYXMgYSBkaWN0LgorCisgICAgVE9ETyhkcHJhbmtlKTogc3BsaXQgdGhpcyBk
YXRhIHN0cnVjdHVyZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3M/CisKKyAgICBBcmdzOgorICAgICAg
ICBwb3J0X29iajogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKKyAgICAgICAgZXhw
ZWN0YXRpb25zOiB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zIG9iamVjdAorICAg
ICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBpbml0aWFsIHRlc3QgcnVu
cworICAgICAgICByZXRyeV9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3Qg
cnVuIG9mIHJldHJpZWQgdGVzdHMKKyAgICBSZXR1cm5zOgorICAgICAgICBBIGRpY3Rpb25hcnkg
Y29udGFpbmluZyBhIHN1bW1hcnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQor
ICAgICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6CisgICAgICAgICd2ZXJzaW9u
JzogYSB2ZXJzaW9uIGluZGljYXRvciAoMSBpbiB0aGlzIHZlcnNpb24pCisgICAgICAgICdmaXhh
YmxlJzogIyBvZiBmaXhhYmxlIHRlc3RzIChOT1cgLSBQQVNTKQorICAgICAgICAnc2tpcHBlZCc6
ICMgb2Ygc2tpcHBlZCB0ZXN0cyAoTk9XICYgU0tJUFBFRCkKKyAgICAgICAgJ251bV9yZWdyZXNz
aW9ucyc6ICMgb2Ygbm9uLWZsYWt5IGZhaWx1cmVzCisgICAgICAgICdudW1fZmxha3knOiAjIG9m
IGZsYWt5IGZhaWx1cmVzCisgICAgICAgICdudW1fcGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBh
c3NlcworICAgICAgICAndGVzdHMnOiBhIGRpY3Qgb2YgdGVzdHMgLT4geydleHBlY3RlZCc6ICcu
Li4nLCAnYWN0dWFsJzogJy4uLid9CisgICAgIiIiCisgICAgcmVzdWx0cyA9IHt9CisgICAgcmVz
dWx0c1sndmVyc2lvbiddID0gMQorCisgICAgdGJlID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlf
ZXhwZWN0YXRpb24KKyAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQor
ICAgIHJlc3VsdHNbJ2ZpeGFibGUnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAt
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTXSkKKyAgICByZXN1bHRzWydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25z
Lk5PV10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3Rh
dGlvbnMuU0tJUF0pCisKKyAgICBudW1fcGFzc2VzID0gMAorICAgIG51bV9mbGFreSA9IDAKKyAg
ICBudW1fcmVncmVzc2lvbnMgPSAwCisgICAga2V5d29yZHMgPSB7fQorICAgIGZvciBrLCB2IGlu
IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKKyAgICAgICAg
a2V5d29yZHNbdl0gPSBrLnVwcGVyKCkKKworICAgIHRlc3RzID0ge30KKyAgICBmb3IgZmlsZW5h
bWUsIHJlc3VsdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1z
KCk6CisgICAgICAgICMgTm90ZSB0aGF0IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5h
bCBydW4sIHdlIGlnbm9yZQorICAgICAgICAjIHdoZXRoZXIgb3Igbm90IGl0IGNyYXNoZWQgd2hl
biB3ZSByZXRyaWVkIGl0IChpZiB3ZSByZXRyaWVkIGl0KSwKKyAgICAgICAgIyBhbmQgYWx3YXlz
IGNvbnNpZGVyIHRoZSByZXN1bHQgbm90IGZsYWt5LgorICAgICAgICB0ZXN0ID0gcG9ydF9vYmou
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBleHBl
Y3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoZmlsZW5hbWUpCisgICAgICAgIGFjdHVh
bCA9IFtrZXl3b3Jkc1tyZXN1bHRdXQorCisgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVj
dGF0aW9ucy5QQVNTOgorICAgICAgICAgICAgbnVtX3Bhc3NlcyArPSAxCisgICAgICAgIGVsaWYg
cmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIOgorICAgICAgICAgICAgbnVtX3JlZ3Jl
c3Npb25zICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBp
biByZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICBhY3R1
YWwuZXh0ZW5kKGV4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAg
ICAgICAgICAgICAgZmlsZW5hbWUpLnNwbGl0KCIgIikpCisgICAgICAgICAgICAgICAgbnVtX2Zs
YWt5ICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0
ID0gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAg
ICAgICAgaWYgcmVzdWx0ICE9IHJldHJ5X3Jlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgYWN0
dWFsLmFwcGVuZChrZXl3b3Jkc1tyZXRyeV9yZXN1bHRdKQorICAgICAgICAgICAgICAgICAgICBu
dW1fZmxha3kgKz0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
IG51bV9yZWdyZXNzaW9ucyArPSAxCisKKyAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQorICAgICAg
ICB0ZXN0c1t0ZXN0XVsnZXhwZWN0ZWQnXSA9IGV4cGVjdGVkCisgICAgICAgIHRlc3RzW3Rlc3Rd
WydhY3R1YWwnXSA9ICIgIi5qb2luKGFjdHVhbCkKKworICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0
ZXN0cworICAgIHJlc3VsdHNbJ251bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMKKyAgICByZXN1bHRz
WydudW1fZmxha3knXSA9IG51bV9mbGFreQorICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9ucydd
ID0gbnVtX3JlZ3Jlc3Npb25zCisKKyAgICByZXR1cm4gcmVzdWx0cworCiAKIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgIiIiQSBjbGFzcyBmb3IgbWFuYWdpbmcgcnVubmluZyBhIHNlcmllcyBvZiB0
ZXN0cyBvbiBhIHNlcmllcyBvZiBsYXlvdXQKQEAgLTIwNiwxNyArMjU1LDE3IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAKICAgICBOVU1fUkVUUllfT05fVU5FWFBFQ1RFRF9GQUlMVVJFID0gMQogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIG1ldGVyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CiAgICAgICAgICIiIkluaXRpYWxp
emUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAg
ICAgcG9ydDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAg
b3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCi0gICAgICAgICAg
bWV0ZXI6IGEgTWV0ZXJlZFN0cmVhbSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAg
ICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KICAg
ICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXIKKyAgICAgICAgc2VsZi5f
cHJpbnRlciA9IHByaW50ZXIKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0
byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29j
a2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KApAQCAtMjMw
LDEyICsyNzksNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVz
X2xpc3QgPSBOb25lCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkK
IAotICAgICAgICAjIFRoZXNlIGFyZSB1c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1wcm9ncmVzcyB0
byB0cmFjayBzdGF0dXMgYnkKLSAgICAgICAgIyBkaXJlY3RvcnkuCi0gICAgICAgIHNlbGYuX2N1
cnJlbnRfZGlyID0gTm9uZQotICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIi
Ci0gICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPSAwCi0KICAgICAgICAgc2VsZi5f
cmV0cmllcyA9IDAKIAogICAgICAgICAjIEhhY2sgZm9yIGR1bXBpbmcgdGhyZWFkcyBvbiB0aGUg
Ym90cwpAQCAtMjgxLDE5ICszMjQsMTUgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAg
IGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAKLSAgICBkZWYgcHJlcGFyZV9saXN0
c19hbmRfcHJpbnRfb3V0cHV0KHNlbGYsIHdyaXRlKToKKyAgICBkZWYgcHJlcGFyZV9saXN0c19h
bmRfcHJpbnRfb3V0cHV0KHNlbGYpOgogICAgICAgICAiIiJDcmVhdGUgYXBwcm9wcmlhdGUgc3Vi
c2V0cyBvZiB0ZXN0IGxpc3RzIGFuZCByZXR1cm5zIGEKICAgICAgICAgUmVzdWx0U3VtbWFyeSBv
YmplY3QuIEFsc28gcHJpbnRzIGV4cGVjdGVkIHRlc3QgY291bnRzLgotCi0gICAgICAgIEFyZ3M6
Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBM
b2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAg
ICIiIgogCiAgICAgICAgICMgUmVtb3ZlIHNraXBwZWQgLSBib3RoIGZpeGFibGUgYW5kIGlnbm9y
ZWQgLSBmaWxlcyBmcm9tIHRoZQogICAgICAgICAjIHRvcC1sZXZlbCBsaXN0IG9mIGZpbGVzIHRv
IHRlc3QuCiAgICAgICAgIG51bV9hbGxfdGVzdF9maWxlcyA9IGxlbihzZWxmLl90ZXN0X2ZpbGVz
KQotICAgICAgICB3cml0ZSgiRm91bmQ6ICAlZCB0ZXN0cyIgJSBudW1fYWxsX3Rlc3RfZmlsZXMp
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoIkZvdW5kOiAgJWQgdGVzdHMi
ICUgKGxlbihzZWxmLl90ZXN0X2ZpbGVzKSkpCiAgICAgICAgIGlmIG5vdCBudW1fYWxsX3Rlc3Rf
ZmlsZXM6CiAgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCJObyB0ZXN0cyB0byBydW4uIikKICAg
ICAgICAgICAgIHN5cy5leGl0KDEpCkBAIC0zNjAsNyArMzk5LDcgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKIAogICAgICAgICAgICAgdGVzdHNfcnVuX21zZyA9ICdSdW5uaW5nOiAlZCB0ZXN0cyAoY2h1
bmsgc2xpY2UgWyVkOiVkXSBvZiAlZCknICUgKAogICAgICAgICAgICAgICAgIChzbGljZV9lbmQg
LSBzbGljZV9zdGFydCksIHNsaWNlX3N0YXJ0LCBzbGljZV9lbmQsIG51bV90ZXN0cykKLSAgICAg
ICAgICAgIHdyaXRlKHRlc3RzX3J1bl9tc2cpCisgICAgICAgICAgICBzZWxmLl9wcmludC5wcmlu
dF9leHBlY3RlZCh0ZXN0c19ydW5fbXNnKQogCiAgICAgICAgICAgICAjIElmIHdlIHJlYWNoZWQg
dGhlIGVuZCBhbmQgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdGVzdHMsIHdlIHJ1biBzb21lCiAgICAg
ICAgICAgICAjIGZyb20gdGhlIGJlZ2lubmluZy4KQEAgLTM2OSw3ICs0MDgsNyBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIGV4dHJhID0gMSArIGNodW5rX2xlbiAtIChzbGlj
ZV9lbmQgLSBzbGljZV9zdGFydCkKICAgICAgICAgICAgICAgICBleHRyYV9tc2cgPSAoJyAgIGxh
c3QgY2h1bmsgaXMgcGFydGlhbCwgYXBwZW5kaW5nIFswOiVkXScgJQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhKQotICAgICAgICAgICAgICAgIHdyaXRlKGV4dHJhX21zZykKKyAg
ICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKGV4dHJhX21zZykKICAg
ICAgICAgICAgICAgICB0ZXN0c19ydW5fbXNnICs9ICJcbiIgKyBleHRyYV9tc2cKICAgICAgICAg
ICAgICAgICBmaWxlcy5leHRlbmQodGVzdF9maWxlc1swOmV4dHJhXSkKICAgICAgICAgICAgIHRl
c3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5LApAQCAtNDAxLDE3ICs0NDAsMTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAg
ICByZXN1bHRfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0YXRpb25zLAogICAg
ICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyB8IHNraXBfY2h1bmspCi0gICAgICAgIHNlbGYuX3By
aW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAg
ICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwK
ICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlBBU1MsICJwYXNzZXMiKQotICAgICAgICBz
ZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5
LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1
bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlMLCAiZmFpbHVyZXMiKQot
ICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3Vs
dF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUo
cmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GTEFLWSwgImZs
YWt5IikKLSAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRl
LCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19v
Zl90eXBlKHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuU0tJ
UCwgInNraXBwZWQiKQogCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZm9yY2U6Ci0gICAgICAg
ICAgICB3cml0ZSgnUnVubmluZyBhbGwgdGVzdHMsIGluY2x1ZGluZyBza2lwcyAoLS1mb3JjZSkn
KQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgnUnVubmluZyBhbGwg
dGVzdHMsIGluY2x1ZGluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdza2lwcyAoLS1mb3JjZSknKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBOb3Rl
IHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgcnVuIHRoZSBza2lwcGVkIHRlc3RzICh0aGV5IHdlcmUK
ICAgICAgICAgICAgICMgc3VidHJhY3RlZCBvdXQgb2Ygc2VsZi5fdGVzdF9maWxlcywgYWJvdmUp
LCBidXQgd2Ugc3R1YiBvdXQgdGhlCkBAIC00MjIsNyArNDYyLDcgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnM9MCkKICAgICAgICAgICAgICAg
ICByZXN1bHQudHlwZSA9IHRlc3RfZXhwZWN0YXRpb25zLlNLSVAKICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZD1UcnVlKQotICAgICAgICB3cml0ZSgi
IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgnJykKIAogICAgICAgICBy
ZXR1cm4gcmVzdWx0X3N1bW1hcnkKIApAQCAtNjI3LDExICs2NjcsMTEgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgcGx1cmFsID0gIiIKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jaGls
ZF9wcm9jZXNzZXMgPiAxOgogICAgICAgICAgICAgcGx1cmFsID0gInMiCi0gICAgICAgIHNlbGYu
X21ldGVyLnVwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4nICUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCisgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVyYWwp
KQogICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWRzKGZpbGVfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fbWV0
ZXIudXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKICAgICAgICAgIyBXYWl0IGZv
ciB0aGUgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGNvbGxlY3QgdGVzdCBmYWlsdXJlcy4KICAgICAg
ICAgZmFpbHVyZXMgPSB7fQpAQCAtNjg0LDcgKzcyNCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYW4gSFRUUCBz
ZXJ2ZXIuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLkhUVFBf
U1VCRElSKQogCi0gICAgZGVmIHJ1bihzZWxmLCByZXN1bHRfc3VtbWFyeSwgcHJpbnRfcmVzdWx0
cyk6CisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1biBh
bGwgb3VyIHRlc3RzIG9uIGFsbCBvdXIgdGVzdCBmaWxlcy4KIAogICAgICAgICBGb3IgZWFjaCB0
ZXN0IGZpbGUsIHdlIHJ1biBlYWNoIHRlc3QgdHlwZS4gSWYgdGhlcmUgYXJlIGFueSBmYWlsdXJl
cywKQEAgLTY5Miw3ICs3MzIsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIEFyZ3M6
CiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGEgc3VtbWFyeSBvYmplY3QgdHJhY2tpbmcgdGhl
IHRlc3QgcmVzdWx0cy4KLSAgICAgICAgICBwcmludF9yZXN1bHRzOiB3aGV0aGVyIG9yIG5vdCB0
byBwcmludCB0aGUgc3VtbWFyeSBhdCB0aGUgZW5kCiAKICAgICAgICAgUmV0dXJuOgogICAgICAg
ICAgIFRoZSBudW1iZXIgb2YgdW5leHBlY3RlZCByZXN1bHRzICgwID09IHN1Y2Nlc3MpCkBAIC03
MDIsMTEgKzc0MSwxMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzdGFydF90aW1lID0g
dGltZS50aW1lKCkKIAogICAgICAgICBpZiBzZWxmLm5lZWRzX2h0dHAoKToKLSAgICAgICAgICAg
IHNlbGYuX21ldGVyLnVwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4n
KQorCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKIAogICAgICAg
ICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9TVUJESVIpOgotICAgICAg
ICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicp
CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29j
a2V0IHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRf
c2VydmVyKCkKICAgICAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIuU3Rh
cnQoKQogCkBAIC03MjksNDEgKzc2OSwyMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAg
IGVuZF90aW1lID0gdGltZS50aW1lKCkKIAotICAgICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5n
X3dyaXRlcihzZWxmLl9vcHRpb25zLCAndGltaW5nJykKLSAgICAgICAgc2VsZi5fcHJpbnRfdGlt
aW5nX3N0YXRpc3RpY3Mod3JpdGUsIGVuZF90aW1lIC0gc3RhcnRfdGltZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQot
Ci0gICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGlt
aW5nX3N0YXRpc3RpY3MoZW5kX3RpbWUgLSBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCiAK
LSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgIyBXZSB3cml0
ZSB0aGlzIGJsb2NrIHRvIHN0ZG91dCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQotICAgICAg
ICAgICAgIyBidWlsZGJvdCBsb2cgcGFyc2VyLCB3aGljaCBvbmx5IGxvb2tzIGF0IHN0ZG91dCwg
bm90IHN0ZGVyciA6KAotICAgICAgICAgICAgd3JpdGUgPSBsYW1iZGEgczogc3lzLnN0ZG91dC53
cml0ZSgiJXNcbiIgJSBzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgd3JpdGUgPSBjcmVh
dGVfbG9nZ2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ2FjdHVhbCcpCi0KLSAgICAgICAgc2Vs
Zi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBz
ZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKIAogICAgICAgICBzeXMu
c3Rkb3V0LmZsdXNoKCkKICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCiAKLSAgICAgICAgIyBU
aGlzIHN1bW1hcnkgZGF0YSBnZXRzIHdyaXR0ZW4gdG8gc3Rkb3V0IHJlZ2FyZGxlc3Mgb2YgbG9n
IGxldmVsCi0gICAgICAgICMgKHVubGVzcyBvZiBjb3Vyc2Ugd2UncmUgcHJpbnRpbmcgbm90aGlu
ZykuCi0gICAgICAgIGlmIHByaW50X3Jlc3VsdHM6Ci0gICAgICAgICAgICBpZiAoTE9HX0RFVEFJ
TEVEX1BST0dSRVNTIGluIHNlbGYuX29wdGlvbnMubG9nIG9yCi0gICAgICAgICAgICAgICAgKExP
R19VTkVYUEVDVEVEIGluIHNlbGYuX29wdGlvbnMubG9nIGFuZAotICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeS50b3RhbCAhPSByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCkpOgotICAgICAg
ICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICBpZiBMT0dfU1VNTUFSWSBpbiBzZWxmLl9vcHRp
b25zLmxvZzoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHJl
c3VsdF9zdW1tYXJ5LnRvdGFsLAorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X29uZV9saW5l
X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCkKIAotICAgICAgICB1
bmV4cGVjdGVkX3Jlc3VsdHMgPSBzZWxmLl9zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHJl
c3VsdF9zdW1tYXJ5LAotICAgICAgICAgICAgcmV0cnlfc3VtbWFyeSkKLSAgICAgICAgaWYgTE9H
X1VORVhQRUNURURfUkVTVUxUUyBpbiBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgIHNl
bGYuX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1bmV4cGVjdGVkX3Jlc3VsdHMpCisgICAgICAg
IHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZi5f
cG9ydCwKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHJl
dHJ5X3N1bW1hcnkpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1
bHRzKHVuZXhwZWN0ZWRfcmVzdWx0cykKIAogICAgICAgICAjIFdyaXRlIHRoZSBzYW1lIGRhdGEg
dG8gbG9nIGZpbGVzLgogICAgICAgICBzZWxmLl93cml0ZV9qc29uX2ZpbGVzKHVuZXhwZWN0ZWRf
cmVzdWx0cywgcmVzdWx0X3N1bW1hcnksCkBAIC03ODUsMTEyICs4MDYsMTYgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9yZXN1bHRfcXVldWUuZ2V0
X25vd2FpdCgpCiAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuCisKICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1h
dGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAogICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFt
ZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpCiAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHNlbGYuX3By
aW50X3Rlc3RfcmVzdWx0cyhyZXN1bHQsIGV4cGVjdGVkLCByZXN1bHRfc3VtbWFyeSkKLQotICAg
IGRlZiBfcHJpbnRfdGVzdF9yZXN1bHRzKHNlbGYsIHJlc3VsdCwgZXhwZWN0ZWQsIHJlc3VsdF9z
dW1tYXJ5KToKLSAgICAgICAgIlByaW50IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJt
aW5lZCBieSB0aGUgLS1sb2cgc3dpdGNoZXMuIgotICAgICAgICBpZiBMT0dfVFJBQ0UgaW4gc2Vs
Zi5fb3B0aW9ucy5sb2c6Ci0gICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3Vs
dCkKLSAgICAgICAgZWxpZiAoTE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYuX29wdGlvbnMu
bG9nIGFuZAotICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlf
cGFyYWxsZWwgb3IKLSAgICAgICAgICAgICAgIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpKSk6
Ci0gICAgICAgICAgICBzZWxmLl9wcmludF9kZXRhaWxlZF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFy
eSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIChub3QgZXhwZWN0ZWQgYW5kIExPR19V
TkVYUEVDVEVEIGluIHNlbGYuX29wdGlvbnMubG9nKToKLSAgICAgICAgICAgICAgICBzZWxmLl9w
cmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuX3By
aW50X29uZV9saW5lX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIF9wcmludF90
ZXN0X3RyYWNlKHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgICIiIlByaW50IGRldGFpbGVkIHJlc3Vs
dHMgb2YgYSB0ZXN0ICh0cmlnZ2VyZWQgYnkgLS1sb2cgdHJhY2UpLgotICAgICAgICBGb3IgZWFj
aCB0ZXN0LCBwcmludDoKLSAgICAgICAgICAgLSBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgYmFz
ZWxpbmVzCi0gICAgICAgICAgIC0gZXhwZWN0ZWQgcmVzdWx0cwotICAgICAgICAgICAtIGFjdHVh
bCByZXN1bHQKLSAgICAgICAgICAgLSB0aW1pbmcgaW5mbwotICAgICAgICAiIiIKLSAgICAgICAg
ZmlsZW5hbWUgPSByZXN1bHQuZmlsZW5hbWUKLSAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICAgICBfbG9nLmluZm8oJ3Ry
YWNlOiAlcycgJSB0ZXN0X25hbWUpCi0gICAgICAgIF9sb2cuaW5mbygnICB0eHQ6ICVzJyAlCi0g
ICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoCi0gICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUs
ICcudHh0JykpKQotICAgICAgICBwbmdfZmlsZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5h
bWUoZmlsZW5hbWUsICcucG5nJykKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocG5nX2ZpbGUp
OgotICAgICAgICAgICAgX2xvZy5pbmZvKCcgIHBuZzogJXMnICUKLSAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgX2xvZy5pbmZvKCcgIHBuZzogPG5vbmU+JykKLSAgICAgICAg
X2xvZy5pbmZvKCcgIGV4cDogJXMnICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0
aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhmaWxlbmFtZSkpCi0gICAgICAgIF9sb2cuaW5m
bygnICBnb3Q6ICVzJyAlCi0gICAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZXhw
ZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKSkKLSAgICAgICAgX2xvZy5pbmZvKCcgdG9v
azogJS0uM2YnICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUpCi0gICAgICAgIF9sb2cuaW5mbygnJykK
LQotICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnkp
OgotICAgICAgICAiIiJEaXNwbGF5cyB0aGUgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgdGVzdCBydW4u
IiIiCi0gICAgICAgIHBlcmNlbnRfY29tcGxldGUgPSAxMDAgKiAocmVzdWx0X3N1bW1hcnkuZXhw
ZWN0ZWQgKwotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCkgLyByZXN1bHRf
c3VtbWFyeS50b3RhbAotICAgICAgICBhY3Rpb24gPSAiVGVzdGluZyIKLSAgICAgICAgaWYgc2Vs
Zi5fcmV0cmllcyA+IDA6Ci0gICAgICAgICAgICBhY3Rpb24gPSAiUmV0cnlpbmciCi0gICAgICAg
IHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyAoJWQlJSk6ICVkIHJhbiBhcyBleHBlY3RlZCwgJWQg
ZGlkbid0LCIKLSAgICAgICAgICAgICIgJWQgbGVmdCIgJSAoYWN0aW9uLCBwZXJjZW50X2NvbXBs
ZXRlLCByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCwKLSAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eS51bmV4cGVjdGVkLCByZXN1bHRfc3VtbWFyeS5yZW1haW5pbmcpKQotCi0gICAgZGVmIF9wcmlu
dF9kZXRhaWxlZF9wcm9ncmVzcyhzZWxmLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIkRp
c3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0cHV0IHdoZXJlIHdlIHByaW50IHRoZSBkaXJlY3Rv
cnkgbmFtZQotICAgICAgICBhbmQgb25lIGRvdCBmb3IgZWFjaCBjb21wbGV0ZWQgdGVzdC4gVGhp
cyBpcyB0cmlnZ2VyZWQgYnkKLSAgICAgICAgIi0tbG9nIGRldGFpbGVkLXByb2dyZXNzIi4iIiIK
LSAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4oc2VsZi5fdGVzdF9m
aWxlc19saXN0KToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIG5leHRfdGVzdCA9IHNl
bGYuX3Rlc3RfZmlsZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQotICAgICAgICBu
ZXh0X2RpciA9IG9zLnBhdGguZGlybmFtZSgKLSAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRp
dmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQotICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3By
b2dyZXNzX3N0ciA9PSAiIjoKLSAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
ID0gIiVzOiAiICUgKG5leHRfZGlyKQotICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBu
ZXh0X2RpcgotCi0gICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1
bHRzOgotICAgICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJv
Z3Jlc3Nfc3RyKSkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9
ICIlczogLiIgJSAobmV4dF9kaXIpCi0gICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIg
PSBuZXh0X2RpcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJy
ZW50X3Byb2dyZXNzX3N0ciArPSAiLiIKLQotICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiBy
ZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCi0gICAgICAgICAgICAgICAgTE9H
X1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cpOgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0c1tuZXh0X3Rlc3RdCi0gICAgICAg
ICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgc2VsZi5fY3VycmVudF9wcm9ncmVz
c19zdHIpCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3Vs
dChuZXh0X3Rlc3QsIHJlc3VsdCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0ciA9ICIlczogIiAlIHNlbGYuX2N1cnJlbnRfZGlyCi0KLSAgICAgICAgICAgIHNlbGYu
X2N1cnJlbnRfdGVzdF9udW1iZXIgKz0gMQotICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF90
ZXN0X251bWJlciA9PSBsZW4oc2VsZi5fdGVzdF9maWxlc19saXN0KToKLSAgICAgICAgICAgICAg
ICBicmVhawotCi0gICAgICAgICAgICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Rb
c2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KLSAgICAgICAgICAgIG5leHRfZGlyID0gb3MucGF0
aC5kaXJuYW1lKAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxl
bmFtZShuZXh0X3Rlc3QpKQotCi0gICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZzoK
LSAgICAgICAgICAgIHJlbWFpbl9zdHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5LnJlbWFp
bmluZykKLSAgICAgICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyVzIiAlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsIHJl
bWFpbl9zdHIpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jl
c3MoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkKLQotICAgIGRlZiBfcHJp
bnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgotICAgICAgICAiIiJQcmlu
dHMgb25lIHVuZXhwZWN0ZWQgdGVzdCByZXN1bHQgbGluZS4iIiIKLSAgICAgICAgZGVzYyA9IFRl
c3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHQudHlwZV1b
MF0KLSAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiAgJXMgLT4gdW5leHBlY3RlZCAlc1xuIiAl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUocmVzdWx0LmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Mp
KQorICAgICAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRp
b25zX3N0cmluZygKKyAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUpCisgICAgICAgICAg
ICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1
bHQudHlwZSkKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVz
dWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikKKyAgICAgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnksIHNlbGYuX3JldHJpZXMgPiAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xp
c3QpCiAKICAgICBkZWYgX2dldF9mYWlsdXJlcyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgaW5jbHVk
ZV9jcmFzaGVzKToKICAgICAgICAgIiIiRmlsdGVycyBhIGRpY3Qgb2YgcmVzdWx0cyBhbmQgcmV0
dXJucyBvbmx5IHRoZSBmYWlsdXJlcy4KQEAgLTkxMyw4MCArODM4LDYgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKIAogICAgICAgICByZXR1cm4gZmFpbGVkX3Jlc3VsdHMKIAotICAgIGRlZiBfc3VtbWFy
aXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFy
eSk6Ci0gICAgICAgICIiIlN1bW1hcml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGlj
dC4KLQotICAgICAgICBUT0RPKGRwcmFua2UpOiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0dXJlIGlu
dG8gYSBzZXBhcmF0ZSBjbGFzcz8KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGluaXRpYWwgdGVzdCBydW5zCi0gICAgICAgICAg
cmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRy
aWVkIHRlc3RzCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRh
aW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUKLSAgICAg
ICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6Ci0gICAgICAgICAgICAndmVyc2lv
bic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEgaW4gdGhpcyB2ZXJzaW9uKQotICAgICAgICAgICAg
J2ZpeGFibGUnOiAjIG9mIGZpeGFibGUgdGVzdHMgKE5PVyAtIFBBU1MpCi0gICAgICAgICAgICAn
c2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0cyAoTk9XICYgU0tJUFBFRCkKLSAgICAgICAgICAg
ICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5vbi1mbGFreSBmYWlsdXJlcwotICAgICAgICAgICAg
J251bV9mbGFreSc6ICMgb2YgZmxha3kgZmFpbHVyZXMKLSAgICAgICAgICAgICdudW1fcGFzc2Vz
JzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcwotICAgICAgICAgICAgJ3Rlc3RzJzogYSBkaWN0IG9m
IHRlc3RzIC0+IHsnZXhwZWN0ZWQnOiAnLi4uJywgJ2FjdHVhbCc6ICcuLi4nfQotICAgICAgICAi
IiIKLSAgICAgICAgcmVzdWx0cyA9IHt9Ci0gICAgICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9IDEK
LQotICAgICAgICB0YmUgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbgotICAg
ICAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQotICAgICAgICByZXN1
bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdKQot
ICAgICAgICByZXN1bHRzWydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5P
V10gJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRp
b25zLlNLSVBdKQotCi0gICAgICAgIG51bV9wYXNzZXMgPSAwCi0gICAgICAgIG51bV9mbGFreSA9
IDAKLSAgICAgICAgbnVtX3JlZ3Jlc3Npb25zID0gMAotICAgICAgICBrZXl3b3JkcyA9IHt9Ci0g
ICAgICAgIGZvciBrLCB2IGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5pdGVy
aXRlbXMoKToKLSAgICAgICAgICAgIGtleXdvcmRzW3ZdID0gay51cHBlcigpCi0KLSAgICAgICAg
dGVzdHMgPSB7fQotICAgICAgICBmb3IgZmlsZW5hbWUsIHJlc3VsdCBpbiByZXN1bHRfc3VtbWFy
eS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAjIE5vdGUgdGhh
dCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKLSAgICAg
ICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlm
IHdlIHJldHJpZWQgaXQpLAotICAgICAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSBy
ZXN1bHQgbm90IGZsYWt5LgotICAgICAgICAgICAgdGVzdCA9IHNlbGYuX3BvcnQucmVsYXRpdmVf
dGVzdF9maWxlbmFtZShmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhw
ZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKQotICAgICAgICAgICAg
YWN0dWFsID0gW2tleXdvcmRzW3Jlc3VsdF1dCi0KLSAgICAgICAgICAgIGlmIHJlc3VsdCA9PSB0
ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgotICAgICAgICAgICAgICAgIG51bV9wYXNzZXMgKz0gMQot
ICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6Ci0gICAg
ICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9y
ZXN1bHRzOgotICAgICAgICAgICAgICAgICAgICBhY3R1YWwuZXh0ZW5kKAotICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAot
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpLnNwbGl0KCIgIikpCi0gICAgICAgICAg
ICAgICAgICAgIG51bV9mbGFreSArPSAxCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3Vs
dHNbZmlsZW5hbWVdCi0gICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCAhPSByZXRyeV9yZXN1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5
X3Jlc3VsdF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQotICAgICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Np
b25zICs9IDEKLQotICAgICAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQotICAgICAgICAgICAgdGVz
dHNbdGVzdF1bJ2V4cGVjdGVkJ10gPSBleHBlY3RlZAotICAgICAgICAgICAgdGVzdHNbdGVzdF1b
J2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFsKQotCi0gICAgICAgIHJlc3VsdHNbJ3Rlc3RzJ10g
PSB0ZXN0cwotICAgICAgICByZXN1bHRzWydudW1fcGFzc2VzJ10gPSBudW1fcGFzc2VzCi0gICAg
ICAgIHJlc3VsdHNbJ251bV9mbGFreSddID0gbnVtX2ZsYWt5Ci0gICAgICAgIHJlc3VsdHNbJ251
bV9yZWdyZXNzaW9ucyddID0gbnVtX3JlZ3Jlc3Npb25zCi0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dHMKLQogICAgIGRlZiBfd3JpdGVfanNvbl9maWxlcyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMs
IHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MpOgogICAgICAgICAiIiJXcml0ZXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3QgcnVu
IGFzIEpTT04gZmlsZXMgaW50byB0aGUgcmVzdWx0cwpAQCAtMTAyNywxMyArODc4LDExIEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgX2xvZy5kZWJ1ZygiRmluaXNoZWQgd3JpdGluZyBK
U09OIGZpbGVzLiIpCiAKLSAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShz
ZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgZGVmIF9wcmludF9leHBlY3RlZF9yZXN1
bHRzX29mX3R5cGUoc2VsZiwgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlX3N0cik6CiAgICAgICAg
ICIiIlByaW50IHRoZSBudW1iZXIgb2YgdGhlIHRlc3RzIGluIGEgZ2l2ZW4gcmVzdWx0IGNsYXNz
LgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUg
aW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgIHN5cy5zdGRv
dXQud3JpdGUuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkgLSB0aGUgb2JqZWN0IGNvbnRhaW5p
bmcgYWxsIHRoZSByZXN1bHRzIHRvIHJlcG9ydCBvbgogICAgICAgICAgIHJlc3VsdF90eXBlIC0g
dGhlIHBhcnRpY3VsYXIgcmVzdWx0IHR5cGUgdG8gcmVwb3J0IGluIHRoZSBzdW1tYXJ5LgogICAg
ICAgICAgIHJlc3VsdF90eXBlX3N0ciAtIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSByZXN1
bHRfdHlwZS4KQEAgLTEwNDgsOCArODk3LDkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
Zm10c3RyID0gKCJFeHBlY3Q6ICUlNWQgJSUtOHMgKCUlJWRkIG5vdywgJSUlZGQgZGVmZXIsICUl
JWRkIHdvbnRmaXgpIgogICAgICAgICAgICAgICAgICAgJSAoc2VsZi5fbnVtX2RpZ2l0cyhub3cp
LCBzZWxmLl9udW1fZGlnaXRzKGRlZmVyKSwKICAgICAgICAgICAgICAgICAgIHNlbGYuX251bV9k
aWdpdHMod29udGZpeCkpKQotICAgICAgICB3cml0ZShmbXRzdHIgJSAobGVuKHRlc3RzKSwgcmVz
dWx0X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cpLAotICAgICAgICAgICAgICBsZW4odGVzdHMg
JiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRmaXgpKSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF9leHBlY3RlZChmbXRzdHIgJSAKKyAgICAgICAgICAgIChsZW4odGVzdHMpLCByZXN1bHRf
dHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksCisgICAgICAgICAgICAgbGVuKHRlc3RzICYgZGVm
ZXIpLCBsZW4odGVzdHMgJiB3b250Zml4KSkpCiAKICAgICBkZWYgX251bV9kaWdpdHMoc2VsZiwg
bnVtKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWVkZWQgdG8g
cmVwcmVzZW50IHRoZSBsZW5ndGggb2YgYQpAQCAtMTA1OSw0MyArOTA5LDM5IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgICAgICBuZGlnaXRzID0gaW50KG1hdGgubG9nMTAobGVuKG51bSkp
KSArIDEKICAgICAgICAgcmV0dXJuIG5kaWdpdHMKIAotICAgIGRlZiBfcHJpbnRfdGltaW5nX3N0
YXRpc3RpY3Moc2VsZiwgd3JpdGUsIHRvdGFsX3RpbWUsIHRocmVhZF90aW1pbmdzLAorICAgIGRl
ZiBfcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Moc2VsZiwgdG90YWxfdGltZSwgdGhyZWFkX3RpbWlu
Z3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5n
cywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJSZWNvcmQgdGltaW5nLXNwZWNpZmljIGlu
Zm9ybWF0aW9uIGZvciB0aGUgdGVzdCBydW4uCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3
cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIp
IG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgdG90YWxfdGlt
ZTogdG90YWwgZWxhcHNlZCB0aW1lIChpbiBzZWNvbmRzKSBmb3IgdGhlIHRlc3QgcnVuCiAgICAg
ICAgICAgdGhyZWFkX3RpbWluZ3M6IHdhbGwgY2xvY2sgdGltZSBlYWNoIHRocmVhZCByYW4gZm9y
CiAgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGRpcmVjdG9yeQog
ICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiB0aW1pbmcgYnkgZmlsZQogICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmb3IgdGhlIHRlc3QgcnVuCiAgICAg
ICAgICIiIgotICAgICAgICB3cml0ZSgiVGVzdCB0aW1pbmc6IikKLSAgICAgICAgd3JpdGUoIiAg
JTYuMmYgdG90YWwgdGVzdGluZyB0aW1lIiAlIHRvdGFsX3RpbWUpCi0gICAgICAgIHdyaXRlKCIi
KQotICAgICAgICB3cml0ZSgiVGhyZWFkIHRpbWluZzoiKQorICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3RpbWluZygiVGVzdCB0aW1pbmc6IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF90aW1pbmcoIiAgJTYuMmYgdG90YWwgdGVzdGluZyB0aW1lIiAlIHRvdGFsX3RpbWUpCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3RpbWluZygiVGhyZWFkIHRpbWluZzoiKQogICAgICAgICBjdW1sX3RpbWUgPSAwCiAg
ICAgICAgIGZvciB0IGluIHRocmVhZF90aW1pbmdzOgotICAgICAgICAgICAgd3JpdGUoIiAgICAl
MTBzOiAlNWQgdGVzdHMsICU2LjJmIHNlY3MiICUKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdGltaW5nKCIgICAgJTEwczogJTVkIHRlc3RzLCAlNi4yZiBzZWNzIiAlCiAgICAgICAg
ICAgICAgICAgICAodFsnbmFtZSddLCB0WydudW1fdGVzdHMnXSwgdFsndG90YWxfdGltZSddKSkK
ICAgICAgICAgICAgIGN1bWxfdGltZSArPSB0Wyd0b3RhbF90aW1lJ10KLSAgICAgICAgd3JpdGUo
IiAgICU2LjJmIGN1bXVsYXRpdmUsICU2LjJmIG9wdGltYWwiICUKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiAgICU2LjJmIGN1bXVsYXRpdmUsICU2LjJmIG9wdGltYWwiICUK
ICAgICAgICAgICAgICAgKGN1bWxfdGltZSwgY3VtbF90aW1lIC8gaW50KHNlbGYuX29wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzKSkpCi0gICAgICAgIHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3RpbWluZygiIikKIAotICAgICAgICBzZWxmLl9wcmludF9hZ2dyZWdhdGVfdGVz
dF9zdGF0aXN0aWNzKHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKLSAgICAgICAgc2Vs
Zi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncywKKyAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2VsZi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0
X3RpbWVzKGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3ByaW50X2Rp
cmVjdG9yeV90aW1pbmdzKHdyaXRlLCBkaXJlY3RvcnlfdGVzdF90aW1pbmdzKQorICAgICAgICBz
ZWxmLl9wcmludF9kaXJlY3RvcnlfdGltaW5ncyhkaXJlY3RvcnlfdGVzdF90aW1pbmdzKQogCi0g
ICAgZGVmIF9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNzKHNlbGYsIHdyaXRlLCBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncyk6CisgICAgZGVmIF9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0
aXN0aWNzKHNlbGYsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgIiIiUHJpbnRz
IGFnZ3JlZ2F0ZSBzdGF0aXN0aWNzIChlLmcuIG1lZGlhbiwgbWVhbiwgZXRjLikgZm9yIGFsbCB0
ZXN0cy4KICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0
ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5z
dGRvdXQud3JpdGUuCiAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IExpc3Qgb2Yg
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFN0YXRzCiAgICAgICAgICAgICAgIGZvciBhbGwg
dGVzdHMuCiAgICAgICAgICIiIgpAQCAtMTExNywyMyArOTYzLDIxIEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZVt0ZXN0X3R5cGVdLmFwcGVu
ZCgKICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlXSkKIAotICAg
ICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mod3JpdGUsCisgICAg
ICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncygKICAgICAgICAgICAg
ICJQRVIgVEVTVCBUSU1FIElOIFRFU1RTSEVMTCAoc2Vjb25kcyk6IiwKICAgICAgICAgICAgIHRp
bWVzX2Zvcl9kdW1wX3JlbmRlcl90cmVlKQotICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNz
X2Zvcl90ZXN0X3RpbWluZ3Mod3JpdGUsCisgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3Nf
Zm9yX3Rlc3RfdGltaW5ncygKICAgICAgICAgICAgICJQRVIgVEVTVCBESUZGIFBST0NFU1NJTkcg
VElNRVMgKHNlY29uZHMpOiIsCiAgICAgICAgICAgICB0aW1lc19mb3JfZGlmZl9wcm9jZXNzaW5n
KQogICAgICAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6Ci0gICAgICAgICAgICBzZWxm
Ll9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mod3JpdGUsCisgICAgICAgICAgICBz
ZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAgICAg
IlBFUiBURVNUIFRJTUVTIEJZIFRFU1QgVFlQRTogJXMiICUgdGVzdF90eXBlLAogICAgICAgICAg
ICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXSkKIAotICAgIGRlZiBfcHJpbnRf
aW5kaXZpZHVhbF90ZXN0X3RpbWVzKHNlbGYsIHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cywKKyAgICBkZWYgX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhzZWxmLCBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRf
c3VtbWFyeSk6CiAgICAgICAgICIiIlByaW50cyB0aGUgcnVuIHRpbWVzIGZvciBzbG93LCB0aW1l
b3V0IGFuZCBjcmFzaCB0ZXN0cy4KICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBj
YWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAg
ICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3M6IExpc3Qgb2YgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFN0YXRzCiAgICAgICAg
ICAgICAgIGZvciBhbGwgdGVzdHMuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkg
b2JqZWN0IGZvciB0ZXN0IHJ1bgpAQCAtMTE1NSw3ICs5OTksNyBAQCBjbGFzcyBUZXN0UnVubmVy
OgogICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCiAKICAgICAg
ICAgICAgIGlmIGZpbGVuYW1lIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzOgotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbZmlsZW5hbWVdCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0c1tmaWxlbmFtZV0udHlwZQog
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCBv
cgogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gp
OgogICAgICAgICAgICAgICAgICAgICBpc190aW1lb3V0X2NyYXNoX29yX3Nsb3cgPSBUcnVlCkBA
IC0xMTY2LDQyICsxMDEwLDM4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAg
bnVtX3ByaW50ZWQgPSBudW1fcHJpbnRlZCArIDEKICAgICAgICAgICAgICAgICB1bmV4cGVjdGVk
X3Nsb3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAg
ICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcod3JpdGUsICIlcyBzbG93ZXN0IHRlc3Rz
IHRoYXQgYXJlIG5vdCAiCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQor
ICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKCIlcyBzbG93ZXN0IHRlc3RzIHRo
YXQgYXJlIG5vdCAiCiAgICAgICAgICAgICAibWFya2VkIGFzIFNMT1cgYW5kIGRpZCBub3QgdGlt
ZW91dC9jcmFzaDoiICUKICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubnVtX3Nsb3dfdGVzdHNf
dG9fbG9nLCB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMpCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAg
ICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgbWFya2VkIGFzIFNM
T1c6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93X3Rlc3RzKQot
ICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3
cml0ZSwgIlRlc3RzIHRoYXQgdGltZWQgb3V0IG9yIGNyYXNoZWQ6IiwKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90
aW1pbmcoIlRlc3RzIG1hcmtlZCBhcyBTTE9XOiIsIHNsb3dfdGVzdHMpCisgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3Rf
dGltaW5nKCJUZXN0cyB0aGF0IHRpbWVkIG91dCBvciBjcmFzaGVkOiIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9vcl9jcmFzaF90ZXN0cykKLSAgICAgICAg
d3JpdGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQogCi0gICAg
ZGVmIF9wcmludF90ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHdyaXRlLCB0aXRsZSwgdGVzdF9saXN0
KToKKyAgICBkZWYgX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoc2VsZix0aXRsZSwgdGVzdF9saXN0
KToKICAgICAgICAgIiIiUHJpbnQgdGltaW5nIGluZm8gZm9yIGVhY2ggdGVzdC4KIAogICAgICAg
ICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUu
Zy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4K
ICAgICAgICAgICB0aXRsZTogc2VjdGlvbiBoZWFkaW5nCiAgICAgICAgICAgdGVzdF9saXN0OiB0
ZXN0cyB0aGF0IGZhbGwgaW4gdGhpcyBzZWN0aW9uCiAgICAgICAgICIiIgotICAgICAgICB3cml0
ZSh0aXRsZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcodGl0bGUpCiAgICAg
ICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfbGlzdDoKICAgICAgICAgICAgIGZpbGVuYW1lID0g
dGVzdF90dXBsZS5maWxlbmFtZVtsZW4oCiAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5sYXlv
dXRfdGVzdHNfZGlyKCkpICsgMTpdCiAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJl
cGxhY2UoJ1xcJywgJy8nKQogICAgICAgICAgICAgdGVzdF9ydW5fdGltZSA9IHJvdW5kKHRlc3Rf
dHVwbGUudGVzdF9ydW5fdGltZSwgMSkKLSAgICAgICAgICAgIHdyaXRlKCIgICVzIHRvb2sgJXMg
c2Vjb25kcyIgJSAoZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQorICAgICAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF90aW1pbmcoIiAgJXMgdG9vayAlcyBzZWNvbmRzIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQog
Ci0gICAgZGVmIF9wcmludF9kaXJlY3RvcnlfdGltaW5ncyhzZWxmLCB3cml0ZSwgZGlyZWN0b3J5
X3Rlc3RfdGltaW5ncyk6CisgICAgZGVmIF9wcmludF9kaXJlY3RvcnlfdGltaW5ncyhzZWxmLCBk
aXJlY3RvcnlfdGVzdF90aW1pbmdzKToKICAgICAgICAgIiIiUHJpbnQgdGltaW5nIGluZm8gYnkg
ZGlyZWN0b3J5IGZvciBhbnkgZGlyZWN0b3JpZXMgdGhhdAogICAgICAgICB0YWtlID4gMTAgc2Vj
b25kcyB0byBydW4uCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFj
ayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAg
ICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5nOiB0
aW1lIGluZm8gZm9yIGVhY2ggZGlyZWN0b3J5CiAgICAgICAgICIiIgogICAgICAgICB0aW1pbmdz
ID0gW10KQEAgLTEyMTEsMjUgKzEwNTEsMjMgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdGVzdHMpKQogICAgICAgICB0aW1pbmdzLnNvcnQoKQog
Ci0gICAgICAgIHdyaXRlKCJUaW1lIHRvIHByb2Nlc3Mgc2xvd2VzdCBzdWJkaXJlY3Rvcmllczoi
KQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiVGltZSB0byBwcm9jZXNzIHNs
b3dlc3Qgc3ViZGlyZWN0b3JpZXM6IikKICAgICAgICAgbWluX3NlY29uZHNfdG9fcHJpbnQgPSAx
MAogICAgICAgICBmb3IgdGltaW5nIGluIHRpbWluZ3M6CiAgICAgICAgICAgICBpZiB0aW1pbmdb
MF0gPiBtaW5fc2Vjb25kc190b19wcmludDoKLSAgICAgICAgICAgICAgICB3cml0ZSgiICAlcyB0
b29rICVzIHNlY29uZHMgdG8gcnVuICVzIHRlc3RzLiIgJSAodGltaW5nWzFdLAorICAgICAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICVzIHRvb2sgJXMgc2Vjb25kcyB0
byBydW4gJXMgdGVzdHMuIiAlICh0aW1pbmdbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgdGlt
aW5nWzBdLCB0aW1pbmdbMl0pKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiIpCiAKLSAgICBkZWYgX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rl
c3RfdGltaW5ncyhzZWxmLCB3cml0ZSwgdGl0bGUsIHRpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRf
c3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHNlbGYsIHRpdGxlLCB0aW1pbmdzKToKICAgICAg
ICAgIiIiUHJpbnRzIHRoZSBtZWRpYW4sIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0
aGUgdmFsdWVzIGluCiAgICAgICAgIHRpbWluZ3MuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAg
ICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0
ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgdGl0bGU6
IFRpdGxlIGZvciB0aGVzZSB0aW1pbmdzLgogICAgICAgICAgIHRpbWluZ3M6IEEgbGlzdCBvZiBm
bG9hdHMgcmVwcmVzZW50aW5nIHRpbWVzLgogICAgICAgICAiIiIKLSAgICAgICAgd3JpdGUodGl0
bGUpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKHRpdGxlKQogICAgICAgICB0
aW1pbmdzLnNvcnQoKQogCiAgICAgICAgIG51bV90ZXN0cyA9IGxlbih0aW1pbmdzKQpAQCAtMTI1
MSwxOSArMTA4OSwxNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgc3VtX29mX2Rl
dmlhdGlvbnMgPSBtYXRoLnBvdyh0aW1lIC0gbWVhbiwgMikKIAogICAgICAgICBzdGRfZGV2aWF0
aW9uID0gbWF0aC5zcXJ0KHN1bV9vZl9kZXZpYXRpb25zIC8gbnVtX3Rlc3RzKQotICAgICAgICB3
cml0ZSgiICBNZWRpYW46ICAgICAgICAgICU2LjNmIiAlIG1lZGlhbikKLSAgICAgICAgd3JpdGUo
IiAgTWVhbjogICAgICAgICAgICAlNi4zZiIgJSBtZWFuKQotICAgICAgICB3cml0ZSgiICA5MHRo
IHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5MCkKLSAgICAgICAgd3JpdGUoIiAgOTl0
aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTkpCi0gICAgICAgIHdyaXRlKCIgIFN0
YW5kYXJkIGRldjogICAgJTYuM2YiICUgc3RkX2RldmlhdGlvbikKLSAgICAgICAgd3JpdGUoIiIp
Ci0KLSAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHNlbGYsIHdyaXRlLCByZXN1bHRfc3Vt
bWFyeSk6CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIE1lZGlhbjogICAg
ICAgICAgJTYuM2YiICUgbWVkaWFuKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWlu
ZygiICBNZWFuOiAgICAgICAgICAgICU2LjNmIiAlIG1lYW4pCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGltaW5nKCIgIDkwdGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTkw
KQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICA5OXRoIHBlcmNlbnRpbGU6
ICU2LjNmIiAlIHBlcmNlbnRpbGU5OSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1p
bmcoIiAgU3RhbmRhcmQgZGV2OiAgICAlNi4zZiIgJSBzdGRfZGV2aWF0aW9uKQorICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKworICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1
bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJQcmludCBhIHNob3J0IHN1
bW1hcnkgYWJvdXQgaG93IG1hbnkgdGVzdHMgcGFzc2VkLgogCiAgICAgICAgIEFyZ3M6Ci0gICAg
ICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5n
V3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5OiBpbmZvcm1hdGlvbiB0byBsb2cKICAgICAgICAgIiIiCiAgICAgICAgIGZh
aWxlZCA9IGxlbihyZXN1bHRfc3VtbWFyeS5mYWlsdXJlcykKQEAgLTEyNzUsMzAgKzExMTEsMjgg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgaWYgdG90YWwgPiAwOgogICAgICAgICAgICAg
cGN0X3Bhc3NlZCA9IGZsb2F0KHBhc3NlZCkgKiAxMDAgLyB0b3RhbAogCi0gICAgICAgIHdyaXRl
KCIiKQotICAgICAgICB3cml0ZSgiPT4gUmVzdWx0czogJWQvJWQgdGVzdHMgcGFzc2VkICglLjFm
JSUpIiAlCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiPT4gUmVzdWx0czogJWQvJWQgdGVzdHMgcGFzc2Vk
ICglLjFmJSUpIiAlCiAgICAgICAgICAgICAgICAgICAgICAocGFzc2VkLCB0b3RhbCwgcGN0X3Bh
c3NlZCkpCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3Vt
bWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRy
eShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLk5PVywgIlRl
c3RzIHRvIGJlIGZpeGVkIGZvciB0aGUgY3VycmVudCByZWxlYXNlIikKIAotICAgICAgICB3cml0
ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJl
c3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAg
ICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksCiAg
ICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5ERUZFUiwKICAgICAgICAgICAgICJUZXN0cyB3
ZSdsbCBmaXggaW4gdGhlIGZ1dHVyZSBpZiB0aGV5IGZhaWwgKERFRkVSKSIpCiAKLSAgICAgICAg
d3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRl
LCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIp
CisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5
LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuV09OVEZJWCwKICAgICAgICAgICAgICJU
ZXN0cyB0aGF0IHdpbGwgb25seSBiZSBmaXhlZCBpZiB0aGV5IGNyYXNoIChXT05URklYKSIpCiAK
LSAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHNlbGYsIHdyaXRlLCByZXN1bHRf
c3VtbWFyeSwgdGltZWxpbmUsCisgICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShz
ZWxmLCByZXN1bHRfc3VtbWFyeSwgdGltZWxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWFkaW5nKToKICAgICAgICAgIiIiUHJpbnQgYSBzdW1tYXJ5IGJsb2NrIG9m
IHJlc3VsdHMgZm9yIGEgcGFydGljdWxhciB0aW1lbGluZSBvZiB0ZXN0LgogCiAgICAgICAgIEFy
Z3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwg
YSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IHRvIHByaW50IHJlc3VsdHMgZm9yCiAgICAg
ICAgICAgdGltZWxpbmU6IHRoZSB0aW1lbGluZSB0byBwcmludCByZXN1bHRzIGZvciAoTk9ULCBX
T05URklYLCBldGMuKQogICAgICAgICAgIGhlYWRpbmc6IGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBv
ZiB0aGUgdGltZWxpbmUKQEAgLTEzMDcsNyArMTE0MSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgIG5vdF9wYXNzaW5nID0gKHRvdGFsIC0KICAgICAgICAgICAgbGVuKHJlc3VsdF9zdW1t
YXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdICYKICAgICAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXSkpCi0g
ICAgICAgIHdyaXRlKCI9PiAlcyAoJWQpOiIgJSAoaGVhZGluZywgbm90X3Bhc3NpbmcpKQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiPT4gJXMgKCVkKToiICUgKGhlYWRpbmcs
IG5vdF9wYXNzaW5nKSkKIAogICAgICAgICBmb3IgcmVzdWx0IGluIFRlc3RFeHBlY3RhdGlvbnNG
aWxlLkVYUEVDVEFUSU9OX09SREVSOgogICAgICAgICAgICAgaWYgcmVzdWx0ID09IHRlc3RfZXhw
ZWN0YXRpb25zLlBBU1M6CkBAIC0xMzE3LDk0ICsxMTUxLDggQEAgY2xhc3MgVGVzdFJ1bm5lcjoK
ICAgICAgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVND
UklQVElPTlNbcmVzdWx0XQogICAgICAgICAgICAgaWYgbm90X3Bhc3NpbmcgYW5kIGxlbihyZXN1
bHRzKToKICAgICAgICAgICAgICAgICBwY3QgPSBsZW4ocmVzdWx0cykgKiAxMDAuMCAvIG5vdF9w
YXNzaW5nCi0gICAgICAgICAgICAgICAgd3JpdGUoIiAgJTVkICUtMjRzICglNC4xZiUlKSIgJSAo
bGVuKHJlc3VsdHMpLAotICAgICAgICAgICAgICAgICAgICAgIGRlc2NbbGVuKHJlc3VsdHMpICE9
IDFdLCBwY3QpKQotCi0gICAgZGVmIF9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYsIHRvdGFs
LCBleHBlY3RlZCk6Ci0gICAgICAgICIiIlByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0aGUg
dGVzdCBydW4gdG8gc3Rkb3V0LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdG90YWw6IHRv
dGFsIG51bWJlciBvZiB0ZXN0cyBydW4KLSAgICAgICAgICBleHBlY3RlZDogbnVtYmVyIG9mIGV4
cGVjdGVkIHJlc3VsdHMKLSAgICAgICAgIiIiCi0gICAgICAgIHVuZXhwZWN0ZWQgPSB0b3RhbCAt
IGV4cGVjdGVkCi0gICAgICAgIGlmIHVuZXhwZWN0ZWQgPT0gMDoKLSAgICAgICAgICAgIHByaW50
ICJBbGwgJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLiIgJSBleHBlY3RlZAotICAgICAgICBlbGlm
IGV4cGVjdGVkID09IDE6Ci0gICAgICAgICAgICBwcmludCAiMSB0ZXN0IHJhbiBhcyBleHBlY3Rl
ZCwgJWQgZGlkbid0OiIgJSB1bmV4cGVjdGVkCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBw
cmludCAiJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6IiAlIChleHBlY3RlZCwK
LSAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKQotCi0gICAgZGVmIF9wcmludF91bmV4cGVjdGVk
X3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzKToKLSAgICAgICAgIiIiUHJpbnRzIGFu
eSB1bmV4cGVjdGVkIHJlc3VsdHMgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtIHRvIHN0ZG91dC4i
IiIKLSAgICAgICAgcGFzc2VzID0ge30KLSAgICAgICAgZmxha3kgPSB7fQotICAgICAgICByZWdy
ZXNzaW9ucyA9IHt9Ci0KLSAgICAgICAgaWYgbGVuKHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMn
XSk6Ci0gICAgICAgICAgICBwcmludCAiIgotCi0gICAgICAgIGZvciB0ZXN0LCByZXN1bHRzIGlu
IHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXS5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGFj
dHVhbCA9IHJlc3VsdHNbJ2FjdHVhbCddLnNwbGl0KCIgIikKLSAgICAgICAgICAgIGV4cGVjdGVk
ID0gcmVzdWx0c1snZXhwZWN0ZWQnXS5zcGxpdCgiICIpCi0gICAgICAgICAgICBpZiBhY3R1YWwg
PT0gWydQQVNTJ106Ci0gICAgICAgICAgICAgICAgaWYgJ0NSQVNIJyBpbiBleHBlY3RlZDoKLSAg
ICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byBjcmFzaCwgYnV0
IHBhc3NlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
KQotICAgICAgICAgICAgICAgIGVsaWYgJ1RJTUVPVVQnIGluIGV4cGVjdGVkOgotICAgICAgICAg
ICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIHRpbWVvdXQsIGJ1dCBwYXNz
ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCi0g
ICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29m
X2xpc3RzKHBhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdFeHBlY3RlZCB0byBmYWlsLCBidXQgcGFzc2VkJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3QpCi0gICAgICAgICAgICBlbGlmIGxlbihhY3R1YWwpID4g
MToKLSAgICAgICAgICAgICAgICAjIFdlIGdyb3VwIGZsYWt5IHRlc3RzIGJ5IHRoZSBmaXJzdCBh
Y3R1YWwgcmVzdWx0IHdlIGdvdC4KLSAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlz
dHMoZmxha3ksIGFjdHVhbFswXSwgdGVzdCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHJlZ3Jlc3Npb25zLCByZXN1bHRzWydhY3R1YWwn
XSwgdGVzdCkKLQotICAgICAgICBpZiBsZW4ocGFzc2VzKToKLSAgICAgICAgICAgIGZvciBrZXks
IHRlc3RzIGluIHBhc3Nlcy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAgICBwcmludCAiJXM6
ICglZCkiICUgKGtleSwgbGVuKHRlc3RzKSkKLSAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkK
LSAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICAgICAg
cHJpbnQgIiAgJXMiICUgdGVzdAotICAgICAgICAgICAgICAgIHByaW50Ci0KLSAgICAgICAgaWYg
bGVuKGZsYWt5KToKLSAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNG
aWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUwotICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMg
aW4gZmxha3kuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVj
dGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgIHBy
aW50ICJVbmV4cGVjdGVkIGZsYWtpbmVzczogJXMgKCVkKSIgJSAoCi0gICAgICAgICAgICAgICAg
ICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVuKHRlc3RzKSkKLSAgICAgICAgICAgICAgICB0
ZXN0cy5zb3J0KCkKLQotICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ11bdGVzdF0K
LSAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0WydhY3R1YWwnXS5zcGxpdCgiICIp
Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0WydleHBlY3RlZCddLnNwbGl0
KCIgIikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUu
RVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgICAgICBuZXdfZXhwZWN0
YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKLSAgICAgICAg
ICAgICAgICAgICAgcHJpbnQgIiAgJXMgPSAlcyIgJSAodGVzdCwgIiAiLmpvaW4obmV3X2V4cGVj
dGF0aW9uc19saXN0KSkKLSAgICAgICAgICAgICAgICBwcmludAotCi0gICAgICAgIGlmIGxlbihy
ZWdyZXNzaW9ucyk6Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25z
RmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKLSAgICAgICAgICAgIGZvciBrZXksIHRlc3Rz
IGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRl
c3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KLSAgICAgICAgICAg
ICAgICBwcmludCAiUmVncmVzc2lvbnM6IFVuZXhwZWN0ZWQgJXMgOiAoJWQpIiAlICgKLSAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKQotICAgICAg
ICAgICAgICAgIHRlc3RzLnNvcnQoKQotICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3Rz
OgotICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyA9ICVzIiAlICh0ZXN0LCBrZXkpCi0g
ICAgICAgICAgICAgICAgcHJpbnQKLQotICAgICAgICBpZiBsZW4odW5leHBlY3RlZF9yZXN1bHRz
Wyd0ZXN0cyddKSBhbmQgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQg
Ii0iICogNzgKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiICAl
NWQgJS0yNHMgKCU0LjFmJSUpIiAlCisgICAgICAgICAgICAgICAgICAgIChsZW4ocmVzdWx0cyks
IGRlc2NbbGVuKHJlc3VsdHMpICE9IDFdLCBwY3QpKQogCiAgICAgZGVmIF93cml0ZV9yZXN1bHRz
X2h0bWxfZmlsZShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIldyaXRlIHJlc3Vs
dHMuaHRtbCB3aGljaCBpcyBhIHN1bW1hcnkgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCkBAIC0xNDY0
LDEwICsxMjEyLDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc2VsZi5fcG9ydC5zaG93
X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3VsdHNfZmlsZW5hbWUpCiAKIAotZGVmIF9hZGRfdG9fZGlj
dF9vZl9saXN0cyhkaWN0LCBrZXksIHZhbHVlKToKLSAgICBkaWN0LnNldGRlZmF1bHQoa2V5LCBb
XSkuYXBwZW5kKHZhbHVlKQotCi0KIGRlZiByZWFkX3Rlc3RfZmlsZXMoZmlsZXMpOgogICAgIHRl
c3RzID0gW10KICAgICBmb3IgZmlsZSBpbiBmaWxlczoKQEAgLTE0NzksMjUgKzEyMjMsMTEgQEAg
ZGVmIHJlYWRfdGVzdF9maWxlcyhmaWxlcyk6CiAgICAgcmV0dXJuIHRlc3RzCiAKIAotZGVmIGNy
ZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCBsb2dfb3B0aW9uKToKLSAgICAiIiJSZXR1cm5z
IGEgd3JpdGUoKSBmdW5jdGlvbiB0aGF0IHdpbGwgd3JpdGUgdGhlIHN0cmluZyB0byBfbG9nLmlu
Zm8oKQotICAgIGlmIGNvbXAgd2FzIHNwZWNpZmllZCBpbiAtLWxvZyBvciBpZiAtLXZlcmJvc2Ug
aXMgdHJ1ZS4gT3RoZXJ3aXNlIHRoZQotICAgIG1lc3NhZ2UgaXMgZHJvcHBlZC4KLQotICAgIEFy
Z3M6Ci0gICAgICBvcHRpb25zOiBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGZyb20gb3B0
cGFyc2UKLSAgICAgIGxvZ19vcHRpb246IG9wdGlvbiB0byBtYXRjaCBpbiBvcHRpb25zLmxvZyBp
biBvcmRlciBmb3IgdGhlIG1lc3NhZ2VzCi0gICAgICAgICAgdG8gYmUgbG9nZ2VkIChlLmcuLCAn
YWN0dWFsJyBvciAnZXhwZWN0ZWQnKQotICAgICIiIgotICAgIGlmIG9wdGlvbnMudmVyYm9zZSBv
ciBsb2dfb3B0aW9uIGluIG9wdGlvbnMubG9nLnNwbGl0KCIsIik6Ci0gICAgICAgIHJldHVybiBf
bG9nLmluZm8KLSAgICByZXR1cm4gbGFtYmRhIHN0cjogMQotCi0KLWRlZiBtYWluKG9wdGlvbnMs
IGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CitkZWYgcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBh
cmdzKToKICAgICAiIiJSdW4gdGhlIHRlc3RzLgogCiAgICAgQXJnczoKKyAgICAgIHBvcnRfb2Jq
OiBQb3J0IG9iamVjdCBmb3IgcG9ydC1zcGVjaWZpYyBiZWhhdmlvcgogICAgICAgb3B0aW9uczog
YSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICBhcmdzOiBhIGxpc3Qg
b2Ygc3ViIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRvIHRlc3QKICAgICAgIHByaW50X3Jlc3VsdHM6
IHdoZXRoZXIgb3Igbm90IHRvIGxvZyBhbnl0aGluZyB0byBzdGRvdXQuCkBAIC0xNTA3LDIyICsx
MjM3LDI0IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAg
ICAgICAgICAgZXJyb3IuCiAgICAgIiIiCiAKLSAgICBpZiBvcHRpb25zLnNvdXJjZXM6Ci0gICAg
ICAgIG9wdGlvbnMudmVyYm9zZSA9IFRydWUKKyAgICAjIENvbmZpZ3VyZSB0aGUgcHJpbnRpbmcg
c3Vic3lzdGVtIGZvciBwcmludGluZyBvdXRwdXQsIGxvZ2dpbmcgZGVidWcKKyAgICAjIGluZm8s
IGFuZCB0cmFjaW5nIHRlc3RzLgogCi0gICAgIyBTZXQgdXAgb3VyIGxvZ2dpbmcgZm9ybWF0Lgot
ICAgIG1ldGVyID0gbWV0ZXJlZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbShvcHRpb25zLnZlcmJvc2Us
IHN5cy5zdGRlcnIpCi0gICAgbG9nX2ZtdCA9ICclKG1lc3NhZ2UpcycKLSAgICBsb2dfZGF0ZWZt
dCA9ICcleSVtJWQgJUg6JU06JVMnCi0gICAgbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCi0gICAg
aWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAgICBsb2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKGZp
bGVuYW1lKXM6JShsaW5lbm8pLTRkICUobGV2ZWxuYW1lKXMgJwotICAgICAgICAgICAgICAgICAg
JyUobWVzc2FnZSlzJykKLSAgICAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5ERUJVRwotICAgIGxv
Z2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nX2xldmVsLCBmb3JtYXQ9bG9nX2ZtdCwgZGF0ZWZt
dD1sb2dfZGF0ZWZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbT1tZXRlcikKKyAg
ICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6CisgICAgICAgICMgRklYTUU6IEludmVz
dGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgorICAg
ICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IHBvcnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKCkKKworICAgIHByaW50ZXIgPSBvdXRwdXQuQ29udHJvbGxlcihwb3J0X29iaiwgb3B0
aW9ucywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKKyAgICAgICAgYnVpbGRib3Rfb3V0cHV0
PXN5cy5zdGRvdXQsCisgICAgICAgIGNoaWxkX3Byb2Nlc3Nlcz1pbnQob3B0aW9ucy5jaGlsZF9w
cm9jZXNzZXMpLAorICAgICAgICBpc19mdWxseV9wYXJhbGxlbD1vcHRpb25zLmV4cGVyaW1lbnRh
bF9mdWxseV9wYXJhbGxlbCkKKyAgICBpZiBvcHRpb25zLmhlbHBfcHJpbnRpbmc6CisgICAgICAg
IHByaW50ZXIuaGVscF9wcmludGluZygpCisgICAgaWYgb3B0aW9ucy5oZWxwX3RyYWNlOgorICAg
ICAgICBwcmludGVyLmhlbHBfdHJhY2UoKQorICAgIGlmIG9wdGlvbnMuaGVscF9wcmludGluZyBv
ciBvcHRpb25zLmhlbHBfdHJhY2U6CisgICAgICAgIHJldHVybiAwCiAKLSAgICBwb3J0X29iaiA9
IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCiAgICAgZXhlY3V0aXZlID0gRXhl
Y3V0aXZlKCkKIAogICAgIGlmIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246CkBAIC0xNTU4LDgg
KzEyOTAsOCBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgog
ICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3Rvcmll
cyBzaW5jZSB0aGUgb3RoZXIKICAgICAgICAgIyBmaWxlcyBpbiB0aGUgcmVzdWx0cyBkaXJlY3Rv
cnkgYXJlIGV4cGxpY2l0bHkgdXNlZCBmb3IgY3Jvc3MtcnVuCiAgICAgICAgICMgdHJhY2tpbmcu
Ci0gICAgICAgIG1ldGVyLnVwZGF0ZSgiQ2xvYmJlcmluZyBvbGQgcmVzdWx0cyBpbiAlcyIgJQot
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAg
cHJpbnRlci5wcmludF91cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJlc3VsdHMgaW4gJXMiICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKICAg
ICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHBvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQogICAg
ICAgICBwb3NzaWJsZV9kaXJzID0gb3MubGlzdGRpcihsYXlvdXRfdGVzdHNfZGlyKQogICAgICAg
ICBmb3IgZGlybmFtZSBpbiBwb3NzaWJsZV9kaXJzOgpAQCAtMTU2NywxNyArMTI5OSw2IEBAIGRl
ZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgICAgICAg
ICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwg
ZGlybmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfZXJyb3JzPVRy
dWUpCiAKLSAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6Ci0gICAgICAgICMgRklY
TUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQg
KyAxLgotICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IHBvcnRfb2JqLmRlZmF1bHRf
Y2hpbGRfcHJvY2Vzc2VzKCkKLQotICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9w
dGlvbnMsICdjb25maWcnKQotICAgIGlmIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID09IDE6Ci0g
ICAgICAgIHdyaXRlKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29iai5kcml2ZXJfbmFtZSkKLSAg
ICBlbHNlOgotICAgICAgICB3cml0ZSgiUnVubmluZyAlcyAlc3MgaW4gcGFyYWxsZWwiICUgKAot
ICAgICAgICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcywgcG9ydF9vYmouZHJpdmVyX25h
bWUoKSkpCi0KICAgICBpZiBub3Qgb3B0aW9ucy50aW1lX291dF9tczoKICAgICAgICAgaWYgb3B0
aW9ucy5jb25maWd1cmF0aW9uID09ICJEZWJ1ZyI6CiAgICAgICAgICAgICBvcHRpb25zLnRpbWVf
b3V0X21zID0gc3RyKDIgKiBUZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQpAQCAt
MTU4NSw4ICsxMzA2LDE0IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9
VHJ1ZSk6CiAgICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0X21zID0gc3RyKFRlc3RSdW5uZXIu
REVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCiAKICAgICBvcHRpb25zLnNsb3dfdGltZV9vdXRfbXMg
PSBzdHIoNSAqIGludChvcHRpb25zLnRpbWVfb3V0X21zKSkKLSAgICB3cml0ZSgiUmVndWxhciB0
aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVzIiAlCi0gICAgICAgICAgKG9wdGlvbnMu
dGltZV9vdXRfbXMsIG9wdGlvbnMuc2xvd190aW1lX291dF9tcykpCisgICAgcHJpbnRlci5wcmlu
dF9jb25maWcoIlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cgdGVzdCB0aW1lb3V0OiAlcyIgJQor
ICAgICAgICAgICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21zLCBvcHRpb25zLnNsb3dfdGlt
ZV9vdXRfbXMpKQorCisgICAgaWYgaW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9PSAxOgor
ICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUnVubmluZyBvbmUgJXMiICUgcG9ydF9vYmou
ZHJpdmVyX25hbWUpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlJ1
bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMsIHBvcnRfb2JqLmRyaXZlcl9uYW1lKCkpKQogCiAgICAgIyBJ
bmNsdWRlIGFsbCB0ZXN0cyBpZiBub25lIGFyZSBzcGVjaWZpZWQuCiAgICAgbmV3X2FyZ3MgPSBb
XQpAQCAtMTYwMyw5ICsxMzMwLDkgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVz
dWx0cz1UcnVlKToKIAogICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGlmIGl0IGRv
ZXNuJ3QgYWxyZWFkeSBleGlzdC4KICAgICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVjdG9yeShv
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQotICAgIG1ldGVyLnVwZGF0ZSgiQ29sbGVjdGluZyB0
ZXN0cyAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5nIHRlc3RzIC4u
LiIpCiAKLSAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydF9vYmosIG9wdGlvbnMsIG1l
dGVyKQorICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0X29iaiwgb3B0aW9ucywgcHJp
bnRlcikKICAgICB0ZXN0X3J1bm5lci5nYXRoZXJfZmlsZV9wYXRocyhwYXRocykKIAogICAgIGlm
IG9wdGlvbnMubGludF90ZXN0X2ZpbGVzOgpAQCAtMTYxNSw0MyArMTM0Miw0MyBAQCBkZWYgbWFp
bihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICBmb3IgcGxhdGZv
cm1fbmFtZSBpbiBwb3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWVzKCk6CiAgICAgICAgICAgICB0
ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9k
ZT1UcnVlKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBsYXRm
b3JtX25hbWUsIGlzX2RlYnVnX21vZGU9RmFsc2UpCi0gICAgICAgIG1ldGVyLnVwZGF0ZSgiIikK
LSAgICAgICAgcHJpbnQgKCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBtZXNzYWdlcywgZXJyb3JzIG9y
IGV4Y2VwdGlvbnMsIHRoZW4gdGhlICIKLSAgICAgICAgICAgICJsaW50IHN1Y2NlZWRlZC4iKQor
ICAgICAgICBwcmludGVyLndyaXRlKCIiKQorICAgICAgICBfbG9nLmluZm8oIklmIHRoZXJlIGFy
ZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9ucywgIgorICAgICAgICAgICAg
ICAgICAgInRoZW4gdGhlIGxpbnQgc3VjY2VlZGVkLiIpCiAgICAgICAgIHJldHVybiAwCiAKLSAg
ICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAiY29uZmlnIikKLSAgICB3
cml0ZSgiVXNpbmcgcG9ydCAnJXMnIiAlIHBvcnRfb2JqLm5hbWUoKSkKLSAgICB3cml0ZSgiUGxh
Y2luZyB0ZXN0IHJlc3VsdHMgaW4gJXMiICUgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAg
ICBwcmludGVyLnByaW50X2NvbmZpZygiVXNpbmcgcG9ydCAnJXMnIiAlIHBvcnRfb2JqLm5hbWUo
KSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGxhY2luZyB0ZXN0IHJlc3VsdHMgaW4gJXMi
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQog
ICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5lOgotICAgICAgICB3cml0ZSgiUGxhY2luZyBuZXcg
YmFzZWxpbmVzIGluICVzIiAlIHBvcnRfb2JqLmJhc2VsaW5lX3BhdGgoKSkKLSAgICB3cml0ZSgi
VXNpbmcgJXMgYnVpbGQiICUgb3B0aW9ucy5jb25maWd1cmF0aW9uKQorICAgICAgICBwcmludGVy
LnByaW50X2NvbmZpZygiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcnRfb2JqLmJhc2VsaW5lX3BhdGgoKSkKKyAgICBwcmludGVy
LnByaW50X2NvbmZpZygiVXNpbmcgJXMgYnVpbGQiICUgb3B0aW9ucy5jb25maWd1cmF0aW9uKQog
ICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgIHdyaXRlKCJQaXhlbCB0ZXN0cyBl
bmFibGVkIikKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBpeGVsIHRlc3RzIGVuYWJs
ZWQiKQogICAgIGVsc2U6Ci0gICAgICAgIHdyaXRlKCJQaXhlbCB0ZXN0cyBkaXNhYmxlZCIpCi0g
ICAgd3JpdGUoIiIpCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQaXhlbCB0ZXN0cyBk
aXNhYmxlZCIpCisgICAgcHJpbnRlci5wcmludF9jb25maWcoIiIpCiAKLSAgICBtZXRlci51cGRh
dGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCisgICAgcHJpbnRlci5wcmludF91cGRhdGUo
IlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCiAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0
YXRpb25zKHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0gJ0RlYnVnJykKIAotICAg
IG1ldGVyLnVwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKKyAgICBwcmludGVyLnByaW50X3Vw
ZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKICAgICBpZiBub3QgcG9ydF9vYmouY2hlY2tfYnVp
bGQodGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKICAgICAgICAgcmV0dXJuIC0xCiAKLSAgICBt
ZXRlci51cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBk
YXRlKCJTdGFydGluZyBoZWxwZXIgLi4uIikKICAgICBwb3J0X29iai5zdGFydF9oZWxwZXIoKQog
CiAgICAgIyBDaGVjayB0aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzICh0aGVtZXMsIGZvbnRz
LCAuLi4pIGFyZSBjb3JyZWN0LgogICAgIGlmIG5vdCBvcHRpb25zLm5vY2hlY2tfc3lzX2RlcHM6
Ci0gICAgICAgIG1ldGVyLnVwZGF0ZSgiQ2hlY2tpbmcgc3lzdGVtIGRlcGVuZGVuY2llcyAuLi4i
KQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcgc3lzdGVtIGRlcGVuZGVu
Y2llcyAuLi4iKQogICAgICAgICBpZiBub3QgcG9ydF9vYmouY2hlY2tfc3lzX2RlcHModGVzdF9y
dW5uZXIubmVlZHNfaHR0cCgpKToKICAgICAgICAgICAgIHJldHVybiAtMQogCi0gICAgbWV0ZXIu
dXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKLSAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5n
X3dyaXRlcihvcHRpb25zLCAiZXhwZWN0ZWQiKQotICAgIHJlc3VsdF9zdW1tYXJ5ID0gdGVzdF9y
dW5uZXIucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHdyaXRlKQorICAgIHByaW50ZXIu
cHJpbnRfdXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKKyAgICByZXN1bHRfc3VtbWFyeSA9
IHRlc3RfcnVubmVyLnByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dCgpCiAKICAgICBwb3J0
X29iai5zZXR1cF90ZXN0X3J1bigpCiAKQEAgLTE2NjEsNyArMTM4OCw3IEBAIGRlZiBtYWluKG9w
dGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgIGlmIG9wdGlvbnMuZnV6
enlfcGl4ZWxfdGVzdHM6CiAgICAgICAgICAgICB0ZXN0X3J1bm5lci5hZGRfdGVzdF90eXBlKGZ1
enp5X2ltYWdlX2RpZmYuRnV6enlJbWFnZURpZmYpCiAKLSAgICBudW1fdW5leHBlY3RlZF9yZXN1
bHRzID0gdGVzdF9ydW5uZXIucnVuKHJlc3VsdF9zdW1tYXJ5LCBwcmludF9yZXN1bHRzKQorICAg
IG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1bm5lci5ydW4ocmVzdWx0X3N1bW1hcnkp
CiAKICAgICBwb3J0X29iai5zdG9wX2hlbHBlcigpCiAKQEAgLTE2OTgsMjIgKzE0MjUsNyBAQCBk
ZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAjIG9sZC1ydW4td2Via2l0LXRlc3Rz
IGFsc28gYWNjZXB0cyAtYywgLS1jb25maWd1cmF0aW9uIENPTkZJR1VSQVRJT04uCiAgICAgXQog
Ci0gICAgbG9nZ2luZ19vcHRpb25zID0gWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigi
LS1sb2ciLCBhY3Rpb249InN0b3JlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9TE9HX0RFRkFVTFRf
VkFMVUUsCi0gICAgICAgICAgICBoZWxwPSgibG9nIHZhcmlvdXMgdHlwZXMgb2YgZGF0YS4gVGhl
IGFyZ3VtZW50IHZhbHVlIHNob3VsZCBiZSBhICIKLSAgICAgICAgICAgICAgICAgICJjb21tYS1z
ZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgZnJvbTogJXMgKGRlZmF1bHRzIHRvICIKLSAgICAgICAg
ICAgICAgICAgICItLWxvZyAlcykiICUgKExPR19WQUxVRVMsIExPR19ERUZBVUxUX1ZBTFVFKSkp
LAotICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249
InN0b3JlX3RydWUiLAotICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVkZSBk
ZWJ1Zy1sZXZlbCBsb2dnaW5nIiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNv
dXJjZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgaGVscD0ic2hvdyBleHBl
Y3RlZCByZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoIHRlc3QgIiArCi0gICAgICAgICAgICAgICAg
ICIoaW1wbGllcyAtLXZlcmJvc2UpIiksCi0gICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMg
aGFzIGEgLS1zbG93ZXN0IG9wdGlvbiB3aGljaCBqdXN0IHByaW50cwotICAgICAgICAjIHRoZSBz
bG93ZXN0IDEwLgotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1udW0tc2xvdy10ZXN0
cy10by1sb2ciLCBkZWZhdWx0PTUwLAotICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIHNsb3cg
dGVzdHMgd2hvc2UgdGltaW5ncyB0byBwcmludC4iKSwKLSAgICBdCisgICAgbG9nZ2luZ19vcHRp
b25zID0gb3V0cHV0LmxvZ2dpbmdfb3B0aW9ucygpCiAKICAgICAjIEZJWE1FOiBUaGVzZSBvcHRp
b25zIHNob3VsZCBtb3ZlIG9udG8gdGhlIENocm9taXVtUG9ydC4KICAgICBjaHJvbWl1bV9vcHRp
b25zID0gWwpAQCAtMTg4NSw4ICsxNTk3LDE3IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6
CiAgICAgICAgICAgICAgICAgICAgbWlzY19vcHRpb25zICsgcmVzdWx0c19qc29uX29wdGlvbnMg
KwogICAgICAgICAgICAgICAgICAgIG9sZF9ydW5fd2Via2l0X3Rlc3RzX2NvbXBhdCkKICAgICBv
cHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9s
aXN0KQotICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKIAotaWYgJ19f
bWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5w
YXJzZV9hcmdzKGFyZ3MpCisgICAgaWYgb3B0aW9ucy5zb3VyY2VzOgorICAgICAgICBvcHRpb25z
LnZlcmJvc2UgPSBUcnVlCisKKyAgICByZXR1cm4gb3B0aW9ucywgYXJncworCitkZWYgbWFpbigp
OgogICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKCkKLSAgICBzeXMuZXhpdChtYWluKG9w
dGlvbnMsIGFyZ3MpKQorICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwg
b3B0aW9ucykKKyAgICByZXR1cm4gcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQorIAoraWYg
J19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCA5ZmUwZTc0Li4xNzdkMDQyIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTMzLDEyICsz
MywxNyBAQCBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQg
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnJ1bl93ZWJraXRfdGVzdHMgYXMgcnVuX3dlYmtpdF90ZXN0
cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCiAKIAotZGVmIHBhc3NpbmdfcnVu
KGFyZ3MpOgorZGVmIHBhc3NpbmdfcnVuKGFyZ3MsIHBvcnRfb2JqPU5vbmUsIGxvZ2dpbmdfaW5j
bHVkZWQ9RmFsc2UpOgorICAgIGlmIG5vdCBsb2dnaW5nX2luY2x1ZGVkOgorICAgICAgICBhcmdz
LmV4dGVuZChbJy0tcHJpbnQnLCAnbm90aGluZyddKQogICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5f
d2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJncykKLSAgICByZXMgPSBydW5fd2Via2l0X3Rlc3Rz
Lm1haW4ob3B0aW9ucywgYXJncywgRmFsc2UpCisgICAgaWYgcG9ydF9vYmogaXMgTm9uZToKKyAg
ICAgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAg
IHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQogICAg
IHJldHVybiByZXMgPT0gMAogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54118</attachid>
            <date>2010-04-22 18:44:59 -0700</date>
            <delta_ts>2010-04-23 12:59:26 -0700</delta_ts>
            <desc>clean up style nits</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>98160</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxMzY1ZGMzLi42ZTA1MWIxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTAtMDQt
MjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuIAorCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gcmVuYW1lcyAtLWxvZyB0byAtLXByaW50
ICh0byBiZSBzbGlnaHRseSBtb3JlCisgICAgICAgIGRlc2NyaXB0aXZlKS4gLS1sb2cgaXMgcmV0
YWluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgorICAgICAgICBJIGFkZGVkIGJldHRl
ciBoZWxwIG1lc3NhZ2VzIGZvciBwcmludGluZyBhbmQgdHJhY2luZywgaW4KKyAgICAgICAgLS1o
ZWxwLXByaW50aW5nIGFuZCAtLWhlbHAtdHJhY2UuCisKKyAgICAgICAgVGhlIG5ldyBjb2RlIGhh
cyB1bml0IHRlc3RzIQorCisgICAgICAgIFRoZXJlIGlzIHN0aWxsIG1vcmUgY29kZSB0byBiZSBt
b3ZlZCwgYnV0IHRoaXMgcGF0Y2ggaXMgYmlnIGVub3VnaCBhcworICAgICAgICBpdCBpcy4gTmFt
ZWx5LCBzdGlsbCB0byBtb3ZlIGFyZSB0aGUgcHJpbnRpbmcgb2YgdGhlIGFjdHVhbCByZXN1bHRz
CisgICAgICAgIGFuZCB0aGUgdGltaW5nIHN0YXRpc3RpY3MsIHdoaWNoIHNob3VsZCBtb3ZlIGFu
b3RoZXIgMzAwLTQwMCBsaW5lcworICAgICAgICBvdXQgb2YgdGhlIGZpbGUuCisKKyAgICAgICAg
Tm90YWJsZSBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMucHkgYmV5b25kIGNvZGUgc2ltcGx5
IG1vdmluZzoKKyAgICAgICAgKiBNZXRlcmVkU3RyZWFtIGlzIG5vdyBoaWRkZW4gdW5kZXIgdGhl
IG5ldyBvdXRwdXQuQ29udHJvbGxlciBjbGFzcy4KKyAgICAgICAgICBBbGwgdGhlIHJlZmVyZW5j
ZXMgdG8gc2VsZi5fbWV0ZXIgbm93IHBvaW50IHRvIHNlbGYuX3ByaW50ZXIgLiAKKyAgICAgICAg
KiBBbGwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gb3V0cHV0LkNvbnRyb2xsZXIK
KyAgICAgICAgKiBJbnN0ZWFkIG9mIHVzaW5nIHdyaXRlKCkgbGFtYmRhcyB0byBjb250cm9sIHdo
YXQgaXMgYW5kIGlzbid0CisgICAgICAgICAgcHJpbnRlZCwgd2UgdXNlIHNlcGFyYXRlIG1ldGhv
ZHMgb24gdGhlIHByaW50ZXIgb2JqZWN0LiBUaGlzIHdpbGwKKyAgICAgICAgICBtYWtlIGl0IGVh
c2llciB0byBncmVwIHdoaWNoIHByaW50IHN0YXRlbWVudHMgYXJlIHByaW50ZWQKKyAgICAgICAg
ICB1bmRlciBwcm90ZWN0aW9uIG9mIGVhY2ggZmxhZy4KKyAgICAgICAgKiBUaGUgcHJpbnRfcmVz
dWx0cyBmbGFnIEkgYWRkZWQgYSBmZXcgcmV2cyBiYWNrIHRvIHN1cHByZXNzIHByaW50aW5nCisg
ICAgICAgICAgaW4gdGhlIHVuaXQgdGVzdHMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCAtLXByaW50
IG5vdGhpbmcuCisgICAgICAgICogVGhlIFJlc3VsdFN1bW1hcnkgY2xhc3Mgbm93IHN0b3JlcyB0
aGUgZW50aXJlIFRlc3RSZXN1bHQgZm9yIGVhY2gKKyAgICAgICAgICB0ZXN0LCBub3QganVzdCB0
aGUgYWN0dWFsIHJlc3VsdCB0eXBlLgorICAgICAgICAqIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jl
c3VsdHMoKSBnb3QgbW92ZWQgZnJvbSBhIG1ldGhvZCBvbiBUZXN0UnVubmVyCisgICAgICAgICAg
dG8gYSBzdGFuZGFsb25lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBtb3ZlIGludG8gYSBzZXBhcmF0
ZSBmaWxlCisgICAgICAgICAgYWxvbmcgd2l0aCB0aGUgUmVzdWx0U3VtbWFyeSBjbGFzcyBhbmQg
dGhlIFRlc3RSZXN1bHQgY2xhc3MKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzgwMTgKKzplCisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtp
dC10ZXN0czoKKyAgICAgICAgICAtIHVwZGF0ZSB0byBuZXcgZW50cnkgcG9pbnRzIGluIHJ1bl93
ZWJraXRfdGVzdHMucHkKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weToKKyAgICAgICAgICAtIGZpeCBhIG1pbm9y
IG5pdCB3aGVyZSB3ZSB3ZXJlIHByaW50aW5nIGFuIGVtcHR5IHN0cmluZyB3aGVyZQorICAgICAg
ICAgICAgd2UgZGlkbid0IG5lZWQgdG8KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9vdXRwdXQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1dF91bml0dGVzdC5w
eTogQWRkZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rl
c3QucHk6CisgICAgICAgICAgLSBpbXBsZW1lbnQgcmVsYXRpdmVfdGVzdF9maWxlbmFtZSgpIGFu
ZCBleHBlY3RlZF9maWxlbmFtZSgpIHNvCisgICAgICAgICAgICB3ZSBjYW4gdGVzdCBwcmludGlu
ZyB1bmV4cGVjdGVkIHJlc3VsdHMgaW4gYSBwbGF0Zm9ybS1uZXV0cmFsCisgICAgICAgICAgICB3
YXkKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3J1bl93ZWJraXRfdGVzdC5weToKKyAgICAg
ICAgICAtIG1vdmUgYSBsb3Qgb2YgdGhlIHByaW50aW5nIGNvZGUgaW50byBvdXRwdXQucHkKKyAg
ICAgICAgICAtIGNoYW5nZSB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgZXhwb3J0ZWQgZW50cnkgcG9p
bnRzIGZvciBlYXNpZXIKKyAgICAgICAgICAgIHVuaXQgdGVzdGluZworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgICAtIHVw
ZGF0ZSB3LyBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMgZW50cnkgcG9pbnRzLgorCiAyMDEw
LTA0LTIyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVu
LXdlYmtpdC10ZXN0cyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMK
aW5kZXggMmViZTFkYS4uMDcyOGVlMCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9u
ZXctcnVuLXdlYmtpdC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Vi
a2l0LXRlc3RzCkBAIC0zMyw1ICszMyw0IEBAIGltcG9ydCBzeXMKIGltcG9ydCB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyBhcyBydW5fd2Via2l0X3Rlc3RzCiAKIGlmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVz
dHMucGFyc2VfYXJncygpCi0gICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKG9wdGlv
bnMsIGFyZ3MpKQorICAgIHN5cy5leGl0KHJ1bl93ZWJraXRfdGVzdHMubWFpbigpKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQppbmRleCA5MzBiOWU0
Li5hMzNmYzNhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0
cmVhbS5weQpAQCAtMTExLDcgKzExMSw4IEBAIGNsYXNzIE1ldGVyZWRTdHJlYW06CiAKICAgICAg
ICAgIyBQcmludCB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiBiYWNrc3BhY2VzIHRvIGVyYXNlIHRo
ZSBwcmV2aW91cwogICAgICAgICAjIG1lc3NhZ2UuCi0gICAgICAgIHNlbGYuX3N0cmVhbS53cml0
ZSgiXGIiICogbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSkKKyAgICAgICAgaWYgbGVuKHNlbGYuX2xh
c3RfdXBkYXRlKToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSgiXGIiICogbGVuKHNl
bGYuX2xhc3RfdXBkYXRlKSkKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHN0cikKICAgICAg
ICAgbnVtX3JlbWFpbmluZyA9IGxlbihzZWxmLl9sYXN0X3VwZGF0ZSkgLSBsZW4oc3RyKQogICAg
ICAgICBpZiBudW1fcmVtYWluaW5nID4gMDoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1dC5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1
dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIxMDA3Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2Uvb3V0cHV0LnB5CkBAIC0wLDAgKzEsNDI5IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJQYWNrYWdlIHRoYXQgaGFuZGxlcyBub24tZGVi
dWcsIG5vbi1maWxlIG91dHB1dCBmb3IgcnVuLXdlYmtpdC10ZXN0cy4iIiIKKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcGRiCisKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhw
ZWN0YXRpb25zCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rl
c3RzLnByaW50ZXIiKQorCitUZXN0RXhwZWN0YXRpb25zRmlsZSA9IHRlc3RfZXhwZWN0YXRpb25z
LlRlc3RFeHBlY3RhdGlvbnNGaWxlCisKK1BSSU5UX0RFRkFVTFQgPSAoIm1pc2Msb25lLWxpbmUt
cHJvZ3Jlc3Msb25lLWxpbmUtc3VtbWFyeSx1bmV4cGVjdGVkLCIKKyAgICAgICAgICAgICAgICAg
InVuZXhwZWN0ZWQtcmVzdWx0cyx1cGRhdGVzIikKK0hFTFBfUFJJTlRJTkcgPSAiIiIKK091dHB1
dCBmb3IgcnVuLXdlYmtpdC10ZXN0cyBpcyBjb250cm9sbGVkIGJ5IGEgY29tbWEtc2VwYXJhdGVk
IGxpc3Qgb2YKK3ZhbHVlcyBwYXNzZWQgdG8gLS1wcmludC4gIFZhbHVlcyBlaXRoZXIgaW5mbHVl
bmNlIHRoZSBvdmVyYWxsIG91dHB1dCwgb3IKK3RoZSBvdXRwdXQgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgcnVuLCBkdXJpbmcgdGhlIHJ1biwgb3IgYXQgdGhlIGVuZDoKKworT3ZlcmFsbCBvcHRp
b25zOgorICAgIG5vdGhpbmcgICAgICAgICAgICAgZG9uJ3QgcHJpbnQgYW55dGhpbmcKKyAgICBl
dmVyeXRoaW5nICAgICAgICAgIHByaW50IGV2ZXJ5dGhpbmcKKyAgICBtaXNjICAgICAgICAgICAg
ICAgIHByaW50IG1pc2NlbGxhbmVvdXMgdGhpbmdzIGxpa2UgYmxhbmsgbGluZXMKKworQXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgcnVuOgorICAgIGNvbmZpZyAgICAgICAgICAgICAgcHJpbnQgdGhl
IHRlc3QgcnVuIGNvbmZpZ3VyYXRpb24KKyAgICBleHBlY3RlZCAgICAgICAgICAgIHByaW50IGEg
c3VtbWFyeSBvZiB3aGF0IGlzIGV4cGVjdGVkIHRvIGhhcHBlbgorICAgICAgICAgICAgICAgICAg
ICAgICAgKCMgcGFzc2VzLCAjIGZhaWx1cmVzLCBldGMuKQorCitEdXJpbmcgdGhlIHJ1bjoKKyAg
ICBkZXRhaWxlZC1wcm9ncmVzcyAgIHByaW50IG9uZSBkb3QgcGVyIHRlc3QgY29tcGxldGVkCisg
ICAgb25lLWxpbmUtcHJvZ3Jlc3MgICBwcmludCBhIG9uZS1saW5lIHByb2dyZXNzIGJhcgorICAg
IHVuZXhwZWN0ZWQgICAgICAgICAgcHJpbnQgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyB0aGV5
IG9jY3VyCisgICAgdXBkYXRlcyAgICAgICAgICAgICBwcmludCB1cGRhdGVzIG9uIHdoaWNoIHN0
YWdlIGlzIGV4ZWN1dGluZworCitBdCB0aGUgZW5kIG9mIHRoZSBydW46CisgICAgYWN0dWFsICAg
ICAgICAgICAgICBwcmludCBhIHN1bW1hcnkgb2YgdGhlIGFjdHVhbCByZXN1bHRzCisgICAgdGlt
aW5nICAgICAgICAgICAgICBwcmludCB0aW1pbmcgc3RhdGlzdGljcworICAgIHVuZXhwZWN0ZWQt
cmVzdWx0cyAgcHJpbnQgYSBsaXN0IG9mIHRoZSB0ZXN0cyB3aXRoIHVuZXhwZWN0ZWQgcmVzdWx0
cworICAgIG9uZS1saW5lLXN1bW1hcnkgICAgcHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRo
ZSBydW4KKworTm90ZXM6CisgICAgLSAnZGV0YWlsZWQtcHJvZ3Jlc3MnIGNhbiBvbmx5IGJlIHVz
ZWQgaWYgcnVubmluZyBpbiBhIHNpbmdsZSB0aHJlYWQKKyAgICAgICh1c2luZyAtLWNoaWxkLXBy
b2Nlc3Nlcz0xKSBvciBpZiBydW5uaW5nIHdpdGgKKyAgICAgICAtLWV4cGVyaW1lbnRhbC1mdWxs
eS1wYXJhbGxlbAorICAgIC0gaWYgLS10cmFjZSAndW5leHBlY3RlZCcgaXMgc3BlY2lmaWVkLCBp
dCB3aWxsIG92ZXJyaWRlCisgICAgICAgLS1wcmludCAndW5leHBlY3RlZAorICAgIC0gaWYgLS10
cmFjZSAnZXZlcnl0aGluZycgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIG92ZXJyaWRlIHRoZSAnLXBy
b2dyZXNzJworICAgICAgb3B0aW9ucworCitUaGUgZGVmYXVsdCBpcyAtLXByaW50ICclcycuCisi
IiIgJSBQUklOVF9ERUZBVUxUCisKK1RSQUNFX0RFRkFVTFQgPSAibm90aGluZyIKKworSEVMUF9U
UkFDRSA9ICIiIgorLS10cmFjZSBwcmludHMgZGV0YWlsZWQgZXhwZWN0YXRpb25zIGFuZCByZXN1
bHRzIGZvciBlYWNoIHRlc3QgYXMgaXQKK2V4ZWN1dGVzLiBWYWxpZCBvcHRpb25zIGFyZToKKwor
ICBub3RoaW5nICAgICBkb24ndCB0cmFjZSBhbnkgcmVzdWx0cworICBldmVyeXRoaW5nICB0cmFj
ZSBldmVyeSByZXN1bHQKKyAgdW5leHBlY3RlZCAgdHJhY2Ugb25seSB1bmV4cGVjdGVkIHJlc3Vs
dHMKKworVGhlIC0tdHJhY2Ugc2V0dGluZyB3aWxsIG92ZXJyaWRlIHRoZSBvdXRwdXQgYmVoYXZp
b3IgY29udHJvbGxlZCBieSAtLXByaW50LgorRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAtLWhl
bHAtcHJpbnRpbmcuCisKK1RoZSBkZWZhdWx0IGlzIC0tdHJhY2UgJXMuCisiIiIgJSBUUkFDRV9E
RUZBVUxUCisKKworZGVmIGxvZ2dpbmdfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByaW50IiwgZGVzdD0ibG9nIiwKKyAgICAgICAgICAg
IGRlZmF1bHQ9UFJJTlRfREVGQVVMVCwKKyAgICAgICAgICAgIGhlbHA9KCJjb250cm9scyBwcmlu
dCBvdXRwdXQgb2YgdGVzdCBydW4uICIKKyAgICAgICAgICAgICAgICAgICJVc2UgLS1oZWxwLXBy
aW50aW5nIGZvciBtb3JlLiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbG9n
IiwgZGVzdD0ibG9nIiwKKyAgICAgICAgICAgIGhlbHA9IihERVBSRUNBVEVELiBzYW1lIGFzIC0t
cHJpbnQpIiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRyYWNlIiwKKyAgICAg
ICAgICAgIGRlZmF1bHQ9VFJBQ0VfREVGQVVMVCwKKyAgICAgICAgICAgIGhlbHA9KCJjb250cm9s
cyB0ZXN0IHRyYWNpbmcgb3V0cHV0IG9mIHRlc3QgcnVuLiAiCisgICAgICAgICAgICAgICAgICAi
VXNlIC0taGVscC10cmFjZSBmb3IgbW9yZS4iKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLWhlbHAtcHJpbnRpbmciLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAg
aGVscD0ic2hvdyBkZXRhaWxlZCBoZWxwIG9uIGNvbnRyb2xsaW5nIHByaW50IG91dHB1dCIpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1oZWxwLXRyYWNlIiwgYWN0aW9uPSJzdG9y
ZV90cnVlIiwKKyAgICAgICAgICAgIGhlbHA9InNob3cgZGV0YWlsZWQgaGVscCBvbiBjb250cm9s
bGluZyB0ZXN0IHRyYWNpbmciKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi12Iiwg
Ii0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBkZWZhdWx0PUZh
bHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmciKSwKKyAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oIi0tc291cmNlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAg
ICAgICBoZWxwPSgic2hvdyBleHBlY3RlZCByZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoIHRlc3Qg
IgorICAgICAgICAgICAgICAgICAiKGltcGxpZXMgLS12ZXJib3NlKSIpKSwKKyAgICAgICAgIyBv
bGQtcnVuLXdlYmtpdC10ZXN0cyBoYXMgYSAtLXNsb3dlc3Qgb3B0aW9uIHdoaWNoIGp1c3QgcHJp
bnRzCisgICAgICAgICMgdGhlIHNsb3dlc3QgMTAuCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLW51bS1zbG93LXRlc3RzLXRvLWxvZyIsIGRlZmF1bHQ9NTAsCisgICAgICAgICAgICBo
ZWxwPSJOdW1iZXIgb2Ygc2xvdyB0ZXN0cyB3aG9zZSB0aW1pbmdzIHRvIHByaW50LiIpLAorICAg
IF0KKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgbWV0ZXIpOgorICAgICIiIkNv
bmZpZ3VyZXMgdGhlIGxvZ2dpbmcgc3lzdGVtLiIiIgorICAgIGxvZ19mbXQgPSAnJShtZXNzYWdl
KXMnCisgICAgbG9nX2RhdGVmbXQgPSAnJXklbSVkICVIOiVNOiVTJworICAgIGxvZ19sZXZlbCA9
IGxvZ2dpbmcuSU5GTworICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgbG9nX2ZtdCA9
ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKS00ZCAlKGxldmVsbmFtZSlzICcK
KyAgICAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMnKQorICAgICAgICBsb2dfbGV2ZWwgPSBs
b2dnaW5nLkRFQlVHCisKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZlbCwg
Zm9ybWF0PWxvZ19mbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PWxvZ19kYXRl
Zm10LCBzdHJlYW09bWV0ZXIpCisKKworY2xhc3MgQ29udHJvbGxlcihvYmplY3QpOgorICAgICIi
IkNsYXNzIGhhbmRsaW5nIGFsbCBub24tZGVidWcgb3V0cHV0IGRvbmUgYnkgcnVuLXdlYmtpdC10
ZXN0cy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcmVndWxhcl9v
dXRwdXQsIGJ1aWxkYm90X291dHB1dCwKKyAgICAgICAgICAgICAgICAgY2hpbGRfcHJvY2Vzc2Vz
LCBpc19mdWxseV9wYXJhbGxlbCk6CisgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbSA9IGJ1
aWxkYm90X291dHB1dAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBz
ZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9zdHJlYW0gPSByZWd1bGFyX291dHB1dAor
CisgICAgICAgICMgVGhlc2UgYXJlIHVzZWQgZm9yIC0tbG9nIGRldGFpbGVkLXByb2dyZXNzIHRv
IHRyYWNrIHN0YXR1cyBieQorICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fY3Vy
cmVudF9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIK
KyAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKKworICAgICAgICBzZWxmLl9t
ZXRlciA9IG1ldGVyZWRfc3RyZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9v
dXRwdXQpCisgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYuX29wdGlvbnMsIHNlbGYuX21l
dGVyKQorCisgICAgICAgIGlmIChjaGlsZF9wcm9jZXNzZXMgIT0gMSBhbmQgbm90IGlzX2Z1bGx5
X3BhcmFsbGVsIGFuZAorICAgICAgICAgICAgJ2RldGFpbGVkLXByb2dyZXNzJyBpbiBvcHRpb25z
LmxvZyk6CisgICAgICAgICAgICBfbG9nLndhcm4oIkNhbiBvbmx5IHByaW50ICdkZXRhaWxlZC1w
cm9ncmVzcycgaWYgcnVubmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgIndpdGggLS1jaGls
ZC1wcm9jZXNzZXM9MSBvciAiCisgICAgICAgICAgICAgICAgICAgICAgIndpdGggLS1leHBlcmlt
ZW50YWwtZnVsbHktcGFyYWxsZWwuICIKKyAgICAgICAgICAgICAgICAgICAgICAiVXNpbmcgJ29u
ZS1saW5lLXByb2dyZXNzJyBpbnN0ZWFkLiIpCisgICAgICAgICAgICBvcHRpb25zLmxvZyA9IG9w
dGlvbnMubG9nLnJlcGxhY2UoJ2RldGFpbGVkLXByb2dyZXNzJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lLWxpbmUtcHJvZ3Jlc3MnKQorICAgICAg
ICBzZWxmLl9zd2l0Y2hlcyA9IG9wdGlvbnMubG9nLnNwbGl0KCcsJykKKworICAgIGRlZiBfZXhp
dF9lYXJseShzZWxmLCBtZXRob2QpOgorICAgICAgICBpZiAnbm90aGluZycgaW4gc2VsZi5fc3dp
dGNoZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiAnZXZlcnl0aGluZycg
aW4gc2VsZi5fc3dpdGNoZXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0
dXJuIG1ldGhvZCBub3QgaW4gc2VsZi5fc3dpdGNoZXMKKworICAgIGRlZiBoZWxwX3ByaW50aW5n
KHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZShIRUxQX1BSSU5USU5HKQorCisgICAgZGVmIGhl
bHBfdHJhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlKEhFTFBfVFJBQ0UpCisKKyAgICBk
ZWYgcHJpbnRfYWN0dWFsKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHko
J2FjdHVhbCcpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0
cmVhbS53cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgcHJpbnRfY29uZmlnKHNlbGYsIG1z
Zyk6CisgICAgICAgIHNlbGYud3JpdGUobXNnLCAnY29uZmlnJykKKworICAgIGRlZiBwcmludF9l
eHBlY3RlZChzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2V4cGVjdGVkJykK
KworICAgIGRlZiBwcmludF90aW1pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53cml0ZSht
c2csICd0aW1pbmcnKQorCisgICAgZGVmIHByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZiwgdG90
YWwsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRo
ZSB0ZXN0IHJ1biB0byBzdGRvdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0b3RhbDog
dG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgorICAgICAgICAgIGV4cGVjdGVkOiBudW1iZXIgb2Yg
ZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fZXhpdF9lYXJs
eSgnb25lLWxpbmUtc3VtbWFyeScpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdW5l
eHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKKyAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgor
ICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIkFsbCAlZCB0ZXN0cyByYW4gYXMgZXhwZWN0
ZWQuXG4iICUgZXhwZWN0ZWQpCisgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKKyAgICAgICAg
ICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4n
dDpcblxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIlxuJWQgdGVzdHMgcmFu
IGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGV4cGVjdGVkLCB1bmV4cGVjdGVkKSkKKworICAgIGRlZiBwcmludF90ZXN0X3Jlc3Vs
dChzZWxmLCByZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKToKKyAgICAgICAgIiIi
UHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJpbnQuIiIi
CisgICAgICAgIGlmICgnZXZlcnl0aGluZycgaW4gc2VsZi5fb3B0aW9ucy50cmFjZSBvcgorICAg
ICAgICAgICAgJ3VuZXhwZWN0ZWQnIGluIHNlbGYuX29wdGlvbnMudHJhY2UgYW5kIG5vdCBleHBl
Y3RlZCk6CisgICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCwgZXhwX3N0
ciwgZ290X3N0cikKKyAgICAgICAgZWxpZiAobm90IGV4cGVjdGVkIGFuZAorICAgICAgICAgICAg
ICAoJ3VuZXhwZWN0ZWQnIGluIHNlbGYuX3N3aXRjaGVzIG9yCisgICAgICAgICAgICAgICAnZXZl
cnl0aGluZycgaW4gc2VsZi5fc3dpdGNoZXMpIGFuZAorICAgICAgICAgICAgICBub3QgJ2RldGFp
bGVkLXByb2dyZXNzJyBpbiBzZWxmLl9zd2l0Y2hlcyk6CisgICAgICAgICAgICBzZWxmLl9wcmlu
dF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHJlc3VsdCkKKworICAgIGRlZiBfcHJpbnRfdGVzdF90
cmFjZShzZWxmLCByZXN1bHQsIGV4cF9zdHIsIGdvdF9zdHIpOgorICAgICAgICAiIiJQcmludCBk
ZXRhaWxlZCByZXN1bHRzIG9mIGEgdGVzdCAodHJpZ2dlcmVkIGJ5IC0tbG9nIHRyYWNlKS4KKyAg
ICAgICAgRm9yIGVhY2ggdGVzdCwgcHJpbnQ6CisgICAgICAgICAgIC0gbG9jYXRpb24gb2YgdGhl
IGV4cGVjdGVkIGJhc2VsaW5lcworICAgICAgICAgICAtIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAg
ICAgICAgLSBhY3R1YWwgcmVzdWx0CisgICAgICAgICAgIC0gdGltaW5nIGluZm8KKyAgICAgICAg
IiIiCisgICAgICAgIGZpbGVuYW1lID0gcmVzdWx0LmZpbGVuYW1lCisgICAgICAgIHRlc3RfbmFt
ZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAg
c2VsZi5fd3JpdGUoJ3RyYWNlOiAlc1xuJyAlIHRlc3RfbmFtZSkKKyAgICAgICAgc2VsZi5fd3Jp
dGUoJyAgdHh0OiAlc1xuJyAlCisgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0
ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykpKQorICAgICAgICBwbmdfZmlsZSA9IHNlbGYu
X3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKyAgICAgICAgaWYgb3Mu
cGF0aC5leGlzdHMocG5nX2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJyAgcG5nOiAl
c1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUoZmlsZW5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd3Jp
dGUoJyAgcG5nOiA8bm9uZT5cbicpCisgICAgICAgIHNlbGYuX3dyaXRlKCcgIGV4cDogJXMnICUg
ZXhwX3N0cikKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgZ290OiAlcycgJSBnb3Rfc3RyKQorICAg
ICAgICBzZWxmLl93cml0ZSgnIHRvb2s6ICUtLjNmJyAlIHJlc3VsdC50ZXN0X3J1bl90aW1lKQor
ICAgICAgICBzZWxmLl93cml0ZSgnJykKKworICAgIGRlZiBfcHJpbnRfdW5leHBlY3RlZF90ZXN0
X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJQcmludHMgb25lIHVuZXhwZWN0ZWQg
dGVzdCByZXN1bHQgbGluZS4iIiIKKyAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxl
LkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHQudHlwZV1bMF0KKyAgICAgICAgc2VsZi53
cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVkICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShyZXN1bHQuZmlsZW5hbWUpLAorICAgICAgICAg
ICAgICAgICAgICBkZXNjKSwgInVuZXhwZWN0ZWQiKQorCisgICAgZGVmIHByaW50X3Byb2dyZXNz
KHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeWluZywgdGVzdF9saXN0KToKKyAgICAgICAgIiIi
UHJpbnQgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgdGVzdHMgYXMgZGV0ZXJtaW5lZCBieSAtLXByaW50
LiIiIgorICAgICAgICBpZiAoc2VsZi5fZXhpdF9lYXJseSgnZGV0YWlsZWQtcHJvZ3Jlc3MnKSBh
bmQKKyAgICAgICAgICAgIHNlbGYuX2V4aXRfZWFybHkoJ29uZS1saW5lLXByb2dyZXNzJykpOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgJ2RldGFpbGVkLXByb2dyZXNzJyBpbiBz
ZWxmLl9zd2l0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X2RldGFpbGVkX3Byb2dyZXNz
KHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2xpc3QpCisgICAgICAgIGVsaWYgJ29uZS1saW5lLXByb2dy
ZXNzJyBpbiBzZWxmLl9zd2l0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5l
X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCByZXRyeWluZykKKworICAgICAgICBpZiByZXN1bHRf
c3VtbWFyeS5yZW1haW5pbmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgn
JykKKworICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1h
cnksIHJldHJ5aW5nKToKKyAgICAgICAgIiIiRGlzcGxheXMgdGhlIHByb2dyZXNzIHRocm91Z2gg
dGhlIHRlc3QgcnVuLiIiIgorICAgICAgICBwZXJjZW50X2NvbXBsZXRlID0gMTAwICogKHJlc3Vs
dF9zdW1tYXJ5LmV4cGVjdGVkICsKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0
ZWQpIC8gcmVzdWx0X3N1bW1hcnkudG90YWwKKyAgICAgICAgYWN0aW9uID0gIlRlc3RpbmciCisg
ICAgICAgIGlmIHJldHJ5aW5nOgorICAgICAgICAgICAgYWN0aW9uID0gIlJldHJ5aW5nIgorICAg
ICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMgKCVkJSUpOiAlZCByYW4gYXMgZXhwZWN0ZWQs
ICVkIGRpZG4ndCwiCisgICAgICAgICAgICAiICVkIGxlZnQiICUgKGFjdGlvbiwgcGVyY2VudF9j
b21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCisgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKSkKKworICAgIGRlZiBf
cHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRlc3RfbGlzdCk6
CisgICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0cHV0IHdoZXJlIHdlIHBy
aW50IHRoZSBkaXJlY3RvcnkgbmFtZQorICAgICAgICBhbmQgb25lIGRvdCBmb3IgZWFjaCBjb21w
bGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKKyAgICAgICAgIi0tbG9nIGRldGFpbGVk
LXByb2dyZXNzIi4iIiIKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBs
ZW4odGVzdF9saXN0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG5leHRfdGVzdCA9
IHRlc3RfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICBuZXh0X2RpciA9
IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShuZXh0X3Rlc3QpKQorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0
ciA9PSAiIjoKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAi
ICUgKG5leHRfZGlyKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rpcgor
CisgICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgorICAg
ICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6CisgICAgICAgICAgICAg
ICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogLiIg
JSAobmV4dF9kaXIpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rp
cgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0ciArPSAiLiIKKworICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRfc3Vt
bWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCisgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQn
IGluIHNlbGYuX3N3aXRjaGVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgi
JXNcbiIgJSBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikKKyAgICAgICAgICAgICAgICB0ZXN0
X3Jlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbbmV4dF90ZXN0XQorICAgICAgICAgICAg
ICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQodGVzdF9yZXN1bHQpCisgICAg
ICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSBzZWxmLl9j
dXJyZW50X2RpcgorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyICs9IDEK
KyAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPT0gbGVuKHRlc3RfbGlz
dCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbmV4dF90ZXN0ID0gdGVz
dF9saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAgICAgICAgICBuZXh0X2RpciA9
IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKworICAgICAgICBpZiByZXN1bHRfc3VtbWFyeS5yZW1h
aW5pbmc6CisgICAgICAgICAgICByZW1haW5fc3RyID0gIiAoJWQpIiAlIChyZXN1bHRfc3VtbWFy
eS5yZW1haW5pbmcpCisgICAgICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMlcyIgJSAo
c2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtYWluX3N0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz
ZWxmLl9tZXRlci5wcm9ncmVzcygiJXMiICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkK
KworICAgIGRlZiBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1
bHRzKToKKyAgICAgICAgIiIiUHJpbnRzIGEgbGlzdCBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHRz
IHRvIHRoZSBidWlsZGJvdCBzdHJlYW0uIiIiCisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHko
J3VuZXhwZWN0ZWQtcmVzdWx0cycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGFz
c2VzID0ge30KKyAgICAgICAgZmxha3kgPSB7fQorICAgICAgICByZWdyZXNzaW9ucyA9IHt9CisK
KyAgICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cydd
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3Bs
aXQoIiAiKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0
KCIgIikKKyAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKKyAgICAgICAgICAgICAg
ICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2Rp
Y3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxpZiAnVElN
RU9VVCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9s
aXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
RXhwZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWwsIGJ1dCBwYXNz
ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAg
ICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAgICAgICAgICMgV2UgZ3Jv
dXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgorICAgICAg
ICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBdLCB0ZXN0KQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMo
cmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisgICAgICAgIGlmIGxlbihw
YXNzZXMpIG9yIGxlbihmbGFreSkgb3IgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIHNl
bGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihwYXNzZXMp
OgorICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiJXM6ICglZClcbiIgJSAo
a2V5LCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAg
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVp
bGRib3Rfc3RyZWFtLndyaXRlKCIgICVzXG4iICUgdGVzdCkKKyAgICAgICAgICAgICAgICBzZWxm
Ll9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90
X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihmbGFreSk6CisgICAgICAgICAg
ICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQ
VElPTlMKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5Lml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9O
U1trZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3Jp
dGUoIlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAoJWQpXG4iCisgICAgICAgICAgICAgICAgICAg
ICUgKGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAg
ICB0ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ11bdGVz
dF0KKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0WydhY3R1YWwnXS5zcGxpdCgi
ICIpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0WydleHBlY3RlZCddLnNw
bGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0Zp
bGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgICAgICBuZXdfZXhw
ZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXMiICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25z
X2xpc3QpKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxu
IikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAg
ICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKKyAgICAgICAgICAgIGZv
ciBrZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0K
KyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoCisgICAgICAgICAg
ICAgICAgICAgICJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICglZClcbiIgJSAoCisgICAg
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAg
ICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIg
ICVzID0gJXNcbiIgJSAodGVzdCwga2V5KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJv
dF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53
cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10p
IGFuZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIiVzXG4iICUgIi0iICogNzgpCisKKyAgICBkZWYgcHJpbnRfdXBkYXRlKHNl
bGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHkoJ3VwZGF0ZXMnKToKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUobXNnKQorCisgICAgZGVm
IHdyaXRlKHNlbGYsIG1zZywgb3B0aW9uPSJtaXNjIik6CisgICAgICAgIGlmIHNlbGYuX2V4aXRf
ZWFybHkob3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl93cml0ZSgi
JXNcbiIgJSBtc2cpCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYu
X21ldGVyLnVwZGF0ZSgiJXMiICUgbXNnKQorCisjCisjIFV0aWxpdHkgcm91dGluZXMgdXNlZCBi
eSB0aGUgQ29udHJvbGxlciBjbGFzcworIworCisKK2RlZiBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMo
ZGljdCwga2V5LCB2YWx1ZSk6CisgICAgZGljdC5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2
YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL291dHB1dF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL291dHB1dF91bml0dGVzdC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmE1MDU0Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2Uvb3V0cHV0X3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNTI3IEBACisjIS91c3IvYmlu
L3B5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlVuaXQgdGVzdHMgZm9yIG91dHB1dC5weS4i
IiIKKworaW1wb3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0
dGVzdAoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0
IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBv
dXRwdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBk
dW1wX3JlbmRlcl90cmVlX3RocmVhZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKKworCitjbGFzcyBBcnJheVN0cmVh
bShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fY29udGVu
dHMgPSBbXQorCisgICAgZGVmIHdyaXRlKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuX2NvbnRl
bnRzLmFwcGVuZChtc2cpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fY29udGVudHMKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fY29udGVu
dHMgPSBbXQorCisgICAgZGVmIGVtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gKGxlbihzZWxm
Ll9jb250ZW50cykgPT0gMCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcGFzcwor
CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxBcnJheVN0cmVhbTog
JyArIHN0cihzZWxmLl9jb250ZW50cykgKyAnPicKKworCitkZWYgZ2V0X29wdGlvbnMoYXJncyk6
CisgICAgbG8gPSBvdXRwdXQubG9nZ2luZ19vcHRpb25zKCkKKyAgICBvcHRpb25fcGFyc2VyID0g
b3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PWxvKQorICAgIHJldHVybiBvcHRpb25f
cGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworCitkZWYgZ2V0X3Jlc3VsdChmaWxlbmFtZSwgcmVz
dWx0X3R5cGU9dGVzdF9leHBlY3RhdGlvbnMuUEFTUywgcnVuX3RpbWU9MCk6CisgICAgZmFpbHVy
ZXMgPSBbXQorICAgIGlmIHJlc3VsdF90eXBlID09IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQ6
CisgICAgICAgIGZhaWx1cmVzID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKV0KKyAg
ICBlbGlmIHJlc3VsdF90eXBlID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIOgorICAgICAgICBm
YWlsdXJlcyA9IFt0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpXQorICAgIHRyID0gZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQuVGVzdFJlc3VsdChmaWxlbmFtZSwgZmFpbHVyZXMsIHJ1bl90aW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1l
X2Zvcl9hbGxfZGlmZnM9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZV9mb3JfZGlmZnM9MCkKKyAgICByZXR1cm4gdHIKKworCitkZWYgZ2V0X3Jlc3Vs
dF9zdW1tYXJ5KHBvcnRfb2JqLCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnNfc3RyKToKKyAgICBl
eHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAorICAgICAg
ICBwb3J0X29iaiwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zX3N0ciwKKyAgICAgICAgcG9ydF9v
YmoudGVzdF9wbGF0Zm9ybV9uYW1lKCksIGlzX2RlYnVnX21vZGU9RmFsc2UsCisgICAgICAgIGlz
X2xpbnRfbW9kZT1GYWxzZSwgdGVzdHNfYXJlX3ByZXNlbnQ9RmFsc2UpCisKKyAgICBycyA9IHJ1
bl93ZWJraXRfdGVzdHMuUmVzdWx0U3VtbWFyeShleHBlY3RhdGlvbnMsIHRlc3RfZmlsZXMpCisg
ICAgcmV0dXJuIHJzLCBleHBlY3RhdGlvbnMKKworCitjbGFzcyBUZXN0RnVuY3Rpb25zKHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfbG9nZ2luZyhzZWxmKToKKyAg
ICAgICAgIyBGSVhNRTogV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byByZXNldCB0aGUgYmFz
aWMgbG9nZ2VyLgorICAgICAgICAjIEZJWE1FOiBJZiBvdGhlciB0ZXN0aW5nIGNsYXNzZXMgY2Fs
bCBsb2dnaW5nLmJhc2ljQ29uZmlnKCkgdGhlbgorICAgICAgICAjIEZJWE1FOiB0aGVzZSBjYWxs
cyBiZWNvbWUgbm8tb3BzIGFuZCB3ZSBjYW4ndCBjb250cm9sIHRoZQorICAgICAgICAjIEZJWE1F
OiBjb25maWd1cmF0aW9uIHRvIHRlc3QgdGhpbmdzIHByb3Blcmx5LgorICAgICAgICBvcHRpb25z
LCBhcmdzID0gZ2V0X29wdGlvbnMoW10pCisgICAgICAgIHN0cmVhbSA9IEFycmF5U3RyZWFtKCkK
KyAgICAgICAgb3V0cHV0LmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkKKyAgICAg
ICAgbG9nZ2luZy5pbmZvKCJ0aGlzIHNob3VsZCBiZSBsb2dnZWQiKQorICAgICAgICAjIHNlbGYu
YXNzZXJ0RmFsc2Uoc3RyZWFtLmVtcHR5KCkpCisKKyAgICAgICAgc3RyZWFtLnJlc2V0KCkKKyAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygidGhpcyBzaG91bGQgbm90IGJlIGxvZ2dlZCIpCisgICAgICAg
ICMgc2VsZi5hc3NlcnRUcnVlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgICAgIHN0cmVhbS5yZXNl
dCgpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbJy0tdmVyYm9zZSddKQor
ICAgICAgICBvdXRwdXQuY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgc3RyZWFtKQorICAgICAg
ICBsb2dnaW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBiZSBsb2dnZWQiKQorICAgICAgICAjIHNlbGYu
YXNzZXJ0RmFsc2Uoc3RyZWFtLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9sb2dnaW5nX29wdGlv
bnMoc2VsZik6CisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMgaXMgbm90IE5vbmUpCisKKworY2xhc3MgIFRlc3RD
b250cm9sbGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXIoc2Vs
ZiwgYXJncz1Ob25lLCBzaW5nbGVfdGhyZWFkZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgIGlzX2Z1bGx5X3BhcmFsbGVsPUZhbHNlKToKKyAgICAgICAgbG9nZ2luZ19vcHRpb25zID0g
b3V0cHV0LmxvZ2dpbmdfb3B0aW9ucygpCisgICAgICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9bG9nZ2luZ19vcHRpb25zKQorICAgICAgICBvcHRp
b25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYu
X3BvcnQgPSBwb3J0LmdldCgndGVzdCcsIG9wdGlvbnMpCisgICAgICAgIG5wcm9jID0gMgorICAg
ICAgICBpZiBzaW5nbGVfdGhyZWFkZWQ6CisgICAgICAgICAgICBucHJvYyA9IDEKKworICAgICAg
ICByZWd1bGFyX291dHB1dCA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAgYnVpbGRib3Rfb3V0cHV0
ID0gQXJyYXlTdHJlYW0oKQorICAgICAgICBwcmludGVyID0gb3V0cHV0LkNvbnRyb2xsZXIoc2Vs
Zi5fcG9ydCwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWlsZGJvdF9vdXRwdXQsIHNpbmdsZV90aHJlYWRlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICBy
ZXR1cm4gcHJpbnRlciwgcmVndWxhcl9vdXRwdXQsIGJ1aWxkYm90X291dHB1dAorCisgICAgZGVm
IHRlc3RfaGVscF9wcmludGluZyhzZWxmKToKKyAgICAgICAgIyBIZXJlIGFuZCBiZWxvdyB3ZSds
bCBjYWxsIHRoZSAicmVndWxhciIgb3V0cHV0IGVyciBhbmQgdGhlCisgICAgICAgICMgYnVpbGRi
b3Qgb3V0cHV0IG91dDsgdGhpcyBjb3JyZXNwb25kcyB0byBob3cgdGhpbmdzIHJ1biBvbiB0aGUK
KyAgICAgICAgIyBib3RzIHdpdGggc3RkZXJyIGFuZCBzdGRvdXQuCisgICAgICAgIHByaW50ZXIs
IGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcigpCisKKyAgICAgICAgIyBUaGlzIHJvdXRp
bmUgc2hvdWxkIHByaW50IHNvbWV0aGluZyB0byBzdGRvdXQuIHRlc3Rpbmcgd2hhdCBpdCBpcwor
ICAgICAgICAjIGlzIGtpbmQgb2YgcG9pbnRsZXNzLgorICAgICAgICBwcmludGVyLmhlbHBfcHJp
bnRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3RyYWNlKHNl
bGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoKQor
CisgICAgICAgICMgVGhpcyByb3V0aW5lIHNob3VsZCBwcmludCBzb21ldGhpbmcgdG8gc3Rkb3V0
LiB0ZXN0aW5nIHdoYXQgaXQgaXMKKyAgICAgICAgIyBpcyBraW5kIG9mIHBvaW50bGVzcy4KKyAg
ICAgICAgcHJpbnRlci5oZWxwX3RyYWNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIu
ZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgZGVm
IHRlc3RfcHJpbnRfYWN0dWFsKHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRl
ci5wcmludF9hY3R1YWwoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdhY3R1YWwn
XSkKKyAgICAgICAgcHJpbnRlci5wcmludF9hY3R1YWwoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXQo
KSwgWydoZWxsb1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9j
b250cm9sbGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJp
bnRfYWN0dWFsKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0KCksIFsnaGVsbG9cbiddKQorCisgICAg
ZGVmIHRlc3RfcHJpbnRfYWN0dWFsX2J1aWxkYm90KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBU
ZXN0IHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgYWN0dWFsIHJlc3VsdHMgbWF0Y2hlcyB3aGF0IHRo
ZQorICAgICAgICAjIGJ1aWxkYm90IGlzIGV4cGVjdGluZy4KKyAgICAgICAgcGFzcworCisgICAg
ZGVmIHRlc3RfcHJpbnRfY29uZmlnKHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9
IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJp
bnRlci5wcmludF9jb25maWcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5l
bXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxl
cihbJy0tcHJpbnQnLCAnY29uZmlnJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCdo
ZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkK
KworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXBy
aW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoJ2hlbGxv
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9cbiddKQorCisg
ICAgZGVmIHRlc3RfcHJpbnRfZXhwZWN0ZWQoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwg
b3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAg
ICBwcmludGVyLnByaW50X2V4cGVjdGVkKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2Nv
bnRyb2xsZXIoWyctLXByaW50JywgJ2V4cGVjdGVkJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRf
ZXhwZWN0ZWQoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsn
aGVsbG9cbiddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJv
bGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X2V4
cGVjdGVkKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hl
bGxvXG4nXSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3RpbWluZyhzZWxmKToKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5n
J10pCisgICAgICAgIHByaW50ZXIucHJpbnRfdGltaW5nKCdoZWxsbycpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ3RpbWluZyddKQorICAgICAgICBwcmludGVy
LnByaW50X3RpbWluZygnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQo
KSwgWydoZWxsb1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9j
b250cm9sbGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJp
bnRfdGltaW5nKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBb
J2hlbGxvXG4nXSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3VwZGF0ZShzZWxmKToKKyAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3Ro
aW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCdoZWxsbycpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9
IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ3VwZGF0ZXMnXSkKKyAgICAgICAgcHJp
bnRlci5wcmludF91cGRhdGUoJ2hlbGxvJykKKworICAgICAgICAjIE5vdGUgdGhhdCB0aGVyZSBz
aG91bGRuJ3QgYmUgYSBjYXJyaWFnZSByZXR1cm4gaGVyZTsgdXBkYXRlcygpCisgICAgICAgICMg
YXJlIG1lYW50IHRvIGJlIG92ZXJ3cml0dGVuLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVy
ci5nZXQoKSwgWydoZWxsbyddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5n
ZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVy
LnByaW50X3VwZGF0ZSgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQo
KSwgWydoZWxsbyddKQorCisgICAgZGVmIHRlc3RfcHJpbnRfb25lX2xpbmVfc3VtbWFyeShzZWxm
KToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1w
cmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFy
eSgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZS1saW5lLXN1
bW1hcnknXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDEsIDEpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwgWyJBbGwgMSB0ZXN0cyByYW4gYXMg
ZXhwZWN0ZWQuXG4iXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2Nv
bnRyb2xsZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmlu
dF9vbmVfbGluZV9zdW1tYXJ5KDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5n
ZXQoKSwgWyJBbGwgMSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuXG4iXSkKKworICAgICAgICBlcnIu
cmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMiwgMSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBbIlxuMSB0ZXN0IHJhbiBhcyBleHBlY3RlZCwgMSBkaWRuJ3Q6XG5cbiJdKQorCisgICAg
ICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgz
LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsiXG4yIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgMSBkaWRuJ3Q6XG5cbiJd
KQorCisgICAgZGVmIHRlc3RfcHJpbnRfdGVzdF9yZXN1bHQoc2VsZik6CisgICAgICAgIHJlc3Vs
dCA9IGdldF9yZXN1bHQoJ2Zvby5odG1sJykKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50
ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICd1bmV4cGVjdGVkJ10pCisgICAgICAg
IHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3Ry
PScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgcHJpbnRlci5wcmludF90
ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWycgIGZvby5odG1s
IC0+IHVuZXhwZWN0ZWQgcGFzc1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHBy
aW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLnByaW50X3Rl
c3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgZm9vLmh0bWwg
LT4gdW5leHBlY3RlZCBwYXNzXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X2NvbnRyb2xsZXIoWyctLXRyYWNlJywgJ25vdGhpbmcnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXByaW50JywgJ25vdGhpbmcnXSkK
KyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNl
LCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9
JycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXRyYWNlJywgJ3VuZXhwZWN0
ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICct
LXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChy
ZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0
eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9y
ZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29u
dHJvbGxlcihbJy0tdHJhY2UnLCAnZXZlcnl0aGluZycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAg
ICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0
cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgp
CisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxz
ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3Ry
PScnKQorCisgICAgZGVmIHRlc3RfcHJpbnRfcHJvZ3Jlc3Moc2VsZik6CisgICAgICAgIHRlc3Rf
ZmlsZXMgPSBbJ2Zvby5odG1sJywgJ2Jhci5odG1sJ10KKyAgICAgICAgZXhwZWN0YXRpb25zID0g
JycKKworICAgICAgICAjIHRlc3QgdGhhdCB3ZSBwcmludCBub3RoaW5nCisgICAgICAgIHByaW50
ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnbm90aGluZydd
KQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3Rf
ZmlsZXMsIGV4cGVjdGF0aW9ucykKKworICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJz
LCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRl
ci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkp
CisKKyAgICAgICAgIyB0ZXN0IHJlZ3VsYXIgZnVuY3Rpb25hbGl0eQorICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lLWxpbmUtcHJvZ3Jlc3Mn
XSkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQu
cmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2Zp
bGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9wcmludF9wcm9ncmVzc19f
ZGV0YWlsZWQoc2VsZik6CisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ3Bhc3MvcGFzcy5odG1sJywg
J3Bhc3MvdGltZW91dC5odG1sJywgJ2ZhaWwvY3Jhc2guaHRtbCddCisgICAgICAgIGV4cGVjdGF0
aW9ucyA9ICdwYXNzL3RpbWVvdXQuaHRtbCA9IFRJTUVPVVQnCisKKyAgICAgICAgIyBmaXJzdCwg
dGVzdCB0aGF0IGl0IGlzIGRpc2FibGVkIHByb3Blcmx5CisgICAgICAgICMgc2hvdWxkIHN0aWxs
IHByaW50IG9uZS1saW5lLXByb2dyZXNzCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfY29udHJvbGxlcigKKyAgICAgICAgICAgIFsnLS1wcmludCcsICdkZXRhaWxlZC1wcm9n
cmVzcyddLCBzaW5nbGVfdGhyZWFkZWQ9RmFsc2UpCisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVz
dWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorICAgICAg
ICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91
dC5lbXB0eSgpKQorCisgICAgICAgICMgbm93IHRlc3QgdGhlIGVuYWJsZWQgcGF0aHMKKyAgICAg
ICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKAorICAgICAgICAgICAg
WyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzJ10sIHNpbmdsZV90aHJlYWRlZD1UcnVlKQor
ICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmls
ZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFs
c2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQo
KQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJz
LCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgcnMuYWRk
KGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCks
IEZhbHNlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0bWwnKSwg
VHJ1ZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcsIHRlc3Rf
ZXhwZWN0YXRpb25zLkNSQVNIKSwgVHJ1ZSkKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAg
b3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHRl
c3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIFdlIG9ubHkgY2xlYXIg
dGhlIG1ldGVyIHdoZW4gcmV0cnlpbmcgdy8gZGV0YWlsZWQtcHJvZ3Jlc3MuCisgICAgICAgIGVy
ci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJv
Z3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJy
LmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAg
ICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKAorICAgICAgICAg
ICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzLHVuZXhwZWN0ZWQnXSwgc2luZ2xlX3Ro
cmVhZGVkPVRydWUpCisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5f
cG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorICAgICAgICBwcmludGVyLnByaW50X3By
b2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShl
cnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAg
ICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJp
bnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKwor
ICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0
aW9ucy5USU1FT1VUKSwgRmFsc2UpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Rp
bWVvdXQuaHRtbCcpLCBUcnVlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFz
aC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpLCBUcnVlKQorICAgICAgICBlcnIucmVz
ZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNz
KHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1w
dHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMg
V2Ugb25seSBjbGVhciB0aGUgbWV0ZXIgd2hlbiByZXRyeWluZyB3LyBkZXRhaWxlZC1wcm9ncmVz
cy4KKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJp
bnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQu
ZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBwcmludGVyLCBl
cnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAg
ICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5l
bXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxl
cihbJy0tcHJpbnQnLCAnbWlzYyddKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBlcnIucmVzZXQoKQor
ICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAiY29uZmlnIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5n
ZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVy
LndyaXRlKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAg
ICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAiY29uZmlnIikK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3By
aW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHJvdXRpbmUgaXMg
dGhlIG9ubHkgb25lIHRoYXQgcHJpbnRzIHN0dWZmIHRoYXQgdGhlIGJvdHMKKyAgICAgICAgIyBj
YXJlIGFib3V0LgorICAgICAgICBkZWYgZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZCwg
cGFzc2luZywgZmxha3kpOgorICAgICAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFy
eShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAgICAgICBpZiBl
eHBlY3RlZDoKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0
bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5o
dG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCks
IGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNo
Lmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksCisgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQpCisgICAgICAgICAgICBlbGlmIHBhc3Npbmc6CisgICAgICAgICAgICAgICAgcnMuYWRk
KGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJyksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAg
IHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBleHBlY3RlZCkKKyAgICAg
ICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJyksIGV4cGVjdGVk
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
cGFzcy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQo
J3Bhc3MvdGltZW91dC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3Rh
dGlvbnMuQ1JBU0gpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3Vs
dCgnZmFpbC9jcmFzaC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkK
KyAgICAgICAgICAgIHJldHJ5ID0gcnMKKyAgICAgICAgICAgIGlmIGZsYWt5OgorICAgICAgICAg
ICAgICAgIHJldHJ5LCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9m
aWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdGF0aW9ucykKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9w
YXNzLmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0X3Jlc3VsdCgn
cGFzcy90aW1lb3V0Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0
X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJyksIFRydWUpCisgICAgICAgICAgICB1bmV4cGVjdGVk
X3Jlc3VsdHMgPSBydW5fd2Via2l0X3Rlc3RzLnN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMo
CisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydCwgZXhwLCBycywgcmV0cnkpCisgICAgICAgICAg
ICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzCisKKyAgICAgICAgdGVzdF9maWxlcyA9IFsncGFz
cy9wYXNzLmh0bWwnLCAncGFzcy90aW1lb3V0Lmh0bWwnLCAnZmFpbC9jcmFzaC5odG1sJ10KKyAg
ICAgICAgZXhwZWN0YXRpb25zID0gJycKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgdXIgPSBn
ZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFr
eT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRf
Y29udHJvbGxlcihbJy0tcHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd1bmV4cGVjdGVkLXJlc3VsdHMnXSkKKworICAgICAgICAjIHRlc3Qg
ZXZlcnl0aGluZyBydW5uaW5nIGFzIGV4cGVjdGVkCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0
ZWRfcmVzdWx0cyhleHBlY3RlZD1UcnVlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAg
ICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0
eSgpKQorCisgICAgICAgICMgdGVzdCBmYWlsdXJlcworICAgICAgICBlcnIucmVzZXQoKQorICAg
ICAgICBvdXQucmVzZXQoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhw
ZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVy
LnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVy
ci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAg
ICAgICMgdGVzdCB1bmV4cGVjdGVkIGZsYWt5IHJlc3VsdHMKKyAgICAgICAgZXJyLnJlc2V0KCkK
KyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRz
KGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPVRydWUsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmlu
dGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisg
ICAgICAgICMgdGVzdCB1bmV4cGVjdGVkIHBhc3NlcworICAgICAgICBlcnIucmVzZXQoKQorICAg
ICAgICBvdXQucmVzZXQoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhw
ZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PVRydWUpCisgICAgICAgIHByaW50ZXIu
cHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJy
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICAg
ICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlciwgZXJy
LCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisg
ICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2lu
Zz1GYWxzZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9y
ZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9wcmludF91bmV4
cGVjdGVkX3Jlc3VsdHNfYnVpbGRib3Qoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRlc3QgdGhh
dCBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoKSBwcm9kdWNlcyB0aGUgb3V0cHV0IHRoZQorICAg
ICAgICAjIGJ1aWxkYm90IGlzIGV4cGVjdGluZy4KKyAgICAgICAgcGFzcworCitpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IGVk
ZWY0ODUuLmNiOWYzZWMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTY2LDYgKzY2LDEzIEBAIGNsYXNzIFRl
c3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwg
YWN0dWFsX2ZpbGVuYW1lKToKICAgICAgICAgcmV0dXJuICcnCiAKKyAgICBkZWYgcmVsYXRpdmVf
dGVzdF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiBmaWxlbmFtZQor
CisgICAgZGVmIGV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lLCBzdWZmaXgpOgorICAg
ICAgICAoYmFzZW5hbWUsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAg
ICByZXR1cm4gYmFzZW5hbWUgKyAnLicgKyBzdWZmaXgKKwogICAgIGRlZiBuYW1lKHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRl
eCBhYTkwNWFiLi44ZWI4OGQxIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTY0LDcg
KzY0LDcgQEAgaW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0
ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRf
cmVzdWx0c19nZW5lcmF0b3IKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3Ry
ZWFtCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBvdXRwdXQKIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZpbGVz
CkBAIC04MCwzMyArODAsNiBAQCBpbXBvcnQgcG9ydAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5ydW5fd2Via2l0X3Rlc3RzIikKIAotIyBkdW1teSB2
YWx1ZSB1c2VkIGZvciBjb21tYW5kLWxpbmUgZXhwbGljaXRuZXNzIHRvIGRpc2FibGUgZGVmYXVs
dHMKLUxPR19OT1RISU5HID0gJ25vdGhpbmcnCi0KLSMgRGlzcGxheSB0aGUgb25lLWxpbmUgcHJv
Z3Jlc3MgYmFyICglIGNvbXBsZXRlZCkgd2hpbGUgdGVzdGluZwotTE9HX1BST0dSRVNTID0gJ3By
b2dyZXNzJwotCi0jIEluZGljYXRlcyB0aGF0IHdlIHdhbnQgZGV0YWlsZWQgcHJvZ3Jlc3MgdXBk
YXRlcyBpbiB0aGUgb3V0cHV0IChwcmludHMKLSMgZGlyZWN0b3J5LWJ5LWRpcmVjdG9yeSBmZWVk
YmFjaykuCi1MT0dfREVUQUlMRURfUFJPR1JFU1MgPSAnZGV0YWlsZWQtcHJvZ3Jlc3MnCi0KLSMg
TG9nIHRoZSBvbmUtbGluZSBzdW1tYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIHJ1bgotTE9HX1NVTU1B
UlkgPSAnc3VtbWFyeScKLQotIyAiVHJhY2UiIHRoZSB0ZXN0IC0gbG9nIHRoZSBleHBlY3RlZCBy
ZXN1bHQsIHRoZSBhY3R1YWwgcmVzdWx0LCBhbmQgdGhlCi0jIGJhc2VsaW5lcyB1c2VkCi1MT0df
VFJBQ0UgPSAndHJhY2UnCi0KLSMgTG9nIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hpbGUgcnVu
bmluZyAoaW5zdGVhZCBvZiBqdXN0IGF0IHRoZSBlbmQpLgotTE9HX1VORVhQRUNURUQgPSAndW5l
eHBlY3RlZCcKLUxPR19VTkVYUEVDVEVEX1JFU1VMVFMgPSAndW5leHBlY3RlZC1yZXN1bHRzJwot
Ci1MT0dfVkFMVUVTID0gIiwiLmpvaW4oKCJhY3R1YWwiLCAiY29uZmlnIiwgTE9HX0RFVEFJTEVE
X1BST0dSRVNTLCAiZXhwZWN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgIExPR19OT1RISU5H
LCBMT0dfUFJPR1JFU1MsIExPR19TVU1NQVJZLCAidGltaW5nIiwKLSAgICAgICAgICAgICAgICAg
ICAgICBMT0dfVU5FWFBFQ1RFRCwgTE9HX1VORVhQRUNURURfUkVTVUxUUykpCi1MT0dfREVGQVVM
VF9WQUxVRSA9ICIsIi5qb2luKChMT0dfREVUQUlMRURfUFJPR1JFU1MsIExPR19TVU1NQVJZLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HX1VORVhQRUNURUQsIExPR19VTkVYUEVD
VEVEX1JFU1VMVFMpKQotCiAjIEJ1aWxkZXIgYmFzZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJj
aGl2ZWQgdGVzdCByZXN1bHRzLgogQlVJTERFUl9CQVNFX1VSTCA9ICJodHRwOi8vYnVpbGQuY2hy
b21pdW0ub3JnL2J1aWxkYm90L2xheW91dF90ZXN0X3Jlc3VsdHMvIgogCkBAIC0xODEsNyArMTU0
LDcgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAiIiIKIAogICAgICAg
ICBzZWxmLnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Jlc3VsdC50eXBlXS5hZGQocmVzdWx0LmZpbGVu
YW1lKQotICAgICAgICBzZWxmLnJlc3VsdHNbcmVzdWx0LmZpbGVuYW1lXSA9IHJlc3VsdC50eXBl
CisgICAgICAgIHNlbGYucmVzdWx0c1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0CiAgICAgICAg
IHNlbGYucmVtYWluaW5nIC09IDEKICAgICAgICAgaWYgbGVuKHJlc3VsdC5mYWlsdXJlcyk6CiAg
ICAgICAgICAgICBzZWxmLmZhaWx1cmVzW3Jlc3VsdC5maWxlbmFtZV0gPSByZXN1bHQuZmFpbHVy
ZXMKQEAgLTE5Miw2ICsxNjUsODMgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAg
ICAgICAgICAgc2VsZi51bmV4cGVjdGVkICs9IDEKIAogCitkZWYgc3VtbWFyaXplX3VuZXhwZWN0
ZWRfcmVzdWx0cyhwb3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkpOgorICAgICIiIlN1bW1h
cml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KKworICAgIFRPRE8oZHByYW5r
ZSk6IHNwbGl0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaW50byBhIHNlcGFyYXRlIGNsYXNzPworCisg
ICAgQXJnczoKKyAgICAgICAgcG9ydF9vYmo6IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhv
b2tzCisgICAgICAgIGV4cGVjdGF0aW9uczogdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0
aW9ucyBvYmplY3QKKyAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20g
aW5pdGlhbCB0ZXN0IHJ1bnMKKyAgICAgICAgcmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3Qg
ZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRyaWVkIHRlc3RzCisgICAgUmV0dXJuczoKKyAgICAg
ICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVjdGVkIHJl
c3VsdHMgZnJvbSB0aGUKKyAgICAgICAgcnVuLCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOgor
ICAgICAgICAndmVyc2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEgaW4gdGhpcyB2ZXJzaW9u
KQorICAgICAgICAnZml4YWJsZSc6ICMgb2YgZml4YWJsZSB0ZXN0cyAoTk9XIC0gUEFTUykKKyAg
ICAgICAgJ3NraXBwZWQnOiAjIG9mIHNraXBwZWQgdGVzdHMgKE5PVyAmIFNLSVBQRUQpCisgICAg
ICAgICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5vbi1mbGFreSBmYWlsdXJlcworICAgICAgICAn
bnVtX2ZsYWt5JzogIyBvZiBmbGFreSBmYWlsdXJlcworICAgICAgICAnbnVtX3Bhc3Nlcyc6ICMg
b2YgdW5leHBlY3RlZCBwYXNzZXMKKyAgICAgICAgJ3Rlc3RzJzogYSBkaWN0IG9mIHRlc3RzIC0+
IHsnZXhwZWN0ZWQnOiAnLi4uJywgJ2FjdHVhbCc6ICcuLi4nfQorICAgICIiIgorICAgIHJlc3Vs
dHMgPSB7fQorICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9IDEKKworICAgIHRiZSA9IHJlc3VsdF9z
dW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uCisgICAgdGJ0ID0gcmVzdWx0X3N1bW1hcnkudGVz
dHNfYnlfdGltZWxpbmUKKyAgICByZXN1bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rlc3RfZXhw
ZWN0YXRpb25zLk5PV10gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVz
dF9leHBlY3RhdGlvbnMuUEFTU10pCisgICAgcmVzdWx0c1snc2tpcHBlZCddID0gbGVuKHRidFt0
ZXN0X2V4cGVjdGF0aW9ucy5OT1ddICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGJlW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKQorCisgICAgbnVtX3Bhc3NlcyA9IDAKKyAgICBu
dW1fZmxha3kgPSAwCisgICAgbnVtX3JlZ3Jlc3Npb25zID0gMAorICAgIGtleXdvcmRzID0ge30K
KyAgICBmb3IgaywgdiBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlMuaXRlcml0
ZW1zKCk6CisgICAgICAgIGtleXdvcmRzW3ZdID0gay51cHBlcigpCisKKyAgICB0ZXN0cyA9IHt9
CisgICAgZm9yIGZpbGVuYW1lLCByZXN1bHQgaW4gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9y
ZXN1bHRzLml0ZXJpdGVtcygpOgorICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hl
ZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKKyAgICAgICAgIyB3aGV0aGVyIG9yIG5v
dCBpdCBjcmFzaGVkIHdoZW4gd2UgcmV0cmllZCBpdCAoaWYgd2UgcmV0cmllZCBpdCksCisgICAg
ICAgICMgYW5kIGFsd2F5cyBjb25zaWRlciB0aGUgcmVzdWx0IG5vdCBmbGFreS4KKyAgICAgICAg
dGVzdCA9IHBvcnRfb2JqLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCisgICAgICAg
IGV4cGVjdGVkID0gZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1l
KQorICAgICAgICBhY3R1YWwgPSBba2V5d29yZHNbcmVzdWx0XV0KKworICAgICAgICBpZiByZXN1
bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKKyAgICAgICAgICAgIG51bV9wYXNzZXMgKz0g
MQorICAgICAgICBlbGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAg
ICAgICAgIG51bV9yZWdyZXNzaW9ucyArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBp
ZiBmaWxlbmFtZSBub3QgaW4gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHM6CisgICAg
ICAgICAgICAgICAgYWN0dWFsLmV4dGVuZChleHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19z
dHJpbmcoCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKS5zcGxpdCgiICIpKQorICAgICAg
ICAgICAgICAgIG51bV9mbGFreSArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJldHJ5X3Jlc3VsdCA9IHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW2ZpbGVu
YW1lXQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCAhPSByZXRyeV9yZXN1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGFjdHVhbC5hcHBlbmQoa2V5d29yZHNbcmV0cnlfcmVzdWx0XSkKKyAgICAg
ICAgICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQorCisgICAgICAgIHRlc3RzW3Rl
c3RdID0ge30KKyAgICAgICAgdGVzdHNbdGVzdF1bJ2V4cGVjdGVkJ10gPSBleHBlY3RlZAorICAg
ICAgICB0ZXN0c1t0ZXN0XVsnYWN0dWFsJ10gPSAiICIuam9pbihhY3R1YWwpCisKKyAgICByZXN1
bHRzWyd0ZXN0cyddID0gdGVzdHMKKyAgICByZXN1bHRzWydudW1fcGFzc2VzJ10gPSBudW1fcGFz
c2VzCisgICAgcmVzdWx0c1snbnVtX2ZsYWt5J10gPSBudW1fZmxha3kKKyAgICByZXN1bHRzWydu
dW1fcmVncmVzc2lvbnMnXSA9IG51bV9yZWdyZXNzaW9ucworCisgICAgcmV0dXJuIHJlc3VsdHMK
KworCiBjbGFzcyBUZXN0UnVubmVyOgogICAgICIiIkEgY2xhc3MgZm9yIG1hbmFnaW5nIHJ1bm5p
bmcgYSBzZXJpZXMgb2YgdGVzdHMgb24gYSBzZXJpZXMgb2YgbGF5b3V0CiAgICAgdGVzdCBmaWxl
cy4iIiIKQEAgLTIwNiwxNyArMjU2LDE3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICBOVU1f
UkVUUllfT05fVU5FWFBFQ1RFRF9GQUlMVVJFID0gMQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIG9wdGlvbnMsIG1ldGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucywgcHJpbnRlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBz
dHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGlt
cGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5
IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCi0gICAgICAgICAgbWV0ZXI6IGEgTWV0ZXJlZFN0cmVh
bSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICAgcHJpbnRlcjogYSBQcmlu
dGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KICAgICAgICAgIiIiCiAgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAg
IHNlbGYuX21ldGVyID0gbWV0ZXIKKyAgICAgICAgc2VsZi5fcHJpbnRlciA9IHByaW50ZXIKIAog
ICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBv
biBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3
ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KApAQCAtMjMwLDEyICsyODAsNiBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBOb25lCiAgICAgICAg
IHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKIAotICAgICAgICAjIFRoZXNlIGFy
ZSB1c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1wcm9ncmVzcyB0byB0cmFjayBzdGF0dXMgYnkKLSAg
ICAgICAgIyBkaXJlY3RvcnkuCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gTm9uZQotICAg
ICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIiCi0gICAgICAgIHNlbGYuX2N1cnJl
bnRfdGVzdF9udW1iZXIgPSAwCi0KICAgICAgICAgc2VsZi5fcmV0cmllcyA9IDAKIAogICAgICAg
ICAjIEhhY2sgZm9yIGR1bXBpbmcgdGhyZWFkcyBvbiB0aGUgYm90cwpAQCAtMjgxLDE5ICszMjUs
MTUgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg
ICAgcmFpc2UgZXJyCiAKLSAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHNl
bGYsIHdyaXRlKToKKyAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHNlbGYp
OgogICAgICAgICAiIiJDcmVhdGUgYXBwcm9wcmlhdGUgc3Vic2V0cyBvZiB0ZXN0IGxpc3RzIGFu
ZCByZXR1cm5zIGEKICAgICAgICAgUmVzdWx0U3VtbWFyeSBvYmplY3QuIEFsc28gcHJpbnRzIGV4
cGVjdGVkIHRlc3QgY291bnRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEg
Y2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAg
ICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICIiIgogCiAgICAgICAgICMgUmVt
b3ZlIHNraXBwZWQgLSBib3RoIGZpeGFibGUgYW5kIGlnbm9yZWQgLSBmaWxlcyBmcm9tIHRoZQog
ICAgICAgICAjIHRvcC1sZXZlbCBsaXN0IG9mIGZpbGVzIHRvIHRlc3QuCiAgICAgICAgIG51bV9h
bGxfdGVzdF9maWxlcyA9IGxlbihzZWxmLl90ZXN0X2ZpbGVzKQotICAgICAgICB3cml0ZSgiRm91
bmQ6ICAlZCB0ZXN0cyIgJSBudW1fYWxsX3Rlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfZXhwZWN0ZWQoIkZvdW5kOiAgJWQgdGVzdHMiICUgKGxlbihzZWxmLl90ZXN0X2Zp
bGVzKSkpCiAgICAgICAgIGlmIG5vdCBudW1fYWxsX3Rlc3RfZmlsZXM6CiAgICAgICAgICAgICBf
bG9nLmNyaXRpY2FsKCJObyB0ZXN0cyB0byBydW4uIikKICAgICAgICAgICAgIHN5cy5leGl0KDEp
CkBAIC0zNjAsNyArNDAwLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICAgICAgdGVz
dHNfcnVuX21zZyA9ICdSdW5uaW5nOiAlZCB0ZXN0cyAoY2h1bmsgc2xpY2UgWyVkOiVkXSBvZiAl
ZCknICUgKAogICAgICAgICAgICAgICAgIChzbGljZV9lbmQgLSBzbGljZV9zdGFydCksIHNsaWNl
X3N0YXJ0LCBzbGljZV9lbmQsIG51bV90ZXN0cykKLSAgICAgICAgICAgIHdyaXRlKHRlc3RzX3J1
bl9tc2cpCisgICAgICAgICAgICBzZWxmLl9wcmludC5wcmludF9leHBlY3RlZCh0ZXN0c19ydW5f
bXNnKQogCiAgICAgICAgICAgICAjIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBhbmQgd2UgZG9uJ3Qg
aGF2ZSBlbm91Z2ggdGVzdHMsIHdlIHJ1biBzb21lCiAgICAgICAgICAgICAjIGZyb20gdGhlIGJl
Z2lubmluZy4KQEAgLTM2OSw3ICs0MDksNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAg
ICAgICAgIGV4dHJhID0gMSArIGNodW5rX2xlbiAtIChzbGljZV9lbmQgLSBzbGljZV9zdGFydCkK
ICAgICAgICAgICAgICAgICBleHRyYV9tc2cgPSAoJyAgIGxhc3QgY2h1bmsgaXMgcGFydGlhbCwg
YXBwZW5kaW5nIFswOiVkXScgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhKQot
ICAgICAgICAgICAgICAgIHdyaXRlKGV4dHJhX21zZykKKyAgICAgICAgICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X2V4cGVjdGVkKGV4dHJhX21zZykKICAgICAgICAgICAgICAgICB0ZXN0c19y
dW5fbXNnICs9ICJcbiIgKyBleHRyYV9tc2cKICAgICAgICAgICAgICAgICBmaWxlcy5leHRlbmQo
dGVzdF9maWxlc1swOmV4dHJhXSkKICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9z
LnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LApAQCAtNDAxLDE3ICs0
NDEsMTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICByZXN1bHRfc3VtbWFyeSA9IFJl
c3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0YXRpb25zLAogICAgICAgICAgICAgc2VsZi5fdGVzdF9m
aWxlcyB8IHNraXBfY2h1bmspCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNf
b2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVj
dGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLlBBU1MsICJwYXNzZXMiKQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9y
ZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmlu
dF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0
ZXN0X2V4cGVjdGF0aW9ucy5GQUlMLCAiZmFpbHVyZXMiKQotICAgICAgICBzZWxmLl9wcmludF9l
eHBlY3RlZF9yZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBz
ZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAg
ICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GTEFLWSwgImZsYWt5IikKLSAgICAgICAgc2VsZi5f
cHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAg
ICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5
LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuU0tJUCwgInNraXBwZWQiKQogCiAgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuZm9yY2U6Ci0gICAgICAgICAgICB3cml0ZSgnUnVubmluZyBh
bGwgdGVzdHMsIGluY2x1ZGluZyBza2lwcyAoLS1mb3JjZSknKQorICAgICAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF9leHBlY3RlZCgnUnVubmluZyBhbGwgdGVzdHMsIGluY2x1ZGluZyAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza2lwcyAoLS1mb3JjZSkn
KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFs
bHkgcnVuIHRoZSBza2lwcGVkIHRlc3RzICh0aGV5IHdlcmUKICAgICAgICAgICAgICMgc3VidHJh
Y3RlZCBvdXQgb2Ygc2VsZi5fdGVzdF9maWxlcywgYWJvdmUpLCBidXQgd2Ugc3R1YiBvdXQgdGhl
CkBAIC00MjIsNyArNDYzLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICAg
ICAgdGltZV9mb3JfZGlmZnM9MCkKICAgICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IHRlc3Rf
ZXhwZWN0YXRpb25zLlNLSVAKICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVz
dWx0LCBleHBlY3RlZD1UcnVlKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9leHBlY3RlZCgnJykKIAogICAgICAgICByZXR1cm4gcmVzdWx0X3N1bW1hcnkK
IApAQCAtNjI3LDExICs2NjgsMTEgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgcGx1cmFs
ID0gIiIKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPiAxOgogICAg
ICAgICAgICAgcGx1cmFsID0gInMiCi0gICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgnU3RhcnRp
bmcgJXMlcyAuLi4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LmRy
aXZlcl9uYW1lKCksIHBsdXJhbCkpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRl
KCdTdGFydGluZyAlcyVzIC4uLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVyYWwpKQogICAgICAgICB0aHJlYWRzID0g
c2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCJTdGFydGluZyB0
ZXN0aW5nIC4uLiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGlu
ZyB0ZXN0aW5nIC4uLiIpCiAKICAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkcyB0byBmaW5p
c2ggYW5kIGNvbGxlY3QgdGVzdCBmYWlsdXJlcy4KICAgICAgICAgZmFpbHVyZXMgPSB7fQpAQCAt
Njg0LDcgKzcyNSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgd2hl
dGhlciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCiAgICAgICAgIHJl
dHVybiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLkhUVFBfU1VCRElSKQogCi0gICAgZGVmIHJ1
bihzZWxmLCByZXN1bHRfc3VtbWFyeSwgcHJpbnRfcmVzdWx0cyk6CisgICAgZGVmIHJ1bihzZWxm
LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1biBhbGwgb3VyIHRlc3RzIG9uIGFsbCBv
dXIgdGVzdCBmaWxlcy4KIAogICAgICAgICBGb3IgZWFjaCB0ZXN0IGZpbGUsIHdlIHJ1biBlYWNo
IHRlc3QgdHlwZS4gSWYgdGhlcmUgYXJlIGFueSBmYWlsdXJlcywKQEAgLTY5Miw3ICs3MzMsNiBA
QCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnk6IGEgc3VtbWFyeSBvYmplY3QgdHJhY2tpbmcgdGhlIHRlc3QgcmVzdWx0cy4KLSAgICAg
ICAgICBwcmludF9yZXN1bHRzOiB3aGV0aGVyIG9yIG5vdCB0byBwcmludCB0aGUgc3VtbWFyeSBh
dCB0aGUgZW5kCiAKICAgICAgICAgUmV0dXJuOgogICAgICAgICAgIFRoZSBudW1iZXIgb2YgdW5l
eHBlY3RlZCByZXN1bHRzICgwID09IHN1Y2Nlc3MpCkBAIC03MDIsMTEgKzc0MiwxMiBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAg
ICBpZiBzZWxmLm5lZWRzX2h0dHAoKToKLSAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgn
U3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorCiAgICAgICAgICAgICBzZWxm
Ll9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKIAogICAgICAgICBpZiBzZWxmLl9jb250YWluc190
ZXN0cyhzZWxmLldFQlNPQ0tFVF9TVUJESVIpOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBk
YXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAg
ICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKICAgICAgICAgICAg
ICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIuU3RhcnQoKQogCkBAIC03MjksNDEgKzc3
MCwyMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1l
KCkKIAotICAgICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihzZWxmLl9vcHRpb25z
LCAndGltaW5nJykKLSAgICAgICAgc2VsZi5fcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Mod3JpdGUs
IGVuZF90aW1lIC0gc3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgIHNlbGYuX21ldGVy
LnVwZGF0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGltaW5nX3N0YXRpc3RpY3MoZW5kX3Rp
bWUgLSBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCiAKLSAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgIyBXZSB3cml0ZSB0aGlzIGJsb2NrIHRvIHN0ZG91
dCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQotICAgICAgICAgICAgIyBidWlsZGJvdCBsb2cg
cGFyc2VyLCB3aGljaCBvbmx5IGxvb2tzIGF0IHN0ZG91dCwgbm90IHN0ZGVyciA6KAotICAgICAg
ICAgICAgd3JpdGUgPSBsYW1iZGEgczogc3lzLnN0ZG91dC53cml0ZSgiJXNcbiIgJSBzKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIoc2Vs
Zi5fb3B0aW9ucywgJ2FjdHVhbCcpCi0KLSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1h
cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3Vt
bWFyeShyZXN1bHRfc3VtbWFyeSkKIAogICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAg
ICAgc3lzLnN0ZGVyci5mbHVzaCgpCiAKLSAgICAgICAgIyBUaGlzIHN1bW1hcnkgZGF0YSBnZXRz
IHdyaXR0ZW4gdG8gc3Rkb3V0IHJlZ2FyZGxlc3Mgb2YgbG9nIGxldmVsCi0gICAgICAgICMgKHVu
bGVzcyBvZiBjb3Vyc2Ugd2UncmUgcHJpbnRpbmcgbm90aGluZykuCi0gICAgICAgIGlmIHByaW50
X3Jlc3VsdHM6Ci0gICAgICAgICAgICBpZiAoTE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYu
X29wdGlvbnMubG9nIG9yCi0gICAgICAgICAgICAgICAgKExPR19VTkVYUEVDVEVEIGluIHNlbGYu
X29wdGlvbnMubG9nIGFuZAotICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50b3RhbCAh
PSByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCkpOgotICAgICAgICAgICAgICAgIHByaW50Ci0gICAg
ICAgICAgICBpZiBMT0dfU1VNTUFSWSBpbiBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAg
ICAgICBzZWxmLl9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5LnRvdGFsLAor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1bW1h
cnkudG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeS5leHBlY3RlZCkKIAotICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBz
ZWxmLl9zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHJlc3VsdF9zdW1tYXJ5LAotICAgICAg
ICAgICAgcmV0cnlfc3VtbWFyeSkKLSAgICAgICAgaWYgTE9HX1VORVhQRUNURURfUkVTVUxUUyBp
biBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRf
cmVzdWx0cyh1bmV4cGVjdGVkX3Jlc3VsdHMpCisgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9
IHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgIHNl
bGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnkpCisgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVuZXhwZWN0ZWRfcmVzdWx0
cykKIAogICAgICAgICAjIFdyaXRlIHRoZSBzYW1lIGRhdGEgdG8gbG9nIGZpbGVzLgogICAgICAg
ICBzZWxmLl93cml0ZV9qc29uX2ZpbGVzKHVuZXhwZWN0ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1h
cnksCkBAIC03ODUsMTEyICs4MDcsMTYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgICAg
ICBleGNlcHQgUXVldWUuRW1wdHk6CiAgICAgICAgICAgICAgICAgcmV0dXJuCisKICAgICAgICAg
ICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVz
dWx0KAogICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYu
X29wdGlvbnMucGl4ZWxfdGVzdHMpCiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVz
dWx0LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfcmVzdWx0cyhyZXN1
bHQsIGV4cGVjdGVkLCByZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBfcHJpbnRfdGVzdF9yZXN1
bHRzKHNlbGYsIHJlc3VsdCwgZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIlBy
aW50IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSB0aGUgLS1sb2cgc3dp
dGNoZXMuIgotICAgICAgICBpZiBMT0dfVFJBQ0UgaW4gc2VsZi5fb3B0aW9ucy5sb2c6Ci0gICAg
ICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCkKLSAgICAgICAgZWxpZiAoTE9H
X0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYuX29wdGlvbnMubG9nIGFuZAotICAgICAgICAgICAg
ICAoc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwgb3IKLSAgICAgICAg
ICAgICAgIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpKSk6Ci0gICAgICAgICAgICBzZWxmLl9w
cmludF9kZXRhaWxlZF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIGlmIChub3QgZXhwZWN0ZWQgYW5kIExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29w
dGlvbnMubG9nKToKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3Rf
cmVzdWx0KHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5lX3Byb2dyZXNz
KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIF9wcmludF90ZXN0X3RyYWNlKHNlbGYsIHJlc3Vs
dCk6Ci0gICAgICAgICIiIlByaW50IGRldGFpbGVkIHJlc3VsdHMgb2YgYSB0ZXN0ICh0cmlnZ2Vy
ZWQgYnkgLS1sb2cgdHJhY2UpLgotICAgICAgICBGb3IgZWFjaCB0ZXN0LCBwcmludDoKLSAgICAg
ICAgICAgLSBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgYmFzZWxpbmVzCi0gICAgICAgICAgIC0g
ZXhwZWN0ZWQgcmVzdWx0cwotICAgICAgICAgICAtIGFjdHVhbCByZXN1bHQKLSAgICAgICAgICAg
LSB0aW1pbmcgaW5mbwotICAgICAgICAiIiIKLSAgICAgICAgZmlsZW5hbWUgPSByZXN1bHQuZmls
ZW5hbWUKLSAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGZpbGVuYW1lKQotICAgICAgICBfbG9nLmluZm8oJ3RyYWNlOiAlcycgJSB0ZXN0X25hbWUp
Ci0gICAgICAgIF9sb2cuaW5mbygnICB0eHQ6ICVzJyAlCi0gICAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoCi0gICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykpKQotICAgICAgICBw
bmdfZmlsZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykK
LSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocG5nX2ZpbGUpOgotICAgICAgICAgICAgX2xvZy5p
bmZvKCcgIHBuZzogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
X2xvZy5pbmZvKCcgIHBuZzogPG5vbmU+JykKLSAgICAgICAgX2xvZy5pbmZvKCcgIGV4cDogJXMn
ICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25z
X3N0cmluZyhmaWxlbmFtZSkpCi0gICAgICAgIF9sb2cuaW5mbygnICBnb3Q6ICVzJyAlCi0gICAg
ICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJl
c3VsdC50eXBlKSkKLSAgICAgICAgX2xvZy5pbmZvKCcgdG9vazogJS0uM2YnICUgcmVzdWx0LnRl
c3RfcnVuX3RpbWUpCi0gICAgICAgIF9sb2cuaW5mbygnJykKLQotICAgIGRlZiBfcHJpbnRfb25l
X2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJEaXNwbGF5
cyB0aGUgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgdGVzdCBydW4uIiIiCi0gICAgICAgIHBlcmNlbnRf
Y29tcGxldGUgPSAxMDAgKiAocmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQgKwotICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCkgLyByZXN1bHRfc3VtbWFyeS50b3RhbAotICAgICAg
ICBhY3Rpb24gPSAiVGVzdGluZyIKLSAgICAgICAgaWYgc2VsZi5fcmV0cmllcyA+IDA6Ci0gICAg
ICAgICAgICBhY3Rpb24gPSAiUmV0cnlpbmciCi0gICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNz
KCIlcyAoJWQlJSk6ICVkIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0LCIKLSAgICAgICAgICAg
ICIgJWQgbGVmdCIgJSAoYWN0aW9uLCBwZXJjZW50X2NvbXBsZXRlLCByZXN1bHRfc3VtbWFyeS5l
eHBlY3RlZCwKLSAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkLCByZXN1bHRf
c3VtbWFyeS5yZW1haW5pbmcpKQotCi0gICAgZGVmIF9wcmludF9kZXRhaWxlZF9wcm9ncmVzcyhz
ZWxmLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jl
c3Mgb3V0cHV0IHdoZXJlIHdlIHByaW50IHRoZSBkaXJlY3RvcnkgbmFtZQotICAgICAgICBhbmQg
b25lIGRvdCBmb3IgZWFjaCBjb21wbGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKLSAg
ICAgICAgIi0tbG9nIGRldGFpbGVkLXByb2dyZXNzIi4iIiIKLSAgICAgICAgaWYgc2VsZi5fY3Vy
cmVudF90ZXN0X251bWJlciA9PSBsZW4oc2VsZi5fdGVzdF9maWxlc19saXN0KToKLSAgICAgICAg
ICAgIHJldHVybgotCi0gICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtz
ZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQotICAgICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGly
bmFtZSgKLSAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0
X3Rlc3QpKQotICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9PSAiIjoKLSAg
ICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgKG5leHRfZGly
KQotICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgotCi0gICAgICAgIHdo
aWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgotICAgICAgICAgICAgaWYg
bmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fbWV0
ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkKLSAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogLiIgJSAobmV4dF9kaXIp
Ci0gICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciArPSAi
LiIKLQotICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVj
dGVkX3Jlc3VsdHMgYW5kCi0gICAgICAgICAgICAgICAgTE9HX1VORVhQRUNURUQgaW4gc2VsZi5f
b3B0aW9ucy5sb2cpOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnVu
ZXhwZWN0ZWRfcmVzdWx0c1tuZXh0X3Rlc3RdCi0gICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIu
d3JpdGUoIiVzXG4iICUgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpCi0gICAgICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdChuZXh0X3Rlc3QsIHJlc3VsdCkK
LSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIHNl
bGYuX2N1cnJlbnRfZGlyCi0KLSAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIg
Kz0gMQotICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4oc2Vs
Zi5fdGVzdF9maWxlc19saXN0KToKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgICAg
ICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251
bWJlcl0KLSAgICAgICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQotCi0g
ICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZzoKLSAgICAgICAgICAgIHJlbWFpbl9z
dHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykKLSAgICAgICAgICAgIHNl
bGYuX21ldGVyLnByb2dyZXNzKCIlcyVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsIHJlbWFpbl9zdHIpKQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzXG4iICUgKHNlbGYuX2N1
cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkKLQotICAgIGRlZiBfcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jl
c3VsdChzZWxmLCByZXN1bHQpOgotICAgICAgICAiIiJQcmludHMgb25lIHVuZXhwZWN0ZWQgdGVz
dCByZXN1bHQgbGluZS4iIiIKLSAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVY
UEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHQudHlwZV1bMF0KLSAgICAgICAgc2VsZi5fbWV0
ZXIud3JpdGUoIiAgJXMgLT4gdW5leHBlY3RlZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIChzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUocmVzdWx0LmZpbGVuYW1l
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MpKQorICAgICAgICAgICAgZXhwX3N0
ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAg
ICAgICAgICByZXN1bHQuZmlsZW5hbWUpCisgICAgICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhw
ZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0
ciwgZ290X3N0cikKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocmVz
dWx0X3N1bW1hcnksIHNlbGYuX3JldHJpZXMgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCiAKICAgICBkZWYgX2dldF9m
YWlsdXJlcyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzKToKICAgICAgICAg
IiIiRmlsdGVycyBhIGRpY3Qgb2YgcmVzdWx0cyBhbmQgcmV0dXJucyBvbmx5IHRoZSBmYWlsdXJl
cy4KQEAgLTkxMyw4MCArODM5LDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICByZXR1
cm4gZmFpbGVkX3Jlc3VsdHMKIAotICAgIGRlZiBfc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0
cyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSk6Ci0gICAgICAgICIiIlN1bW1h
cml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KLQotICAgICAgICBUT0RPKGRw
cmFua2UpOiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0dXJlIGludG8gYSBzZXBhcmF0ZSBjbGFzcz8K
LQotICAgICAgICBBcmdzOgotICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVj
dCBmcm9tIGluaXRpYWwgdGVzdCBydW5zCi0gICAgICAgICAgcmV0cnlfc3VtbWFyeTogc3VtbWFy
eSBvYmplY3QgZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRyaWVkIHRlc3RzCi0gICAgICAgIFJl
dHVybnM6Ci0gICAgICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRo
ZSB1bmV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUKLSAgICAgICAgICBydW4sIHdpdGggdGhlIGZv
bGxvd2luZyBmaWVsZHM6Ci0gICAgICAgICAgICAndmVyc2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0
b3IgKDEgaW4gdGhpcyB2ZXJzaW9uKQotICAgICAgICAgICAgJ2ZpeGFibGUnOiAjIG9mIGZpeGFi
bGUgdGVzdHMgKE5PVyAtIFBBU1MpCi0gICAgICAgICAgICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBl
ZCB0ZXN0cyAoTk9XICYgU0tJUFBFRCkKLSAgICAgICAgICAgICdudW1fcmVncmVzc2lvbnMnOiAj
IG9mIG5vbi1mbGFreSBmYWlsdXJlcwotICAgICAgICAgICAgJ251bV9mbGFreSc6ICMgb2YgZmxh
a3kgZmFpbHVyZXMKLSAgICAgICAgICAgICdudW1fcGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBh
c3NlcwotICAgICAgICAgICAgJ3Rlc3RzJzogYSBkaWN0IG9mIHRlc3RzIC0+IHsnZXhwZWN0ZWQn
OiAnLi4uJywgJ2FjdHVhbCc6ICcuLi4nfQotICAgICAgICAiIiIKLSAgICAgICAgcmVzdWx0cyA9
IHt9Ci0gICAgICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9IDEKLQotICAgICAgICB0YmUgPSByZXN1
bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbgotICAgICAgICB0YnQgPSByZXN1bHRfc3Vt
bWFyeS50ZXN0c19ieV90aW1lbGluZQotICAgICAgICByZXN1bHRzWydmaXhhYmxlJ10gPSBsZW4o
dGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdKQotICAgICAgICByZXN1bHRzWydza2lw
cGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gJgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKQotCi0gICAgICAg
IG51bV9wYXNzZXMgPSAwCi0gICAgICAgIG51bV9mbGFreSA9IDAKLSAgICAgICAgbnVtX3JlZ3Jl
c3Npb25zID0gMAotICAgICAgICBrZXl3b3JkcyA9IHt9Ci0gICAgICAgIGZvciBrLCB2IGluIFRl
c3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAg
IGtleXdvcmRzW3ZdID0gay51cHBlcigpCi0KLSAgICAgICAgdGVzdHMgPSB7fQotICAgICAgICBm
b3IgZmlsZW5hbWUsIHJlc3VsdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMu
aXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBp
biB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKLSAgICAgICAgICAgICMgd2hldGhlciBvciBu
b3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQpLAotICAg
ICAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1bHQgbm90IGZsYWt5LgotICAg
ICAgICAgICAgdGVzdCA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFt
ZSkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3Rh
dGlvbnNfc3RyaW5nKGZpbGVuYW1lKQotICAgICAgICAgICAgYWN0dWFsID0gW2tleXdvcmRzW3Jl
c3VsdF1dCi0KLSAgICAgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNT
OgotICAgICAgICAgICAgICAgIG51bV9wYXNzZXMgKz0gMQotICAgICAgICAgICAgZWxpZiByZXN1
bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6Ci0gICAgICAgICAgICAgICAgbnVtX3JlZ3Jl
c3Npb25zICs9IDEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZW5h
bWUgbm90IGluIHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzOgotICAgICAgICAgICAg
ICAgICAgICBhY3R1YWwuZXh0ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhw
ZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsZW5hbWUpLnNwbGl0KCIgIikpCi0gICAgICAgICAgICAgICAgICAgIG51bV9mbGFreSAr
PSAxCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0cnlfcmVz
dWx0ID0gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbZmlsZW5hbWVdCi0gICAgICAg
ICAgICAgICAgICAgIGlmIHJlc3VsdCAhPSByZXRyeV9yZXN1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhY3R1YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5X3Jlc3VsdF0pCi0gICAgICAgICAg
ICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQotICAgICAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKLQotICAgICAgICAg
ICAgdGVzdHNbdGVzdF0gPSB7fQotICAgICAgICAgICAgdGVzdHNbdGVzdF1bJ2V4cGVjdGVkJ10g
PSBleHBlY3RlZAotICAgICAgICAgICAgdGVzdHNbdGVzdF1bJ2FjdHVhbCddID0gIiAiLmpvaW4o
YWN0dWFsKQotCi0gICAgICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0ZXN0cwotICAgICAgICByZXN1
bHRzWydudW1fcGFzc2VzJ10gPSBudW1fcGFzc2VzCi0gICAgICAgIHJlc3VsdHNbJ251bV9mbGFr
eSddID0gbnVtX2ZsYWt5Ci0gICAgICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9ucyddID0gbnVt
X3JlZ3Jlc3Npb25zCi0KLSAgICAgICAgcmV0dXJuIHJlc3VsdHMKLQogICAgIGRlZiBfd3JpdGVf
anNvbl9maWxlcyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMsIHJlc3VsdF9zdW1tYXJ5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAi
IiJXcml0ZXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3QgcnVuIGFzIEpTT04gZmlsZXMgaW50byB0
aGUgcmVzdWx0cwpAQCAtMTAyNywxMyArODc5LDExIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAg
ICAgICAgX2xvZy5kZWJ1ZygiRmluaXNoZWQgd3JpdGluZyBKU09OIGZpbGVzLiIpCiAKLSAgICBk
ZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1
bW1hcnksCisgICAgZGVmIF9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwgcmVz
dWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0X3R5cGUsIHJlc3VsdF90eXBlX3N0cik6CiAgICAgICAgICIiIlByaW50IHRoZSBudW1iZXIg
b2YgdGhlIHRlc3RzIGluIGEgZ2l2ZW4gcmVzdWx0IGNsYXNzLgogCiAgICAgICAgIEFyZ3M6Ci0g
ICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dn
aW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkgLSB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHRzIHRv
IHJlcG9ydCBvbgogICAgICAgICAgIHJlc3VsdF90eXBlIC0gdGhlIHBhcnRpY3VsYXIgcmVzdWx0
IHR5cGUgdG8gcmVwb3J0IGluIHRoZSBzdW1tYXJ5LgogICAgICAgICAgIHJlc3VsdF90eXBlX3N0
ciAtIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSByZXN1bHRfdHlwZS4KQEAgLTEwNDgsOCAr
ODk4LDkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgZm10c3RyID0gKCJFeHBlY3Q6ICUl
NWQgJSUtOHMgKCUlJWRkIG5vdywgJSUlZGQgZGVmZXIsICUlJWRkIHdvbnRmaXgpIgogICAgICAg
ICAgICAgICAgICAgJSAoc2VsZi5fbnVtX2RpZ2l0cyhub3cpLCBzZWxmLl9udW1fZGlnaXRzKGRl
ZmVyKSwKICAgICAgICAgICAgICAgICAgIHNlbGYuX251bV9kaWdpdHMod29udGZpeCkpKQotICAg
ICAgICB3cml0ZShmbXRzdHIgJSAobGVuKHRlc3RzKSwgcmVzdWx0X3R5cGVfc3RyLCBsZW4odGVz
dHMgJiBub3cpLAotICAgICAgICAgICAgICBsZW4odGVzdHMgJiBkZWZlciksIGxlbih0ZXN0cyAm
IHdvbnRmaXgpKSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZChmbXRzdHIg
JQorICAgICAgICAgICAgKGxlbih0ZXN0cyksIHJlc3VsdF90eXBlX3N0ciwgbGVuKHRlc3RzICYg
bm93KSwKKyAgICAgICAgICAgICBsZW4odGVzdHMgJiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRm
aXgpKSkKIAogICAgIGRlZiBfbnVtX2RpZ2l0cyhzZWxmLCBudW0pOgogICAgICAgICAiIiJSZXR1
cm5zIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGxlbmd0aCBv
ZiBhCkBAIC0xMDU5LDQzICs5MTAsMzkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAg
IG5kaWdpdHMgPSBpbnQobWF0aC5sb2cxMChsZW4obnVtKSkpICsgMQogICAgICAgICByZXR1cm4g
bmRpZ2l0cwogCi0gICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwg
dG90YWxfdGltZSwgdGhyZWFkX3RpbWluZ3MsCisgICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlz
dGljcyhzZWxmLCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CiAg
ICAgICAgICIiIlJlY29yZCB0aW1pbmctc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZXN0
IHJ1bi4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdy
aXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lz
LnN0ZG91dC53cml0ZS4KICAgICAgICAgICB0b3RhbF90aW1lOiB0b3RhbCBlbGFwc2VkIHRpbWUg
KGluIHNlY29uZHMpIGZvciB0aGUgdGVzdCBydW4KICAgICAgICAgICB0aHJlYWRfdGltaW5nczog
d2FsbCBjbG9jayB0aW1lIGVhY2ggdGhyZWFkIHJhbiBmb3IKICAgICAgICAgICBkaXJlY3Rvcnlf
dGVzdF90aW1pbmdzOiB0aW1pbmcgYnkgZGlyZWN0b3J5CiAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBmaWxlCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1
bW1hcnkgb2JqZWN0IGZvciB0aGUgdGVzdCBydW4KICAgICAgICAgIiIiCi0gICAgICAgIHdyaXRl
KCJUZXN0IHRpbWluZzoiKQotICAgICAgICB3cml0ZSgiICAlNi4yZiB0b3RhbCB0ZXN0aW5nIHRp
bWUiICUgdG90YWxfdGltZSkKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHdyaXRlKCJUaHJl
YWQgdGltaW5nOiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCJUZXN0IHRp
bWluZzoiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICAlNi4yZiB0b3Rh
bCB0ZXN0aW5nIHRpbWUiICUgdG90YWxfdGltZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCJUaHJlYWQg
dGltaW5nOiIpCiAgICAgICAgIGN1bWxfdGltZSA9IDAKICAgICAgICAgZm9yIHQgaW4gdGhyZWFk
X3RpbWluZ3M6Ci0gICAgICAgICAgICB3cml0ZSgiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYg
c2VjcyIgJQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgICAlMTBz
OiAlNWQgdGVzdHMsICU2LjJmIHNlY3MiICUKICAgICAgICAgICAgICAgICAgICh0WyduYW1lJ10s
IHRbJ251bV90ZXN0cyddLCB0Wyd0b3RhbF90aW1lJ10pKQogICAgICAgICAgICAgY3VtbF90aW1l
ICs9IHRbJ3RvdGFsX3RpbWUnXQotICAgICAgICB3cml0ZSgiICAgJTYuMmYgY3VtdWxhdGl2ZSwg
JTYuMmYgb3B0aW1hbCIgJQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICAg
JTYuMmYgY3VtdWxhdGl2ZSwgJTYuMmYgb3B0aW1hbCIgJQogICAgICAgICAgICAgICAoY3VtbF90
aW1lLCBjdW1sX3RpbWUgLyBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpKSkKLSAg
ICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQog
Ci0gICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Mod3JpdGUsIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzKQotICAgICAgICBzZWxmLl9wcmludF9pbmRpdmlkdWFsX3Rl
c3RfdGltZXMod3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICBzZWxmLl9w
cmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNzKGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQor
ICAgICAgICBzZWxmLl9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Mod3JpdGUs
IGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50X2RpcmVjdG9yeV90
aW1pbmdzKGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpCiAKLSAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0
ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgd3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToK
KyAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJQcmludHMgYWdncmVnYXRlIHN0YXRpc3RpY3Mg
KGUuZy4gbWVkaWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRlc3RzLgogICAgICAgICBBcmdzOgot
ICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9n
Z2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAg
ICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiBkdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5UZXN0U3RhdHMKICAgICAgICAgICAgICAgZm9yIGFsbCB0ZXN0cy4KICAgICAgICAgIiIiCkBA
IC0xMTE3LDIzICs5NjQsMjEgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICB0
aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlwZV0uYXBwZW5kKAogICAgICAgICAgICAgICAgICAg
ICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGVdKQogCi0gICAgICAgIHNlbGYuX3ByaW50X3N0YXRp
c3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlz
dGljc19mb3JfdGVzdF90aW1pbmdzKAogICAgICAgICAgICAgIlBFUiBURVNUIFRJTUUgSU4gVEVT
VFNIRUxMIChzZWNvbmRzKToiLAogICAgICAgICAgICAgdGltZXNfZm9yX2R1bXBfcmVuZGVyX3Ry
ZWUpCi0gICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0
ZSwKKyAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKAogICAg
ICAgICAgICAgIlBFUiBURVNUIERJRkYgUFJPQ0VTU0lORyBUSU1FUyAoc2Vjb25kcyk6IiwKICAg
ICAgICAgICAgIHRpbWVzX2Zvcl9kaWZmX3Byb2Nlc3NpbmcpCiAgICAgICAgIGZvciB0ZXN0X3R5
cGUgaW4gdGVzdF90eXBlczoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9y
X3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3Nf
Zm9yX3Rlc3RfdGltaW5ncygKICAgICAgICAgICAgICAgICAiUEVSIFRFU1QgVElNRVMgQlkgVEVT
VCBUWVBFOiAlcyIgJSB0ZXN0X3R5cGUsCiAgICAgICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3Rf
dHlwZVt0ZXN0X3R5cGVdKQogCi0gICAgZGVmIF9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMo
c2VsZiwgd3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgIGRlZiBfcHJpbnRfaW5k
aXZpZHVhbF90ZXN0X3RpbWVzKHNlbGYsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIi
UHJpbnRzIHRoZSBydW4gdGltZXMgZm9yIHNsb3csIHRpbWVvdXQgYW5kIGNyYXNoIHRlc3RzLgog
ICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8g
dG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53
cml0ZS4KICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiBkdW1wX3Jl
bmRlcl90cmVlX3RocmVhZC5UZXN0U3RhdHMKICAgICAgICAgICAgICAgZm9yIGFsbCB0ZXN0cy4K
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9yIHRlc3QgcnVuCkBA
IC0xMTU1LDcgKzEwMDAsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHNs
b3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCiAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lIGlu
IHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3Vs
dF9zdW1tYXJ5LnJlc3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVz
dWx0X3N1bW1hcnkucmVzdWx0c1tmaWxlbmFtZV0udHlwZQogICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCBvcgogICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpOgogICAgICAgICAgICAgICAgICAg
ICBpc190aW1lb3V0X2NyYXNoX29yX3Nsb3cgPSBUcnVlCkBAIC0xMTY2LDQyICsxMDExLDM4IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgbnVtX3ByaW50ZWQgPSBudW1fcHJp
bnRlZCArIDEKICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMuYXBwZW5kKHRl
c3RfdHVwbGUpCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Rlc3Rf
bGlzdF90aW1pbmcod3JpdGUsICIlcyBzbG93ZXN0IHRlc3RzIHRoYXQgYXJlIG5vdCAiCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludF90
ZXN0X2xpc3RfdGltaW5nKCIlcyBzbG93ZXN0IHRlc3RzIHRoYXQgYXJlIG5vdCAiCiAgICAgICAg
ICAgICAibWFya2VkIGFzIFNMT1cgYW5kIGRpZCBub3QgdGltZW91dC9jcmFzaDoiICUKICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMubnVtX3Nsb3dfdGVzdHNfdG9fbG9nLCB1bmV4cGVjdGVkX3Ns
b3dfdGVzdHMpCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xp
c3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgbWFya2VkIGFzIFNMT1c6IiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzbG93X3Rlc3RzKQotICAgICAgICB3cml0ZSgiIikKLSAg
ICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0ZSwgIlRlc3RzIHRoYXQgdGlt
ZWQgb3V0IG9yIGNyYXNoZWQ6IiwKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmco
IiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoIlRlc3RzIG1hcmtlZCBh
cyBTTE9XOiIsIHNsb3dfdGVzdHMpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5n
KCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKCJUZXN0cyB0aGF0IHRp
bWVkIG91dCBvciBjcmFzaGVkOiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZW91dF9vcl9jcmFzaF90ZXN0cykKLSAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQogCi0gICAgZGVmIF9wcmludF90ZXN0X2xpc3Rf
dGltaW5nKHNlbGYsIHdyaXRlLCB0aXRsZSwgdGVzdF9saXN0KToKKyAgICBkZWYgX3ByaW50X3Rl
c3RfbGlzdF90aW1pbmcoc2VsZiwgdGl0bGUsIHRlc3RfbGlzdCk6CiAgICAgICAgICIiIlByaW50
IHRpbWluZyBpbmZvIGZvciBlYWNoIHRlc3QuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3
cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIp
IG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgdGl0bGU6IHNl
Y3Rpb24gaGVhZGluZwogICAgICAgICAgIHRlc3RfbGlzdDogdGVzdHMgdGhhdCBmYWxsIGluIHRo
aXMgc2VjdGlvbgogICAgICAgICAiIiIKLSAgICAgICAgd3JpdGUodGl0bGUpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKHRpdGxlKQogICAgICAgICBmb3IgdGVzdF90dXBsZSBp
biB0ZXN0X2xpc3Q6CiAgICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfdHVwbGUuZmlsZW5hbWVb
bGVuKAogICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6
XQogICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsICcvJykKICAg
ICAgICAgICAgIHRlc3RfcnVuX3RpbWUgPSByb3VuZCh0ZXN0X3R1cGxlLnRlc3RfcnVuX3RpbWUs
IDEpCi0gICAgICAgICAgICB3cml0ZSgiICAlcyB0b29rICVzIHNlY29uZHMiICUgKGZpbGVuYW1l
LCB0ZXN0X3J1bl90aW1lKSkKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5n
KCIgICVzIHRvb2sgJXMgc2Vjb25kcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lKSkKIAotICAgIGRlZiBfcHJpbnRfZGly
ZWN0b3J5X3RpbWluZ3Moc2VsZiwgd3JpdGUsIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpOgorICAg
IGRlZiBfcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Moc2VsZiwgZGlyZWN0b3J5X3Rlc3RfdGltaW5n
cyk6CiAgICAgICAgICIiIlByaW50IHRpbWluZyBpbmZvIGJ5IGRpcmVjdG9yeSBmb3IgYW55IGRp
cmVjdG9yaWVzIHRoYXQKICAgICAgICAgdGFrZSA+IDEwIHNlY29uZHMgdG8gcnVuLgogCiAgICAg
ICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAo
ZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRl
LgogICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZzogdGltZSBpbmZvIGZvciBlYWNoIGRp
cmVjdG9yeQogICAgICAgICAiIiIKICAgICAgICAgdGltaW5ncyA9IFtdCkBAIC0xMjExLDI1ICsx
MDUyLDI0IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVtX3Rlc3RzKSkKICAgICAgICAgdGltaW5ncy5zb3J0KCkKIAotICAgICAgICB3cml0ZSgiVGlt
ZSB0byBwcm9jZXNzIHNsb3dlc3Qgc3ViZGlyZWN0b3JpZXM6IikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIlRpbWUgdG8gcHJvY2VzcyBzbG93ZXN0IHN1YmRpcmVjdG9yaWVz
OiIpCiAgICAgICAgIG1pbl9zZWNvbmRzX3RvX3ByaW50ID0gMTAKICAgICAgICAgZm9yIHRpbWlu
ZyBpbiB0aW1pbmdzOgogICAgICAgICAgICAgaWYgdGltaW5nWzBdID4gbWluX3NlY29uZHNfdG9f
cHJpbnQ6Ci0gICAgICAgICAgICAgICAgd3JpdGUoIiAgJXMgdG9vayAlcyBzZWNvbmRzIHRvIHJ1
biAlcyB0ZXN0cy4iICUgKHRpbWluZ1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdb
MF0sIHRpbWluZ1syXSkpCi0gICAgICAgIHdyaXRlKCIiKQorICAgICAgICAgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdGltaW5nKAorICAgICAgICAgICAgICAgICAgICAiICAlcyB0b29rICVz
IHNlY29uZHMgdG8gcnVuICVzIHRlc3RzLiIgJSAodGltaW5nWzFdLAorICAgICAgICAgICAgICAg
ICAgICB0aW1pbmdbMF0sIHRpbWluZ1syXSkpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dGltaW5nKCIiKQogCi0gICAgZGVmIF9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mo
c2VsZiwgd3JpdGUsIHRpdGxlLCB0aW1pbmdzKToKKyAgICBkZWYgX3ByaW50X3N0YXRpc3RpY3Nf
Zm9yX3Rlc3RfdGltaW5ncyhzZWxmLCB0aXRsZSwgdGltaW5ncyk6CiAgICAgICAgICIiIlByaW50
cyB0aGUgbWVkaWFuLCBtZWFuIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIHZhbHVlcyBp
bgogICAgICAgICB0aW1pbmdzLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEg
Y2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAg
ICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHRpdGxlOiBUaXRsZSBmb3Ig
dGhlc2UgdGltaW5ncy4KICAgICAgICAgICB0aW1pbmdzOiBBIGxpc3Qgb2YgZmxvYXRzIHJlcHJl
c2VudGluZyB0aW1lcy4KICAgICAgICAgIiIiCi0gICAgICAgIHdyaXRlKHRpdGxlKQorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZyh0aXRsZSkKICAgICAgICAgdGltaW5ncy5zb3J0
KCkKIAogICAgICAgICBudW1fdGVzdHMgPSBsZW4odGltaW5ncykKQEAgLTEyNTEsMTkgKzEwOTEs
MTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHN1bV9vZl9kZXZpYXRpb25zID0g
bWF0aC5wb3codGltZSAtIG1lYW4sIDIpCiAKICAgICAgICAgc3RkX2RldmlhdGlvbiA9IG1hdGgu
c3FydChzdW1fb2ZfZGV2aWF0aW9ucyAvIG51bV90ZXN0cykKLSAgICAgICAgd3JpdGUoIiAgTWVk
aWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRpYW4pCi0gICAgICAgIHdyaXRlKCIgIE1lYW46ICAg
ICAgICAgICAgJTYuM2YiICUgbWVhbikKLSAgICAgICAgd3JpdGUoIiAgOTB0aCBwZXJjZW50aWxl
OiAlNi4zZiIgJSBwZXJjZW50aWxlOTApCi0gICAgICAgIHdyaXRlKCIgIDk5dGggcGVyY2VudGls
ZTogJTYuM2YiICUgcGVyY2VudGlsZTk5KQotICAgICAgICB3cml0ZSgiICBTdGFuZGFyZCBkZXY6
ICAgICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCi0gICAgICAgIHdyaXRlKCIiKQotCi0gICAgZGVm
IF9wcmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnkpOgorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICBNZWRpYW46ICAgICAgICAgICU2LjNm
IiAlIG1lZGlhbikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgTWVhbjog
ICAgICAgICAgICAlNi4zZiIgJSBtZWFuKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rp
bWluZygiICA5MHRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5MCkKKyAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgOTl0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBw
ZXJjZW50aWxlOTkpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIFN0YW5k
YXJkIGRldjogICAgJTYuM2YiICUgc3RkX2RldmlhdGlvbikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90aW1pbmcoIiIpCisKKyAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHNlbGYs
IHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUHJpbnQgYSBzaG9ydCBzdW1tYXJ5IGFib3V0
IGhvdyBtYW55IHRlc3RzIHBhc3NlZC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRl
OiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IK
LSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFy
eTogaW5mb3JtYXRpb24gdG8gbG9nCiAgICAgICAgICIiIgogICAgICAgICBmYWlsZWQgPSBsZW4o
cmVzdWx0X3N1bW1hcnkuZmFpbHVyZXMpCkBAIC0xMjc1LDMwICsxMTEzLDI4IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgIGlmIHRvdGFsID4gMDoKICAgICAgICAgICAgIHBjdF9wYXNzZWQg
PSBmbG9hdChwYXNzZWQpICogMTAwIC8gdG90YWwKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAg
ICAgd3JpdGUoIj0+IFJlc3VsdHM6ICVkLyVkIHRlc3RzIHBhc3NlZCAoJS4xZiUlKSIgJQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF9hY3R1YWwoIj0+IFJlc3VsdHM6ICVkLyVkIHRlc3RzIHBhc3NlZCAoJS4xZiUlKSIg
JQogICAgICAgICAgICAgICAgICAgICAgKHBhc3NlZCwgdG90YWwsIHBjdF9wYXNzZWQpKQotICAg
ICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnko
d3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVh
bCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1
bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5OT1csICJUZXN0cyB0byBiZSBm
aXhlZCBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZSIpCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAg
ICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFy
eSwKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYu
X3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAg
dGVzdF9leHBlY3RhdGlvbnMuREVGRVIsCiAgICAgICAgICAgICAiVGVzdHMgd2UnbGwgZml4IGlu
IHRoZSBmdXR1cmUgaWYgdGhleSBmYWlsIChERUZFUikiKQogCi0gICAgICAgIHdyaXRlKCIiKQot
ICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1
bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBz
ZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAg
ICAgIHRlc3RfZXhwZWN0YXRpb25zLldPTlRGSVgsCiAgICAgICAgICAgICAiVGVzdHMgdGhhdCB3
aWxsIG9ubHkgYmUgZml4ZWQgaWYgdGhleSBjcmFzaCAoV09OVEZJWCkiKQogCi0gICAgZGVmIF9w
cmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksIHRp
bWVsaW5lLAorICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkoc2VsZiwgcmVzdWx0
X3N1bW1hcnksIHRpbWVsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVhZGluZyk6CiAgICAgICAgICIiIlByaW50IGEgc3VtbWFyeSBibG9jayBvZiByZXN1bHRzIGZv
ciBhIHBhcnRpY3VsYXIgdGltZWxpbmUgb2YgdGVzdC4KIAogICAgICAgICBBcmdzOgotICAgICAg
ICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dy
aXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICByZXN1
bHRfc3VtbWFyeTogc3VtbWFyeSB0byBwcmludCByZXN1bHRzIGZvcgogICAgICAgICAgIHRpbWVs
aW5lOiB0aGUgdGltZWxpbmUgdG8gcHJpbnQgcmVzdWx0cyBmb3IgKE5PVCwgV09OVEZJWCwgZXRj
LikKICAgICAgICAgICBoZWFkaW5nOiBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHRpbWVs
aW5lCkBAIC0xMzA3LDcgKzExNDMsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBub3Rf
cGFzc2luZyA9ICh0b3RhbCAtCiAgICAgICAgICAgIGxlbihyZXN1bHRfc3VtbWFyeS50ZXN0c19i
eV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTXSAmCiAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0aW1lbGluZV0pKQotICAgICAgICB3cml0
ZSgiPT4gJXMgKCVkKToiICUgKGhlYWRpbmcsIG5vdF9wYXNzaW5nKSkKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF9hY3R1YWwoIj0+ICVzICglZCk6IiAlIChoZWFkaW5nLCBub3RfcGFzc2lu
ZykpCiAKICAgICAgICAgZm9yIHJlc3VsdCBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RB
VElPTl9PUkRFUjoKICAgICAgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTOgpAQCAtMTMxNyw5NCArMTE1Myw4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAg
ICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jl
c3VsdF0KICAgICAgICAgICAgIGlmIG5vdF9wYXNzaW5nIGFuZCBsZW4ocmVzdWx0cyk6CiAgICAg
ICAgICAgICAgICAgcGN0ID0gbGVuKHJlc3VsdHMpICogMTAwLjAgLyBub3RfcGFzc2luZwotICAg
ICAgICAgICAgICAgIHdyaXRlKCIgICU1ZCAlLTI0cyAoJTQuMWYlJSkiICUgKGxlbihyZXN1bHRz
KSwKLSAgICAgICAgICAgICAgICAgICAgICBkZXNjW2xlbihyZXN1bHRzKSAhPSAxXSwgcGN0KSkK
LQotICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfc3VtbWFyeShzZWxmLCB0b3RhbCwgZXhwZWN0ZWQp
OgotICAgICAgICAiIiJQcmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2YgdGhlIHRlc3QgcnVuIHRv
IHN0ZG91dC4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRvdGFsOiB0b3RhbCBudW1iZXIg
b2YgdGVzdHMgcnVuCi0gICAgICAgICAgZXhwZWN0ZWQ6IG51bWJlciBvZiBleHBlY3RlZCByZXN1
bHRzCi0gICAgICAgICIiIgotICAgICAgICB1bmV4cGVjdGVkID0gdG90YWwgLSBleHBlY3RlZAot
ICAgICAgICBpZiB1bmV4cGVjdGVkID09IDA6Ci0gICAgICAgICAgICBwcmludCAiQWxsICVkIHRl
c3RzIHJhbiBhcyBleHBlY3RlZC4iICUgZXhwZWN0ZWQKLSAgICAgICAgZWxpZiBleHBlY3RlZCA9
PSAxOgotICAgICAgICAgICAgcHJpbnQgIjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4n
dDoiICUgdW5leHBlY3RlZAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgIiVkIHRl
c3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OiIgJSAoZXhwZWN0ZWQsCi0gICAgICAgICAg
ICAgICAgdW5leHBlY3RlZCkKLQotICAgIGRlZiBfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHNl
bGYsIHVuZXhwZWN0ZWRfcmVzdWx0cyk6Ci0gICAgICAgICIiIlByaW50cyBhbnkgdW5leHBlY3Rl
ZCByZXN1bHRzIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybSB0byBzdGRvdXQuIiIiCi0gICAgICAg
IHBhc3NlcyA9IHt9Ci0gICAgICAgIGZsYWt5ID0ge30KLSAgICAgICAgcmVncmVzc2lvbnMgPSB7
fQotCi0gICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pOgotICAgICAg
ICAgICAgcHJpbnQgIiIKLQotICAgICAgICBmb3IgdGVzdCwgcmVzdWx0cyBpbiB1bmV4cGVjdGVk
X3Jlc3VsdHNbJ3Rlc3RzJ10uaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBhY3R1YWwgPSByZXN1
bHRzWydhY3R1YWwnXS5zcGxpdCgiICIpCi0gICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdHNb
J2V4cGVjdGVkJ10uc3BsaXQoIiAiKQotICAgICAgICAgICAgaWYgYWN0dWFsID09IFsnUEFTUydd
OgotICAgICAgICAgICAgICAgIGlmICdDUkFTSCcgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAg
ICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gY3Jhc2gsIGJ1dCBwYXNzZWQnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKLSAgICAgICAg
ICAgICAgICBlbGlmICdUSU1FT1VUJyBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAg
X2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byB0aW1lb3V0LCBidXQgcGFzc2VkJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQotICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNz
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQg
dG8gZmFpbCwgYnV0IHBhc3NlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0KQotICAgICAgICAgICAgZWxpZiBsZW4oYWN0dWFsKSA+IDE6Ci0gICAgICAg
ICAgICAgICAgIyBXZSBncm91cCBmbGFreSB0ZXN0cyBieSB0aGUgZmlyc3QgYWN0dWFsIHJlc3Vs
dCB3ZSBnb3QuCi0gICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKGZsYWt5LCBh
Y3R1YWxbMF0sIHRlc3QpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIF9hZGRf
dG9fZGljdF9vZl9saXN0cyhyZWdyZXNzaW9ucywgcmVzdWx0c1snYWN0dWFsJ10sIHRlc3QpCi0K
LSAgICAgICAgaWYgbGVuKHBhc3Nlcyk6Ci0gICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBw
YXNzZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIiVzOiAoJWQpIiAlIChr
ZXksIGxlbih0ZXN0cykpCi0gICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCi0gICAgICAgICAg
ICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICIgICVz
IiAlIHRlc3QKLSAgICAgICAgICAgICAgICBwcmludAotCi0gICAgICAgIGlmIGxlbihmbGFreSk6
Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RB
VElPTl9ERVNDUklQVElPTlMKLSAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5Lml0
ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxl
LkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KLSAgICAgICAgICAgICAgICBwcmludCAiVW5leHBl
Y3RlZCBmbGFraW5lc3M6ICVzICglZCkiICUgKAotICAgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpCi0gICAgICAgICAgICAgICAgdGVzdHMuc29ydCgp
Ci0KLSAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddW3Rlc3RdCi0gICAgICAgICAg
ICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdFsnYWN0dWFsJ10uc3BsaXQoIiAiKQotICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdFsnZXhwZWN0ZWQnXS5zcGxpdCgiICIpCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9O
U1trZXkubG93ZXIoKV0KLSAgICAgICAgICAgICAgICAgICAgbmV3X2V4cGVjdGF0aW9uc19saXN0
ID0gbGlzdChzZXQoYWN0dWFsKSB8IHNldChleHBlY3RlZCkpCi0gICAgICAgICAgICAgICAgICAg
IHByaW50ICIgICVzID0gJXMiICUgKHRlc3QsICIgIi5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlz
dCkpCi0gICAgICAgICAgICAgICAgcHJpbnQKLQotICAgICAgICBpZiBsZW4ocmVncmVzc2lvbnMp
OgotICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNU
QVRJT05fREVTQ1JJUFRJT05TCi0gICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiByZWdyZXNz
aW9ucy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRp
b25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCi0gICAgICAgICAgICAgICAgcHJpbnQg
IlJlZ3Jlc3Npb25zOiBVbmV4cGVjdGVkICVzIDogKCVkKSIgJSAoCi0gICAgICAgICAgICAgICAg
ICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVuKHRlc3RzKSkKLSAgICAgICAgICAgICAgICB0
ZXN0cy5zb3J0KCkKLSAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAg
ICAgICAgICAgICAgcHJpbnQgIiAgJXMgPSAlcyIgJSAodGVzdCwga2V5KQotICAgICAgICAgICAg
ICAgIHByaW50Ci0KLSAgICAgICAgaWYgbGVuKHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSkg
YW5kIHNlbGYuX29wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgIHByaW50ICItIiAqIDc4Cisg
ICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiAgJTVkICUtMjRzICgl
NC4xZiUlKSIgJQorICAgICAgICAgICAgICAgICAgICAobGVuKHJlc3VsdHMpLCBkZXNjW2xlbihy
ZXN1bHRzKSAhPSAxXSwgcGN0KSkKIAogICAgIGRlZiBfd3JpdGVfcmVzdWx0c19odG1sX2ZpbGUo
c2VsZiwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJXcml0ZSByZXN1bHRzLmh0bWwgd2hp
Y2ggaXMgYSBzdW1tYXJ5IG9mIHRlc3RzIHRoYXQgZmFpbGVkLgpAQCAtMTQ2NCwxMCArMTIxNCw2
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0
bWxfZmlsZShyZXN1bHRzX2ZpbGVuYW1lKQogCiAKLWRlZiBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMo
ZGljdCwga2V5LCB2YWx1ZSk6Ci0gICAgZGljdC5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2
YWx1ZSkKLQotCiBkZWYgcmVhZF90ZXN0X2ZpbGVzKGZpbGVzKToKICAgICB0ZXN0cyA9IFtdCiAg
ICAgZm9yIGZpbGUgaW4gZmlsZXM6CkBAIC0xNDc5LDI1ICsxMjI1LDExIEBAIGRlZiByZWFkX3Rl
c3RfZmlsZXMoZmlsZXMpOgogICAgIHJldHVybiB0ZXN0cwogCiAKLWRlZiBjcmVhdGVfbG9nZ2lu
Z193cml0ZXIob3B0aW9ucywgbG9nX29wdGlvbik6Ci0gICAgIiIiUmV0dXJucyBhIHdyaXRlKCkg
ZnVuY3Rpb24gdGhhdCB3aWxsIHdyaXRlIHRoZSBzdHJpbmcgdG8gX2xvZy5pbmZvKCkKLSAgICBp
ZiBjb21wIHdhcyBzcGVjaWZpZWQgaW4gLS1sb2cgb3IgaWYgLS12ZXJib3NlIGlzIHRydWUuIE90
aGVyd2lzZSB0aGUKLSAgICBtZXNzYWdlIGlzIGRyb3BwZWQuCi0KLSAgICBBcmdzOgotICAgICAg
b3B0aW9uczogbGlzdCBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmcm9tIG9wdHBhcnNlCi0gICAg
ICBsb2dfb3B0aW9uOiBvcHRpb24gdG8gbWF0Y2ggaW4gb3B0aW9ucy5sb2cgaW4gb3JkZXIgZm9y
IHRoZSBtZXNzYWdlcwotICAgICAgICAgIHRvIGJlIGxvZ2dlZCAoZS5nLiwgJ2FjdHVhbCcgb3Ig
J2V4cGVjdGVkJykKLSAgICAiIiIKLSAgICBpZiBvcHRpb25zLnZlcmJvc2Ugb3IgbG9nX29wdGlv
biBpbiBvcHRpb25zLmxvZy5zcGxpdCgiLCIpOgotICAgICAgICByZXR1cm4gX2xvZy5pbmZvCi0g
ICAgcmV0dXJuIGxhbWJkYSBzdHI6IDEKLQotCi1kZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmlu
dF9yZXN1bHRzPVRydWUpOgorZGVmIHJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncyk6CiAgICAg
IiIiUnVuIHRoZSB0ZXN0cy4KIAogICAgIEFyZ3M6CisgICAgICBwb3J0X29iajogUG9ydCBvYmpl
Y3QgZm9yIHBvcnQtc3BlY2lmaWMgYmVoYXZpb3IKICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFy
eSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAgICAgYXJnczogYSBsaXN0IG9mIHN1YiBkaXJl
Y3RvcmllcyBvciBmaWxlcyB0byB0ZXN0CiAgICAgICBwcmludF9yZXN1bHRzOiB3aGV0aGVyIG9y
IG5vdCB0byBsb2cgYW55dGhpbmcgdG8gc3Rkb3V0LgpAQCAtMTUwNywyMiArMTIzOSwyNCBAQCBk
ZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICAgIGVy
cm9yLgogICAgICIiIgogCi0gICAgaWYgb3B0aW9ucy5zb3VyY2VzOgotICAgICAgICBvcHRpb25z
LnZlcmJvc2UgPSBUcnVlCisgICAgIyBDb25maWd1cmUgdGhlIHByaW50aW5nIHN1YnN5c3RlbSBm
b3IgcHJpbnRpbmcgb3V0cHV0LCBsb2dnaW5nIGRlYnVnCisgICAgIyBpbmZvLCBhbmQgdHJhY2lu
ZyB0ZXN0cy4KIAotICAgICMgU2V0IHVwIG91ciBsb2dnaW5nIGZvcm1hdC4KLSAgICBtZXRlciA9
IG1ldGVyZWRfc3RyZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLCBzeXMuc3RkZXJy
KQotICAgIGxvZ19mbXQgPSAnJShtZXNzYWdlKXMnCi0gICAgbG9nX2RhdGVmbXQgPSAnJXklbSVk
ICVIOiVNOiVTJwotICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwotICAgIGlmIG9wdGlvbnMu
dmVyYm9zZToKLSAgICAgICAgbG9nX2ZtdCA9ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUo
bGluZW5vKS00ZCAlKGxldmVsbmFtZSlzICcKLSAgICAgICAgICAgICAgICAgICclKG1lc3NhZ2Up
cycpCi0gICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKLSAgICBsb2dnaW5nLmJhc2lj
Q29uZmlnKGxldmVsPWxvZ19sZXZlbCwgZm9ybWF0PWxvZ19mbXQsIGRhdGVmbXQ9bG9nX2RhdGVm
bXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW09bWV0ZXIpCisgICAgaWYgbm90IG9w
dGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgorICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJm
L2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50ICsgMS4KKyAgICAgICAgb3B0aW9u
cy5jaGlsZF9wcm9jZXNzZXMgPSBwb3J0X29iai5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpCisK
KyAgICBwcmludGVyID0gb3V0cHV0LkNvbnRyb2xsZXIocG9ydF9vYmosIG9wdGlvbnMsIHJlZ3Vs
YXJfb3V0cHV0PXN5cy5zdGRlcnIsCisgICAgICAgIGJ1aWxkYm90X291dHB1dD1zeXMuc3Rkb3V0
LAorICAgICAgICBjaGlsZF9wcm9jZXNzZXM9aW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwK
KyAgICAgICAgaXNfZnVsbHlfcGFyYWxsZWw9b3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFy
YWxsZWwpCisgICAgaWYgb3B0aW9ucy5oZWxwX3ByaW50aW5nOgorICAgICAgICBwcmludGVyLmhl
bHBfcHJpbnRpbmcoKQorICAgIGlmIG9wdGlvbnMuaGVscF90cmFjZToKKyAgICAgICAgcHJpbnRl
ci5oZWxwX3RyYWNlKCkKKyAgICBpZiBvcHRpb25zLmhlbHBfcHJpbnRpbmcgb3Igb3B0aW9ucy5o
ZWxwX3RyYWNlOgorICAgICAgICByZXR1cm4gMAogCi0gICAgcG9ydF9vYmogPSBwb3J0LmdldChv
cHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQogICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCiAK
ICAgICBpZiBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgpAQCAtMTU1OCw4ICsxMjkyLDggQEAg
ZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgIyBK
dXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhl
IG90aGVyCiAgICAgICAgICMgZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5IGFyZSBleHBs
aWNpdGx5IHVzZWQgZm9yIGNyb3NzLXJ1bgogICAgICAgICAjIHRyYWNraW5nLgotICAgICAgICBt
ZXRlci51cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJlc3VsdHMgaW4gJXMiICUKLSAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIHByaW50ZXIucHJp
bnRfdXBkYXRlKCJDbG9iYmVyaW5nIG9sZCByZXN1bHRzIGluICVzIiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAgICAgICAgIGxheW91
dF90ZXN0c19kaXIgPSBwb3J0X29iai5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAgcG9zc2li
bGVfZGlycyA9IG9zLmxpc3RkaXIobGF5b3V0X3Rlc3RzX2RpcikKICAgICAgICAgZm9yIGRpcm5h
bWUgaW4gcG9zc2libGVfZGlyczoKQEAgLTE1NjcsMTcgKzEzMDEsNiBAQCBkZWYgbWFpbihvcHRp
b25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5y
bXRyZWUob3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIGRpcm5hbWUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlX2Vycm9ycz1UcnVlKQogCi0gICAg
aWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgotICAgICAgICAjIEZJWE1FOiBJbnZlc3Rp
Z2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50ICsgMS4KLSAgICAg
ICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBwb3J0X29iai5kZWZhdWx0X2NoaWxkX3Byb2Nl
c3NlcygpCi0KLSAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAnY29u
ZmlnJykKLSAgICBpZiBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9PSAxOgotICAgICAgICB3cml0
ZSgiUnVubmluZyBvbmUgJXMiICUgcG9ydF9vYmouZHJpdmVyX25hbWUpCi0gICAgZWxzZToKLSAg
ICAgICAgd3JpdGUoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlICgKLSAgICAgICAgICAg
ICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMsIHBvcnRfb2JqLmRyaXZlcl9uYW1lKCkpKQotCiAg
ICAgaWYgbm90IG9wdGlvbnMudGltZV9vdXRfbXM6CiAgICAgICAgIGlmIG9wdGlvbnMuY29uZmln
dXJhdGlvbiA9PSAiRGVidWciOgogICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0
cigyICogVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykKQEAgLTE1ODUsOCArMTMw
OCwxNCBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAg
ICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cihUZXN0UnVubmVyLkRFRkFVTFRfVEVT
VF9USU1FT1VUX01TKQogCiAgICAgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zID0gc3RyKDUgKiBp
bnQob3B0aW9ucy50aW1lX291dF9tcykpCi0gICAgd3JpdGUoIlJlZ3VsYXIgdGltZW91dDogJXMs
IHNsb3cgdGVzdCB0aW1lb3V0OiAlcyIgJQotICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21z
LCBvcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpKQorICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJS
ZWd1bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3QgdGltZW91dDogJXMiICUKKyAgICAgICAgICAg
ICAgICAgICAob3B0aW9ucy50aW1lX291dF9tcywgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKSkK
KworICAgIGlmIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0gMToKKyAgICAgICAgcHJp
bnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgb25lICVzIiAlIHBvcnRfb2JqLmRyaXZlcl9uYW1l
KQorICAgIGVsc2U6CisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nICVzICVz
cyBpbiBwYXJhbGxlbCIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzLCBwb3J0X29iai5kcml2ZXJfbmFtZSgpKSkKIAogICAgICMgSW5jbHVkZSBhbGwg
dGVzdHMgaWYgbm9uZSBhcmUgc3BlY2lmaWVkLgogICAgIG5ld19hcmdzID0gW10KQEAgLTE2MDMs
OSArMTMzMiw5IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6
CiAKICAgICAjIENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVh
ZHkgZXhpc3QuCiAgICAgcG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSkKLSAgICBtZXRlci51cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikK
KyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQogCi0gICAg
dGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25zLCBtZXRlcikKKyAgICB0
ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydF9vYmosIG9wdGlvbnMsIHByaW50ZXIpCiAgICAg
dGVzdF9ydW5uZXIuZ2F0aGVyX2ZpbGVfcGF0aHMocGF0aHMpCiAKICAgICBpZiBvcHRpb25zLmxp
bnRfdGVzdF9maWxlczoKQEAgLTE2MTUsNDMgKzEzNDQsNDMgQEAgZGVmIG1haW4ob3B0aW9ucywg
YXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgZm9yIHBsYXRmb3JtX25hbWUgaW4g
cG9ydF9vYmoudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgogICAgICAgICAgICAgdGVzdF9ydW5uZXIu
cGFyc2VfZXhwZWN0YXRpb25zKHBsYXRmb3JtX25hbWUsIGlzX2RlYnVnX21vZGU9VHJ1ZSkKICAg
ICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0Zm9ybV9uYW1lLCBp
c19kZWJ1Z19tb2RlPUZhbHNlKQotICAgICAgICBtZXRlci51cGRhdGUoIiIpCi0gICAgICAgIHBy
aW50ICgiSWYgdGhlcmUgYXJlIG5vIGZhaWwgbWVzc2FnZXMsIGVycm9ycyBvciBleGNlcHRpb25z
LCB0aGVuIHRoZSAiCi0gICAgICAgICAgICAibGludCBzdWNjZWVkZWQuIikKKyAgICAgICAgcHJp
bnRlci53cml0ZSgiIikKKyAgICAgICAgX2xvZy5pbmZvKCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBt
ZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJ0aGVu
IHRoZSBsaW50IHN1Y2NlZWRlZC4iKQogICAgICAgICByZXR1cm4gMAogCi0gICAgd3JpdGUgPSBj
cmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgImNvbmZpZyIpCi0gICAgd3JpdGUoIlVzaW5n
IHBvcnQgJyVzJyIgJSBwb3J0X29iai5uYW1lKCkpCi0gICAgd3JpdGUoIlBsYWNpbmcgdGVzdCBy
ZXN1bHRzIGluICVzIiAlIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgcHJpbnRlci5w
cmludF9jb25maWcoIlVzaW5nIHBvcnQgJyVzJyIgJSBwb3J0X29iai5uYW1lKCkpCisgICAgcHJp
bnRlci5wcmludF9jb25maWcoIlBsYWNpbmcgdGVzdCByZXN1bHRzIGluICVzIiAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKICAgICBpZiBvcHRp
b25zLm5ld19iYXNlbGluZToKLSAgICAgICAgd3JpdGUoIlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBp
biAlcyIgJSBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkpCi0gICAgd3JpdGUoIlVzaW5nICVzIGJ1
aWxkIiAlIG9wdGlvbnMuY29uZmlndXJhdGlvbikKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25m
aWcoIlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkpCisgICAgcHJpbnRlci5wcmludF9jb25m
aWcoIlVzaW5nICVzIGJ1aWxkIiAlIG9wdGlvbnMuY29uZmlndXJhdGlvbikKICAgICBpZiBvcHRp
b25zLnBpeGVsX3Rlc3RzOgotICAgICAgICB3cml0ZSgiUGl4ZWwgdGVzdHMgZW5hYmxlZCIpCisg
ICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQaXhlbCB0ZXN0cyBlbmFibGVkIikKICAgICBl
bHNlOgotICAgICAgICB3cml0ZSgiUGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQotICAgIHdyaXRlKCIi
KQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQor
ICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCIiKQogCi0gICAgbWV0ZXIudXBkYXRlKCJQYXJzaW5n
IGV4cGVjdGF0aW9ucyAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJQYXJzaW5nIGV4
cGVjdGF0aW9ucyAuLi4iKQogICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwb3J0
X29iai50ZXN0X3BsYXRmb3JtX25hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID09ICdEZWJ1ZycpCiAKLSAgICBtZXRlci51cGRh
dGUoIkNoZWNraW5nIGJ1aWxkIC4uLiIpCisgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNoZWNr
aW5nIGJ1aWxkIC4uLiIpCiAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2J1aWxkKHRlc3RfcnVu
bmVyLm5lZWRzX2h0dHAoKSk6CiAgICAgICAgIHJldHVybiAtMQogCi0gICAgbWV0ZXIudXBkYXRl
KCJTdGFydGluZyBoZWxwZXIgLi4uIikKKyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRp
bmcgaGVscGVyIC4uLiIpCiAgICAgcG9ydF9vYmouc3RhcnRfaGVscGVyKCkKIAogICAgICMgQ2hl
Y2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAodGhlbWVzLCBmb250cywgLi4uKSBhcmUg
Y29ycmVjdC4KICAgICBpZiBub3Qgb3B0aW9ucy5ub2NoZWNrX3N5c19kZXBzOgotICAgICAgICBt
ZXRlci51cGRhdGUoIkNoZWNraW5nIHN5c3RlbSBkZXBlbmRlbmNpZXMgLi4uIikKKyAgICAgICAg
cHJpbnRlci5wcmludF91cGRhdGUoIkNoZWNraW5nIHN5c3RlbSBkZXBlbmRlbmNpZXMgLi4uIikK
ICAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX3N5c19kZXBzKHRlc3RfcnVubmVyLm5lZWRz
X2h0dHAoKSk6CiAgICAgICAgICAgICByZXR1cm4gLTEKIAotICAgIG1ldGVyLnVwZGF0ZSgiUHJl
cGFyaW5nIHRlc3RzIC4uLiIpCi0gICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0
aW9ucywgImV4cGVjdGVkIikKLSAgICByZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnByZXBh
cmVfbGlzdHNfYW5kX3ByaW50X291dHB1dCh3cml0ZSkKKyAgICBwcmludGVyLnByaW50X3VwZGF0
ZSgiUHJlcGFyaW5nIHRlc3RzIC4uLiIpCisgICAgcmVzdWx0X3N1bW1hcnkgPSB0ZXN0X3J1bm5l
ci5wcmVwYXJlX2xpc3RzX2FuZF9wcmludF9vdXRwdXQoKQogCiAgICAgcG9ydF9vYmouc2V0dXBf
dGVzdF9ydW4oKQogCkBAIC0xNjYxLDcgKzEzOTAsNyBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdz
LCBwcmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICBpZiBvcHRpb25zLmZ1enp5X3BpeGVsX3Rl
c3RzOgogICAgICAgICAgICAgdGVzdF9ydW5uZXIuYWRkX3Rlc3RfdHlwZShmdXp6eV9pbWFnZV9k
aWZmLkZ1enp5SW1hZ2VEaWZmKQogCi0gICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IHRlc3Rf
cnVubmVyLnJ1bihyZXN1bHRfc3VtbWFyeSwgcHJpbnRfcmVzdWx0cykKKyAgICBudW1fdW5leHBl
Y3RlZF9yZXN1bHRzID0gdGVzdF9ydW5uZXIucnVuKHJlc3VsdF9zdW1tYXJ5KQogCiAgICAgcG9y
dF9vYmouc3RvcF9oZWxwZXIoKQogCkBAIC0xNjc0LDcgKzE0MDMsOSBAQCBkZWYgX2NvbXBhdF9z
aGltX2NhbGxiYWNrKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CiAKIAogZGVmIF9j
b21wYXRfc2hpbV9vcHRpb24ob3B0aW9uX25hbWUsICoqa3dhcmdzKToKLSAgICByZXR1cm4gb3B0
cGFyc2UubWFrZV9vcHRpb24ob3B0aW9uX25hbWUsIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFj
az1fY29tcGF0X3NoaW1fY2FsbGJhY2ssIGhlbHA9Iklnbm9yZWQsIGZvciBvbGQtcnVuLXdlYmtp
dC10ZXN0cyBjb21wYXQgb25seS4iLCAqKmt3YXJncykKKyAgICByZXR1cm4gb3B0cGFyc2UubWFr
ZV9vcHRpb24ob3B0aW9uX25hbWUsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICBjYWxsYmFj
az1fY29tcGF0X3NoaW1fY2FsbGJhY2ssCisgICAgICAgIGhlbHA9Iklnbm9yZWQsIGZvciBvbGQt
cnVuLXdlYmtpdC10ZXN0cyBjb21wYXQgb25seS4iLCAqKmt3YXJncykKIAogCiBkZWYgcGFyc2Vf
YXJncyhhcmdzPU5vbmUpOgpAQCAtMTY5OCwyMiArMTQyOSw3IEBAIGRlZiBwYXJzZV9hcmdzKGFy
Z3M9Tm9uZSk6CiAgICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMgYWxzbyBhY2NlcHRzIC1j
LCAtLWNvbmZpZ3VyYXRpb24gQ09ORklHVVJBVElPTi4KICAgICBdCiAKLSAgICBsb2dnaW5nX29w
dGlvbnMgPSBbCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWxvZyIsIGFjdGlvbj0i
c3RvcmUiLAotICAgICAgICAgICAgZGVmYXVsdD1MT0dfREVGQVVMVF9WQUxVRSwKLSAgICAgICAg
ICAgIGhlbHA9KCJsb2cgdmFyaW91cyB0eXBlcyBvZiBkYXRhLiBUaGUgYXJndW1lbnQgdmFsdWUg
c2hvdWxkIGJlIGEgIgotICAgICAgICAgICAgICAgICAgImNvbW1hLXNlcGFyYXRlZCBsaXN0IG9m
IHZhbHVlcyBmcm9tOiAlcyAoZGVmYXVsdHMgdG8gIgotICAgICAgICAgICAgICAgICAgIi0tbG9n
ICVzKSIgJSAoTE9HX1ZBTFVFUywgTE9HX0RFRkFVTFRfVkFMVUUpKSksCi0gICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0g
ICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dp
bmciKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tc291cmNlcyIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCi0gICAgICAgICAgICBoZWxwPSJzaG93IGV4cGVjdGVkIHJlc3VsdCBmaWxl
IHBhdGggZm9yIGVhY2ggdGVzdCAiICsKLSAgICAgICAgICAgICAgICAgIihpbXBsaWVzIC0tdmVy
Ym9zZSkiKSwKLSAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBoYXMgYSAtLXNsb3dlc3Qg
b3B0aW9uIHdoaWNoIGp1c3QgcHJpbnRzCi0gICAgICAgICMgdGhlIHNsb3dlc3QgMTAuCi0gICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW51bS1zbG93LXRlc3RzLXRvLWxvZyIsIGRlZmF1
bHQ9NTAsCi0gICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2Ygc2xvdyB0ZXN0cyB3aG9zZSB0aW1p
bmdzIHRvIHByaW50LiIpLAotICAgIF0KKyAgICBsb2dnaW5nX29wdGlvbnMgPSBvdXRwdXQubG9n
Z2luZ19vcHRpb25zKCkKIAogICAgICMgRklYTUU6IFRoZXNlIG9wdGlvbnMgc2hvdWxkIG1vdmUg
b250byB0aGUgQ2hyb21pdW1Qb3J0LgogICAgIGNocm9taXVtX29wdGlvbnMgPSBbCkBAIC0xODg1
LDggKzE2MDEsMTggQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgICAg
ICAgICBtaXNjX29wdGlvbnMgKyByZXN1bHRzX2pzb25fb3B0aW9ucyArCiAgICAgICAgICAgICAg
ICAgICAgb2xkX3J1bl93ZWJraXRfdGVzdHNfY29tcGF0KQogICAgIG9wdGlvbl9wYXJzZXIgPSBv
cHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCi0gICAgcmV0dXJu
IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQogCi1pZiAnX19tYWluX18nID09IF9fbmFt
ZV9fOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykK
KyAgICBpZiBvcHRpb25zLnNvdXJjZXM6CisgICAgICAgIG9wdGlvbnMudmVyYm9zZSA9IFRydWUK
KworICAgIHJldHVybiBvcHRpb25zLCBhcmdzCisKKworZGVmIG1haW4oKToKICAgICBvcHRpb25z
LCBhcmdzID0gcGFyc2VfYXJncygpCi0gICAgc3lzLmV4aXQobWFpbihvcHRpb25zLCBhcmdzKSkK
KyAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCisgICAg
cmV0dXJuIHJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncykKKworaWYgJ19fbWFpbl9fJyA9PSBf
X25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weQppbmRleCA5ZmUwZTc0Li4xNzdkMDQyIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3Vu
aXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTMzLDEyICszMywxNyBAQCBpbXBvcnQg
b3MKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnJ1bl93ZWJraXRfdGVzdHMgYXMgcnVuX3dlYmtpdF90ZXN0cworZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGlt
cG9ydCBydW5fd2Via2l0X3Rlc3RzCiAKIAotZGVmIHBhc3NpbmdfcnVuKGFyZ3MpOgorZGVmIHBh
c3NpbmdfcnVuKGFyZ3MsIHBvcnRfb2JqPU5vbmUsIGxvZ2dpbmdfaW5jbHVkZWQ9RmFsc2UpOgor
ICAgIGlmIG5vdCBsb2dnaW5nX2luY2x1ZGVkOgorICAgICAgICBhcmdzLmV4dGVuZChbJy0tcHJp
bnQnLCAnbm90aGluZyddKQogICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBh
cnNlX2FyZ3MoYXJncykKLSAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLm1haW4ob3B0aW9ucywg
YXJncywgRmFsc2UpCisgICAgaWYgcG9ydF9vYmogaXMgTm9uZToKKyAgICAgICAgcG9ydF9vYmog
PSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAgIHJlcyA9IHJ1bl93ZWJr
aXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQogICAgIHJldHVybiByZXMgPT0g
MAogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54183</attachid>
            <date>2010-04-23 12:59:26 -0700</date>
            <delta_ts>2010-04-23 15:21:21 -0700</delta_ts>
            <desc>merge in --no-retry-failures patch committed recently</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>98350</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxN2QwZjgzLi4wYmM5Y2M4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC03NSw2ICs3NSw2MSBAQAogICAgICAg
ICAgLSBSZW1vdmUgdGhlIGFzc2VydCgpIHNpbmNlIG91ciBTZXJ2ZXJQcm9jZXNzIGNvZGUgZG9l
cyBub3QgYWx3YXlzCiAgICAgICAgICAgIHNlZW0gdG8gYmUgcmVhZGluZyB0aGUgZnVsbCBzdGRl
cnIgb3V0cHV0IChvciB3ZSdyZSBub3Qgd2FpdGluZyBmb3IgaXQgdG8pLgogCisyMDEwLTA0LTIy
ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3RzOiByZWZh
Y3RvciBhIGxhcmdlIGNodW5rIG9mIHRoZSBwcmludGluZy9sb2dnaW5nCisgICAgICAgIGNvZGUg
b3V0IG9mIHJ1bi13ZWJraXQtdGVzdHMgcHkgKGFsbW9zdCAzMDAgbGluZXMgb3V0IG9mIDE5MDAp
LiAKKworICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJlbmFtZXMgLS1sb2cgdG8gLS1wcmludCAo
dG8gYmUgc2xpZ2h0bHkgbW9yZQorICAgICAgICBkZXNjcmlwdGl2ZSkuIC0tbG9nIGlzIHJldGFp
bmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KKyAgICAgICAgSSBhZGRlZCBiZXR0ZXIg
aGVscCBtZXNzYWdlcyBmb3IgcHJpbnRpbmcgYW5kIHRyYWNpbmcsIGluCisgICAgICAgIC0taGVs
cC1wcmludGluZyBhbmQgLS1oZWxwLXRyYWNlLgorCisgICAgICAgIFRoZSBuZXcgY29kZSBoYXMg
dW5pdCB0ZXN0cyEKKworICAgICAgICBUaGVyZSBpcyBzdGlsbCBtb3JlIGNvZGUgdG8gYmUgbW92
ZWQsIGJ1dCB0aGlzIHBhdGNoIGlzIGJpZyBlbm91Z2ggYXMKKyAgICAgICAgaXQgaXMuIE5hbWVs
eSwgc3RpbGwgdG8gbW92ZSBhcmUgdGhlIHByaW50aW5nIG9mIHRoZSBhY3R1YWwgcmVzdWx0cwor
ICAgICAgICBhbmQgdGhlIHRpbWluZyBzdGF0aXN0aWNzLCB3aGljaCBzaG91bGQgbW92ZSBhbm90
aGVyIDMwMC00MDAgbGluZXMKKyAgICAgICAgb3V0IG9mIHRoZSBmaWxlLgorCisgICAgICAgIE5v
dGFibGUgY2hhbmdlcyB0byBydW5fd2Via2l0X3Rlc3RzLnB5IGJleW9uZCBjb2RlIHNpbXBseSBt
b3Zpbmc6CisgICAgICAgICogTWV0ZXJlZFN0cmVhbSBpcyBub3cgaGlkZGVuIHVuZGVyIHRoZSBu
ZXcgb3V0cHV0LkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAgICAgQWxsIHRoZSByZWZlcmVuY2Vz
IHRvIHNlbGYuX21ldGVyIG5vdyBwb2ludCB0byBzZWxmLl9wcmludGVyIC4gCisgICAgICAgICog
QWxsIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBpcyBkb25lIGluIG91dHB1dC5Db250cm9sbGVyCisg
ICAgICAgICogSW5zdGVhZCBvZiB1c2luZyB3cml0ZSgpIGxhbWJkYXMgdG8gY29udHJvbCB3aGF0
IGlzIGFuZCBpc24ndAorICAgICAgICAgIHByaW50ZWQsIHdlIHVzZSBzZXBhcmF0ZSBtZXRob2Rz
IG9uIHRoZSBwcmludGVyIG9iamVjdC4gVGhpcyB3aWxsCisgICAgICAgICAgbWFrZSBpdCBlYXNp
ZXIgdG8gZ3JlcCB3aGljaCBwcmludCBzdGF0ZW1lbnRzIGFyZSBwcmludGVkCisgICAgICAgICAg
dW5kZXIgcHJvdGVjdGlvbiBvZiBlYWNoIGZsYWcuCisgICAgICAgICogVGhlIHByaW50X3Jlc3Vs
dHMgZmxhZyBJIGFkZGVkIGEgZmV3IHJldnMgYmFjayB0byBzdXBwcmVzcyBwcmludGluZworICAg
ICAgICAgIGluIHRoZSB1bml0IHRlc3RzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggLS1wcmludCBu
b3RoaW5nLgorICAgICAgICAqIFRoZSBSZXN1bHRTdW1tYXJ5IGNsYXNzIG5vdyBzdG9yZXMgdGhl
IGVudGlyZSBUZXN0UmVzdWx0IGZvciBlYWNoCisgICAgICAgICAgdGVzdCwgbm90IGp1c3QgdGhl
IGFjdHVhbCByZXN1bHQgdHlwZS4KKyAgICAgICAgKiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1
bHRzKCkgZ290IG1vdmVkIGZyb20gYSBtZXRob2Qgb24gVGVzdFJ1bm5lcgorICAgICAgICAgIHRv
IGEgc3RhbmRhbG9uZSBmdW5jdGlvbi4gVGhpcyBzaG91bGQgbW92ZSBpbnRvIGEgc2VwYXJhdGUg
ZmlsZQorICAgICAgICAgIGFsb25nIHdpdGggdGhlIFJlc3VsdFN1bW1hcnkgY2xhc3MgYW5kIHRo
ZSBUZXN0UmVzdWx0IGNsYXNzCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4MDE4Cis6ZQorICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQt
dGVzdHM6CisgICAgICAgICAgLSB1cGRhdGUgdG8gbmV3IGVudHJ5IHBvaW50cyBpbiBydW5fd2Vi
a2l0X3Rlc3RzLnB5CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHk6CisgICAgICAgICAgLSBmaXggYSBtaW5vciBu
aXQgd2hlcmUgd2Ugd2VyZSBwcmludGluZyBhbiBlbXB0eSBzdHJpbmcgd2hlcmUKKyAgICAgICAg
ICAgIHdlIGRpZG4ndCBuZWVkIHRvCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvb3V0cHV0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9vdXRwdXRfdW5pdHRlc3QucHk6
IEFkZGVkCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0
LnB5OgorICAgICAgICAgIC0gaW1wbGVtZW50IHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoKSBhbmQg
ZXhwZWN0ZWRfZmlsZW5hbWUoKSBzbworICAgICAgICAgICAgd2UgY2FuIHRlc3QgcHJpbnRpbmcg
dW5leHBlY3RlZCByZXN1bHRzIGluIGEgcGxhdGZvcm0tbmV1dHJhbAorICAgICAgICAgICAgd2F5
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9ydW5fd2Via2l0X3Rlc3QucHk6CisgICAgICAg
ICAgLSBtb3ZlIGEgbG90IG9mIHRoZSBwcmludGluZyBjb2RlIGludG8gb3V0cHV0LnB5CisgICAg
ICAgICAgLSBjaGFuZ2UgdGhlIHNpZ25hdHVyZXMgb2YgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50
cyBmb3IgZWFzaWVyCisgICAgICAgICAgICB1bml0IHRlc3RpbmcKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSB1cGRh
dGUgdy8gY2hhbmdlcyB0byBydW5fd2Via2l0X3Rlc3RzIGVudHJ5IHBvaW50cy4KKwogMjAxMC0w
NC0yMiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13
ZWJraXQtdGVzdHMgYi9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3RzCmlu
ZGV4IDJlYmUxZGEuLjA3MjhlZTAgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3
LXJ1bi13ZWJraXQtdGVzdHMKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtp
dC10ZXN0cwpAQCAtMzMsNSArMzMsNCBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnJ1bl93ZWJraXRfdGVzdHMgYXMgcnVuX3dlYmtpdF90ZXN0cwogCiBpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgotICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3Rz
LnBhcnNlX2FyZ3MoKQotICAgIHN5cy5leGl0KHJ1bl93ZWJraXRfdGVzdHMubWFpbihvcHRpb25z
LCBhcmdzKSkKKyAgICBzeXMuZXhpdChydW5fd2Via2l0X3Rlc3RzLm1haW4oKSkKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21ldGVyZWRfc3RyZWFtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkKaW5kZXggOTMwYjllNC4u
YTMzZmMzYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJl
YW0ucHkKQEAgLTExMSw3ICsxMTEsOCBAQCBjbGFzcyBNZXRlcmVkU3RyZWFtOgogCiAgICAgICAg
ICMgUHJpbnQgdGhlIG5lY2Vzc2FyeSBudW1iZXIgb2YgYmFja3NwYWNlcyB0byBlcmFzZSB0aGUg
cHJldmlvdXMKICAgICAgICAgIyBtZXNzYWdlLgotICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUo
IlxiIiAqIGxlbihzZWxmLl9sYXN0X3VwZGF0ZSkpCisgICAgICAgIGlmIGxlbihzZWxmLl9sYXN0
X3VwZGF0ZSk6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoIlxiIiAqIGxlbihzZWxm
Ll9sYXN0X3VwZGF0ZSkpCiAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShzdHIpCiAgICAgICAg
IG51bV9yZW1haW5pbmcgPSBsZW4oc2VsZi5fbGFzdF91cGRhdGUpIC0gbGVuKHN0cikKICAgICAg
ICAgaWYgbnVtX3JlbWFpbmluZyA+IDA6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9vdXRwdXQucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9vdXRwdXQu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMTAwNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL291dHB1dC5weQpAQCAtMCwwICsxLDQyOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiUGFja2FnZSB0aGF0IGhhbmRsZXMgbm9uLWRlYnVn
LCBub24tZmlsZSBvdXRwdXQgZm9yIHJ1bi13ZWJraXQtdGVzdHMuIiIiCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHBkYgorCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVj
dGF0aW9ucworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0
cy5wcmludGVyIikKKworVGVzdEV4cGVjdGF0aW9uc0ZpbGUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5U
ZXN0RXhwZWN0YXRpb25zRmlsZQorCitQUklOVF9ERUZBVUxUID0gKCJtaXNjLG9uZS1saW5lLXBy
b2dyZXNzLG9uZS1saW5lLXN1bW1hcnksdW5leHBlY3RlZCwiCisgICAgICAgICAgICAgICAgICJ1
bmV4cGVjdGVkLXJlc3VsdHMsdXBkYXRlcyIpCitIRUxQX1BSSU5USU5HID0gIiIiCitPdXRwdXQg
Zm9yIHJ1bi13ZWJraXQtdGVzdHMgaXMgY29udHJvbGxlZCBieSBhIGNvbW1hLXNlcGFyYXRlZCBs
aXN0IG9mCit2YWx1ZXMgcGFzc2VkIHRvIC0tcHJpbnQuICBWYWx1ZXMgZWl0aGVyIGluZmx1ZW5j
ZSB0aGUgb3ZlcmFsbCBvdXRwdXQsIG9yCit0aGUgb3V0cHV0IGF0IHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHJ1biwgZHVyaW5nIHRoZSBydW4sIG9yIGF0IHRoZSBlbmQ6CisKK092ZXJhbGwgb3B0aW9u
czoKKyAgICBub3RoaW5nICAgICAgICAgICAgIGRvbid0IHByaW50IGFueXRoaW5nCisgICAgZXZl
cnl0aGluZyAgICAgICAgICBwcmludCBldmVyeXRoaW5nCisgICAgbWlzYyAgICAgICAgICAgICAg
ICBwcmludCBtaXNjZWxsYW5lb3VzIHRoaW5ncyBsaWtlIGJsYW5rIGxpbmVzCisKK0F0IHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIHJ1bjoKKyAgICBjb25maWcgICAgICAgICAgICAgIHByaW50IHRoZSB0
ZXN0IHJ1biBjb25maWd1cmF0aW9uCisgICAgZXhwZWN0ZWQgICAgICAgICAgICBwcmludCBhIHN1
bW1hcnkgb2Ygd2hhdCBpcyBleHBlY3RlZCB0byBoYXBwZW4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICgjIHBhc3NlcywgIyBmYWlsdXJlcywgZXRjLikKKworRHVyaW5nIHRoZSBydW46CisgICAg
ZGV0YWlsZWQtcHJvZ3Jlc3MgICBwcmludCBvbmUgZG90IHBlciB0ZXN0IGNvbXBsZXRlZAorICAg
IG9uZS1saW5lLXByb2dyZXNzICAgcHJpbnQgYSBvbmUtbGluZSBwcm9ncmVzcyBiYXIKKyAgICB1
bmV4cGVjdGVkICAgICAgICAgIHByaW50IGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMgdGhleSBv
Y2N1cgorICAgIHVwZGF0ZXMgICAgICAgICAgICAgcHJpbnQgdXBkYXRlcyBvbiB3aGljaCBzdGFn
ZSBpcyBleGVjdXRpbmcKKworQXQgdGhlIGVuZCBvZiB0aGUgcnVuOgorICAgIGFjdHVhbCAgICAg
ICAgICAgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBhY3R1YWwgcmVzdWx0cworICAgIHRpbWlu
ZyAgICAgICAgICAgICAgcHJpbnQgdGltaW5nIHN0YXRpc3RpY3MKKyAgICB1bmV4cGVjdGVkLXJl
c3VsdHMgIHByaW50IGEgbGlzdCBvZiB0aGUgdGVzdHMgd2l0aCB1bmV4cGVjdGVkIHJlc3VsdHMK
KyAgICBvbmUtbGluZS1zdW1tYXJ5ICAgIHByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0aGUg
cnVuCisKK05vdGVzOgorICAgIC0gJ2RldGFpbGVkLXByb2dyZXNzJyBjYW4gb25seSBiZSB1c2Vk
IGlmIHJ1bm5pbmcgaW4gYSBzaW5nbGUgdGhyZWFkCisgICAgICAodXNpbmcgLS1jaGlsZC1wcm9j
ZXNzZXM9MSkgb3IgaWYgcnVubmluZyB3aXRoCisgICAgICAgLS1leHBlcmltZW50YWwtZnVsbHkt
cGFyYWxsZWwKKyAgICAtIGlmIC0tdHJhY2UgJ3VuZXhwZWN0ZWQnIGlzIHNwZWNpZmllZCwgaXQg
d2lsbCBvdmVycmlkZQorICAgICAgIC0tcHJpbnQgJ3VuZXhwZWN0ZWQKKyAgICAtIGlmIC0tdHJh
Y2UgJ2V2ZXJ5dGhpbmcnIGlzIHNwZWNpZmllZCwgaXQgd2lsbCBvdmVycmlkZSB0aGUgJy1wcm9n
cmVzcycKKyAgICAgIG9wdGlvbnMKKworVGhlIGRlZmF1bHQgaXMgLS1wcmludCAnJXMnLgorIiIi
ICUgUFJJTlRfREVGQVVMVAorCitUUkFDRV9ERUZBVUxUID0gIm5vdGhpbmciCisKK0hFTFBfVFJB
Q0UgPSAiIiIKKy0tdHJhY2UgcHJpbnRzIGRldGFpbGVkIGV4cGVjdGF0aW9ucyBhbmQgcmVzdWx0
cyBmb3IgZWFjaCB0ZXN0IGFzIGl0CitleGVjdXRlcy4gVmFsaWQgb3B0aW9ucyBhcmU6CisKKyAg
bm90aGluZyAgICAgZG9uJ3QgdHJhY2UgYW55IHJlc3VsdHMKKyAgZXZlcnl0aGluZyAgdHJhY2Ug
ZXZlcnkgcmVzdWx0CisgIHVuZXhwZWN0ZWQgIHRyYWNlIG9ubHkgdW5leHBlY3RlZCByZXN1bHRz
CisKK1RoZSAtLXRyYWNlIHNldHRpbmcgd2lsbCBvdmVycmlkZSB0aGUgb3V0cHV0IGJlaGF2aW9y
IGNvbnRyb2xsZWQgYnkgLS1wcmludC4KK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgLS1oZWxw
LXByaW50aW5nLgorCitUaGUgZGVmYXVsdCBpcyAtLXRyYWNlICVzLgorIiIiICUgVFJBQ0VfREVG
QVVMVAorCisKK2RlZiBsb2dnaW5nX29wdGlvbnMoKToKKyAgICByZXR1cm4gWworICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcmludCIsIGRlc3Q9ImxvZyIsCisgICAgICAgICAgICBk
ZWZhdWx0PVBSSU5UX0RFRkFVTFQsCisgICAgICAgICAgICBoZWxwPSgiY29udHJvbHMgcHJpbnQg
b3V0cHV0IG9mIHRlc3QgcnVuLiAiCisgICAgICAgICAgICAgICAgICAiVXNlIC0taGVscC1wcmlu
dGluZyBmb3IgbW9yZS4iKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWxvZyIs
IGRlc3Q9ImxvZyIsCisgICAgICAgICAgICBoZWxwPSIoREVQUkVDQVRFRC4gc2FtZSBhcyAtLXBy
aW50KSIpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS10cmFjZSIsCisgICAgICAg
ICAgICBkZWZhdWx0PVRSQUNFX0RFRkFVTFQsCisgICAgICAgICAgICBoZWxwPSgiY29udHJvbHMg
dGVzdCB0cmFjaW5nIG91dHB1dCBvZiB0ZXN0IHJ1bi4gIgorICAgICAgICAgICAgICAgICAgIlVz
ZSAtLWhlbHAtdHJhY2UgZm9yIG1vcmUuIikpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLS1oZWxwLXByaW50aW5nIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgIGhl
bHA9InNob3cgZGV0YWlsZWQgaGVscCBvbiBjb250cm9sbGluZyBwcmludCBvdXRwdXQiKSwKKyAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taGVscC10cmFjZSIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsCisgICAgICAgICAgICBoZWxwPSJzaG93IGRldGFpbGVkIGhlbHAgb24gY29udHJvbGxp
bmcgdGVzdCB0cmFjaW5nIiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItdiIsICIt
LXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgZGVmYXVsdD1GYWxz
ZSwgaGVscD0iaW5jbHVkZSBkZWJ1Zy1sZXZlbCBsb2dnaW5nIiksCisgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCItLXNvdXJjZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAg
ICAgaGVscD0oInNob3cgZXhwZWN0ZWQgcmVzdWx0IGZpbGUgcGF0aCBmb3IgZWFjaCB0ZXN0ICIK
KyAgICAgICAgICAgICAgICAgIihpbXBsaWVzIC0tdmVyYm9zZSkiKSksCisgICAgICAgICMgb2xk
LXJ1bi13ZWJraXQtdGVzdHMgaGFzIGEgLS1zbG93ZXN0IG9wdGlvbiB3aGljaCBqdXN0IHByaW50
cworICAgICAgICAjIHRoZSBzbG93ZXN0IDEwLgorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLS1udW0tc2xvdy10ZXN0cy10by1sb2ciLCBkZWZhdWx0PTUwLAorICAgICAgICAgICAgaGVs
cD0iTnVtYmVyIG9mIHNsb3cgdGVzdHMgd2hvc2UgdGltaW5ncyB0byBwcmludC4iKSwKKyAgICBd
CisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIG1ldGVyKToKKyAgICAiIiJDb25m
aWd1cmVzIHRoZSBsb2dnaW5nIHN5c3RlbS4iIiIKKyAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlz
JworICAgIGxvZ19kYXRlZm10ID0gJyV5JW0lZCAlSDolTTolUycKKyAgICBsb2dfbGV2ZWwgPSBs
b2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZ19mbXQgPSAo
JyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubyktNGQgJShsZXZlbG5hbWUpcyAnCisg
ICAgICAgICAgICAgICAgICAgJyUobWVzc2FnZSlzJykKKyAgICAgICAgbG9nX2xldmVsID0gbG9n
Z2luZy5ERUJVRworCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZv
cm1hdD1sb2dfZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD1sb2dfZGF0ZWZt
dCwgc3RyZWFtPW1ldGVyKQorCisKK2NsYXNzIENvbnRyb2xsZXIob2JqZWN0KToKKyAgICAiIiJD
bGFzcyBoYW5kbGluZyBhbGwgbm9uLWRlYnVnIG91dHB1dCBkb25lIGJ5IHJ1bi13ZWJraXQtdGVz
dHMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHJlZ3VsYXJfb3V0
cHV0LCBidWlsZGJvdF9vdXRwdXQsCisgICAgICAgICAgICAgICAgIGNoaWxkX3Byb2Nlc3Nlcywg
aXNfZnVsbHlfcGFyYWxsZWwpOgorICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0gPSBidWls
ZGJvdF9vdXRwdXQKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2Vs
Zi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fc3RyZWFtID0gcmVndWxhcl9vdXRwdXQKKwor
ICAgICAgICAjIFRoZXNlIGFyZSB1c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1wcm9ncmVzcyB0byB0
cmFjayBzdGF0dXMgYnkKKyAgICAgICAgIyBkaXJlY3RvcnkuCisgICAgICAgIHNlbGYuX2N1cnJl
bnRfZGlyID0gTm9uZQorICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIiCisg
ICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPSAwCisKKyAgICAgICAgc2VsZi5fbWV0
ZXIgPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3RyZWFtKG9wdGlvbnMudmVyYm9zZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0
cHV0KQorICAgICAgICBjb25maWd1cmVfbG9nZ2luZyhzZWxmLl9vcHRpb25zLCBzZWxmLl9tZXRl
cikKKworICAgICAgICBpZiAoY2hpbGRfcHJvY2Vzc2VzICE9IDEgYW5kIG5vdCBpc19mdWxseV9w
YXJhbGxlbCBhbmQKKyAgICAgICAgICAgICdkZXRhaWxlZC1wcm9ncmVzcycgaW4gb3B0aW9ucy5s
b2cpOgorICAgICAgICAgICAgX2xvZy53YXJuKCJDYW4gb25seSBwcmludCAnZGV0YWlsZWQtcHJv
Z3Jlc3MnIGlmIHJ1bm5pbmcgIgorICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIC0tY2hpbGQt
cHJvY2Vzc2VzPTEgb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIC0tZXhwZXJpbWVu
dGFsLWZ1bGx5LXBhcmFsbGVsLiAiCisgICAgICAgICAgICAgICAgICAgICAgIlVzaW5nICdvbmUt
bGluZS1wcm9ncmVzcycgaW5zdGVhZC4iKQorICAgICAgICAgICAgb3B0aW9ucy5sb2cgPSBvcHRp
b25zLmxvZy5yZXBsYWNlKCdkZXRhaWxlZC1wcm9ncmVzcycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZS1saW5lLXByb2dyZXNzJykKKyAgICAgICAg
c2VsZi5fc3dpdGNoZXMgPSBvcHRpb25zLmxvZy5zcGxpdCgnLCcpCisKKyAgICBkZWYgX2V4aXRf
ZWFybHkoc2VsZiwgbWV0aG9kKToKKyAgICAgICAgaWYgJ25vdGhpbmcnIGluIHNlbGYuX3N3aXRj
aGVzOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgJ2V2ZXJ5dGhpbmcnIGlu
IHNlbGYuX3N3aXRjaGVzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBtZXRob2Qgbm90IGluIHNlbGYuX3N3aXRjaGVzCisKKyAgICBkZWYgaGVscF9wcmludGluZyhz
ZWxmKToKKyAgICAgICAgc2VsZi5fd3JpdGUoSEVMUF9QUklOVElORykKKworICAgIGRlZiBoZWxw
X3RyYWNlKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZShIRUxQX1RSQUNFKQorCisgICAgZGVm
IHByaW50X2FjdHVhbChzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLl9leGl0X2Vhcmx5KCdh
Y3R1YWwnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJl
YW0ud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIHByaW50X2NvbmZpZyhzZWxmLCBtc2cp
OgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2NvbmZpZycpCisKKyAgICBkZWYgcHJpbnRfZXhw
ZWN0ZWQoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53cml0ZShtc2csICdleHBlY3RlZCcpCisK
KyAgICBkZWYgcHJpbnRfdGltaW5nKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYud3JpdGUobXNn
LCAndGltaW5nJykKKworICAgIGRlZiBwcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYsIHRvdGFs
LCBleHBlY3RlZCk6CisgICAgICAgICIiIlByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0aGUg
dGVzdCBydW4gdG8gc3Rkb3V0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdG90YWw6IHRv
dGFsIG51bWJlciBvZiB0ZXN0cyBydW4KKyAgICAgICAgICBleHBlY3RlZDogbnVtYmVyIG9mIGV4
cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHko
J29uZS1saW5lLXN1bW1hcnknKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHVuZXhw
ZWN0ZWQgPSB0b3RhbCAtIGV4cGVjdGVkCisgICAgICAgIGlmIHVuZXhwZWN0ZWQgPT0gMDoKKyAg
ICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJBbGwgJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVk
LlxuIiAlIGV4cGVjdGVkKQorICAgICAgICBlbGlmIGV4cGVjdGVkID09IDE6CisgICAgICAgICAg
ICBzZWxmLl9tZXRlci53cml0ZSgiXG4xIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6
XG5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbiVkIHRlc3RzIHJhbiBh
cyBleHBlY3RlZCwgJWQgZGlkbid0OlxuXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChleHBlY3RlZCwgdW5leHBlY3RlZCkpCisKKyAgICBkZWYgcHJpbnRfdGVzdF9yZXN1bHQo
c2VsZiwgcmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cik6CisgICAgICAgICIiIlBy
aW50IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSAtLXByaW50LiIiIgor
ICAgICAgICBpZiAoJ2V2ZXJ5dGhpbmcnIGluIHNlbGYuX29wdGlvbnMudHJhY2Ugb3IKKyAgICAg
ICAgICAgICd1bmV4cGVjdGVkJyBpbiBzZWxmLl9vcHRpb25zLnRyYWNlIGFuZCBub3QgZXhwZWN0
ZWQpOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF90cmFjZShyZXN1bHQsIGV4cF9zdHIs
IGdvdF9zdHIpCisgICAgICAgIGVsaWYgKG5vdCBleHBlY3RlZCBhbmQKKyAgICAgICAgICAgICAg
KCd1bmV4cGVjdGVkJyBpbiBzZWxmLl9zd2l0Y2hlcyBvcgorICAgICAgICAgICAgICAgJ2V2ZXJ5
dGhpbmcnIGluIHNlbGYuX3N3aXRjaGVzKSBhbmQKKyAgICAgICAgICAgICAgbm90ICdkZXRhaWxl
ZC1wcm9ncmVzcycgaW4gc2VsZi5fc3dpdGNoZXMpOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRf
dW5leHBlY3RlZF90ZXN0X3Jlc3VsdChyZXN1bHQpCisKKyAgICBkZWYgX3ByaW50X3Rlc3RfdHJh
Y2Uoc2VsZiwgcmVzdWx0LCBleHBfc3RyLCBnb3Rfc3RyKToKKyAgICAgICAgIiIiUHJpbnQgZGV0
YWlsZWQgcmVzdWx0cyBvZiBhIHRlc3QgKHRyaWdnZXJlZCBieSAtLWxvZyB0cmFjZSkuCisgICAg
ICAgIEZvciBlYWNoIHRlc3QsIHByaW50OgorICAgICAgICAgICAtIGxvY2F0aW9uIG9mIHRoZSBl
eHBlY3RlZCBiYXNlbGluZXMKKyAgICAgICAgICAgLSBleHBlY3RlZCByZXN1bHRzCisgICAgICAg
ICAgIC0gYWN0dWFsIHJlc3VsdAorICAgICAgICAgICAtIHRpbWluZyBpbmZvCisgICAgICAgICIi
IgorICAgICAgICBmaWxlbmFtZSA9IHJlc3VsdC5maWxlbmFtZQorICAgICAgICB0ZXN0X25hbWUg
PSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCisgICAgICAgIHNl
bGYuX3dyaXRlKCd0cmFjZTogJXNcbicgJSB0ZXN0X25hbWUpCisgICAgICAgIHNlbGYuX3dyaXRl
KCcgIHR4dDogJXNcbicgJQorICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVk
X2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcpKSkKKyAgICAgICAgcG5nX2ZpbGUgPSBzZWxmLl9w
b3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCisgICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKHBuZ19maWxlKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKCcgIHBuZzogJXNc
bicgJQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRl
KCcgIHBuZzogPG5vbmU+XG4nKQorICAgICAgICBzZWxmLl93cml0ZSgnICBleHA6ICVzJyAlIGV4
cF9zdHIpCisgICAgICAgIHNlbGYuX3dyaXRlKCcgIGdvdDogJXMnICUgZ290X3N0cikKKyAgICAg
ICAgc2VsZi5fd3JpdGUoJyB0b29rOiAlLS4zZicgJSByZXN1bHQudGVzdF9ydW5fdGltZSkKKyAg
ICAgICAgc2VsZi5fd3JpdGUoJycpCisKKyAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9y
ZXN1bHQoc2VsZiwgcmVzdWx0KToKKyAgICAgICAgIiIiUHJpbnRzIG9uZSB1bmV4cGVjdGVkIHRl
c3QgcmVzdWx0IGxpbmUuIiIiCisgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5F
WFBFQ1RBVElPTl9ERVNDUklQVElPTlNbcmVzdWx0LnR5cGVdWzBdCisgICAgICAgIHNlbGYud3Jp
dGUoIiAgJXMgLT4gdW5leHBlY3RlZCAlcyIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLl9w
b3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUocmVzdWx0LmZpbGVuYW1lKSwKKyAgICAgICAgICAg
ICAgICAgICAgZGVzYyksICJ1bmV4cGVjdGVkIikKKworICAgIGRlZiBwcmludF9wcm9ncmVzcyhz
ZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlpbmcsIHRlc3RfbGlzdCk6CisgICAgICAgICIiIlBy
aW50IHByb2dyZXNzIHRocm91Z2ggdGhlIHRlc3RzIGFzIGRldGVybWluZWQgYnkgLS1wcmludC4i
IiIKKyAgICAgICAgaWYgKHNlbGYuX2V4aXRfZWFybHkoJ2RldGFpbGVkLXByb2dyZXNzJykgYW5k
CisgICAgICAgICAgICBzZWxmLl9leGl0X2Vhcmx5KCdvbmUtbGluZS1wcm9ncmVzcycpKToKKyAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmICdkZXRhaWxlZC1wcm9ncmVzcycgaW4gc2Vs
Zi5fc3dpdGNoZXM6CisgICAgICAgICAgICBzZWxmLl9wcmludF9kZXRhaWxlZF9wcm9ncmVzcyhy
ZXN1bHRfc3VtbWFyeSwgdGVzdF9saXN0KQorICAgICAgICBlbGlmICdvbmUtbGluZS1wcm9ncmVz
cycgaW4gc2VsZi5fc3dpdGNoZXM6CisgICAgICAgICAgICBzZWxmLl9wcmludF9vbmVfbGluZV9w
cm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgcmV0cnlpbmcpCisKKyAgICAgICAgaWYgcmVzdWx0X3N1
bW1hcnkucmVtYWluaW5nID09IDA6CisgICAgICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoJycp
CisKKyAgICBkZWYgX3ByaW50X29uZV9saW5lX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5
LCByZXRyeWluZyk6CisgICAgICAgICIiIkRpc3BsYXlzIHRoZSBwcm9ncmVzcyB0aHJvdWdoIHRo
ZSB0ZXN0IHJ1bi4iIiIKKyAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAqIChyZXN1bHRf
c3VtbWFyeS5leHBlY3RlZCArCisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVk
KSAvIHJlc3VsdF9zdW1tYXJ5LnRvdGFsCisgICAgICAgIGFjdGlvbiA9ICJUZXN0aW5nIgorICAg
ICAgICBpZiByZXRyeWluZzoKKyAgICAgICAgICAgIGFjdGlvbiA9ICJSZXRyeWluZyIKKyAgICAg
ICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzICglZCUlKTogJWQgcmFuIGFzIGV4cGVjdGVkLCAl
ZCBkaWRuJ3QsIgorICAgICAgICAgICAgIiAlZCBsZWZ0IiAlIChhY3Rpb24sIHBlcmNlbnRfY29t
cGxldGUsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLAorICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5LnVuZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykpCisKKyAgICBkZWYgX3By
aW50X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2xpc3QpOgor
ICAgICAgICAiIiJEaXNwbGF5IGRldGFpbGVkIHByb2dyZXNzIG91dHB1dCB3aGVyZSB3ZSBwcmlu
dCB0aGUgZGlyZWN0b3J5IG5hbWUKKyAgICAgICAgYW5kIG9uZSBkb3QgZm9yIGVhY2ggY29tcGxl
dGVkIHRlc3QuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5CisgICAgICAgICItLWxvZyBkZXRhaWxlZC1w
cm9ncmVzcyIuIiIiCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPT0gbGVu
KHRlc3RfbGlzdCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXh0X3Rlc3QgPSB0
ZXN0X2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KKyAgICAgICAgbmV4dF9kaXIgPSBv
cy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUobmV4dF90ZXN0KSkKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIg
PT0gIiI6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAl
IChuZXh0X2RpcikKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gbmV4dF9kaXIKKwor
ICAgICAgICB3aGlsZSBuZXh0X3Rlc3QgaW4gcmVzdWx0X3N1bW1hcnkucmVzdWx0czoKKyAgICAg
ICAgICAgIGlmIG5leHRfZGlyICE9IHNlbGYuX2N1cnJlbnRfZGlyOgorICAgICAgICAgICAgICAg
IHNlbGYuX21ldGVyLndyaXRlKCIlc1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikp
CisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6IC4iICUg
KG5leHRfZGlyKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gbmV4dF9kaXIK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVz
c19zdHIgKz0gIi4iCisKKyAgICAgICAgICAgIGlmIChuZXh0X3Rlc3QgaW4gcmVzdWx0X3N1bW1h
cnkudW5leHBlY3RlZF9yZXN1bHRzIGFuZAorICAgICAgICAgICAgICAgICd1bmV4cGVjdGVkJyBp
biBzZWxmLl9zd2l0Y2hlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVz
XG4iICUgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpCisgICAgICAgICAgICAgICAgdGVzdF9y
ZXN1bHQgPSByZXN1bHRfc3VtbWFyeS5yZXN1bHRzW25leHRfdGVzdF0KKyAgICAgICAgICAgICAg
ICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHRlc3RfcmVzdWx0KQorICAgICAg
ICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgc2VsZi5fY3Vy
cmVudF9kaXIKKworICAgICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciArPSAxCisg
ICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbih0ZXN0X2xpc3Qp
OgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIG5leHRfdGVzdCA9IHRlc3Rf
bGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICAgICAgbmV4dF9kaXIgPSBv
cy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisKKyAgICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWlu
aW5nOgorICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnku
cmVtYWluaW5nKQorICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzJXMiICUgKHNl
bGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbWFpbl9zdHIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5fbWV0ZXIucHJvZ3Jlc3MoIiVzIiAlIChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikpCisK
KyAgICBkZWYgcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0
cyk6CisgICAgICAgICIiIlByaW50cyBhIGxpc3Qgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyB0
byB0aGUgYnVpbGRib3Qgc3RyZWFtLiIiIgorICAgICAgICBpZiBzZWxmLl9leGl0X2Vhcmx5KCd1
bmV4cGVjdGVkLXJlc3VsdHMnKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHBhc3Nl
cyA9IHt9CisgICAgICAgIGZsYWt5ID0ge30KKyAgICAgICAgcmVncmVzc2lvbnMgPSB7fQorCisg
ICAgICAgIGZvciB0ZXN0LCByZXN1bHRzIGluIHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXS5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdHNbJ2FjdHVhbCddLnNwbGl0
KCIgIikKKyAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0c1snZXhwZWN0ZWQnXS5zcGxpdCgi
ICIpCisgICAgICAgICAgICBpZiBhY3R1YWwgPT0gWydQQVNTJ106CisgICAgICAgICAgICAgICAg
aWYgJ0NSQVNIJyBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0
X29mX2xpc3RzKHBhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdFeHBlY3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQorICAgICAgICAgICAgICAgIGVsaWYgJ1RJTUVP
VVQnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlz
dHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4
cGVjdGVkIHRvIHRpbWVvdXQsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byBmYWlsLCBidXQgcGFzc2Vk
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAg
ICAgICAgICBlbGlmIGxlbihhY3R1YWwpID4gMToKKyAgICAgICAgICAgICAgICAjIFdlIGdyb3Vw
IGZsYWt5IHRlc3RzIGJ5IHRoZSBmaXJzdCBhY3R1YWwgcmVzdWx0IHdlIGdvdC4KKyAgICAgICAg
ICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZmxha3ksIGFjdHVhbFswXSwgdGVzdCkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHJl
Z3Jlc3Npb25zLCByZXN1bHRzWydhY3R1YWwnXSwgdGVzdCkKKworICAgICAgICBpZiBsZW4ocGFz
c2VzKSBvciBsZW4oZmxha3kpIG9yIGxlbihyZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBzZWxm
Ll9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKworICAgICAgICBpZiBsZW4ocGFzc2VzKToK
KyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHBhc3Nlcy5pdGVyaXRlbXMoKToKKyAgICAg
ICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiVzOiAoJWQpXG4iICUgKGtl
eSwgbGVuKHRlc3RzKSkpCisgICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCisgICAgICAgICAg
ICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxk
Ym90X3N0cmVhbS53cml0ZSgiICAlc1xuIiAlIHRlc3QpCisgICAgICAgICAgICAgICAgc2VsZi5f
YnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIlxuIikKKworICAgICAgICBpZiBsZW4oZmxha3kpOgorICAgICAgICAgICAg
ZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJ
T05TCisgICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNb
a2V5Lmxvd2VyKCldCisgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRl
KCJVbmV4cGVjdGVkIGZsYWtpbmVzczogJXMgKCVkKVxuIgorICAgICAgICAgICAgICAgICAgICAl
IChkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVuKHRlc3RzKSkpCisgICAgICAgICAgICAgICAg
dGVzdHMuc29ydCgpCisKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddW3Rlc3Rd
CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdFsnYWN0dWFsJ10uc3BsaXQoIiAi
KQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdFsnZXhwZWN0ZWQnXS5zcGxp
dCgiICIpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxl
LkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICAgICAgbmV3X2V4cGVj
dGF0aW9uc19saXN0ID0gbGlzdChzZXQoYWN0dWFsKSB8IHNldChleHBlY3RlZCkpCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiICAlcyA9ICVzIiAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAodGVzdCwgIiAiLmpvaW4obmV3X2V4cGVjdGF0aW9uc19s
aXN0KSkpCisgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIp
CisgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKworICAgICAg
ICBpZiBsZW4ocmVncmVzc2lvbnMpOgorICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4
cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCisgICAgICAgICAgICBmb3Ig
a2V5LCB0ZXN0cyBpbiByZWdyZXNzaW9ucy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCisg
ICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKAorICAgICAgICAgICAg
ICAgICAgICAiUmVncmVzc2lvbnM6IFVuZXhwZWN0ZWQgJXMgOiAoJWQpXG4iICUgKAorICAgICAg
ICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVuKHRlc3RzKSkpCisgICAg
ICAgICAgICAgICAgdGVzdHMuc29ydCgpCisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVz
dHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiICAl
cyA9ICVzXG4iICUgKHRlc3QsIGtleSkpCisgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rf
c3RyZWFtLndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3Jp
dGUoIlxuIikKKworICAgICAgICBpZiBsZW4odW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKSBh
bmQgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3Ry
ZWFtLndyaXRlKCIlc1xuIiAlICItIiAqIDc4KQorCisgICAgZGVmIHByaW50X3VwZGF0ZShzZWxm
LCBtc2cpOgorICAgICAgICBpZiBzZWxmLl9leGl0X2Vhcmx5KCd1cGRhdGVzJyk6CisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKG1zZykKKworICAgIGRlZiB3
cml0ZShzZWxmLCBtc2csIG9wdGlvbj0ibWlzYyIpOgorICAgICAgICBpZiBzZWxmLl9leGl0X2Vh
cmx5KG9wdGlvbik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fd3JpdGUoIiVz
XG4iICUgbXNnKQorCisgICAgZGVmIF93cml0ZShzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9t
ZXRlci51cGRhdGUoIiVzIiAlIG1zZykKKworIworIyBVdGlsaXR5IHJvdXRpbmVzIHVzZWQgYnkg
dGhlIENvbnRyb2xsZXIgY2xhc3MKKyMKKworCitkZWYgX2FkZF90b19kaWN0X29mX2xpc3RzKGRp
Y3QsIGtleSwgdmFsdWUpOgorICAgIGRpY3Quc2V0ZGVmYXVsdChrZXksIFtdKS5hcHBlbmQodmFs
dWUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9vdXRwdXRfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9vdXRwdXRfdW5pdHRlc3QucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhNTA1NAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL291dHB1dF91bml0dGVzdC5weQpAQCAtMCwwICsxLDUyNyBAQAorIyEvdXNyL2Jpbi9w
eXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBvdXRwdXQucHkuIiIi
CisKK2ltcG9ydCBvcworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRl
c3QKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBw
b3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgb3V0
cHV0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9w
YWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCisKKworY2xhc3MgQXJyYXlTdHJlYW0o
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2NvbnRlbnRz
ID0gW10KKworICAgIGRlZiB3cml0ZShzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9jb250ZW50
cy5hcHBlbmQobXNnKQorCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2NvbnRlbnRzCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuX2NvbnRlbnRz
ID0gW10KKworICAgIGRlZiBlbXB0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIChsZW4oc2VsZi5f
Y29udGVudHMpID09IDApCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8QXJyYXlTdHJlYW06ICcg
KyBzdHIoc2VsZi5fY29udGVudHMpICsgJz4nCisKKworZGVmIGdldF9vcHRpb25zKGFyZ3MpOgor
ICAgIGxvID0gb3V0cHV0LmxvZ2dpbmdfb3B0aW9ucygpCisgICAgb3B0aW9uX3BhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1sbykKKyAgICByZXR1cm4gb3B0aW9uX3Bh
cnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKworZGVmIGdldF9yZXN1bHQoZmlsZW5hbWUsIHJlc3Vs
dF90eXBlPXRlc3RfZXhwZWN0YXRpb25zLlBBU1MsIHJ1bl90aW1lPTApOgorICAgIGZhaWx1cmVz
ID0gW10KKyAgICBpZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOgor
ICAgICAgICBmYWlsdXJlcyA9IFt0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCldCisgICAg
ZWxpZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAgZmFp
bHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKV0KKyAgICB0ciA9IGR1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLlRlc3RSZXN1bHQoZmlsZW5hbWUsIGZhaWx1cmVzLCBydW5fdGltZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdGltZV9m
b3JfYWxsX2RpZmZzPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVfZm9yX2RpZmZzPTApCisgICAgcmV0dXJuIHRyCisKKworZGVmIGdldF9yZXN1bHRf
c3VtbWFyeShwb3J0X29iaiwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zX3N0cik6CisgICAgZXhw
ZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucygKKyAgICAgICAg
cG9ydF9vYmosIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19zdHIsCisgICAgICAgIHBvcnRfb2Jq
LnRlc3RfcGxhdGZvcm1fbmFtZSgpLCBpc19kZWJ1Z19tb2RlPUZhbHNlLAorICAgICAgICBpc19s
aW50X21vZGU9RmFsc2UsIHRlc3RzX2FyZV9wcmVzZW50PUZhbHNlKQorCisgICAgcnMgPSBydW5f
d2Via2l0X3Rlc3RzLlJlc3VsdFN1bW1hcnkoZXhwZWN0YXRpb25zLCB0ZXN0X2ZpbGVzKQorICAg
IHJldHVybiBycywgZXhwZWN0YXRpb25zCisKKworY2xhc3MgVGVzdEZ1bmN0aW9ucyh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uZmlndXJlX2xvZ2dpbmcoc2VsZik6CisgICAg
ICAgICMgRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcmVzZXQgdGhlIGJhc2lj
IGxvZ2dlci4KKyAgICAgICAgIyBGSVhNRTogSWYgb3RoZXIgdGVzdGluZyBjbGFzc2VzIGNhbGwg
bG9nZ2luZy5iYXNpY0NvbmZpZygpIHRoZW4KKyAgICAgICAgIyBGSVhNRTogdGhlc2UgY2FsbHMg
YmVjb21lIG5vLW9wcyBhbmQgd2UgY2FuJ3QgY29udHJvbCB0aGUKKyAgICAgICAgIyBGSVhNRTog
Y29uZmlndXJhdGlvbiB0byB0ZXN0IHRoaW5ncyBwcm9wZXJseS4KKyAgICAgICAgb3B0aW9ucywg
YXJncyA9IGdldF9vcHRpb25zKFtdKQorICAgICAgICBzdHJlYW0gPSBBcnJheVN0cmVhbSgpCisg
ICAgICAgIG91dHB1dC5jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zLCBzdHJlYW0pCisgICAgICAg
IGxvZ2dpbmcuaW5mbygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFz
c2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgICAgIHN0cmVhbS5yZXNldCgpCisgICAg
ICAgIGxvZ2dpbmcuZGVidWcoInRoaXMgc2hvdWxkIG5vdCBiZSBsb2dnZWQiKQorICAgICAgICAj
IHNlbGYuYXNzZXJ0VHJ1ZShzdHJlYW0uZW1wdHkoKSkKKworICAgICAgICBzdHJlYW0ucmVzZXQo
KQorICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoWyctLXZlcmJvc2UnXSkKKyAg
ICAgICAgb3V0cHV0LmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkKKyAgICAgICAg
bG9nZ2luZy5kZWJ1ZygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFz
c2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfbG9nZ2luZ19vcHRpb25z
KHNlbGYpOgorICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoW10pCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zIGlzIG5vdCBOb25lKQorCisKK2NsYXNzICBUZXN0Q29u
dHJvbGxlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGdldF9jb250cm9sbGVyKHNlbGYs
IGFyZ3M9Tm9uZSwgc2luZ2xlX3RocmVhZGVkPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICBpc19mdWxseV9wYXJhbGxlbD1GYWxzZSk6CisgICAgICAgIGxvZ2dpbmdfb3B0aW9ucyA9IG91
dHB1dC5sb2dnaW5nX29wdGlvbnMoKQorICAgICAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2Uu
T3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PWxvZ2dpbmdfb3B0aW9ucykKKyAgICAgICAgb3B0aW9u
cywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25zKQorICAgICAgICBucHJvYyA9IDIKKyAgICAg
ICAgaWYgc2luZ2xlX3RocmVhZGVkOgorICAgICAgICAgICAgbnByb2MgPSAxCisKKyAgICAgICAg
cmVndWxhcl9vdXRwdXQgPSBBcnJheVN0cmVhbSgpCisgICAgICAgIGJ1aWxkYm90X291dHB1dCA9
IEFycmF5U3RyZWFtKCkKKyAgICAgICAgcHJpbnRlciA9IG91dHB1dC5Db250cm9sbGVyKHNlbGYu
X3BvcnQsIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVpbGRib3Rfb3V0cHV0LCBzaW5nbGVfdGhyZWFkZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc19mdWxseV9wYXJhbGxlbCkKKyAgICAgICAgcmV0
dXJuIHByaW50ZXIsIHJlZ3VsYXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQKKworICAgIGRlZiB0
ZXN0X2hlbHBfcHJpbnRpbmcoc2VsZik6CisgICAgICAgICMgSGVyZSBhbmQgYmVsb3cgd2UnbGwg
Y2FsbCB0aGUgInJlZ3VsYXIiIG91dHB1dCBlcnIgYW5kIHRoZQorICAgICAgICAjIGJ1aWxkYm90
IG91dHB1dCBvdXQ7IHRoaXMgY29ycmVzcG9uZHMgdG8gaG93IHRoaW5ncyBydW4gb24gdGhlCisg
ICAgICAgICMgYm90cyB3aXRoIHN0ZGVyciBhbmQgc3Rkb3V0LgorICAgICAgICBwcmludGVyLCBl
cnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoKQorCisgICAgICAgICMgVGhpcyByb3V0aW5l
IHNob3VsZCBwcmludCBzb21ldGhpbmcgdG8gc3Rkb3V0LiB0ZXN0aW5nIHdoYXQgaXQgaXMKKyAg
ICAgICAgIyBpcyBraW5kIG9mIHBvaW50bGVzcy4KKyAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50
aW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfaGVscF90cmFjZShzZWxm
KToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKCkKKwor
ICAgICAgICAjIFRoaXMgcm91dGluZSBzaG91bGQgcHJpbnQgc29tZXRoaW5nIHRvIHN0ZG91dC4g
dGVzdGluZyB3aGF0IGl0IGlzCisgICAgICAgICMgaXMga2luZCBvZiBwb2ludGxlc3MuCisgICAg
ICAgIHByaW50ZXIuaGVscF90cmFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVt
cHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0
ZXN0X3ByaW50X2FjdHVhbChzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfYWN0dWFsKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHko
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIHByaW50
ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnYWN0dWFsJ10p
CisgICAgICAgIHByaW50ZXIucHJpbnRfYWN0dWFsKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0KCks
IFsnaGVsbG9cbiddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29u
dHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50
X2FjdHVhbCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldCgpLCBbJ2hlbGxvXG4nXSkKKworICAgIGRl
ZiB0ZXN0X3ByaW50X2FjdHVhbF9idWlsZGJvdChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGVz
dCB0aGF0IHRoZSBmb3JtYXQgb2YgdGhlIGFjdHVhbCByZXN1bHRzIG1hdGNoZXMgd2hhdCB0aGUK
KyAgICAgICAgIyBidWlsZGJvdCBpcyBleHBlY3RpbmcuCisgICAgICAgIHBhc3MKKworICAgIGRl
ZiB0ZXN0X3ByaW50X2NvbmZpZyhzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50
ZXIucHJpbnRfY29uZmlnKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1w
dHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIo
WyctLXByaW50JywgJ2NvbmZpZyddKQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygnaGVs
bG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsb1xuJ10pCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmlu
dCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCdoZWxsbycp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkKKworICAg
IGRlZiB0ZXN0X3ByaW50X2V4cGVjdGVkKHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91
dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAg
cHJpbnRlci5wcmludF9leHBlY3RlZCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250
cm9sbGVyKFsnLS1wcmludCcsICdleHBlY3RlZCddKQorICAgICAgICBwcmludGVyLnByaW50X2V4
cGVjdGVkKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hl
bGxvXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xs
ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9leHBl
Y3RlZCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxs
b1xuJ10pCisKKyAgICBkZWYgdGVzdF9wcmludF90aW1pbmcoc2VsZik6CisgICAgICAgIHByaW50
ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnbm90aGluZydd
KQorICAgICAgICBwcmludGVyLnByaW50X3RpbWluZygnaGVsbG8nKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICd0aW1pbmcnXSkKKyAgICAgICAgcHJpbnRlci5w
cmludF90aW1pbmcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCks
IFsnaGVsbG9cbiddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29u
dHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50
X3RpbWluZygnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydo
ZWxsb1xuJ10pCisKKyAgICBkZWYgdGVzdF9wcmludF91cGRhdGUoc2VsZik6CisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnbm90aGlu
ZyddKQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgnaGVsbG8nKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICd1cGRhdGVzJ10pCisgICAgICAgIHByaW50
ZXIucHJpbnRfdXBkYXRlKCdoZWxsbycpCisKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlcmUgc2hv
dWxkbid0IGJlIGEgY2FycmlhZ2UgcmV0dXJuIGhlcmU7IHVwZGF0ZXMoKQorICAgICAgICAjIGFy
ZSBtZWFudCB0byBiZSBvdmVyd3JpdHRlbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIu
Z2V0KCksIFsnaGVsbG8nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0
X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5w
cmludF91cGRhdGUoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCks
IFsnaGVsbG8nXSkKKworICAgIGRlZiB0ZXN0X3ByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZik6
CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJp
bnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnko
MSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmUtbGluZS1zdW1t
YXJ5J10pCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4
cGVjdGVkLlxuIl0pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250
cm9sbGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRf
b25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0
KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLlxuIl0pCisKKyAgICAgICAgZXJyLnJl
c2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDIsIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgWyJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsIDEgZGlkbid0OlxuXG4iXSkKKworICAgICAg
ICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMywg
MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBbIlxuMiB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQsIDEgZGlkbid0OlxuXG4iXSkK
KworICAgIGRlZiB0ZXN0X3ByaW50X3Rlc3RfcmVzdWx0KHNlbGYpOgorICAgICAgICByZXN1bHQg
PSBnZXRfcmVzdWx0KCdmb28uaHRtbCcpCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVy
LnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0g
c2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAndW5leHBlY3RlZCddKQorICAgICAgICBw
cmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0n
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVz
dF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBmb28uaHRtbCAt
PiB1bmV4cGVjdGVkIHBhc3NcbiddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmlu
dGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0
X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWycgIGZvby5odG1sIC0+
IHVuZXhwZWN0ZWQgcGFzc1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9jb250cm9sbGVyKFsnLS10cmFjZScsICdub3RoaW5nJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1wcmludCcsICdub3RoaW5nJ10pCisg
ICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwg
ZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScn
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRl
ciwgZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS10cmFjZScsICd1bmV4cGVjdGVk
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1w
cmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVz
dWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHko
KSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVz
dWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShl
cnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRy
b2xsZXIoWyctLXRyYWNlJywgJ2V2ZXJ5dGhpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAg
cHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9
JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQoKQor
ICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2Us
IGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0n
JykKKworICAgIGRlZiB0ZXN0X3ByaW50X3Byb2dyZXNzKHNlbGYpOgorICAgICAgICB0ZXN0X2Zp
bGVzID0gWydmb28uaHRtbCcsICdiYXIuaHRtbCddCisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICcn
CisKKyAgICAgICAgIyB0ZXN0IHRoYXQgd2UgcHJpbnQgbm90aGluZworICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkK
KyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2Zp
bGVzLCBleHBlY3RhdGlvbnMpCisKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywg
RmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIu
cHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQor
CisgICAgICAgICMgdGVzdCByZWd1bGFyIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZS1saW5lLXByb2dyZXNzJ10p
CisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJl
c2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxl
cykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfcHJvZ3Jlc3NfX2Rl
dGFpbGVkKHNlbGYpOgorICAgICAgICB0ZXN0X2ZpbGVzID0gWydwYXNzL3Bhc3MuaHRtbCcsICdw
YXNzL3RpbWVvdXQuaHRtbCcsICdmYWlsL2NyYXNoLmh0bWwnXQorICAgICAgICBleHBlY3RhdGlv
bnMgPSAncGFzcy90aW1lb3V0Lmh0bWwgPSBUSU1FT1VUJworCisgICAgICAgICMgZmlyc3QsIHRl
c3QgdGhhdCBpdCBpcyBkaXNhYmxlZCBwcm9wZXJseQorICAgICAgICAjIHNob3VsZCBzdGlsbCBw
cmludCBvbmUtbGluZS1wcm9ncmVzcworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYu
Z2V0X2NvbnRyb2xsZXIoCisgICAgICAgICAgICBbJy0tcHJpbnQnLCAnZGV0YWlsZWQtcHJvZ3Jl
c3MnXSwgc2luZ2xlX3RocmVhZGVkPUZhbHNlKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3Vs
dF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAg
cHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQu
ZW1wdHkoKSkKKworICAgICAgICAjIG5vdyB0ZXN0IHRoZSBlbmFibGVkIHBhdGhzCisgICAgICAg
IHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcigKKyAgICAgICAgICAgIFsn
LS1wcmludCcsICdkZXRhaWxlZC1wcm9ncmVzcyddLCBzaW5nbGVfdGhyZWFkZWQ9VHJ1ZSkKKyAg
ICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVz
LCBleHBlY3RhdGlvbnMpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNl
LCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkK
KyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywg
VHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIHJzLmFkZChn
ZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBG
YWxzZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1sJyksIFRy
dWUpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwnLCB0ZXN0X2V4
cGVjdGF0aW9ucy5DUkFTSCksIFRydWUpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91
dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0
X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyBXZSBvbmx5IGNsZWFyIHRo
ZSBtZXRlciB3aGVuIHJldHJ5aW5nIHcvIGRldGFpbGVkLXByb2dyZXNzLgorICAgICAgICBlcnIu
cmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dy
ZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5n
ZXQoKSwgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAg
ICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcigKKyAgICAgICAgICAg
IFsnLS1wcmludCcsICdkZXRhaWxlZC1wcm9ncmVzcyx1bmV4cGVjdGVkJ10sIHNpbmdsZV90aHJl
YWRlZD1UcnVlKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3Bv
cnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9n
cmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJy
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAg
ICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50
X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAg
ICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlv
bnMuVElNRU9VVCksIEZhbHNlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1l
b3V0Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2gu
aHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgVHJ1ZSkKKyAgICAgICAgZXJyLnJlc2V0
KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhy
cywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIFdl
IG9ubHkgY2xlYXIgdGhlIG1ldGVyIHdoZW4gcmV0cnlpbmcgdy8gZGV0YWlsZWQtcHJvZ3Jlc3Mu
CisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50
ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXJyLmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVt
cHR5KCkpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJy
LCBvdXQgPSBzZWxmLmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAg
ICAgIHByaW50ZXIud3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1w
dHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIo
WyctLXByaW50JywgJ21pc2MnXSkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAg
ICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNvbmZpZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0
X2NvbnRyb2xsZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci53
cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAg
ICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNvbmZpZyIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9wcmlu
dF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZik6CisgICAgICAgICMgVGhpcyByb3V0aW5lIGlzIHRo
ZSBvbmx5IG9uZSB0aGF0IHByaW50cyBzdHVmZiB0aGF0IHRoZSBib3RzCisgICAgICAgICMgY2Fy
ZSBhYm91dC4KKyAgICAgICAgZGVmIGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQsIHBh
c3NpbmcsIGZsYWt5KToKKyAgICAgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnko
c2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgaWYgZXhw
ZWN0ZWQ6CisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1s
JywgdGVzdF9leHBlY3RhdGlvbnMuUEFTUyksCisgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRt
bCcsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBl
eHBlY3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5o
dG1sJywgdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpLAorICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkKQorICAgICAgICAgICAgZWxpZiBwYXNzaW5nOgorICAgICAgICAgICAgICAgIHJzLmFkZChn
ZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBy
cy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0bWwnKSwgZXhwZWN0ZWQpCisgICAgICAg
ICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcpLCBleHBlY3RlZCkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bh
c3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdw
YXNzL3RpbWVvdXQuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRp
b25zLkNSQVNIKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQo
J2ZhaWwvY3Jhc2guaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisg
ICAgICAgICAgICByZXRyeSA9IHJzCisgICAgICAgICAgICBpZiBmbGFreToKKyAgICAgICAgICAg
ICAgICByZXRyeSwgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmls
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RhdGlvbnMpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFz
cy5odG1sJyksIFRydWUpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bh
c3MvdGltZW91dC5odG1sJyksIFRydWUpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9y
ZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcpLCBUcnVlKQorICAgICAgICAgICAgdW5leHBlY3RlZF9y
ZXN1bHRzID0gcnVuX3dlYmtpdF90ZXN0cy5zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKAor
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIGV4cCwgcnMsIHJldHJ5KQorICAgICAgICAgICAg
cmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0cworCisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ3Bhc3Mv
cGFzcy5odG1sJywgJ3Bhc3MvdGltZW91dC5odG1sJywgJ2ZhaWwvY3Jhc2guaHRtbCddCisgICAg
ICAgIGV4cGVjdGF0aW9ucyA9ICcnCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9jb250cm9sbGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHVyID0gZ2V0
X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9
RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X2Nv
bnRyb2xsZXIoWyctLXByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndW5leHBlY3RlZC1yZXN1bHRzJ10pCisKKyAgICAgICAgIyB0ZXN0IGV2
ZXJ5dGhpbmcgcnVubmluZyBhcyBleHBlY3RlZAorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVk
X3Jlc3VsdHMoZXhwZWN0ZWQ9VHJ1ZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCisgICAg
ICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHko
KSkKKworICAgICAgICAjIHRlc3QgZmFpbHVyZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAg
ICAgb3V0LnJlc2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVj
dGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5w
cmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIu
ZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAg
ICAjIHRlc3QgdW5leHBlY3RlZCBmbGFreSByZXN1bHRzCisgICAgICAgIGVyci5yZXNldCgpCisg
ICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhl
eHBlY3RlZD1GYWxzZSwgcGFzc2luZz1UcnVlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRl
ci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
cnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAg
ICAgICAjIHRlc3QgdW5leHBlY3RlZCBwYXNzZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAg
ICAgb3V0LnJlc2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVj
dGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1UcnVlKQorICAgICAgICBwcmludGVyLnBy
aW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5l
bXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAg
IGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIsIGVyciwg
b3V0ID0gc2VsZi5nZXRfY29udHJvbGxlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAg
ICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9
RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVz
dWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBl
Y3RlZF9yZXN1bHRzX2J1aWxkYm90KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQg
cHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKCkgcHJvZHVjZXMgdGhlIG91dHB1dCB0aGUKKyAgICAg
ICAgIyBidWlsZGJvdCBpcyBleHBlY3RpbmcuCisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCBlZGVm
NDg1Li5jYjlmM2VjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CkBAIC02Niw2ICs2NiwxMyBAQCBjbGFzcyBUZXN0
UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsIGFj
dHVhbF9maWxlbmFtZSk6CiAgICAgICAgIHJldHVybiAnJwogCisgICAgZGVmIHJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gZmlsZW5hbWUKKwor
ICAgIGRlZiBleHBlY3RlZF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSwgc3VmZml4KToKKyAgICAg
ICAgKGJhc2VuYW1lLCBleHQpID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAg
cmV0dXJuIGJhc2VuYW1lICsgJy4nICsgc3VmZml4CisKICAgICBkZWYgbmFtZShzZWxmKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXgg
MWU2M2E3YS4uNmFlODVjYiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC02NCw3ICs2
NCw3IEBAIGltcG9ydCB0cmFjZWJhY2sKIAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVz
dF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jl
c3VsdHNfZ2VuZXJhdG9yCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVh
bQorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgb3V0cHV0CiBmcm9tIGxheW91dF9wYWNrYWdl
IGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3Jl
bmRlcl90cmVlX3RocmVhZAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9maWxlcwpA
QCAtODAsMzMgKzgwLDYgQEAgaW1wb3J0IHBvcnQKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyIpCiAKLSMgZHVtbXkgdmFs
dWUgdXNlZCBmb3IgY29tbWFuZC1saW5lIGV4cGxpY2l0bmVzcyB0byBkaXNhYmxlIGRlZmF1bHRz
Ci1MT0dfTk9USElORyA9ICdub3RoaW5nJwotCi0jIERpc3BsYXkgdGhlIG9uZS1saW5lIHByb2dy
ZXNzIGJhciAoJSBjb21wbGV0ZWQpIHdoaWxlIHRlc3RpbmcKLUxPR19QUk9HUkVTUyA9ICdwcm9n
cmVzcycKLQotIyBJbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IGRldGFpbGVkIHByb2dyZXNzIHVwZGF0
ZXMgaW4gdGhlIG91dHB1dCAocHJpbnRzCi0jIGRpcmVjdG9yeS1ieS1kaXJlY3RvcnkgZmVlZGJh
Y2spLgotTE9HX0RFVEFJTEVEX1BST0dSRVNTID0gJ2RldGFpbGVkLXByb2dyZXNzJwotCi0jIExv
ZyB0aGUgb25lLWxpbmUgc3VtbWFyeSBhdCB0aGUgZW5kIG9mIHRoZSBydW4KLUxPR19TVU1NQVJZ
ID0gJ3N1bW1hcnknCi0KLSMgIlRyYWNlIiB0aGUgdGVzdCAtIGxvZyB0aGUgZXhwZWN0ZWQgcmVz
dWx0LCB0aGUgYWN0dWFsIHJlc3VsdCwgYW5kIHRoZQotIyBiYXNlbGluZXMgdXNlZAotTE9HX1RS
QUNFID0gJ3RyYWNlJwotCi0jIExvZyBhbnkgdW5leHBlY3RlZCByZXN1bHRzIHdoaWxlIHJ1bm5p
bmcgKGluc3RlYWQgb2YganVzdCBhdCB0aGUgZW5kKS4KLUxPR19VTkVYUEVDVEVEID0gJ3VuZXhw
ZWN0ZWQnCi1MT0dfVU5FWFBFQ1RFRF9SRVNVTFRTID0gJ3VuZXhwZWN0ZWQtcmVzdWx0cycKLQot
TE9HX1ZBTFVFUyA9ICIsIi5qb2luKCgiYWN0dWFsIiwgImNvbmZpZyIsIExPR19ERVRBSUxFRF9Q
Uk9HUkVTUywgImV4cGVjdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICBMT0dfTk9USElORywg
TE9HX1BST0dSRVNTLCBMT0dfU1VNTUFSWSwgInRpbWluZyIsCi0gICAgICAgICAgICAgICAgICAg
ICAgTE9HX1VORVhQRUNURUQsIExPR19VTkVYUEVDVEVEX1JFU1VMVFMpKQotTE9HX0RFRkFVTFRf
VkFMVUUgPSAiLCIuam9pbigoTE9HX0RFVEFJTEVEX1BST0dSRVNTLCBMT0dfU1VNTUFSWSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPR19VTkVYUEVDVEVELCBMT0dfVU5FWFBFQ1RF
RF9SRVNVTFRTKSkKLQogIyBCdWlsZGVyIGJhc2UgVVJMIHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hp
dmVkIHRlc3QgcmVzdWx0cy4KIEJVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9t
aXVtLm9yZy9idWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKIApAQCAtMTgxLDcgKzE1NCw3
IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAgICAgIiIiCiAKICAgICAgICAg
c2VsZi50ZXN0c19ieV9leHBlY3RhdGlvbltyZXN1bHQudHlwZV0uYWRkKHJlc3VsdC5maWxlbmFt
ZSkKLSAgICAgICAgc2VsZi5yZXN1bHRzW3Jlc3VsdC5maWxlbmFtZV0gPSByZXN1bHQudHlwZQor
ICAgICAgICBzZWxmLnJlc3VsdHNbcmVzdWx0LmZpbGVuYW1lXSA9IHJlc3VsdAogICAgICAgICBz
ZWxmLnJlbWFpbmluZyAtPSAxCiAgICAgICAgIGlmIGxlbihyZXN1bHQuZmFpbHVyZXMpOgogICAg
ICAgICAgICAgc2VsZi5mYWlsdXJlc1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0LmZhaWx1cmVz
CkBAIC0xOTIsNiArMTY1LDgzIEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAg
ICAgICAgIHNlbGYudW5leHBlY3RlZCArPSAxCiAKIAorZGVmIHN1bW1hcml6ZV91bmV4cGVjdGVk
X3Jlc3VsdHMocG9ydF9vYmosIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeV9zdW1tYXJ5KToKKyAgICAiIiJTdW1tYXJp
emUgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyBhIGRpY3QuCisKKyAgICBUT0RPKGRwcmFua2Up
OiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0dXJlIGludG8gYSBzZXBhcmF0ZSBjbGFzcz8KKworICAg
IEFyZ3M6CisgICAgICAgIHBvcnRfb2JqOiBpbnRlcmZhY2UgdG8gcG9ydC1zcGVjaWZpYyBob29r
cworICAgICAgICBleHBlY3RhdGlvbnM6IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlv
bnMgb2JqZWN0CisgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGlu
aXRpYWwgdGVzdCBydW5zCisgICAgICAgIHJldHJ5X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZy
b20gZmluYWwgdGVzdCBydW4gb2YgcmV0cmllZCB0ZXN0cworICAgIFJldHVybnM6CisgICAgICAg
IEEgZGljdGlvbmFyeSBjb250YWluaW5nIGEgc3VtbWFyeSBvZiB0aGUgdW5leHBlY3RlZCByZXN1
bHRzIGZyb20gdGhlCisgICAgICAgIHJ1biwgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAg
ICAgICAgJ3ZlcnNpb24nOiBhIHZlcnNpb24gaW5kaWNhdG9yICgxIGluIHRoaXMgdmVyc2lvbikK
KyAgICAgICAgJ2ZpeGFibGUnOiAjIG9mIGZpeGFibGUgdGVzdHMgKE5PVyAtIFBBU1MpCisgICAg
ICAgICdza2lwcGVkJzogIyBvZiBza2lwcGVkIHRlc3RzIChOT1cgJiBTS0lQUEVEKQorICAgICAg
ICAnbnVtX3JlZ3Jlc3Npb25zJzogIyBvZiBub24tZmxha3kgZmFpbHVyZXMKKyAgICAgICAgJ251
bV9mbGFreSc6ICMgb2YgZmxha3kgZmFpbHVyZXMKKyAgICAgICAgJ251bV9wYXNzZXMnOiAjIG9m
IHVuZXhwZWN0ZWQgcGFzc2VzCisgICAgICAgICd0ZXN0cyc6IGEgZGljdCBvZiB0ZXN0cyAtPiB7
J2V4cGVjdGVkJzogJy4uLicsICdhY3R1YWwnOiAnLi4uJ30KKyAgICAiIiIKKyAgICByZXN1bHRz
ID0ge30KKyAgICByZXN1bHRzWyd2ZXJzaW9uJ10gPSAxCisKKyAgICB0YmUgPSByZXN1bHRfc3Vt
bWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbgorICAgIHRidCA9IHJlc3VsdF9zdW1tYXJ5LnRlc3Rz
X2J5X3RpbWVsaW5lCisgICAgcmVzdWx0c1snZml4YWJsZSddID0gbGVuKHRidFt0ZXN0X2V4cGVj
dGF0aW9ucy5OT1ddIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3Rf
ZXhwZWN0YXRpb25zLlBBU1NdKQorICAgIHJlc3VsdHNbJ3NraXBwZWQnXSA9IGxlbih0YnRbdGVz
dF9leHBlY3RhdGlvbnMuTk9XXSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRi
ZVt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSkKKworICAgIG51bV9wYXNzZXMgPSAwCisgICAgbnVt
X2ZsYWt5ID0gMAorICAgIG51bV9yZWdyZXNzaW9ucyA9IDAKKyAgICBrZXl3b3JkcyA9IHt9Cisg
ICAgZm9yIGssIHYgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TLml0ZXJpdGVt
cygpOgorICAgICAgICBrZXl3b3Jkc1t2XSA9IGsudXBwZXIoKQorCisgICAgdGVzdHMgPSB7fQor
ICAgIGZvciBmaWxlbmFtZSwgcmVzdWx0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVz
dWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgIyBOb3RlIHRoYXQgaWYgYSB0ZXN0IGNyYXNoZWQg
aW4gdGhlIG9yaWdpbmFsIHJ1biwgd2UgaWdub3JlCisgICAgICAgICMgd2hldGhlciBvciBub3Qg
aXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQpLAorICAgICAg
ICAjIGFuZCBhbHdheXMgY29uc2lkZXIgdGhlIHJlc3VsdCBub3QgZmxha3kuCisgICAgICAgIHRl
c3QgPSBwb3J0X29iai5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBl
eHBlY3RlZCA9IGV4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhmaWxlbmFtZSkK
KyAgICAgICAgYWN0dWFsID0gW2tleXdvcmRzW3Jlc3VsdF1dCisKKyAgICAgICAgaWYgcmVzdWx0
ID09IHRlc3RfZXhwZWN0YXRpb25zLlBBU1M6CisgICAgICAgICAgICBudW1fcGFzc2VzICs9IDEK
KyAgICAgICAgZWxpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAgICAg
ICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYg
ZmlsZW5hbWUgbm90IGluIHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzOgorICAgICAg
ICAgICAgICAgIGFjdHVhbC5leHRlbmQoZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3Ry
aW5nKAorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkuc3BsaXQoIiAiKSkKKyAgICAgICAg
ICAgICAgICBudW1fZmxha3kgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXRyeV9yZXN1bHQgPSByZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0c1tmaWxlbmFt
ZV0KKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgIT0gcmV0cnlfcmVzdWx0OgorICAgICAgICAg
ICAgICAgICAgICBhY3R1YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5X3Jlc3VsdF0pCisgICAgICAg
ICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKKworICAgICAgICB0ZXN0c1t0ZXN0
XSA9IHt9CisgICAgICAgIHRlc3RzW3Rlc3RdWydleHBlY3RlZCddID0gZXhwZWN0ZWQKKyAgICAg
ICAgdGVzdHNbdGVzdF1bJ2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFsKQorCisgICAgcmVzdWx0
c1sndGVzdHMnXSA9IHRlc3RzCisgICAgcmVzdWx0c1snbnVtX3Bhc3NlcyddID0gbnVtX3Bhc3Nl
cworICAgIHJlc3VsdHNbJ251bV9mbGFreSddID0gbnVtX2ZsYWt5CisgICAgcmVzdWx0c1snbnVt
X3JlZ3Jlc3Npb25zJ10gPSBudW1fcmVncmVzc2lvbnMKKworICAgIHJldHVybiByZXN1bHRzCisK
KwogY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5n
IGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAogICAgIHRlc3QgZmlsZXMu
IiIiCkBAIC0yMDQsMTcgKzI1NCwxNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVt
cFJlbmRlclRyZWUuCiAgICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIG1ldGVyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CiAgICAgICAgICIiIkluaXRpYWxp
emUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAg
ICAgcG9ydDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAg
b3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCi0gICAgICAgICAg
bWV0ZXI6IGEgTWV0ZXJlZFN0cmVhbSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAg
ICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KICAg
ICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXIKKyAgICAgICAgc2VsZi5f
cHJpbnRlciA9IHByaW50ZXIKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0
byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29j
a2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KApAQCAtMjI4
LDEyICsyNzgsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVz
X2xpc3QgPSBOb25lCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkK
IAotICAgICAgICAjIFRoZXNlIGFyZSB1c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1wcm9ncmVzcyB0
byB0cmFjayBzdGF0dXMgYnkKLSAgICAgICAgIyBkaXJlY3RvcnkuCi0gICAgICAgIHNlbGYuX2N1
cnJlbnRfZGlyID0gTm9uZQotICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIi
Ci0gICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPSAwCi0KICAgICAgICAgc2VsZi5f
cmV0cnlpbmcgPSBGYWxzZQogCiAgICAgICAgICMgSGFjayBmb3IgZHVtcGluZyB0aHJlYWRzIG9u
IHRoZSBib3RzCkBAIC0yNzksMTkgKzMyMywxNSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBlcnIKIAotICAgIGRlZiBwcmVwYXJl
X2xpc3RzX2FuZF9wcmludF9vdXRwdXQoc2VsZiwgd3JpdGUpOgorICAgIGRlZiBwcmVwYXJlX2xp
c3RzX2FuZF9wcmludF9vdXRwdXQoc2VsZik6CiAgICAgICAgICIiIkNyZWF0ZSBhcHByb3ByaWF0
ZSBzdWJzZXRzIG9mIHRlc3QgbGlzdHMgYW5kIHJldHVybnMgYQogICAgICAgICBSZXN1bHRTdW1t
YXJ5IG9iamVjdC4gQWxzbyBwcmludHMgZXhwZWN0ZWQgdGVzdCBjb3VudHMuCi0KLSAgICAgICAg
QXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcu
LCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAg
ICAgICAgIiIiCiAKICAgICAgICAgIyBSZW1vdmUgc2tpcHBlZCAtIGJvdGggZml4YWJsZSBhbmQg
aWdub3JlZCAtIGZpbGVzIGZyb20gdGhlCiAgICAgICAgICMgdG9wLWxldmVsIGxpc3Qgb2YgZmls
ZXMgdG8gdGVzdC4KICAgICAgICAgbnVtX2FsbF90ZXN0X2ZpbGVzID0gbGVuKHNlbGYuX3Rlc3Rf
ZmlsZXMpCi0gICAgICAgIHdyaXRlKCJGb3VuZDogICVkIHRlc3RzIiAlIG51bV9hbGxfdGVzdF9m
aWxlcykKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgiRm91bmQ6ICAlZCB0
ZXN0cyIgJSAobGVuKHNlbGYuX3Rlc3RfZmlsZXMpKSkKICAgICAgICAgaWYgbm90IG51bV9hbGxf
dGVzdF9maWxlczoKICAgICAgICAgICAgIF9sb2cuY3JpdGljYWwoIk5vIHRlc3RzIHRvIHJ1bi4i
KQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTM1OCw3ICszOTgsNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogCiAgICAgICAgICAgICB0ZXN0c19ydW5fbXNnID0gJ1J1bm5pbmc6ICVkIHRlc3Rz
IChjaHVuayBzbGljZSBbJWQ6JWRdIG9mICVkKScgJSAoCiAgICAgICAgICAgICAgICAgKHNsaWNl
X2VuZCAtIHNsaWNlX3N0YXJ0KSwgc2xpY2Vfc3RhcnQsIHNsaWNlX2VuZCwgbnVtX3Rlc3RzKQot
ICAgICAgICAgICAgd3JpdGUodGVzdHNfcnVuX21zZykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50
LnByaW50X2V4cGVjdGVkKHRlc3RzX3J1bl9tc2cpCiAKICAgICAgICAgICAgICMgSWYgd2UgcmVh
Y2hlZCB0aGUgZW5kIGFuZCB3ZSBkb24ndCBoYXZlIGVub3VnaCB0ZXN0cywgd2UgcnVuIHNvbWUK
ICAgICAgICAgICAgICMgZnJvbSB0aGUgYmVnaW5uaW5nLgpAQCAtMzY3LDcgKzQwNyw3IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgZXh0cmEgPSAxICsgY2h1bmtfbGVuIC0g
KHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KQogICAgICAgICAgICAgICAgIGV4dHJhX21zZyA9ICgn
ICAgbGFzdCBjaHVuayBpcyBwYXJ0aWFsLCBhcHBlbmRpbmcgWzA6JWRdJyAlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmEpCi0gICAgICAgICAgICAgICAgd3JpdGUoZXh0cmFfbXNn
KQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoZXh0cmFfbXNn
KQogICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9tc2cgKz0gIlxuIiArIGV4dHJhX21zZwogICAg
ICAgICAgICAgICAgIGZpbGVzLmV4dGVuZCh0ZXN0X2ZpbGVzWzA6ZXh0cmFdKQogICAgICAgICAg
ICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0
c19kaXJlY3RvcnksCkBAIC0zOTksMTcgKzQzOSwxOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFyeShzZWxmLl9leHBlY3RhdGlvbnMs
CiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIHwgc2tpcF9jaHVuaykKLSAgICAgICAgc2Vs
Zi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwK
KyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1t
YXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuUEFTUywgInBhc3NlcyIpCi0gICAg
ICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1
bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1
bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkZBSUwsICJmYWlsdXJl
cyIpCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwg
cmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2Zf
dHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkZMQUtZ
LCAiZmxha3kiKQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUo
d3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1
bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy5TS0lQLCAic2tpcHBlZCIpCiAKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5mb3JjZToKLSAg
ICAgICAgICAgIHdyaXRlKCdSdW5uaW5nIGFsbCB0ZXN0cywgaW5jbHVkaW5nIHNraXBzICgtLWZv
cmNlKScpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCdSdW5uaW5n
IGFsbCB0ZXN0cywgaW5jbHVkaW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3NraXBzICgtLWZvcmNlKScpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAj
IE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBydW4gdGhlIHNraXBwZWQgdGVzdHMgKHRoZXkg
d2VyZQogICAgICAgICAgICAgIyBzdWJ0cmFjdGVkIG91dCBvZiBzZWxmLl90ZXN0X2ZpbGVzLCBh
Ym92ZSksIGJ1dCB3ZSBzdHViIG91dCB0aGUKQEAgLTQyMCw3ICs0NjEsNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcz0wKQogICAgICAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gdGVzdF9leHBlY3RhdGlvbnMuU0tJUAogICAgICAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkPVRydWUpCi0gICAgICAgIHdy
aXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCcnKQogCiAgICAg
ICAgIHJldHVybiByZXN1bHRfc3VtbWFyeQogCkBAIC02MjUsMTEgKzY2NiwxMSBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBwbHVyYWwgPSAiIgogICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcyA+IDE6CiAgICAgICAgICAgICBwbHVyYWwgPSAicyIKLSAgICAgICAg
c2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKKyAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzJXMgLi4uJyAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCksIHBs
dXJhbCkpCiAgICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50aWF0ZV9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZHMoZmlsZV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBzZWxm
Ll9tZXRlci51cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAogICAgICAgICAjIFdh
aXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29sbGVjdCB0ZXN0IGZhaWx1cmVzLgog
ICAgICAgICBmYWlsdXJlcyA9IHt9CkBAIC02ODIsNyArNzIzLDcgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBhbiBI
VFRQIHNlcnZlci4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYu
SFRUUF9TVUJESVIpCiAKLSAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBwcmludF9y
ZXN1bHRzKToKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIi
UnVuIGFsbCBvdXIgdGVzdHMgb24gYWxsIG91ciB0ZXN0IGZpbGVzLgogCiAgICAgICAgIEZvciBl
YWNoIHRlc3QgZmlsZSwgd2UgcnVuIGVhY2ggdGVzdCB0eXBlLiBJZiB0aGVyZSBhcmUgYW55IGZh
aWx1cmVzLApAQCAtNjkwLDcgKzczMSw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAg
QXJnczoKICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogYSBzdW1tYXJ5IG9iamVjdCB0cmFja2lu
ZyB0aGUgdGVzdCByZXN1bHRzLgotICAgICAgICAgIHByaW50X3Jlc3VsdHM6IHdoZXRoZXIgb3Ig
bm90IHRvIHByaW50IHRoZSBzdW1tYXJ5IGF0IHRoZSBlbmQKIAogICAgICAgICBSZXR1cm46CiAg
ICAgICAgICAgVGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJlc3VsdHMgKDAgPT0gc3VjY2VzcykK
QEAgLTcwMCwxMSArNzQwLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHN0YXJ0X3Rp
bWUgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIGlmIHNlbGYubmVlZHNfaHR0cCgpOgotICAgICAg
ICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIEhUVFAgc2VydmVy
IC4uLicpCisKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQogCiAg
ICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09DS0VUX1NVQkRJUik6Ci0g
ICAgICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIg
Li4uJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyBX
ZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNv
Y2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZl
ci5TdGFydCgpCiAKQEAgLTcyNyw0MSArNzY4LDIyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAg
ICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHdyaXRlID0gY3JlYXRlX2xv
Z2dpbmdfd3JpdGVyKHNlbGYuX29wdGlvbnMsICd0aW1pbmcnKQotICAgICAgICBzZWxmLl9wcmlu
dF90aW1pbmdfc3RhdGlzdGljcyh3cml0ZSwgZW5kX3RpbWUgLSBzdGFydF90aW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5n
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkpCi0KLSAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCIiKQorICAgICAgICBzZWxmLl9wcmlu
dF90aW1pbmdfc3RhdGlzdGljcyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eSkKIAotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICAjIFdl
IHdyaXRlIHRoaXMgYmxvY2sgdG8gc3Rkb3V0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCi0g
ICAgICAgICAgICAjIGJ1aWxkYm90IGxvZyBwYXJzZXIsIHdoaWNoIG9ubHkgbG9va3MgYXQgc3Rk
b3V0LCBub3Qgc3RkZXJyIDooCi0gICAgICAgICAgICB3cml0ZSA9IGxhbWJkYSBzOiBzeXMuc3Rk
b3V0LndyaXRlKCIlc1xuIiAlIHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3cml0ZSA9
IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihzZWxmLl9vcHRpb25zLCAnYWN0dWFsJykKLQotICAgICAg
ICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnkpCisgICAg
ICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQogCiAgICAgICAg
IHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKIAotICAgICAg
ICAjIFRoaXMgc3VtbWFyeSBkYXRhIGdldHMgd3JpdHRlbiB0byBzdGRvdXQgcmVnYXJkbGVzcyBv
ZiBsb2cgbGV2ZWwKLSAgICAgICAgIyAodW5sZXNzIG9mIGNvdXJzZSB3ZSdyZSBwcmludGluZyBu
b3RoaW5nKS4KLSAgICAgICAgaWYgcHJpbnRfcmVzdWx0czoKLSAgICAgICAgICAgIGlmIChMT0df
REVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5fb3B0aW9ucy5sb2cgb3IKLSAgICAgICAgICAgICAg
ICAoTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCi0gICAgICAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5LnRvdGFsICE9IHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkKSk6Ci0g
ICAgICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIGlmIExPR19TVU1NQVJZIGluIHNlbGYu
X29wdGlvbnMubG9nOgotICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5lX3N1bW1h
cnkocmVzdWx0X3N1bW1hcnkudG90YWwsCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfb25l
X2xpbmVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeS50b3RhbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkKQogCi0gICAg
ICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX3N1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3Vs
dHMocmVzdWx0X3N1bW1hcnksCi0gICAgICAgICAgICByZXRyeV9zdW1tYXJ5KQotICAgICAgICBp
ZiBMT0dfVU5FWFBFQ1RFRF9SRVNVTFRTIGluIHNlbGYuX29wdGlvbnMubG9nOgotICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVuZXhwZWN0ZWRfcmVzdWx0cykKKyAg
ICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhz
ZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFy
eSwgcmV0cnlfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91bmV4cGVjdGVk
X3Jlc3VsdHModW5leHBlY3RlZF9yZXN1bHRzKQogCiAgICAgICAgICMgV3JpdGUgdGhlIHNhbWUg
ZGF0YSB0byBsb2cgZmlsZXMuCiAgICAgICAgIHNlbGYuX3dyaXRlX2pzb25fZmlsZXModW5leHBl
Y3RlZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwKQEAgLTc4MywxMTIgKzgwNSwxNiBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3Jlc3VsdF9xdWV1
ZS5nZXRfbm93YWl0KCkKICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKICAgICAgICAg
ICAgICAgICByZXR1cm4KKwogICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlv
bnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCiAgICAgICAgICAgICAgICAgcmVzdWx0LmZp
bGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKICAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkKQotICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRfdGVzdF9yZXN1bHRzKHJlc3VsdCwgZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5KQot
Ci0gICAgZGVmIF9wcmludF90ZXN0X3Jlc3VsdHMoc2VsZiwgcmVzdWx0LCBleHBlY3RlZCwgcmVz
dWx0X3N1bW1hcnkpOgotICAgICAgICAiUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBhcyBk
ZXRlcm1pbmVkIGJ5IHRoZSAtLWxvZyBzd2l0Y2hlcy4iCi0gICAgICAgIGlmIExPR19UUkFDRSBp
biBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfdHJhY2Uo
cmVzdWx0KQotICAgICAgICBlbGlmIChMT0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5fb3B0
aW9ucy5sb2cgYW5kCi0gICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9m
dWxseV9wYXJhbGxlbCBvcgotICAgICAgICAgICAgICAgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVk
KCkpKToKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHJlc3VsdF9z
dW1tYXJ5KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgKG5vdCBleHBlY3RlZCBhbmQg
TE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cpOgotICAgICAgICAgICAgICAgIHNl
bGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQocmVzdWx0KQotICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgX3By
aW50X3Rlc3RfdHJhY2Uoc2VsZiwgcmVzdWx0KToKLSAgICAgICAgIiIiUHJpbnQgZGV0YWlsZWQg
cmVzdWx0cyBvZiBhIHRlc3QgKHRyaWdnZXJlZCBieSAtLWxvZyB0cmFjZSkuCi0gICAgICAgIEZv
ciBlYWNoIHRlc3QsIHByaW50OgotICAgICAgICAgICAtIGxvY2F0aW9uIG9mIHRoZSBleHBlY3Rl
ZCBiYXNlbGluZXMKLSAgICAgICAgICAgLSBleHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAgIC0g
YWN0dWFsIHJlc3VsdAotICAgICAgICAgICAtIHRpbWluZyBpbmZvCi0gICAgICAgICIiIgotICAg
ICAgICBmaWxlbmFtZSA9IHJlc3VsdC5maWxlbmFtZQotICAgICAgICB0ZXN0X25hbWUgPSBzZWxm
Ll9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgICAgIF9sb2cuaW5m
bygndHJhY2U6ICVzJyAlIHRlc3RfbmFtZSkKLSAgICAgICAgX2xvZy5pbmZvKCcgIHR4dDogJXMn
ICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxl
bmFtZSwgJy50eHQnKSkpCi0gICAgICAgIHBuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9m
aWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwbmdf
ZmlsZSk6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgcG5nOiAlcycgJQotICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgcG5nOiA8bm9uZT4nKQotICAg
ICAgICBfbG9nLmluZm8oJyAgZXhwOiAlcycgJQotICAgICAgICAgICAgICAgICAgc2VsZi5fZXhw
ZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKSkKLSAgICAgICAgX2xv
Zy5pbmZvKCcgIGdvdDogJXMnICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9u
cy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpKQotICAgICAgICBfbG9nLmluZm8o
JyB0b29rOiAlLS4zZicgJSByZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgX2xvZy5pbmZv
KCcnKQotCi0gICAgZGVmIF9wcmludF9vbmVfbGluZV9wcm9ncmVzcyhzZWxmLCByZXN1bHRfc3Vt
bWFyeSk6Ci0gICAgICAgICIiIkRpc3BsYXlzIHRoZSBwcm9ncmVzcyB0aHJvdWdoIHRoZSB0ZXN0
IHJ1bi4iIiIKLSAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAqIChyZXN1bHRfc3VtbWFy
eS5leHBlY3RlZCArCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkKSAvIHJl
c3VsdF9zdW1tYXJ5LnRvdGFsCi0gICAgICAgIGFjdGlvbiA9ICJUZXN0aW5nIgotICAgICAgICBp
ZiBzZWxmLl9yZXRyeWluZzoKLSAgICAgICAgICAgIGFjdGlvbiA9ICJSZXRyeWluZyIKLSAgICAg
ICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzICglZCUlKTogJWQgcmFuIGFzIGV4cGVjdGVkLCAl
ZCBkaWRuJ3QsIgotICAgICAgICAgICAgIiAlZCBsZWZ0IiAlIChhY3Rpb24sIHBlcmNlbnRfY29t
cGxldGUsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLAotICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5LnVuZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykpCi0KLSAgICBkZWYgX3By
aW50X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIi
RGlzcGxheSBkZXRhaWxlZCBwcm9ncmVzcyBvdXRwdXQgd2hlcmUgd2UgcHJpbnQgdGhlIGRpcmVj
dG9yeSBuYW1lCi0gICAgICAgIGFuZCBvbmUgZG90IGZvciBlYWNoIGNvbXBsZXRlZCB0ZXN0LiBU
aGlzIGlzIHRyaWdnZXJlZCBieQotICAgICAgICAiLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3MiLiIi
IgotICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90ZXN0
X2ZpbGVzX2xpc3QpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgbmV4dF90ZXN0ID0g
c2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCi0gICAgICAg
IG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCi0gICAgICAgIGlmIHNlbGYuX2N1cnJlbnRf
cHJvZ3Jlc3Nfc3RyID09ICIiOgotICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19z
dHIgPSAiJXM6ICIgJSAobmV4dF9kaXIpCi0gICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9
IG5leHRfZGlyCi0KLSAgICAgICAgd2hpbGUgbmV4dF90ZXN0IGluIHJlc3VsdF9zdW1tYXJ5LnJl
c3VsdHM6Ci0gICAgICAgICAgICBpZiBuZXh0X2RpciAhPSBzZWxmLl9jdXJyZW50X2RpcjoKLSAg
ICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSAoc2VsZi5fY3VycmVudF9w
cm9ncmVzc19zdHIpKQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
ID0gIiVzOiAuIiAlIChuZXh0X2RpcikKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2Rp
ciA9IG5leHRfZGlyCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX2N1
cnJlbnRfcHJvZ3Jlc3Nfc3RyICs9ICIuIgotCi0gICAgICAgICAgICBpZiAobmV4dF90ZXN0IGlu
IHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cyBhbmQKLSAgICAgICAgICAgICAgICBM
T0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRpb25zLmxvZyk6Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW25leHRfdGVzdF0KLSAgICAg
ICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSBzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0cikKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVz
dWx0KG5leHRfdGVzdCwgcmVzdWx0KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJv
Z3Jlc3Nfc3RyID0gIiVzOiAiICUgc2VsZi5fY3VycmVudF9kaXIKLQotICAgICAgICAgICAgc2Vs
Zi5fY3VycmVudF90ZXN0X251bWJlciArPSAxCi0gICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50
X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpOgotICAgICAgICAgICAg
ICAgIGJyZWFrCi0KLSAgICAgICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlz
dFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQotICAgICAgICAgICAgbmV4dF9kaXIgPSBvcy5w
YXRoLmRpcm5hbWUoCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKG5leHRfdGVzdCkpCi0KLSAgICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5n
OgotICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnkucmVt
YWluaW5nKQotICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzJXMiICUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciwg
cmVtYWluX3N0cikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9tZXRlci5wcm9n
cmVzcygiJXNcbiIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQotCi0gICAgZGVmIF9w
cmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgICIiIlBy
aW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgotICAgICAgICBkZXNjID0g
VGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdC50eXBl
XVswXQotICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVkICVzXG4i
ICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShyZXN1bHQuZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
YykpCisgICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3Rh
dGlvbnNfc3RyaW5nKAorICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAgICAgICAg
ICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJl
c3VsdC50eXBlKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChy
ZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQorICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlz
dCkKIAogICAgIGRlZiBfZ2V0X2ZhaWx1cmVzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBpbmNsdWRl
X2NyYXNoZXMpOgogICAgICAgICAiIiJGaWx0ZXJzIGEgZGljdCBvZiByZXN1bHRzIGFuZCByZXR1
cm5zIG9ubHkgdGhlIGZhaWx1cmVzLgpAQCAtOTExLDgwICs4MzcsNiBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogCiAgICAgICAgIHJldHVybiBmYWlsZWRfcmVzdWx0cwogCi0gICAgZGVmIF9zdW1tYXJp
emVfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeV9zdW1tYXJ5
KToKLSAgICAgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMgYSBkaWN0
LgotCi0gICAgICAgIFRPRE8oZHByYW5rZSk6IHNwbGl0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaW50
byBhIHNlcGFyYXRlIGNsYXNzPwotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcmVzdWx0X3N1
bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gaW5pdGlhbCB0ZXN0IHJ1bnMKLSAgICAgICAgICBy
ZXRyeV9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3QgcnVuIG9mIHJldHJp
ZWQgdGVzdHMKLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBBIGRpY3Rpb25hcnkgY29udGFp
bmluZyBhIHN1bW1hcnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQotICAgICAg
ICAgIHJ1biwgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKLSAgICAgICAgICAgICd2ZXJzaW9u
JzogYSB2ZXJzaW9uIGluZGljYXRvciAoMSBpbiB0aGlzIHZlcnNpb24pCi0gICAgICAgICAgICAn
Zml4YWJsZSc6ICMgb2YgZml4YWJsZSB0ZXN0cyAoTk9XIC0gUEFTUykKLSAgICAgICAgICAgICdz
a2lwcGVkJzogIyBvZiBza2lwcGVkIHRlc3RzIChOT1cgJiBTS0lQUEVEKQotICAgICAgICAgICAg
J251bV9yZWdyZXNzaW9ucyc6ICMgb2Ygbm9uLWZsYWt5IGZhaWx1cmVzCi0gICAgICAgICAgICAn
bnVtX2ZsYWt5JzogIyBvZiBmbGFreSBmYWlsdXJlcwotICAgICAgICAgICAgJ251bV9wYXNzZXMn
OiAjIG9mIHVuZXhwZWN0ZWQgcGFzc2VzCi0gICAgICAgICAgICAndGVzdHMnOiBhIGRpY3Qgb2Yg
dGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4nLCAnYWN0dWFsJzogJy4uLid9Ci0gICAgICAgICIi
IgotICAgICAgICByZXN1bHRzID0ge30KLSAgICAgICAgcmVzdWx0c1sndmVyc2lvbiddID0gMQot
Ci0gICAgICAgIHRiZSA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uCi0gICAg
ICAgIHRidCA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lCi0gICAgICAgIHJlc3Vs
dHNbJ2ZpeGFibGUnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlvbnMuUEFTU10pCi0g
ICAgICAgIHJlc3VsdHNbJ3NraXBwZWQnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9X
XSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlv
bnMuU0tJUF0pCi0KLSAgICAgICAgbnVtX3Bhc3NlcyA9IDAKLSAgICAgICAgbnVtX2ZsYWt5ID0g
MAotICAgICAgICBudW1fcmVncmVzc2lvbnMgPSAwCi0gICAgICAgIGtleXdvcmRzID0ge30KLSAg
ICAgICAgZm9yIGssIHYgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TLml0ZXJp
dGVtcygpOgotICAgICAgICAgICAga2V5d29yZHNbdl0gPSBrLnVwcGVyKCkKLQotICAgICAgICB0
ZXN0cyA9IHt9Ci0gICAgICAgIGZvciBmaWxlbmFtZSwgcmVzdWx0IGluIHJlc3VsdF9zdW1tYXJ5
LnVuZXhwZWN0ZWRfcmVzdWx0cy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICMgTm90ZSB0aGF0
IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5hbCBydW4sIHdlIGlnbm9yZQotICAgICAg
ICAgICAgIyB3aGV0aGVyIG9yIG5vdCBpdCBjcmFzaGVkIHdoZW4gd2UgcmV0cmllZCBpdCAoaWYg
d2UgcmV0cmllZCBpdCksCi0gICAgICAgICAgICAjIGFuZCBhbHdheXMgY29uc2lkZXIgdGhlIHJl
c3VsdCBub3QgZmxha3kuCi0gICAgICAgICAgICB0ZXN0ID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBl
Y3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoZmlsZW5hbWUpCi0gICAgICAgICAgICBh
Y3R1YWwgPSBba2V5d29yZHNbcmVzdWx0XV0KLQotICAgICAgICAgICAgaWYgcmVzdWx0ID09IHRl
c3RfZXhwZWN0YXRpb25zLlBBU1M6Ci0gICAgICAgICAgICAgICAgbnVtX3Bhc3NlcyArPSAxCi0g
ICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKLSAgICAg
ICAgICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgICAgIGFjdHVhbC5leHRlbmQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkuc3BsaXQoIiAiKSkKLSAgICAgICAgICAg
ICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICAgICByZXRyeV9yZXN1bHQgPSByZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0
c1tmaWxlbmFtZV0KLSAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0ICE9IHJldHJ5X3Jlc3Vs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5hcHBlbmQoa2V5d29yZHNbcmV0cnlf
cmVzdWx0XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCi0gICAgICAg
ICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBudW1fcmVncmVzc2lv
bnMgKz0gMQotCi0gICAgICAgICAgICB0ZXN0c1t0ZXN0XSA9IHt9Ci0gICAgICAgICAgICB0ZXN0
c1t0ZXN0XVsnZXhwZWN0ZWQnXSA9IGV4cGVjdGVkCi0gICAgICAgICAgICB0ZXN0c1t0ZXN0XVsn
YWN0dWFsJ10gPSAiICIuam9pbihhY3R1YWwpCi0KLSAgICAgICAgcmVzdWx0c1sndGVzdHMnXSA9
IHRlc3RzCi0gICAgICAgIHJlc3VsdHNbJ251bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMKLSAgICAg
ICAgcmVzdWx0c1snbnVtX2ZsYWt5J10gPSBudW1fZmxha3kKLSAgICAgICAgcmVzdWx0c1snbnVt
X3JlZ3Jlc3Npb25zJ10gPSBudW1fcmVncmVzc2lvbnMKLQotICAgICAgICByZXR1cm4gcmVzdWx0
cwotCiAgICAgZGVmIF93cml0ZV9qc29uX2ZpbGVzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cywg
cmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncyk6CiAgICAgICAgICIiIldyaXRlcyB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdCBydW4g
YXMgSlNPTiBmaWxlcyBpbnRvIHRoZSByZXN1bHRzCkBAIC0xMDI1LDEzICs4NzcsMTEgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBfbG9nLmRlYnVnKCJGaW5pc2hlZCB3cml0aW5nIEpT
T04gZmlsZXMuIikKIAotICAgIGRlZiBfcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHNl
bGYsIHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3Vs
dHNfb2ZfdHlwZShzZWxmLCByZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRfdHlwZSwgcmVzdWx0X3R5cGVfc3RyKToKICAgICAgICAg
IiIiUHJpbnQgdGhlIG51bWJlciBvZiB0aGUgdGVzdHMgaW4gYSBnaXZlbiByZXN1bHQgY2xhc3Mu
CiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBp
bmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgc3lzLnN0ZG91
dC53cml0ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeSAtIHRoZSBvYmplY3QgY29udGFpbmlu
ZyBhbGwgdGhlIHJlc3VsdHMgdG8gcmVwb3J0IG9uCiAgICAgICAgICAgcmVzdWx0X3R5cGUgLSB0
aGUgcGFydGljdWxhciByZXN1bHQgdHlwZSB0byByZXBvcnQgaW4gdGhlIHN1bW1hcnkuCiAgICAg
ICAgICAgcmVzdWx0X3R5cGVfc3RyIC0gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHJlc3Vs
dF90eXBlLgpAQCAtMTA0Niw4ICs4OTYsOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBm
bXRzdHIgPSAoIkV4cGVjdDogJSU1ZCAlJS04cyAoJSUlZGQgbm93LCAlJSVkZCBkZWZlciwgJSUl
ZGQgd29udGZpeCkiCiAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9udW1fZGlnaXRzKG5vdyks
IHNlbGYuX251bV9kaWdpdHMoZGVmZXIpLAogICAgICAgICAgICAgICAgICAgc2VsZi5fbnVtX2Rp
Z2l0cyh3b250Zml4KSkpCi0gICAgICAgIHdyaXRlKGZtdHN0ciAlIChsZW4odGVzdHMpLCByZXN1
bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksCi0gICAgICAgICAgICAgIGxlbih0ZXN0cyAm
IGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQorICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X2V4cGVjdGVkKGZtdHN0ciAlCisgICAgICAgICAgICAobGVuKHRlc3RzKSwgcmVzdWx0X3R5
cGVfc3RyLCBsZW4odGVzdHMgJiBub3cpLAorICAgICAgICAgICAgIGxlbih0ZXN0cyAmIGRlZmVy
KSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQogCiAgICAgZGVmIF9udW1fZGlnaXRzKHNlbGYsIG51
bSk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBkaWdpdHMgbmVlZGVkIHRvIHJl
cHJlc2VudCB0aGUgbGVuZ3RoIG9mIGEKQEAgLTEwNTcsNDMgKzkwOCwzOSBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgbmRpZ2l0cyA9IGludChtYXRoLmxvZzEwKGxlbihudW0pKSkg
KyAxCiAgICAgICAgIHJldHVybiBuZGlnaXRzCiAKLSAgICBkZWYgX3ByaW50X3RpbWluZ19zdGF0
aXN0aWNzKHNlbGYsIHdyaXRlLCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKKyAgICBkZWYg
X3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHNlbGYsIHRvdGFsX3RpbWUsIHRocmVhZF90aW1pbmdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3Ms
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUmVjb3JkIHRpbWluZy1zcGVjaWZpYyBpbmZv
cm1hdGlvbiBmb3IgdGhlIHRlc3QgcnVuLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3Jp
dGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBv
cgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHRvdGFsX3RpbWU6
IHRvdGFsIGVsYXBzZWQgdGltZSAoaW4gc2Vjb25kcykgZm9yIHRoZSB0ZXN0IHJ1bgogICAgICAg
ICAgIHRocmVhZF90aW1pbmdzOiB3YWxsIGNsb2NrIHRpbWUgZWFjaCB0aHJlYWQgcmFuIGZvcgog
ICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBkaXJlY3RvcnkKICAg
ICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGZpbGUKICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9yIHRoZSB0ZXN0IHJ1bgogICAgICAg
ICAiIiIKLSAgICAgICAgd3JpdGUoIlRlc3QgdGltaW5nOiIpCi0gICAgICAgIHdyaXRlKCIgICU2
LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIgJSB0b3RhbF90aW1lKQotICAgICAgICB3cml0ZSgiIikK
LSAgICAgICAgd3JpdGUoIlRocmVhZCB0aW1pbmc6IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF90aW1pbmcoIlRlc3QgdGltaW5nOiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dGltaW5nKCIgICU2LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIgJSB0b3RhbF90aW1lKQorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF90aW1pbmcoIlRocmVhZCB0aW1pbmc6IikKICAgICAgICAgY3VtbF90aW1lID0gMAogICAg
ICAgICBmb3IgdCBpbiB0aHJlYWRfdGltaW5nczoKLSAgICAgICAgICAgIHdyaXRlKCIgICAgJTEw
czogJTVkIHRlc3RzLCAlNi4yZiBzZWNzIiAlCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3RpbWluZygiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQogICAgICAgICAg
ICAgICAgICAgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUnXSkpCiAg
ICAgICAgICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSddCi0gICAgICAgIHdyaXRlKCIg
ICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGltaW5nKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlCiAg
ICAgICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIGludChzZWxmLl9vcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcykpKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90aW1pbmcoIiIpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRlX3Rlc3Rf
c3RhdGlzdGljcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCi0gICAgICAgIHNlbGYu
X3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3MsCisgICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3MoaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90
aW1lcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBzZWxmLl9wcmludF9kaXJl
Y3RvcnlfdGltaW5ncyh3cml0ZSwgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2Vs
Zi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3MoZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKIAotICAg
IGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlz
dGljcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIlByaW50cyBh
Z2dyZWdhdGUgc3RhdGlzdGljcyAoZS5nLiBtZWRpYW4sIG1lYW4sIGV0Yy4pIGZvciBhbGwgdGVz
dHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUg
aW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rk
b3V0LndyaXRlLgogICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9mIGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwogICAgICAgICAgICAgICBmb3IgYWxsIHRl
c3RzLgogICAgICAgICAiIiIKQEAgLTExMTUsMjMgKzk2MiwyMSBAQCBjbGFzcyBUZXN0UnVubmVy
OgogICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXS5hcHBlbmQo
CiAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZV0pCiAKLSAgICAg
ICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAg
ICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAi
UEVSIFRFU1QgVElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMpOiIsCiAgICAgICAgICAgICB0aW1l
c19mb3JfZHVtcF9yZW5kZXJfdHJlZSkKLSAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19m
b3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zv
cl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAiUEVSIFRFU1QgRElGRiBQUk9DRVNTSU5HIFRJ
TUVTIChzZWNvbmRzKToiLAogICAgICAgICAgICAgdGltZXNfZm9yX2RpZmZfcHJvY2Vzc2luZykK
ICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgotICAgICAgICAgICAgc2VsZi5f
cHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKAogICAgICAgICAgICAgICAgICJQ
RVIgVEVTVCBUSU1FUyBCWSBURVNUIFRZUEU6ICVzIiAlIHRlc3RfdHlwZSwKICAgICAgICAgICAg
ICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlwZV0pCiAKLSAgICBkZWYgX3ByaW50X2lu
ZGl2aWR1YWxfdGVzdF90aW1lcyhzZWxmLCB3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Ms
CisgICAgZGVmIF9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoc2VsZiwgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkpOgogICAgICAgICAiIiJQcmludHMgdGhlIHJ1biB0aW1lcyBmb3Igc2xvdywgdGltZW91
dCBhbmQgY3Jhc2ggdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2Fs
bGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAg
ICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzOiBMaXN0IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwogICAgICAgICAg
ICAgICBmb3IgYWxsIHRlc3RzLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9i
amVjdCBmb3IgdGVzdCBydW4KQEAgLTExNTMsNyArOTk4LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoK
ICAgICAgICAgICAgICAgICBzbG93X3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQogCiAgICAgICAg
ICAgICBpZiBmaWxlbmFtZSBpbiByZXN1bHRfc3VtbWFyeS5mYWlsdXJlczoKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHRfc3VtbWFyeS5yZXN1bHRzW2ZpbGVuYW1lXQorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbZmlsZW5hbWVdLnR5cGUKICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQgb3IK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKToK
ICAgICAgICAgICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9vcl9zbG93ID0gVHJ1ZQpAQCAt
MTE2NCw0MiArMTAwOSwzOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIG51
bV9wcmludGVkID0gbnVtX3ByaW50ZWQgKyAxCiAgICAgICAgICAgICAgICAgdW5leHBlY3RlZF9z
bG93X3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQogCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAg
ICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiJXMgc2xvd2VzdCB0ZXN0cyB0
aGF0IGFyZSBub3QgIgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAg
ICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZygiJXMgc2xvd2VzdCB0ZXN0cyB0aGF0
IGFyZSBub3QgIgogICAgICAgICAgICAgIm1hcmtlZCBhcyBTTE9XIGFuZCBkaWQgbm90IHRpbWVv
dXQvY3Jhc2g6IiAlCiAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLm51bV9zbG93X3Rlc3RzX3Rv
X2xvZywgdW5leHBlY3RlZF9zbG93X3Rlc3RzKQotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAg
c2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0ZSwgIlRlc3RzIG1hcmtlZCBhcyBTTE9X
OiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd190ZXN0cykKLSAg
ICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcod3Jp
dGUsICJUZXN0cyB0aGF0IHRpbWVkIG91dCBvciBjcmFzaGVkOiIsCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGlt
aW5nKCJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLCBzbG93X3Rlc3RzKQorICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3Rp
bWluZygiVGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMpCi0gICAgICAgIHdy
aXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKIAotICAgIGRl
ZiBfcHJpbnRfdGVzdF9saXN0X3RpbWluZyhzZWxmLCB3cml0ZSwgdGl0bGUsIHRlc3RfbGlzdCk6
CisgICAgZGVmIF9wcmludF90ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHRpdGxlLCB0ZXN0X2xpc3Qp
OgogICAgICAgICAiIiJQcmludCB0aW1pbmcgaW5mbyBmb3IgZWFjaCB0ZXN0LgogCiAgICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5n
LiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgog
ICAgICAgICAgIHRpdGxlOiBzZWN0aW9uIGhlYWRpbmcKICAgICAgICAgICB0ZXN0X2xpc3Q6IHRl
c3RzIHRoYXQgZmFsbCBpbiB0aGlzIHNlY3Rpb24KICAgICAgICAgIiIiCi0gICAgICAgIHdyaXRl
KHRpdGxlKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZyh0aXRsZSkKICAgICAg
ICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF9saXN0OgogICAgICAgICAgICAgZmlsZW5hbWUgPSB0
ZXN0X3R1cGxlLmZpbGVuYW1lW2xlbigKICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmxheW91
dF90ZXN0c19kaXIoKSkgKyAxOl0KICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVw
bGFjZSgnXFwnLCAnLycpCiAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lID0gcm91bmQodGVzdF90
dXBsZS50ZXN0X3J1bl90aW1lLCAxKQotICAgICAgICAgICAgd3JpdGUoIiAgJXMgdG9vayAlcyBz
ZWNvbmRzIiAlIChmaWxlbmFtZSwgdGVzdF9ydW5fdGltZSkpCisgICAgICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3RpbWluZygiICAlcyB0b29rICVzIHNlY29uZHMiICUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlbmFtZSwgdGVzdF9ydW5fdGltZSkpCiAK
LSAgICBkZWYgX3ByaW50X2RpcmVjdG9yeV90aW1pbmdzKHNlbGYsIHdyaXRlLCBkaXJlY3Rvcnlf
dGVzdF90aW1pbmdzKToKKyAgICBkZWYgX3ByaW50X2RpcmVjdG9yeV90aW1pbmdzKHNlbGYsIGRp
cmVjdG9yeV90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJQcmludCB0aW1pbmcgaW5mbyBieSBk
aXJlY3RvcnkgZm9yIGFueSBkaXJlY3RvcmllcyB0aGF0CiAgICAgICAgIHRha2UgPiAxMCBzZWNv
bmRzIHRvIHJ1bi4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNr
IHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAg
ICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmc6IHRp
bWUgaW5mbyBmb3IgZWFjaCBkaXJlY3RvcnkKICAgICAgICAgIiIiCiAgICAgICAgIHRpbWluZ3Mg
PSBbXQpAQCAtMTIwOSwyNSArMTA1MCwyNCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bV90ZXN0cykpCiAgICAgICAgIHRpbWluZ3Muc29ydCgpCiAK
LSAgICAgICAgd3JpdGUoIlRpbWUgdG8gcHJvY2VzcyBzbG93ZXN0IHN1YmRpcmVjdG9yaWVzOiIp
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCJUaW1lIHRvIHByb2Nlc3Mgc2xv
d2VzdCBzdWJkaXJlY3RvcmllczoiKQogICAgICAgICBtaW5fc2Vjb25kc190b19wcmludCA9IDEw
CiAgICAgICAgIGZvciB0aW1pbmcgaW4gdGltaW5nczoKICAgICAgICAgICAgIGlmIHRpbWluZ1sw
XSA+IG1pbl9zZWNvbmRzX3RvX3ByaW50OgotICAgICAgICAgICAgICAgIHdyaXRlKCIgICVzIHRv
b2sgJXMgc2Vjb25kcyB0byBydW4gJXMgdGVzdHMuIiAlICh0aW1pbmdbMV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgdGltaW5nWzBdLCB0aW1pbmdbMl0pKQotICAgICAgICB3cml0ZSgiIikKKyAg
ICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygKKyAgICAgICAgICAgICAg
ICAgICAgIiAgJXMgdG9vayAlcyBzZWNvbmRzIHRvIHJ1biAlcyB0ZXN0cy4iICUgKHRpbWluZ1sx
XSwKKyAgICAgICAgICAgICAgICAgICAgdGltaW5nWzBdLCB0aW1pbmdbMl0pKQorICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKIAotICAgIGRlZiBfcHJpbnRfc3RhdGlzdGlj
c19mb3JfdGVzdF90aW1pbmdzKHNlbGYsIHdyaXRlLCB0aXRsZSwgdGltaW5ncyk6CisgICAgZGVm
IF9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Moc2VsZiwgdGl0bGUsIHRpbWluZ3Mp
OgogICAgICAgICAiIiJQcmludHMgdGhlIG1lZGlhbiwgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0
aW9uIG9mIHRoZSB2YWx1ZXMgaW4KICAgICAgICAgdGltaW5ncy4KIAogICAgICAgICBBcmdzOgot
ICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9n
Z2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAg
ICB0aXRsZTogVGl0bGUgZm9yIHRoZXNlIHRpbWluZ3MuCiAgICAgICAgICAgdGltaW5nczogQSBs
aXN0IG9mIGZsb2F0cyByZXByZXNlbnRpbmcgdGltZXMuCiAgICAgICAgICIiIgotICAgICAgICB3
cml0ZSh0aXRsZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcodGl0bGUpCiAg
ICAgICAgIHRpbWluZ3Muc29ydCgpCiAKICAgICAgICAgbnVtX3Rlc3RzID0gbGVuKHRpbWluZ3Mp
CkBAIC0xMjQ5LDE5ICsxMDg5LDE3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBz
dW1fb2ZfZGV2aWF0aW9ucyA9IG1hdGgucG93KHRpbWUgLSBtZWFuLCAyKQogCiAgICAgICAgIHN0
ZF9kZXZpYXRpb24gPSBtYXRoLnNxcnQoc3VtX29mX2RldmlhdGlvbnMgLyBudW1fdGVzdHMpCi0g
ICAgICAgIHdyaXRlKCIgIE1lZGlhbjogICAgICAgICAgJTYuM2YiICUgbWVkaWFuKQotICAgICAg
ICB3cml0ZSgiICBNZWFuOiAgICAgICAgICAgICU2LjNmIiAlIG1lYW4pCi0gICAgICAgIHdyaXRl
KCIgIDkwdGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTkwKQotICAgICAgICB3cml0
ZSgiICA5OXRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5OSkKLSAgICAgICAgd3Jp
dGUoIiAgU3RhbmRhcmQgZGV2OiAgICAlNi4zZiIgJSBzdGRfZGV2aWF0aW9uKQotICAgICAgICB3
cml0ZSgiIikKLQotICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1bW1hcnkoc2VsZiwgd3JpdGUsIHJl
c3VsdF9zdW1tYXJ5KToKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgTWVk
aWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRpYW4pCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdGltaW5nKCIgIE1lYW46ICAgICAgICAgICAgJTYuM2YiICUgbWVhbikKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgOTB0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJj
ZW50aWxlOTApCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIDk5dGggcGVy
Y2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTk5KQorICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3RpbWluZygiICBTdGFuZGFyZCBkZXY6ICAgICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorCisgICAgZGVmIF9wcmludF9y
ZXN1bHRfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlByaW50IGEg
c2hvcnQgc3VtbWFyeSBhYm91dCBob3cgbWFueSB0ZXN0cyBwYXNzZWQuCiAKICAgICAgICAgQXJn
czoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBh
IExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnk6IGluZm9ybWF0aW9uIHRvIGxvZwogICAgICAgICAiIiIKICAg
ICAgICAgZmFpbGVkID0gbGVuKHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzKQpAQCAtMTI3MywzMCAr
MTExMSwyOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBpZiB0b3RhbCA+IDA6CiAgICAg
ICAgICAgICBwY3RfcGFzc2VkID0gZmxvYXQocGFzc2VkKSAqIDEwMCAvIHRvdGFsCiAKLSAgICAg
ICAgd3JpdGUoIiIpCi0gICAgICAgIHdyaXRlKCI9PiBSZXN1bHRzOiAlZC8lZCB0ZXN0cyBwYXNz
ZWQgKCUuMWYlJSkiICUKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCI9PiBSZXN1bHRzOiAlZC8lZCB0ZXN0
cyBwYXNzZWQgKCUuMWYlJSkiICUKICAgICAgICAgICAgICAgICAgICAgIChwYXNzZWQsIHRvdGFs
LCBwY3RfcGFzc2VkKSkKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Jl
c3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1t
YXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMu
Tk9XLCAiVGVzdHMgdG8gYmUgZml4ZWQgZm9yIHRoZSBjdXJyZW50IHJlbGVhc2UiKQogCi0gICAg
ICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3
cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFs
KCIiKQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShyZXN1bHRfc3Vt
bWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkRFRkVSLAogICAgICAgICAgICAg
IlRlc3RzIHdlJ2xsIGZpeCBpbiB0aGUgZnV0dXJlIGlmIHRoZXkgZmFpbCAoREVGRVIpIikKIAot
ICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50
cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2Fj
dHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkocmVzdWx0
X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5XT05URklYLAogICAgICAg
ICAgICAgIlRlc3RzIHRoYXQgd2lsbCBvbmx5IGJlIGZpeGVkIGlmIHRoZXkgY3Jhc2ggKFdPTlRG
SVgpIikKIAotICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkoc2VsZiwgd3JpdGUs
IHJlc3VsdF9zdW1tYXJ5LCB0aW1lbGluZSwKKyAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5
X2VudHJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCB0aW1lbGluZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlYWRpbmcpOgogICAgICAgICAiIiJQcmludCBhIHN1bW1hcnkg
YmxvY2sgb2YgcmVzdWx0cyBmb3IgYSBwYXJ0aWN1bGFyIHRpbWVsaW5lIG9mIHRlc3QuCiAKICAg
ICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRv
IChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3Jp
dGUuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgdG8gcHJpbnQgcmVzdWx0cyBm
b3IKICAgICAgICAgICB0aW1lbGluZTogdGhlIHRpbWVsaW5lIHRvIHByaW50IHJlc3VsdHMgZm9y
IChOT1QsIFdPTlRGSVgsIGV0Yy4pCiAgICAgICAgICAgaGVhZGluZzogYSB0ZXh0dWFsIGRlc2Ny
aXB0aW9uIG9mIHRoZSB0aW1lbGluZQpAQCAtMTMwNSw3ICsxMTQxLDcgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgbm90X3Bhc3NpbmcgPSAodG90YWwgLQogICAgICAgICAgICBsZW4ocmVz
dWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25bdGVzdF9leHBlY3RhdGlvbnMuUEFTU10g
JgogICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxp
bmVdKSkKLSAgICAgICAgd3JpdGUoIj0+ICVzICglZCk6IiAlIChoZWFkaW5nLCBub3RfcGFzc2lu
ZykpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCI9PiAlcyAoJWQpOiIgJSAo
aGVhZGluZywgbm90X3Bhc3NpbmcpKQogCiAgICAgICAgIGZvciByZXN1bHQgaW4gVGVzdEV4cGVj
dGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fT1JERVI6CiAgICAgICAgICAgICBpZiByZXN1bHQgPT0g
dGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKQEAgLTEzMTUsOTQgKzExNTEsOCBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFU
SU9OX0RFU0NSSVBUSU9OU1tyZXN1bHRdCiAgICAgICAgICAgICBpZiBub3RfcGFzc2luZyBhbmQg
bGVuKHJlc3VsdHMpOgogICAgICAgICAgICAgICAgIHBjdCA9IGxlbihyZXN1bHRzKSAqIDEwMC4w
IC8gbm90X3Bhc3NpbmcKLSAgICAgICAgICAgICAgICB3cml0ZSgiICAlNWQgJS0yNHMgKCU0LjFm
JSUpIiAlIChsZW4ocmVzdWx0cyksCi0gICAgICAgICAgICAgICAgICAgICAgZGVzY1tsZW4ocmVz
dWx0cykgIT0gMV0sIHBjdCkpCi0KLSAgICBkZWYgX3ByaW50X29uZV9saW5lX3N1bW1hcnkoc2Vs
ZiwgdG90YWwsIGV4cGVjdGVkKToKLSAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5
IG9mIHRoZSB0ZXN0IHJ1biB0byBzdGRvdXQuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICB0
b3RhbDogdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgotICAgICAgICAgIGV4cGVjdGVkOiBudW1i
ZXIgb2YgZXhwZWN0ZWQgcmVzdWx0cwotICAgICAgICAiIiIKLSAgICAgICAgdW5leHBlY3RlZCA9
IHRvdGFsIC0gZXhwZWN0ZWQKLSAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgotICAgICAgICAg
ICAgcHJpbnQgIkFsbCAlZCB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuIiAlIGV4cGVjdGVkCi0gICAg
ICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKLSAgICAgICAgICAgIHByaW50ICIxIHRlc3QgcmFuIGFz
IGV4cGVjdGVkLCAlZCBkaWRuJ3Q6IiAlIHVuZXhwZWN0ZWQKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHByaW50ICIlZCB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoiICUgKGV4
cGVjdGVkLAotICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQpCi0KLSAgICBkZWYgX3ByaW50X3Vu
ZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMpOgotICAgICAgICAiIiJQ
cmludHMgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm0gdG8g
c3Rkb3V0LiIiIgotICAgICAgICBwYXNzZXMgPSB7fQotICAgICAgICBmbGFreSA9IHt9Ci0gICAg
ICAgIHJlZ3Jlc3Npb25zID0ge30KLQotICAgICAgICBpZiBsZW4odW5leHBlY3RlZF9yZXN1bHRz
Wyd0ZXN0cyddKToKLSAgICAgICAgICAgIHByaW50ICIiCi0KLSAgICAgICAgZm9yIHRlc3QsIHJl
c3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddLml0ZXJpdGVtcygpOgotICAgICAg
ICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3BsaXQoIiAiKQotICAgICAgICAgICAg
ZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0KCIgIikKLSAgICAgICAgICAgIGlm
IGFjdHVhbCA9PSBbJ1BBU1MnXToKLSAgICAgICAgICAgICAgICBpZiAnQ1JBU0gnIGluIGV4cGVj
dGVkOgotICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGNy
YXNoLCBidXQgcGFzc2VkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3QpCi0gICAgICAgICAgICAgICAgZWxpZiAnVElNRU9VVCcgaW4gZXhwZWN0ZWQ6Ci0g
ICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gdGltZW91dCwg
YnV0IHBhc3NlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBfYWRkX3Rv
X2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWwsIGJ1dCBwYXNzZWQnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKLSAgICAgICAgICAgIGVsaWYgbGVuKGFj
dHVhbCkgPiAxOgotICAgICAgICAgICAgICAgICMgV2UgZ3JvdXAgZmxha3kgdGVzdHMgYnkgdGhl
IGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgotICAgICAgICAgICAgICAgIF9hZGRfdG9fZGlj
dF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBdLCB0ZXN0KQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocmVncmVzc2lvbnMsIHJlc3VsdHNb
J2FjdHVhbCddLCB0ZXN0KQotCi0gICAgICAgIGlmIGxlbihwYXNzZXMpOgotICAgICAgICAgICAg
Zm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHBy
aW50ICIlczogKCVkKSIgJSAoa2V5LCBsZW4odGVzdHMpKQotICAgICAgICAgICAgICAgIHRlc3Rz
LnNvcnQoKQotICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAg
ICAgICAgICBwcmludCAiICAlcyIgJSB0ZXN0Ci0gICAgICAgICAgICAgICAgcHJpbnQKLQotICAg
ICAgICBpZiBsZW4oZmxha3kpOgotICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4cGVj
dGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCi0gICAgICAgICAgICBmb3Iga2V5
LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBU
ZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCi0gICAgICAgICAg
ICAgICAgcHJpbnQgIlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAoJWQpIiAlICgKLSAgICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKQotICAgICAgICAg
ICAgICAgIHRlc3RzLnNvcnQoKQotCi0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMn
XVt0ZXN0XQotICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNw
bGl0KCIgIikKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVk
J10uc3BsaXQoIiAiKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRp
b25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCi0gICAgICAgICAgICAgICAgICAgIG5l
d19leHBlY3RhdGlvbnNfbGlzdCA9IGxpc3Qoc2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQot
ICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyA9ICVzIiAlICh0ZXN0LCAiICIuam9pbihu
ZXdfZXhwZWN0YXRpb25zX2xpc3QpKQotICAgICAgICAgICAgICAgIHByaW50Ci0KLSAgICAgICAg
aWYgbGVuKHJlZ3Jlc3Npb25zKToKLSAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBl
Y3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUwotICAgICAgICAgICAgZm9yIGtl
eSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQotICAg
ICAgICAgICAgICAgIHByaW50ICJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICglZCkiICUg
KAotICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykp
Ci0gICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCi0gICAgICAgICAgICAgICAgZm9yIHRlc3Qg
aW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICIgICVzID0gJXMiICUgKHRlc3Qs
IGtleSkKLSAgICAgICAgICAgICAgICBwcmludAotCi0gICAgICAgIGlmIGxlbih1bmV4cGVjdGVk
X3Jlc3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAg
ICBwcmludCAiLSIgKiA3OAorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0
dWFsKCIgICU1ZCAlLTI0cyAoJTQuMWYlJSkiICUKKyAgICAgICAgICAgICAgICAgICAgKGxlbihy
ZXN1bHRzKSwgZGVzY1tsZW4ocmVzdWx0cykgIT0gMV0sIHBjdCkpCiAKICAgICBkZWYgX3dyaXRl
X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiV3Jp
dGUgcmVzdWx0cy5odG1sIHdoaWNoIGlzIGEgc3VtbWFyeSBvZiB0ZXN0cyB0aGF0IGZhaWxlZC4K
QEAgLTE0NjIsMTAgKzEyMTIsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9w
b3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUocmVzdWx0c19maWxlbmFtZSkKIAogCi1kZWYgX2Fk
ZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUpOgotICAgIGRpY3Quc2V0ZGVmYXVs
dChrZXksIFtdKS5hcHBlbmQodmFsdWUpCi0KLQogZGVmIHJlYWRfdGVzdF9maWxlcyhmaWxlcyk6
CiAgICAgdGVzdHMgPSBbXQogICAgIGZvciBmaWxlIGluIGZpbGVzOgpAQCAtMTQ3NywyNSArMTIy
MywxMSBAQCBkZWYgcmVhZF90ZXN0X2ZpbGVzKGZpbGVzKToKICAgICByZXR1cm4gdGVzdHMKIAog
Ci1kZWYgY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsIGxvZ19vcHRpb24pOgotICAgICIi
IlJldHVybnMgYSB3cml0ZSgpIGZ1bmN0aW9uIHRoYXQgd2lsbCB3cml0ZSB0aGUgc3RyaW5nIHRv
IF9sb2cuaW5mbygpCi0gICAgaWYgY29tcCB3YXMgc3BlY2lmaWVkIGluIC0tbG9nIG9yIGlmIC0t
dmVyYm9zZSBpcyB0cnVlLiBPdGhlcndpc2UgdGhlCi0gICAgbWVzc2FnZSBpcyBkcm9wcGVkLgot
Ci0gICAgQXJnczoKLSAgICAgIG9wdGlvbnM6IGxpc3Qgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMg
ZnJvbSBvcHRwYXJzZQotICAgICAgbG9nX29wdGlvbjogb3B0aW9uIHRvIG1hdGNoIGluIG9wdGlv
bnMubG9nIGluIG9yZGVyIGZvciB0aGUgbWVzc2FnZXMKLSAgICAgICAgICB0byBiZSBsb2dnZWQg
KGUuZy4sICdhY3R1YWwnIG9yICdleHBlY3RlZCcpCi0gICAgIiIiCi0gICAgaWYgb3B0aW9ucy52
ZXJib3NlIG9yIGxvZ19vcHRpb24gaW4gb3B0aW9ucy5sb2cuc3BsaXQoIiwiKToKLSAgICAgICAg
cmV0dXJuIF9sb2cuaW5mbwotICAgIHJldHVybiBsYW1iZGEgc3RyOiAxCi0KLQotZGVmIG1haW4o
b3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKK2RlZiBydW4ocG9ydF9vYmosIG9w
dGlvbnMsIGFyZ3MpOgogICAgICIiIlJ1biB0aGUgdGVzdHMuCiAKICAgICBBcmdzOgorICAgICAg
cG9ydF9vYmo6IFBvcnQgb2JqZWN0IGZvciBwb3J0LXNwZWNpZmljIGJlaGF2aW9yCiAgICAgICBv
cHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAgICAgIGFyZ3M6
IGEgbGlzdCBvZiBzdWIgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdG8gdGVzdAogICAgICAgcHJpbnRf
cmVzdWx0czogd2hldGhlciBvciBub3QgdG8gbG9nIGFueXRoaW5nIHRvIHN0ZG91dC4KQEAgLTE1
MDUsMjIgKzEyMzcsMjQgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1U
cnVlKToKICAgICAgICAgICBlcnJvci4KICAgICAiIiIKIAotICAgIGlmIG9wdGlvbnMuc291cmNl
czoKLSAgICAgICAgb3B0aW9ucy52ZXJib3NlID0gVHJ1ZQorICAgICMgQ29uZmlndXJlIHRoZSBw
cmludGluZyBzdWJzeXN0ZW0gZm9yIHByaW50aW5nIG91dHB1dCwgbG9nZ2luZyBkZWJ1ZworICAg
ICMgaW5mbywgYW5kIHRyYWNpbmcgdGVzdHMuCiAKLSAgICAjIFNldCB1cCBvdXIgbG9nZ2luZyBm
b3JtYXQuCi0gICAgbWV0ZXIgPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3RyZWFtKG9wdGlvbnMu
dmVyYm9zZSwgc3lzLnN0ZGVycikKLSAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJwotICAgIGxv
Z19kYXRlZm10ID0gJyV5JW0lZCAlSDolTTolUycKLSAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklO
Rk8KLSAgICBpZiBvcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGlt
ZSlzICUoZmlsZW5hbWUpczolKGxpbmVubyktNGQgJShsZXZlbG5hbWUpcyAnCi0gICAgICAgICAg
ICAgICAgICAnJShtZXNzYWdlKXMnKQotICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVH
Ci0gICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm10
LCBkYXRlZm10PWxvZ19kYXRlZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPW1l
dGVyKQorICAgIGlmIG5vdCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlczoKKyAgICAgICAgIyBGSVhN
RTogSW52ZXN0aWdhdGUgcGVyZi9mbGFraW5lc3MgaW1wYWN0IG9mIHVzaW5nIGNwdV9jb3VudCAr
IDEuCisgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gcG9ydF9vYmouZGVmYXVsdF9j
aGlsZF9wcm9jZXNzZXMoKQorCisgICAgcHJpbnRlciA9IG91dHB1dC5Db250cm9sbGVyKHBvcnRf
b2JqLCBvcHRpb25zLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAorICAgICAgICBidWlsZGJv
dF9vdXRwdXQ9c3lzLnN0ZG91dCwKKyAgICAgICAgY2hpbGRfcHJvY2Vzc2VzPWludChvcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcyksCisgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsPW9wdGlvbnMuZXhw
ZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgIGlmIG9wdGlvbnMuaGVscF9wcmludGluZzoK
KyAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50aW5nKCkKKyAgICBpZiBvcHRpb25zLmhlbHBfdHJh
Y2U6CisgICAgICAgIHByaW50ZXIuaGVscF90cmFjZSgpCisgICAgaWYgb3B0aW9ucy5oZWxwX3By
aW50aW5nIG9yIG9wdGlvbnMuaGVscF90cmFjZToKKyAgICAgICAgcmV0dXJuIDAKIAotICAgIHBv
cnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKICAgICBleGVjdXRp
dmUgPSBFeGVjdXRpdmUoKQogCiAgICAgaWYgbm90IG9wdGlvbnMuY29uZmlndXJhdGlvbjoKQEAg
LTE1NTYsOCArMTI5MCw4IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9
VHJ1ZSk6CiAgICAgICAgICMgSnVzdCBjbG9iYmVyIHRoZSBhY3R1YWwgdGVzdCByZXN1bHRzIGRp
cmVjdG9yaWVzIHNpbmNlIHRoZSBvdGhlcgogICAgICAgICAjIGZpbGVzIGluIHRoZSByZXN1bHRz
IGRpcmVjdG9yeSBhcmUgZXhwbGljaXRseSB1c2VkIGZvciBjcm9zcy1ydW4KICAgICAgICAgIyB0
cmFja2luZy4KLSAgICAgICAgbWV0ZXIudXBkYXRlKCJDbG9iYmVyaW5nIG9sZCByZXN1bHRzIGlu
ICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQor
ICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ2xvYmJlcmluZyBvbGQgcmVzdWx0cyBpbiAl
cyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0
b3J5KQogICAgICAgICBsYXlvdXRfdGVzdHNfZGlyID0gcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2Rp
cigpCiAgICAgICAgIHBvc3NpYmxlX2RpcnMgPSBvcy5saXN0ZGlyKGxheW91dF90ZXN0c19kaXIp
CiAgICAgICAgIGZvciBkaXJuYW1lIGluIHBvc3NpYmxlX2RpcnM6CkBAIC0xNTY1LDE3ICsxMjk5
LDYgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAg
ICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5LCBkaXJuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9l
cnJvcnM9VHJ1ZSkKIAotICAgIGlmIG5vdCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlczoKLSAgICAg
ICAgIyBGSVhNRTogSW52ZXN0aWdhdGUgcGVyZi9mbGFraW5lc3MgaW1wYWN0IG9mIHVzaW5nIGNw
dV9jb3VudCArIDEuCi0gICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gcG9ydF9vYmou
ZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKQotCi0gICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193
cml0ZXIob3B0aW9ucywgJ2NvbmZpZycpCi0gICAgaWYgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMg
PT0gMToKLSAgICAgICAgd3JpdGUoIlJ1bm5pbmcgb25lICVzIiAlIHBvcnRfb2JqLmRyaXZlcl9u
YW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHdyaXRlKCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxl
bCIgJSAoCi0gICAgICAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLCBwb3J0X29iai5k
cml2ZXJfbmFtZSgpKSkKLQogICAgIGlmIG5vdCBvcHRpb25zLnRpbWVfb3V0X21zOgogICAgICAg
ICBpZiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0gIkRlYnVnIjoKICAgICAgICAgICAgIG9wdGlv
bnMudGltZV9vdXRfbXMgPSBzdHIoMiAqIFRlc3RSdW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRf
TVMpCkBAIC0xNTgzLDggKzEzMDYsMTQgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRf
cmVzdWx0cz1UcnVlKToKICAgICAgICAgICAgIG9wdGlvbnMudGltZV9vdXRfbXMgPSBzdHIoVGVz
dFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykKIAogICAgIG9wdGlvbnMuc2xvd190aW1l
X291dF9tcyA9IHN0cig1ICogaW50KG9wdGlvbnMudGltZV9vdXRfbXMpKQotICAgIHdyaXRlKCJS
ZWd1bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3QgdGltZW91dDogJXMiICUKLSAgICAgICAgICAo
b3B0aW9ucy50aW1lX291dF9tcywgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKSkKKyAgICBwcmlu
dGVyLnByaW50X2NvbmZpZygiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6
ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMudGltZV9vdXRfbXMsIG9wdGlvbnMu
c2xvd190aW1lX291dF9tcykpCisKKyAgICBpZiBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMp
ID09IDE6CisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBw
b3J0X29iai5kcml2ZXJfbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBwcmludGVyLnByaW50X2Nv
bmZpZygiUnVubmluZyAlcyAlc3MgaW4gcGFyYWxsZWwiICUgKAorICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcywgcG9ydF9vYmouZHJpdmVyX25hbWUoKSkpCiAK
ICAgICAjIEluY2x1ZGUgYWxsIHRlc3RzIGlmIG5vbmUgYXJlIHNwZWNpZmllZC4KICAgICBuZXdf
YXJncyA9IFtdCkBAIC0xNjAxLDkgKzEzMzAsOSBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBw
cmludF9yZXN1bHRzPVRydWUpOgogCiAgICAgIyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3Rvcnkg
aWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgogICAgIHBvcnRfb2JqLm1heWJlX21ha2VfZGly
ZWN0b3J5KG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCi0gICAgbWV0ZXIudXBkYXRlKCJDb2xs
ZWN0aW5nIHRlc3RzIC4uLiIpCisgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3Rpbmcg
dGVzdHMgLi4uIikKIAotICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0X29iaiwgb3B0
aW9ucywgbWV0ZXIpCisgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRp
b25zLCBwcmludGVyKQogICAgIHRlc3RfcnVubmVyLmdhdGhlcl9maWxlX3BhdGhzKHBhdGhzKQog
CiAgICAgaWYgb3B0aW9ucy5saW50X3Rlc3RfZmlsZXM6CkBAIC0xNjEzLDQzICsxMzQyLDQzIEBA
IGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgIGZv
ciBwbGF0Zm9ybV9uYW1lIGluIHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZXMoKToKICAgICAg
ICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0Zm9ybV9uYW1lLCBpc19k
ZWJ1Z19tb2RlPVRydWUpCiAgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlv
bnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZT1GYWxzZSkKLSAgICAgICAgbWV0ZXIudXBk
YXRlKCIiKQotICAgICAgICBwcmludCAoIklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBl
cnJvcnMgb3IgZXhjZXB0aW9ucywgdGhlbiB0aGUgIgotICAgICAgICAgICAgImxpbnQgc3VjY2Vl
ZGVkLiIpCisgICAgICAgIHByaW50ZXIud3JpdGUoIiIpCisgICAgICAgIF9sb2cuaW5mbygiSWYg
dGhlcmUgYXJlIG5vIGZhaWwgbWVzc2FnZXMsIGVycm9ycyBvciBleGNlcHRpb25zLCAiCisgICAg
ICAgICAgICAgICAgICAidGhlbiB0aGUgbGludCBzdWNjZWVkZWQuIikKICAgICAgICAgcmV0dXJu
IDAKIAotICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICJjb25maWci
KQotICAgIHdyaXRlKCJVc2luZyBwb3J0ICclcyciICUgcG9ydF9vYmoubmFtZSgpKQotICAgIHdy
aXRlKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIgJSBvcHRpb25zLnJlc3VsdHNfZGlyZWN0
b3J5KQorICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyBwb3J0ICclcyciICUgcG9ydF9v
YmoubmFtZSgpKQorICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5nIHRlc3QgcmVzdWx0
cyBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJl
Y3RvcnkpCiAgICAgaWYgb3B0aW9ucy5uZXdfYmFzZWxpbmU6Ci0gICAgICAgIHdyaXRlKCJQbGFj
aW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUgcG9ydF9vYmouYmFzZWxpbmVfcGF0aCgpKQotICAg
IHdyaXRlKCJVc2luZyAlcyBidWlsZCIgJSBvcHRpb25zLmNvbmZpZ3VyYXRpb24pCisgICAgICAg
IHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9vYmouYmFzZWxpbmVfcGF0aCgpKQorICAg
IHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyAlcyBidWlsZCIgJSBvcHRpb25zLmNvbmZpZ3Vy
YXRpb24pCiAgICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgd3JpdGUoIlBpeGVs
IHRlc3RzIGVuYWJsZWQiKQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGl4ZWwgdGVz
dHMgZW5hYmxlZCIpCiAgICAgZWxzZToKLSAgICAgICAgd3JpdGUoIlBpeGVsIHRlc3RzIGRpc2Fi
bGVkIikKLSAgICB3cml0ZSgiIikKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBpeGVs
IHRlc3RzIGRpc2FibGVkIikKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiIikKIAotICAgIG1l
dGVyLnVwZGF0ZSgiUGFyc2luZyBleHBlY3RhdGlvbnMgLi4uIikKKyAgICBwcmludGVyLnByaW50
X3VwZGF0ZSgiUGFyc2luZyBleHBlY3RhdGlvbnMgLi4uIikKICAgICB0ZXN0X3J1bm5lci5wYXJz
ZV9leHBlY3RhdGlvbnMocG9ydF9vYmoudGVzdF9wbGF0Zm9ybV9uYW1lKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9PSAnRGVidWcn
KQogCi0gICAgbWV0ZXIudXBkYXRlKCJDaGVja2luZyBidWlsZCAuLi4iKQorICAgIHByaW50ZXIu
cHJpbnRfdXBkYXRlKCJDaGVja2luZyBidWlsZCAuLi4iKQogICAgIGlmIG5vdCBwb3J0X29iai5j
aGVja19idWlsZCh0ZXN0X3J1bm5lci5uZWVkc19odHRwKCkpOgogICAgICAgICByZXR1cm4gLTEK
IAotICAgIG1ldGVyLnVwZGF0ZSgiU3RhcnRpbmcgaGVscGVyIC4uLiIpCisgICAgcHJpbnRlci5w
cmludF91cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4iKQogICAgIHBvcnRfb2JqLnN0YXJ0X2hl
bHBlcigpCiAKICAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRoZW1l
cywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCiAgICAgaWYgbm90IG9wdGlvbnMubm9jaGVja19z
eXNfZGVwczoKLSAgICAgICAgbWV0ZXIudXBkYXRlKCJDaGVja2luZyBzeXN0ZW0gZGVwZW5kZW5j
aWVzIC4uLiIpCisgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDaGVja2luZyBzeXN0ZW0g
ZGVwZW5kZW5jaWVzIC4uLiIpCiAgICAgICAgIGlmIG5vdCBwb3J0X29iai5jaGVja19zeXNfZGVw
cyh0ZXN0X3J1bm5lci5uZWVkc19odHRwKCkpOgogICAgICAgICAgICAgcmV0dXJuIC0xCiAKLSAg
ICBtZXRlci51cGRhdGUoIlByZXBhcmluZyB0ZXN0cyAuLi4iKQotICAgIHdyaXRlID0gY3JlYXRl
X2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICJleHBlY3RlZCIpCi0gICAgcmVzdWx0X3N1bW1hcnkg
PSB0ZXN0X3J1bm5lci5wcmVwYXJlX2xpc3RzX2FuZF9wcmludF9vdXRwdXQod3JpdGUpCisgICAg
cHJpbnRlci5wcmludF91cGRhdGUoIlByZXBhcmluZyB0ZXN0cyAuLi4iKQorICAgIHJlc3VsdF9z
dW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KCkKIAog
ICAgIHBvcnRfb2JqLnNldHVwX3Rlc3RfcnVuKCkKIApAQCAtMTY1OSw3ICsxMzg4LDcgQEAgZGVm
IG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgaWYgb3B0
aW9ucy5mdXp6eV9waXhlbF90ZXN0czoKICAgICAgICAgICAgIHRlc3RfcnVubmVyLmFkZF90ZXN0
X3R5cGUoZnV6enlfaW1hZ2VfZGlmZi5GdXp6eUltYWdlRGlmZikKIAotICAgIG51bV91bmV4cGVj
dGVkX3Jlc3VsdHMgPSB0ZXN0X3J1bm5lci5ydW4ocmVzdWx0X3N1bW1hcnksIHByaW50X3Jlc3Vs
dHMpCisgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IHRlc3RfcnVubmVyLnJ1bihyZXN1bHRf
c3VtbWFyeSkKIAogICAgIHBvcnRfb2JqLnN0b3BfaGVscGVyKCkKIApAQCAtMTY3Miw3ICsxNDAx
LDkgQEAgZGVmIF9jb21wYXRfc2hpbV9jYWxsYmFjayhvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBw
YXJzZXIpOgogCiAKIGRlZiBfY29tcGF0X3NoaW1fb3B0aW9uKG9wdGlvbl9uYW1lLCAqKmt3YXJn
cyk6Ci0gICAgcmV0dXJuIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKG9wdGlvbl9uYW1lLCBhY3Rpb249
ImNhbGxiYWNrIiwgY2FsbGJhY2s9X2NvbXBhdF9zaGltX2NhbGxiYWNrLCBoZWxwPSJJZ25vcmVk
LCBmb3Igb2xkLXJ1bi13ZWJraXQtdGVzdHMgY29tcGF0IG9ubHkuIiwgKiprd2FyZ3MpCisgICAg
cmV0dXJuIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKG9wdGlvbl9uYW1lLCBhY3Rpb249ImNhbGxiYWNr
IiwKKyAgICAgICAgY2FsbGJhY2s9X2NvbXBhdF9zaGltX2NhbGxiYWNrLAorICAgICAgICBoZWxw
PSJJZ25vcmVkLCBmb3Igb2xkLXJ1bi13ZWJraXQtdGVzdHMgY29tcGF0IG9ubHkuIiwgKiprd2Fy
Z3MpCiAKIAogZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKQEAgLTE2OTYsMjIgKzE0MjcsNyBA
QCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAjIG9sZC1ydW4td2Via2l0LXRl
c3RzIGFsc28gYWNjZXB0cyAtYywgLS1jb25maWd1cmF0aW9uIENPTkZJR1VSQVRJT04uCiAgICAg
XQogCi0gICAgbG9nZ2luZ19vcHRpb25zID0gWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLS1sb2ciLCBhY3Rpb249InN0b3JlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9TE9HX0RFRkFV
TFRfVkFMVUUsCi0gICAgICAgICAgICBoZWxwPSgibG9nIHZhcmlvdXMgdHlwZXMgb2YgZGF0YS4g
VGhlIGFyZ3VtZW50IHZhbHVlIHNob3VsZCBiZSBhICIKLSAgICAgICAgICAgICAgICAgICJjb21t
YS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgZnJvbTogJXMgKGRlZmF1bHRzIHRvICIKLSAgICAg
ICAgICAgICAgICAgICItLWxvZyAlcykiICUgKExPR19WQUxVRVMsIExPR19ERUZBVUxUX1ZBTFVF
KSkpLAotICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rp
b249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVk
ZSBkZWJ1Zy1sZXZlbCBsb2dnaW5nIiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCIt
LXNvdXJjZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgaGVscD0ic2hvdyBl
eHBlY3RlZCByZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoIHRlc3QgIiArCi0gICAgICAgICAgICAg
ICAgICIoaW1wbGllcyAtLXZlcmJvc2UpIiksCi0gICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVz
dHMgaGFzIGEgLS1zbG93ZXN0IG9wdGlvbiB3aGljaCBqdXN0IHByaW50cwotICAgICAgICAjIHRo
ZSBzbG93ZXN0IDEwLgotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1udW0tc2xvdy10
ZXN0cy10by1sb2ciLCBkZWZhdWx0PTUwLAotICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIHNs
b3cgdGVzdHMgd2hvc2UgdGltaW5ncyB0byBwcmludC4iKSwKLSAgICBdCisgICAgbG9nZ2luZ19v
cHRpb25zID0gb3V0cHV0LmxvZ2dpbmdfb3B0aW9ucygpCiAKICAgICAjIEZJWE1FOiBUaGVzZSBv
cHRpb25zIHNob3VsZCBtb3ZlIG9udG8gdGhlIENocm9taXVtUG9ydC4KICAgICBjaHJvbWl1bV9v
cHRpb25zID0gWwpAQCAtMTg4OSw4ICsxNjA1LDE4IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9u
ZSk6CiAgICAgICAgICAgICAgICAgICAgbWlzY19vcHRpb25zICsgcmVzdWx0c19qc29uX29wdGlv
bnMgKwogICAgICAgICAgICAgICAgICAgIG9sZF9ydW5fd2Via2l0X3Rlc3RzX2NvbXBhdCkKICAg
ICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlv
bl9saXN0KQotICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKIAotaWYg
J19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNl
ci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgaWYgb3B0aW9ucy5zb3VyY2VzOgorICAgICAgICBvcHRp
b25zLnZlcmJvc2UgPSBUcnVlCisKKyAgICByZXR1cm4gb3B0aW9ucywgYXJncworCisKK2RlZiBt
YWluKCk6CiAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQotICAgIHN5cy5leGl0KG1h
aW4ob3B0aW9ucywgYXJncykpCisgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRm
b3JtLCBvcHRpb25zKQorICAgIHJldHVybiBydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MpCisK
K2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggOWZlMGU3NC4uMTc3ZDA0
MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0zMywx
MiArMzMsMTcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1w
b3J0IHdlYmtpdHB5LmxheW91dF90ZXN0cy5ydW5fd2Via2l0X3Rlc3RzIGFzIHJ1bl93ZWJraXRf
dGVzdHMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Citmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cwogCiAKLWRlZiBwYXNzaW5n
X3J1bihhcmdzKToKK2RlZiBwYXNzaW5nX3J1bihhcmdzLCBwb3J0X29iaj1Ob25lLCBsb2dnaW5n
X2luY2x1ZGVkPUZhbHNlKToKKyAgICBpZiBub3QgbG9nZ2luZ19pbmNsdWRlZDoKKyAgICAgICAg
YXJncy5leHRlbmQoWyctLXByaW50JywgJ25vdGhpbmcnXSkKICAgICBvcHRpb25zLCBhcmdzID0g
cnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCi0gICAgcmVzID0gcnVuX3dlYmtpdF90
ZXN0cy5tYWluKG9wdGlvbnMsIGFyZ3MsIEZhbHNlKQorICAgIGlmIHBvcnRfb2JqIGlzIE5vbmU6
CisgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykK
KyAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncykK
ICAgICByZXR1cm4gcmVzID09IDAKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54196</attachid>
            <date>2010-04-23 15:21:21 -0700</date>
            <delta_ts>2010-04-26 16:09:28 -0700</delta_ts>
            <desc>revised patch w/ Ojan&apos;s feedback</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>99551</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxN2QwZjgzLi44NDc3OGIwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDQt
MjMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyByZW5hbWVzIC0tbG9nIHRvIC0tcHJpbnQg
KHRvIGJlIHNsaWdodGx5IG1vcmUKKyAgICAgICAgZGVzY3JpcHRpdmUpLiAtLWxvZyBpcyByZXRh
aW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisgICAgICAgIEkndmUgYWxzbyBhZGRl
ZCBiZXR0ZXIgaGVscCBtZXNzYWdlcyBmb3IgcHJpbnRpbmcuCisKKyAgICAgICAgVGhlIG5ldyBj
b2RlIGhhcyB1bml0IHRlc3RzIQorCisgICAgICAgIFRoZXJlIGlzIHN0aWxsIG1vcmUgY29kZSB0
byBiZSBtb3ZlZCwgYnV0IHRoaXMgcGF0Y2ggaXMgYmlnIGVub3VnaCBhcworICAgICAgICBpdCBp
cy4gTmFtZWx5LCBzdGlsbCB0byBtb3ZlIGFyZSB0aGUgcHJpbnRpbmcgb2YgdGhlIGFjdHVhbCBy
ZXN1bHRzCisgICAgICAgIGFuZCB0aGUgdGltaW5nIHN0YXRpc3RpY3MsIHdoaWNoIHNob3VsZCBt
b3ZlIGFub3RoZXIgMzAwLTQwMCBsaW5lcworICAgICAgICBvdXQgb2YgdGhlIGZpbGUuCisKKyAg
ICAgICAgTm90YWJsZSBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMucHkgYmV5b25kIGNvZGUg
c2ltcGx5IG1vdmluZzoKKyAgICAgICAgKiBNZXRlcmVkU3RyZWFtIGlzIG5vdyBoaWRkZW4gdW5k
ZXIgdGhlIG5ldyBwcmludGluZy5QcmludGVyIGNsYXNzLgorICAgICAgICAgIEFsbCB0aGUgcmVm
ZXJlbmNlcyB0byBzZWxmLl9tZXRlciBub3cgcG9pbnQgdG8gc2VsZi5fcHJpbnRlci4KKyAgICAg
ICAgKiBBbGwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gcHJpbnRpbmcuY29uZmln
dXJlX2xvZ2dpbmcoKQorICAgICAgICAqIEluc3RlYWQgb2YgdXNpbmcgd3JpdGUoKSBsYW1iZGFz
IHRvIGNvbnRyb2wgd2hhdCBpcyBhbmQgaXNuJ3QKKyAgICAgICAgICBwcmludGVkLCB3ZSB1c2Ug
c2VwYXJhdGUgbWV0aG9kcyBvbiB0aGUgcHJpbnRlciBvYmplY3QuIFRoaXMgd2lsbAorICAgICAg
ICAgIG1ha2UgaXQgZWFzaWVyIHRvIGdyZXAgd2hpY2ggcHJpbnQgc3RhdGVtZW50cyBhcmUgcHJp
bnRlZAorICAgICAgICAgIHVuZGVyIHByb3RlY3Rpb24gb2YgZWFjaCBmbGFnLgorICAgICAgICAq
IFRoZSBwcmludF9yZXN1bHRzIGZsYWcgSSBhZGRlZCBhIGZldyByZXZzIGJhY2sgdG8gc3VwcHJl
c3MgcHJpbnRpbmcKKyAgICAgICAgICBpbiB0aGUgdW5pdCB0ZXN0cyBoYXMgYmVlbiByZXBsYWNl
ZCB3aXRoIC0tcHJpbnQgbm90aGluZy4KKyAgICAgICAgKiBUaGUgUmVzdWx0U3VtbWFyeSBjbGFz
cyBub3cgc3RvcmVzIHRoZSBlbnRpcmUgVGVzdFJlc3VsdCBmb3IgZWFjaAorICAgICAgICAgIHRl
c3QsIG5vdCBqdXN0IHRoZSBhY3R1YWwgcmVzdWx0IHR5cGUuCisgICAgICAgICogc3VtbWFyaXpl
X3VuZXhwZWN0ZWRfcmVzdWx0cygpIGdvdCBtb3ZlZCBmcm9tIGEgbWV0aG9kIG9uIFRlc3RSdW5u
ZXIKKyAgICAgICAgICB0byBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIG1vdmUg
aW50byBhIHNlcGFyYXRlIGZpbGUKKyAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBSZXN1bHRTdW1t
YXJ5IGNsYXNzIGFuZCB0aGUgVGVzdFJlc3VsdCBjbGFzcworICAgICAgICAqIFRoZSAtLXRyYWNl
IG9wdGlvbiBhZGRlZCByZWNlbnRseSBoYXMgYmVlbiByZXBsYWNlZCBieQorICAgICAgICAgICct
LXByaW50IHRyYWNlLWV2ZXJ5dGhpbmcnIGFuZCAnLS1wcmludCB0cmFjZS11bmV4cGVjdGVkJwor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODAxOAor
CisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0czoKKyAgICAgICAgICAtIHVw
ZGF0ZSB0byBuZXcgZW50cnkgcG9pbnRzIGluIHJ1bl93ZWJraXRfdGVzdHMucHkKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0
cmVhbS5weToKKyAgICAgICAgICAtIGZpeCBhIG1pbm9yIG5pdCB3aGVyZSB3ZSB3ZXJlIHByaW50
aW5nIGFuIGVtcHR5IHN0cmluZyB3aGVyZQorICAgICAgICAgICAgd2UgZGlkbid0IG5lZWQgdG8K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
cmludGluZy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6IEFkZGVkCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAgIC0g
aW1wbGVtZW50IHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoKSBhbmQgZXhwZWN0ZWRfZmlsZW5hbWUo
KSBzbworICAgICAgICAgICAgd2UgY2FuIHRlc3QgcHJpbnRpbmcgdW5leHBlY3RlZCByZXN1bHRz
IGluIGEgcGxhdGZvcm0tbmV1dHJhbAorICAgICAgICAgICAgd2F5CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9ydW5fd2Via2l0X3Rlc3QucHk6CisgICAgICAgICAgLSBtb3ZlIGEgbG90IG9m
IHRoZSBwcmludGluZyBjb2RlIGludG8gcHJpbnRpbmcucHkKKyAgICAgICAgICAtIGNoYW5nZSB0
aGUgc2lnbmF0dXJlcyBvZiB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIGZvciBlYXNpZXIKKyAg
ICAgICAgICAgIHVuaXQgdGVzdGluZworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgICAtIHVwZGF0ZSB3LyBjaGFuZ2VzIHRv
IHJ1bl93ZWJraXRfdGVzdHMgZW50cnkgcG9pbnRzLgorCiAyMDEwLTA0LTE5ICBEaXJrIFByYW5r
ZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3Rz
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0cwppbmRleCAyZWJlMWRh
Li4wNzI4ZWUwIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0
LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMKQEAg
LTMzLDUgKzMzLDQgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHdlYmtpdHB5LmxheW91dF90ZXN0cy5y
dW5fd2Via2l0X3Rlc3RzIGFzIHJ1bl93ZWJraXRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdz
KCkKLSAgICBzeXMuZXhpdChydW5fd2Via2l0X3Rlc3RzLm1haW4ob3B0aW9ucywgYXJncykpCisg
ICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVk
X3N0cmVhbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CmluZGV4IDkzMGI5ZTQuLmEzM2ZjM2EgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CkBAIC0x
MTEsNyArMTExLDggQEAgY2xhc3MgTWV0ZXJlZFN0cmVhbToKIAogICAgICAgICAjIFByaW50IHRo
ZSBuZWNlc3NhcnkgbnVtYmVyIG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHByZXZpb3VzCiAg
ICAgICAgICMgbWVzc2FnZS4KLSAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4o
c2VsZi5fbGFzdF91cGRhdGUpKQorICAgICAgICBpZiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpOgor
ICAgICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4oc2VsZi5fbGFzdF91cGRh
dGUpKQogICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc3RyKQogICAgICAgICBudW1fcmVtYWlu
aW5nID0gbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSAtIGxlbihzdHIpCiAgICAgICAgIGlmIG51bV9y
ZW1haW5pbmcgPiAwOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE1NWFlCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcHJpbnRpbmcucHkKQEAgLTAsMCArMSw0NDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIlBhY2thZ2UgdGhhdCBoYW5kbGVzIG5vbi1kZWJ1Zywgbm9u
LWZpbGUgb3V0cHV0IGZvciBydW4td2Via2l0LXRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKKworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucHJp
bnRlciIpCisKK1Rlc3RFeHBlY3RhdGlvbnNGaWxlID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4
cGVjdGF0aW9uc0ZpbGUKKworTlVNX1NMT1dfVEVTVFNfVE9fTE9HID0gMTAKKworUFJJTlRfREVG
QVVMVCA9ICgibWlzYyxvbmUtbGluZS1wcm9ncmVzcyxvbmUtbGluZS1zdW1tYXJ5LHVuZXhwZWN0
ZWQsIgorICAgICAgICAgICAgICAgICAidW5leHBlY3RlZC1yZXN1bHRzLHVwZGF0ZXMiKQorSEVM
UF9QUklOVElORyA9ICIiIgorT3V0cHV0IGZvciBydW4td2Via2l0LXRlc3RzIGlzIGNvbnRyb2xs
ZWQgYnkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgordmFsdWVzIHBhc3NlZCB0byAtLXByaW50
LiAgVmFsdWVzIGVpdGhlciBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgb3V0cHV0LCBvcgordGhlIG91
dHB1dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW4sIGR1cmluZyB0aGUgcnVuLCBvciBhdCB0
aGUgZW5kOgorCitPdmVyYWxsIG9wdGlvbnM6CisgICAgbm90aGluZyAgICAgICAgICAgICBkb24n
dCBwcmludCBhbnl0aGluZworICAgIGV2ZXJ5dGhpbmcgICAgICAgICAgcHJpbnQgZXZlcnl0aGlu
ZyAoZXhjZXB0IHRoZSB0cmFjZS0qIG9wdGlvbnMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsZWQtcHJvZ3Jlc3Mgb3B0aW9uKQorICAgIG1pc2MgICAgICAgICAgICAgICAg
cHJpbnQgbWlzY2VsbGFuZW91cyB0aGluZ3MgbGlrZSBibGFuayBsaW5lcworCitBdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZSBydW46CisgICAgY29uZmlnICAgICAgICAgICAgICBwcmludCB0aGUgdGVz
dCBydW4gY29uZmlndXJhdGlvbgorICAgIGV4cGVjdGVkICAgICAgICAgICAgcHJpbnQgYSBzdW1t
YXJ5IG9mIHdoYXQgaXMgZXhwZWN0ZWQgdG8gaGFwcGVuCisgICAgICAgICAgICAgICAgICAgICAg
ICAoIyBwYXNzZXMsICMgZmFpbHVyZXMsIGV0Yy4pCisKK0R1cmluZyB0aGUgcnVuOgorICAgIGRl
dGFpbGVkLXByb2dyZXNzICAgcHJpbnQgb25lIGRvdCBwZXIgdGVzdCBjb21wbGV0ZWQKKyAgICBv
bmUtbGluZS1wcm9ncmVzcyAgIHByaW50IGEgb25lLWxpbmUgcHJvZ3Jlc3MgYmFyCisgICAgdW5l
eHBlY3RlZCAgICAgICAgICBwcmludCBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIHRoZXkgb2Nj
dXIKKyAgICB1cGRhdGVzICAgICAgICAgICAgIHByaW50IHVwZGF0ZXMgb24gd2hpY2ggc3RhZ2Ug
aXMgZXhlY3V0aW5nCisgICAgdHJhY2UtZXZlcnl0aGluZyAgICBwcmludCBkZXRhaWxlZCBpbmZv
IG9uIGV2ZXJ5IHRlc3QncyByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICAoYmFzZWxp
bmVzLCBleHBlY3RhdGlvbiwgdGltZSBpdCB0b29rIHRvIHJ1bikKKyAgICB0cmFjZS11bmV4cGVj
dGVkICAgIGxpa2UgdHJhY2UtZXZlcnl0aGluZywgYnV0IG9ubHkgZm9yIHRlc3RzIHdpdGgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQgcmVzdWx0cworCitBdCB0aGUgZW5kIG9m
IHRoZSBydW46CisgICAgYWN0dWFsICAgICAgICAgICAgICBwcmludCBhIHN1bW1hcnkgb2YgdGhl
IGFjdHVhbCByZXN1bHRzCisgICAgc2xvd2VzdCAgICAgICAgICAgICBwcmludCAlZCBzbG93ZXN0
IHRlc3RzIGFuZCB0aGUgdGltZSB0aGV5IHRvb2sgdG8gcnVuCisgICAgdGltaW5nICAgICAgICAg
ICAgICBwcmludCB0aW1pbmcgc3RhdGlzdGljcworICAgIHVuZXhwZWN0ZWQtcmVzdWx0cyAgcHJp
bnQgYSBsaXN0IG9mIHRoZSB0ZXN0cyB3aXRoIHVuZXhwZWN0ZWQgcmVzdWx0cworICAgIG9uZS1s
aW5lLXN1bW1hcnkgICAgcHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRoZSBydW4KKworTm90
ZXM6CisgICAgLSAnZGV0YWlsZWQtcHJvZ3Jlc3MnIGNhbiBvbmx5IGJlIHVzZWQgaWYgcnVubmlu
ZyBpbiBhIHNpbmdsZSB0aHJlYWQKKyAgICAgICh1c2luZyAtLWNoaWxkLXByb2Nlc3Nlcz0xKSBv
ciBhIHNpbmdsZSBxdWV1ZSBvZiB0ZXN0cyAodXNpbmcKKyAgICAgICAtLWV4cGVyaW1lbnRhbC1m
dWxseS1wYXJhbGxlbCkKKyAgICAtIGlmICd0cmFjZS11bmV4cGVjdGVkJyBpcyBzcGVjaWZpZWQs
IGl0IHdpbGwgb3ZlcnJpZGUKKyAgICAgICAtLWxvZyAndW5leHBlY3RlZAorICAgIC0gaWYgJ3Ry
YWNlLWV2ZXJ5dGhpbmcnIGlzIHNwZWNpZmllZCwgaXQgd2lsbCBvdmVycmlkZSB0aGUgJyotcHJv
Z3Jlc3MnCisgICAgICBvcHRpb25zCisKK1RoZSBkZWZhdWx0IGlzIC0tcHJpbnQgJyVzJy4KKyIi
IiAlIChOVU1fU0xPV19URVNUU19UT19MT0csIFBSSU5UX0RFRkFVTFQpCisKKworZGVmIHByaW50
X29wdGlvbnMoKToKKyAgICByZXR1cm4gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigi
LS1wcmludCIsIGRlc3Q9ImxvZyIsCisgICAgICAgICAgICBkZWZhdWx0PVBSSU5UX0RFRkFVTFQs
CisgICAgICAgICAgICBoZWxwPSgiY29udHJvbHMgcHJpbnQgb3V0cHV0IG9mIHRlc3QgcnVuLiAi
CisgICAgICAgICAgICAgICAgICAiVXNlIC0taGVscC1wcmludGluZyBmb3IgbW9yZS4iKSksCisK
KyAgICAgICAgIyBOT1RFOiB3ZSBrZWVwIHRoaXMgYXJvdW5kIGJlY2F1c2UgInByaW50IiBpcyBh
IHJlc2VydmVkIHdvcmQgYW5kCisgICAgICAgICMgaGVuY2UgdXNpbmcgIm9wdGlvbnMucHJpbnQi
IGRvZXNuJ3Qgd29yay4KKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbG9nIiwgZGVz
dD0ibG9nIiwKKyAgICAgICAgICAgIGhlbHA9IihERVBSRUNBVEVELiBzYW1lIGFzIC0tcHJpbnQp
IiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWhlbHAtcHJpbnRpbmciLCBhY3Rp
b249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgaGVscD0ic2hvdyBkZXRhaWxlZCBoZWxwIG9u
IGNvbnRyb2xsaW5nIHByaW50IG91dHB1dCIpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgIGRl
ZmF1bHQ9RmFsc2UsIGhlbHA9ImluY2x1ZGUgZGVidWctbGV2ZWwgbG9nZ2luZyIpLAorICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1zb3VyY2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwK
KyAgICAgICAgICAgIGhlbHA9KCJzaG93IGV4cGVjdGVkIHJlc3VsdCBmaWxlIHBhdGggZm9yIGVh
Y2ggdGVzdCAiCisgICAgICAgICAgICAgICAgICIoaW1wbGllcyAtLXZlcmJvc2UpIikpLAorICAg
IF0KKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgbWV0ZXIpOgorICAgICIiIkNv
bmZpZ3VyZXMgdGhlIGxvZ2dpbmcgc3lzdGVtLiIiIgorICAgIGxvZ19mbXQgPSAnJShtZXNzYWdl
KXMnCisgICAgbG9nX2RhdGVmbXQgPSAnJXklbSVkICVIOiVNOiVTJworICAgIGxvZ19sZXZlbCA9
IGxvZ2dpbmcuSU5GTworICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgbG9nX2ZtdCA9
ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKS00ZCAlKGxldmVsbmFtZSlzICcK
KyAgICAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMnKQorICAgICAgICBsb2dfbGV2ZWwgPSBs
b2dnaW5nLkRFQlVHCisKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZlbCwg
Zm9ybWF0PWxvZ19mbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PWxvZ19kYXRl
Zm10LCBzdHJlYW09bWV0ZXIpCisKKworY2xhc3MgUHJpbnRlcihvYmplY3QpOgorICAgICIiIkNs
YXNzIGhhbmRsaW5nIGFsbCBub24tZGVidWctbG9nZ2luZyBwcmludGluZyBkb25lIGJ5IHJ1bi13
ZWJraXQtdGVzdHMuCisKKyAgICBQcmludGluZyBmcm9tIHJ1bi13ZWJraXQtdGVzdHMgZmFsbHMg
aW50byB0d28gYnVja2V0czogZ2VuZXJhbCBvcgorICAgIHJlZ3VsYXIgb3V0cHV0IHRoYXQgaXMg
cmVhZCBvbmx5IGJ5IGh1bWFucyBhbmQgY2FuIGJlIGNoYW5nZWQgYXQgYW55CisgICAgdGltZSwg
YW5kIG91dHB1dCB0aGF0IGlzIHBhcnNlZCBieSBidWlsZGJvdHMgKGFuZCBodW1hbnMpIGFuZCBo
ZW5jZQorICAgIG11c3QgYmUgY2hhbmdlZCBtb3JlIGNhcmVmdWxseSBhbmQgaW4gY29vcmRpbmF0
aW9uIHdpdGggdGhlIGJ1aWxkYm90CisgICAgcGFyc2luZyBjb2RlIChpbiBjaHJvbWl1bS5vcmcn
cyBidWlsZGJvdC9tYXN0ZXIuY2hyb21pdW0vc2NyaXB0cy9tYXN0ZXIvCisgICAgbG9nX3BhcnNl
ci93ZWJraXRfdGVzdF9jb21tYW5kLnB5IHNjcmlwdCkuCisKKyAgICBCeSBkZWZhdWx0IHRoZSBi
dWlsZGJvdC1wYXJzZWQgY29kZSBnZXRzIGxvZ2dlZCB0byBzdGRvdXQsIGFuZCByZWd1bGFyCisg
ICAgb3V0cHV0IGdldHMgbG9nZ2VkIHRvIHN0ZGVyci4iIiIKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQsIGJ1aWxkYm90X291dHB1dCwKKyAgICAg
ICAgICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzLCBpc19mdWxseV9wYXJhbGxlbCk6CisgICAgICAg
ICIiIgorICAgICAgICBBcmdzCisgICAgICAgICAgcG9ydCAgICAgICAgICAgICAgIGludGVyZmFj
ZSB0byBwb3J0LXNwZWNpZmljIHJvdXRpbmVzCisgICAgICAgICAgb3B0aW9ucyAgICAgICAgICAg
IE9wdGlvblBhcnNlciBvYmplY3Qgdy8gY29tbWFuZCBsaW5lIHNldHRpbmdzCisgICAgICAgICAg
cmVndWxhcl9vdXRwdXQgICAgIHN0cmVhbSB0byB3aGljaCBvdXRwdXQgaW50ZW5kZWQgb25seSBm
b3IgaHVtYW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB3cml0dGVu
CisgICAgICAgICAgYnVpbGRib3Rfb3V0cHV0ICAgIHN0cmVhbSB0byB3aGljaCBvdXRwdXQgaW50
ZW5kZWQgdG8gYmUgcmVhZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVp
bGRib3RzIChhbmQgaHVtYW5zKSBzaG91bGQgYmUgd3JpdHRlbgorICAgICAgICAgIGNoaWxkX3By
b2Nlc3NlcyAgICBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyBydW5uaW5nICh1c3VhbGx5Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWQgYnkgLS1jaGlsZC1wcm9jZXNz
ZXMpCisgICAgICAgICAgaXNfZnVsbHlfcGFyYWxsZWwgIGFyZSB0aGUgdGVzdHMgcnVubmluZyBp
biBhIHNpbmdsZSBxdWV1ZSwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc2hh
cmRzICh1c3VhbGx5IGNvbnRyb2xsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwpCisKKyAgICAgICAgTm90ZSB0aGF0IHRoZSBs
YXN0IHR3byBhcmdzIGFyZSBzZXBhcmF0ZSByYXRoZXIgdGhhbiBidW5kbGVkIGludG8KKyAgICAg
ICAgdGhlIG9wdGlvbnMgc3RydWN0dXJlIHNvIHRoYXQgdGhpcyBvYmplY3QgZG9lcyBub3QgYXNz
dW1lIGFueSBmbGFncworICAgICAgICBzZXQgaW4gb3B0aW9ucyB0aGF0IHdlcmVuJ3QgcmV0dXJu
ZWQgZnJvbSBsb2dnaW5nX29wdGlvbnMoKSwgYWJvdmUuCisgICAgICAgIFRoZSB0d28gYXJlIHVz
ZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBzZW5zaWJseSB1c2UKKyAgICAg
ICAgdGhlICdkZXRhaWxlZC1wcm9ncmVzcycgb3B0aW9uLCBvciBjYW4gb25seSB1c2UgJ29uZS1s
aW5lLXByb2dyZXNzJy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVh
bSA9IGJ1aWxkYm90X291dHB1dAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9zdHJlYW0gPSByZWd1bGFyX291
dHB1dAorCisgICAgICAgICMgVGhlc2UgYXJlIHVzZWQgZm9yIC0tbG9nIGRldGFpbGVkLXByb2dy
ZXNzIHRvIHRyYWNrIHN0YXR1cyBieQorICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAgICAgc2Vs
Zi5fY3VycmVudF9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
ID0gIiIKKyAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKKworICAgICAgICBz
ZWxmLl9tZXRlciA9IG1ldGVyZWRfc3RyZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3Nl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn
dWxhcl9vdXRwdXQpCisgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYuX29wdGlvbnMsIHNl
bGYuX21ldGVyKQorCisgICAgICAgIGlmIChjaGlsZF9wcm9jZXNzZXMgIT0gMSBhbmQgbm90IGlz
X2Z1bGx5X3BhcmFsbGVsIGFuZAorICAgICAgICAgICAgJ2RldGFpbGVkLXByb2dyZXNzJyBpbiBv
cHRpb25zLmxvZyk6CisgICAgICAgICAgICBfbG9nLndhcm4oIkNhbiBvbmx5IHByaW50ICdkZXRh
aWxlZC1wcm9ncmVzcycgaWYgcnVubmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgIndpdGgg
LS1jaGlsZC1wcm9jZXNzZXM9MSBvciAiCisgICAgICAgICAgICAgICAgICAgICAgIndpdGggLS1l
eHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwuICIKKyAgICAgICAgICAgICAgICAgICAgICAiVXNp
bmcgJ29uZS1saW5lLXByb2dyZXNzJyBpbnN0ZWFkLiIpCisgICAgICAgICAgICBvcHRpb25zLmxv
ZyA9IG9wdGlvbnMubG9nLnJlcGxhY2UoJ2RldGFpbGVkLXByb2dyZXNzJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lLWxpbmUtcHJvZ3Jlc3MnKQor
ICAgICAgICBzZWxmLl9zd2l0Y2hlcyA9IG9wdGlvbnMubG9nLnNwbGl0KCcsJykKKworICAgIGRl
ZiBfZXhpdF9lYXJseShzZWxmLCBtZXRob2QpOgorICAgICAgICBpZiAnbm90aGluZycgaW4gc2Vs
Zi5fc3dpdGNoZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiAnZXZlcnl0
aGluZycgaW4gc2VsZi5fc3dpdGNoZXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIG1ldGhvZCBub3QgaW4gc2VsZi5fc3dpdGNoZXMKKworICAgIGRlZiBoZWxwX3By
aW50aW5nKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZShIRUxQX1BSSU5USU5HKQorCisgICAg
ZGVmIHByaW50X2FjdHVhbChzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLl9leGl0X2Vhcmx5
KCdhY3R1YWwnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIHByaW50X2NvbmZpZyhzZWxmLCBt
c2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2NvbmZpZycpCisKKyAgICBkZWYgcHJpbnRf
ZXhwZWN0ZWQoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53cml0ZShtc2csICdleHBlY3RlZCcp
CisKKyAgICBkZWYgcHJpbnRfdGltaW5nKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYud3JpdGUo
bXNnLCAndGltaW5nJykKKworICAgIGRlZiBwcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYsIHRv
dGFsLCBleHBlY3RlZCk6CisgICAgICAgICIiIlByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0
aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdG90YWw6
IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4KKyAgICAgICAgICBleHBlY3RlZDogbnVtYmVyIG9m
IGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFy
bHkoJ29uZS1saW5lLXN1bW1hcnknKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHVu
ZXhwZWN0ZWQgPSB0b3RhbCAtIGV4cGVjdGVkCisgICAgICAgIGlmIHVuZXhwZWN0ZWQgPT0gMDoK
KyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJBbGwgJWQgdGVzdHMgcmFuIGFzIGV4cGVj
dGVkLlxuIiAlIGV4cGVjdGVkKQorICAgICAgICBlbGlmIGV4cGVjdGVkID09IDE6CisgICAgICAg
ICAgICBzZWxmLl9tZXRlci53cml0ZSgiXG4xIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRu
J3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbiVkIHRlc3RzIHJh
biBhcyBleHBlY3RlZCwgJWQgZGlkbid0OlxuXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChleHBlY3RlZCwgdW5leHBlY3RlZCkpCisKKyAgICBkZWYgcHJpbnRfdGVzdF9yZXN1
bHQoc2VsZiwgcmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cik6CisgICAgICAgICIi
IlByaW50IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSAtLXByaW50LiIi
IgorICAgICAgICBpZiAoJ3RyYWNlLWV2ZXJ5dGhpbmcnIGluIHNlbGYuX3N3aXRjaGVzIG9yCisg
ICAgICAgICAgICAndHJhY2UtdW5leHBlY3RlZCcgaW4gc2VsZi5fc3dpdGNoZXMgYW5kIG5vdCBl
eHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCwgZXhw
X3N0ciwgZ290X3N0cikKKyAgICAgICAgZWxpZiAobm90IGV4cGVjdGVkIGFuZAorICAgICAgICAg
ICAgICAoJ3VuZXhwZWN0ZWQnIGluIHNlbGYuX3N3aXRjaGVzIG9yCisgICAgICAgICAgICAgICAn
ZXZlcnl0aGluZycgaW4gc2VsZi5fc3dpdGNoZXMpIGFuZAorICAgICAgICAgICAgICBub3QgJ2Rl
dGFpbGVkLXByb2dyZXNzJyBpbiBzZWxmLl9zd2l0Y2hlcyk6CisgICAgICAgICAgICBzZWxmLl9w
cmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHJlc3VsdCkKKworICAgIGRlZiBfcHJpbnRfdGVz
dF90cmFjZShzZWxmLCByZXN1bHQsIGV4cF9zdHIsIGdvdF9zdHIpOgorICAgICAgICAiIiJQcmlu
dCBkZXRhaWxlZCByZXN1bHRzIG9mIGEgdGVzdCAodHJpZ2dlcmVkIGJ5IC0tcHJpbnQgdHJhY2Ut
KikuCisgICAgICAgIEZvciBlYWNoIHRlc3QsIHByaW50OgorICAgICAgICAgICAtIGxvY2F0aW9u
IG9mIHRoZSBleHBlY3RlZCBiYXNlbGluZXMKKyAgICAgICAgICAgLSBleHBlY3RlZCByZXN1bHRz
CisgICAgICAgICAgIC0gYWN0dWFsIHJlc3VsdAorICAgICAgICAgICAtIHRpbWluZyBpbmZvCisg
ICAgICAgICIiIgorICAgICAgICBmaWxlbmFtZSA9IHJlc3VsdC5maWxlbmFtZQorICAgICAgICB0
ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCisg
ICAgICAgIHNlbGYuX3dyaXRlKCd0cmFjZTogJXNcbicgJSB0ZXN0X25hbWUpCisgICAgICAgIHNl
bGYuX3dyaXRlKCcgIHR4dDogJXNcbicgJQorICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0
LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcpKSkKKyAgICAgICAgcG5nX2ZpbGUg
PSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCisgICAgICAg
IGlmIG9zLnBhdGguZXhpc3RzKHBuZ19maWxlKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKCcg
IHBuZzogJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX3dyaXRlKCcgIHBuZzogPG5vbmU+XG4nKQorICAgICAgICBzZWxmLl93cml0ZSgnICBleHA6
ICVzXG4nICUgZXhwX3N0cikKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgZ290OiAlc1xuJyAlIGdv
dF9zdHIpCisgICAgICAgIHNlbGYuX3dyaXRlKCcgdG9vazogJS0uM2ZcbicgJSByZXN1bHQudGVz
dF9ydW5fdGltZSkKKyAgICAgICAgc2VsZi5fd3JpdGUoJ1xuJykKKworICAgIGRlZiBfcHJpbnRf
dW5leHBlY3RlZF90ZXN0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJQcmludHMg
b25lIHVuZXhwZWN0ZWQgdGVzdCByZXN1bHQgbGluZS4iIiIKKyAgICAgICAgZGVzYyA9IFRlc3RF
eHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHQudHlwZV1bMF0K
KyAgICAgICAgc2VsZi53cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVkICVzIiAlCisgICAgICAgICAg
ICAgICAgICAgKHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShyZXN1bHQuZmlsZW5h
bWUpLAorICAgICAgICAgICAgICAgICAgICBkZXNjKSwgInVuZXhwZWN0ZWQiKQorCisgICAgZGVm
IHByaW50X3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeWluZywgdGVzdF9saXN0
KToKKyAgICAgICAgIiIiUHJpbnQgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgdGVzdHMgYXMgZGV0ZXJt
aW5lZCBieSAtLXByaW50LiIiIgorICAgICAgICBpZiAoc2VsZi5fZXhpdF9lYXJseSgnZGV0YWls
ZWQtcHJvZ3Jlc3MnKSBhbmQKKyAgICAgICAgICAgIHNlbGYuX2V4aXRfZWFybHkoJ29uZS1saW5l
LXByb2dyZXNzJykpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgJ2RldGFpbGVk
LXByb2dyZXNzJyBpbiBzZWxmLl9zd2l0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X2Rl
dGFpbGVkX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2xpc3QpCisgICAgICAgIGVsaWYg
J29uZS1saW5lLXByb2dyZXNzJyBpbiBzZWxmLl9zd2l0Y2hlczoKKyAgICAgICAgICAgIHNlbGYu
X3ByaW50X29uZV9saW5lX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCByZXRyeWluZykKKworICAg
ICAgICBpZiByZXN1bHRfc3VtbWFyeS5yZW1haW5pbmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYu
X21ldGVyLnVwZGF0ZSgnJykKKworICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2Vs
ZiwgcmVzdWx0X3N1bW1hcnksIHJldHJ5aW5nKToKKyAgICAgICAgIiIiRGlzcGxheXMgdGhlIHBy
b2dyZXNzIHRocm91Z2ggdGhlIHRlc3QgcnVuLiIiIgorICAgICAgICBwZXJjZW50X2NvbXBsZXRl
ID0gMTAwICogKHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkICsKKyAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5LnVuZXhwZWN0ZWQpIC8gcmVzdWx0X3N1bW1hcnkudG90YWwKKyAgICAgICAgYWN0aW9u
ID0gIlRlc3RpbmciCisgICAgICAgIGlmIHJldHJ5aW5nOgorICAgICAgICAgICAgYWN0aW9uID0g
IlJldHJ5aW5nIgorICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMgKCVkJSUpOiAlZCBy
YW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndCwiCisgICAgICAgICAgICAiICVkIGxlZnQiICUgKGFj
dGlvbiwgcGVyY2VudF9jb21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCisgICAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5n
KSkKKworICAgIGRlZiBfcHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1h
cnksIHRlc3RfbGlzdCk6CisgICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0
cHV0IHdoZXJlIHdlIHByaW50IHRoZSBkaXJlY3RvcnkgbmFtZQorICAgICAgICBhbmQgb25lIGRv
dCBmb3IgZWFjaCBjb21wbGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKKyAgICAgICAg
Ii0tbG9nIGRldGFpbGVkLXByb2dyZXNzIi4iIiIKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF90
ZXN0X251bWJlciA9PSBsZW4odGVzdF9saXN0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIG5leHRfdGVzdCA9IHRlc3RfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAg
ICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgIHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQorICAgICAgICBpZiBzZWxmLl9jdXJy
ZW50X3Byb2dyZXNzX3N0ciA9PSAiIjoKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jl
c3Nfc3RyID0gIiVzOiAiICUgKG5leHRfZGlyKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9k
aXIgPSBuZXh0X2RpcgorCisgICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFy
eS5yZXN1bHRzOgorICAgICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6
CisgICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJl
bnRfcHJvZ3Jlc3Nfc3RyKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNz
X3N0ciA9ICIlczogLiIgJSAobmV4dF9kaXIpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVu
dF9kaXIgPSBuZXh0X2RpcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9jdXJyZW50X3Byb2dyZXNzX3N0ciArPSAiLiIKKworICAgICAgICAgICAgaWYgKG5leHRfdGVz
dCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCisgICAgICAgICAgICAg
ICAgJ3VuZXhwZWN0ZWQnIGluIHNlbGYuX3N3aXRjaGVzKToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9tZXRlci53cml0ZSgiJXNcbiIgJSBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikKKyAgICAg
ICAgICAgICAgICB0ZXN0X3Jlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbbmV4dF90ZXN0
XQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQodGVz
dF9yZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAi
JXM6ICIgJSBzZWxmLl9jdXJyZW50X2RpcgorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rl
c3RfbnVtYmVyICs9IDEKKyAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIg
PT0gbGVuKHRlc3RfbGlzdCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAg
bmV4dF90ZXN0ID0gdGVzdF9saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAgICAg
ICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKworICAgICAgICBpZiByZXN1
bHRfc3VtbWFyeS5yZW1haW5pbmc6CisgICAgICAgICAgICByZW1haW5fc3RyID0gIiAoJWQpIiAl
IChyZXN1bHRfc3VtbWFyeS5yZW1haW5pbmcpCisgICAgICAgICAgICBzZWxmLl9tZXRlci5wcm9n
cmVzcygiJXMlcyIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluX3N0cikpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMiICUgKHNlbGYuX2N1cnJlbnRf
cHJvZ3Jlc3Nfc3RyKSkKKworICAgIGRlZiBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwg
dW5leHBlY3RlZF9yZXN1bHRzKToKKyAgICAgICAgIiIiUHJpbnRzIGEgbGlzdCBvZiB0aGUgdW5l
eHBlY3RlZCByZXN1bHRzIHRvIHRoZSBidWlsZGJvdCBzdHJlYW0uIiIiCisgICAgICAgIGlmIHNl
bGYuX2V4aXRfZWFybHkoJ3VuZXhwZWN0ZWQtcmVzdWx0cycpOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgcGFzc2VzID0ge30KKyAgICAgICAgZmxha3kgPSB7fQorICAgICAgICByZWdy
ZXNzaW9ucyA9IHt9CisKKyAgICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9y
ZXN1bHRzWyd0ZXN0cyddLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0
c1snYWN0dWFsJ10uc3BsaXQoIiAiKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydl
eHBlY3RlZCddLnNwbGl0KCIgIikKKyAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToK
KyAgICAgICAgICAgICAgICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAg
ICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAg
ICAgICAgZWxpZiAnVElNRU9VVCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9h
ZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRv
IGZhaWwsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdCkKKyAgICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAg
ICAgICAgICMgV2UgZ3JvdXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQg
d2UgZ290LgorICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0
dWFsWzBdLCB0ZXN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfYWRkX3Rv
X2RpY3Rfb2ZfbGlzdHMocmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisg
ICAgICAgIGlmIGxlbihwYXNzZXMpIG9yIGxlbihmbGFreSkgb3IgbGVuKHJlZ3Jlc3Npb25zKToK
KyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAg
IGlmIGxlbihwYXNzZXMpOgorICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgi
JXM6ICglZClcbiIgJSAoa2V5LCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0ZXN0cy5z
b3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzXG4iICUgdGVzdCkKKyAgICAg
ICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAg
IHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihmbGFr
eSk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBF
Q1RBVElPTl9ERVNDUklQVElPTlMKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNG
aWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWls
ZGJvdF9zdHJlYW0ud3JpdGUoIlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAoJWQpXG4iCisgICAg
ICAgICAgICAgICAgICAgICUgKGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkK
KyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0
IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3Vs
dHNbJ3Rlc3RzJ11bdGVzdF0KKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0Wydh
Y3R1YWwnXS5zcGxpdCgiICIpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0
WydleHBlY3RlZCddLnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVz
dEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAg
ICAgICAgICBuZXdfZXhwZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4
cGVjdGVkKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRl
KCIgICVzID0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCAiICIuam9pbihu
ZXdfZXhwZWN0YXRpb25zX2xpc3QpKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0
ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBkZXNj
cmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMK
KyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9O
U1trZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3Jp
dGUoCisgICAgICAgICAgICAgICAgICAgICJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICgl
ZClcbiIgJSAoCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBs
ZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAgICAgICAg
ICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rf
c3RyZWFtLndyaXRlKCIgICVzID0gJXNcbiIgJSAodGVzdCwga2V5KSkKKyAgICAgICAgICAgICAg
ICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1
aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jl
c3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBz
ZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiVzXG4iICUgIi0iICogNzgpCisKKyAgICBkZWYg
cHJpbnRfdXBkYXRlKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYuX2V4aXRfZWFybHkoJ3Vw
ZGF0ZXMnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUo
bXNnKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIG1zZywgb3B0aW9uPSJtaXNjIik6CisgICAgICAg
IGlmIHNlbGYuX2V4aXRfZWFybHkob3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBzZWxmLl93cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIG1zZyk6
CisgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgiJXMiICUgbXNnKQorCisjCisjIFV0aWxpdHkg
cm91dGluZXMgdXNlZCBieSB0aGUgQ29udHJvbGxlciBjbGFzcworIworCisKK2RlZiBfYWRkX3Rv
X2RpY3Rfb2ZfbGlzdHMoZGljdCwga2V5LCB2YWx1ZSk6CisgICAgZGljdC5zZXRkZWZhdWx0KGtl
eSwgW10pLmFwcGVuZCh2YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cHJpbnRpbmdfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YzU1OGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5CkBAIC0wLDAg
KzEsNTE0IEBACisjIS91c3IvYmluL3B5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlVuaXQg
dGVzdHMgZm9yIHByaW50aW5nLnB5LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBvcHRwYXJzZQor
aW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgbG9nZ2luZworCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9u
cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rf
ZmFpbHVyZXMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0X3Rl
c3RzCisKKworY2xhc3MgQXJyYXlTdHJlYW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
Zik6CisgICAgICAgIHNlbGYuX2NvbnRlbnRzID0gW10KKworICAgIGRlZiB3cml0ZShzZWxmLCBt
c2cpOgorICAgICAgICBzZWxmLl9jb250ZW50cy5hcHBlbmQobXNnKQorCisgICAgZGVmIGdldChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRzCisKKyAgICBkZWYgcmVzZXQoc2Vs
Zik6CisgICAgICAgIHNlbGYuX2NvbnRlbnRzID0gW10KKworICAgIGRlZiBlbXB0eShzZWxmKToK
KyAgICAgICAgcmV0dXJuIChsZW4oc2VsZi5fY29udGVudHMpID09IDApCisKKyAgICBkZWYgZmx1
c2goc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuICc8QXJyYXlTdHJlYW06ICcgKyBzdHIoc2VsZi5fY29udGVudHMpICsgJz4nCisK
KworZGVmIGdldF9vcHRpb25zKGFyZ3MpOgorICAgIGxvID0gcHJpbnRpbmcucHJpbnRfb3B0aW9u
cygpCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlz
dD1sbykKKyAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKworZGVm
IGdldF9yZXN1bHQoZmlsZW5hbWUsIHJlc3VsdF90eXBlPXRlc3RfZXhwZWN0YXRpb25zLlBBU1Ms
IHJ1bl90aW1lPTApOgorICAgIGZhaWx1cmVzID0gW10KKyAgICBpZiByZXN1bHRfdHlwZSA9PSB0
ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOgorICAgICAgICBmYWlsdXJlcyA9IFt0ZXN0X2ZhaWx1
cmVzLkZhaWx1cmVUaW1lb3V0KCldCisgICAgZWxpZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4cGVj
dGF0aW9ucy5DUkFTSDoKKyAgICAgICAgZmFpbHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJl
Q3Jhc2goKV0KKyAgICByZXR1cm4gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFJlc3VsdChm
aWxlbmFtZSwgZmFpbHVyZXMsIHJ1bl90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzPTApCisK
KworZGVmIGdldF9yZXN1bHRfc3VtbWFyeShwb3J0X29iaiwgdGVzdF9maWxlcywgZXhwZWN0YXRp
b25zX3N0cik6CisgICAgZXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVj
dGF0aW9ucygKKyAgICAgICAgcG9ydF9vYmosIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19zdHIs
CisgICAgICAgIHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLCBpc19kZWJ1Z19tb2RlPUZh
bHNlLAorICAgICAgICBpc19saW50X21vZGU9RmFsc2UsIHRlc3RzX2FyZV9wcmVzZW50PUZhbHNl
KQorCisgICAgcnMgPSBydW5fd2Via2l0X3Rlc3RzLlJlc3VsdFN1bW1hcnkoZXhwZWN0YXRpb25z
LCB0ZXN0X2ZpbGVzKQorICAgIHJldHVybiBycywgZXhwZWN0YXRpb25zCisKKworY2xhc3MgVGVz
dFV0aWxpdHlGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NvbmZp
Z3VyZV9sb2dnaW5nKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBv
dXQgaG93IHRvIHJlc2V0IHRoZSBiYXNpYyBsb2dnZXIuCisgICAgICAgICMgRklYTUU6IElmIG90
aGVyIHRlc3RpbmcgY2xhc3NlcyBjYWxsIGxvZ2dpbmcuYmFzaWNDb25maWcoKSB0aGVuCisgICAg
ICAgICMgRklYTUU6IHRoZXNlIGNhbGxzIGJlY29tZSBuby1vcHMgYW5kIHdlIGNhbid0IGNvbnRy
b2wgdGhlCisgICAgICAgICMgRklYTUU6IGNvbmZpZ3VyYXRpb24gdG8gdGVzdCB0aGluZ3MgcHJv
cGVybHkuCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbXSkKKyAgICAgICAg
c3RyZWFtID0gQXJyYXlTdHJlYW0oKQorICAgICAgICBwcmludGluZy5jb25maWd1cmVfbG9nZ2lu
ZyhvcHRpb25zLCBzdHJlYW0pCisgICAgICAgIGxvZ2dpbmcuaW5mbygidGhpcyBzaG91bGQgYmUg
bG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorCisg
ICAgICAgIHN0cmVhbS5yZXNldCgpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoaXMgc2hvdWxk
IG5vdCBiZSBsb2dnZWQiKQorICAgICAgICAjIHNlbGYuYXNzZXJ0VHJ1ZShzdHJlYW0uZW1wdHko
KSkKKworICAgICAgICBzdHJlYW0ucmVzZXQoKQorICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0
X29wdGlvbnMoWyctLXZlcmJvc2UnXSkKKyAgICAgICAgcHJpbnRpbmcuY29uZmlndXJlX2xvZ2dp
bmcob3B0aW9ucywgc3RyZWFtKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBi
ZSBsb2dnZWQiKQorICAgICAgICAjIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLmVtcHR5KCkpCisK
KyAgICBkZWYgdGVzdF9wcmludF9vcHRpb25zKHNlbGYpOgorICAgICAgICBvcHRpb25zLCBhcmdz
ID0gZ2V0X29wdGlvbnMoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zIGlzIG5v
dCBOb25lKQorCisKK2NsYXNzICBUZXN0cHJpbnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIGdldF9wcmludGVyKHNlbGYsIGFyZ3M9Tm9uZSwgc2luZ2xlX3RocmVhZGVkPUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsPUZhbHNlKToKKyAgICAgICAgcHJp
bnRpbmdfb3B0aW9ucyA9IHByaW50aW5nLnByaW50X29wdGlvbnMoKQorICAgICAgICBvcHRpb25f
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PXByaW50aW5nX29wdGlv
bnMpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJn
cykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9ucykKKyAgICAg
ICAgbnByb2MgPSAyCisgICAgICAgIGlmIHNpbmdsZV90aHJlYWRlZDoKKyAgICAgICAgICAgIG5w
cm9jID0gMQorCisgICAgICAgIHJlZ3VsYXJfb3V0cHV0ID0gQXJyYXlTdHJlYW0oKQorICAgICAg
ICBidWlsZGJvdF9vdXRwdXQgPSBBcnJheVN0cmVhbSgpCisgICAgICAgIHByaW50ZXIgPSBwcmlu
dGluZy5QcmludGVyKHNlbGYuX3BvcnQsIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGJvdF9vdXRwdXQsIHNpbmdsZV90aHJl
YWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZnVsbHlfcGFyYWxs
ZWwpCisgICAgICAgIHJldHVybiBwcmludGVyLCByZWd1bGFyX291dHB1dCwgYnVpbGRib3Rfb3V0
cHV0CisKKyAgICBkZWYgdGVzdF9oZWxwX3ByaW50ZXIoc2VsZik6CisgICAgICAgICMgSGVyZSBh
bmQgYmVsb3cgd2UnbGwgY2FsbCB0aGUgInJlZ3VsYXIiIHByaW50ZXIgZXJyIGFuZCB0aGUKKyAg
ICAgICAgIyBidWlsZGJvdCBwcmludGVyIG91dDsgdGhpcyBjb3JyZXNwb25kcyB0byBob3cgdGhp
bmdzIHJ1biBvbiB0aGUKKyAgICAgICAgIyBib3RzIHdpdGggc3RkZXJyIGFuZCBzdGRvdXQuCisg
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigpCisKKyAgICAgICAg
IyBUaGlzIHJvdXRpbmUgc2hvdWxkIHByaW50IHNvbWV0aGluZyB0byBzdGRvdXQuIHRlc3Rpbmcg
d2hhdCBpdCBpcworICAgICAgICAjIGlzIGtpbmQgb2YgcG9pbnRsZXNzLgorICAgICAgICBwcmlu
dGVyLmhlbHBfcHJpbnRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9w
cmludF9hY3R1YWwoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRf
cHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X2Fj
dHVhbCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2FjdHVhbCddKQorICAgICAgICBw
cmludGVyLnByaW50X2FjdHVhbCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJy
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldCgpLCBbJ2hlbGxvXG4n
XSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXBy
aW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9hY3R1YWwoJ2hlbGxv
JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKG91dC5nZXQoKSwgWydoZWxsb1xuJ10pCisKKyAgICBkZWYgdGVzdF9wcmludF9h
Y3R1YWxfYnVpbGRib3Qoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRlc3QgdGhhdCB0aGUgZm9y
bWF0IG9mIHRoZSBhY3R1YWwgcmVzdWx0cyBtYXRjaGVzIHdoYXQgdGhlCisgICAgICAgICMgYnVp
bGRib3QgaXMgZXhwZWN0aW5nLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9wcmludF9j
b25maWcoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygn
aGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdjb25maWcn
XSkKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9cbiddKQorCisgICAgICAgIHByaW50ZXIsIGVy
ciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAg
ICAgICBwcmludGVyLnByaW50X2NvbmZpZygnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGVyci5nZXQoKSwgWydoZWxsb1xuJ10pCisKKyAgICBkZWYgdGVzdF9wcmludF9leHBlY3Rl
ZChzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsn
LS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfZXhwZWN0ZWQoJ2hl
bGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXhwZWN0ZWQn
XSkKKyAgICAgICAgcHJpbnRlci5wcmludF9leHBlY3RlZCgnaGVsbG8nKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsb1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisg
ICAgICAgIHByaW50ZXIucHJpbnRfZXhwZWN0ZWQoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9cbiddKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdGlt
aW5nKHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIo
WyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF90aW1pbmcoJ2hl
bGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAndGltaW5nJ10p
CisgICAgICAgIHByaW50ZXIucHJpbnRfdGltaW5nKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAg
ICAgcHJpbnRlci5wcmludF90aW1pbmcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChlcnIuZ2V0KCksIFsnaGVsbG9cbiddKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdXBkYXRlKHNl
bGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXBy
aW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoJ2hlbGxvJykK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIs
IGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAndXBkYXRlcyddKQorICAg
ICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgnaGVsbG8nKQorCisgICAgICAgICMgTm90ZSB0aGF0
IHRoZXJlIHNob3VsZG4ndCBiZSBhIGNhcnJpYWdlIHJldHVybiBoZXJlOyB1cGRhdGVzKCkKKyAg
ICAgICAgIyBhcmUgbWVhbnQgdG8gYmUgb3ZlcndyaXR0ZW4uCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHBy
aW50ZXIucHJpbnRfdXBkYXRlKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJy
LmdldCgpLCBbJ2hlbGxvJ10pCisKKyAgICBkZWYgdGVzdF9wcmludF9vbmVfbGluZV9zdW1tYXJ5
KHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyct
LXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1t
YXJ5KDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ29uZS1s
aW5lLXN1bW1hcnknXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDEs
IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwgWyJBbGwgMSB0ZXN0cyBy
YW4gYXMgZXhwZWN0ZWQuXG4iXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYu
Z2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5w
cmludF9vbmVfbGluZV9zdW1tYXJ5KDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVy
ci5nZXQoKSwgWyJBbGwgMSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuXG4iXSkKKworICAgICAgICBl
cnIucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMiwgMSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBbIlxuMSB0ZXN0IHJhbiBhcyBleHBlY3RlZCwgMSBkaWRuJ3Q6XG5cbiJdKQorCisg
ICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFy
eSgzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsiXG4yIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgMSBkaWRuJ3Q6XG5c
biJdKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdGVzdF9yZXN1bHQoc2VsZik6CisgICAgICAgIHJl
c3VsdCA9IGdldF9yZXN1bHQoJ2Zvby5odG1sJykKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50
ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICd1bmV4cGVjdGVkJ10pCisgICAgICAgIHBy
aW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0
X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWycgIGZvby5odG1sIC0+
IHVuZXhwZWN0ZWQgcGFzc1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVz
dWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
ZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgZm9vLmh0bWwgLT4gdW5l
eHBlY3RlZCBwYXNzXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0
X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF90
ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0
X3ByaW50ZXIoWyctLXByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndHJhY2UtdW5leHBlY3RlZCddKQorICAgICAgICBwcmludGVyLnByaW50
X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRl
ci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICd0cmFjZS1ldmVyeXRoaW5nJ10pCisgICAg
ICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBf
c3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0
KCkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZh
bHNlLCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9z
dHI9JycpCisKKyAgICBkZWYgdGVzdF9wcmludF9wcm9ncmVzcyhzZWxmKToKKyAgICAgICAgdGVz
dF9maWxlcyA9IFsnZm9vLmh0bWwnLCAnYmFyLmh0bWwnXQorICAgICAgICBleHBlY3RhdGlvbnMg
PSAnJworCisgICAgICAgICMgdGVzdCB0aGF0IHdlIHByaW50IG5vdGhpbmcKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10p
CisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9m
aWxlcywgZXhwZWN0YXRpb25zKQorCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMs
IEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVy
LnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkK
KworICAgICAgICAjIHRlc3QgcmVndWxhciBmdW5jdGlvbmFsaXR5CisgICAgICAgIHByaW50ZXIs
IGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmUtbGluZS1wcm9ncmVzcyddKQorICAg
ICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGVyci5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgp
CisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3Byb2dyZXNzX19kZXRhaWxl
ZChzZWxmKToKKyAgICAgICAgdGVzdF9maWxlcyA9IFsncGFzcy9wYXNzLmh0bWwnLCAncGFzcy90
aW1lb3V0Lmh0bWwnLCAnZmFpbC9jcmFzaC5odG1sJ10KKyAgICAgICAgZXhwZWN0YXRpb25zID0g
J3Bhc3MvdGltZW91dC5odG1sID0gVElNRU9VVCcKKworICAgICAgICAjIGZpcnN0LCB0ZXN0IHRo
YXQgaXQgaXMgZGlzYWJsZWQgcHJvcGVybHkKKyAgICAgICAgIyBzaG91bGQgc3RpbGwgcHJpbnQg
b25lLWxpbmUtcHJvZ3Jlc3MKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9w
cmludGVyKAorICAgICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzJ10sIHNp
bmdsZV90aHJlYWRlZD1GYWxzZSkKKyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFy
eShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAgIHByaW50ZXIu
cHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkp
CisKKyAgICAgICAgIyBub3cgdGVzdCB0aGUgZW5hYmxlZCBwYXRocworICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoCisgICAgICAgICAgICBbJy0tcHJpbnQnLCAn
ZGV0YWlsZWQtcHJvZ3Jlc3MnXSwgc2luZ2xlX3RocmVhZGVkPVRydWUpCisgICAgICAgIHJzLCBl
eHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRp
b25zKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxl
cykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91
dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3Rf
ZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
cGFzcy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgRmFsc2UpCisgICAg
ICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBUcnVlKQorICAgICAg
ICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMu
Q1JBU0gpLCBUcnVlKQorICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQor
ICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgV2Ugb25seSBjbGVhciB0aGUgbWV0ZXIgd2hl
biByZXRyeWluZyB3LyBkZXRhaWxlZC1wcm9ncmVzcy4KKyAgICAgICAgZXJyLnJlc2V0KCkKKyAg
ICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1
ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnJ10p
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoCisgICAgICAgICAgICBbJy0tcHJpbnQnLCAn
ZGV0YWlsZWQtcHJvZ3Jlc3MsdW5leHBlY3RlZCddLCBzaW5nbGVfdGhyZWFkZWQ9VHJ1ZSkKKyAg
ICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVz
LCBleHBlY3RhdGlvbnMpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNl
LCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkK
KyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywg
VHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIHJzLmFkZChn
ZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBG
YWxzZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1sJyksIFRy
dWUpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwnLCB0ZXN0X2V4
cGVjdGF0aW9ucy5DUkFTSCksIFRydWUpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91
dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0
X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyBXZSBvbmx5IGNsZWFyIHRo
ZSBtZXRlciB3aGVuIHJldHJ5aW5nIHcvIGRldGFpbGVkLXByb2dyZXNzLgorICAgICAgICBlcnIu
cmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dy
ZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5n
ZXQoKSwgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAg
ZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5n
ZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVyLndyaXRl
KCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdtaXNjJ10p
CisgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZXJyLmVtcHR5KCkpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIud3JpdGUo
ImZvbyIsICJjb25maWciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcs
ICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAg
IHByaW50ZXIud3JpdGUoImZvbyIsICJjb25maWciKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGVyci5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHNl
bGYpOgorICAgICAgICAjIFRoaXMgcm91dGluZSBpcyB0aGUgb25seSBvbmUgdGhhdCBwcmludHMg
c3R1ZmYgdGhhdCB0aGUgYm90cworICAgICAgICAjIGNhcmUgYWJvdXQuCisgICAgICAgIGRlZiBn
ZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkLCBwYXNzaW5nLCBmbGFreSk6CisgICAgICAg
ICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMs
IGV4cGVjdGF0aW9ucykKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkOgorICAgICAgICAgICAgICAg
IHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlBB
U1MpLAorICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBy
cy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0bWwnLAorICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAg
ICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25z
LkNSQVNIKSwKKyAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAgICAgIGVsaWYg
cGFzc2luZzoKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0
bWwnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3Mv
dGltZW91dC5odG1sJyksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVz
dWx0KCdmYWlsL2NyYXNoLmh0bWwnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhw
ZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAg
ICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0bWwnLAorICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksIGV4cGVjdGVkKQor
ICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQp
LAorICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0cnkgPSBycwor
ICAgICAgICAgICAgaWYgZmxha3k6CisgICAgICAgICAgICAgICAgcmV0cnksIGV4cCA9IGdldF9y
ZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zKQorICAgICAgICAgICAg
ICAgIHJldHJ5LmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcpLCBUcnVlKQorICAgICAg
ICAgICAgICAgIHJldHJ5LmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBUcnVl
KQorICAgICAgICAgICAgICAgIHJldHJ5LmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwn
KSwgVHJ1ZSkKKyAgICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHJ1bl93ZWJraXRfdGVz
dHMuc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cygKKyAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LCBleHAsIHJzLCByZXRyeSkKKyAgICAgICAgICAgIHJldHVybiB1bmV4cGVjdGVkX3Jlc3Vs
dHMKKworICAgICAgICB0ZXN0X2ZpbGVzID0gWydwYXNzL3Bhc3MuaHRtbCcsICdwYXNzL3RpbWVv
dXQuaHRtbCcsICdmYWlsL2NyYXNoLmh0bWwnXQorICAgICAgICBleHBlY3RhdGlvbnMgPSAnJwor
CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQn
LCAnbm90aGluZyddKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0
ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnBy
aW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5l
bXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQtcmVzdWx0
cyddKQorCisgICAgICAgICMgdGVzdCBldmVyeXRoaW5nIHJ1bm5pbmcgYXMgZXhwZWN0ZWQKKyAg
ICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPVRydWUsIHBhc3Npbmc9
RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVz
dWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IGZhaWx1cmVzCisg
ICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHVyID0gZ2V0
X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9
RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2Uob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IHVuZXhwZWN0ZWQgZmxha3kgcmVzdWx0
cworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICB1ciA9
IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9VHJ1ZSwgZmxh
a3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IHVuZXhwZWN0ZWQgcGFzc2VzCisg
ICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHVyID0gZ2V0
X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9
VHJ1ZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQo
KQorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50
JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4
cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRl
ci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
cnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAg
IGRlZiB0ZXN0X3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0c19idWlsZGJvdChzZWxmKToKKyAgICAg
ICAgIyBGSVhNRTogVGVzdCB0aGF0IHByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cygpIHByb2R1Y2Vz
IHRoZSBwcmludGVyIHRoZQorICAgICAgICAjIGJ1aWxkYm90IGlzIGV4cGVjdGluZy4KKyAgICAg
ICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4o
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC90ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC90ZXN0LnB5CmluZGV4IGVkZWY0ODUuLmNiOWYzZWMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTY2
LDYgKzY2LDEzIEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKToKICAgICAgICAgcmV0dXJuICcn
CiAKKyAgICBkZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CisgICAg
ICAgIHJldHVybiBmaWxlbmFtZQorCisgICAgZGVmIGV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYsIGZp
bGVuYW1lLCBzdWZmaXgpOgorICAgICAgICAoYmFzZW5hbWUsIGV4dCkgPSBvcy5wYXRoLnNwbGl0
ZXh0KGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gYmFzZW5hbWUgKyAnLicgKyBzdWZmaXgKKwog
ICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQppbmRleCAxZTYzYTdhLi44Y2FhZDc3IDEwMDc1NQotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHMucHkKQEAgLTY0LDcgKzY0LDcgQEAgaW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IKLWZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwcmlu
dGluZwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGZyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfZmlsZXMKQEAgLTgwLDMzICs4MCw2IEBAIGltcG9ydCBwb3J0CiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnJ1bl93ZWJr
aXRfdGVzdHMiKQogCi0jIGR1bW15IHZhbHVlIHVzZWQgZm9yIGNvbW1hbmQtbGluZSBleHBsaWNp
dG5lc3MgdG8gZGlzYWJsZSBkZWZhdWx0cwotTE9HX05PVEhJTkcgPSAnbm90aGluZycKLQotIyBE
aXNwbGF5IHRoZSBvbmUtbGluZSBwcm9ncmVzcyBiYXIgKCUgY29tcGxldGVkKSB3aGlsZSB0ZXN0
aW5nCi1MT0dfUFJPR1JFU1MgPSAncHJvZ3Jlc3MnCi0KLSMgSW5kaWNhdGVzIHRoYXQgd2Ugd2Fu
dCBkZXRhaWxlZCBwcm9ncmVzcyB1cGRhdGVzIGluIHRoZSBvdXRwdXQgKHByaW50cwotIyBkaXJl
Y3RvcnktYnktZGlyZWN0b3J5IGZlZWRiYWNrKS4KLUxPR19ERVRBSUxFRF9QUk9HUkVTUyA9ICdk
ZXRhaWxlZC1wcm9ncmVzcycKLQotIyBMb2cgdGhlIG9uZS1saW5lIHN1bW1hcnkgYXQgdGhlIGVu
ZCBvZiB0aGUgcnVuCi1MT0dfU1VNTUFSWSA9ICdzdW1tYXJ5JwotCi0jICJUcmFjZSIgdGhlIHRl
c3QgLSBsb2cgdGhlIGV4cGVjdGVkIHJlc3VsdCwgdGhlIGFjdHVhbCByZXN1bHQsIGFuZCB0aGUK
LSMgYmFzZWxpbmVzIHVzZWQKLUxPR19UUkFDRSA9ICd0cmFjZScKLQotIyBMb2cgYW55IHVuZXhw
ZWN0ZWQgcmVzdWx0cyB3aGlsZSBydW5uaW5nIChpbnN0ZWFkIG9mIGp1c3QgYXQgdGhlIGVuZCku
Ci1MT0dfVU5FWFBFQ1RFRCA9ICd1bmV4cGVjdGVkJwotTE9HX1VORVhQRUNURURfUkVTVUxUUyA9
ICd1bmV4cGVjdGVkLXJlc3VsdHMnCi0KLUxPR19WQUxVRVMgPSAiLCIuam9pbigoImFjdHVhbCIs
ICJjb25maWciLCBMT0dfREVUQUlMRURfUFJPR1JFU1MsICJleHBlY3RlZCIsCi0gICAgICAgICAg
ICAgICAgICAgICAgTE9HX05PVEhJTkcsIExPR19QUk9HUkVTUywgTE9HX1NVTU1BUlksICJ0aW1p
bmciLAotICAgICAgICAgICAgICAgICAgICAgIExPR19VTkVYUEVDVEVELCBMT0dfVU5FWFBFQ1RF
RF9SRVNVTFRTKSkKLUxPR19ERUZBVUxUX1ZBTFVFID0gIiwiLmpvaW4oKExPR19ERVRBSUxFRF9Q
Uk9HUkVTUywgTE9HX1NVTU1BUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0df
VU5FWFBFQ1RFRCwgTE9HX1VORVhQRUNURURfUkVTVUxUUykpCi0KICMgQnVpbGRlciBiYXNlIFVS
TCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCiBCVUlMREVSX0JBU0Vf
VVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvbGF5b3V0X3Rlc3RfcmVz
dWx0cy8iCiAKQEAgLTE4MSw3ICsxNTQsNyBAQCBjbGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6
CiAgICAgICAgICIiIgogCiAgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb25bcmVzdWx0
LnR5cGVdLmFkZChyZXN1bHQuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYucmVzdWx0c1tyZXN1bHQu
ZmlsZW5hbWVdID0gcmVzdWx0LnR5cGUKKyAgICAgICAgc2VsZi5yZXN1bHRzW3Jlc3VsdC5maWxl
bmFtZV0gPSByZXN1bHQKICAgICAgICAgc2VsZi5yZW1haW5pbmcgLT0gMQogICAgICAgICBpZiBs
ZW4ocmVzdWx0LmZhaWx1cmVzKToKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXNbcmVzdWx0LmZp
bGVuYW1lXSA9IHJlc3VsdC5mYWlsdXJlcwpAQCAtMTkyLDYgKzE2NSw4MyBAQCBjbGFzcyBSZXN1
bHRTdW1tYXJ5KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnVuZXhwZWN0ZWQgKz0gMQogCiAK
K2RlZiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMs
IHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlf
c3VtbWFyeSk6CisgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMgYSBk
aWN0LgorCisgICAgVE9ETyhkcHJhbmtlKTogc3BsaXQgdGhpcyBkYXRhIHN0cnVjdHVyZSBpbnRv
IGEgc2VwYXJhdGUgY2xhc3M/CisKKyAgICBBcmdzOgorICAgICAgICBwb3J0X29iajogaW50ZXJm
YWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKKyAgICAgICAgZXhwZWN0YXRpb25zOiB0ZXN0X2V4
cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zIG9iamVjdAorICAgICAgICByZXN1bHRfc3VtbWFy
eTogc3VtbWFyeSBvYmplY3QgZnJvbSBpbml0aWFsIHRlc3QgcnVucworICAgICAgICByZXRyeV9z
dW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3QgcnVuIG9mIHJldHJpZWQgdGVz
dHMKKyAgICBSZXR1cm5zOgorICAgICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBhIHN1bW1h
cnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQorICAgICAgICBydW4sIHdpdGgg
dGhlIGZvbGxvd2luZyBmaWVsZHM6CisgICAgICAgICd2ZXJzaW9uJzogYSB2ZXJzaW9uIGluZGlj
YXRvciAoMSBpbiB0aGlzIHZlcnNpb24pCisgICAgICAgICdmaXhhYmxlJzogIyBvZiBmaXhhYmxl
IHRlc3RzIChOT1cgLSBQQVNTKQorICAgICAgICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0
cyAoTk9XICYgU0tJUFBFRCkKKyAgICAgICAgJ251bV9yZWdyZXNzaW9ucyc6ICMgb2Ygbm9uLWZs
YWt5IGZhaWx1cmVzCisgICAgICAgICdudW1fZmxha3knOiAjIG9mIGZsYWt5IGZhaWx1cmVzCisg
ICAgICAgICdudW1fcGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcworICAgICAgICAndGVz
dHMnOiBhIGRpY3Qgb2YgdGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4nLCAnYWN0dWFsJzogJy4u
Lid9CisgICAgIiIiCisgICAgcmVzdWx0cyA9IHt9CisgICAgcmVzdWx0c1sndmVyc2lvbiddID0g
MQorCisgICAgdGJlID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb24KKyAgICB0
YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQorICAgIHJlc3VsdHNbJ2ZpeGFi
bGUnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTXSkKKyAgICByZXN1bHRz
Wydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlvbnMuU0tJUF0pCisKKyAg
ICBudW1fcGFzc2VzID0gMAorICAgIG51bV9mbGFreSA9IDAKKyAgICBudW1fcmVncmVzc2lvbnMg
PSAwCisgICAga2V5d29yZHMgPSB7fQorICAgIGZvciBrLCB2IGluIFRlc3RFeHBlY3RhdGlvbnNG
aWxlLkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKKyAgICAgICAga2V5d29yZHNbdl0gPSBrLnVw
cGVyKCkKKworICAgIHRlc3RzID0ge30KKyAgICBmb3IgZmlsZW5hbWUsIHJlc3VsdCBpbiByZXN1
bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICMgTm90
ZSB0aGF0IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5hbCBydW4sIHdlIGlnbm9yZQor
ICAgICAgICAjIHdoZXRoZXIgb3Igbm90IGl0IGNyYXNoZWQgd2hlbiB3ZSByZXRyaWVkIGl0IChp
ZiB3ZSByZXRyaWVkIGl0KSwKKyAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1
bHQgbm90IGZsYWt5LgorICAgICAgICB0ZXN0ID0gcG9ydF9vYmoucmVsYXRpdmVfdGVzdF9maWxl
bmFtZShmaWxlbmFtZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RhdGlvbnMuZ2V0X2V4cGVj
dGF0aW9uc19zdHJpbmcoZmlsZW5hbWUpCisgICAgICAgIGFjdHVhbCA9IFtrZXl3b3Jkc1tyZXN1
bHRdXQorCisgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgorICAg
ICAgICAgICAgbnVtX3Bhc3NlcyArPSAxCisgICAgICAgIGVsaWYgcmVzdWx0ID09IHRlc3RfZXhw
ZWN0YXRpb25zLkNSQVNIOgorICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiByZXRyeV9zdW1tYXJ5LnVu
ZXhwZWN0ZWRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICBhY3R1YWwuZXh0ZW5kKGV4cGVjdGF0
aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5h
bWUpLnNwbGl0KCIgIikpCisgICAgICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0gcmV0cnlfc3VtbWFyeS51
bmV4cGVjdGVkX3Jlc3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0ICE9
IHJldHJ5X3Jlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsLmFwcGVuZChrZXl3b3Jk
c1tyZXRyeV9yZXN1bHRdKQorICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQorICAg
ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG51bV9yZWdyZXNzaW9ucyAr
PSAxCisKKyAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQorICAgICAgICB0ZXN0c1t0ZXN0XVsnZXhw
ZWN0ZWQnXSA9IGV4cGVjdGVkCisgICAgICAgIHRlc3RzW3Rlc3RdWydhY3R1YWwnXSA9ICIgIi5q
b2luKGFjdHVhbCkKKworICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0ZXN0cworICAgIHJlc3VsdHNb
J251bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMKKyAgICByZXN1bHRzWydudW1fZmxha3knXSA9IG51
bV9mbGFreQorICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9ucyddID0gbnVtX3JlZ3Jlc3Npb25z
CisKKyAgICByZXR1cm4gcmVzdWx0cworCisKIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIiIiQSBj
bGFzcyBmb3IgbWFuYWdpbmcgcnVubmluZyBhIHNlcmllcyBvZiB0ZXN0cyBvbiBhIHNlcmllcyBv
ZiBsYXlvdXQKICAgICB0ZXN0IGZpbGVzLiIiIgpAQCAtMjA0LDE3ICsyNTQsMTcgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5kZXJUcmVlLgogICAgIERFRkFVTFRfVEVTVF9U
SU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRp
b25zLCBtZXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50
ZXIpOgogICAgICAgICAiIiJJbml0aWFsaXplIHRlc3QgcnVubmVyIGRhdGEgc3RydWN0dXJlcy4K
IAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IGFuIG9iamVjdCBpbXBsZW1lbnRpbmcg
cG9ydC1zcGVjaWZpYwogICAgICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5k
IGxpbmUgb3B0aW9ucwotICAgICAgICAgIG1ldGVyOiBhIE1ldGVyZWRTdHJlYW0gb2JqZWN0IHRv
IHJlY29yZCB1cGRhdGVzIHRvLgorICAgICAgICAgIHByaW50ZXI6IGEgUHJpbnRlciBvYmplY3Qg
dG8gcmVjb3JkIHVwZGF0ZXMgdG8uCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl9tZXRl
ciA9IG1ldGVyCisgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCiAKICAgICAgICAgIyBk
aXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3Rz
LgogICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0gd2Vic29ja2V0X3Nl
cnZlci5QeVdlYlNvY2tldCgKQEAgLTIyOCwxMiArMjc4LDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoK
ICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQogICAgICAgICBzZWxmLl9yZXN1
bHRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAKLSAgICAgICAgIyBUaGVzZSBhcmUgdXNlZCBmb3Ig
LS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3MgdG8gdHJhY2sgc3RhdHVzIGJ5Ci0gICAgICAgICMgZGly
ZWN0b3J5LgotICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IE5vbmUKLSAgICAgICAgc2VsZi5f
Y3VycmVudF9wcm9ncmVzc19zdHIgPSAiIgotICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVt
YmVyID0gMAotCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UKIAogICAgICAgICAjIEhh
Y2sgZm9yIGR1bXBpbmcgdGhyZWFkcyBvbiB0aGUgYm90cwpAQCAtMjc5LDE5ICszMjMsMTYgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFp
c2UgZXJyCiAKLSAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHNlbGYsIHdy
aXRlKToKKyAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHNlbGYpOgogICAg
ICAgICAiIiJDcmVhdGUgYXBwcm9wcmlhdGUgc3Vic2V0cyBvZiB0ZXN0IGxpc3RzIGFuZCByZXR1
cm5zIGEKICAgICAgICAgUmVzdWx0U3VtbWFyeSBvYmplY3QuIEFsc28gcHJpbnRzIGV4cGVjdGVk
IHRlc3QgY291bnRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJh
Y2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAg
ICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICIiIgogCiAgICAgICAgICMgUmVtb3ZlIHNr
aXBwZWQgLSBib3RoIGZpeGFibGUgYW5kIGlnbm9yZWQgLSBmaWxlcyBmcm9tIHRoZQogICAgICAg
ICAjIHRvcC1sZXZlbCBsaXN0IG9mIGZpbGVzIHRvIHRlc3QuCiAgICAgICAgIG51bV9hbGxfdGVz
dF9maWxlcyA9IGxlbihzZWxmLl90ZXN0X2ZpbGVzKQotICAgICAgICB3cml0ZSgiRm91bmQ6ICAl
ZCB0ZXN0cyIgJSBudW1fYWxsX3Rlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfZXhwZWN0ZWQoIkZvdW5kOiAgJWQgdGVzdHMiICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobGVuKHNlbGYuX3Rlc3RfZmlsZXMpKSkKICAgICAgICAgaWYgbm90IG51
bV9hbGxfdGVzdF9maWxlczoKICAgICAgICAgICAgIF9sb2cuY3JpdGljYWwoIk5vIHRlc3RzIHRv
IHJ1bi4iKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTM1OCw3ICszOTksNyBAQCBjbGFz
cyBUZXN0UnVubmVyOgogCiAgICAgICAgICAgICB0ZXN0c19ydW5fbXNnID0gJ1J1bm5pbmc6ICVk
IHRlc3RzIChjaHVuayBzbGljZSBbJWQ6JWRdIG9mICVkKScgJSAoCiAgICAgICAgICAgICAgICAg
KHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KSwgc2xpY2Vfc3RhcnQsIHNsaWNlX2VuZCwgbnVtX3Rl
c3RzKQotICAgICAgICAgICAgd3JpdGUodGVzdHNfcnVuX21zZykKKyAgICAgICAgICAgIHNlbGYu
X3ByaW50LnByaW50X2V4cGVjdGVkKHRlc3RzX3J1bl9tc2cpCiAKICAgICAgICAgICAgICMgSWYg
d2UgcmVhY2hlZCB0aGUgZW5kIGFuZCB3ZSBkb24ndCBoYXZlIGVub3VnaCB0ZXN0cywgd2UgcnVu
IHNvbWUKICAgICAgICAgICAgICMgZnJvbSB0aGUgYmVnaW5uaW5nLgpAQCAtMzY3LDcgKzQwOCw3
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgZXh0cmEgPSAxICsgY2h1bmtf
bGVuIC0gKHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KQogICAgICAgICAgICAgICAgIGV4dHJhX21z
ZyA9ICgnICAgbGFzdCBjaHVuayBpcyBwYXJ0aWFsLCBhcHBlbmRpbmcgWzA6JWRdJyAlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEpCi0gICAgICAgICAgICAgICAgd3JpdGUoZXh0
cmFfbXNnKQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoZXh0
cmFfbXNnKQogICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9tc2cgKz0gIlxuIiArIGV4dHJhX21z
ZwogICAgICAgICAgICAgICAgIGZpbGVzLmV4dGVuZCh0ZXN0X2ZpbGVzWzA6ZXh0cmFdKQogICAg
ICAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnksCkBAIC0zOTksMTcgKzQ0MCwxOCBAQCBjbGFzcyBUZXN0UnVubmVy
OgogCiAgICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFyeShzZWxmLl9leHBlY3Rh
dGlvbnMsCiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIHwgc2tpcF9jaHVuaykKLSAgICAg
ICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3Vt
bWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3Vs
dF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuUEFTUywgInBhc3NlcyIp
Ci0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVz
dWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlw
ZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkZBSUwsICJm
YWlsdXJlcyIpCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3
cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3Vs
dHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25z
LkZMQUtZLCAiZmxha3kiKQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29m
X3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3Rl
ZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVj
dGF0aW9ucy5TS0lQLCAic2tpcHBlZCIpCiAKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5mb3Jj
ZToKLSAgICAgICAgICAgIHdyaXRlKCdSdW5uaW5nIGFsbCB0ZXN0cywgaW5jbHVkaW5nIHNraXBz
ICgtLWZvcmNlKScpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCdS
dW5uaW5nIGFsbCB0ZXN0cywgaW5jbHVkaW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3NraXBzICgtLWZvcmNlKScpCiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAjIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBydW4gdGhlIHNraXBwZWQgdGVzdHMg
KHRoZXkgd2VyZQogICAgICAgICAgICAgIyBzdWJ0cmFjdGVkIG91dCBvZiBzZWxmLl90ZXN0X2Zp
bGVzLCBhYm92ZSksIGJ1dCB3ZSBzdHViIG91dCB0aGUKQEAgLTQyMCw3ICs0NjIsNyBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcz0wKQogICAg
ICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gdGVzdF9leHBlY3RhdGlvbnMuU0tJUAogICAgICAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkPVRydWUpCi0gICAg
ICAgIHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCcnKQog
CiAgICAgICAgIHJldHVybiByZXN1bHRfc3VtbWFyeQogCkBAIC02MjUsMTEgKzY2NywxMSBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICBwbHVyYWwgPSAiIgogICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA+IDE6CiAgICAgICAgICAgICBwbHVyYWwgPSAicyIKLSAg
ICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzJXMgLi4uJyAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LmRyaXZlcl9uYW1l
KCksIHBsdXJhbCkpCiAgICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50aWF0ZV9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZHMoZmlsZV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAg
ICBzZWxmLl9tZXRlci51cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAogICAgICAg
ICAjIFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29sbGVjdCB0ZXN0IGZhaWx1
cmVzLgogICAgICAgICBmYWlsdXJlcyA9IHt9CkBAIC02ODIsNyArNzI0LDcgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVk
cyBhbiBIVFRQIHNlcnZlci4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zX3Rlc3Rz
KHNlbGYuSFRUUF9TVUJESVIpCiAKLSAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBw
cmludF9yZXN1bHRzKToKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAg
ICAgIiIiUnVuIGFsbCBvdXIgdGVzdHMgb24gYWxsIG91ciB0ZXN0IGZpbGVzLgogCiAgICAgICAg
IEZvciBlYWNoIHRlc3QgZmlsZSwgd2UgcnVuIGVhY2ggdGVzdCB0eXBlLiBJZiB0aGVyZSBhcmUg
YW55IGZhaWx1cmVzLApAQCAtNjkwLDcgKzczMiw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAg
ICAgICAgQXJnczoKICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogYSBzdW1tYXJ5IG9iamVjdCB0
cmFja2luZyB0aGUgdGVzdCByZXN1bHRzLgotICAgICAgICAgIHByaW50X3Jlc3VsdHM6IHdoZXRo
ZXIgb3Igbm90IHRvIHByaW50IHRoZSBzdW1tYXJ5IGF0IHRoZSBlbmQKIAogICAgICAgICBSZXR1
cm46CiAgICAgICAgICAgVGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJlc3VsdHMgKDAgPT0gc3Vj
Y2VzcykKQEAgLTcwMCwxMSArNzQxLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHN0
YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIGlmIHNlbGYubmVlZHNfaHR0cCgpOgot
ICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4n
KQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIEhUVFAg
c2VydmVyIC4uLicpCisKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIo
KQogCiAgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09DS0VUX1NVQkRJ
Uik6Ci0gICAgICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoJ1N0YXJ0aW5nIFdlYlNvY2tldCBz
ZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFy
dGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0
X3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJl
X3NlcnZlci5TdGFydCgpCiAKQEAgLTcyNyw0MSArNzY5LDIyIEBAIGNsYXNzIFRlc3RSdW5uZXI6
CiAKICAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHdyaXRlID0gY3Jl
YXRlX2xvZ2dpbmdfd3JpdGVyKHNlbGYuX29wdGlvbnMsICd0aW1pbmcnKQotICAgICAgICBzZWxm
Ll9wcmludF90aW1pbmdfc3RhdGlzdGljcyh3cml0ZSwgZW5kX3RpbWUgLSBzdGFydF90aW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3Rf
dGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
X3N1bW1hcnkpCi0KLSAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCIiKQotCi0gICAgICAgIGlm
IHNlbGYuX29wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgICMgV2Ugd3JpdGUgdGhpcyBibG9j
ayB0byBzdGRvdXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKLSAgICAgICAgICAgICMgYnVp
bGRib3QgbG9nIHBhcnNlciwgd2hpY2ggb25seSBsb29rcyBhdCBzdGRvdXQsIG5vdCBzdGRlcnIg
OigKLSAgICAgICAgICAgIHdyaXRlID0gbGFtYmRhIHM6IHN5cy5zdGRvdXQud3JpdGUoIiVzXG4i
ICUgcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdf
d3JpdGVyKHNlbGYuX29wdGlvbnMsICdhY3R1YWwnKQorICAgICAgICBzZWxmLl9wcmludF90aW1p
bmdfc3RhdGlzdGljcyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKIAot
ICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnkp
CisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQogCiAg
ICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKIAot
ICAgICAgICAjIFRoaXMgc3VtbWFyeSBkYXRhIGdldHMgd3JpdHRlbiB0byBzdGRvdXQgcmVnYXJk
bGVzcyBvZiBsb2cgbGV2ZWwKLSAgICAgICAgIyAodW5sZXNzIG9mIGNvdXJzZSB3ZSdyZSBwcmlu
dGluZyBub3RoaW5nKS4KLSAgICAgICAgaWYgcHJpbnRfcmVzdWx0czoKLSAgICAgICAgICAgIGlm
IChMT0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5fb3B0aW9ucy5sb2cgb3IKLSAgICAgICAg
ICAgICAgICAoTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCi0gICAgICAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRvdGFsICE9IHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVk
KSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIGlmIExPR19TVU1NQVJZIGlu
IHNlbGYuX29wdGlvbnMubG9nOgotICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5l
X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWwsCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfb25lX2xpbmVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeS50b3RhbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkKQog
Ci0gICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX3N1bW1hcml6ZV91bmV4cGVjdGVk
X3Jlc3VsdHMocmVzdWx0X3N1bW1hcnksCi0gICAgICAgICAgICByZXRyeV9zdW1tYXJ5KQotICAg
ICAgICBpZiBMT0dfVU5FWFBFQ1RFRF9SRVNVTFRTIGluIHNlbGYuX29wdGlvbnMubG9nOgotICAg
ICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVuZXhwZWN0ZWRfcmVzdWx0
cykKKyAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVz
dWx0cyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRf
c3VtbWFyeSwgcmV0cnlfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91bmV4
cGVjdGVkX3Jlc3VsdHModW5leHBlY3RlZF9yZXN1bHRzKQogCiAgICAgICAgICMgV3JpdGUgdGhl
IHNhbWUgZGF0YSB0byBsb2cgZmlsZXMuCiAgICAgICAgIHNlbGYuX3dyaXRlX2pzb25fZmlsZXMo
dW5leHBlY3RlZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwKQEAgLTc4MywxMTIgKzgwNiwxNiBA
QCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3Jlc3Vs
dF9xdWV1ZS5nZXRfbm93YWl0KCkKICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKICAg
ICAgICAgICAgICAgICByZXR1cm4KKwogICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBl
Y3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCiAgICAgICAgICAgICAgICAgcmVz
dWx0LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKICAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkKQotICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfdGVzdF9yZXN1bHRzKHJlc3VsdCwgZXhwZWN0ZWQsIHJlc3VsdF9zdW1t
YXJ5KQotCi0gICAgZGVmIF9wcmludF90ZXN0X3Jlc3VsdHMoc2VsZiwgcmVzdWx0LCBleHBlY3Rl
ZCwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVz
dCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAtLWxvZyBzd2l0Y2hlcy4iCi0gICAgICAgIGlmIExPR19U
UkFDRSBpbiBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3Rlc3Rf
dHJhY2UocmVzdWx0KQotICAgICAgICBlbGlmIChMT0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2Vs
Zi5fb3B0aW9ucy5sb2cgYW5kCi0gICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLmV4cGVyaW1l
bnRhbF9mdWxseV9wYXJhbGxlbCBvcgotICAgICAgICAgICAgICAgc2VsZi5faXNfc2luZ2xlX3Ro
cmVhZGVkKCkpKToKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHJl
c3VsdF9zdW1tYXJ5KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgKG5vdCBleHBlY3Rl
ZCBhbmQgTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cpOgotICAgICAgICAgICAg
ICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQocmVzdWx0KQotICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnkpCi0KLSAgICBk
ZWYgX3ByaW50X3Rlc3RfdHJhY2Uoc2VsZiwgcmVzdWx0KToKLSAgICAgICAgIiIiUHJpbnQgZGV0
YWlsZWQgcmVzdWx0cyBvZiBhIHRlc3QgKHRyaWdnZXJlZCBieSAtLWxvZyB0cmFjZSkuCi0gICAg
ICAgIEZvciBlYWNoIHRlc3QsIHByaW50OgotICAgICAgICAgICAtIGxvY2F0aW9uIG9mIHRoZSBl
eHBlY3RlZCBiYXNlbGluZXMKLSAgICAgICAgICAgLSBleHBlY3RlZCByZXN1bHRzCi0gICAgICAg
ICAgIC0gYWN0dWFsIHJlc3VsdAotICAgICAgICAgICAtIHRpbWluZyBpbmZvCi0gICAgICAgICIi
IgotICAgICAgICBmaWxlbmFtZSA9IHJlc3VsdC5maWxlbmFtZQotICAgICAgICB0ZXN0X25hbWUg
PSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgICAgIF9s
b2cuaW5mbygndHJhY2U6ICVzJyAlIHRlc3RfbmFtZSkKLSAgICAgICAgX2xvZy5pbmZvKCcgIHR4
dDogJXMnICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxl
bmFtZSgKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFt
ZShmaWxlbmFtZSwgJy50eHQnKSkpCi0gICAgICAgIHBuZ19maWxlID0gc2VsZi5fcG9ydC5leHBl
Y3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0
cyhwbmdfZmlsZSk6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgcG5nOiAlcycgJQotICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFt
ZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgcG5nOiA8bm9uZT4n
KQotICAgICAgICBfbG9nLmluZm8oJyAgZXhwOiAlcycgJQotICAgICAgICAgICAgICAgICAgc2Vs
Zi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKSkKLSAgICAg
ICAgX2xvZy5pbmZvKCcgIGdvdDogJXMnICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVj
dGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpKQotICAgICAgICBfbG9n
LmluZm8oJyB0b29rOiAlLS4zZicgJSByZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgX2xv
Zy5pbmZvKCcnKQotCi0gICAgZGVmIF9wcmludF9vbmVfbGluZV9wcm9ncmVzcyhzZWxmLCByZXN1
bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIkRpc3BsYXlzIHRoZSBwcm9ncmVzcyB0aHJvdWdoIHRo
ZSB0ZXN0IHJ1bi4iIiIKLSAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAqIChyZXN1bHRf
c3VtbWFyeS5leHBlY3RlZCArCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVk
KSAvIHJlc3VsdF9zdW1tYXJ5LnRvdGFsCi0gICAgICAgIGFjdGlvbiA9ICJUZXN0aW5nIgotICAg
ICAgICBpZiBzZWxmLl9yZXRyeWluZzoKLSAgICAgICAgICAgIGFjdGlvbiA9ICJSZXRyeWluZyIK
LSAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzICglZCUlKTogJWQgcmFuIGFzIGV4cGVj
dGVkLCAlZCBkaWRuJ3QsIgotICAgICAgICAgICAgIiAlZCBsZWZ0IiAlIChhY3Rpb24sIHBlcmNl
bnRfY29tcGxldGUsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLAotICAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5LnVuZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykpCi0KLSAgICBk
ZWYgX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAg
ICAgIiIiRGlzcGxheSBkZXRhaWxlZCBwcm9ncmVzcyBvdXRwdXQgd2hlcmUgd2UgcHJpbnQgdGhl
IGRpcmVjdG9yeSBuYW1lCi0gICAgICAgIGFuZCBvbmUgZG90IGZvciBlYWNoIGNvbXBsZXRlZCB0
ZXN0LiBUaGlzIGlzIHRyaWdnZXJlZCBieQotICAgICAgICAiLS1sb2cgZGV0YWlsZWQtcHJvZ3Jl
c3MiLiIiIgotICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxm
Ll90ZXN0X2ZpbGVzX2xpc3QpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgbmV4dF90
ZXN0ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCi0g
ICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCi0gICAgICAgIGlmIHNlbGYuX2N1
cnJlbnRfcHJvZ3Jlc3Nfc3RyID09ICIiOgotICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9n
cmVzc19zdHIgPSAiJXM6ICIgJSAobmV4dF9kaXIpCi0gICAgICAgICAgICBzZWxmLl9jdXJyZW50
X2RpciA9IG5leHRfZGlyCi0KLSAgICAgICAgd2hpbGUgbmV4dF90ZXN0IGluIHJlc3VsdF9zdW1t
YXJ5LnJlc3VsdHM6Ci0gICAgICAgICAgICBpZiBuZXh0X2RpciAhPSBzZWxmLl9jdXJyZW50X2Rp
cjoKLSAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSAoc2VsZi5fY3Vy
cmVudF9wcm9ncmVzc19zdHIpKQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jl
c3Nfc3RyID0gIiVzOiAuIiAlIChuZXh0X2RpcikKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJy
ZW50X2RpciA9IG5leHRfZGlyCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNl
bGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyICs9ICIuIgotCi0gICAgICAgICAgICBpZiAobmV4dF90
ZXN0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cyBhbmQKLSAgICAgICAgICAg
ICAgICBMT0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRpb25zLmxvZyk6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW25leHRfdGVzdF0K
LSAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSBzZWxmLl9jdXJyZW50
X3Byb2dyZXNzX3N0cikKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rl
c3RfcmVzdWx0KG5leHRfdGVzdCwgcmVzdWx0KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJl
bnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgc2VsZi5fY3VycmVudF9kaXIKLQotICAgICAgICAg
ICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciArPSAxCi0gICAgICAgICAgICBpZiBzZWxmLl9j
dXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpOgotICAgICAg
ICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmls
ZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQotICAgICAgICAgICAgbmV4dF9kaXIg
PSBvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCi0KLSAgICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVt
YWluaW5nOgotICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1h
cnkucmVtYWluaW5nKQotICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzJXMiICUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9jdXJyZW50X3Byb2dyZXNz
X3N0ciwgcmVtYWluX3N0cikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9tZXRl
ci5wcm9ncmVzcygiJXNcbiIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQotCi0gICAg
ZGVmIF9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHNlbGYsIHJlc3VsdCk6Ci0gICAgICAg
ICIiIlByaW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgotICAgICAgICBk
ZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3Vs
dC50eXBlXVswXQotICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVk
ICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQucmVsYXRpdmVf
dGVzdF9maWxlbmFtZShyZXN1bHQuZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzYykpCisgICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9l
eHBlY3RhdGlvbnNfc3RyaW5nKAorICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAg
ICAgICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3Ry
aW5nKHJlc3VsdC50eXBlKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jl
c3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQorICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmls
ZXNfbGlzdCkKIAogICAgIGRlZiBfZ2V0X2ZhaWx1cmVzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBp
bmNsdWRlX2NyYXNoZXMpOgogICAgICAgICAiIiJGaWx0ZXJzIGEgZGljdCBvZiByZXN1bHRzIGFu
ZCByZXR1cm5zIG9ubHkgdGhlIGZhaWx1cmVzLgpAQCAtOTExLDgwICs4MzgsNiBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogCiAgICAgICAgIHJldHVybiBmYWlsZWRfcmVzdWx0cwogCi0gICAgZGVmIF9z
dW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeV9z
dW1tYXJ5KToKLSAgICAgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMg
YSBkaWN0LgotCi0gICAgICAgIFRPRE8oZHByYW5rZSk6IHNwbGl0IHRoaXMgZGF0YSBzdHJ1Y3R1
cmUgaW50byBhIHNlcGFyYXRlIGNsYXNzPwotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcmVz
dWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gaW5pdGlhbCB0ZXN0IHJ1bnMKLSAgICAg
ICAgICByZXRyeV9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3QgcnVuIG9m
IHJldHJpZWQgdGVzdHMKLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBBIGRpY3Rpb25hcnkg
Y29udGFpbmluZyBhIHN1bW1hcnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQot
ICAgICAgICAgIHJ1biwgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKLSAgICAgICAgICAgICd2
ZXJzaW9uJzogYSB2ZXJzaW9uIGluZGljYXRvciAoMSBpbiB0aGlzIHZlcnNpb24pCi0gICAgICAg
ICAgICAnZml4YWJsZSc6ICMgb2YgZml4YWJsZSB0ZXN0cyAoTk9XIC0gUEFTUykKLSAgICAgICAg
ICAgICdza2lwcGVkJzogIyBvZiBza2lwcGVkIHRlc3RzIChOT1cgJiBTS0lQUEVEKQotICAgICAg
ICAgICAgJ251bV9yZWdyZXNzaW9ucyc6ICMgb2Ygbm9uLWZsYWt5IGZhaWx1cmVzCi0gICAgICAg
ICAgICAnbnVtX2ZsYWt5JzogIyBvZiBmbGFreSBmYWlsdXJlcwotICAgICAgICAgICAgJ251bV9w
YXNzZXMnOiAjIG9mIHVuZXhwZWN0ZWQgcGFzc2VzCi0gICAgICAgICAgICAndGVzdHMnOiBhIGRp
Y3Qgb2YgdGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4nLCAnYWN0dWFsJzogJy4uLid9Ci0gICAg
ICAgICIiIgotICAgICAgICByZXN1bHRzID0ge30KLSAgICAgICAgcmVzdWx0c1sndmVyc2lvbidd
ID0gMQotCi0gICAgICAgIHRiZSA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9u
Ci0gICAgICAgIHRidCA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lCi0gICAgICAg
IHJlc3VsdHNbJ2ZpeGFibGUnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlvbnMuUEFT
U10pCi0gICAgICAgIHJlc3VsdHNbJ3NraXBwZWQnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlv
bnMuTk9XXSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBl
Y3RhdGlvbnMuU0tJUF0pCi0KLSAgICAgICAgbnVtX3Bhc3NlcyA9IDAKLSAgICAgICAgbnVtX2Zs
YWt5ID0gMAotICAgICAgICBudW1fcmVncmVzc2lvbnMgPSAwCi0gICAgICAgIGtleXdvcmRzID0g
e30KLSAgICAgICAgZm9yIGssIHYgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05T
Lml0ZXJpdGVtcygpOgotICAgICAgICAgICAga2V5d29yZHNbdl0gPSBrLnVwcGVyKCkKLQotICAg
ICAgICB0ZXN0cyA9IHt9Ci0gICAgICAgIGZvciBmaWxlbmFtZSwgcmVzdWx0IGluIHJlc3VsdF9z
dW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICMgTm90
ZSB0aGF0IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5hbCBydW4sIHdlIGlnbm9yZQot
ICAgICAgICAgICAgIyB3aGV0aGVyIG9yIG5vdCBpdCBjcmFzaGVkIHdoZW4gd2UgcmV0cmllZCBp
dCAoaWYgd2UgcmV0cmllZCBpdCksCi0gICAgICAgICAgICAjIGFuZCBhbHdheXMgY29uc2lkZXIg
dGhlIHJlc3VsdCBub3QgZmxha3kuCi0gICAgICAgICAgICB0ZXN0ID0gc2VsZi5fcG9ydC5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxm
Ll9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoZmlsZW5hbWUpCi0gICAgICAg
ICAgICBhY3R1YWwgPSBba2V5d29yZHNbcmVzdWx0XV0KLQotICAgICAgICAgICAgaWYgcmVzdWx0
ID09IHRlc3RfZXhwZWN0YXRpb25zLlBBU1M6Ci0gICAgICAgICAgICAgICAgbnVtX3Bhc3NlcyAr
PSAxCi0gICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoK
LSAgICAgICAgICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQotICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gcmV0cnlfc3VtbWFyeS51bmV4cGVj
dGVkX3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgICAgIGFjdHVhbC5leHRlbmQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJp
bmcoCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkuc3BsaXQoIiAiKSkKLSAgICAg
ICAgICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKLSAgICAgICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgICAgICByZXRyeV9yZXN1bHQgPSByZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRf
cmVzdWx0c1tmaWxlbmFtZV0KLSAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0ICE9IHJldHJ5
X3Jlc3VsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5hcHBlbmQoa2V5d29yZHNb
cmV0cnlfcmVzdWx0XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCi0g
ICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBudW1fcmVn
cmVzc2lvbnMgKz0gMQotCi0gICAgICAgICAgICB0ZXN0c1t0ZXN0XSA9IHt9Ci0gICAgICAgICAg
ICB0ZXN0c1t0ZXN0XVsnZXhwZWN0ZWQnXSA9IGV4cGVjdGVkCi0gICAgICAgICAgICB0ZXN0c1t0
ZXN0XVsnYWN0dWFsJ10gPSAiICIuam9pbihhY3R1YWwpCi0KLSAgICAgICAgcmVzdWx0c1sndGVz
dHMnXSA9IHRlc3RzCi0gICAgICAgIHJlc3VsdHNbJ251bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMK
LSAgICAgICAgcmVzdWx0c1snbnVtX2ZsYWt5J10gPSBudW1fZmxha3kKLSAgICAgICAgcmVzdWx0
c1snbnVtX3JlZ3Jlc3Npb25zJ10gPSBudW1fcmVncmVzc2lvbnMKLQotICAgICAgICByZXR1cm4g
cmVzdWx0cwotCiAgICAgZGVmIF93cml0ZV9qc29uX2ZpbGVzKHNlbGYsIHVuZXhwZWN0ZWRfcmVz
dWx0cywgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIldyaXRlcyB0aGUgcmVzdWx0cyBvZiB0aGUgdGVz
dCBydW4gYXMgSlNPTiBmaWxlcyBpbnRvIHRoZSByZXN1bHRzCkBAIC0xMDI1LDEzICs4NzgsMTEg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBfbG9nLmRlYnVnKCJGaW5pc2hlZCB3cml0
aW5nIEpTT04gZmlsZXMuIikKIAotICAgIGRlZiBfcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90
eXBlKHNlbGYsIHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICBkZWYgX3ByaW50X2V4cGVjdGVk
X3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCByZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfdHlwZSwgcmVzdWx0X3R5cGVfc3RyKToKICAg
ICAgICAgIiIiUHJpbnQgdGhlIG51bWJlciBvZiB0aGUgdGVzdHMgaW4gYSBnaXZlbiByZXN1bHQg
Y2xhc3MuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3
cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgc3lz
LnN0ZG91dC53cml0ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeSAtIHRoZSBvYmplY3QgY29u
dGFpbmluZyBhbGwgdGhlIHJlc3VsdHMgdG8gcmVwb3J0IG9uCiAgICAgICAgICAgcmVzdWx0X3R5
cGUgLSB0aGUgcGFydGljdWxhciByZXN1bHQgdHlwZSB0byByZXBvcnQgaW4gdGhlIHN1bW1hcnku
CiAgICAgICAgICAgcmVzdWx0X3R5cGVfc3RyIC0gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhl
IHJlc3VsdF90eXBlLgpAQCAtMTA0Niw4ICs4OTcsOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAg
ICAgICBmbXRzdHIgPSAoIkV4cGVjdDogJSU1ZCAlJS04cyAoJSUlZGQgbm93LCAlJSVkZCBkZWZl
ciwgJSUlZGQgd29udGZpeCkiCiAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9udW1fZGlnaXRz
KG5vdyksIHNlbGYuX251bV9kaWdpdHMoZGVmZXIpLAogICAgICAgICAgICAgICAgICAgc2VsZi5f
bnVtX2RpZ2l0cyh3b250Zml4KSkpCi0gICAgICAgIHdyaXRlKGZtdHN0ciAlIChsZW4odGVzdHMp
LCByZXN1bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksCi0gICAgICAgICAgICAgIGxlbih0
ZXN0cyAmIGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X2V4cGVjdGVkKGZtdHN0ciAlCisgICAgICAgICAgICAobGVuKHRlc3RzKSwgcmVz
dWx0X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cpLAorICAgICAgICAgICAgIGxlbih0ZXN0cyAm
IGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQogCiAgICAgZGVmIF9udW1fZGlnaXRzKHNl
bGYsIG51bSk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBkaWdpdHMgbmVlZGVk
IHRvIHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9mIGEKQEAgLTEwNTcsNDMgKzkwOSwzOSBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICAgICAgbmRpZ2l0cyA9IGludChtYXRoLmxvZzEwKGxlbihu
dW0pKSkgKyAxCiAgICAgICAgIHJldHVybiBuZGlnaXRzCiAKLSAgICBkZWYgX3ByaW50X3RpbWlu
Z19zdGF0aXN0aWNzKHNlbGYsIHdyaXRlLCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKKyAg
ICBkZWYgX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHNlbGYsIHRvdGFsX3RpbWUsIHRocmVhZF90
aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3Rp
bWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUmVjb3JkIHRpbWluZy1zcGVjaWZp
YyBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlc3QgcnVuLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAg
ICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3Jp
dGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHRvdGFs
X3RpbWU6IHRvdGFsIGVsYXBzZWQgdGltZSAoaW4gc2Vjb25kcykgZm9yIHRoZSB0ZXN0IHJ1bgog
ICAgICAgICAgIHRocmVhZF90aW1pbmdzOiB3YWxsIGNsb2NrIHRpbWUgZWFjaCB0aHJlYWQgcmFu
IGZvcgogICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBkaXJlY3Rv
cnkKICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGZpbGUKICAg
ICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9yIHRoZSB0ZXN0IHJ1bgog
ICAgICAgICAiIiIKLSAgICAgICAgd3JpdGUoIlRlc3QgdGltaW5nOiIpCi0gICAgICAgIHdyaXRl
KCIgICU2LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIgJSB0b3RhbF90aW1lKQotICAgICAgICB3cml0
ZSgiIikKLSAgICAgICAgd3JpdGUoIlRocmVhZCB0aW1pbmc6IikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIlRlc3QgdGltaW5nOiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdGltaW5nKCIgICU2LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIgJSB0b3RhbF90aW1lKQor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIlRocmVhZCB0aW1pbmc6IikKICAgICAgICAgY3VtbF90aW1lID0g
MAogICAgICAgICBmb3IgdCBpbiB0aHJlYWRfdGltaW5nczoKLSAgICAgICAgICAgIHdyaXRlKCIg
ICAgJTEwczogJTVkIHRlc3RzLCAlNi4yZiBzZWNzIiAlCisgICAgICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3RpbWluZygiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQogICAg
ICAgICAgICAgICAgICAgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUn
XSkpCiAgICAgICAgICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSddCi0gICAgICAgIHdy
aXRlKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlCisgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFs
IiAlCiAgICAgICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIGludChzZWxmLl9vcHRp
b25zLmNoaWxkX3Byb2Nlc3NlcykpKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF90aW1pbmcoIiIpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRl
X3Rlc3Rfc3RhdGlzdGljcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCi0gICAgICAg
IHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MsCisgICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Mo
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50X2luZGl2aWR1YWxf
dGVzdF90aW1lcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBzZWxmLl9wcmlu
dF9kaXJlY3RvcnlfdGltaW5ncyh3cml0ZSwgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKKyAgICAg
ICAgc2VsZi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3MoZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykK
IAotICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rf
c3RhdGlzdGljcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIlBy
aW50cyBhZ2dyZWdhdGUgc3RhdGlzdGljcyAoZS5nLiBtZWRpYW4sIG1lYW4sIGV0Yy4pIGZvciBh
bGwgdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8g
d3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBz
eXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0
IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwogICAgICAgICAgICAgICBmb3Ig
YWxsIHRlc3RzLgogICAgICAgICAiIiIKQEAgLTExMTUsMjMgKzk2MywyMSBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXS5h
cHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZV0pCiAK
LSAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAor
ICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAg
ICAgICAiUEVSIFRFU1QgVElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMpOiIsCiAgICAgICAgICAg
ICB0aW1lc19mb3JfZHVtcF9yZW5kZXJfdHJlZSkKLSAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlz
dGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0
aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAiUEVSIFRFU1QgRElGRiBQUk9DRVNT
SU5HIFRJTUVTIChzZWNvbmRzKToiLAogICAgICAgICAgICAgdGltZXNfZm9yX2RpZmZfcHJvY2Vz
c2luZykKICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgotICAgICAgICAgICAg
c2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKAogICAgICAgICAgICAg
ICAgICJQRVIgVEVTVCBUSU1FUyBCWSBURVNUIFRZUEU6ICVzIiAlIHRlc3RfdHlwZSwKICAgICAg
ICAgICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlwZV0pCiAKLSAgICBkZWYgX3By
aW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhzZWxmLCB3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MsCisgICAgZGVmIF9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoc2VsZiwgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJQcmludHMgdGhlIHJ1biB0aW1lcyBmb3Igc2xvdywg
dGltZW91dCBhbmQgY3Jhc2ggdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6
IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgot
ICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzOiBMaXN0IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwogICAg
ICAgICAgICAgICBmb3IgYWxsIHRlc3RzLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1t
YXJ5IG9iamVjdCBmb3IgdGVzdCBydW4KQEAgLTExNTMsNTMgKzk5OSw1MyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCiAK
ICAgICAgICAgICAgIGlmIGZpbGVuYW1lIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzOgotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbZmlsZW5hbWVdCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0c1tmaWxlbmFtZV0u
dHlwZQogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElN
RU9VVCBvcgogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMu
Q1JBU0gpOgogICAgICAgICAgICAgICAgICAgICBpc190aW1lb3V0X2NyYXNoX29yX3Nsb3cgPSBU
cnVlCiAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMuYXBwZW5kKHRl
c3RfdHVwbGUpCiAKICAgICAgICAgICAgIGlmIChub3QgaXNfdGltZW91dF9jcmFzaF9vcl9zbG93
IGFuZAotICAgICAgICAgICAgICAgIG51bV9wcmludGVkIDwgc2VsZi5fb3B0aW9ucy5udW1fc2xv
d190ZXN0c190b19sb2cpOgorICAgICAgICAgICAgICAgIG51bV9wcmludGVkIDwgcHJpbnRpbmcu
TlVNX1NMT1dfVEVTVFNfVE9fTE9HKToKICAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA9IG51
bV9wcmludGVkICsgMQogICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRfc2xvd190ZXN0cy5hcHBl
bmQodGVzdF90dXBsZSkKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRf
dGVzdF9saXN0X3RpbWluZyh3cml0ZSwgIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90ICIK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3By
aW50X3Rlc3RfbGlzdF90aW1pbmcoIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90ICIKICAg
ICAgICAgICAgICJtYXJrZWQgYXMgU0xPVyBhbmQgZGlkIG5vdCB0aW1lb3V0L2NyYXNoOiIgJQot
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5udW1fc2xvd190ZXN0c190b19sb2csIHVuZXhwZWN0
ZWRfc2xvd190ZXN0cykKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Rl
c3RfbGlzdF90aW1pbmcod3JpdGUsICJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMpCi0gICAgICAgIHdyaXRlKCIi
KQotICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgdGhh
dCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAorICAgICAgICAgICAgcHJpbnRpbmcuTlVNX1NMT1df
VEVTVFNfVE9fTE9HLCB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5n
KCJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLCBzbG93X3Rlc3RzKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWlu
ZygiVGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMpCi0gICAgICAgIHdyaXRl
KCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKIAotICAgIGRlZiBf
cHJpbnRfdGVzdF9saXN0X3RpbWluZyhzZWxmLCB3cml0ZSwgdGl0bGUsIHRlc3RfbGlzdCk6Cisg
ICAgZGVmIF9wcmludF90ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHRpdGxlLCB0ZXN0X2xpc3QpOgog
ICAgICAgICAiIiJQcmludCB0aW1pbmcgaW5mbyBmb3IgZWFjaCB0ZXN0LgogCiAgICAgICAgIEFy
Z3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwg
YSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAg
ICAgICAgIHRpdGxlOiBzZWN0aW9uIGhlYWRpbmcKICAgICAgICAgICB0ZXN0X2xpc3Q6IHRlc3Rz
IHRoYXQgZmFsbCBpbiB0aGlzIHNlY3Rpb24KICAgICAgICAgIiIiCi0gICAgICAgIHdyaXRlKHRp
dGxlKQorICAgICAgICBpZiAobm90ICdzbG93ZXN0JyBpbiBzZWxmLl9vcHRpb25zLmxvZyBhbmQg
bm90ICdldmVyeWluZycgaW4KKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubG9nKToKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKHRpdGxl
KQogICAgICAgICBmb3IgdGVzdF90dXBsZSBpbiB0ZXN0X2xpc3Q6CiAgICAgICAgICAgICBmaWxl
bmFtZSA9IHRlc3RfdHVwbGUuZmlsZW5hbWVbbGVuKAogICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cnQubGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XQogICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxl
bmFtZS5yZXBsYWNlKCdcXCcsICcvJykKICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWUgPSByb3Vu
ZCh0ZXN0X3R1cGxlLnRlc3RfcnVuX3RpbWUsIDEpCi0gICAgICAgICAgICB3cml0ZSgiICAlcyB0
b29rICVzIHNlY29uZHMiICUgKGZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lKSkKKyAgICAgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICVzIHRvb2sgJXMgc2Vjb25kcyIgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVuYW1lLCB0ZXN0X3J1bl90
aW1lKSkKIAotICAgIGRlZiBfcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Moc2VsZiwgd3JpdGUsIGRp
cmVjdG9yeV90ZXN0X3RpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Mo
c2VsZiwgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIlByaW50IHRpbWluZyBp
bmZvIGJ5IGRpcmVjdG9yeSBmb3IgYW55IGRpcmVjdG9yaWVzIHRoYXQKICAgICAgICAgdGFrZSA+
IDEwIHNlY29uZHMgdG8gcnVuLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEg
Y2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAg
ICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3Rp
bWluZzogdGltZSBpbmZvIGZvciBlYWNoIGRpcmVjdG9yeQogICAgICAgICAiIiIKICAgICAgICAg
dGltaW5ncyA9IFtdCkBAIC0xMjA5LDI1ICsxMDU1LDI0IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Rlc3RzKSkKICAgICAgICAgdGltaW5ncy5z
b3J0KCkKIAotICAgICAgICB3cml0ZSgiVGltZSB0byBwcm9jZXNzIHNsb3dlc3Qgc3ViZGlyZWN0
b3JpZXM6IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRpbWUgdG8gcHJv
Y2VzcyBzbG93ZXN0IHN1YmRpcmVjdG9yaWVzOiIpCiAgICAgICAgIG1pbl9zZWNvbmRzX3RvX3By
aW50ID0gMTAKICAgICAgICAgZm9yIHRpbWluZyBpbiB0aW1pbmdzOgogICAgICAgICAgICAgaWYg
dGltaW5nWzBdID4gbWluX3NlY29uZHNfdG9fcHJpbnQ6Ci0gICAgICAgICAgICAgICAgd3JpdGUo
IiAgJXMgdG9vayAlcyBzZWNvbmRzIHRvIHJ1biAlcyB0ZXN0cy4iICUgKHRpbWluZ1sxXSwKLSAg
ICAgICAgICAgICAgICAgICAgICB0aW1pbmdbMF0sIHRpbWluZ1syXSkpCi0gICAgICAgIHdyaXRl
KCIiKQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKAorICAgICAg
ICAgICAgICAgICAgICAiICAlcyB0b29rICVzIHNlY29uZHMgdG8gcnVuICVzIHRlc3RzLiIgJSAo
dGltaW5nWzFdLAorICAgICAgICAgICAgICAgICAgICB0aW1pbmdbMF0sIHRpbWluZ1syXSkpCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQogCi0gICAgZGVmIF9wcmludF9z
dGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Moc2VsZiwgd3JpdGUsIHRpdGxlLCB0aW1pbmdzKToK
KyAgICBkZWYgX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyhzZWxmLCB0aXRsZSwg
dGltaW5ncyk6CiAgICAgICAgICIiIlByaW50cyB0aGUgbWVkaWFuLCBtZWFuIGFuZCBzdGFuZGFy
ZCBkZXZpYXRpb24gb2YgdGhlIHZhbHVlcyBpbgogICAgICAgICB0aW1pbmdzLgogCiAgICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5n
LiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgog
ICAgICAgICAgIHRpdGxlOiBUaXRsZSBmb3IgdGhlc2UgdGltaW5ncy4KICAgICAgICAgICB0aW1p
bmdzOiBBIGxpc3Qgb2YgZmxvYXRzIHJlcHJlc2VudGluZyB0aW1lcy4KICAgICAgICAgIiIiCi0g
ICAgICAgIHdyaXRlKHRpdGxlKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZyh0
aXRsZSkKICAgICAgICAgdGltaW5ncy5zb3J0KCkKIAogICAgICAgICBudW1fdGVzdHMgPSBsZW4o
dGltaW5ncykKQEAgLTEyNDksMTkgKzEwOTQsMTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAg
ICAgICAgIHN1bV9vZl9kZXZpYXRpb25zID0gbWF0aC5wb3codGltZSAtIG1lYW4sIDIpCiAKICAg
ICAgICAgc3RkX2RldmlhdGlvbiA9IG1hdGguc3FydChzdW1fb2ZfZGV2aWF0aW9ucyAvIG51bV90
ZXN0cykKLSAgICAgICAgd3JpdGUoIiAgTWVkaWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRpYW4p
Ci0gICAgICAgIHdyaXRlKCIgIE1lYW46ICAgICAgICAgICAgJTYuM2YiICUgbWVhbikKLSAgICAg
ICAgd3JpdGUoIiAgOTB0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTApCi0gICAg
ICAgIHdyaXRlKCIgIDk5dGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTk5KQotICAg
ICAgICB3cml0ZSgiICBTdGFuZGFyZCBkZXY6ICAgICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCi0g
ICAgICAgIHdyaXRlKCIiKQotCi0gICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCB3
cml0ZSwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWlu
ZygiICBNZWRpYW46ICAgICAgICAgICU2LjNmIiAlIG1lZGlhbikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiAgTWVhbjogICAgICAgICAgICAlNi4zZiIgJSBtZWFuKQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICA5MHRoIHBlcmNlbnRpbGU6ICU2LjNm
IiAlIHBlcmNlbnRpbGU5MCkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAg
OTl0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTkpCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCIgIFN0YW5kYXJkIGRldjogICAgJTYuM2YiICUgc3RkX2Rldmlh
dGlvbikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisKKyAgICBkZWYg
X3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIi
UHJpbnQgYSBzaG9ydCBzdW1tYXJ5IGFib3V0IGhvdyBtYW55IHRlc3RzIHBhc3NlZC4KIAogICAg
ICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8g
KGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0
ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogaW5mb3JtYXRpb24gdG8gbG9nCiAgICAgICAg
ICIiIgogICAgICAgICBmYWlsZWQgPSBsZW4ocmVzdWx0X3N1bW1hcnkuZmFpbHVyZXMpCkBAIC0x
MjczLDMwICsxMTE2LDI4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlmIHRvdGFsID4g
MDoKICAgICAgICAgICAgIHBjdF9wYXNzZWQgPSBmbG9hdChwYXNzZWQpICogMTAwIC8gdG90YWwK
IAotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgd3JpdGUoIj0+IFJlc3VsdHM6ICVkLyVkIHRl
c3RzIHBhc3NlZCAoJS4xZiUlKSIgJQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVh
bCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIj0+IFJlc3VsdHM6ICVk
LyVkIHRlc3RzIHBhc3NlZCAoJS4xZiUlKSIgJQogICAgICAgICAgICAgICAgICAgICAgKHBhc3Nl
ZCwgdG90YWwsIHBjdF9wYXNzZWQpKQotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5f
cHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVz
dWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVj
dGF0aW9ucy5OT1csICJUZXN0cyB0byBiZSBmaXhlZCBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZSIp
CiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5
X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJl
c3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuREVGRVIsCiAgICAg
ICAgICAgICAiVGVzdHMgd2UnbGwgZml4IGluIHRoZSBmdXR1cmUgaWYgdGhleSBmYWlsIChERUZF
UikiKQogCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3Vt
bWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRy
eShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLldPTlRGSVgs
CiAgICAgICAgICAgICAiVGVzdHMgdGhhdCB3aWxsIG9ubHkgYmUgZml4ZWQgaWYgdGhleSBjcmFz
aCAoV09OVEZJWCkiKQogCi0gICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShzZWxm
LCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksIHRpbWVsaW5lLAorICAgIGRlZiBfcHJpbnRfcmVzdWx0
X3N1bW1hcnlfZW50cnkoc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRpbWVsaW5lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZyk6CiAgICAgICAgICIiIlByaW50IGEg
c3VtbWFyeSBibG9jayBvZiByZXN1bHRzIGZvciBhIHBhcnRpY3VsYXIgdGltZWxpbmUgb2YgdGVz
dC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRl
IGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0
ZG91dC53cml0ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSB0byBwcmludCBy
ZXN1bHRzIGZvcgogICAgICAgICAgIHRpbWVsaW5lOiB0aGUgdGltZWxpbmUgdG8gcHJpbnQgcmVz
dWx0cyBmb3IgKE5PVCwgV09OVEZJWCwgZXRjLikKICAgICAgICAgICBoZWFkaW5nOiBhIHRleHR1
YWwgZGVzY3JpcHRpb24gb2YgdGhlIHRpbWVsaW5lCkBAIC0xMzA1LDcgKzExNDYsNyBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICBub3RfcGFzc2luZyA9ICh0b3RhbCAtCiAgICAgICAgICAg
IGxlbihyZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9u
cy5QQVNTXSAmCiAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGlu
ZVt0aW1lbGluZV0pKQotICAgICAgICB3cml0ZSgiPT4gJXMgKCVkKToiICUgKGhlYWRpbmcsIG5v
dF9wYXNzaW5nKSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIj0+ICVzICgl
ZCk6IiAlIChoZWFkaW5nLCBub3RfcGFzc2luZykpCiAKICAgICAgICAgZm9yIHJlc3VsdCBpbiBU
ZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9PUkRFUjoKICAgICAgICAgICAgIGlmIHJl
c3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgpAQCAtMTMxNSw5NCArMTE1Niw4IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUu
RVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF0KICAgICAgICAgICAgIGlmIG5vdF9wYXNz
aW5nIGFuZCBsZW4ocmVzdWx0cyk6CiAgICAgICAgICAgICAgICAgcGN0ID0gbGVuKHJlc3VsdHMp
ICogMTAwLjAgLyBub3RfcGFzc2luZwotICAgICAgICAgICAgICAgIHdyaXRlKCIgICU1ZCAlLTI0
cyAoJTQuMWYlJSkiICUgKGxlbihyZXN1bHRzKSwKLSAgICAgICAgICAgICAgICAgICAgICBkZXNj
W2xlbihyZXN1bHRzKSAhPSAxXSwgcGN0KSkKLQotICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfc3Vt
bWFyeShzZWxmLCB0b3RhbCwgZXhwZWN0ZWQpOgotICAgICAgICAiIiJQcmludCBhIG9uZS1saW5l
IHN1bW1hcnkgb2YgdGhlIHRlc3QgcnVuIHRvIHN0ZG91dC4KLQotICAgICAgICBBcmdzOgotICAg
ICAgICAgIHRvdGFsOiB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuCi0gICAgICAgICAgZXhwZWN0
ZWQ6IG51bWJlciBvZiBleHBlY3RlZCByZXN1bHRzCi0gICAgICAgICIiIgotICAgICAgICB1bmV4
cGVjdGVkID0gdG90YWwgLSBleHBlY3RlZAotICAgICAgICBpZiB1bmV4cGVjdGVkID09IDA6Ci0g
ICAgICAgICAgICBwcmludCAiQWxsICVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZC4iICUgZXhwZWN0
ZWQKLSAgICAgICAgZWxpZiBleHBlY3RlZCA9PSAxOgotICAgICAgICAgICAgcHJpbnQgIjEgdGVz
dCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoiICUgdW5leHBlY3RlZAotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgcHJpbnQgIiVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0
OiIgJSAoZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgdW5leHBlY3RlZCkKLQotICAgIGRlZiBf
cHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cyk6Ci0gICAg
ICAgICIiIlByaW50cyBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGluIGEgaHVtYW4tcmVhZGFibGUg
Zm9ybSB0byBzdGRvdXQuIiIiCi0gICAgICAgIHBhc3NlcyA9IHt9Ci0gICAgICAgIGZsYWt5ID0g
e30KLSAgICAgICAgcmVncmVzc2lvbnMgPSB7fQotCi0gICAgICAgIGlmIGxlbih1bmV4cGVjdGVk
X3Jlc3VsdHNbJ3Rlc3RzJ10pOgotICAgICAgICAgICAgcHJpbnQgIiIKLQotICAgICAgICBmb3Ig
dGVzdCwgcmVzdWx0cyBpbiB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10uaXRlcml0ZW1zKCk6
Ci0gICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRzWydhY3R1YWwnXS5zcGxpdCgiICIpCi0gICAg
ICAgICAgICBleHBlY3RlZCA9IHJlc3VsdHNbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQotICAgICAg
ICAgICAgaWYgYWN0dWFsID09IFsnUEFTUyddOgotICAgICAgICAgICAgICAgIGlmICdDUkFTSCcg
aW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhw
YXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0
ZWQgdG8gY3Jhc2gsIGJ1dCBwYXNzZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdCkKLSAgICAgICAgICAgICAgICBlbGlmICdUSU1FT1VUJyBpbiBleHBl
Y3RlZDoKLSAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byB0
aW1lb3V0LCBidXQgcGFzc2VkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
IF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gZmFpbCwgYnV0IHBhc3NlZCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQotICAgICAgICAgICAgZWxp
ZiBsZW4oYWN0dWFsKSA+IDE6Ci0gICAgICAgICAgICAgICAgIyBXZSBncm91cCBmbGFreSB0ZXN0
cyBieSB0aGUgZmlyc3QgYWN0dWFsIHJlc3VsdCB3ZSBnb3QuCi0gICAgICAgICAgICAgICAgX2Fk
ZF90b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3QpCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhyZWdyZXNzaW9ucywg
cmVzdWx0c1snYWN0dWFsJ10sIHRlc3QpCi0KLSAgICAgICAgaWYgbGVuKHBhc3Nlcyk6Ci0gICAg
ICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBwYXNzZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAg
ICAgICAgcHJpbnQgIiVzOiAoJWQpIiAlIChrZXksIGxlbih0ZXN0cykpCi0gICAgICAgICAgICAg
ICAgdGVzdHMuc29ydCgpCi0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAg
ICAgICAgICAgICAgICAgIHByaW50ICIgICVzIiAlIHRlc3QKLSAgICAgICAgICAgICAgICBwcmlu
dAotCi0gICAgICAgIGlmIGxlbihmbGFreSk6Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBU
ZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKLSAgICAgICAgICAg
IGZvciBrZXksIHRlc3RzIGluIGZsYWt5Lml0ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KLSAg
ICAgICAgICAgICAgICBwcmludCAiVW5leHBlY3RlZCBmbGFraW5lc3M6ICVzICglZCkiICUgKAot
ICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpCi0g
ICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCi0KLSAgICAgICAgICAgICAgICBmb3IgdGVzdCBp
biB0ZXN0czoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdW5leHBlY3RlZF9yZXN1bHRz
Wyd0ZXN0cyddW3Rlc3RdCi0gICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdFsnYWN0
dWFsJ10uc3BsaXQoIiAiKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdFsn
ZXhwZWN0ZWQnXS5zcGxpdCgiICIpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RF
eHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KLSAgICAgICAgICAgICAg
ICAgICAgbmV3X2V4cGVjdGF0aW9uc19saXN0ID0gbGlzdChzZXQoYWN0dWFsKSB8IHNldChleHBl
Y3RlZCkpCi0gICAgICAgICAgICAgICAgICAgIHByaW50ICIgICVzID0gJXMiICUgKHRlc3QsICIg
Ii5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlzdCkpCi0gICAgICAgICAgICAgICAgcHJpbnQKLQot
ICAgICAgICBpZiBsZW4ocmVncmVzc2lvbnMpOgotICAgICAgICAgICAgZGVzY3JpcHRpb25zID0g
VGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCi0gICAgICAgICAg
ICBmb3Iga2V5LCB0ZXN0cyBpbiByZWdyZXNzaW9ucy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2Vy
KCldCi0gICAgICAgICAgICAgICAgcHJpbnQgIlJlZ3Jlc3Npb25zOiBVbmV4cGVjdGVkICVzIDog
KCVkKSIgJSAoCi0gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVu
KHRlc3RzKSkKLSAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKLSAgICAgICAgICAgICAgICBm
b3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMgPSAlcyIg
JSAodGVzdCwga2V5KQotICAgICAgICAgICAgICAgIHByaW50Ci0KLSAgICAgICAgaWYgbGVuKHVu
ZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSkgYW5kIHNlbGYuX29wdGlvbnMudmVyYm9zZToKLSAg
ICAgICAgICAgIHByaW50ICItIiAqIDc4CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF9hY3R1YWwoIiAgJTVkICUtMjRzICglNC4xZiUlKSIgJQorICAgICAgICAgICAgICAgICAg
ICAobGVuKHJlc3VsdHMpLCBkZXNjW2xlbihyZXN1bHRzKSAhPSAxXSwgcGN0KSkKIAogICAgIGRl
ZiBfd3JpdGVfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAg
ICAiIiJXcml0ZSByZXN1bHRzLmh0bWwgd2hpY2ggaXMgYSBzdW1tYXJ5IG9mIHRlc3RzIHRoYXQg
ZmFpbGVkLgpAQCAtMTQ2MiwxMCArMTIxNyw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
IHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX2ZpbGVuYW1lKQogCiAK
LWRlZiBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZGljdCwga2V5LCB2YWx1ZSk6Ci0gICAgZGljdC5z
ZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKLQotCiBkZWYgcmVhZF90ZXN0X2ZpbGVz
KGZpbGVzKToKICAgICB0ZXN0cyA9IFtdCiAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CkBAIC0xNDc3
LDI1ICsxMjI4LDExIEBAIGRlZiByZWFkX3Rlc3RfZmlsZXMoZmlsZXMpOgogICAgIHJldHVybiB0
ZXN0cwogCiAKLWRlZiBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgbG9nX29wdGlvbik6
Ci0gICAgIiIiUmV0dXJucyBhIHdyaXRlKCkgZnVuY3Rpb24gdGhhdCB3aWxsIHdyaXRlIHRoZSBz
dHJpbmcgdG8gX2xvZy5pbmZvKCkKLSAgICBpZiBjb21wIHdhcyBzcGVjaWZpZWQgaW4gLS1sb2cg
b3IgaWYgLS12ZXJib3NlIGlzIHRydWUuIE90aGVyd2lzZSB0aGUKLSAgICBtZXNzYWdlIGlzIGRy
b3BwZWQuCi0KLSAgICBBcmdzOgotICAgICAgb3B0aW9uczogbGlzdCBvZiBjb21tYW5kIGxpbmUg
b3B0aW9ucyBmcm9tIG9wdHBhcnNlCi0gICAgICBsb2dfb3B0aW9uOiBvcHRpb24gdG8gbWF0Y2gg
aW4gb3B0aW9ucy5sb2cgaW4gb3JkZXIgZm9yIHRoZSBtZXNzYWdlcwotICAgICAgICAgIHRvIGJl
IGxvZ2dlZCAoZS5nLiwgJ2FjdHVhbCcgb3IgJ2V4cGVjdGVkJykKLSAgICAiIiIKLSAgICBpZiBv
cHRpb25zLnZlcmJvc2Ugb3IgbG9nX29wdGlvbiBpbiBvcHRpb25zLmxvZy5zcGxpdCgiLCIpOgot
ICAgICAgICByZXR1cm4gX2xvZy5pbmZvCi0gICAgcmV0dXJuIGxhbWJkYSBzdHI6IDEKLQotCi1k
ZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgorZGVmIHJ1bihwb3J0
X29iaiwgb3B0aW9ucywgYXJncyk6CiAgICAgIiIiUnVuIHRoZSB0ZXN0cy4KIAogICAgIEFyZ3M6
CisgICAgICBwb3J0X29iajogUG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgYmVoYXZpb3IK
ICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAg
ICAgYXJnczogYSBsaXN0IG9mIHN1YiBkaXJlY3RvcmllcyBvciBmaWxlcyB0byB0ZXN0CiAgICAg
ICBwcmludF9yZXN1bHRzOiB3aGV0aGVyIG9yIG5vdCB0byBsb2cgYW55dGhpbmcgdG8gc3Rkb3V0
LgpAQCAtMTUwNSwyMiArMTI0MiwyMSBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9y
ZXN1bHRzPVRydWUpOgogICAgICAgICAgIGVycm9yLgogICAgICIiIgogCi0gICAgaWYgb3B0aW9u
cy5zb3VyY2VzOgotICAgICAgICBvcHRpb25zLnZlcmJvc2UgPSBUcnVlCisgICAgIyBDb25maWd1
cmUgdGhlIHByaW50aW5nIHN1YnN5c3RlbSBmb3IgcHJpbnRpbmcgb3V0cHV0LCBsb2dnaW5nIGRl
YnVnCisgICAgIyBpbmZvLCBhbmQgdHJhY2luZyB0ZXN0cy4KKworICAgIGlmIG5vdCBvcHRpb25z
LmNoaWxkX3Byb2Nlc3NlczoKKyAgICAgICAgIyBGSVhNRTogSW52ZXN0aWdhdGUgcGVyZi9mbGFr
aW5lc3MgaW1wYWN0IG9mIHVzaW5nIGNwdV9jb3VudCArIDEuCisgICAgICAgIG9wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzID0gcG9ydF9vYmouZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKQogCi0gICAg
IyBTZXQgdXAgb3VyIGxvZ2dpbmcgZm9ybWF0LgotICAgIG1ldGVyID0gbWV0ZXJlZF9zdHJlYW0u
TWV0ZXJlZFN0cmVhbShvcHRpb25zLnZlcmJvc2UsIHN5cy5zdGRlcnIpCi0gICAgbG9nX2ZtdCA9
ICclKG1lc3NhZ2UpcycKLSAgICBsb2dfZGF0ZWZtdCA9ICcleSVtJWQgJUg6JU06JVMnCi0gICAg
bG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCi0gICAgaWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAg
ICBsb2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6JShsaW5lbm8pLTRkICUobGV2
ZWxuYW1lKXMgJwotICAgICAgICAgICAgICAgICAgJyUobWVzc2FnZSlzJykKLSAgICAgICAgbG9n
X2xldmVsID0gbG9nZ2luZy5ERUJVRwotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9n
X2xldmVsLCBmb3JtYXQ9bG9nX2ZtdCwgZGF0ZWZtdD1sb2dfZGF0ZWZtdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cmVhbT1tZXRlcikKKyAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRl
cihwb3J0X29iaiwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKKyAgICAgICAg
YnVpbGRib3Rfb3V0cHV0PXN5cy5zdGRvdXQsCisgICAgICAgIGNoaWxkX3Byb2Nlc3Nlcz1pbnQo
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLAorICAgICAgICBpc19mdWxseV9wYXJhbGxlbD1vcHRp
b25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICBpZiBvcHRpb25zLmhlbHBfcHJp
bnRpbmc6CisgICAgICAgIHByaW50ZXIuaGVscF9wcmludGluZygpCisgICAgICAgIHJldHVybiAw
CiAKLSAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCiAg
ICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKIAogICAgIGlmIG5vdCBvcHRpb25zLmNvbmZpZ3Vy
YXRpb246CkBAIC0xNTU2LDggKzEyOTIsOCBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmlu
dF9yZXN1bHRzPVRydWUpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3Qg
cmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKICAgICAgICAgIyBmaWxlcyBpbiB0
aGUgcmVzdWx0cyBkaXJlY3RvcnkgYXJlIGV4cGxpY2l0bHkgdXNlZCBmb3IgY3Jvc3MtcnVuCiAg
ICAgICAgICMgdHJhY2tpbmcuCi0gICAgICAgIG1ldGVyLnVwZGF0ZSgiQ2xvYmJlcmluZyBvbGQg
cmVzdWx0cyBpbiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2Rp
cmVjdG9yeSkKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJl
c3VsdHMgaW4gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSkKICAgICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHBvcnRfb2JqLmxheW91
dF90ZXN0c19kaXIoKQogICAgICAgICBwb3NzaWJsZV9kaXJzID0gb3MubGlzdGRpcihsYXlvdXRf
dGVzdHNfZGlyKQogICAgICAgICBmb3IgZGlybmFtZSBpbiBwb3NzaWJsZV9kaXJzOgpAQCAtMTU2
NSwxNyArMTMwMSw2IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1
ZSk6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ob3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSwgZGlybmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZ25vcmVfZXJyb3JzPVRydWUpCiAKLSAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXM6Ci0gICAgICAgICMgRklYTUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBv
ZiB1c2luZyBjcHVfY291bnQgKyAxLgotICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9
IHBvcnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkKLQotICAgIHdyaXRlID0gY3JlYXRl
X2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25maWcnKQotICAgIGlmIG9wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzID09IDE6Ci0gICAgICAgIHdyaXRlKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29i
ai5kcml2ZXJfbmFtZSkKLSAgICBlbHNlOgotICAgICAgICB3cml0ZSgiUnVubmluZyAlcyAlc3Mg
aW4gcGFyYWxsZWwiICUgKAotICAgICAgICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcywg
cG9ydF9vYmouZHJpdmVyX25hbWUoKSkpCi0KICAgICBpZiBub3Qgb3B0aW9ucy50aW1lX291dF9t
czoKICAgICAgICAgaWYgb3B0aW9ucy5jb25maWd1cmF0aW9uID09ICJEZWJ1ZyI6CiAgICAgICAg
ICAgICBvcHRpb25zLnRpbWVfb3V0X21zID0gc3RyKDIgKiBUZXN0UnVubmVyLkRFRkFVTFRfVEVT
VF9USU1FT1VUX01TKQpAQCAtMTU4Myw4ICsxMzA4LDE0IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFy
Z3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0X21z
ID0gc3RyKFRlc3RSdW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCiAKICAgICBvcHRpb25z
LnNsb3dfdGltZV9vdXRfbXMgPSBzdHIoNSAqIGludChvcHRpb25zLnRpbWVfb3V0X21zKSkKLSAg
ICB3cml0ZSgiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVzIiAlCi0g
ICAgICAgICAgKG9wdGlvbnMudGltZV9vdXRfbXMsIG9wdGlvbnMuc2xvd190aW1lX291dF9tcykp
CisgICAgcHJpbnRlci5wcmludF9jb25maWcoIlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cgdGVz
dCB0aW1lb3V0OiAlcyIgJQorICAgICAgICAgICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21z
LCBvcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpKQorCisgICAgaWYgaW50KG9wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzKSA9PSAxOgorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUnVubmluZyBv
bmUgJXMiICUgcG9ydF9vYmouZHJpdmVyX25hbWUpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnRl
ci5wcmludF9jb25maWcoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlICgKKyAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMsIHBvcnRfb2JqLmRyaXZlcl9u
YW1lKCkpKQogCiAgICAgIyBJbmNsdWRlIGFsbCB0ZXN0cyBpZiBub25lIGFyZSBzcGVjaWZpZWQu
CiAgICAgbmV3X2FyZ3MgPSBbXQpAQCAtMTYwMSw5ICsxMzMyLDkgQEAgZGVmIG1haW4ob3B0aW9u
cywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKIAogICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQg
ZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KICAgICBwb3J0X29iai5tYXli
ZV9tYWtlX2RpcmVjdG9yeShvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQotICAgIG1ldGVyLnVw
ZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJD
b2xsZWN0aW5nIHRlc3RzIC4uLiIpCiAKLSAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9y
dF9vYmosIG9wdGlvbnMsIG1ldGVyKQorICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0
X29iaiwgb3B0aW9ucywgcHJpbnRlcikKICAgICB0ZXN0X3J1bm5lci5nYXRoZXJfZmlsZV9wYXRo
cyhwYXRocykKIAogICAgIGlmIG9wdGlvbnMubGludF90ZXN0X2ZpbGVzOgpAQCAtMTYxMyw0MyAr
MTM0NCw0MyBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgog
ICAgICAgICBmb3IgcGxhdGZvcm1fbmFtZSBpbiBwb3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWVz
KCk6CiAgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1f
bmFtZSwgaXNfZGVidWdfbW9kZT1UcnVlKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2Vf
ZXhwZWN0YXRpb25zKHBsYXRmb3JtX25hbWUsIGlzX2RlYnVnX21vZGU9RmFsc2UpCi0gICAgICAg
IG1ldGVyLnVwZGF0ZSgiIikKLSAgICAgICAgcHJpbnQgKCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBt
ZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsIHRoZW4gdGhlICIKLSAgICAgICAgICAgICJs
aW50IHN1Y2NlZWRlZC4iKQorICAgICAgICBwcmludGVyLndyaXRlKCIiKQorICAgICAgICBfbG9n
LmluZm8oIklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9u
cywgIgorICAgICAgICAgICAgICAgICAgInRoZW4gdGhlIGxpbnQgc3VjY2VlZGVkLiIpCiAgICAg
ICAgIHJldHVybiAwCiAKLSAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25z
LCAiY29uZmlnIikKLSAgICB3cml0ZSgiVXNpbmcgcG9ydCAnJXMnIiAlIHBvcnRfb2JqLm5hbWUo
KSkKLSAgICB3cml0ZSgiUGxhY2luZyB0ZXN0IHJlc3VsdHMgaW4gJXMiICUgb3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiVXNpbmcgcG9ydCAnJXMn
IiAlIHBvcnRfb2JqLm5hbWUoKSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGxhY2luZyB0
ZXN0IHJlc3VsdHMgaW4gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5KQogICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5lOgotICAgICAgICB3
cml0ZSgiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlIHBvcnRfb2JqLmJhc2VsaW5lX3Bh
dGgoKSkKLSAgICB3cml0ZSgiVXNpbmcgJXMgYnVpbGQiICUgb3B0aW9ucy5jb25maWd1cmF0aW9u
KQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGlu
ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfb2JqLmJhc2VsaW5lX3Bh
dGgoKSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiVXNpbmcgJXMgYnVpbGQiICUgb3B0aW9u
cy5jb25maWd1cmF0aW9uKQogICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgIHdy
aXRlKCJQaXhlbCB0ZXN0cyBlbmFibGVkIikKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWco
IlBpeGVsIHRlc3RzIGVuYWJsZWQiKQogICAgIGVsc2U6Ci0gICAgICAgIHdyaXRlKCJQaXhlbCB0
ZXN0cyBkaXNhYmxlZCIpCi0gICAgd3JpdGUoIiIpCisgICAgICAgIHByaW50ZXIucHJpbnRfY29u
ZmlnKCJQaXhlbCB0ZXN0cyBkaXNhYmxlZCIpCisgICAgcHJpbnRlci5wcmludF9jb25maWcoIiIp
CiAKLSAgICBtZXRlci51cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCisgICAgcHJp
bnRlci5wcmludF91cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCiAgICAgdGVzdF9y
dW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24g
PT0gJ0RlYnVnJykKIAotICAgIG1ldGVyLnVwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKKyAg
ICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKICAgICBpZiBub3Qg
cG9ydF9vYmouY2hlY2tfYnVpbGQodGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKICAgICAgICAg
cmV0dXJuIC0xCiAKLSAgICBtZXRlci51cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4iKQorICAg
IHByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyBoZWxwZXIgLi4uIikKICAgICBwb3J0X29i
ai5zdGFydF9oZWxwZXIoKQogCiAgICAgIyBDaGVjayB0aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5j
aWVzICh0aGVtZXMsIGZvbnRzLCAuLi4pIGFyZSBjb3JyZWN0LgogICAgIGlmIG5vdCBvcHRpb25z
Lm5vY2hlY2tfc3lzX2RlcHM6Ci0gICAgICAgIG1ldGVyLnVwZGF0ZSgiQ2hlY2tpbmcgc3lzdGVt
IGRlcGVuZGVuY2llcyAuLi4iKQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tp
bmcgc3lzdGVtIGRlcGVuZGVuY2llcyAuLi4iKQogICAgICAgICBpZiBub3QgcG9ydF9vYmouY2hl
Y2tfc3lzX2RlcHModGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKICAgICAgICAgICAgIHJldHVy
biAtMQogCi0gICAgbWV0ZXIudXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKLSAgICB3cml0
ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAiZXhwZWN0ZWQiKQotICAgIHJlc3Vs
dF9zdW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHdy
aXRlKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKKyAg
ICByZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291
dHB1dCgpCiAKICAgICBwb3J0X29iai5zZXR1cF90ZXN0X3J1bigpCiAKQEAgLTE2NTksNyArMTM5
MCw3IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAg
ICAgIGlmIG9wdGlvbnMuZnV6enlfcGl4ZWxfdGVzdHM6CiAgICAgICAgICAgICB0ZXN0X3J1bm5l
ci5hZGRfdGVzdF90eXBlKGZ1enp5X2ltYWdlX2RpZmYuRnV6enlJbWFnZURpZmYpCiAKLSAgICBu
dW1fdW5leHBlY3RlZF9yZXN1bHRzID0gdGVzdF9ydW5uZXIucnVuKHJlc3VsdF9zdW1tYXJ5LCBw
cmludF9yZXN1bHRzKQorICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1bm5lci5y
dW4ocmVzdWx0X3N1bW1hcnkpCiAKICAgICBwb3J0X29iai5zdG9wX2hlbHBlcigpCiAKQEAgLTE2
NzIsNyArMTQwMyw5IEBAIGRlZiBfY29tcGF0X3NoaW1fY2FsbGJhY2sob3B0aW9uLCBvcHRfc3Ry
LCB2YWx1ZSwgcGFyc2VyKToKIAogCiBkZWYgX2NvbXBhdF9zaGltX29wdGlvbihvcHRpb25fbmFt
ZSwgKiprd2FyZ3MpOgotICAgIHJldHVybiBvcHRwYXJzZS5tYWtlX29wdGlvbihvcHRpb25fbmFt
ZSwgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPV9jb21wYXRfc2hpbV9jYWxsYmFjaywgaGVs
cD0iSWdub3JlZCwgZm9yIG9sZC1ydW4td2Via2l0LXRlc3RzIGNvbXBhdCBvbmx5LiIsICoqa3dh
cmdzKQorICAgIHJldHVybiBvcHRwYXJzZS5tYWtlX29wdGlvbihvcHRpb25fbmFtZSwgYWN0aW9u
PSJjYWxsYmFjayIsCisgICAgICAgIGNhbGxiYWNrPV9jb21wYXRfc2hpbV9jYWxsYmFjaywKKyAg
ICAgICAgaGVscD0iSWdub3JlZCwgZm9yIG9sZC1ydW4td2Via2l0LXRlc3RzIGNvbXBhdCBvbmx5
LiIsICoqa3dhcmdzKQogCiAKIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CkBAIC0xNjk2LDIy
ICsxNDI5LDcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgIyBvbGQtcnVu
LXdlYmtpdC10ZXN0cyBhbHNvIGFjY2VwdHMgLWMsIC0tY29uZmlndXJhdGlvbiBDT05GSUdVUkFU
SU9OLgogICAgIF0KIAotICAgIGxvZ2dpbmdfb3B0aW9ucyA9IFsKLSAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0tbG9nIiwgYWN0aW9uPSJzdG9yZSIsCi0gICAgICAgICAgICBkZWZhdWx0
PUxPR19ERUZBVUxUX1ZBTFVFLAotICAgICAgICAgICAgaGVscD0oImxvZyB2YXJpb3VzIHR5cGVz
IG9mIGRhdGEuIFRoZSBhcmd1bWVudCB2YWx1ZSBzaG91bGQgYmUgYSAiCi0gICAgICAgICAgICAg
ICAgICAiY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIGZyb206ICVzIChkZWZhdWx0cyB0
byAiCi0gICAgICAgICAgICAgICAgICAiLS1sb2cgJXMpIiAlIChMT0dfVkFMVUVTLCBMT0dfREVG
QVVMVF9WQUxVRSkpKSwKLSAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLXYiLCAiLS12ZXJi
b3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhl
bHA9ImluY2x1ZGUgZGVidWctbGV2ZWwgbG9nZ2luZyIpLAotICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbigiLS1zb3VyY2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGhl
bHA9InNob3cgZXhwZWN0ZWQgcmVzdWx0IGZpbGUgcGF0aCBmb3IgZWFjaCB0ZXN0ICIgKwotICAg
ICAgICAgICAgICAgICAiKGltcGxpZXMgLS12ZXJib3NlKSIpLAotICAgICAgICAjIG9sZC1ydW4t
d2Via2l0LXRlc3RzIGhhcyBhIC0tc2xvd2VzdCBvcHRpb24gd2hpY2gganVzdCBwcmludHMKLSAg
ICAgICAgIyB0aGUgc2xvd2VzdCAxMC4KLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
bnVtLXNsb3ctdGVzdHMtdG8tbG9nIiwgZGVmYXVsdD01MCwKLSAgICAgICAgICAgIGhlbHA9Ik51
bWJlciBvZiBzbG93IHRlc3RzIHdob3NlIHRpbWluZ3MgdG8gcHJpbnQuIiksCi0gICAgXQorICAg
IHByaW50X29wdGlvbnMgPSBwcmludGluZy5wcmludF9vcHRpb25zKCkKIAogICAgICMgRklYTUU6
IFRoZXNlIG9wdGlvbnMgc2hvdWxkIG1vdmUgb250byB0aGUgQ2hyb21pdW1Qb3J0LgogICAgIGNo
cm9taXVtX29wdGlvbnMgPSBbCkBAIC0xODg0LDEzICsxNjAyLDIzIEBAIGRlZiBwYXJzZV9hcmdz
KGFyZ3M9Tm9uZSk6CiAgICAgICAgICAgICBoZWxwPSgiVGhlIGJ1aWxkIG51bWJlciBvZiB0aGUg
YnVpbGRlciBydW5uaW5nIHRoaXMgc2NyaXB0LiIpKSwKICAgICBdCiAKLSAgICBvcHRpb25fbGlz
dCA9IChjb25maWd1cmF0aW9uX29wdGlvbnMgKyBsb2dnaW5nX29wdGlvbnMgKworICAgIG9wdGlv
bl9saXN0ID0gKGNvbmZpZ3VyYXRpb25fb3B0aW9ucyArIHByaW50X29wdGlvbnMgKwogICAgICAg
ICAgICAgICAgICAgIGNocm9taXVtX29wdGlvbnMgKyByZXN1bHRzX29wdGlvbnMgKyB0ZXN0X29w
dGlvbnMgKwogICAgICAgICAgICAgICAgICAgIG1pc2Nfb3B0aW9ucyArIHJlc3VsdHNfanNvbl9v
cHRpb25zICsKICAgICAgICAgICAgICAgICAgICBvbGRfcnVuX3dlYmtpdF90ZXN0c19jb21wYXQp
CiAgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1v
cHRpb25fbGlzdCkKLSAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAK
LWlmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9w
YXJzZXIucGFyc2VfYXJncyhhcmdzKQorICAgIGlmIG9wdGlvbnMuc291cmNlczoKKyAgICAgICAg
b3B0aW9ucy52ZXJib3NlID0gVHJ1ZQorCisgICAgcmV0dXJuIG9wdGlvbnMsIGFyZ3MKKworCitk
ZWYgbWFpbigpOgogICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKCkKLSAgICBzeXMuZXhp
dChtYWluKG9wdGlvbnMsIGFyZ3MpKQorICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5w
bGF0Zm9ybSwgb3B0aW9ucykKKyAgICByZXR1cm4gcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdz
KQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDlmZTBlNzQuLjE3
N2QwNDIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAt
MzMsMTIgKzMzLDE3IEBAIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAK
LWltcG9ydCB3ZWJraXRweS5sYXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyBhcyBydW5fd2Vi
a2l0X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKIAogCi1kZWYgcGFz
c2luZ19ydW4oYXJncyk6CitkZWYgcGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9Tm9uZSwgbG9n
Z2luZ19pbmNsdWRlZD1GYWxzZSk6CisgICAgaWYgbm90IGxvZ2dpbmdfaW5jbHVkZWQ6CisgICAg
ICAgIGFyZ3MuZXh0ZW5kKFsnLS1wcmludCcsICdub3RoaW5nJ10pCiAgICAgb3B0aW9ucywgYXJn
cyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQotICAgIHJlcyA9IHJ1bl93ZWJr
aXRfdGVzdHMubWFpbihvcHRpb25zLCBhcmdzLCBGYWxzZSkKKyAgICBpZiBwb3J0X29iaiBpcyBO
b25lOgorICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlv
bnMpCisgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFy
Z3MpCiAgICAgcmV0dXJuIHJlcyA9PSAwCiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54343</attachid>
            <date>2010-04-26 16:09:28 -0700</date>
            <delta_ts>2010-04-26 18:25:34 -0700</delta_ts>
            <desc>update w/ ojan and eseidel&apos;s feedback</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>101112</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxN2QwZjgzLi44NDc3OGIwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDQt
MjMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyByZW5hbWVzIC0tbG9nIHRvIC0tcHJpbnQg
KHRvIGJlIHNsaWdodGx5IG1vcmUKKyAgICAgICAgZGVzY3JpcHRpdmUpLiAtLWxvZyBpcyByZXRh
aW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisgICAgICAgIEkndmUgYWxzbyBhZGRl
ZCBiZXR0ZXIgaGVscCBtZXNzYWdlcyBmb3IgcHJpbnRpbmcuCisKKyAgICAgICAgVGhlIG5ldyBj
b2RlIGhhcyB1bml0IHRlc3RzIQorCisgICAgICAgIFRoZXJlIGlzIHN0aWxsIG1vcmUgY29kZSB0
byBiZSBtb3ZlZCwgYnV0IHRoaXMgcGF0Y2ggaXMgYmlnIGVub3VnaCBhcworICAgICAgICBpdCBp
cy4gTmFtZWx5LCBzdGlsbCB0byBtb3ZlIGFyZSB0aGUgcHJpbnRpbmcgb2YgdGhlIGFjdHVhbCBy
ZXN1bHRzCisgICAgICAgIGFuZCB0aGUgdGltaW5nIHN0YXRpc3RpY3MsIHdoaWNoIHNob3VsZCBt
b3ZlIGFub3RoZXIgMzAwLTQwMCBsaW5lcworICAgICAgICBvdXQgb2YgdGhlIGZpbGUuCisKKyAg
ICAgICAgTm90YWJsZSBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMucHkgYmV5b25kIGNvZGUg
c2ltcGx5IG1vdmluZzoKKyAgICAgICAgKiBNZXRlcmVkU3RyZWFtIGlzIG5vdyBoaWRkZW4gdW5k
ZXIgdGhlIG5ldyBwcmludGluZy5QcmludGVyIGNsYXNzLgorICAgICAgICAgIEFsbCB0aGUgcmVm
ZXJlbmNlcyB0byBzZWxmLl9tZXRlciBub3cgcG9pbnQgdG8gc2VsZi5fcHJpbnRlci4KKyAgICAg
ICAgKiBBbGwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gcHJpbnRpbmcuY29uZmln
dXJlX2xvZ2dpbmcoKQorICAgICAgICAqIEluc3RlYWQgb2YgdXNpbmcgd3JpdGUoKSBsYW1iZGFz
IHRvIGNvbnRyb2wgd2hhdCBpcyBhbmQgaXNuJ3QKKyAgICAgICAgICBwcmludGVkLCB3ZSB1c2Ug
c2VwYXJhdGUgbWV0aG9kcyBvbiB0aGUgcHJpbnRlciBvYmplY3QuIFRoaXMgd2lsbAorICAgICAg
ICAgIG1ha2UgaXQgZWFzaWVyIHRvIGdyZXAgd2hpY2ggcHJpbnQgc3RhdGVtZW50cyBhcmUgcHJp
bnRlZAorICAgICAgICAgIHVuZGVyIHByb3RlY3Rpb24gb2YgZWFjaCBmbGFnLgorICAgICAgICAq
IFRoZSBwcmludF9yZXN1bHRzIGZsYWcgSSBhZGRlZCBhIGZldyByZXZzIGJhY2sgdG8gc3VwcHJl
c3MgcHJpbnRpbmcKKyAgICAgICAgICBpbiB0aGUgdW5pdCB0ZXN0cyBoYXMgYmVlbiByZXBsYWNl
ZCB3aXRoIC0tcHJpbnQgbm90aGluZy4KKyAgICAgICAgKiBUaGUgUmVzdWx0U3VtbWFyeSBjbGFz
cyBub3cgc3RvcmVzIHRoZSBlbnRpcmUgVGVzdFJlc3VsdCBmb3IgZWFjaAorICAgICAgICAgIHRl
c3QsIG5vdCBqdXN0IHRoZSBhY3R1YWwgcmVzdWx0IHR5cGUuCisgICAgICAgICogc3VtbWFyaXpl
X3VuZXhwZWN0ZWRfcmVzdWx0cygpIGdvdCBtb3ZlZCBmcm9tIGEgbWV0aG9kIG9uIFRlc3RSdW5u
ZXIKKyAgICAgICAgICB0byBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIG1vdmUg
aW50byBhIHNlcGFyYXRlIGZpbGUKKyAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBSZXN1bHRTdW1t
YXJ5IGNsYXNzIGFuZCB0aGUgVGVzdFJlc3VsdCBjbGFzcworICAgICAgICAqIFRoZSAtLXRyYWNl
IG9wdGlvbiBhZGRlZCByZWNlbnRseSBoYXMgYmVlbiByZXBsYWNlZCBieQorICAgICAgICAgICct
LXByaW50IHRyYWNlLWV2ZXJ5dGhpbmcnIGFuZCAnLS1wcmludCB0cmFjZS11bmV4cGVjdGVkJwor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODAxOAor
CisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0czoKKyAgICAgICAgICAtIHVw
ZGF0ZSB0byBuZXcgZW50cnkgcG9pbnRzIGluIHJ1bl93ZWJraXRfdGVzdHMucHkKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0
cmVhbS5weToKKyAgICAgICAgICAtIGZpeCBhIG1pbm9yIG5pdCB3aGVyZSB3ZSB3ZXJlIHByaW50
aW5nIGFuIGVtcHR5IHN0cmluZyB3aGVyZQorICAgICAgICAgICAgd2UgZGlkbid0IG5lZWQgdG8K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
cmludGluZy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6IEFkZGVkCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAgIC0g
aW1wbGVtZW50IHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoKSBhbmQgZXhwZWN0ZWRfZmlsZW5hbWUo
KSBzbworICAgICAgICAgICAgd2UgY2FuIHRlc3QgcHJpbnRpbmcgdW5leHBlY3RlZCByZXN1bHRz
IGluIGEgcGxhdGZvcm0tbmV1dHJhbAorICAgICAgICAgICAgd2F5CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9ydW5fd2Via2l0X3Rlc3QucHk6CisgICAgICAgICAgLSBtb3ZlIGEgbG90IG9m
IHRoZSBwcmludGluZyBjb2RlIGludG8gcHJpbnRpbmcucHkKKyAgICAgICAgICAtIGNoYW5nZSB0
aGUgc2lnbmF0dXJlcyBvZiB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIGZvciBlYXNpZXIKKyAg
ICAgICAgICAgIHVuaXQgdGVzdGluZworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgICAtIHVwZGF0ZSB3LyBjaGFuZ2VzIHRv
IHJ1bl93ZWJraXRfdGVzdHMgZW50cnkgcG9pbnRzLgorCiAyMDEwLTA0LTE5ICBEaXJrIFByYW5r
ZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3Rz
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0cwppbmRleCAyZWJlMWRh
Li4wNzI4ZWUwIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0
LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMKQEAg
LTMzLDUgKzMzLDQgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHdlYmtpdHB5LmxheW91dF90ZXN0cy5y
dW5fd2Via2l0X3Rlc3RzIGFzIHJ1bl93ZWJraXRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdz
KCkKLSAgICBzeXMuZXhpdChydW5fd2Via2l0X3Rlc3RzLm1haW4ob3B0aW9ucywgYXJncykpCisg
ICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVk
X3N0cmVhbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CmluZGV4IDkzMGI5ZTQuLmEzM2ZjM2EgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CkBAIC0x
MTEsNyArMTExLDggQEAgY2xhc3MgTWV0ZXJlZFN0cmVhbToKIAogICAgICAgICAjIFByaW50IHRo
ZSBuZWNlc3NhcnkgbnVtYmVyIG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHByZXZpb3VzCiAg
ICAgICAgICMgbWVzc2FnZS4KLSAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4o
c2VsZi5fbGFzdF91cGRhdGUpKQorICAgICAgICBpZiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpOgor
ICAgICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4oc2VsZi5fbGFzdF91cGRh
dGUpKQogICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc3RyKQogICAgICAgICBudW1fcmVtYWlu
aW5nID0gbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSAtIGxlbihzdHIpCiAgICAgICAgIGlmIG51bV9y
ZW1haW5pbmcgPiAwOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Y0NDI1Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcHJpbnRpbmcucHkKQEAgLTAsMCArMSw0ODMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIlBhY2thZ2UgdGhhdCBoYW5kbGVzIG5vbi1kZWJ1Zywgbm9u
LWZpbGUgb3V0cHV0IGZvciBydW4td2Via2l0LXRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKKworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucHJp
bnRlciIpCisKK1Rlc3RFeHBlY3RhdGlvbnNGaWxlID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4
cGVjdGF0aW9uc0ZpbGUKKworTlVNX1NMT1dfVEVTVFNfVE9fTE9HID0gMTAKKworUFJJTlRfREVG
QVVMVCA9ICgibWlzYyxvbmUtbGluZS1wcm9ncmVzcyxvbmUtbGluZS1zdW1tYXJ5LHVuZXhwZWN0
ZWQsIgorICAgICAgICAgICAgICAgICAidW5leHBlY3RlZC1yZXN1bHRzLHVwZGF0ZXMiKQorUFJJ
TlRfRVZFUllUSElORyA9ICgiYWN0dWFsLGNvbmZpZyxleHBlY3RlZCxtaXNjLG9uZS1saW5lLXBy
b2dyZXNzLCIKKyAgICAgICAgICAgICAgICAgICAgIm9uZS1saW5lLXN1bW1hcnksc2xvd2VzdCx0
aW1pbmcsdW5leHBlY3RlZCwiCisgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkLXJlc3Vs
dHMsdXBkYXRlcyIpCisKK0hFTFBfUFJJTlRJTkcgPSAiIiIKK091dHB1dCBmb3IgcnVuLXdlYmtp
dC10ZXN0cyBpcyBjb250cm9sbGVkIGJ5IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKK3ZhbHVl
cyBwYXNzZWQgdG8gLS1wcmludC4gIFZhbHVlcyBlaXRoZXIgaW5mbHVlbmNlIHRoZSBvdmVyYWxs
IG91dHB1dCwgb3IKK3RoZSBvdXRwdXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLCBkdXJp
bmcgdGhlIHJ1biwgb3IgYXQgdGhlIGVuZDoKKworT3ZlcmFsbCBvcHRpb25zOgorICAgIG5vdGhp
bmcgICAgICAgICAgICAgZG9uJ3QgcHJpbnQgYW55dGhpbmcuIFRoaXMgb3ZlcnJpZGVzIGV2ZXJ5
IG90aGVyIG9wdGlvbgorICAgIGV2ZXJ5dGhpbmcgICAgICAgICAgcHJpbnQgZXZlcnl0aGluZyAo
ZXhjZXB0IHRoZSB0cmFjZS0qIG9wdGlvbnMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGV0YWlsZWQtcHJvZ3Jlc3Mgb3B0aW9uLCBzZWUgYmVsb3cgZm9yIHRoZSBmdWxsIGxpc3Qg
KQorICAgIG1pc2MgICAgICAgICAgICAgICAgcHJpbnQgbWlzY2VsbGFuZW91cyB0aGluZ3MgbGlr
ZSBibGFuayBsaW5lcworCitBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW46CisgICAgY29uZmln
ICAgICAgICAgICAgICBwcmludCB0aGUgdGVzdCBydW4gY29uZmlndXJhdGlvbgorICAgIGV4cGVj
dGVkICAgICAgICAgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIHdoYXQgaXMgZXhwZWN0ZWQgdG8gaGFw
cGVuCisgICAgICAgICAgICAgICAgICAgICAgICAoIyBwYXNzZXMsICMgZmFpbHVyZXMsIGV0Yy4p
CisKK0R1cmluZyB0aGUgcnVuOgorICAgIGRldGFpbGVkLXByb2dyZXNzICAgcHJpbnQgb25lIGRv
dCBwZXIgdGVzdCBjb21wbGV0ZWQKKyAgICBvbmUtbGluZS1wcm9ncmVzcyAgIHByaW50IGEgb25l
LWxpbmUgcHJvZ3Jlc3MgYmFyCisgICAgdW5leHBlY3RlZCAgICAgICAgICBwcmludCBhbnkgdW5l
eHBlY3RlZCByZXN1bHRzIGFzIHRoZXkgb2NjdXIKKyAgICB1cGRhdGVzICAgICAgICAgICAgIHBy
aW50IHVwZGF0ZXMgb24gd2hpY2ggc3RhZ2UgaXMgZXhlY3V0aW5nCisgICAgdHJhY2UtZXZlcnl0
aGluZyAgICBwcmludCBkZXRhaWxlZCBpbmZvIG9uIGV2ZXJ5IHRlc3QncyByZXN1bHRzCisgICAg
ICAgICAgICAgICAgICAgICAgICAoYmFzZWxpbmVzLCBleHBlY3RhdGlvbiwgdGltZSBpdCB0b29r
IHRvIHJ1bikuIElmCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHNwZWNpZmllZCBp
dCB3aWxsIG92ZXJyaWRlIHRoZSAnKi1wcm9ncmVzcycKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMsIHRoZSAndHJhY2UtdW5leHBlY3RlZCcgb3B0aW9uLCBhbmQgdGhlCisgICAgICAg
ICAgICAgICAgICAgICAgICAndW5leHBlY3RlZCcgb3B0aW9uLgorICAgIHRyYWNlLXVuZXhwZWN0
ZWQgICAgbGlrZSAndHJhY2UtZXZlcnl0aGluZycsIGJ1dCBvbmx5IGZvciB0ZXN0cyB3aXRoCisg
ICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkIHJlc3VsdHMuIElmIHRoaXMgb3B0aW9u
IGlzIHNwZWNpZmllZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgb3ZlcnJpZGUg
dGhlICd1bmV4cGVjdGVkJyBvcHRpb24uCisKK0F0IHRoZSBlbmQgb2YgdGhlIHJ1bjoKKyAgICBh
Y3R1YWwgICAgICAgICAgICAgIHByaW50IGEgc3VtbWFyeSBvZiB0aGUgYWN0dWFsIHJlc3VsdHMK
KyAgICBzbG93ZXN0ICAgICAgICAgICAgIHByaW50ICVkIHNsb3dlc3QgdGVzdHMgYW5kIHRoZSB0
aW1lIHRoZXkgdG9vayB0byBydW4KKyAgICB0aW1pbmcgICAgICAgICAgICAgIHByaW50IHRpbWlu
ZyBzdGF0aXN0aWNzCisgICAgdW5leHBlY3RlZC1yZXN1bHRzICBwcmludCBhIGxpc3Qgb2YgdGhl
IHRlc3RzIHdpdGggdW5leHBlY3RlZCByZXN1bHRzCisgICAgb25lLWxpbmUtc3VtbWFyeSAgICBw
cmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2YgdGhlIHJ1bgorCitOb3RlczoKKyAgICAtICdkZXRh
aWxlZC1wcm9ncmVzcycgY2FuIG9ubHkgYmUgdXNlZCBpZiBydW5uaW5nIGluIGEgc2luZ2xlIHRo
cmVhZAorICAgICAgKHVzaW5nIC0tY2hpbGQtcHJvY2Vzc2VzPTEpIG9yIGEgc2luZ2xlIHF1ZXVl
IG9mIHRlc3RzICh1c2luZworICAgICAgIC0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsKS4g
SWYgdGhlc2UgY29uZGl0aW9ucyBhcmVuJ3QgdHJ1ZSwKKyAgICAgICdvbmUtbGluZS1wcm9ncmVz
cycgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisgICAgLSBJZiBib3RoICdkZXRhaWxlZC1wcm9ncmVz
cycgYW5kICdvbmUtbGluZS1wcm9ncmVzcycgYXJlIHNwZWNpZmllZCAoYW5kCisgICAgICBib3Ro
IGFyZSBwb3NzaWJsZSksICdkZXRhaWxlZC1wcm9ncmVzcycgd2lsbCBiZSB1c2VkLgorICAgIC0g
SWYgJ25vdGhpbmcnIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIGFsbCBvZiB0aGUgb3RoZXIg
b3B0aW9ucy4KKworLS1wcmludCAnZXZlcnl0aGluZycgaXMgZXF1aXZhbGVudCB0byAtLXByaW50
ICclcycuCisKK1RoZSBkZWZhdWx0IGlzIHRvIC0tcHJpbnQgJyVzJy4KKyIiIiAlIChOVU1fU0xP
V19URVNUU19UT19MT0csIFBSSU5UX0VWRVJZVEhJTkcsIFBSSU5UX0RFRkFVTFQpCisKKworZGVm
IHByaW50X29wdGlvbnMoKToKKyAgICByZXR1cm4gWworICAgICAgICAjIE5vdGU6IHdlIHVzZSBw
cmludF9vcHRpb25zIHJhdGhlciB0aGFuIGp1c3QgJ3ByaW50JyBiZWNhdXNlIHByaW50CisgICAg
ICAgICMgaXMgYSByZXNlcnZlZCB3b3JkLgorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigi
LS1wcmludCIsIGRlc3Q9InByaW50X29wdGlvbnMiLAorICAgICAgICAgICAgZGVmYXVsdD1QUklO
VF9ERUZBVUxULAorICAgICAgICAgICAgaGVscD0oImNvbnRyb2xzIHByaW50IG91dHB1dCBvZiB0
ZXN0IHJ1bi4gIgorICAgICAgICAgICAgICAgICAgIlVzZSAtLWhlbHAtcHJpbnRpbmcgZm9yIG1v
cmUuIikpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1oZWxwLXByaW50aW5nIiwg
YWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgIGhlbHA9InNob3cgZGV0YWlsZWQgaGVs
cCBvbiBjb250cm9sbGluZyBwcmludCBvdXRwdXQiKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAg
ICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmciKSwKKwor
ICAgICAgICAjIEZJWE1FOiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXM7IGl0J3MgcHJldHR5IG11Y2gg
b2Jzb2xldGUgd2l0aCB0aGUKKyAgICAgICAgIyAtLXByaW50IHRyYWNlLWV2ZXJ5dGhpbmcgb3B0
aW9uLgorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1zb3VyY2VzIiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwKKyAgICAgICAgICAgIGhlbHA9KCJzaG93IGV4cGVjdGVkIHJlc3VsdCBmaWxl
IHBhdGggZm9yIGVhY2ggdGVzdCAiCisgICAgICAgICAgICAgICAgICIoaW1wbGllcyAtLXZlcmJv
c2UpIikpLAorICAgIF0KKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgbWV0ZXIp
OgorICAgICIiIkNvbmZpZ3VyZXMgdGhlIGxvZ2dpbmcgc3lzdGVtLiIiIgorICAgIGxvZ19mbXQg
PSAnJShtZXNzYWdlKXMnCisgICAgbG9nX2RhdGVmbXQgPSAnJXklbSVkICVIOiVNOiVTJworICAg
IGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAg
ICAgbG9nX2ZtdCA9ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKS00ZCAlKGxl
dmVsbmFtZSlzICcKKyAgICAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMnKQorICAgICAgICBs
b2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVs
PWxvZ19sZXZlbCwgZm9ybWF0PWxvZ19mbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRl
Zm10PWxvZ19kYXRlZm10LCBzdHJlYW09bWV0ZXIpCisKKworZGVmIHBhcnNlX3ByaW50X29wdGlv
bnMocHJpbnRfb3B0aW9ucywgY2hpbGRfcHJvY2Vzc2VzLCBpc19mdWxseV9wYXJhbGxlbCk6Cisg
ICAgIiIiUGFyc2UgdGhlIG9wdGlvbnMgcHJvdmlkZWQgdG8gLS1wcmludCBhbmQgZGVkdXAgYW5k
IHJhbmsgdGhlbS4KKworICAgIFJldHVybnMKKyAgICAgICAgYSBzZXQoKSBvZiBzd2l0Y2hlcyB0
aGF0IGdvdmVybiBob3cgbG9nZ2luZyBpcyBkb25lCisKKyAgICAiIiIKKyAgICBzd2l0Y2hlcyA9
IHNldChwcmludF9vcHRpb25zLnNwbGl0KCcsJykpCisKKyAgICBpZiAnbm90aGluZycgaW4gc3dp
dGNoZXM6CisgICAgICAgIHJldHVybiBzZXQoKQorCisgICAgaWYgKGNoaWxkX3Byb2Nlc3NlcyAh
PSAxIGFuZCBub3QgaXNfZnVsbHlfcGFyYWxsZWwgYW5kCisgICAgICAgICdkZXRhaWxlZC1wcm9n
cmVzcycgaW4gc3dpdGNoZXMpOgorICAgICAgICBfbG9nLndhcm4oIkNhbiBvbmx5IHByaW50ICdk
ZXRhaWxlZC1wcm9ncmVzcycgaWYgcnVubmluZyAiCisgICAgICAgICAgICAgICAgICAid2l0aCAt
LWNoaWxkLXByb2Nlc3Nlcz0xIG9yICIKKyAgICAgICAgICAgICAgICAgICJ3aXRoIC0tZXhwZXJp
bWVudGFsLWZ1bGx5LXBhcmFsbGVsLiAiCisgICAgICAgICAgICAgICAgICAiVXNpbmcgJ29uZS1s
aW5lLXByb2dyZXNzJyBpbnN0ZWFkLiIpCisgICAgICAgIHN3aXRjaGVzLmRpc2NhcmQoJ2RldGFp
bGVkLXByb2dyZXNzJykKKyAgICAgICAgc3dpdGNoZXMuYWRkKCdvbmUtbGluZS1wcm9ncmVzcycp
CisKKyAgICBpZiAnZXZlcnl0aGluZycgaW4gc3dpdGNoZXM6CisgICAgICAgIHN3aXRjaGVzLmRp
c2NhcmQoJ2V2ZXJ5dGhpbmcnKQorICAgICAgICBzd2l0Y2hlcyA9IHN3aXRjaGVzLnVuaW9uKHNl
dChQUklOVF9FVkVSWVRISU5HLnNwbGl0KCcsJykpKQorCisgICAgaWYgJ2RldGFpbGVkLXByb2dy
ZXNzJyBpbiBzd2l0Y2hlczoKKyAgICAgICAgc3dpdGNoZXMuZGlzY2FyZCgnb25lLWxpbmUtcHJv
Z3Jlc3MnKQorCisgICAgaWYgJ3RyYWNlLWV2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgorICAgICAg
ICBzd2l0Y2hlcy5kaXNjYXJkKCdkZXRhaWxlZC1wcm9ncmVzcycpCisgICAgICAgIHN3aXRjaGVz
LmRpc2NhcmQoJ29uZS1saW5lLXByb2dyZXNzJykKKyAgICAgICAgc3dpdGNoZXMuZGlzY2FyZCgn
dHJhY2UtdW5leHBlY3RlZCcpCisgICAgICAgIHN3aXRjaGVzLmRpc2NhcmQoJ3VuZXhwZWN0ZWQn
KQorCisgICAgaWYgJ3RyYWNlLXVuZXhwZWN0ZWQnIGluIHN3aXRjaGVzOgorICAgICAgICBzd2l0
Y2hlcy5kaXNjYXJkKCd1bmV4cGVjdGVkJykKKworICAgIHJldHVybiBzd2l0Y2hlcworCisKK2Ns
YXNzIFByaW50ZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyBoYW5kbGluZyBhbGwgbm9uLWRlYnVn
LWxvZ2dpbmcgcHJpbnRpbmcgZG9uZSBieSBydW4td2Via2l0LXRlc3RzLgorCisgICAgUHJpbnRp
bmcgZnJvbSBydW4td2Via2l0LXRlc3RzIGZhbGxzIGludG8gdHdvIGJ1Y2tldHM6IGdlbmVyYWwg
b3IKKyAgICByZWd1bGFyIG91dHB1dCB0aGF0IGlzIHJlYWQgb25seSBieSBodW1hbnMgYW5kIGNh
biBiZSBjaGFuZ2VkIGF0IGFueQorICAgIHRpbWUsIGFuZCBvdXRwdXQgdGhhdCBpcyBwYXJzZWQg
YnkgYnVpbGRib3RzIChhbmQgaHVtYW5zKSBhbmQgaGVuY2UKKyAgICBtdXN0IGJlIGNoYW5nZWQg
bW9yZSBjYXJlZnVsbHkgYW5kIGluIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBidWlsZGJvdAorICAg
IHBhcnNpbmcgY29kZSAoaW4gY2hyb21pdW0ub3JnJ3MgYnVpbGRib3QvbWFzdGVyLmNocm9taXVt
L3NjcmlwdHMvbWFzdGVyLworICAgIGxvZ19wYXJzZXIvd2Via2l0X3Rlc3RfY29tbWFuZC5weSBz
Y3JpcHQpLgorCisgICAgQnkgZGVmYXVsdCB0aGUgYnVpbGRib3QtcGFyc2VkIGNvZGUgZ2V0cyBs
b2dnZWQgdG8gc3Rkb3V0LCBhbmQgcmVndWxhcgorICAgIG91dHB1dCBnZXRzIGxvZ2dlZCB0byBz
dGRlcnIuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHJlZ3VsYXJf
b3V0cHV0LCBidWlsZGJvdF9vdXRwdXQsCisgICAgICAgICAgICAgICAgIGNoaWxkX3Byb2Nlc3Nl
cywgaXNfZnVsbHlfcGFyYWxsZWwpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJncworICAgICAg
ICAgIHBvcnQgICAgICAgICAgICAgICBpbnRlcmZhY2UgdG8gcG9ydC1zcGVjaWZpYyByb3V0aW5l
cworICAgICAgICAgIG9wdGlvbnMgICAgICAgICAgICBPcHRpb25QYXJzZXIgb2JqZWN0IHcvIGNv
bW1hbmQgbGluZSBzZXR0aW5ncworICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0ICAgICBzdHJlYW0g
dG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIG9ubHkgZm9yIGh1bWFucworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbgorICAgICAgICAgIGJ1aWxkYm90X291dHB1
dCAgICBzdHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIHRvIGJlIHJlYWQgYnkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkYm90cyAoYW5kIGh1bWFucykgc2hvdWxk
IGJlIHdyaXR0ZW4KKyAgICAgICAgICBjaGlsZF9wcm9jZXNzZXMgICAgbnVtYmVyIG9mIHBhcmFs
bGVsIHRocmVhZHMgcnVubmluZyAodXN1YWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250cm9sbGVkIGJ5IC0tY2hpbGQtcHJvY2Vzc2VzKQorICAgICAgICAgIGlzX2Z1bGx5X3Bh
cmFsbGVsICBhcmUgdGhlIHRlc3RzIHJ1bm5pbmcgaW4gYSBzaW5nbGUgcXVldWUsIG9yCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNoYXJkcyAodXN1YWxseSBjb250cm9sbGVkIGJ5
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFs
bGVsKQorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgbGFzdCB0d28gYXJncyBhcmUgc2VwYXJhdGUg
cmF0aGVyIHRoYW4gYnVuZGxlZCBpbnRvCisgICAgICAgIHRoZSBvcHRpb25zIHN0cnVjdHVyZSBz
byB0aGF0IHRoaXMgb2JqZWN0IGRvZXMgbm90IGFzc3VtZSBhbnkgZmxhZ3MKKyAgICAgICAgc2V0
IGluIG9wdGlvbnMgdGhhdCB3ZXJlbid0IHJldHVybmVkIGZyb20gbG9nZ2luZ19vcHRpb25zKCks
IGFib3ZlLgorICAgICAgICBUaGUgdHdvIGFyZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9y
IG5vdCB3ZSBjYW4gc2Vuc2libHkgdXNlCisgICAgICAgIHRoZSAnZGV0YWlsZWQtcHJvZ3Jlc3Mn
IG9wdGlvbiwgb3IgY2FuIG9ubHkgdXNlICdvbmUtbGluZS1wcm9ncmVzcycuCisgICAgICAgICIi
IgorICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0gPSBidWlsZGJvdF9vdXRwdXQKKyAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAg
ICAgICAgc2VsZi5fc3RyZWFtID0gcmVndWxhcl9vdXRwdXQKKworICAgICAgICAjIFRoZXNlIGFy
ZSB1c2VkIGZvciAtLXByaW50IGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0YXR1cyBieQor
ICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBOb25lCisg
ICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIKKyAgICAgICAgc2VsZi5fY3Vy
cmVudF90ZXN0X251bWJlciA9IDAKKworICAgICAgICBzZWxmLl9tZXRlciA9IG1ldGVyZWRfc3Ry
ZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9vdXRwdXQpCisgICAgICAgIGNv
bmZpZ3VyZV9sb2dnaW5nKHNlbGYuX29wdGlvbnMsIHNlbGYuX21ldGVyKQorCisgICAgICAgIHNl
bGYuc3dpdGNoZXMgPSBwYXJzZV9wcmludF9vcHRpb25zKG9wdGlvbnMucHJpbnRfb3B0aW9ucywK
KyAgICAgICAgICAgIGNoaWxkX3Byb2Nlc3NlcywgaXNfZnVsbHlfcGFyYWxsZWwpCisKKworICAg
ICMgVGhlc2UgdHdvIHJvdXRpbmVzIGp1c3QgaGlkZSB0aGUgaW1wbG1lbnRhdGlvbiBvZiB0aGUg
c3dpdGNoZXMuCisgICAgZGVmIGRpc2FibGVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgIHJldHVy
biBub3Qgb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKKworICAgIGRlZiBlbmFibGVkKHNlbGYsIG9w
dGlvbik6CisgICAgICAgIHJldHVybiBvcHRpb24gaW4gc2VsZi5zd2l0Y2hlcworCisgICAgZGVm
IGhlbHBfcHJpbnRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlKEhFTFBfUFJJTlRJTkcp
CisKKyAgICBkZWYgcHJpbnRfYWN0dWFsKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYuZGlz
YWJsZWQoJ2FjdHVhbCcpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2J1aWxk
Ym90X3N0cmVhbS53cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgcHJpbnRfY29uZmlnKHNl
bGYsIG1zZyk6CisgICAgICAgIHNlbGYud3JpdGUobXNnLCAnY29uZmlnJykKKworICAgIGRlZiBw
cmludF9leHBlY3RlZChzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2V4cGVj
dGVkJykKKworICAgIGRlZiBwcmludF90aW1pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53
cml0ZShtc2csICd0aW1pbmcnKQorCisgICAgZGVmIHByaW50X29uZV9saW5lX3N1bW1hcnkoc2Vs
ZiwgdG90YWwsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5
IG9mIHRoZSB0ZXN0IHJ1biB0byBzdGRvdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0
b3RhbDogdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgorICAgICAgICAgIGV4cGVjdGVkOiBudW1i
ZXIgb2YgZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5kaXNh
YmxlZCgnb25lLWxpbmUtc3VtbWFyeScpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAg
dW5leHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKKyAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAw
OgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIkFsbCAlZCB0ZXN0cyByYW4gYXMgZXhw
ZWN0ZWQuXG4iICUgZXhwZWN0ZWQpCisgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKKyAgICAg
ICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVkIGRp
ZG4ndDpcblxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIlxuJWQgdGVzdHMg
cmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGV4cGVjdGVkLCB1bmV4cGVjdGVkKSkKKworICAgIGRlZiBwcmludF90ZXN0X3Jl
c3VsdChzZWxmLCByZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKToKKyAgICAgICAg
IiIiUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJpbnQu
IiIiCisgICAgICAgIGlmIChzZWxmLmVuYWJsZWQoJ3RyYWNlLWV2ZXJ5dGhpbmcnKSBvcgorICAg
ICAgICAgICAgc2VsZi5lbmFibGVkKCd0cmFjZS11bmV4cGVjdGVkJykgYW5kIG5vdCBleHBlY3Rl
ZCk6CisgICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCwgZXhwX3N0ciwg
Z290X3N0cikKKyAgICAgICAgZWxpZiAobm90IGV4cGVjdGVkIGFuZCBzZWxmLmVuYWJsZWQoJ3Vu
ZXhwZWN0ZWQnKSBhbmQKKyAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlZCgnZGV0YWlsZWQtcHJv
Z3Jlc3MnKSk6CisgICAgICAgICAgICAjIE5vdGU6ICdkZXRhaWxlZC1wcm9ncmVzcycgaGFuZGxl
cyB1bmV4cGVjdGVkIHJlc3VsdHMgaW50ZXJuYWxseSwKKyAgICAgICAgICAgICMgc28gd2Ugc2tp
cCBpdCBoZXJlLgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3Vs
dChyZXN1bHQpCisKKyAgICBkZWYgX3ByaW50X3Rlc3RfdHJhY2Uoc2VsZiwgcmVzdWx0LCBleHBf
c3RyLCBnb3Rfc3RyKToKKyAgICAgICAgIiIiUHJpbnQgZGV0YWlsZWQgcmVzdWx0cyBvZiBhIHRl
c3QgKHRyaWdnZXJlZCBieSAtLXByaW50IHRyYWNlLSopLgorICAgICAgICBGb3IgZWFjaCB0ZXN0
LCBwcmludDoKKyAgICAgICAgICAgLSBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgYmFzZWxpbmVz
CisgICAgICAgICAgIC0gZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAtIGFjdHVhbCByZXN1
bHQKKyAgICAgICAgICAgLSB0aW1pbmcgaW5mbworICAgICAgICAiIiIKKyAgICAgICAgZmlsZW5h
bWUgPSByZXN1bHQuZmlsZW5hbWUKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBzZWxmLl93cml0ZSgndHJhY2U6
ICVzXG4nICUgdGVzdF9uYW1lKQorICAgICAgICBzZWxmLl93cml0ZSgnICB0eHQ6ICVzXG4nICUK
KyAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFt
ZSwgJy50eHQnKSkpCisgICAgICAgIHBuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxl
bmFtZShmaWxlbmFtZSwgJy5wbmcnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwbmdfZmls
ZSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgnICBwbmc6ICVzXG4nICUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgnICBwbmc6IDxub25lPlxu
JykKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgZXhwOiAlc1xuJyAlIGV4cF9zdHIpCisgICAgICAg
IHNlbGYuX3dyaXRlKCcgIGdvdDogJXNcbicgJSBnb3Rfc3RyKQorICAgICAgICBzZWxmLl93cml0
ZSgnIHRvb2s6ICUtLjNmXG4nICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUpCisgICAgICAgIHNlbGYu
X3dyaXRlKCdcbicpCisKKyAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQoc2Vs
ZiwgcmVzdWx0KToKKyAgICAgICAgIiIiUHJpbnRzIG9uZSB1bmV4cGVjdGVkIHRlc3QgcmVzdWx0
IGxpbmUuIiIiCisgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElP
Tl9ERVNDUklQVElPTlNbcmVzdWx0LnR5cGVdWzBdCisgICAgICAgIHNlbGYud3JpdGUoIiAgJXMg
LT4gdW5leHBlY3RlZCAlcyIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUocmVzdWx0LmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAg
ZGVzYyksICJ1bmV4cGVjdGVkIikKKworICAgIGRlZiBwcmludF9wcm9ncmVzcyhzZWxmLCByZXN1
bHRfc3VtbWFyeSwgcmV0cnlpbmcsIHRlc3RfbGlzdCk6CisgICAgICAgICIiIlByaW50IHByb2dy
ZXNzIHRocm91Z2ggdGhlIHRlc3RzIGFzIGRldGVybWluZWQgYnkgLS1wcmludC4iIiIKKyAgICAg
ICAgaWYgc2VsZi5lbmFibGVkKCdkZXRhaWxlZC1wcm9ncmVzcycpOgorICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnksIHRlc3RfbGlzdCkKKyAg
ICAgICAgZWxpZiBzZWxmLmVuYWJsZWQoJ29uZS1saW5lLXByb2dyZXNzJyk6CisgICAgICAgICAg
ICBzZWxmLl9wcmludF9vbmVfbGluZV9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgcmV0cnlpbmcp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiByZXN1bHRf
c3VtbWFyeS5yZW1haW5pbmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgn
JykKKworICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1h
cnksIHJldHJ5aW5nKToKKyAgICAgICAgIiIiRGlzcGxheXMgdGhlIHByb2dyZXNzIHRocm91Z2gg
dGhlIHRlc3QgcnVuLiIiIgorICAgICAgICBwZXJjZW50X2NvbXBsZXRlID0gMTAwICogKHJlc3Vs
dF9zdW1tYXJ5LmV4cGVjdGVkICsKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0
ZWQpIC8gcmVzdWx0X3N1bW1hcnkudG90YWwKKyAgICAgICAgYWN0aW9uID0gIlRlc3RpbmciCisg
ICAgICAgIGlmIHJldHJ5aW5nOgorICAgICAgICAgICAgYWN0aW9uID0gIlJldHJ5aW5nIgorICAg
ICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMgKCVkJSUpOiAlZCByYW4gYXMgZXhwZWN0ZWQs
ICVkIGRpZG4ndCwiCisgICAgICAgICAgICAiICVkIGxlZnQiICUgKGFjdGlvbiwgcGVyY2VudF9j
b21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCisgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKSkKKworICAgIGRlZiBf
cHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRlc3RfbGlzdCk6
CisgICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0cHV0IHdoZXJlIHdlIHBy
aW50IHRoZSBkaXJlY3RvcnkgbmFtZQorICAgICAgICBhbmQgb25lIGRvdCBmb3IgZWFjaCBjb21w
bGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKKyAgICAgICAgIi0tbG9nIGRldGFpbGVk
LXByb2dyZXNzIi4iIiIKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBs
ZW4odGVzdF9saXN0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG5leHRfdGVzdCA9
IHRlc3RfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICBuZXh0X2RpciA9
IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShuZXh0X3Rlc3QpKQorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0
ciA9PSAiIjoKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAi
ICUgKG5leHRfZGlyKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rpcgor
CisgICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgorICAg
ICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6CisgICAgICAgICAgICAg
ICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogLiIg
JSAobmV4dF9kaXIpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rp
cgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0ciArPSAiLiIKKworICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRfc3Vt
bWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5lbmFibGVk
KCd1bmV4cGVjdGVkJykpOgorICAgICAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIlc1xu
IiAlIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKQorICAgICAgICAgICAgICAgIHRlc3RfcmVz
dWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0c1tuZXh0X3Rlc3RdCisgICAgICAgICAgICAgICAg
c2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdCh0ZXN0X3Jlc3VsdCkKKyAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIHNlbGYuX2N1cnJl
bnRfZGlyCisKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgKz0gMQorICAg
ICAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4odGVzdF9saXN0KToK
KyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBuZXh0X3Rlc3QgPSB0ZXN0X2xp
c3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KKyAgICAgICAgICAgIG5leHRfZGlyID0gb3Mu
cGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShuZXh0X3Rlc3QpKQorCisgICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmlu
ZzoKKyAgICAgICAgICAgIHJlbWFpbl9zdHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5LnJl
bWFpbmluZykKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyVzIiAlIChzZWxm
Ll9jdXJyZW50X3Byb2dyZXNzX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZW1haW5fc3RyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYu
X21ldGVyLnByb2dyZXNzKCIlcyIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQorCisg
ICAgZGVmIHByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMp
OgorICAgICAgICAiIiJQcmludHMgYSBsaXN0IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMgdG8g
dGhlIGJ1aWxkYm90IHN0cmVhbS4iIiIKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgndW5leHBl
Y3RlZC1yZXN1bHRzJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwYXNzZXMgPSB7
fQorICAgICAgICBmbGFreSA9IHt9CisgICAgICAgIHJlZ3Jlc3Npb25zID0ge30KKworICAgICAg
ICBmb3IgdGVzdCwgcmVzdWx0cyBpbiB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10uaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRzWydhY3R1YWwnXS5zcGxpdCgiICIp
CisgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdHNbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQor
ICAgICAgICAgICAgaWYgYWN0dWFsID09IFsnUEFTUyddOgorICAgICAgICAgICAgICAgIGlmICdD
UkFTSCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9s
aXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
RXhwZWN0ZWQgdG8gY3Jhc2gsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbGlmICdUSU1FT1VUJyBp
biBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBh
c3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3Rl
ZCB0byB0aW1lb3V0LCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gZmFpbCwgYnV0IHBhc3NlZCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQorICAgICAgICAg
ICAgZWxpZiBsZW4oYWN0dWFsKSA+IDE6CisgICAgICAgICAgICAgICAgIyBXZSBncm91cCBmbGFr
eSB0ZXN0cyBieSB0aGUgZmlyc3QgYWN0dWFsIHJlc3VsdCB3ZSBnb3QuCisgICAgICAgICAgICAg
ICAgX2FkZF90b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3QpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhyZWdyZXNz
aW9ucywgcmVzdWx0c1snYWN0dWFsJ10sIHRlc3QpCisKKyAgICAgICAgaWYgbGVuKHBhc3Nlcykg
b3IgbGVuKGZsYWt5KSBvciBsZW4ocmVncmVzc2lvbnMpOgorICAgICAgICAgICAgc2VsZi5fYnVp
bGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYgbGVuKHBhc3Nlcyk6CisgICAg
ICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBwYXNzZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIlczogKCVkKVxuIiAlIChrZXksIGxl
bih0ZXN0cykpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAg
IGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIiAgJXNcbiIgJSB0ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxk
Ym90X3N0cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFt
LndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYgbGVuKGZsYWt5KToKKyAgICAgICAgICAgIGRlc2Ny
aXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUwor
ICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gZmxha3kuaXRlcml0ZW1zKCk6CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5s
b3dlcigpXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiVW5l
eHBlY3RlZCBmbGFraW5lc3M6ICVzICglZClcbiIKKyAgICAgICAgICAgICAgICAgICAgJSAoZGVz
Y3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQorICAgICAgICAgICAgICAgIHRlc3Rz
LnNvcnQoKQorCisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXVt0ZXN0XQorICAg
ICAgICAgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikKKyAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQoIiAi
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBF
Q1RBVElPTlNba2V5Lmxvd2VyKCldCisgICAgICAgICAgICAgICAgICAgIG5ld19leHBlY3RhdGlv
bnNfbGlzdCA9IGxpc3Qoc2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQorICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMgPSAlcyIgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgKHRlc3QsICIgIi5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlzdCkp
KQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorICAg
ICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYg
bGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3Rh
dGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUworICAgICAgICAgICAgZm9yIGtleSwg
dGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAg
ICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgIlJlZ3Jlc3Npb25zOiBVbmV4cGVjdGVkICVzIDogKCVkKVxuIiAlICgKKyAgICAgICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQorICAgICAgICAg
ICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgor
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMgPSAl
c1xuIiAlICh0ZXN0LCBrZXkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVh
bS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJc
biIpCisKKyAgICAgICAgaWYgbGVuKHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSkgYW5kIHNl
bGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53
cml0ZSgiJXNcbiIgJSAiLSIgKiA3OCkKKworICAgIGRlZiBwcmludF91cGRhdGUoc2VsZiwgbXNn
KToKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgndXBkYXRlcycpOgorICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZShtc2cpCisKKyAgICBkZWYgd3JpdGUoc2Vs
ZiwgbXNnLCBvcHRpb249Im1pc2MiKToKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZChvcHRpb24p
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3dyaXRlKCIlc1xuIiAlIG1zZykK
KworICAgIGRlZiBfd3JpdGUoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRl
KG1zZykKKworIworIyBVdGlsaXR5IHJvdXRpbmVzIHVzZWQgYnkgdGhlIENvbnRyb2xsZXIgY2xh
c3MKKyMKKworCitkZWYgX2FkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUpOgor
ICAgIGRpY3Quc2V0ZGVmYXVsdChrZXksIFtdKS5hcHBlbmQodmFsdWUpCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
cmludGluZ191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NThlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGlu
Z191bml0dGVzdC5weQpAQCAtMCwwICsxLDUxNCBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBwcmludGluZy5weS4iIiIKKworaW1wb3J0
IG9zCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0
IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGluZworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cworCisKK2NsYXNzIEFycmF5U3RyZWFtKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jb250ZW50cyA9IFtdCisK
KyAgICBkZWYgd3JpdGUoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5fY29udGVudHMuYXBwZW5k
KG1zZykKKworICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb250ZW50
cworCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9jb250ZW50cyA9IFtdCisK
KyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiAobGVuKHNlbGYuX2NvbnRlbnRz
KSA9PSAwKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPEFycmF5U3RyZWFtOiAnICsgc3RyKHNl
bGYuX2NvbnRlbnRzKSArICc+JworCisKK2RlZiBnZXRfb3B0aW9ucyhhcmdzKToKKyAgICBsbyA9
IHByaW50aW5nLnByaW50X29wdGlvbnMoKQorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5P
cHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9bG8pCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFy
c2VfYXJncyhhcmdzKQorCisKK2RlZiBnZXRfcmVzdWx0KGZpbGVuYW1lLCByZXN1bHRfdHlwZT10
ZXN0X2V4cGVjdGF0aW9ucy5QQVNTLCBydW5fdGltZT0wKToKKyAgICBmYWlsdXJlcyA9IFtdCisg
ICAgaWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDoKKyAgICAgICAg
ZmFpbHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpXQorICAgIGVsaWYgcmVz
dWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAgICAgIGZhaWx1cmVzID0g
W3Rlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCldCisgICAgcmV0dXJuIGR1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkLlRlc3RSZXN1bHQoZmlsZW5hbWUsIGZhaWx1cmVzLCBydW5fdGltZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9h
bGxfZGlmZnM9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lX2Zvcl9kaWZmcz0wKQorCisKK2RlZiBnZXRfcmVzdWx0X3N1bW1hcnkocG9ydF9vYmos
IHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19zdHIpOgorICAgIGV4cGVjdGF0aW9ucyA9IHRlc3Rf
ZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMoCisgICAgICAgIHBvcnRfb2JqLCB0ZXN0X2Zp
bGVzLCBleHBlY3RhdGlvbnNfc3RyLAorICAgICAgICBwb3J0X29iai50ZXN0X3BsYXRmb3JtX25h
bWUoKSwgaXNfZGVidWdfbW9kZT1GYWxzZSwKKyAgICAgICAgaXNfbGludF9tb2RlPUZhbHNlLCB0
ZXN0c19hcmVfcHJlc2VudD1GYWxzZSkKKworICAgIHJzID0gcnVuX3dlYmtpdF90ZXN0cy5SZXN1
bHRTdW1tYXJ5KGV4cGVjdGF0aW9ucywgdGVzdF9maWxlcykKKyAgICByZXR1cm4gcnMsIGV4cGVj
dGF0aW9ucworCisKK2NsYXNzIFRlc3RVdGlsaXR5RnVuY3Rpb25zKHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfbG9nZ2luZyhzZWxmKToKKyAgICAgICAgIyBGSVhN
RTogV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byByZXNldCB0aGUgYmFzaWMgbG9nZ2VyLgor
ICAgICAgICAjIEZJWE1FOiBJZiBvdGhlciB0ZXN0aW5nIGNsYXNzZXMgY2FsbCBsb2dnaW5nLmJh
c2ljQ29uZmlnKCkgdGhlbgorICAgICAgICAjIEZJWE1FOiB0aGVzZSBjYWxscyBiZWNvbWUgbm8t
b3BzIGFuZCB3ZSBjYW4ndCBjb250cm9sIHRoZQorICAgICAgICAjIEZJWE1FOiBjb25maWd1cmF0
aW9uIHRvIHRlc3QgdGhpbmdzIHByb3Blcmx5LgorICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0
X29wdGlvbnMoW10pCisgICAgICAgIHN0cmVhbSA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAgcHJp
bnRpbmcuY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgc3RyZWFtKQorICAgICAgICBsb2dnaW5n
LmluZm8oInRoaXMgc2hvdWxkIGJlIGxvZ2dlZCIpCisgICAgICAgICMgc2VsZi5hc3NlcnRGYWxz
ZShzdHJlYW0uZW1wdHkoKSkKKworICAgICAgICBzdHJlYW0ucmVzZXQoKQorICAgICAgICBsb2dn
aW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBub3QgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFz
c2VydFRydWUoc3RyZWFtLmVtcHR5KCkpCisKKyAgICAgICAgc3RyZWFtLnJlc2V0KCkKKyAgICAg
ICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFsnLS12ZXJib3NlJ10pCisgICAgICAgIHBy
aW50aW5nLmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkKKyAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFzc2VydEZh
bHNlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfb3B0aW9ucyhzZWxmKToK
KyAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFtdKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUob3B0aW9ucyBpcyBub3QgTm9uZSkKKworCitjbGFzcyAgVGVzdHByaW50ZXIodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBnZXRfcHJpbnRlcihzZWxmLCBhcmdzPU5vbmUsIHNp
bmdsZV90aHJlYWRlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICBpc19mdWxseV9wYXJhbGxl
bD1GYWxzZSk6CisgICAgICAgIHByaW50aW5nX29wdGlvbnMgPSBwcmludGluZy5wcmludF9vcHRp
b25zKCkKKyAgICAgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRp
b25fbGlzdD1wcmludGluZ19vcHRpb25zKQorICAgICAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9u
X3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0LmdldCgn
dGVzdCcsIG9wdGlvbnMpCisgICAgICAgIG5wcm9jID0gMgorICAgICAgICBpZiBzaW5nbGVfdGhy
ZWFkZWQ6CisgICAgICAgICAgICBucHJvYyA9IDEKKworICAgICAgICByZWd1bGFyX291dHB1dCA9
IEFycmF5U3RyZWFtKCkKKyAgICAgICAgYnVpbGRib3Rfb3V0cHV0ID0gQXJyYXlTdHJlYW0oKQor
ICAgICAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRlcihzZWxmLl9wb3J0LCBvcHRpb25zLCBy
ZWd1bGFyX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRi
b3Rfb3V0cHV0LCBzaW5nbGVfdGhyZWFkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICByZXR1cm4gcHJpbnRlciwgcmVndWxh
cl9vdXRwdXQsIGJ1aWxkYm90X291dHB1dAorCisgICAgZGVmIHRlc3RfaGVscF9wcmludGVyKHNl
bGYpOgorICAgICAgICAjIEhlcmUgYW5kIGJlbG93IHdlJ2xsIGNhbGwgdGhlICJyZWd1bGFyIiBw
cmludGVyIGVyciBhbmQgdGhlCisgICAgICAgICMgYnVpbGRib3QgcHJpbnRlciBvdXQ7IHRoaXMg
Y29ycmVzcG9uZHMgdG8gaG93IHRoaW5ncyBydW4gb24gdGhlCisgICAgICAgICMgYm90cyB3aXRo
IHN0ZGVyciBhbmQgc3Rkb3V0LgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0
X3ByaW50ZXIoKQorCisgICAgICAgICMgVGhpcyByb3V0aW5lIHNob3VsZCBwcmludCBzb21ldGhp
bmcgdG8gc3Rkb3V0LiB0ZXN0aW5nIHdoYXQgaXQgaXMKKyAgICAgICAgIyBpcyBraW5kIG9mIHBv
aW50bGVzcy4KKyAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50aW5nKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0
eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfYWN0dWFsKHNlbGYpOgorICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAg
ICAgICAgcHJpbnRlci5wcmludF9hY3R1YWwoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcs
ICdhY3R1YWwnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9hY3R1YWwoJ2hlbGxvJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG91dC5nZXQoKSwgWydoZWxsb1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50
ZXIucHJpbnRfYWN0dWFsKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1w
dHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0KCksIFsnaGVsbG9cbiddKQor
CisgICAgZGVmIHRlc3RfcHJpbnRfYWN0dWFsX2J1aWxkYm90KHNlbGYpOgorICAgICAgICAjIEZJ
WE1FOiBUZXN0IHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgYWN0dWFsIHJlc3VsdHMgbWF0Y2hlcyB3
aGF0IHRoZQorICAgICAgICAjIGJ1aWxkYm90IGlzIGV4cGVjdGluZy4KKyAgICAgICAgcGFzcwor
CisgICAgZGVmIHRlc3RfcHJpbnRfY29uZmlnKHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAg
cHJpbnRlci5wcmludF9jb25maWcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVy
ci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tcHJpbnQnLCAnY29uZmlnJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCdo
ZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkK
KworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50
JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoJ2hlbGxvJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9cbiddKQorCisgICAg
ZGVmIHRlc3RfcHJpbnRfZXhwZWN0ZWQoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0
ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmlu
dGVyLnByaW50X2V4cGVjdGVkKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIu
ZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIo
WyctLXByaW50JywgJ2V4cGVjdGVkJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfZXhwZWN0ZWQo
J2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9cbidd
KQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJp
bnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X2V4cGVjdGVkKCdoZWxs
bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkKKwor
ICAgIGRlZiB0ZXN0X3ByaW50X3RpbWluZyhzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBv
dXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHBy
aW50ZXIucHJpbnRfdGltaW5nKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIu
ZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIo
WyctLXByaW50JywgJ3RpbWluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3RpbWluZygnaGVs
bG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsb1xuJ10pCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcs
ICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfdGltaW5nKCdoZWxsbycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkKKworICAgIGRl
ZiB0ZXN0X3ByaW50X3VwZGF0ZShzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfdXBkYXRlKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHko
KSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXBy
aW50JywgJ3VwZGF0ZXMnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoJ2hlbGxvJykK
KworICAgICAgICAjIE5vdGUgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBjYXJyaWFnZSByZXR1
cm4gaGVyZTsgdXBkYXRlcygpCisgICAgICAgICMgYXJlIG1lYW50IHRvIGJlIG92ZXJ3cml0dGVu
LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsbyddKQorCisgICAg
ICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZl
cnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgnaGVsbG8nKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsbyddKQorCisgICAgZGVmIHRlc3Rf
cHJpbnRfb25lX2xpbmVfc3VtbWFyeShzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50
ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmlu
dGVyKFsnLS1wcmludCcsICdvbmUtbGluZS1zdW1tYXJ5J10pCisgICAgICAgIHByaW50ZXIucHJp
bnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIu
Z2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLlxuIl0pCisKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5n
J10pCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVj
dGVkLlxuIl0pCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9v
bmVfbGluZV9zdW1tYXJ5KDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQs
IDEgZGlkbid0OlxuXG4iXSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVy
LnByaW50X29uZV9saW5lX3N1bW1hcnkoMywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
ZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbIlxuMiB0ZXN0cyByYW4gYXMg
ZXhwZWN0ZWQsIDEgZGlkbid0OlxuXG4iXSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3Rlc3RfcmVz
dWx0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBnZXRfcmVzdWx0KCdmb28uaHRtbCcpCisgICAg
ICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90
aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0
ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAg
ICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAndW5l
eHBlY3RlZCddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhw
ZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAg
ICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhw
X3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsnICBmb28uaHRtbCAtPiB1bmV4cGVjdGVkIHBhc3NcbiddKQorCisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGlu
ZyddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9
VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rf
c3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAg
cHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3Ry
PScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgWycgIGZvby5odG1sIC0+IHVuZXhwZWN0ZWQgcGFzc1xuJ10pCisKKyAgICAgICAgcHJpbnRl
ciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisg
ICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwg
ZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScn
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRl
ciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlLXVuZXhwZWN0ZWQnXSkK
KyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUs
IGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0n
JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIGVyci5y
ZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3Rl
ZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorCisgICAg
ICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAndHJh
Y2UtZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3Vs
dCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgp
KQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1
bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorCisgICAgZGVmIHRlc3RfcHJpbnRfcHJvZ3Jl
c3Moc2VsZik6CisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ2Zvby5odG1sJywgJ2Jhci5odG1sJ10K
KyAgICAgICAgZXhwZWN0YXRpb25zID0gJycKKworICAgICAgICAjIHRlc3QgdGhhdCB3ZSBwcmlu
dCBub3RoaW5nCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihb
Jy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1t
YXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKworICAgICAgICBwcmlu
dGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5
KCkpCisKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxl
cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IHJlZ3VsYXIgZnVuY3Rpb25h
bGl0eQorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXBy
aW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25l
LWxpbmUtcHJvZ3Jlc3MnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFs
c2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQo
KQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJz
LCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9w
cmludF9wcm9ncmVzc19fZGV0YWlsZWQoc2VsZik6CisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ3Bh
c3MvcGFzcy5odG1sJywgJ3Bhc3MvdGltZW91dC5odG1sJywgJ2ZhaWwvY3Jhc2guaHRtbCddCisg
ICAgICAgIGV4cGVjdGF0aW9ucyA9ICdwYXNzL3RpbWVvdXQuaHRtbCA9IFRJTUVPVVQnCisKKyAg
ICAgICAgIyBmaXJzdCwgdGVzdCB0aGF0IGl0IGlzIGRpc2FibGVkIHByb3Blcmx5CisgICAgICAg
ICMgc2hvdWxkIHN0aWxsIHByaW50IG9uZS1saW5lLXByb2dyZXNzCisgICAgICAgIHByaW50ZXIs
IGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigKKyAgICAgICAgICAgIFsnLS1wcmludCcsICdk
ZXRhaWxlZC1wcm9ncmVzcyddLCBzaW5nbGVfdGhyZWFkZWQ9RmFsc2UpCisgICAgICAgIHJzLCBl
eHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRp
b25zKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxl
cykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgbm93IHRlc3QgdGhlIGVuYWJsZWQg
cGF0aHMKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKAorICAg
ICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzJ10sIHNpbmdsZV90aHJlYWRl
ZD1UcnVlKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQs
IHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVz
cyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVt
cHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBl
cnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3By
b2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVy
ci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAg
ICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMu
VElNRU9VVCksIEZhbHNlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0
Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRt
bCcsIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgVHJ1ZSkKKyAgICAgICAgZXJyLnJlc2V0KCkK
KyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywg
RmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIFdlIG9u
bHkgY2xlYXIgdGhlIG1ldGVyIHdoZW4gcmV0cnlpbmcgdy8gZGV0YWlsZWQtcHJvZ3Jlc3MuCisg
ICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIu
cHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZXJyLmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5
KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKAorICAg
ICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzLHVuZXhwZWN0ZWQnXSwgc2lu
Z2xlX3RocmVhZGVkPVRydWUpCisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnko
c2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorICAgICAgICBwcmludGVyLnBy
aW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQor
CisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50
ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHko
KSkKKworICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0bWwnLCB0ZXN0X2V4
cGVjdGF0aW9ucy5USU1FT1VUKSwgRmFsc2UpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdw
YXNzL3RpbWVvdXQuaHRtbCcpLCBUcnVlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFp
bC9jcmFzaC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpLCBUcnVlKQorICAgICAgICBl
cnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3By
b2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShl
cnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAg
ICAgICMgV2Ugb25seSBjbGVhciB0aGUgbWV0ZXIgd2hlbiByZXRyeWluZyB3LyBkZXRhaWxlZC1w
cm9ncmVzcy4KKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAg
ICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkK
KyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVy
ci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tcHJpbnQnLCAnbWlzYyddKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBlcnIucmVzZXQoKQor
ICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAiY29uZmlnIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5n
ZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLndy
aXRlKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAg
ICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAiY29uZmlnIikKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3ByaW50
X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHJvdXRpbmUgaXMgdGhl
IG9ubHkgb25lIHRoYXQgcHJpbnRzIHN0dWZmIHRoYXQgdGhlIGJvdHMKKyAgICAgICAgIyBjYXJl
IGFib3V0LgorICAgICAgICBkZWYgZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZCwgcGFz
c2luZywgZmxha3kpOgorICAgICAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShz
ZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAgICAgICBpZiBleHBl
Y3RlZDoKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0bWwn
LCB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0
ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1s
JywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCksIGV4
cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0
bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksCisgICAgICAgICAgICAgICAgICAgZXhwZWN0
ZWQpCisgICAgICAgICAgICBlbGlmIHBhc3Npbmc6CisgICAgICAgICAgICAgICAgcnMuYWRkKGdl
dF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJyksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJz
LmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBleHBlY3RlZCkKKyAgICAgICAg
ICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJyksIGV4cGVjdGVkKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFz
cy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bh
c3MvdGltZW91dC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlv
bnMuQ1JBU0gpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
ZmFpbC9jcmFzaC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAg
ICAgICAgICAgIHJldHJ5ID0gcnMKKyAgICAgICAgICAgIGlmIGZsYWt5OgorICAgICAgICAgICAg
ICAgIHJldHJ5LCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9maWxl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGF0aW9ucykKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNz
Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0X3Jlc3VsdCgncGFz
cy90aW1lb3V0Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0X3Jl
c3VsdCgnZmFpbC9jcmFzaC5odG1sJyksIFRydWUpCisgICAgICAgICAgICB1bmV4cGVjdGVkX3Jl
c3VsdHMgPSBydW5fd2Via2l0X3Rlc3RzLnN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMoCisg
ICAgICAgICAgICAgICAgc2VsZi5fcG9ydCwgZXhwLCBycywgcmV0cnkpCisgICAgICAgICAgICBy
ZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzCisKKyAgICAgICAgdGVzdF9maWxlcyA9IFsncGFzcy9w
YXNzLmh0bWwnLCAncGFzcy90aW1lb3V0Lmh0bWwnLCAnZmFpbC9jcmFzaC5odG1sJ10KKyAgICAg
ICAgZXhwZWN0YXRpb25zID0gJycKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYu
Z2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgdXIgPSBnZXRfdW5l
eHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxz
ZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91
dC5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tcHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd1bmV4cGVjdGVkLXJlc3VsdHMnXSkKKworICAgICAgICAjIHRlc3QgZXZlcnl0aGluZyBy
dW5uaW5nIGFzIGV4cGVjdGVkCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhl
eHBlY3RlZD1UcnVlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRl
ci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
cnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAg
ICAgICMgdGVzdCBmYWlsdXJlcworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVz
ZXQoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2Us
IHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhw
ZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgdGVzdCB1
bmV4cGVjdGVkIGZsYWt5IHJlc3VsdHMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0
LnJlc2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZh
bHNlLCBwYXNzaW5nPVRydWUsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3Vu
ZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgdGVz
dCB1bmV4cGVjdGVkIHBhc3NlcworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVz
ZXQoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2Us
IHBhc3Npbmc9RmFsc2UsIGZsYWt5PVRydWUpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBl
Y3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0
KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHVyID0gZ2V0
X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9
RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2Uob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHNf
YnVpbGRib3Qoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRlc3QgdGhhdCBwcmludF91bmV4cGVj
dGVkX3Jlc3VsdHMoKSBwcm9kdWNlcyB0aGUgcHJpbnRlciB0aGUKKyAgICAgICAgIyBidWlsZGJv
dCBpcyBleHBlY3RpbmcuCisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCBlZGVmNDg1Li5jYjlmM2Vj
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3Rlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC90ZXN0LnB5CkBAIC02Niw2ICs2NiwxMyBAQCBjbGFzcyBUZXN0UG9ydChiYXNlLlBv
cnQpOgogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFt
ZSk6CiAgICAgICAgIHJldHVybiAnJwogCisgICAgZGVmIHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
c2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gZmlsZW5hbWUKKworICAgIGRlZiBleHBl
Y3RlZF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSwgc3VmZml4KToKKyAgICAgICAgKGJhc2VuYW1l
LCBleHQpID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGJhc2Vu
YW1lICsgJy4nICsgc3VmZml4CisKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX25hbWUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggMWU2M2E3YS4uOGNh
YWQ3NyAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC02NCw3ICs2NCw3IEBAIGltcG9y
dCB0cmFjZWJhY2sKIAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJh
dG9yCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQorZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfZmFpbHVyZXMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZpbGVzCkBAIC04MCwzMyAr
ODAsNiBAQCBpbXBvcnQgcG9ydAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5
LmxheW91dF90ZXN0cy5ydW5fd2Via2l0X3Rlc3RzIikKIAotIyBkdW1teSB2YWx1ZSB1c2VkIGZv
ciBjb21tYW5kLWxpbmUgZXhwbGljaXRuZXNzIHRvIGRpc2FibGUgZGVmYXVsdHMKLUxPR19OT1RI
SU5HID0gJ25vdGhpbmcnCi0KLSMgRGlzcGxheSB0aGUgb25lLWxpbmUgcHJvZ3Jlc3MgYmFyICgl
IGNvbXBsZXRlZCkgd2hpbGUgdGVzdGluZwotTE9HX1BST0dSRVNTID0gJ3Byb2dyZXNzJwotCi0j
IEluZGljYXRlcyB0aGF0IHdlIHdhbnQgZGV0YWlsZWQgcHJvZ3Jlc3MgdXBkYXRlcyBpbiB0aGUg
b3V0cHV0IChwcmludHMKLSMgZGlyZWN0b3J5LWJ5LWRpcmVjdG9yeSBmZWVkYmFjaykuCi1MT0df
REVUQUlMRURfUFJPR1JFU1MgPSAnZGV0YWlsZWQtcHJvZ3Jlc3MnCi0KLSMgTG9nIHRoZSBvbmUt
bGluZSBzdW1tYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIHJ1bgotTE9HX1NVTU1BUlkgPSAnc3VtbWFy
eScKLQotIyAiVHJhY2UiIHRoZSB0ZXN0IC0gbG9nIHRoZSBleHBlY3RlZCByZXN1bHQsIHRoZSBh
Y3R1YWwgcmVzdWx0LCBhbmQgdGhlCi0jIGJhc2VsaW5lcyB1c2VkCi1MT0dfVFJBQ0UgPSAndHJh
Y2UnCi0KLSMgTG9nIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hpbGUgcnVubmluZyAoaW5zdGVh
ZCBvZiBqdXN0IGF0IHRoZSBlbmQpLgotTE9HX1VORVhQRUNURUQgPSAndW5leHBlY3RlZCcKLUxP
R19VTkVYUEVDVEVEX1JFU1VMVFMgPSAndW5leHBlY3RlZC1yZXN1bHRzJwotCi1MT0dfVkFMVUVT
ID0gIiwiLmpvaW4oKCJhY3R1YWwiLCAiY29uZmlnIiwgTE9HX0RFVEFJTEVEX1BST0dSRVNTLCAi
ZXhwZWN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgIExPR19OT1RISU5HLCBMT0dfUFJPR1JF
U1MsIExPR19TVU1NQVJZLCAidGltaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICBMT0dfVU5F
WFBFQ1RFRCwgTE9HX1VORVhQRUNURURfUkVTVUxUUykpCi1MT0dfREVGQVVMVF9WQUxVRSA9ICIs
Ii5qb2luKChMT0dfREVUQUlMRURfUFJPR1JFU1MsIExPR19TVU1NQVJZLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTE9HX1VORVhQRUNURUQsIExPR19VTkVYUEVDVEVEX1JFU1VMVFMp
KQotCiAjIEJ1aWxkZXIgYmFzZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgdGVzdCBy
ZXN1bHRzLgogQlVJTERFUl9CQVNFX1VSTCA9ICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2J1
aWxkYm90L2xheW91dF90ZXN0X3Jlc3VsdHMvIgogCkBAIC0xODEsNyArMTU0LDcgQEAgY2xhc3Mg
UmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAiIiIKIAogICAgICAgICBzZWxmLnRlc3Rz
X2J5X2V4cGVjdGF0aW9uW3Jlc3VsdC50eXBlXS5hZGQocmVzdWx0LmZpbGVuYW1lKQotICAgICAg
ICBzZWxmLnJlc3VsdHNbcmVzdWx0LmZpbGVuYW1lXSA9IHJlc3VsdC50eXBlCisgICAgICAgIHNl
bGYucmVzdWx0c1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0CiAgICAgICAgIHNlbGYucmVtYWlu
aW5nIC09IDEKICAgICAgICAgaWYgbGVuKHJlc3VsdC5mYWlsdXJlcyk6CiAgICAgICAgICAgICBz
ZWxmLmZhaWx1cmVzW3Jlc3VsdC5maWxlbmFtZV0gPSByZXN1bHQuZmFpbHVyZXMKQEAgLTE5Miw2
ICsxNjUsODMgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAgICAgc2Vs
Zi51bmV4cGVjdGVkICs9IDEKIAogCitkZWYgc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhw
b3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkpOgorICAgICIiIlN1bW1hcml6ZSBhbnkgdW5l
eHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KKworICAgIFRPRE8oZHByYW5rZSk6IHNwbGl0IHRo
aXMgZGF0YSBzdHJ1Y3R1cmUgaW50byBhIHNlcGFyYXRlIGNsYXNzPworCisgICAgQXJnczoKKyAg
ICAgICAgcG9ydF9vYmo6IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCisgICAgICAg
IGV4cGVjdGF0aW9uczogdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucyBvYmplY3QK
KyAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gaW5pdGlhbCB0ZXN0
IHJ1bnMKKyAgICAgICAgcmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBmaW5hbCB0
ZXN0IHJ1biBvZiByZXRyaWVkIHRlc3RzCisgICAgUmV0dXJuczoKKyAgICAgICAgQSBkaWN0aW9u
YXJ5IGNvbnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0
aGUKKyAgICAgICAgcnVuLCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICAgICAgICAndmVy
c2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEgaW4gdGhpcyB2ZXJzaW9uKQorICAgICAgICAn
Zml4YWJsZSc6ICMgb2YgZml4YWJsZSB0ZXN0cyAoTk9XIC0gUEFTUykKKyAgICAgICAgJ3NraXBw
ZWQnOiAjIG9mIHNraXBwZWQgdGVzdHMgKE5PVyAmIFNLSVBQRUQpCisgICAgICAgICdudW1fcmVn
cmVzc2lvbnMnOiAjIG9mIG5vbi1mbGFreSBmYWlsdXJlcworICAgICAgICAnbnVtX2ZsYWt5Jzog
IyBvZiBmbGFreSBmYWlsdXJlcworICAgICAgICAnbnVtX3Bhc3Nlcyc6ICMgb2YgdW5leHBlY3Rl
ZCBwYXNzZXMKKyAgICAgICAgJ3Rlc3RzJzogYSBkaWN0IG9mIHRlc3RzIC0+IHsnZXhwZWN0ZWQn
OiAnLi4uJywgJ2FjdHVhbCc6ICcuLi4nfQorICAgICIiIgorICAgIHJlc3VsdHMgPSB7fQorICAg
IHJlc3VsdHNbJ3ZlcnNpb24nXSA9IDEKKworICAgIHRiZSA9IHJlc3VsdF9zdW1tYXJ5LnRlc3Rz
X2J5X2V4cGVjdGF0aW9uCisgICAgdGJ0ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxp
bmUKKyAgICByZXN1bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5P
V10gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlv
bnMuUEFTU10pCisgICAgcmVzdWx0c1snc2tpcHBlZCddID0gbGVuKHRidFt0ZXN0X2V4cGVjdGF0
aW9ucy5OT1ddICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhw
ZWN0YXRpb25zLlNLSVBdKQorCisgICAgbnVtX3Bhc3NlcyA9IDAKKyAgICBudW1fZmxha3kgPSAw
CisgICAgbnVtX3JlZ3Jlc3Npb25zID0gMAorICAgIGtleXdvcmRzID0ge30KKyAgICBmb3Igaywg
diBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlMuaXRlcml0ZW1zKCk6CisgICAg
ICAgIGtleXdvcmRzW3ZdID0gay51cHBlcigpCisKKyAgICB0ZXN0cyA9IHt9CisgICAgZm9yIGZp
bGVuYW1lLCByZXN1bHQgaW4gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzLml0ZXJp
dGVtcygpOgorICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3Jp
Z2luYWwgcnVuLCB3ZSBpZ25vcmUKKyAgICAgICAgIyB3aGV0aGVyIG9yIG5vdCBpdCBjcmFzaGVk
IHdoZW4gd2UgcmV0cmllZCBpdCAoaWYgd2UgcmV0cmllZCBpdCksCisgICAgICAgICMgYW5kIGFs
d2F5cyBjb25zaWRlciB0aGUgcmVzdWx0IG5vdCBmbGFreS4KKyAgICAgICAgdGVzdCA9IHBvcnRf
b2JqLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCisgICAgICAgIGV4cGVjdGVkID0g
ZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKQorICAgICAgICBh
Y3R1YWwgPSBba2V5d29yZHNbcmVzdWx0XV0KKworICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9l
eHBlY3RhdGlvbnMuUEFTUzoKKyAgICAgICAgICAgIG51bV9wYXNzZXMgKz0gMQorICAgICAgICBl
bGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAgICAgIG51bV9y
ZWdyZXNzaW9ucyArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBmaWxlbmFtZSBu
b3QgaW4gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHM6CisgICAgICAgICAgICAgICAg
YWN0dWFsLmV4dGVuZChleHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCisgICAg
ICAgICAgICAgICAgICAgIGZpbGVuYW1lKS5zcGxpdCgiICIpKQorICAgICAgICAgICAgICAgIG51
bV9mbGFreSArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHJ5X3Jl
c3VsdCA9IHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW2ZpbGVuYW1lXQorICAgICAg
ICAgICAgICAgIGlmIHJlc3VsdCAhPSByZXRyeV9yZXN1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGFjdHVhbC5hcHBlbmQoa2V5d29yZHNbcmV0cnlfcmVzdWx0XSkKKyAgICAgICAgICAgICAgICAg
ICAgbnVtX2ZsYWt5ICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQorCisgICAgICAgIHRlc3RzW3Rlc3RdID0ge30KKyAg
ICAgICAgdGVzdHNbdGVzdF1bJ2V4cGVjdGVkJ10gPSBleHBlY3RlZAorICAgICAgICB0ZXN0c1t0
ZXN0XVsnYWN0dWFsJ10gPSAiICIuam9pbihhY3R1YWwpCisKKyAgICByZXN1bHRzWyd0ZXN0cydd
ID0gdGVzdHMKKyAgICByZXN1bHRzWydudW1fcGFzc2VzJ10gPSBudW1fcGFzc2VzCisgICAgcmVz
dWx0c1snbnVtX2ZsYWt5J10gPSBudW1fZmxha3kKKyAgICByZXN1bHRzWydudW1fcmVncmVzc2lv
bnMnXSA9IG51bV9yZWdyZXNzaW9ucworCisgICAgcmV0dXJuIHJlc3VsdHMKKworCiBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICIiIkEgY2xhc3MgZm9yIG1hbmFnaW5nIHJ1bm5pbmcgYSBzZXJpZXMg
b2YgdGVzdHMgb24gYSBzZXJpZXMgb2YgbGF5b3V0CiAgICAgdGVzdCBmaWxlcy4iIiIKQEAgLTIw
NCwxNyArMjU0LDE3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVuZGVyVHJl
ZS4KICAgICBERUZBVUxUX1RFU1RfVElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgbWV0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1
bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBwb3J0OiBh
biBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lmaWMKICAgICAgICAgICBvcHRpb25zOiBh
IGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKLSAgICAgICAgICBtZXRlcjogYSBN
ZXRlcmVkU3RyZWFtIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICBwcmlu
dGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVzIHRvLgogICAgICAgICAiIiIK
ICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlv
bnMKLSAgICAgICAgc2VsZi5fbWV0ZXIgPSBtZXRlcgorICAgICAgICBzZWxmLl9wcmludGVyID0g
cHJpbnRlcgogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwg
cHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJl
X3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCkBAIC0yMjgsMTIgKzI3OCw2
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IE5v
bmUKICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVldWUuUXVldWUoKQogCi0gICAgICAg
ICMgVGhlc2UgYXJlIHVzZWQgZm9yIC0tbG9nIGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0
YXR1cyBieQotICAgICAgICAjIGRpcmVjdG9yeS4KLSAgICAgICAgc2VsZi5fY3VycmVudF9kaXIg
PSBOb25lCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIKLSAgICAgICAg
c2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKLQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9
IEZhbHNlCiAKICAgICAgICAgIyBIYWNrIGZvciBkdW1waW5nIHRocmVhZHMgb24gdGhlIGJvdHMK
QEAgLTI3OSwxOSArMzIzLDE2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBlbHNl
OgogICAgICAgICAgICAgICAgIHJhaXNlIGVycgogCi0gICAgZGVmIHByZXBhcmVfbGlzdHNfYW5k
X3ByaW50X291dHB1dChzZWxmLCB3cml0ZSk6CisgICAgZGVmIHByZXBhcmVfbGlzdHNfYW5kX3By
aW50X291dHB1dChzZWxmKToKICAgICAgICAgIiIiQ3JlYXRlIGFwcHJvcHJpYXRlIHN1YnNldHMg
b2YgdGVzdCBsaXN0cyBhbmQgcmV0dXJucyBhCiAgICAgICAgIFJlc3VsdFN1bW1hcnkgb2JqZWN0
LiBBbHNvIHByaW50cyBleHBlY3RlZCB0ZXN0IGNvdW50cy4KLQotICAgICAgICBBcmdzOgotICAg
ICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2lu
Z1dyaXRlcikgb3IKLSAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAiIiIK
IAogICAgICAgICAjIFJlbW92ZSBza2lwcGVkIC0gYm90aCBmaXhhYmxlIGFuZCBpZ25vcmVkIC0g
ZmlsZXMgZnJvbSB0aGUKICAgICAgICAgIyB0b3AtbGV2ZWwgbGlzdCBvZiBmaWxlcyB0byB0ZXN0
LgogICAgICAgICBudW1fYWxsX3Rlc3RfZmlsZXMgPSBsZW4oc2VsZi5fdGVzdF9maWxlcykKLSAg
ICAgICAgd3JpdGUoIkZvdW5kOiAgJWQgdGVzdHMiICUgbnVtX2FsbF90ZXN0X2ZpbGVzKQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCJGb3VuZDogICVkIHRlc3RzIiAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbihzZWxmLl90ZXN0X2ZpbGVz
KSkpCiAgICAgICAgIGlmIG5vdCBudW1fYWxsX3Rlc3RfZmlsZXM6CiAgICAgICAgICAgICBfbG9n
LmNyaXRpY2FsKCJObyB0ZXN0cyB0byBydW4uIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCkBA
IC0zNTgsNyArMzk5LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICAgICAgdGVzdHNf
cnVuX21zZyA9ICdSdW5uaW5nOiAlZCB0ZXN0cyAoY2h1bmsgc2xpY2UgWyVkOiVkXSBvZiAlZCkn
ICUgKAogICAgICAgICAgICAgICAgIChzbGljZV9lbmQgLSBzbGljZV9zdGFydCksIHNsaWNlX3N0
YXJ0LCBzbGljZV9lbmQsIG51bV90ZXN0cykKLSAgICAgICAgICAgIHdyaXRlKHRlc3RzX3J1bl9t
c2cpCisgICAgICAgICAgICBzZWxmLl9wcmludC5wcmludF9leHBlY3RlZCh0ZXN0c19ydW5fbXNn
KQogCiAgICAgICAgICAgICAjIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBhbmQgd2UgZG9uJ3QgaGF2
ZSBlbm91Z2ggdGVzdHMsIHdlIHJ1biBzb21lCiAgICAgICAgICAgICAjIGZyb20gdGhlIGJlZ2lu
bmluZy4KQEAgLTM2Nyw3ICs0MDgsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAg
ICAgIGV4dHJhID0gMSArIGNodW5rX2xlbiAtIChzbGljZV9lbmQgLSBzbGljZV9zdGFydCkKICAg
ICAgICAgICAgICAgICBleHRyYV9tc2cgPSAoJyAgIGxhc3QgY2h1bmsgaXMgcGFydGlhbCwgYXBw
ZW5kaW5nIFswOiVkXScgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhKQotICAg
ICAgICAgICAgICAgIHdyaXRlKGV4dHJhX21zZykKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X2V4cGVjdGVkKGV4dHJhX21zZykKICAgICAgICAgICAgICAgICB0ZXN0c19ydW5f
bXNnICs9ICJcbiIgKyBleHRyYV9tc2cKICAgICAgICAgICAgICAgICBmaWxlcy5leHRlbmQodGVz
dF9maWxlc1swOmV4dHJhXSkKICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBh
dGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LApAQCAtMzk5LDE3ICs0NDAs
MTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICByZXN1bHRfc3VtbWFyeSA9IFJlc3Vs
dFN1bW1hcnkoc2VsZi5fZXhwZWN0YXRpb25zLAogICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxl
cyB8IHNraXBfY2h1bmspCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2Zf
dHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVk
X3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0
YXRpb25zLlBBU1MsICJwYXNzZXMiKQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1
bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9l
eHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0
X2V4cGVjdGF0aW9ucy5GQUlMLCAiZmFpbHVyZXMiKQotICAgICAgICBzZWxmLl9wcmludF9leHBl
Y3RlZF9yZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxm
Ll9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAg
ICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GTEFLWSwgImZsYWt5IikKLSAgICAgICAgc2VsZi5fcHJp
bnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAg
ICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5LAog
ICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuU0tJUCwgInNraXBwZWQiKQogCiAgICAgICAg
IGlmIHNlbGYuX29wdGlvbnMuZm9yY2U6Ci0gICAgICAgICAgICB3cml0ZSgnUnVubmluZyBhbGwg
dGVzdHMsIGluY2x1ZGluZyBza2lwcyAoLS1mb3JjZSknKQorICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9leHBlY3RlZCgnUnVubmluZyBhbGwgdGVzdHMsIGluY2x1ZGluZyAnCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza2lwcyAoLS1mb3JjZSknKQog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkg
cnVuIHRoZSBza2lwcGVkIHRlc3RzICh0aGV5IHdlcmUKICAgICAgICAgICAgICMgc3VidHJhY3Rl
ZCBvdXQgb2Ygc2VsZi5fdGVzdF9maWxlcywgYWJvdmUpLCBidXQgd2Ugc3R1YiBvdXQgdGhlCkBA
IC00MjAsNyArNDYyLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICAgICAg
dGltZV9mb3JfZGlmZnM9MCkKICAgICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IHRlc3RfZXhw
ZWN0YXRpb25zLlNLSVAKICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0
LCBleHBlY3RlZD1UcnVlKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF9leHBlY3RlZCgnJykKIAogICAgICAgICByZXR1cm4gcmVzdWx0X3N1bW1hcnkKIApA
QCAtNjI1LDExICs2NjcsMTEgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgcGx1cmFsID0g
IiIKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPiAxOgogICAgICAg
ICAgICAgcGx1cmFsID0gInMiCi0gICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgnU3RhcnRpbmcg
JXMlcyAuLi4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LmRyaXZl
cl9uYW1lKCksIHBsdXJhbCkpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdT
dGFydGluZyAlcyVzIC4uLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVyYWwpKQogICAgICAgICB0aHJlYWRzID0gc2Vs
Zi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCJTdGFydGluZyB0ZXN0
aW5nIC4uLiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0
ZXN0aW5nIC4uLiIpCiAKICAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkcyB0byBmaW5pc2gg
YW5kIGNvbGxlY3QgdGVzdCBmYWlsdXJlcy4KICAgICAgICAgZmFpbHVyZXMgPSB7fQpAQCAtNjgy
LDcgKzcyNCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhl
ciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCiAgICAgICAgIHJldHVy
biBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLkhUVFBfU1VCRElSKQogCi0gICAgZGVmIHJ1bihz
ZWxmLCByZXN1bHRfc3VtbWFyeSwgcHJpbnRfcmVzdWx0cyk6CisgICAgZGVmIHJ1bihzZWxmLCBy
ZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1biBhbGwgb3VyIHRlc3RzIG9uIGFsbCBvdXIg
dGVzdCBmaWxlcy4KIAogICAgICAgICBGb3IgZWFjaCB0ZXN0IGZpbGUsIHdlIHJ1biBlYWNoIHRl
c3QgdHlwZS4gSWYgdGhlcmUgYXJlIGFueSBmYWlsdXJlcywKQEAgLTY5MCw3ICs3MzIsNiBAQCBj
bGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnk6IGEgc3VtbWFyeSBvYmplY3QgdHJhY2tpbmcgdGhlIHRlc3QgcmVzdWx0cy4KLSAgICAgICAg
ICBwcmludF9yZXN1bHRzOiB3aGV0aGVyIG9yIG5vdCB0byBwcmludCB0aGUgc3VtbWFyeSBhdCB0
aGUgZW5kCiAKICAgICAgICAgUmV0dXJuOgogICAgICAgICAgIFRoZSBudW1iZXIgb2YgdW5leHBl
Y3RlZCByZXN1bHRzICgwID09IHN1Y2Nlc3MpCkBAIC03MDAsMTEgKzc0MSwxMiBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAgICBp
ZiBzZWxmLm5lZWRzX2h0dHAoKToKLSAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgnU3Rh
cnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorCiAgICAgICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKIAogICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0
cyhzZWxmLldFQlNPQ0tFVF9TVUJESVIpOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRl
KCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAgICAg
ICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKICAgICAgICAgICAgICMg
c2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIuU3RhcnQoKQogCkBAIC03MjcsNDEgKzc2OSwy
MiBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkK
IAotICAgICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihzZWxmLl9vcHRpb25zLCAn
dGltaW5nJykKLSAgICAgICAgc2VsZi5fcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Mod3JpdGUsIGVu
ZF90aW1lIC0gc3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgIHNlbGYuX21ldGVyLnVw
ZGF0ZSgiIikKLQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAg
ICAjIFdlIHdyaXRlIHRoaXMgYmxvY2sgdG8gc3Rkb3V0IGZvciBjb21wYXRpYmlsaXR5IHdpdGgg
dGhlCi0gICAgICAgICAgICAjIGJ1aWxkYm90IGxvZyBwYXJzZXIsIHdoaWNoIG9ubHkgbG9va3Mg
YXQgc3Rkb3V0LCBub3Qgc3RkZXJyIDooCi0gICAgICAgICAgICB3cml0ZSA9IGxhbWJkYSBzOiBz
eXMuc3Rkb3V0LndyaXRlKCIlc1xuIiAlIHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3
cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihzZWxmLl9vcHRpb25zLCAnYWN0dWFsJykKKyAg
ICAgICAgc2VsZi5fcHJpbnRfdGltaW5nX3N0YXRpc3RpY3MoZW5kX3RpbWUgLSBzdGFydF90aW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncywg
dGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnkpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnko
d3JpdGUsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFy
eShyZXN1bHRfc3VtbWFyeSkKIAogICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAg
c3lzLnN0ZGVyci5mbHVzaCgpCiAKLSAgICAgICAgIyBUaGlzIHN1bW1hcnkgZGF0YSBnZXRzIHdy
aXR0ZW4gdG8gc3Rkb3V0IHJlZ2FyZGxlc3Mgb2YgbG9nIGxldmVsCi0gICAgICAgICMgKHVubGVz
cyBvZiBjb3Vyc2Ugd2UncmUgcHJpbnRpbmcgbm90aGluZykuCi0gICAgICAgIGlmIHByaW50X3Jl
c3VsdHM6Ci0gICAgICAgICAgICBpZiAoTE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYuX29w
dGlvbnMubG9nIG9yCi0gICAgICAgICAgICAgICAgKExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29w
dGlvbnMubG9nIGFuZAotICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50b3RhbCAhPSBy
ZXN1bHRfc3VtbWFyeS5leHBlY3RlZCkpOgotICAgICAgICAgICAgICAgIHByaW50Ci0gICAgICAg
ICAgICBpZiBMT0dfU1VNTUFSWSBpbiBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgICAg
ICBzZWxmLl9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5LnRvdGFsLAorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1bW1hcnku
dG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeS5leHBlY3RlZCkKIAotICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBzZWxm
Ll9zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHJlc3VsdF9zdW1tYXJ5LAotICAgICAgICAg
ICAgcmV0cnlfc3VtbWFyeSkKLSAgICAgICAgaWYgTE9HX1VORVhQRUNURURfUkVTVUxUUyBpbiBz
ZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfcmVz
dWx0cyh1bmV4cGVjdGVkX3Jlc3VsdHMpCisgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHN1
bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgIHNlbGYu
X2V4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnkpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVuZXhwZWN0ZWRfcmVzdWx0cykK
IAogICAgICAgICAjIFdyaXRlIHRoZSBzYW1lIGRhdGEgdG8gbG9nIGZpbGVzLgogICAgICAgICBz
ZWxmLl93cml0ZV9qc29uX2ZpbGVzKHVuZXhwZWN0ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1hcnks
CkBAIC03ODMsMTEyICs4MDYsMTYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgICAgICBl
eGNlcHQgUXVldWUuRW1wdHk6CiAgICAgICAgICAgICAgICAgcmV0dXJuCisKICAgICAgICAgICAg
IGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0
KAogICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29w
dGlvbnMucGl4ZWxfdGVzdHMpCiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0
LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfcmVzdWx0cyhyZXN1bHQs
IGV4cGVjdGVkLCByZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBfcHJpbnRfdGVzdF9yZXN1bHRz
KHNlbGYsIHJlc3VsdCwgZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIlByaW50
IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSB0aGUgLS1sb2cgc3dpdGNo
ZXMuIgotICAgICAgICBpZiBMT0dfVFJBQ0UgaW4gc2VsZi5fb3B0aW9ucy5sb2c6Ci0gICAgICAg
ICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCkKLSAgICAgICAgZWxpZiAoTE9HX0RF
VEFJTEVEX1BST0dSRVNTIGluIHNlbGYuX29wdGlvbnMubG9nIGFuZAotICAgICAgICAgICAgICAo
c2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwgb3IKLSAgICAgICAgICAg
ICAgIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpKSk6Ci0gICAgICAgICAgICBzZWxmLl9wcmlu
dF9kZXRhaWxlZF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGlmIChub3QgZXhwZWN0ZWQgYW5kIExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29wdGlv
bnMubG9nKToKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVz
dWx0KHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5lX3Byb2dyZXNzKHJl
c3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIF9wcmludF90ZXN0X3RyYWNlKHNlbGYsIHJlc3VsdCk6
Ci0gICAgICAgICIiIlByaW50IGRldGFpbGVkIHJlc3VsdHMgb2YgYSB0ZXN0ICh0cmlnZ2VyZWQg
YnkgLS1sb2cgdHJhY2UpLgotICAgICAgICBGb3IgZWFjaCB0ZXN0LCBwcmludDoKLSAgICAgICAg
ICAgLSBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgYmFzZWxpbmVzCi0gICAgICAgICAgIC0gZXhw
ZWN0ZWQgcmVzdWx0cwotICAgICAgICAgICAtIGFjdHVhbCByZXN1bHQKLSAgICAgICAgICAgLSB0
aW1pbmcgaW5mbwotICAgICAgICAiIiIKLSAgICAgICAgZmlsZW5hbWUgPSByZXN1bHQuZmlsZW5h
bWUKLSAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KGZpbGVuYW1lKQotICAgICAgICBfbG9nLmluZm8oJ3RyYWNlOiAlcycgJSB0ZXN0X25hbWUpCi0g
ICAgICAgIF9sb2cuaW5mbygnICB0eHQ6ICVzJyAlCi0gICAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykpKQotICAgICAgICBwbmdf
ZmlsZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKLSAg
ICAgICAgaWYgb3MucGF0aC5leGlzdHMocG5nX2ZpbGUpOgotICAgICAgICAgICAgX2xvZy5pbmZv
KCcgIHBuZzogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xv
Zy5pbmZvKCcgIHBuZzogPG5vbmU+JykKLSAgICAgICAgX2xvZy5pbmZvKCcgIGV4cDogJXMnICUK
LSAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0
cmluZyhmaWxlbmFtZSkpCi0gICAgICAgIF9sb2cuaW5mbygnICBnb3Q6ICVzJyAlCi0gICAgICAg
ICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJlc3Vs
dC50eXBlKSkKLSAgICAgICAgX2xvZy5pbmZvKCcgdG9vazogJS0uM2YnICUgcmVzdWx0LnRlc3Rf
cnVuX3RpbWUpCi0gICAgICAgIF9sb2cuaW5mbygnJykKLQotICAgIGRlZiBfcHJpbnRfb25lX2xp
bmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJEaXNwbGF5cyB0
aGUgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgdGVzdCBydW4uIiIiCi0gICAgICAgIHBlcmNlbnRfY29t
cGxldGUgPSAxMDAgKiAocmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQgKwotICAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnkudW5leHBlY3RlZCkgLyByZXN1bHRfc3VtbWFyeS50b3RhbAotICAgICAgICBh
Y3Rpb24gPSAiVGVzdGluZyIKLSAgICAgICAgaWYgc2VsZi5fcmV0cnlpbmc6Ci0gICAgICAgICAg
ICBhY3Rpb24gPSAiUmV0cnlpbmciCi0gICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyAo
JWQlJSk6ICVkIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0LCIKLSAgICAgICAgICAgICIgJWQg
bGVmdCIgJSAoYWN0aW9uLCBwZXJjZW50X2NvbXBsZXRlLCByZXN1bHRfc3VtbWFyeS5leHBlY3Rl
ZCwKLSAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkLCByZXN1bHRfc3VtbWFy
eS5yZW1haW5pbmcpKQotCi0gICAgZGVmIF9wcmludF9kZXRhaWxlZF9wcm9ncmVzcyhzZWxmLCBy
ZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0
cHV0IHdoZXJlIHdlIHByaW50IHRoZSBkaXJlY3RvcnkgbmFtZQotICAgICAgICBhbmQgb25lIGRv
dCBmb3IgZWFjaCBjb21wbGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKLSAgICAgICAg
Ii0tbG9nIGRldGFpbGVkLXByb2dyZXNzIi4iIiIKLSAgICAgICAgaWYgc2VsZi5fY3VycmVudF90
ZXN0X251bWJlciA9PSBsZW4oc2VsZi5fdGVzdF9maWxlc19saXN0KToKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtzZWxmLl9j
dXJyZW50X3Rlc3RfbnVtYmVyXQotICAgICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGlybmFtZSgK
LSAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3Qp
KQotICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9PSAiIjoKLSAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgKG5leHRfZGlyKQotICAg
ICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgotCi0gICAgICAgIHdoaWxlIG5l
eHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgotICAgICAgICAgICAgaWYgbmV4dF9k
aXIgIT0gc2VsZi5fY3VycmVudF9kaXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3Jp
dGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkKLSAgICAgICAgICAgICAg
ICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogLiIgJSAobmV4dF9kaXIpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciArPSAiLiIKLQot
ICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jl
c3VsdHMgYW5kCi0gICAgICAgICAgICAgICAgTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9u
cy5sb2cpOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0
ZWRfcmVzdWx0c1tuZXh0X3Rlc3RdCi0gICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUo
IiVzXG4iICUgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpCi0gICAgICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdChuZXh0X3Rlc3QsIHJlc3VsdCkKLSAgICAg
ICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIHNlbGYuX2N1
cnJlbnRfZGlyCi0KLSAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgKz0gMQot
ICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4oc2VsZi5fdGVz
dF9maWxlc19saXN0KToKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgICAgICBuZXh0
X3Rlc3QgPSBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0K
LSAgICAgICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQotCi0gICAgICAg
IGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZzoKLSAgICAgICAgICAgIHJlbWFpbl9zdHIgPSAi
ICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykKLSAgICAgICAgICAgIHNlbGYuX21l
dGVyLnByb2dyZXNzKCIlcyVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsIHJlbWFpbl9zdHIpKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRf
cHJvZ3Jlc3Nfc3RyKSkKLQotICAgIGRlZiBfcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdChz
ZWxmLCByZXN1bHQpOgotICAgICAgICAiIiJQcmludHMgb25lIHVuZXhwZWN0ZWQgdGVzdCByZXN1
bHQgbGluZS4iIiIKLSAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFU
SU9OX0RFU0NSSVBUSU9OU1tyZXN1bHQudHlwZV1bMF0KLSAgICAgICAgc2VsZi5fbWV0ZXIud3Jp
dGUoIiAgJXMgLT4gdW5leHBlY3RlZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IChzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUocmVzdWx0LmZpbGVuYW1lKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MpKQorICAgICAgICAgICAgZXhwX3N0ciA9IHNl
bGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgICAg
ICByZXN1bHQuZmlsZW5hbWUpCisgICAgICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0YXRp
b25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290
X3N0cikKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocmVzdWx0X3N1
bW1hcnksIHNlbGYuX3JldHJ5aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCiAKICAgICBkZWYgX2dldF9mYWlsdXJlcyhz
ZWxmLCByZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzKToKICAgICAgICAgIiIiRmlsdGVy
cyBhIGRpY3Qgb2YgcmVzdWx0cyBhbmQgcmV0dXJucyBvbmx5IHRoZSBmYWlsdXJlcy4KQEAgLTkx
MSw4MCArODM4LDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICByZXR1cm4gZmFpbGVk
X3Jlc3VsdHMKIAotICAgIGRlZiBfc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCBy
ZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSk6Ci0gICAgICAgICIiIlN1bW1hcml6ZSBhbnkg
dW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KLQotICAgICAgICBUT0RPKGRwcmFua2UpOiBz
cGxpdCB0aGlzIGRhdGEgc3RydWN0dXJlIGludG8gYSBzZXBhcmF0ZSBjbGFzcz8KLQotICAgICAg
ICBBcmdzOgotICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGlu
aXRpYWwgdGVzdCBydW5zCi0gICAgICAgICAgcmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3Qg
ZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRyaWVkIHRlc3RzCi0gICAgICAgIFJldHVybnM6Ci0g
ICAgICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVj
dGVkIHJlc3VsdHMgZnJvbSB0aGUKLSAgICAgICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBm
aWVsZHM6Ci0gICAgICAgICAgICAndmVyc2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEgaW4g
dGhpcyB2ZXJzaW9uKQotICAgICAgICAgICAgJ2ZpeGFibGUnOiAjIG9mIGZpeGFibGUgdGVzdHMg
KE5PVyAtIFBBU1MpCi0gICAgICAgICAgICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0cyAo
Tk9XICYgU0tJUFBFRCkKLSAgICAgICAgICAgICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5vbi1m
bGFreSBmYWlsdXJlcwotICAgICAgICAgICAgJ251bV9mbGFreSc6ICMgb2YgZmxha3kgZmFpbHVy
ZXMKLSAgICAgICAgICAgICdudW1fcGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcwotICAg
ICAgICAgICAgJ3Rlc3RzJzogYSBkaWN0IG9mIHRlc3RzIC0+IHsnZXhwZWN0ZWQnOiAnLi4uJywg
J2FjdHVhbCc6ICcuLi4nfQotICAgICAgICAiIiIKLSAgICAgICAgcmVzdWx0cyA9IHt9Ci0gICAg
ICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9IDEKLQotICAgICAgICB0YmUgPSByZXN1bHRfc3VtbWFy
eS50ZXN0c19ieV9leHBlY3RhdGlvbgotICAgICAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0
c19ieV90aW1lbGluZQotICAgICAgICByZXN1bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rlc3Rf
ZXhwZWN0YXRpb25zLk5PV10gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJl
W3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdKQotICAgICAgICByZXN1bHRzWydza2lwcGVkJ10gPSBs
ZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKQotCi0gICAgICAgIG51bV9wYXNz
ZXMgPSAwCi0gICAgICAgIG51bV9mbGFreSA9IDAKLSAgICAgICAgbnVtX3JlZ3Jlc3Npb25zID0g
MAotICAgICAgICBrZXl3b3JkcyA9IHt9Ci0gICAgICAgIGZvciBrLCB2IGluIFRlc3RFeHBlY3Rh
dGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGtleXdvcmRz
W3ZdID0gay51cHBlcigpCi0KLSAgICAgICAgdGVzdHMgPSB7fQotICAgICAgICBmb3IgZmlsZW5h
bWUsIHJlc3VsdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1z
KCk6Ci0gICAgICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3Jp
Z2luYWwgcnVuLCB3ZSBpZ25vcmUKLSAgICAgICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jh
c2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQpLAotICAgICAgICAgICAg
IyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1bHQgbm90IGZsYWt5LgotICAgICAgICAgICAg
dGVzdCA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKLSAgICAg
ICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3Ry
aW5nKGZpbGVuYW1lKQotICAgICAgICAgICAgYWN0dWFsID0gW2tleXdvcmRzW3Jlc3VsdF1dCi0K
LSAgICAgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgotICAgICAg
ICAgICAgICAgIG51bV9wYXNzZXMgKz0gMQotICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gdGVz
dF9leHBlY3RhdGlvbnMuQ1JBU0g6Ci0gICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9
IDEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90IGlu
IHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzOgotICAgICAgICAgICAgICAgICAgICBh
Y3R1YWwuZXh0ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25z
LmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5h
bWUpLnNwbGl0KCIgIikpCi0gICAgICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCi0gICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0gcmV0
cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbZmlsZW5hbWVdCi0gICAgICAgICAgICAgICAg
ICAgIGlmIHJlc3VsdCAhPSByZXRyeV9yZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
Y3R1YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5X3Jlc3VsdF0pCi0gICAgICAgICAgICAgICAgICAg
ICAgICBudW1fZmxha3kgKz0gMQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKLQotICAgICAgICAgICAgdGVzdHNb
dGVzdF0gPSB7fQotICAgICAgICAgICAgdGVzdHNbdGVzdF1bJ2V4cGVjdGVkJ10gPSBleHBlY3Rl
ZAotICAgICAgICAgICAgdGVzdHNbdGVzdF1bJ2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFsKQot
Ci0gICAgICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0ZXN0cwotICAgICAgICByZXN1bHRzWydudW1f
cGFzc2VzJ10gPSBudW1fcGFzc2VzCi0gICAgICAgIHJlc3VsdHNbJ251bV9mbGFreSddID0gbnVt
X2ZsYWt5Ci0gICAgICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9ucyddID0gbnVtX3JlZ3Jlc3Np
b25zCi0KLSAgICAgICAgcmV0dXJuIHJlc3VsdHMKLQogICAgIGRlZiBfd3JpdGVfanNvbl9maWxl
cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMsIHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJXcml0ZXMg
dGhlIHJlc3VsdHMgb2YgdGhlIHRlc3QgcnVuIGFzIEpTT04gZmlsZXMgaW50byB0aGUgcmVzdWx0
cwpAQCAtMTAyNSwxMyArODc4LDExIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgX2xv
Zy5kZWJ1ZygiRmluaXNoZWQgd3JpdGluZyBKU09OIGZpbGVzLiIpCiAKLSAgICBkZWYgX3ByaW50
X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisg
ICAgZGVmIF9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwgcmVzdWx0X3N1bW1h
cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUs
IHJlc3VsdF90eXBlX3N0cik6CiAgICAgICAgICIiIlByaW50IHRoZSBudW1iZXIgb2YgdGhlIHRl
c3RzIGluIGEgZ2l2ZW4gcmVzdWx0IGNsYXNzLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAg
d3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVy
KSBvcgotICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkgLSB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHRzIHRvIHJlcG9ydCBv
bgogICAgICAgICAgIHJlc3VsdF90eXBlIC0gdGhlIHBhcnRpY3VsYXIgcmVzdWx0IHR5cGUgdG8g
cmVwb3J0IGluIHRoZSBzdW1tYXJ5LgogICAgICAgICAgIHJlc3VsdF90eXBlX3N0ciAtIGEgc3Ry
aW5nIGRlc2NyaXB0aW9uIG9mIHRoZSByZXN1bHRfdHlwZS4KQEAgLTEwNDYsOCArODk3LDkgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgZm10c3RyID0gKCJFeHBlY3Q6ICUlNWQgJSUtOHMg
KCUlJWRkIG5vdywgJSUlZGQgZGVmZXIsICUlJWRkIHdvbnRmaXgpIgogICAgICAgICAgICAgICAg
ICAgJSAoc2VsZi5fbnVtX2RpZ2l0cyhub3cpLCBzZWxmLl9udW1fZGlnaXRzKGRlZmVyKSwKICAg
ICAgICAgICAgICAgICAgIHNlbGYuX251bV9kaWdpdHMod29udGZpeCkpKQotICAgICAgICB3cml0
ZShmbXRzdHIgJSAobGVuKHRlc3RzKSwgcmVzdWx0X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cp
LAotICAgICAgICAgICAgICBsZW4odGVzdHMgJiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRmaXgp
KSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZChmbXRzdHIgJQorICAgICAg
ICAgICAgKGxlbih0ZXN0cyksIHJlc3VsdF90eXBlX3N0ciwgbGVuKHRlc3RzICYgbm93KSwKKyAg
ICAgICAgICAgICBsZW4odGVzdHMgJiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRmaXgpKSkKIAog
ICAgIGRlZiBfbnVtX2RpZ2l0cyhzZWxmLCBudW0pOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBu
dW1iZXIgb2YgZGlnaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGxlbmd0aCBvZiBhCkBAIC0x
MDU3LDQzICs5MDksMzkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIG5kaWdpdHMg
PSBpbnQobWF0aC5sb2cxMChsZW4obnVtKSkpICsgMQogICAgICAgICByZXR1cm4gbmRpZ2l0cwog
Ci0gICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwgdG90YWxfdGlt
ZSwgdGhyZWFkX3RpbWluZ3MsCisgICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlzdGljcyhzZWxm
LCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIi
IlJlY29yZCB0aW1pbmctc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZXN0IHJ1bi4KIAog
ICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8g
dG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53
cml0ZS4KICAgICAgICAgICB0b3RhbF90aW1lOiB0b3RhbCBlbGFwc2VkIHRpbWUgKGluIHNlY29u
ZHMpIGZvciB0aGUgdGVzdCBydW4KICAgICAgICAgICB0aHJlYWRfdGltaW5nczogd2FsbCBjbG9j
ayB0aW1lIGVhY2ggdGhyZWFkIHJhbiBmb3IKICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1p
bmdzOiB0aW1pbmcgYnkgZGlyZWN0b3J5CiAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3M6IHRpbWluZyBieSBmaWxlCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2Jq
ZWN0IGZvciB0aGUgdGVzdCBydW4KICAgICAgICAgIiIiCi0gICAgICAgIHdyaXRlKCJUZXN0IHRp
bWluZzoiKQotICAgICAgICB3cml0ZSgiICAlNi4yZiB0b3RhbCB0ZXN0aW5nIHRpbWUiICUgdG90
YWxfdGltZSkKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHdyaXRlKCJUaHJlYWQgdGltaW5n
OiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCJUZXN0IHRpbWluZzoiKQor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICAlNi4yZiB0b3RhbCB0ZXN0aW5n
IHRpbWUiICUgdG90YWxfdGltZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmco
IiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCJUaHJlYWQgdGltaW5nOiIp
CiAgICAgICAgIGN1bWxfdGltZSA9IDAKICAgICAgICAgZm9yIHQgaW4gdGhyZWFkX3RpbWluZ3M6
Ci0gICAgICAgICAgICB3cml0ZSgiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQor
ICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgICAlMTBzOiAlNWQgdGVz
dHMsICU2LjJmIHNlY3MiICUKICAgICAgICAgICAgICAgICAgICh0WyduYW1lJ10sIHRbJ251bV90
ZXN0cyddLCB0Wyd0b3RhbF90aW1lJ10pKQogICAgICAgICAgICAgY3VtbF90aW1lICs9IHRbJ3Rv
dGFsX3RpbWUnXQotICAgICAgICB3cml0ZSgiICAgJTYuMmYgY3VtdWxhdGl2ZSwgJTYuMmYgb3B0
aW1hbCIgJQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICAgJTYuMmYgY3Vt
dWxhdGl2ZSwgJTYuMmYgb3B0aW1hbCIgJQogICAgICAgICAgICAgICAoY3VtbF90aW1lLCBjdW1s
X3RpbWUgLyBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpKSkKLSAgICAgICAgd3Jp
dGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQogCi0gICAgICAg
IHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Mod3JpdGUsIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzKQotICAgICAgICBzZWxmLl9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMo
d3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICBzZWxmLl9wcmludF9hZ2dy
ZWdhdGVfdGVzdF9zdGF0aXN0aWNzKGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBz
ZWxmLl9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eSkKLSAgICAgICAgc2VsZi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Mod3JpdGUsIGRpcmVjdG9y
eV90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50X2RpcmVjdG9yeV90aW1pbmdzKGRp
cmVjdG9yeV90ZXN0X3RpbWluZ3MpCiAKLSAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0
YXRpc3RpY3Moc2VsZiwgd3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKKyAgICBkZWYg
X3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MpOgogICAgICAgICAiIiJQcmludHMgYWdncmVnYXRlIHN0YXRpc3RpY3MgKGUuZy4gbWVk
aWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRlc3RzLgogICAgICAgICBBcmdzOgotICAgICAgICAg
IHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRl
cikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U3Rh
dHMKICAgICAgICAgICAgICAgZm9yIGFsbCB0ZXN0cy4KICAgICAgICAgIiIiCkBAIC0xMTE1LDIz
ICs5NjMsMjEgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICB0aW1lc19wZXJf
dGVzdF90eXBlW3Rlc3RfdHlwZV0uYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICB0aW1lX2Zv
cl9kaWZmc1t0ZXN0X3R5cGVdKQogCi0gICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9y
X3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3Jf
dGVzdF90aW1pbmdzKAogICAgICAgICAgICAgIlBFUiBURVNUIFRJTUUgSU4gVEVTVFNIRUxMIChz
ZWNvbmRzKToiLAogICAgICAgICAgICAgdGltZXNfZm9yX2R1bXBfcmVuZGVyX3RyZWUpCi0gICAg
ICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAg
ICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKAogICAgICAgICAgICAg
IlBFUiBURVNUIERJRkYgUFJPQ0VTU0lORyBUSU1FUyAoc2Vjb25kcyk6IiwKICAgICAgICAgICAg
IHRpbWVzX2Zvcl9kaWZmX3Byb2Nlc3NpbmcpCiAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVz
dF90eXBlczoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGlt
aW5ncyh3cml0ZSwKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3Rf
dGltaW5ncygKICAgICAgICAgICAgICAgICAiUEVSIFRFU1QgVElNRVMgQlkgVEVTVCBUWVBFOiAl
cyIgJSB0ZXN0X3R5cGUsCiAgICAgICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZVt0ZXN0
X3R5cGVdKQogCi0gICAgZGVmIF9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoc2VsZiwgd3Jp
dGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgIGRlZiBfcHJpbnRfaW5kaXZpZHVhbF90
ZXN0X3RpbWVzKHNlbGYsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUHJpbnRzIHRo
ZSBydW4gdGltZXMgZm9yIHNsb3csIHRpbWVvdXQgYW5kIGNyYXNoIHRlc3RzLgogICAgICAgICBB
cmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4s
IGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAg
ICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiBkdW1wX3JlbmRlcl90cmVl
X3RocmVhZC5UZXN0U3RhdHMKICAgICAgICAgICAgICAgZm9yIGFsbCB0ZXN0cy4KICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9yIHRlc3QgcnVuCkBAIC0xMTUzLDUz
ICs5OTksNTMgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICBzbG93X3Rlc3Rz
LmFwcGVuZCh0ZXN0X3R1cGxlKQogCiAgICAgICAgICAgICBpZiBmaWxlbmFtZSBpbiByZXN1bHRf
c3VtbWFyeS5mYWlsdXJlczoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRfc3VtbWFy
eS5yZXN1bHRzW2ZpbGVuYW1lXQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1t
YXJ5LnJlc3VsdHNbZmlsZW5hbWVdLnR5cGUKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09
IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQgb3IKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKToKICAgICAgICAgICAgICAgICAgICAgaXNfdGlt
ZW91dF9jcmFzaF9vcl9zbG93ID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29y
X2NyYXNoX3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQogCiAgICAgICAgICAgICBpZiAobm90IGlz
X3RpbWVvdXRfY3Jhc2hfb3Jfc2xvdyBhbmQKLSAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA8
IHNlbGYuX29wdGlvbnMubnVtX3Nsb3dfdGVzdHNfdG9fbG9nKToKKyAgICAgICAgICAgICAgICBu
dW1fcHJpbnRlZCA8IHByaW50aW5nLk5VTV9TTE9XX1RFU1RTX1RPX0xPRyk6CiAgICAgICAgICAg
ICAgICAgbnVtX3ByaW50ZWQgPSBudW1fcHJpbnRlZCArIDEKICAgICAgICAgICAgICAgICB1bmV4
cGVjdGVkX3Nsb3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCiAKLSAgICAgICAgd3JpdGUoIiIp
Ci0gICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcod3JpdGUsICIlcyBzbG93ZXN0
IHRlc3RzIHRoYXQgYXJlIG5vdCAiCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5n
KCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKCIlcyBzbG93ZXN0IHRl
c3RzIHRoYXQgYXJlIG5vdCAiCiAgICAgICAgICAgICAibWFya2VkIGFzIFNMT1cgYW5kIGRpZCBu
b3QgdGltZW91dC9jcmFzaDoiICUKLSAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubnVtX3Nsb3df
dGVzdHNfdG9fbG9nLCB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMpCi0gICAgICAgIHdyaXRlKCIiKQot
ICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgbWFya2Vk
IGFzIFNMT1c6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93X3Rl
c3RzKQotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3Rp
bWluZyh3cml0ZSwgIlRlc3RzIHRoYXQgdGltZWQgb3V0IG9yIGNyYXNoZWQ6IiwKKyAgICAgICAg
ICAgIHByaW50aW5nLk5VTV9TTE9XX1RFU1RTX1RPX0xPRywgdW5leHBlY3RlZF9zbG93X3Rlc3Rz
KQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5f
cHJpbnRfdGVzdF9saXN0X3RpbWluZygiVGVzdHMgbWFya2VkIGFzIFNMT1c6Iiwgc2xvd190ZXN0
cykKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYu
X3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoIlRlc3RzIHRoYXQgdGltZWQgb3V0IG9yIGNyYXNoZWQ6
IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNo
X3Rlc3RzKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90
aW1pbmcoIiIpCiAKLSAgICBkZWYgX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoc2VsZiwgd3JpdGUs
IHRpdGxlLCB0ZXN0X2xpc3QpOgorICAgIGRlZiBfcHJpbnRfdGVzdF9saXN0X3RpbWluZyhzZWxm
LCB0aXRsZSwgdGVzdF9saXN0KToKICAgICAgICAgIiIiUHJpbnQgdGltaW5nIGluZm8gZm9yIGVh
Y2ggdGVzdC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRv
IHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAg
c3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICB0aXRsZTogc2VjdGlvbiBoZWFkaW5nCiAgICAg
ICAgICAgdGVzdF9saXN0OiB0ZXN0cyB0aGF0IGZhbGwgaW4gdGhpcyBzZWN0aW9uCiAgICAgICAg
ICIiIgotICAgICAgICB3cml0ZSh0aXRsZSkKKyAgICAgICAgaWYgKG5vdCAnc2xvd2VzdCcgaW4g
c2VsZi5fb3B0aW9ucy5sb2cgYW5kIG5vdCAnZXZlcnlpbmcnIGluCisgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLmxvZyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3RpbWluZyh0aXRsZSkKICAgICAgICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF9s
aXN0OgogICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X3R1cGxlLmZpbGVuYW1lW2xlbigKICAg
ICAgICAgICAgICAgICBzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0KICAgICAg
ICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpCiAgICAgICAgICAg
ICB0ZXN0X3J1bl90aW1lID0gcm91bmQodGVzdF90dXBsZS50ZXN0X3J1bl90aW1lLCAxKQotICAg
ICAgICAgICAgd3JpdGUoIiAgJXMgdG9vayAlcyBzZWNvbmRzIiAlIChmaWxlbmFtZSwgdGVzdF9y
dW5fdGltZSkpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICAlcyB0
b29rICVzIHNlY29uZHMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChmaWxlbmFtZSwgdGVzdF9ydW5fdGltZSkpCiAKLSAgICBkZWYgX3ByaW50X2RpcmVjdG9yeV90
aW1pbmdzKHNlbGYsIHdyaXRlLCBkaXJlY3RvcnlfdGVzdF90aW1pbmdzKToKKyAgICBkZWYgX3By
aW50X2RpcmVjdG9yeV90aW1pbmdzKHNlbGYsIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpOgogICAg
ICAgICAiIiJQcmludCB0aW1pbmcgaW5mbyBieSBkaXJlY3RvcnkgZm9yIGFueSBkaXJlY3Rvcmll
cyB0aGF0CiAgICAgICAgIHRha2UgPiAxMCBzZWNvbmRzIHRvIHJ1bi4KIAogICAgICAgICBBcmdz
OgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEg
TG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAg
ICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmc6IHRpbWUgaW5mbyBmb3IgZWFjaCBkaXJlY3RvcnkK
ICAgICAgICAgIiIiCiAgICAgICAgIHRpbWluZ3MgPSBbXQpAQCAtMTIwOSwyNSArMTA1NSwyNCBA
QCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90ZXN0
cykpCiAgICAgICAgIHRpbWluZ3Muc29ydCgpCiAKLSAgICAgICAgd3JpdGUoIlRpbWUgdG8gcHJv
Y2VzcyBzbG93ZXN0IHN1YmRpcmVjdG9yaWVzOiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdGltaW5nKCJUaW1lIHRvIHByb2Nlc3Mgc2xvd2VzdCBzdWJkaXJlY3RvcmllczoiKQogICAg
ICAgICBtaW5fc2Vjb25kc190b19wcmludCA9IDEwCiAgICAgICAgIGZvciB0aW1pbmcgaW4gdGlt
aW5nczoKICAgICAgICAgICAgIGlmIHRpbWluZ1swXSA+IG1pbl9zZWNvbmRzX3RvX3ByaW50Ogot
ICAgICAgICAgICAgICAgIHdyaXRlKCIgICVzIHRvb2sgJXMgc2Vjb25kcyB0byBydW4gJXMgdGVz
dHMuIiAlICh0aW1pbmdbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgdGltaW5nWzBdLCB0aW1p
bmdbMl0pKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3RpbWluZygKKyAgICAgICAgICAgICAgICAgICAgIiAgJXMgdG9vayAlcyBzZWNvbmRz
IHRvIHJ1biAlcyB0ZXN0cy4iICUgKHRpbWluZ1sxXSwKKyAgICAgICAgICAgICAgICAgICAgdGlt
aW5nWzBdLCB0aW1pbmdbMl0pKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygi
IikKIAotICAgIGRlZiBfcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHNlbGYsIHdy
aXRlLCB0aXRsZSwgdGltaW5ncyk6CisgICAgZGVmIF9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0
X3RpbWluZ3Moc2VsZiwgdGl0bGUsIHRpbWluZ3MpOgogICAgICAgICAiIiJQcmludHMgdGhlIG1l
ZGlhbiwgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSB2YWx1ZXMgaW4KICAgICAg
ICAgdGltaW5ncy4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNr
IHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAg
ICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICB0aXRsZTogVGl0bGUgZm9yIHRoZXNlIHRp
bWluZ3MuCiAgICAgICAgICAgdGltaW5nczogQSBsaXN0IG9mIGZsb2F0cyByZXByZXNlbnRpbmcg
dGltZXMuCiAgICAgICAgICIiIgotICAgICAgICB3cml0ZSh0aXRsZSkKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF90aW1pbmcodGl0bGUpCiAgICAgICAgIHRpbWluZ3Muc29ydCgpCiAKICAg
ICAgICAgbnVtX3Rlc3RzID0gbGVuKHRpbWluZ3MpCkBAIC0xMjQ5LDE5ICsxMDk0LDE3IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBzdW1fb2ZfZGV2aWF0aW9ucyA9IG1hdGgucG93
KHRpbWUgLSBtZWFuLCAyKQogCiAgICAgICAgIHN0ZF9kZXZpYXRpb24gPSBtYXRoLnNxcnQoc3Vt
X29mX2RldmlhdGlvbnMgLyBudW1fdGVzdHMpCi0gICAgICAgIHdyaXRlKCIgIE1lZGlhbjogICAg
ICAgICAgJTYuM2YiICUgbWVkaWFuKQotICAgICAgICB3cml0ZSgiICBNZWFuOiAgICAgICAgICAg
ICU2LjNmIiAlIG1lYW4pCi0gICAgICAgIHdyaXRlKCIgIDkwdGggcGVyY2VudGlsZTogJTYuM2Yi
ICUgcGVyY2VudGlsZTkwKQotICAgICAgICB3cml0ZSgiICA5OXRoIHBlcmNlbnRpbGU6ICU2LjNm
IiAlIHBlcmNlbnRpbGU5OSkKLSAgICAgICAgd3JpdGUoIiAgU3RhbmRhcmQgZGV2OiAgICAlNi4z
ZiIgJSBzdGRfZGV2aWF0aW9uKQotICAgICAgICB3cml0ZSgiIikKLQotICAgIGRlZiBfcHJpbnRf
cmVzdWx0X3N1bW1hcnkoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgTWVkaWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRp
YW4pCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIE1lYW46ICAgICAgICAg
ICAgJTYuM2YiICUgbWVhbikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAg
OTB0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTApCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCIgIDk5dGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGls
ZTk5KQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICBTdGFuZGFyZCBkZXY6
ICAgICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dGltaW5nKCIiKQorCisgICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCByZXN1bHRf
c3VtbWFyeSk6CiAgICAgICAgICIiIlByaW50IGEgc2hvcnQgc3VtbWFyeSBhYm91dCBob3cgbWFu
eSB0ZXN0cyBwYXNzZWQuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxs
YmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAg
ICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGluZm9y
bWF0aW9uIHRvIGxvZwogICAgICAgICAiIiIKICAgICAgICAgZmFpbGVkID0gbGVuKHJlc3VsdF9z
dW1tYXJ5LmZhaWx1cmVzKQpAQCAtMTI3MywzMCArMTExNiwyOCBAQCBjbGFzcyBUZXN0UnVubmVy
OgogICAgICAgICBpZiB0b3RhbCA+IDA6CiAgICAgICAgICAgICBwY3RfcGFzc2VkID0gZmxvYXQo
cGFzc2VkKSAqIDEwMCAvIHRvdGFsCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHdyaXRl
KCI9PiBSZXN1bHRzOiAlZC8lZCB0ZXN0cyBwYXNzZWQgKCUuMWYlJSkiICUKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
YWN0dWFsKCI9PiBSZXN1bHRzOiAlZC8lZCB0ZXN0cyBwYXNzZWQgKCUuMWYlJSkiICUKICAgICAg
ICAgICAgICAgICAgICAgIChwYXNzZWQsIHRvdGFsLCBwY3RfcGFzc2VkKSkKLSAgICAgICAgd3Jp
dGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRlLCBy
ZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisg
ICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5LAog
ICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTk9XLCAiVGVzdHMgdG8gYmUgZml4ZWQgZm9y
IHRoZSBjdXJyZW50IHJlbGVhc2UiKQogCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxm
Ll9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludF9y
ZXN1bHRfc3VtbWFyeV9lbnRyeShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLkRFRkVSLAogICAgICAgICAgICAgIlRlc3RzIHdlJ2xsIGZpeCBpbiB0aGUgZnV0
dXJlIGlmIHRoZXkgZmFpbCAoREVGRVIpIikKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAg
c2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJp
bnRfcmVzdWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0
X2V4cGVjdGF0aW9ucy5XT05URklYLAogICAgICAgICAgICAgIlRlc3RzIHRoYXQgd2lsbCBvbmx5
IGJlIGZpeGVkIGlmIHRoZXkgY3Jhc2ggKFdPTlRGSVgpIikKIAotICAgIGRlZiBfcHJpbnRfcmVz
dWx0X3N1bW1hcnlfZW50cnkoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5LCB0aW1lbGluZSwK
KyAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5
LCB0aW1lbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRpbmcp
OgogICAgICAgICAiIiJQcmludCBhIHN1bW1hcnkgYmxvY2sgb2YgcmVzdWx0cyBmb3IgYSBwYXJ0
aWN1bGFyIHRpbWVsaW5lIG9mIHRlc3QuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0
ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9y
Ci0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnk6IHN1bW1hcnkgdG8gcHJpbnQgcmVzdWx0cyBmb3IKICAgICAgICAgICB0aW1lbGluZTogdGhl
IHRpbWVsaW5lIHRvIHByaW50IHJlc3VsdHMgZm9yIChOT1QsIFdPTlRGSVgsIGV0Yy4pCiAgICAg
ICAgICAgaGVhZGluZzogYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSB0aW1lbGluZQpAQCAt
MTMwNSw3ICsxMTQ2LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgbm90X3Bhc3Npbmcg
PSAodG90YWwgLQogICAgICAgICAgICBsZW4ocmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0
YXRpb25bdGVzdF9leHBlY3RhdGlvbnMuUEFTU10gJgogICAgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKSkKLSAgICAgICAgd3JpdGUoIj0+ICVz
ICglZCk6IiAlIChoZWFkaW5nLCBub3RfcGFzc2luZykpCisgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfYWN0dWFsKCI9PiAlcyAoJWQpOiIgJSAoaGVhZGluZywgbm90X3Bhc3NpbmcpKQogCiAg
ICAgICAgIGZvciByZXN1bHQgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fT1JE
RVI6CiAgICAgICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKQEAg
LTEzMTUsOTQgKzExNTYsOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgZGVzYyA9
IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHRdCiAg
ICAgICAgICAgICBpZiBub3RfcGFzc2luZyBhbmQgbGVuKHJlc3VsdHMpOgogICAgICAgICAgICAg
ICAgIHBjdCA9IGxlbihyZXN1bHRzKSAqIDEwMC4wIC8gbm90X3Bhc3NpbmcKLSAgICAgICAgICAg
ICAgICB3cml0ZSgiICAlNWQgJS0yNHMgKCU0LjFmJSUpIiAlIChsZW4ocmVzdWx0cyksCi0gICAg
ICAgICAgICAgICAgICAgICAgZGVzY1tsZW4ocmVzdWx0cykgIT0gMV0sIHBjdCkpCi0KLSAgICBk
ZWYgX3ByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZiwgdG90YWwsIGV4cGVjdGVkKToKLSAgICAg
ICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRoZSB0ZXN0IHJ1biB0byBzdGRvdXQu
Ci0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICB0b3RhbDogdG90YWwgbnVtYmVyIG9mIHRlc3Rz
IHJ1bgotICAgICAgICAgIGV4cGVjdGVkOiBudW1iZXIgb2YgZXhwZWN0ZWQgcmVzdWx0cwotICAg
ICAgICAiIiIKLSAgICAgICAgdW5leHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKLSAgICAgICAg
aWYgdW5leHBlY3RlZCA9PSAwOgotICAgICAgICAgICAgcHJpbnQgIkFsbCAlZCB0ZXN0cyByYW4g
YXMgZXhwZWN0ZWQuIiAlIGV4cGVjdGVkCi0gICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKLSAg
ICAgICAgICAgIHByaW50ICIxIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6IiAlIHVu
ZXhwZWN0ZWQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICIlZCB0ZXN0cyByYW4g
YXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoiICUgKGV4cGVjdGVkLAotICAgICAgICAgICAgICAgIHVu
ZXhwZWN0ZWQpCi0KLSAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCB1bmV4
cGVjdGVkX3Jlc3VsdHMpOgotICAgICAgICAiIiJQcmludHMgYW55IHVuZXhwZWN0ZWQgcmVzdWx0
cyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm0gdG8gc3Rkb3V0LiIiIgotICAgICAgICBwYXNzZXMg
PSB7fQotICAgICAgICBmbGFreSA9IHt9Ci0gICAgICAgIHJlZ3Jlc3Npb25zID0ge30KLQotICAg
ICAgICBpZiBsZW4odW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKToKLSAgICAgICAgICAgIHBy
aW50ICIiCi0KLSAgICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRz
Wyd0ZXN0cyddLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0
dWFsJ10uc3BsaXQoIiAiKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3Rl
ZCddLnNwbGl0KCIgIikKLSAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKLSAgICAg
ICAgICAgICAgICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgICAgICAgICBf
YWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCi0gICAgICAgICAgICAgICAg
ZWxpZiAnVElNRU9VVCcgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIF9hZGRfdG9f
ZGljdF9vZl9saXN0cyhwYXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnRXhwZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKLSAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWws
IGJ1dCBwYXNzZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdCkKLSAgICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgotICAgICAgICAgICAgICAg
ICMgV2UgZ3JvdXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290
LgotICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBd
LCB0ZXN0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rf
b2ZfbGlzdHMocmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQotCi0gICAgICAg
IGlmIGxlbihwYXNzZXMpOgotICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0
ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHByaW50ICIlczogKCVkKSIgJSAoa2V5LCBsZW4o
dGVzdHMpKQotICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotICAgICAgICAgICAgICAgIGZv
ciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyIgJSB0ZXN0
Ci0gICAgICAgICAgICAgICAgcHJpbnQKLQotICAgICAgICBpZiBsZW4oZmxha3kpOgotICAgICAg
ICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVT
Q1JJUFRJT05TCi0gICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMo
KToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RB
VElPTlNba2V5Lmxvd2VyKCldCi0gICAgICAgICAgICAgICAgcHJpbnQgIlVuZXhwZWN0ZWQgZmxh
a2luZXNzOiAlcyAoJWQpIiAlICgKLSAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1
bHRdWzFdLCBsZW4odGVzdHMpKQotICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotCi0gICAg
ICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXVt0ZXN0XQotICAgICAgICAgICAgICAgICAg
ICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikKLSAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxv
d2VyKCldCi0gICAgICAgICAgICAgICAgICAgIG5ld19leHBlY3RhdGlvbnNfbGlzdCA9IGxpc3Qo
c2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQotICAgICAgICAgICAgICAgICAgICBwcmludCAi
ICAlcyA9ICVzIiAlICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25zX2xpc3QpKQotICAg
ICAgICAgICAgICAgIHByaW50Ci0KLSAgICAgICAgaWYgbGVuKHJlZ3Jlc3Npb25zKToKLSAgICAg
ICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RF
U0NSSVBUSU9OUwotICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRl
cml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUu
RVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgIHByaW50ICJSZWdyZXNz
aW9uczogVW5leHBlY3RlZCAlcyA6ICglZCkiICUgKAotICAgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpCi0gICAgICAgICAgICAgICAgdGVzdHMuc29y
dCgpCi0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAg
ICAgIHByaW50ICIgICVzID0gJXMiICUgKHRlc3QsIGtleSkKLSAgICAgICAgICAgICAgICBwcmlu
dAotCi0gICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxm
Ll9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAiLSIgKiA3OAorICAgICAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIgICU1ZCAlLTI0cyAoJTQuMWYlJSki
ICUKKyAgICAgICAgICAgICAgICAgICAgKGxlbihyZXN1bHRzKSwgZGVzY1tsZW4ocmVzdWx0cykg
IT0gMV0sIHBjdCkpCiAKICAgICBkZWYgX3dyaXRlX3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJl
c3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiV3JpdGUgcmVzdWx0cy5odG1sIHdoaWNoIGlzIGEg
c3VtbWFyeSBvZiB0ZXN0cyB0aGF0IGZhaWxlZC4KQEAgLTE0NjIsMTAgKzEyMTcsNiBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9wb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUo
cmVzdWx0c19maWxlbmFtZSkKIAogCi1kZWYgX2FkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtl
eSwgdmFsdWUpOgotICAgIGRpY3Quc2V0ZGVmYXVsdChrZXksIFtdKS5hcHBlbmQodmFsdWUpCi0K
LQogZGVmIHJlYWRfdGVzdF9maWxlcyhmaWxlcyk6CiAgICAgdGVzdHMgPSBbXQogICAgIGZvciBm
aWxlIGluIGZpbGVzOgpAQCAtMTQ3NywyNSArMTIyOCwxMSBAQCBkZWYgcmVhZF90ZXN0X2ZpbGVz
KGZpbGVzKToKICAgICByZXR1cm4gdGVzdHMKIAogCi1kZWYgY3JlYXRlX2xvZ2dpbmdfd3JpdGVy
KG9wdGlvbnMsIGxvZ19vcHRpb24pOgotICAgICIiIlJldHVybnMgYSB3cml0ZSgpIGZ1bmN0aW9u
IHRoYXQgd2lsbCB3cml0ZSB0aGUgc3RyaW5nIHRvIF9sb2cuaW5mbygpCi0gICAgaWYgY29tcCB3
YXMgc3BlY2lmaWVkIGluIC0tbG9nIG9yIGlmIC0tdmVyYm9zZSBpcyB0cnVlLiBPdGhlcndpc2Ug
dGhlCi0gICAgbWVzc2FnZSBpcyBkcm9wcGVkLgotCi0gICAgQXJnczoKLSAgICAgIG9wdGlvbnM6
IGxpc3Qgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMgZnJvbSBvcHRwYXJzZQotICAgICAgbG9nX29w
dGlvbjogb3B0aW9uIHRvIG1hdGNoIGluIG9wdGlvbnMubG9nIGluIG9yZGVyIGZvciB0aGUgbWVz
c2FnZXMKLSAgICAgICAgICB0byBiZSBsb2dnZWQgKGUuZy4sICdhY3R1YWwnIG9yICdleHBlY3Rl
ZCcpCi0gICAgIiIiCi0gICAgaWYgb3B0aW9ucy52ZXJib3NlIG9yIGxvZ19vcHRpb24gaW4gb3B0
aW9ucy5sb2cuc3BsaXQoIiwiKToKLSAgICAgICAgcmV0dXJuIF9sb2cuaW5mbwotICAgIHJldHVy
biBsYW1iZGEgc3RyOiAxCi0KLQotZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0
cz1UcnVlKToKK2RlZiBydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MpOgogICAgICIiIlJ1biB0
aGUgdGVzdHMuCiAKICAgICBBcmdzOgorICAgICAgcG9ydF9vYmo6IFBvcnQgb2JqZWN0IGZvciBw
b3J0LXNwZWNpZmljIGJlaGF2aW9yCiAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29t
bWFuZCBsaW5lIG9wdGlvbnMKICAgICAgIGFyZ3M6IGEgbGlzdCBvZiBzdWIgZGlyZWN0b3JpZXMg
b3IgZmlsZXMgdG8gdGVzdAogICAgICAgcHJpbnRfcmVzdWx0czogd2hldGhlciBvciBub3QgdG8g
bG9nIGFueXRoaW5nIHRvIHN0ZG91dC4KQEAgLTE1MDUsMjIgKzEyNDIsMjEgQEAgZGVmIG1haW4o
b3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgICBlcnJvci4KICAg
ICAiIiIKIAotICAgIGlmIG9wdGlvbnMuc291cmNlczoKLSAgICAgICAgb3B0aW9ucy52ZXJib3Nl
ID0gVHJ1ZQorICAgICMgQ29uZmlndXJlIHRoZSBwcmludGluZyBzdWJzeXN0ZW0gZm9yIHByaW50
aW5nIG91dHB1dCwgbG9nZ2luZyBkZWJ1ZworICAgICMgaW5mbywgYW5kIHRyYWNpbmcgdGVzdHMu
CisKKyAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6CisgICAgICAgICMgRklYTUU6
IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAx
LgorICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IHBvcnRfb2JqLmRlZmF1bHRfY2hp
bGRfcHJvY2Vzc2VzKCkKIAotICAgICMgU2V0IHVwIG91ciBsb2dnaW5nIGZvcm1hdC4KLSAgICBt
ZXRlciA9IG1ldGVyZWRfc3RyZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLCBzeXMu
c3RkZXJyKQotICAgIGxvZ19mbXQgPSAnJShtZXNzYWdlKXMnCi0gICAgbG9nX2RhdGVmbXQgPSAn
JXklbSVkICVIOiVNOiVTJwotICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwotICAgIGlmIG9w
dGlvbnMudmVyYm9zZToKLSAgICAgICAgbG9nX2ZtdCA9ICgnJShhc2N0aW1lKXMgJShmaWxlbmFt
ZSlzOiUobGluZW5vKS00ZCAlKGxldmVsbmFtZSlzICcKLSAgICAgICAgICAgICAgICAgICclKG1l
c3NhZ2UpcycpCi0gICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKLSAgICBsb2dnaW5n
LmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZlbCwgZm9ybWF0PWxvZ19mbXQsIGRhdGVmbXQ9bG9n
X2RhdGVmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW09bWV0ZXIpCisgICAgcHJp
bnRlciA9IHByaW50aW5nLlByaW50ZXIocG9ydF9vYmosIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0
PXN5cy5zdGRlcnIsCisgICAgICAgIGJ1aWxkYm90X291dHB1dD1zeXMuc3Rkb3V0LAorICAgICAg
ICBjaGlsZF9wcm9jZXNzZXM9aW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwKKyAgICAgICAg
aXNfZnVsbHlfcGFyYWxsZWw9b3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisg
ICAgaWYgb3B0aW9ucy5oZWxwX3ByaW50aW5nOgorICAgICAgICBwcmludGVyLmhlbHBfcHJpbnRp
bmcoKQorICAgICAgICByZXR1cm4gMAogCi0gICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25z
LnBsYXRmb3JtLCBvcHRpb25zKQogICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCiAKICAgICBp
ZiBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgpAQCAtMTU1Niw4ICsxMjkyLDggQEAgZGVmIG1h
aW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgIyBKdXN0IGNs
b2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVy
CiAgICAgICAgICMgZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5IGFyZSBleHBsaWNpdGx5
IHVzZWQgZm9yIGNyb3NzLXJ1bgogICAgICAgICAjIHRyYWNraW5nLgotICAgICAgICBtZXRlci51
cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJlc3VsdHMgaW4gJXMiICUKLSAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIHByaW50ZXIucHJpbnRfdXBk
YXRlKCJDbG9iYmVyaW5nIG9sZCByZXN1bHRzIGluICVzIiAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAgICAgICAgIGxheW91dF90ZXN0
c19kaXIgPSBwb3J0X29iai5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAgcG9zc2libGVfZGly
cyA9IG9zLmxpc3RkaXIobGF5b3V0X3Rlc3RzX2RpcikKICAgICAgICAgZm9yIGRpcm5hbWUgaW4g
cG9zc2libGVfZGlyczoKQEAgLTE1NjUsMTcgKzEzMDEsNiBAQCBkZWYgbWFpbihvcHRpb25zLCBh
cmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUo
b3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIGRpcm5hbWUpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlX2Vycm9ycz1UcnVlKQogCi0gICAgaWYgbm90
IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgotICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBw
ZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50ICsgMS4KLSAgICAgICAgb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBwb3J0X29iai5kZWZhdWx0X2NoaWxkX3Byb2Nlc3Nlcygp
Ci0KLSAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAnY29uZmlnJykK
LSAgICBpZiBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9PSAxOgotICAgICAgICB3cml0ZSgiUnVu
bmluZyBvbmUgJXMiICUgcG9ydF9vYmouZHJpdmVyX25hbWUpCi0gICAgZWxzZToKLSAgICAgICAg
d3JpdGUoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlICgKLSAgICAgICAgICAgICAgb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMsIHBvcnRfb2JqLmRyaXZlcl9uYW1lKCkpKQotCiAgICAgaWYg
bm90IG9wdGlvbnMudGltZV9vdXRfbXM6CiAgICAgICAgIGlmIG9wdGlvbnMuY29uZmlndXJhdGlv
biA9PSAiRGVidWciOgogICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cigyICog
VGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykKQEAgLTE1ODMsOCArMTMwOCwxNCBA
QCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICAg
ICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cihUZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1F
T1VUX01TKQogCiAgICAgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zID0gc3RyKDUgKiBpbnQob3B0
aW9ucy50aW1lX291dF9tcykpCi0gICAgd3JpdGUoIlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cg
dGVzdCB0aW1lb3V0OiAlcyIgJQotICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21zLCBvcHRp
b25zLnNsb3dfdGltZV9vdXRfbXMpKQorICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSZWd1bGFy
IHRpbWVvdXQ6ICVzLCBzbG93IHRlc3QgdGltZW91dDogJXMiICUKKyAgICAgICAgICAgICAgICAg
ICAob3B0aW9ucy50aW1lX291dF9tcywgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKSkKKworICAg
IGlmIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0gMToKKyAgICAgICAgcHJpbnRlci5w
cmludF9jb25maWcoIlJ1bm5pbmcgb25lICVzIiAlIHBvcnRfb2JqLmRyaXZlcl9uYW1lKQorICAg
IGVsc2U6CisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nICVzICVzcyBpbiBw
YXJhbGxlbCIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vz
c2VzLCBwb3J0X29iai5kcml2ZXJfbmFtZSgpKSkKIAogICAgICMgSW5jbHVkZSBhbGwgdGVzdHMg
aWYgbm9uZSBhcmUgc3BlY2lmaWVkLgogICAgIG5ld19hcmdzID0gW10KQEAgLTE2MDEsOSArMTMz
Miw5IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAKICAg
ICAjIENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QuCiAgICAgcG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0aW9ucy5yZXN1bHRzX2Rp
cmVjdG9yeSkKLSAgICBtZXRlci51cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKKyAgICBw
cmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQogCi0gICAgdGVzdF9y
dW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25zLCBtZXRlcikKKyAgICB0ZXN0X3J1
bm5lciA9IFRlc3RSdW5uZXIocG9ydF9vYmosIG9wdGlvbnMsIHByaW50ZXIpCiAgICAgdGVzdF9y
dW5uZXIuZ2F0aGVyX2ZpbGVfcGF0aHMocGF0aHMpCiAKICAgICBpZiBvcHRpb25zLmxpbnRfdGVz
dF9maWxlczoKQEAgLTE2MTMsNDMgKzEzNDQsNDMgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywg
cHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgZm9yIHBsYXRmb3JtX25hbWUgaW4gcG9ydF9v
YmoudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgogICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2Vf
ZXhwZWN0YXRpb25zKHBsYXRmb3JtX25hbWUsIGlzX2RlYnVnX21vZGU9VHJ1ZSkKICAgICAgICAg
ICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0Zm9ybV9uYW1lLCBpc19kZWJ1
Z19tb2RlPUZhbHNlKQotICAgICAgICBtZXRlci51cGRhdGUoIiIpCi0gICAgICAgIHByaW50ICgi
SWYgdGhlcmUgYXJlIG5vIGZhaWwgbWVzc2FnZXMsIGVycm9ycyBvciBleGNlcHRpb25zLCB0aGVu
IHRoZSAiCi0gICAgICAgICAgICAibGludCBzdWNjZWVkZWQuIikKKyAgICAgICAgcHJpbnRlci53
cml0ZSgiIikKKyAgICAgICAgX2xvZy5pbmZvKCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBtZXNzYWdl
cywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJ0aGVuIHRoZSBs
aW50IHN1Y2NlZWRlZC4iKQogICAgICAgICByZXR1cm4gMAogCi0gICAgd3JpdGUgPSBjcmVhdGVf
bG9nZ2luZ193cml0ZXIob3B0aW9ucywgImNvbmZpZyIpCi0gICAgd3JpdGUoIlVzaW5nIHBvcnQg
JyVzJyIgJSBwb3J0X29iai5uYW1lKCkpCi0gICAgd3JpdGUoIlBsYWNpbmcgdGVzdCByZXN1bHRz
IGluICVzIiAlIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgcHJpbnRlci5wcmludF9j
b25maWcoIlVzaW5nIHBvcnQgJyVzJyIgJSBwb3J0X29iai5uYW1lKCkpCisgICAgcHJpbnRlci5w
cmludF9jb25maWcoIlBsYWNpbmcgdGVzdCByZXN1bHRzIGluICVzIiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKICAgICBpZiBvcHRpb25zLm5l
d19iYXNlbGluZToKLSAgICAgICAgd3JpdGUoIlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIg
JSBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkpCi0gICAgd3JpdGUoIlVzaW5nICVzIGJ1aWxkIiAl
IG9wdGlvbnMuY29uZmlndXJhdGlvbikKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBs
YWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkpCisgICAgcHJpbnRlci5wcmludF9jb25maWcoIlVz
aW5nICVzIGJ1aWxkIiAlIG9wdGlvbnMuY29uZmlndXJhdGlvbikKICAgICBpZiBvcHRpb25zLnBp
eGVsX3Rlc3RzOgotICAgICAgICB3cml0ZSgiUGl4ZWwgdGVzdHMgZW5hYmxlZCIpCisgICAgICAg
IHByaW50ZXIucHJpbnRfY29uZmlnKCJQaXhlbCB0ZXN0cyBlbmFibGVkIikKICAgICBlbHNlOgot
ICAgICAgICB3cml0ZSgiUGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQotICAgIHdyaXRlKCIiKQorICAg
ICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQorICAgIHBy
aW50ZXIucHJpbnRfY29uZmlnKCIiKQogCi0gICAgbWV0ZXIudXBkYXRlKCJQYXJzaW5nIGV4cGVj
dGF0aW9ucyAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJQYXJzaW5nIGV4cGVjdGF0
aW9ucyAuLi4iKQogICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwb3J0X29iai50
ZXN0X3BsYXRmb3JtX25hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9ucy5jb25maWd1cmF0aW9uID09ICdEZWJ1ZycpCiAKLSAgICBtZXRlci51cGRhdGUoIkNo
ZWNraW5nIGJ1aWxkIC4uLiIpCisgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNoZWNraW5nIGJ1
aWxkIC4uLiIpCiAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2J1aWxkKHRlc3RfcnVubmVyLm5l
ZWRzX2h0dHAoKSk6CiAgICAgICAgIHJldHVybiAtMQogCi0gICAgbWV0ZXIudXBkYXRlKCJTdGFy
dGluZyBoZWxwZXIgLi4uIikKKyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgaGVs
cGVyIC4uLiIpCiAgICAgcG9ydF9vYmouc3RhcnRfaGVscGVyKCkKIAogICAgICMgQ2hlY2sgdGhh
dCB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAodGhlbWVzLCBmb250cywgLi4uKSBhcmUgY29ycmVj
dC4KICAgICBpZiBub3Qgb3B0aW9ucy5ub2NoZWNrX3N5c19kZXBzOgotICAgICAgICBtZXRlci51
cGRhdGUoIkNoZWNraW5nIHN5c3RlbSBkZXBlbmRlbmNpZXMgLi4uIikKKyAgICAgICAgcHJpbnRl
ci5wcmludF91cGRhdGUoIkNoZWNraW5nIHN5c3RlbSBkZXBlbmRlbmNpZXMgLi4uIikKICAgICAg
ICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX3N5c19kZXBzKHRlc3RfcnVubmVyLm5lZWRzX2h0dHAo
KSk6CiAgICAgICAgICAgICByZXR1cm4gLTEKIAotICAgIG1ldGVyLnVwZGF0ZSgiUHJlcGFyaW5n
IHRlc3RzIC4uLiIpCi0gICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywg
ImV4cGVjdGVkIikKLSAgICByZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnByZXBhcmVfbGlz
dHNfYW5kX3ByaW50X291dHB1dCh3cml0ZSkKKyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiUHJl
cGFyaW5nIHRlc3RzIC4uLiIpCisgICAgcmVzdWx0X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5wcmVw
YXJlX2xpc3RzX2FuZF9wcmludF9vdXRwdXQoKQogCiAgICAgcG9ydF9vYmouc2V0dXBfdGVzdF9y
dW4oKQogCkBAIC0xNjU5LDcgKzEzOTAsNyBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmlu
dF9yZXN1bHRzPVRydWUpOgogICAgICAgICBpZiBvcHRpb25zLmZ1enp5X3BpeGVsX3Rlc3RzOgog
ICAgICAgICAgICAgdGVzdF9ydW5uZXIuYWRkX3Rlc3RfdHlwZShmdXp6eV9pbWFnZV9kaWZmLkZ1
enp5SW1hZ2VEaWZmKQogCi0gICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IHRlc3RfcnVubmVy
LnJ1bihyZXN1bHRfc3VtbWFyeSwgcHJpbnRfcmVzdWx0cykKKyAgICBudW1fdW5leHBlY3RlZF9y
ZXN1bHRzID0gdGVzdF9ydW5uZXIucnVuKHJlc3VsdF9zdW1tYXJ5KQogCiAgICAgcG9ydF9vYmou
c3RvcF9oZWxwZXIoKQogCkBAIC0xNjcyLDcgKzE0MDMsOSBAQCBkZWYgX2NvbXBhdF9zaGltX2Nh
bGxiYWNrKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CiAKIAogZGVmIF9jb21wYXRf
c2hpbV9vcHRpb24ob3B0aW9uX25hbWUsICoqa3dhcmdzKToKLSAgICByZXR1cm4gb3B0cGFyc2Uu
bWFrZV9vcHRpb24ob3B0aW9uX25hbWUsIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1fY29t
cGF0X3NoaW1fY2FsbGJhY2ssIGhlbHA9Iklnbm9yZWQsIGZvciBvbGQtcnVuLXdlYmtpdC10ZXN0
cyBjb21wYXQgb25seS4iLCAqKmt3YXJncykKKyAgICByZXR1cm4gb3B0cGFyc2UubWFrZV9vcHRp
b24ob3B0aW9uX25hbWUsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICBjYWxsYmFjaz1fY29t
cGF0X3NoaW1fY2FsbGJhY2ssCisgICAgICAgIGhlbHA9Iklnbm9yZWQsIGZvciBvbGQtcnVuLXdl
YmtpdC10ZXN0cyBjb21wYXQgb25seS4iLCAqKmt3YXJncykKIAogCiBkZWYgcGFyc2VfYXJncyhh
cmdzPU5vbmUpOgpAQCAtMTY5NiwyMiArMTQyOSw3IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9u
ZSk6CiAgICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMgYWxzbyBhY2NlcHRzIC1jLCAtLWNv
bmZpZ3VyYXRpb24gQ09ORklHVVJBVElPTi4KICAgICBdCiAKLSAgICBsb2dnaW5nX29wdGlvbnMg
PSBbCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWxvZyIsIGFjdGlvbj0ic3RvcmUi
LAotICAgICAgICAgICAgZGVmYXVsdD1MT0dfREVGQVVMVF9WQUxVRSwKLSAgICAgICAgICAgIGhl
bHA9KCJsb2cgdmFyaW91cyB0eXBlcyBvZiBkYXRhLiBUaGUgYXJndW1lbnQgdmFsdWUgc2hvdWxk
IGJlIGEgIgotICAgICAgICAgICAgICAgICAgImNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHZhbHVl
cyBmcm9tOiAlcyAoZGVmYXVsdHMgdG8gIgotICAgICAgICAgICAgICAgICAgIi0tbG9nICVzKSIg
JSAoTE9HX1ZBTFVFUywgTE9HX0RFRkFVTFRfVkFMVUUpKSksCi0gICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmciKSwK
LSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tc291cmNlcyIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsCi0gICAgICAgICAgICBoZWxwPSJzaG93IGV4cGVjdGVkIHJlc3VsdCBmaWxlIHBhdGgg
Zm9yIGVhY2ggdGVzdCAiICsKLSAgICAgICAgICAgICAgICAgIihpbXBsaWVzIC0tdmVyYm9zZSki
KSwKLSAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBoYXMgYSAtLXNsb3dlc3Qgb3B0aW9u
IHdoaWNoIGp1c3QgcHJpbnRzCi0gICAgICAgICMgdGhlIHNsb3dlc3QgMTAuCi0gICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLW51bS1zbG93LXRlc3RzLXRvLWxvZyIsIGRlZmF1bHQ9NTAs
Ci0gICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2Ygc2xvdyB0ZXN0cyB3aG9zZSB0aW1pbmdzIHRv
IHByaW50LiIpLAotICAgIF0KKyAgICBwcmludF9vcHRpb25zID0gcHJpbnRpbmcucHJpbnRfb3B0
aW9ucygpCiAKICAgICAjIEZJWE1FOiBUaGVzZSBvcHRpb25zIHNob3VsZCBtb3ZlIG9udG8gdGhl
IENocm9taXVtUG9ydC4KICAgICBjaHJvbWl1bV9vcHRpb25zID0gWwpAQCAtMTg4NCwxMyArMTYw
MiwyMyBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0oIlRo
ZSBidWlsZCBudW1iZXIgb2YgdGhlIGJ1aWxkZXIgcnVubmluZyB0aGlzIHNjcmlwdC4iKSksCiAg
ICAgXQogCi0gICAgb3B0aW9uX2xpc3QgPSAoY29uZmlndXJhdGlvbl9vcHRpb25zICsgbG9nZ2lu
Z19vcHRpb25zICsKKyAgICBvcHRpb25fbGlzdCA9IChjb25maWd1cmF0aW9uX29wdGlvbnMgKyBw
cmludF9vcHRpb25zICsKICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9vcHRpb25zICsgcmVz
dWx0c19vcHRpb25zICsgdGVzdF9vcHRpb25zICsKICAgICAgICAgICAgICAgICAgICBtaXNjX29w
dGlvbnMgKyByZXN1bHRzX2pzb25fb3B0aW9ucyArCiAgICAgICAgICAgICAgICAgICAgb2xkX3J1
bl93ZWJraXRfdGVzdHNfY29tcGF0KQogICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRp
b25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCi0gICAgcmV0dXJuIG9wdGlvbl9wYXJz
ZXIucGFyc2VfYXJncyhhcmdzKQogCi1pZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIG9w
dGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKyAgICBpZiBvcHRp
b25zLnNvdXJjZXM6CisgICAgICAgIG9wdGlvbnMudmVyYm9zZSA9IFRydWUKKworICAgIHJldHVy
biBvcHRpb25zLCBhcmdzCisKKworZGVmIG1haW4oKToKICAgICBvcHRpb25zLCBhcmdzID0gcGFy
c2VfYXJncygpCi0gICAgc3lzLmV4aXQobWFpbihvcHRpb25zLCBhcmdzKSkKKyAgICBwb3J0X29i
aiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCisgICAgcmV0dXJuIHJ1bihw
b3J0X29iaiwgb3B0aW9ucywgYXJncykKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAg
ICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVz
dC5weQppbmRleCA5ZmUwZTc0Li4xNzdkMDQyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHNfdW5pdHRlc3QucHkKQEAgLTMzLDEyICszMywxNyBAQCBpbXBvcnQgb3MKIGltcG9ydCBz
eXMKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLnJ1bl93
ZWJraXRfdGVzdHMgYXMgcnVuX3dlYmtpdF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Vi
a2l0X3Rlc3RzCiAKIAotZGVmIHBhc3NpbmdfcnVuKGFyZ3MpOgorZGVmIHBhc3NpbmdfcnVuKGFy
Z3MsIHBvcnRfb2JqPU5vbmUsIGxvZ2dpbmdfaW5jbHVkZWQ9RmFsc2UpOgorICAgIGlmIG5vdCBs
b2dnaW5nX2luY2x1ZGVkOgorICAgICAgICBhcmdzLmV4dGVuZChbJy0tcHJpbnQnLCAnbm90aGlu
ZyddKQogICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJn
cykKLSAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLm1haW4ob3B0aW9ucywgYXJncywgRmFsc2Up
CisgICAgaWYgcG9ydF9vYmogaXMgTm9uZToKKyAgICAgICAgcG9ydF9vYmogPSBwb3J0LmdldChv
cHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVu
KHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQogICAgIHJldHVybiByZXMgPT0gMAogCiAK
</data>
<flag name="review"
          id="38284"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54366</attachid>
            <date>2010-04-26 18:25:34 -0700</date>
            <delta_ts>2010-04-27 17:14:56 -0700</delta_ts>
            <desc>more feedback from eseidel</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>101164</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxN2QwZjgzLi44NDc3OGIwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDQt
MjMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyByZW5hbWVzIC0tbG9nIHRvIC0tcHJpbnQg
KHRvIGJlIHNsaWdodGx5IG1vcmUKKyAgICAgICAgZGVzY3JpcHRpdmUpLiAtLWxvZyBpcyByZXRh
aW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisgICAgICAgIEkndmUgYWxzbyBhZGRl
ZCBiZXR0ZXIgaGVscCBtZXNzYWdlcyBmb3IgcHJpbnRpbmcuCisKKyAgICAgICAgVGhlIG5ldyBj
b2RlIGhhcyB1bml0IHRlc3RzIQorCisgICAgICAgIFRoZXJlIGlzIHN0aWxsIG1vcmUgY29kZSB0
byBiZSBtb3ZlZCwgYnV0IHRoaXMgcGF0Y2ggaXMgYmlnIGVub3VnaCBhcworICAgICAgICBpdCBp
cy4gTmFtZWx5LCBzdGlsbCB0byBtb3ZlIGFyZSB0aGUgcHJpbnRpbmcgb2YgdGhlIGFjdHVhbCBy
ZXN1bHRzCisgICAgICAgIGFuZCB0aGUgdGltaW5nIHN0YXRpc3RpY3MsIHdoaWNoIHNob3VsZCBt
b3ZlIGFub3RoZXIgMzAwLTQwMCBsaW5lcworICAgICAgICBvdXQgb2YgdGhlIGZpbGUuCisKKyAg
ICAgICAgTm90YWJsZSBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMucHkgYmV5b25kIGNvZGUg
c2ltcGx5IG1vdmluZzoKKyAgICAgICAgKiBNZXRlcmVkU3RyZWFtIGlzIG5vdyBoaWRkZW4gdW5k
ZXIgdGhlIG5ldyBwcmludGluZy5QcmludGVyIGNsYXNzLgorICAgICAgICAgIEFsbCB0aGUgcmVm
ZXJlbmNlcyB0byBzZWxmLl9tZXRlciBub3cgcG9pbnQgdG8gc2VsZi5fcHJpbnRlci4KKyAgICAg
ICAgKiBBbGwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gcHJpbnRpbmcuY29uZmln
dXJlX2xvZ2dpbmcoKQorICAgICAgICAqIEluc3RlYWQgb2YgdXNpbmcgd3JpdGUoKSBsYW1iZGFz
IHRvIGNvbnRyb2wgd2hhdCBpcyBhbmQgaXNuJ3QKKyAgICAgICAgICBwcmludGVkLCB3ZSB1c2Ug
c2VwYXJhdGUgbWV0aG9kcyBvbiB0aGUgcHJpbnRlciBvYmplY3QuIFRoaXMgd2lsbAorICAgICAg
ICAgIG1ha2UgaXQgZWFzaWVyIHRvIGdyZXAgd2hpY2ggcHJpbnQgc3RhdGVtZW50cyBhcmUgcHJp
bnRlZAorICAgICAgICAgIHVuZGVyIHByb3RlY3Rpb24gb2YgZWFjaCBmbGFnLgorICAgICAgICAq
IFRoZSBwcmludF9yZXN1bHRzIGZsYWcgSSBhZGRlZCBhIGZldyByZXZzIGJhY2sgdG8gc3VwcHJl
c3MgcHJpbnRpbmcKKyAgICAgICAgICBpbiB0aGUgdW5pdCB0ZXN0cyBoYXMgYmVlbiByZXBsYWNl
ZCB3aXRoIC0tcHJpbnQgbm90aGluZy4KKyAgICAgICAgKiBUaGUgUmVzdWx0U3VtbWFyeSBjbGFz
cyBub3cgc3RvcmVzIHRoZSBlbnRpcmUgVGVzdFJlc3VsdCBmb3IgZWFjaAorICAgICAgICAgIHRl
c3QsIG5vdCBqdXN0IHRoZSBhY3R1YWwgcmVzdWx0IHR5cGUuCisgICAgICAgICogc3VtbWFyaXpl
X3VuZXhwZWN0ZWRfcmVzdWx0cygpIGdvdCBtb3ZlZCBmcm9tIGEgbWV0aG9kIG9uIFRlc3RSdW5u
ZXIKKyAgICAgICAgICB0byBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIG1vdmUg
aW50byBhIHNlcGFyYXRlIGZpbGUKKyAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBSZXN1bHRTdW1t
YXJ5IGNsYXNzIGFuZCB0aGUgVGVzdFJlc3VsdCBjbGFzcworICAgICAgICAqIFRoZSAtLXRyYWNl
IG9wdGlvbiBhZGRlZCByZWNlbnRseSBoYXMgYmVlbiByZXBsYWNlZCBieQorICAgICAgICAgICct
LXByaW50IHRyYWNlLWV2ZXJ5dGhpbmcnIGFuZCAnLS1wcmludCB0cmFjZS11bmV4cGVjdGVkJwor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODAxOAor
CisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0czoKKyAgICAgICAgICAtIHVw
ZGF0ZSB0byBuZXcgZW50cnkgcG9pbnRzIGluIHJ1bl93ZWJraXRfdGVzdHMucHkKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0
cmVhbS5weToKKyAgICAgICAgICAtIGZpeCBhIG1pbm9yIG5pdCB3aGVyZSB3ZSB3ZXJlIHByaW50
aW5nIGFuIGVtcHR5IHN0cmluZyB3aGVyZQorICAgICAgICAgICAgd2UgZGlkbid0IG5lZWQgdG8K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
cmludGluZy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6IEFkZGVkCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAgIC0g
aW1wbGVtZW50IHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoKSBhbmQgZXhwZWN0ZWRfZmlsZW5hbWUo
KSBzbworICAgICAgICAgICAgd2UgY2FuIHRlc3QgcHJpbnRpbmcgdW5leHBlY3RlZCByZXN1bHRz
IGluIGEgcGxhdGZvcm0tbmV1dHJhbAorICAgICAgICAgICAgd2F5CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9ydW5fd2Via2l0X3Rlc3QucHk6CisgICAgICAgICAgLSBtb3ZlIGEgbG90IG9m
IHRoZSBwcmludGluZyBjb2RlIGludG8gcHJpbnRpbmcucHkKKyAgICAgICAgICAtIGNoYW5nZSB0
aGUgc2lnbmF0dXJlcyBvZiB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIGZvciBlYXNpZXIKKyAg
ICAgICAgICAgIHVuaXQgdGVzdGluZworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgICAtIHVwZGF0ZSB3LyBjaGFuZ2VzIHRv
IHJ1bl93ZWJraXRfdGVzdHMgZW50cnkgcG9pbnRzLgorCiAyMDEwLTA0LTE5ICBEaXJrIFByYW5r
ZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3Rz
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0cwppbmRleCAyZWJlMWRh
Li4wNzI4ZWUwIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0
LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMKQEAg
LTMzLDUgKzMzLDQgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHdlYmtpdHB5LmxheW91dF90ZXN0cy5y
dW5fd2Via2l0X3Rlc3RzIGFzIHJ1bl93ZWJraXRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdz
KCkKLSAgICBzeXMuZXhpdChydW5fd2Via2l0X3Rlc3RzLm1haW4ob3B0aW9ucywgYXJncykpCisg
ICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVk
X3N0cmVhbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CmluZGV4IDkzMGI5ZTQuLmEzM2ZjM2EgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CkBAIC0x
MTEsNyArMTExLDggQEAgY2xhc3MgTWV0ZXJlZFN0cmVhbToKIAogICAgICAgICAjIFByaW50IHRo
ZSBuZWNlc3NhcnkgbnVtYmVyIG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHByZXZpb3VzCiAg
ICAgICAgICMgbWVzc2FnZS4KLSAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4o
c2VsZi5fbGFzdF91cGRhdGUpKQorICAgICAgICBpZiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpOgor
ICAgICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4oc2VsZi5fbGFzdF91cGRh
dGUpKQogICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc3RyKQogICAgICAgICBudW1fcmVtYWlu
aW5nID0gbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSAtIGxlbihzdHIpCiAgICAgICAgIGlmIG51bV9y
ZW1haW5pbmcgPiAwOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQwNTZjCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcHJpbnRpbmcucHkKQEAgLTAsMCArMSw0ODMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIlBhY2thZ2UgdGhhdCBoYW5kbGVzIG5vbi1kZWJ1Zywgbm9u
LWZpbGUgb3V0cHV0IGZvciBydW4td2Via2l0LXRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKKworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucHJp
bnRlciIpCisKK1Rlc3RFeHBlY3RhdGlvbnNGaWxlID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4
cGVjdGF0aW9uc0ZpbGUKKworTlVNX1NMT1dfVEVTVFNfVE9fTE9HID0gMTAKKworUFJJTlRfREVG
QVVMVCA9ICgibWlzYyxvbmUtbGluZS1wcm9ncmVzcyxvbmUtbGluZS1zdW1tYXJ5LHVuZXhwZWN0
ZWQsIgorICAgICAgICAgICAgICAgICAidW5leHBlY3RlZC1yZXN1bHRzLHVwZGF0ZXMiKQorUFJJ
TlRfRVZFUllUSElORyA9ICgiYWN0dWFsLGNvbmZpZyxleHBlY3RlZCxtaXNjLG9uZS1saW5lLXBy
b2dyZXNzLCIKKyAgICAgICAgICAgICAgICAgICAgIm9uZS1saW5lLXN1bW1hcnksc2xvd2VzdCx0
aW1pbmcsdW5leHBlY3RlZCwiCisgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkLXJlc3Vs
dHMsdXBkYXRlcyIpCisKK0hFTFBfUFJJTlRJTkcgPSAiIiIKK091dHB1dCBmb3IgcnVuLXdlYmtp
dC10ZXN0cyBpcyBjb250cm9sbGVkIGJ5IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKK3ZhbHVl
cyBwYXNzZWQgdG8gLS1wcmludC4gIFZhbHVlcyBlaXRoZXIgaW5mbHVlbmNlIHRoZSBvdmVyYWxs
IG91dHB1dCwgb3IKK3RoZSBvdXRwdXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLCBkdXJp
bmcgdGhlIHJ1biwgb3IgYXQgdGhlIGVuZDoKKworT3ZlcmFsbCBvcHRpb25zOgorICAgIG5vdGhp
bmcgICAgICAgICAgICAgZG9uJ3QgcHJpbnQgYW55dGhpbmcuIFRoaXMgb3ZlcnJpZGVzIGV2ZXJ5
IG90aGVyIG9wdGlvbgorICAgIGV2ZXJ5dGhpbmcgICAgICAgICAgcHJpbnQgZXZlcnl0aGluZyAo
ZXhjZXB0IHRoZSB0cmFjZS0qIG9wdGlvbnMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGV0YWlsZWQtcHJvZ3Jlc3Mgb3B0aW9uLCBzZWUgYmVsb3cgZm9yIHRoZSBmdWxsIGxpc3Qg
KQorICAgIG1pc2MgICAgICAgICAgICAgICAgcHJpbnQgbWlzY2VsbGFuZW91cyB0aGluZ3MgbGlr
ZSBibGFuayBsaW5lcworCitBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW46CisgICAgY29uZmln
ICAgICAgICAgICAgICBwcmludCB0aGUgdGVzdCBydW4gY29uZmlndXJhdGlvbgorICAgIGV4cGVj
dGVkICAgICAgICAgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIHdoYXQgaXMgZXhwZWN0ZWQgdG8gaGFw
cGVuCisgICAgICAgICAgICAgICAgICAgICAgICAoIyBwYXNzZXMsICMgZmFpbHVyZXMsIGV0Yy4p
CisKK0R1cmluZyB0aGUgcnVuOgorICAgIGRldGFpbGVkLXByb2dyZXNzICAgcHJpbnQgb25lIGRv
dCBwZXIgdGVzdCBjb21wbGV0ZWQKKyAgICBvbmUtbGluZS1wcm9ncmVzcyAgIHByaW50IGEgb25l
LWxpbmUgcHJvZ3Jlc3MgYmFyCisgICAgdW5leHBlY3RlZCAgICAgICAgICBwcmludCBhbnkgdW5l
eHBlY3RlZCByZXN1bHRzIGFzIHRoZXkgb2NjdXIKKyAgICB1cGRhdGVzICAgICAgICAgICAgIHBy
aW50IHVwZGF0ZXMgb24gd2hpY2ggc3RhZ2UgaXMgZXhlY3V0aW5nCisgICAgdHJhY2UtZXZlcnl0
aGluZyAgICBwcmludCBkZXRhaWxlZCBpbmZvIG9uIGV2ZXJ5IHRlc3QncyByZXN1bHRzCisgICAg
ICAgICAgICAgICAgICAgICAgICAoYmFzZWxpbmVzLCBleHBlY3RhdGlvbiwgdGltZSBpdCB0b29r
IHRvIHJ1bikuIElmCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHNwZWNpZmllZCBp
dCB3aWxsIG92ZXJyaWRlIHRoZSAnKi1wcm9ncmVzcycKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMsIHRoZSAndHJhY2UtdW5leHBlY3RlZCcgb3B0aW9uLCBhbmQgdGhlCisgICAgICAg
ICAgICAgICAgICAgICAgICAndW5leHBlY3RlZCcgb3B0aW9uLgorICAgIHRyYWNlLXVuZXhwZWN0
ZWQgICAgbGlrZSAndHJhY2UtZXZlcnl0aGluZycsIGJ1dCBvbmx5IGZvciB0ZXN0cyB3aXRoCisg
ICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkIHJlc3VsdHMuIElmIHRoaXMgb3B0aW9u
IGlzIHNwZWNpZmllZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgb3ZlcnJpZGUg
dGhlICd1bmV4cGVjdGVkJyBvcHRpb24uCisKK0F0IHRoZSBlbmQgb2YgdGhlIHJ1bjoKKyAgICBh
Y3R1YWwgICAgICAgICAgICAgIHByaW50IGEgc3VtbWFyeSBvZiB0aGUgYWN0dWFsIHJlc3VsdHMK
KyAgICBzbG93ZXN0ICAgICAgICAgICAgIHByaW50ICUoc2xvd2VzdClkIHNsb3dlc3QgdGVzdHMg
YW5kIHRoZSB0aW1lIHRoZXkgdG9vaworICAgIHRpbWluZyAgICAgICAgICAgICAgcHJpbnQgdGlt
aW5nIHN0YXRpc3RpY3MKKyAgICB1bmV4cGVjdGVkLXJlc3VsdHMgIHByaW50IGEgbGlzdCBvZiB0
aGUgdGVzdHMgd2l0aCB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgICBvbmUtbGluZS1zdW1tYXJ5ICAg
IHByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0aGUgcnVuCisKK05vdGVzOgorICAgIC0gJ2Rl
dGFpbGVkLXByb2dyZXNzJyBjYW4gb25seSBiZSB1c2VkIGlmIHJ1bm5pbmcgaW4gYSBzaW5nbGUg
dGhyZWFkCisgICAgICAodXNpbmcgLS1jaGlsZC1wcm9jZXNzZXM9MSkgb3IgYSBzaW5nbGUgcXVl
dWUgb2YgdGVzdHMgKHVzaW5nCisgICAgICAgLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwp
LiBJZiB0aGVzZSBjb25kaXRpb25zIGFyZW4ndCB0cnVlLAorICAgICAgJ29uZS1saW5lLXByb2dy
ZXNzJyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAtIElmIGJvdGggJ2RldGFpbGVkLXByb2dy
ZXNzJyBhbmQgJ29uZS1saW5lLXByb2dyZXNzJyBhcmUgc3BlY2lmaWVkIChhbmQKKyAgICAgIGJv
dGggYXJlIHBvc3NpYmxlKSwgJ2RldGFpbGVkLXByb2dyZXNzJyB3aWxsIGJlIHVzZWQuCisgICAg
LSBJZiAnbm90aGluZycgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgYWxsIG9mIHRoZSBvdGhl
ciBvcHRpb25zLgorCistLXByaW50ICdldmVyeXRoaW5nJyBpcyBlcXVpdmFsZW50IHRvIC0tcHJp
bnQgJyUoZXZlcnl0aGluZylzJy4KKworVGhlIGRlZmF1bHQgaXMgdG8gLS1wcmludCAnJShkZWZh
dWx0KXMnLgorIiIiICUgeydzbG93ZXN0JzogTlVNX1NMT1dfVEVTVFNfVE9fTE9HLCAnZXZlcnl0
aGluZyc6IFBSSU5UX0VWRVJZVEhJTkcsIAorICAgICAgICdkZWZhdWx0JzogUFJJTlRfREVGQVVM
VCAgfQorCisKK2RlZiBwcmludF9vcHRpb25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgIyBO
b3RlOiB3ZSB1c2UgcHJpbnRfb3B0aW9ucyByYXRoZXIgdGhhbiBqdXN0ICdwcmludCcgYmVjYXVz
ZSBwcmludAorICAgICAgICAjIGlzIGEgcmVzZXJ2ZWQgd29yZC4KKyAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0tcHJpbnQiLCBkZXN0PSJwcmludF9vcHRpb25zIiwKKyAgICAgICAgICAg
IGRlZmF1bHQ9UFJJTlRfREVGQVVMVCwKKyAgICAgICAgICAgIGhlbHA9KCJjb250cm9scyBwcmlu
dCBvdXRwdXQgb2YgdGVzdCBydW4uICIKKyAgICAgICAgICAgICAgICAgICJVc2UgLS1oZWxwLXBy
aW50aW5nIGZvciBtb3JlLiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taGVs
cC1wcmludGluZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBoZWxwPSJzaG93
IGRldGFpbGVkIGhlbHAgb24gY29udHJvbGxpbmcgcHJpbnQgb3V0cHV0IiksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVkZSBkZWJ1Zy1sZXZlbCBs
b2dnaW5nIiksCisKKyAgICAgICAgIyBGSVhNRTogd2Ugc2hvdWxkIHJlbW92ZSB0aGlzOyBpdCdz
IHByZXR0eSBtdWNoIG9ic29sZXRlIHdpdGggdGhlCisgICAgICAgICMgLS1wcmludCB0cmFjZS1l
dmVyeXRoaW5nIG9wdGlvbi4KKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tc291cmNl
cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBoZWxwPSgic2hvdyBleHBlY3Rl
ZCByZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoIHRlc3QgIgorICAgICAgICAgICAgICAgICAiKGlt
cGxpZXMgLS12ZXJib3NlKSIpKSwKKyAgICBdCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKG9w
dGlvbnMsIG1ldGVyKToKKyAgICAiIiJDb25maWd1cmVzIHRoZSBsb2dnaW5nIHN5c3RlbS4iIiIK
KyAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJworICAgIGxvZ19kYXRlZm10ID0gJyV5JW0lZCAl
SDolTTolUycKKyAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLnZl
cmJvc2U6CisgICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxp
bmVubyktNGQgJShsZXZlbG5hbWUpcyAnCisgICAgICAgICAgICAgICAgICAgJyUobWVzc2FnZSlz
JykKKyAgICAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5ERUJVRworCisgICAgbG9nZ2luZy5iYXNp
Y0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm10LAorICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0ZWZtdD1sb2dfZGF0ZWZtdCwgc3RyZWFtPW1ldGVyKQorCisKK2RlZiBwYXJz
ZV9wcmludF9vcHRpb25zKHByaW50X29wdGlvbnMsIGNoaWxkX3Byb2Nlc3NlcywgaXNfZnVsbHlf
cGFyYWxsZWwpOgorICAgICIiIlBhcnNlIHRoZSBvcHRpb25zIHByb3ZpZGVkIHRvIC0tcHJpbnQg
YW5kIGRlZHVwIGFuZCByYW5rIHRoZW0uCisKKyAgICBSZXR1cm5zCisgICAgICAgIGEgc2V0KCkg
b2Ygc3dpdGNoZXMgdGhhdCBnb3Zlcm4gaG93IGxvZ2dpbmcgaXMgZG9uZQorCisgICAgIiIiCisg
ICAgc3dpdGNoZXMgPSBzZXQocHJpbnRfb3B0aW9ucy5zcGxpdCgnLCcpKQorCisgICAgaWYgJ25v
dGhpbmcnIGluIHN3aXRjaGVzOgorICAgICAgICByZXR1cm4gc2V0KCkKKworICAgIGlmIChjaGls
ZF9wcm9jZXNzZXMgIT0gMSBhbmQgbm90IGlzX2Z1bGx5X3BhcmFsbGVsIGFuZAorICAgICAgICAn
ZGV0YWlsZWQtcHJvZ3Jlc3MnIGluIHN3aXRjaGVzKToKKyAgICAgICAgX2xvZy53YXJuKCJDYW4g
b25seSBwcmludCAnZGV0YWlsZWQtcHJvZ3Jlc3MnIGlmIHJ1bm5pbmcgIgorICAgICAgICAgICAg
ICAgICAgIndpdGggLS1jaGlsZC1wcm9jZXNzZXM9MSBvciAiCisgICAgICAgICAgICAgICAgICAi
d2l0aCAtLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbC4gIgorICAgICAgICAgICAgICAgICAg
IlVzaW5nICdvbmUtbGluZS1wcm9ncmVzcycgaW5zdGVhZC4iKQorICAgICAgICBzd2l0Y2hlcy5k
aXNjYXJkKCdkZXRhaWxlZC1wcm9ncmVzcycpCisgICAgICAgIHN3aXRjaGVzLmFkZCgnb25lLWxp
bmUtcHJvZ3Jlc3MnKQorCisgICAgaWYgJ2V2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgorICAgICAg
ICBzd2l0Y2hlcy5kaXNjYXJkKCdldmVyeXRoaW5nJykKKyAgICAgICAgc3dpdGNoZXMudXBkYXRl
KHNldChQUklOVF9FVkVSWVRISU5HLnNwbGl0KCcsJykpKQorCisgICAgaWYgJ2RldGFpbGVkLXBy
b2dyZXNzJyBpbiBzd2l0Y2hlczoKKyAgICAgICAgc3dpdGNoZXMuZGlzY2FyZCgnb25lLWxpbmUt
cHJvZ3Jlc3MnKQorCisgICAgaWYgJ3RyYWNlLWV2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgorICAg
ICAgICBzd2l0Y2hlcy5kaXNjYXJkKCdkZXRhaWxlZC1wcm9ncmVzcycpCisgICAgICAgIHN3aXRj
aGVzLmRpc2NhcmQoJ29uZS1saW5lLXByb2dyZXNzJykKKyAgICAgICAgc3dpdGNoZXMuZGlzY2Fy
ZCgndHJhY2UtdW5leHBlY3RlZCcpCisgICAgICAgIHN3aXRjaGVzLmRpc2NhcmQoJ3VuZXhwZWN0
ZWQnKQorCisgICAgaWYgJ3RyYWNlLXVuZXhwZWN0ZWQnIGluIHN3aXRjaGVzOgorICAgICAgICBz
d2l0Y2hlcy5kaXNjYXJkKCd1bmV4cGVjdGVkJykKKworICAgIHJldHVybiBzd2l0Y2hlcworCisK
K2NsYXNzIFByaW50ZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyBoYW5kbGluZyBhbGwgbm9uLWRl
YnVnLWxvZ2dpbmcgcHJpbnRpbmcgZG9uZSBieSBydW4td2Via2l0LXRlc3RzLgorCisgICAgUHJp
bnRpbmcgZnJvbSBydW4td2Via2l0LXRlc3RzIGZhbGxzIGludG8gdHdvIGJ1Y2tldHM6IGdlbmVy
YWwgb3IKKyAgICByZWd1bGFyIG91dHB1dCB0aGF0IGlzIHJlYWQgb25seSBieSBodW1hbnMgYW5k
IGNhbiBiZSBjaGFuZ2VkIGF0IGFueQorICAgIHRpbWUsIGFuZCBvdXRwdXQgdGhhdCBpcyBwYXJz
ZWQgYnkgYnVpbGRib3RzIChhbmQgaHVtYW5zKSBhbmQgaGVuY2UKKyAgICBtdXN0IGJlIGNoYW5n
ZWQgbW9yZSBjYXJlZnVsbHkgYW5kIGluIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBidWlsZGJvdAor
ICAgIHBhcnNpbmcgY29kZSAoaW4gY2hyb21pdW0ub3JnJ3MgYnVpbGRib3QvbWFzdGVyLmNocm9t
aXVtL3NjcmlwdHMvbWFzdGVyLworICAgIGxvZ19wYXJzZXIvd2Via2l0X3Rlc3RfY29tbWFuZC5w
eSBzY3JpcHQpLgorCisgICAgQnkgZGVmYXVsdCB0aGUgYnVpbGRib3QtcGFyc2VkIGNvZGUgZ2V0
cyBsb2dnZWQgdG8gc3Rkb3V0LCBhbmQgcmVndWxhcgorICAgIG91dHB1dCBnZXRzIGxvZ2dlZCB0
byBzdGRlcnIuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHJlZ3Vs
YXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQsCisgICAgICAgICAgICAgICAgIGNoaWxkX3Byb2Nl
c3NlcywgaXNfZnVsbHlfcGFyYWxsZWwpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJncworICAg
ICAgICAgIHBvcnQgICAgICAgICAgICAgICBpbnRlcmZhY2UgdG8gcG9ydC1zcGVjaWZpYyByb3V0
aW5lcworICAgICAgICAgIG9wdGlvbnMgICAgICAgICAgICBPcHRpb25QYXJzZXIgb2JqZWN0IHdp
dGggY29tbWFuZCBsaW5lIHNldHRpbmdzCisgICAgICAgICAgcmVndWxhcl9vdXRwdXQgICAgIHN0
cmVhbSB0byB3aGljaCBvdXRwdXQgaW50ZW5kZWQgb25seSBmb3IgaHVtYW5zCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB3cml0dGVuCisgICAgICAgICAgYnVpbGRib3Rf
b3V0cHV0ICAgIHN0cmVhbSB0byB3aGljaCBvdXRwdXQgaW50ZW5kZWQgdG8gYmUgcmVhZCBieQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGRib3RzIChhbmQgaHVtYW5zKSBz
aG91bGQgYmUgd3JpdHRlbgorICAgICAgICAgIGNoaWxkX3Byb2Nlc3NlcyAgICBudW1iZXIgb2Yg
cGFyYWxsZWwgdGhyZWFkcyBydW5uaW5nICh1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRyb2xsZWQgYnkgLS1jaGlsZC1wcm9jZXNzZXMpCisgICAgICAgICAgaXNfZnVs
bHlfcGFyYWxsZWwgIGFyZSB0aGUgdGVzdHMgcnVubmluZyBpbiBhIHNpbmdsZSBxdWV1ZSwgb3IK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc2hhcmRzICh1c3VhbGx5IGNvbnRyb2xs
ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1leHBlcmltZW50YWwtZnVsbHkt
cGFyYWxsZWwpCisKKyAgICAgICAgTm90ZSB0aGF0IHRoZSBsYXN0IHR3byBhcmdzIGFyZSBzZXBh
cmF0ZSByYXRoZXIgdGhhbiBidW5kbGVkIGludG8KKyAgICAgICAgdGhlIG9wdGlvbnMgc3RydWN0
dXJlIHNvIHRoYXQgdGhpcyBvYmplY3QgZG9lcyBub3QgYXNzdW1lIGFueSBmbGFncworICAgICAg
ICBzZXQgaW4gb3B0aW9ucyB0aGF0IHdlcmVuJ3QgcmV0dXJuZWQgZnJvbSBsb2dnaW5nX29wdGlv
bnMoKSwgYWJvdmUuCisgICAgICAgIFRoZSB0d28gYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgb3Igbm90IHdlIGNhbiBzZW5zaWJseSB1c2UKKyAgICAgICAgdGhlICdkZXRhaWxlZC1wcm9n
cmVzcycgb3B0aW9uLCBvciBjYW4gb25seSB1c2UgJ29uZS1saW5lLXByb2dyZXNzJy4KKyAgICAg
ICAgIiIiCisgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbSA9IGJ1aWxkYm90X291dHB1dAor
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9wb3J0ID0gcG9y
dAorICAgICAgICBzZWxmLl9zdHJlYW0gPSByZWd1bGFyX291dHB1dAorCisgICAgICAgICMgVGhl
c2UgYXJlIHVzZWQgZm9yIC0tcHJpbnQgZGV0YWlsZWQtcHJvZ3Jlc3MgdG8gdHJhY2sgc3RhdHVz
IGJ5CisgICAgICAgICMgZGlyZWN0b3J5LgorICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IE5v
bmUKKyAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiIgorICAgICAgICBzZWxm
Ll9jdXJyZW50X3Rlc3RfbnVtYmVyID0gMAorCisgICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXJl
ZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbShvcHRpb25zLnZlcmJvc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyX291dHB1dCkKKyAgICAg
ICAgY29uZmlndXJlX2xvZ2dpbmcoc2VsZi5fb3B0aW9ucywgc2VsZi5fbWV0ZXIpCisKKyAgICAg
ICAgc2VsZi5zd2l0Y2hlcyA9IHBhcnNlX3ByaW50X29wdGlvbnMob3B0aW9ucy5wcmludF9vcHRp
b25zLAorICAgICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzLCBpc19mdWxseV9wYXJhbGxlbCkKKwor
ICAgICMgVGhlc2UgdHdvIHJvdXRpbmVzIGp1c3QgaGlkZSB0aGUgaW1wbG1lbnRhdGlvbiBvZiB0
aGUgc3dpdGNoZXMuCisgICAgZGVmIGRpc2FibGVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgIHJl
dHVybiBub3Qgb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKKworICAgIGRlZiBlbmFibGVkKHNlbGYs
IG9wdGlvbik6CisgICAgICAgIHJldHVybiBvcHRpb24gaW4gc2VsZi5zd2l0Y2hlcworCisgICAg
ZGVmIGhlbHBfcHJpbnRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlKEhFTFBfUFJJTlRJ
TkcpCisKKyAgICBkZWYgcHJpbnRfYWN0dWFsKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYu
ZGlzYWJsZWQoJ2FjdHVhbCcpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2J1
aWxkYm90X3N0cmVhbS53cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgcHJpbnRfY29uZmln
KHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYud3JpdGUobXNnLCAnY29uZmlnJykKKworICAgIGRl
ZiBwcmludF9leHBlY3RlZChzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2V4
cGVjdGVkJykKKworICAgIGRlZiBwcmludF90aW1pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgc2Vs
Zi53cml0ZShtc2csICd0aW1pbmcnKQorCisgICAgZGVmIHByaW50X29uZV9saW5lX3N1bW1hcnko
c2VsZiwgdG90YWwsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1t
YXJ5IG9mIHRoZSB0ZXN0IHJ1biB0byBzdGRvdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICB0b3RhbDogdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgorICAgICAgICAgIGV4cGVjdGVkOiBu
dW1iZXIgb2YgZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5k
aXNhYmxlZCgnb25lLWxpbmUtc3VtbWFyeScpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgdW5leHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKKyAgICAgICAgaWYgdW5leHBlY3RlZCA9
PSAwOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIkFsbCAlZCB0ZXN0cyByYW4gYXMg
ZXhwZWN0ZWQuXG4iICUgZXhwZWN0ZWQpCisgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKKyAg
ICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVk
IGRpZG4ndDpcblxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVk
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIlxuJWQgdGVz
dHMgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGV4cGVjdGVkLCB1bmV4cGVjdGVkKSkKKworICAgIGRlZiBwcmludF90ZXN0
X3Jlc3VsdChzZWxmLCByZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKToKKyAgICAg
ICAgIiIiUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJp
bnQuIiIiCisgICAgICAgIGlmIChzZWxmLmVuYWJsZWQoJ3RyYWNlLWV2ZXJ5dGhpbmcnKSBvcgor
ICAgICAgICAgICAgc2VsZi5lbmFibGVkKCd0cmFjZS11bmV4cGVjdGVkJykgYW5kIG5vdCBleHBl
Y3RlZCk6CisgICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCwgZXhwX3N0
ciwgZ290X3N0cikKKyAgICAgICAgZWxpZiAobm90IGV4cGVjdGVkIGFuZCBzZWxmLmVuYWJsZWQo
J3VuZXhwZWN0ZWQnKSBhbmQKKyAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlZCgnZGV0YWlsZWQt
cHJvZ3Jlc3MnKSk6CisgICAgICAgICAgICAjIE5vdGU6ICdkZXRhaWxlZC1wcm9ncmVzcycgaGFu
ZGxlcyB1bmV4cGVjdGVkIHJlc3VsdHMgaW50ZXJuYWxseSwKKyAgICAgICAgICAgICMgc28gd2Ug
c2tpcCBpdCBoZXJlLgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jl
c3VsdChyZXN1bHQpCisKKyAgICBkZWYgX3ByaW50X3Rlc3RfdHJhY2Uoc2VsZiwgcmVzdWx0LCBl
eHBfc3RyLCBnb3Rfc3RyKToKKyAgICAgICAgIiIiUHJpbnQgZGV0YWlsZWQgcmVzdWx0cyBvZiBh
IHRlc3QgKHRyaWdnZXJlZCBieSAtLXByaW50IHRyYWNlLSopLgorICAgICAgICBGb3IgZWFjaCB0
ZXN0LCBwcmludDoKKyAgICAgICAgICAgLSBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgYmFzZWxp
bmVzCisgICAgICAgICAgIC0gZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAtIGFjdHVhbCBy
ZXN1bHQKKyAgICAgICAgICAgLSB0aW1pbmcgaW5mbworICAgICAgICAiIiIKKyAgICAgICAgZmls
ZW5hbWUgPSByZXN1bHQuZmlsZW5hbWUKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBzZWxmLl93cml0ZSgndHJh
Y2U6ICVzXG4nICUgdGVzdF9uYW1lKQorICAgICAgICBzZWxmLl93cml0ZSgnICB0eHQ6ICVzXG4n
ICUKKyAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxl
bmFtZSwgJy50eHQnKSkpCisgICAgICAgIHBuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9m
aWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwbmdf
ZmlsZSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgnICBwbmc6ICVzXG4nICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFt
ZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgnICBwbmc6IDxub25l
PlxuJykKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgZXhwOiAlc1xuJyAlIGV4cF9zdHIpCisgICAg
ICAgIHNlbGYuX3dyaXRlKCcgIGdvdDogJXNcbicgJSBnb3Rfc3RyKQorICAgICAgICBzZWxmLl93
cml0ZSgnIHRvb2s6ICUtLjNmXG4nICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUpCisgICAgICAgIHNl
bGYuX3dyaXRlKCdcbicpCisKKyAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQo
c2VsZiwgcmVzdWx0KToKKyAgICAgICAgIiIiUHJpbnRzIG9uZSB1bmV4cGVjdGVkIHRlc3QgcmVz
dWx0IGxpbmUuIiIiCisgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RB
VElPTl9ERVNDUklQVElPTlNbcmVzdWx0LnR5cGVdWzBdCisgICAgICAgIHNlbGYud3JpdGUoIiAg
JXMgLT4gdW5leHBlY3RlZCAlcyIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUocmVzdWx0LmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAg
ICAgZGVzYyksICJ1bmV4cGVjdGVkIikKKworICAgIGRlZiBwcmludF9wcm9ncmVzcyhzZWxmLCBy
ZXN1bHRfc3VtbWFyeSwgcmV0cnlpbmcsIHRlc3RfbGlzdCk6CisgICAgICAgICIiIlByaW50IHBy
b2dyZXNzIHRocm91Z2ggdGhlIHRlc3RzIGFzIGRldGVybWluZWQgYnkgLS1wcmludC4iIiIKKyAg
ICAgICAgaWYgc2VsZi5lbmFibGVkKCdkZXRhaWxlZC1wcm9ncmVzcycpOgorICAgICAgICAgICAg
c2VsZi5fcHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnksIHRlc3RfbGlzdCkK
KyAgICAgICAgZWxpZiBzZWxmLmVuYWJsZWQoJ29uZS1saW5lLXByb2dyZXNzJyk6CisgICAgICAg
ICAgICBzZWxmLl9wcmludF9vbmVfbGluZV9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgcmV0cnlp
bmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiByZXN1
bHRfc3VtbWFyeS5yZW1haW5pbmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0
ZSgnJykKKworICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1
bW1hcnksIHJldHJ5aW5nKToKKyAgICAgICAgIiIiRGlzcGxheXMgdGhlIHByb2dyZXNzIHRocm91
Z2ggdGhlIHRlc3QgcnVuLiIiIgorICAgICAgICBwZXJjZW50X2NvbXBsZXRlID0gMTAwICogKHJl
c3VsdF9zdW1tYXJ5LmV4cGVjdGVkICsKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhw
ZWN0ZWQpIC8gcmVzdWx0X3N1bW1hcnkudG90YWwKKyAgICAgICAgYWN0aW9uID0gIlRlc3Rpbmci
CisgICAgICAgIGlmIHJldHJ5aW5nOgorICAgICAgICAgICAgYWN0aW9uID0gIlJldHJ5aW5nIgor
ICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMgKCVkJSUpOiAlZCByYW4gYXMgZXhwZWN0
ZWQsICVkIGRpZG4ndCwiCisgICAgICAgICAgICAiICVkIGxlZnQiICUgKGFjdGlvbiwgcGVyY2Vu
dF9jb21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCisgICAgICAgICAgICAgcmVzdWx0
X3N1bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKSkKKworICAgIGRl
ZiBfcHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRlc3RfbGlz
dCk6CisgICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0cHV0IHdoZXJlIHdl
IHByaW50IHRoZSBkaXJlY3RvcnkgbmFtZQorICAgICAgICBhbmQgb25lIGRvdCBmb3IgZWFjaCBj
b21wbGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKKyAgICAgICAgIi0tbG9nIGRldGFp
bGVkLXByb2dyZXNzIi4iIiIKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9
PSBsZW4odGVzdF9saXN0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG5leHRfdGVz
dCA9IHRlc3RfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICBuZXh0X2Rp
ciA9IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZShuZXh0X3Rlc3QpKQorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNz
X3N0ciA9PSAiIjoKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVz
OiAiICUgKG5leHRfZGlyKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rp
cgorCisgICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgor
ICAgICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6CisgICAgICAgICAg
ICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nf
c3RyKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczog
LiIgJSAobmV4dF9kaXIpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0
X2RpcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3By
b2dyZXNzX3N0ciArPSAiLiIKKworICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRf
c3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5lbmFi
bGVkKCd1bmV4cGVjdGVkJykpOgorICAgICAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIl
c1xuIiAlIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKQorICAgICAgICAgICAgICAgIHRlc3Rf
cmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0c1tuZXh0X3Rlc3RdCisgICAgICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdCh0ZXN0X3Jlc3VsdCkKKyAgICAg
ICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIHNlbGYuX2N1
cnJlbnRfZGlyCisKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgKz0gMQor
ICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4odGVzdF9saXN0
KToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBuZXh0X3Rlc3QgPSB0ZXN0
X2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KKyAgICAgICAgICAgIG5leHRfZGlyID0g
b3MucGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZShuZXh0X3Rlc3QpKQorCisgICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFp
bmluZzoKKyAgICAgICAgICAgIHJlbWFpbl9zdHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5
LnJlbWFpbmluZykKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyVzIiAlIChz
ZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW1haW5fc3RyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX21ldGVyLnByb2dyZXNzKCIlcyIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQor
CisgICAgZGVmIHByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3Vs
dHMpOgorICAgICAgICAiIiJQcmludHMgYSBsaXN0IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMg
dG8gdGhlIGJ1aWxkYm90IHN0cmVhbS4iIiIKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgndW5l
eHBlY3RlZC1yZXN1bHRzJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwYXNzZXMg
PSB7fQorICAgICAgICBmbGFreSA9IHt9CisgICAgICAgIHJlZ3Jlc3Npb25zID0ge30KKworICAg
ICAgICBmb3IgdGVzdCwgcmVzdWx0cyBpbiB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10uaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRzWydhY3R1YWwnXS5zcGxpdCgi
ICIpCisgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdHNbJ2V4cGVjdGVkJ10uc3BsaXQoIiAi
KQorICAgICAgICAgICAgaWYgYWN0dWFsID09IFsnUEFTUyddOgorICAgICAgICAgICAgICAgIGlm
ICdDUkFTSCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9v
Zl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnRXhwZWN0ZWQgdG8gY3Jhc2gsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbGlmICdUSU1FT1VU
JyBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3Rz
KHBhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBl
Y3RlZCB0byB0aW1lb3V0LCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gZmFpbCwgYnV0IHBhc3NlZCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQorICAgICAg
ICAgICAgZWxpZiBsZW4oYWN0dWFsKSA+IDE6CisgICAgICAgICAgICAgICAgIyBXZSBncm91cCBm
bGFreSB0ZXN0cyBieSB0aGUgZmlyc3QgYWN0dWFsIHJlc3VsdCB3ZSBnb3QuCisgICAgICAgICAg
ICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3QpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhyZWdy
ZXNzaW9ucywgcmVzdWx0c1snYWN0dWFsJ10sIHRlc3QpCisKKyAgICAgICAgaWYgbGVuKHBhc3Nl
cykgb3IgbGVuKGZsYWt5KSBvciBsZW4ocmVncmVzc2lvbnMpOgorICAgICAgICAgICAgc2VsZi5f
YnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYgbGVuKHBhc3Nlcyk6Cisg
ICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBwYXNzZXMuaXRlcml0ZW1zKCk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIlczogKCVkKVxuIiAlIChrZXks
IGxlbih0ZXN0cykpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAg
ICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJv
dF9zdHJlYW0ud3JpdGUoIiAgJXNcbiIgJSB0ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuX2J1
aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3Ry
ZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYgbGVuKGZsYWt5KToKKyAgICAgICAgICAgIGRl
c2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9O
UworICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gZmxha3kuaXRlcml0ZW1zKCk6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tl
eS5sb3dlcigpXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgi
VW5leHBlY3RlZCBmbGFraW5lc3M6ICVzICglZClcbiIKKyAgICAgICAgICAgICAgICAgICAgJSAo
ZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQorICAgICAgICAgICAgICAgIHRl
c3RzLnNvcnQoKQorCisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXVt0ZXN0XQor
ICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikK
KyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQo
IiAiKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5F
WFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCisgICAgICAgICAgICAgICAgICAgIG5ld19leHBlY3Rh
dGlvbnNfbGlzdCA9IGxpc3Qoc2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMgPSAlcyIgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgKHRlc3QsICIgIi5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlz
dCkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQor
ICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAg
aWYgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBl
Y3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUworICAgICAgICAgICAgZm9yIGtl
eSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAg
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgIlJlZ3Jlc3Npb25zOiBVbmV4cGVjdGVkICVzIDogKCVkKVxuIiAlICgKKyAgICAgICAg
ICAgICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQorICAgICAg
ICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3Rz
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMg
PSAlc1xuIiAlICh0ZXN0LCBrZXkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0
cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRl
KCJcbiIpCisKKyAgICAgICAgaWYgbGVuKHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSkgYW5k
IHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVh
bS53cml0ZSgiJXNcbiIgJSAiLSIgKiA3OCkKKworICAgIGRlZiBwcmludF91cGRhdGUoc2VsZiwg
bXNnKToKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgndXBkYXRlcycpOgorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZShtc2cpCisKKyAgICBkZWYgd3JpdGUo
c2VsZiwgbXNnLCBvcHRpb249Im1pc2MiKToKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZChvcHRp
b24pOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3dyaXRlKCIlc1xuIiAlIG1z
ZykKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5fbWV0ZXIudXBk
YXRlKG1zZykKKworIworIyBVdGlsaXR5IHJvdXRpbmVzIHVzZWQgYnkgdGhlIENvbnRyb2xsZXIg
Y2xhc3MKKyMKKworCitkZWYgX2FkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUp
OgorICAgIGRpY3Quc2V0ZGVmYXVsdChrZXksIFtdKS5hcHBlbmQodmFsdWUpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wcmludGluZ191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NThlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmlu
dGluZ191bml0dGVzdC5weQpAQCAtMCwwICsxLDUxNCBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBwcmludGluZy5weS4iIiIKKworaW1w
b3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1w
b3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGluZwor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cworCisKK2NsYXNzIEFycmF5U3RyZWFtKG9iamVj
dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jb250ZW50cyA9IFtd
CisKKyAgICBkZWYgd3JpdGUoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5fY29udGVudHMuYXBw
ZW5kKG1zZykKKworICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb250
ZW50cworCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9jb250ZW50cyA9IFtd
CisKKyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiAobGVuKHNlbGYuX2NvbnRl
bnRzKSA9PSAwKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPEFycmF5U3RyZWFtOiAnICsgc3Ry
KHNlbGYuX2NvbnRlbnRzKSArICc+JworCisKK2RlZiBnZXRfb3B0aW9ucyhhcmdzKToKKyAgICBs
byA9IHByaW50aW5nLnByaW50X29wdGlvbnMoKQorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9bG8pCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIu
cGFyc2VfYXJncyhhcmdzKQorCisKK2RlZiBnZXRfcmVzdWx0KGZpbGVuYW1lLCByZXN1bHRfdHlw
ZT10ZXN0X2V4cGVjdGF0aW9ucy5QQVNTLCBydW5fdGltZT0wKToKKyAgICBmYWlsdXJlcyA9IFtd
CisgICAgaWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDoKKyAgICAg
ICAgZmFpbHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpXQorICAgIGVsaWYg
cmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAgICAgIGZhaWx1cmVz
ID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCldCisgICAgcmV0dXJuIGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLlRlc3RSZXN1bHQoZmlsZW5hbWUsIGZhaWx1cmVzLCBydW5fdGltZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zv
cl9hbGxfZGlmZnM9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lX2Zvcl9kaWZmcz0wKQorCisKK2RlZiBnZXRfcmVzdWx0X3N1bW1hcnkocG9ydF9v
YmosIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19zdHIpOgorICAgIGV4cGVjdGF0aW9ucyA9IHRl
c3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMoCisgICAgICAgIHBvcnRfb2JqLCB0ZXN0
X2ZpbGVzLCBleHBlY3RhdGlvbnNfc3RyLAorICAgICAgICBwb3J0X29iai50ZXN0X3BsYXRmb3Jt
X25hbWUoKSwgaXNfZGVidWdfbW9kZT1GYWxzZSwKKyAgICAgICAgaXNfbGludF9tb2RlPUZhbHNl
LCB0ZXN0c19hcmVfcHJlc2VudD1GYWxzZSkKKworICAgIHJzID0gcnVuX3dlYmtpdF90ZXN0cy5S
ZXN1bHRTdW1tYXJ5KGV4cGVjdGF0aW9ucywgdGVzdF9maWxlcykKKyAgICByZXR1cm4gcnMsIGV4
cGVjdGF0aW9ucworCisKK2NsYXNzIFRlc3RVdGlsaXR5RnVuY3Rpb25zKHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfbG9nZ2luZyhzZWxmKToKKyAgICAgICAgIyBG
SVhNRTogV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byByZXNldCB0aGUgYmFzaWMgbG9nZ2Vy
LgorICAgICAgICAjIEZJWE1FOiBJZiBvdGhlciB0ZXN0aW5nIGNsYXNzZXMgY2FsbCBsb2dnaW5n
LmJhc2ljQ29uZmlnKCkgdGhlbgorICAgICAgICAjIEZJWE1FOiB0aGVzZSBjYWxscyBiZWNvbWUg
bm8tb3BzIGFuZCB3ZSBjYW4ndCBjb250cm9sIHRoZQorICAgICAgICAjIEZJWE1FOiBjb25maWd1
cmF0aW9uIHRvIHRlc3QgdGhpbmdzIHByb3Blcmx5LgorICAgICAgICBvcHRpb25zLCBhcmdzID0g
Z2V0X29wdGlvbnMoW10pCisgICAgICAgIHN0cmVhbSA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAg
cHJpbnRpbmcuY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgc3RyZWFtKQorICAgICAgICBsb2dn
aW5nLmluZm8oInRoaXMgc2hvdWxkIGJlIGxvZ2dlZCIpCisgICAgICAgICMgc2VsZi5hc3NlcnRG
YWxzZShzdHJlYW0uZW1wdHkoKSkKKworICAgICAgICBzdHJlYW0ucmVzZXQoKQorICAgICAgICBs
b2dnaW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBub3QgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxm
LmFzc2VydFRydWUoc3RyZWFtLmVtcHR5KCkpCisKKyAgICAgICAgc3RyZWFtLnJlc2V0KCkKKyAg
ICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFsnLS12ZXJib3NlJ10pCisgICAgICAg
IHByaW50aW5nLmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkKKyAgICAgICAgbG9n
Z2luZy5kZWJ1ZygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFzc2Vy
dEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfb3B0aW9ucyhzZWxm
KToKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFtdKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUob3B0aW9ucyBpcyBub3QgTm9uZSkKKworCitjbGFzcyAgVGVzdHByaW50ZXIo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBnZXRfcHJpbnRlcihzZWxmLCBhcmdzPU5vbmUs
IHNpbmdsZV90aHJlYWRlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICBpc19mdWxseV9wYXJh
bGxlbD1GYWxzZSk6CisgICAgICAgIHByaW50aW5nX29wdGlvbnMgPSBwcmludGluZy5wcmludF9v
cHRpb25zKCkKKyAgICAgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihv
cHRpb25fbGlzdD1wcmludGluZ19vcHRpb25zKQorICAgICAgICBvcHRpb25zLCBhcmdzID0gb3B0
aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Lmdl
dCgndGVzdCcsIG9wdGlvbnMpCisgICAgICAgIG5wcm9jID0gMgorICAgICAgICBpZiBzaW5nbGVf
dGhyZWFkZWQ6CisgICAgICAgICAgICBucHJvYyA9IDEKKworICAgICAgICByZWd1bGFyX291dHB1
dCA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAgYnVpbGRib3Rfb3V0cHV0ID0gQXJyYXlTdHJlYW0o
KQorICAgICAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRlcihzZWxmLl9wb3J0LCBvcHRpb25z
LCByZWd1bGFyX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVp
bGRib3Rfb3V0cHV0LCBzaW5nbGVfdGhyZWFkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICByZXR1cm4gcHJpbnRlciwgcmVn
dWxhcl9vdXRwdXQsIGJ1aWxkYm90X291dHB1dAorCisgICAgZGVmIHRlc3RfaGVscF9wcmludGVy
KHNlbGYpOgorICAgICAgICAjIEhlcmUgYW5kIGJlbG93IHdlJ2xsIGNhbGwgdGhlICJyZWd1bGFy
IiBwcmludGVyIGVyciBhbmQgdGhlCisgICAgICAgICMgYnVpbGRib3QgcHJpbnRlciBvdXQ7IHRo
aXMgY29ycmVzcG9uZHMgdG8gaG93IHRoaW5ncyBydW4gb24gdGhlCisgICAgICAgICMgYm90cyB3
aXRoIHN0ZGVyciBhbmQgc3Rkb3V0LgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYu
Z2V0X3ByaW50ZXIoKQorCisgICAgICAgICMgVGhpcyByb3V0aW5lIHNob3VsZCBwcmludCBzb21l
dGhpbmcgdG8gc3Rkb3V0LiB0ZXN0aW5nIHdoYXQgaXQgaXMKKyAgICAgICAgIyBpcyBraW5kIG9m
IHBvaW50bGVzcy4KKyAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50aW5nKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5l
bXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfYWN0dWFsKHNlbGYpOgorICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkK
KyAgICAgICAgcHJpbnRlci5wcmludF9hY3R1YWwoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkp
CisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmlu
dCcsICdhY3R1YWwnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9hY3R1YWwoJ2hlbGxvJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG91dC5nZXQoKSwgWydoZWxsb1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHBy
aW50ZXIucHJpbnRfYWN0dWFsKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIu
ZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0KCksIFsnaGVsbG9cbidd
KQorCisgICAgZGVmIHRlc3RfcHJpbnRfYWN0dWFsX2J1aWxkYm90KHNlbGYpOgorICAgICAgICAj
IEZJWE1FOiBUZXN0IHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgYWN0dWFsIHJlc3VsdHMgbWF0Y2hl
cyB3aGF0IHRoZQorICAgICAgICAjIGJ1aWxkYm90IGlzIGV4cGVjdGluZy4KKyAgICAgICAgcGFz
cworCisgICAgZGVmIHRlc3RfcHJpbnRfY29uZmlnKHNlbGYpOgorICAgICAgICBwcmludGVyLCBl
cnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAg
ICAgcHJpbnRlci5wcmludF9jb25maWcoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJp
bnRlcihbJy0tcHJpbnQnLCAnY29uZmlnJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmln
KCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4n
XSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXBy
aW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoJ2hlbGxv
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9cbiddKQorCisg
ICAgZGVmIHRlc3RfcHJpbnRfZXhwZWN0ZWQoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwg
b3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBw
cmludGVyLnByaW50X2V4cGVjdGVkKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
cnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50
ZXIoWyctLXByaW50JywgJ2V4cGVjdGVkJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfZXhwZWN0
ZWQoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnaGVsbG9c
biddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0t
cHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X2V4cGVjdGVkKCdo
ZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkK
KworICAgIGRlZiB0ZXN0X3ByaW50X3RpbWluZyhzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJy
LCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAg
IHByaW50ZXIucHJpbnRfdGltaW5nKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
cnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50
ZXIoWyctLXByaW50JywgJ3RpbWluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3RpbWluZygn
aGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsb1xuJ10p
CisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmlu
dCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfdGltaW5nKCdoZWxsbycp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJ2hlbGxvXG4nXSkKKworICAg
IGRlZiB0ZXN0X3ByaW50X3VwZGF0ZShzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50
ZXIucHJpbnRfdXBkYXRlKCdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1w
dHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyct
LXByaW50JywgJ3VwZGF0ZXMnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoJ2hlbGxv
JykKKworICAgICAgICAjIE5vdGUgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBjYXJyaWFnZSBy
ZXR1cm4gaGVyZTsgdXBkYXRlcygpCisgICAgICAgICMgYXJlIG1lYW50IHRvIGJlIG92ZXJ3cml0
dGVuLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsbyddKQorCisg
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAn
ZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgnaGVsbG8nKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWydoZWxsbyddKQorCisgICAgZGVmIHRl
c3RfcHJpbnRfb25lX2xpbmVfc3VtbWFyeShzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBv
dXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHBy
aW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9w
cmludGVyKFsnLS1wcmludCcsICdvbmUtbGluZS1zdW1tYXJ5J10pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhl
cnIuZ2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLlxuIl0pCisKKyAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRo
aW5nJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4
cGVjdGVkLlxuIl0pCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmlu
dF9vbmVfbGluZV9zdW1tYXJ5KDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5n
ZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyJcbjEgdGVzdCByYW4gYXMgZXhwZWN0
ZWQsIDEgZGlkbid0OlxuXG4iXSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmlu
dGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbIlxuMiB0ZXN0cyByYW4g
YXMgZXhwZWN0ZWQsIDEgZGlkbid0OlxuXG4iXSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3Rlc3Rf
cmVzdWx0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBnZXRfcmVzdWx0KCdmb28uaHRtbCcpCisg
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAn
bm90aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhw
ZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisg
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAn
dW5leHBlY3RlZCddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwg
ZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisg
ICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwg
ZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsnICBmb28uaHRtbCAtPiB1bmV4cGVjdGVkIHBhc3NcbiddKQorCisgICAgICAg
IHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0
aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0
ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAg
ICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBf
c3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgWycgIGZvby5odG1sIC0+IHVuZXhwZWN0ZWQgcGFzc1xuJ10pCisKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10p
CisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxz
ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3Ry
PScnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlLXVuZXhwZWN0ZWQn
XSkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRy
dWUsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0
cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIGVy
ci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBl
Y3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorCisg
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAn
dHJhY2UtZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJl
c3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9y
ZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorCisgICAgZGVmIHRlc3RfcHJpbnRfcHJv
Z3Jlc3Moc2VsZik6CisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ2Zvby5odG1sJywgJ2Jhci5odG1s
J10KKyAgICAgICAgZXhwZWN0YXRpb25zID0gJycKKworICAgICAgICAjIHRlc3QgdGhhdCB3ZSBw
cmludCBub3RoaW5nCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9z
dW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKworICAgICAgICBw
cmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVt
cHR5KCkpCisKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9m
aWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IHJlZ3VsYXIgZnVuY3Rp
b25hbGl0eQorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyct
LXByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
b25lLWxpbmUtcHJvZ3Jlc3MnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywg
RmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVz
ZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNz
KHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVz
dF9wcmludF9wcm9ncmVzc19fZGV0YWlsZWQoc2VsZik6CisgICAgICAgIHRlc3RfZmlsZXMgPSBb
J3Bhc3MvcGFzcy5odG1sJywgJ3Bhc3MvdGltZW91dC5odG1sJywgJ2ZhaWwvY3Jhc2guaHRtbCdd
CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICdwYXNzL3RpbWVvdXQuaHRtbCA9IFRJTUVPVVQnCisK
KyAgICAgICAgIyBmaXJzdCwgdGVzdCB0aGF0IGl0IGlzIGRpc2FibGVkIHByb3Blcmx5CisgICAg
ICAgICMgc2hvdWxkIHN0aWxsIHByaW50IG9uZS1saW5lLXByb2dyZXNzCisgICAgICAgIHByaW50
ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigKKyAgICAgICAgICAgIFsnLS1wcmludCcs
ICdkZXRhaWxlZC1wcm9ncmVzcyddLCBzaW5nbGVfdGhyZWFkZWQ9RmFsc2UpCisgICAgICAgIHJz
LCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0
YXRpb25zKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9m
aWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgbm93IHRlc3QgdGhlIGVuYWJs
ZWQgcGF0aHMKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKAor
ICAgICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzJ10sIHNpbmdsZV90aHJl
YWRlZD1UcnVlKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3Bv
cnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9n
cmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJy
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAg
ICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50
X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAg
ICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlv
bnMuVElNRU9VVCksIEZhbHNlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1l
b3V0Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2gu
aHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgVHJ1ZSkKKyAgICAgICAgZXJyLnJlc2V0
KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhy
cywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIFdl
IG9ubHkgY2xlYXIgdGhlIG1ldGVyIHdoZW4gcmV0cnlpbmcgdy8gZGV0YWlsZWQtcHJvZ3Jlc3Mu
CisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50
ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXJyLmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVt
cHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKAor
ICAgICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dyZXNzLHVuZXhwZWN0ZWQnXSwg
c2luZ2xlX3RocmVhZGVkPVRydWUpCisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1h
cnkoc2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorICAgICAgICBwcmludGVy
LnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgp
KQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHBy
aW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1w
dHkoKSkKKworICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0bWwnLCB0ZXN0
X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgRmFsc2UpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0
KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBUcnVlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
ZmFpbC9jcmFzaC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpLCBUcnVlKQorICAgICAg
ICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50
X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisg
ICAgICAgICMgV2Ugb25seSBjbGVhciB0aGUgbWV0ZXIgd2hlbiByZXRyeWluZyB3LyBkZXRhaWxl
ZC1wcm9ncmVzcy4KKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAg
ICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBw
cmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcn
XSkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJp
bnRlcihbJy0tcHJpbnQnLCAnbWlzYyddKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBlcnIucmVzZXQo
KQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAiY29uZmlnIikKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmludGVy
LndyaXRlKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAg
ICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLndyaXRlKCJmb28iLCAiY29uZmlnIikK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3By
aW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHJvdXRpbmUgaXMg
dGhlIG9ubHkgb25lIHRoYXQgcHJpbnRzIHN0dWZmIHRoYXQgdGhlIGJvdHMKKyAgICAgICAgIyBj
YXJlIGFib3V0LgorICAgICAgICBkZWYgZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZCwg
cGFzc2luZywgZmxha3kpOgorICAgICAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFy
eShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAgICAgICBpZiBl
eHBlY3RlZDoKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9wYXNzLmh0
bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5o
dG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCks
IGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNo
Lmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksCisgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQpCisgICAgICAgICAgICBlbGlmIHBhc3Npbmc6CisgICAgICAgICAgICAgICAgcnMuYWRk
KGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJyksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAg
IHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBleHBlY3RlZCkKKyAgICAg
ICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJyksIGV4cGVjdGVk
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
cGFzcy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQo
J3Bhc3MvdGltZW91dC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3Rh
dGlvbnMuQ1JBU0gpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3Vs
dCgnZmFpbC9jcmFzaC5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkK
KyAgICAgICAgICAgIHJldHJ5ID0gcnMKKyAgICAgICAgICAgIGlmIGZsYWt5OgorICAgICAgICAg
ICAgICAgIHJldHJ5LCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9m
aWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdGF0aW9ucykKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0X3Jlc3VsdCgncGFzcy9w
YXNzLmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0X3Jlc3VsdCgn
cGFzcy90aW1lb3V0Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoZ2V0
X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJyksIFRydWUpCisgICAgICAgICAgICB1bmV4cGVjdGVk
X3Jlc3VsdHMgPSBydW5fd2Via2l0X3Rlc3RzLnN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMo
CisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydCwgZXhwLCBycywgcmV0cnkpCisgICAgICAgICAg
ICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzCisKKyAgICAgICAgdGVzdF9maWxlcyA9IFsncGFz
cy9wYXNzLmh0bWwnLCAncGFzcy90aW1lb3V0Lmh0bWwnLCAnZmFpbC9jcmFzaC5odG1sJ10KKyAg
ICAgICAgZXhwZWN0YXRpb25zID0gJycKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgdXIgPSBnZXRf
dW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1G
YWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG91dC5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJp
bnRlcihbJy0tcHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd1bmV4cGVjdGVkLXJlc3VsdHMnXSkKKworICAgICAgICAjIHRlc3QgZXZlcnl0aGlu
ZyBydW5uaW5nIGFzIGV4cGVjdGVkCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0
cyhleHBlY3RlZD1UcnVlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJp
bnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisg
ICAgICAgICMgdGVzdCBmYWlsdXJlcworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQu
cmVzZXQoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFs
c2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3Vu
ZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgdGVz
dCB1bmV4cGVjdGVkIGZsYWt5IHJlc3VsdHMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAg
b3V0LnJlc2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVk
PUZhbHNlLCBwYXNzaW5nPVRydWUsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50
X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMg
dGVzdCB1bmV4cGVjdGVkIHBhc3NlcworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQu
cmVzZXQoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFs
c2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PVRydWUpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5l
eHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJl
c2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHVyID0g
Z2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxh
a3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9wcmludF91bmV4cGVjdGVkX3Jlc3Vs
dHNfYnVpbGRib3Qoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRlc3QgdGhhdCBwcmludF91bmV4
cGVjdGVkX3Jlc3VsdHMoKSBwcm9kdWNlcyB0aGUgcHJpbnRlciB0aGUKKyAgICAgICAgIyBidWls
ZGJvdCBpcyBleHBlY3RpbmcuCisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCBlZGVmNDg1Li5jYjlm
M2VjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC90ZXN0LnB5CkBAIC02Niw2ICs2NiwxMyBAQCBjbGFzcyBUZXN0UG9ydChiYXNl
LlBvcnQpOgogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxl
bmFtZSk6CiAgICAgICAgIHJldHVybiAnJwogCisgICAgZGVmIHJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gZmlsZW5hbWUKKworICAgIGRlZiBl
eHBlY3RlZF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSwgc3VmZml4KToKKyAgICAgICAgKGJhc2Vu
YW1lLCBleHQpID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGJh
c2VuYW1lICsgJy4nICsgc3VmZml4CisKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgcmV0
dXJuIHNlbGYuX25hbWUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggMWU2M2E3YS4u
NWQ4MDc2ZSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC02NCw3ICs2NCw3IEBAIGlt
cG9ydCB0cmFjZWJhY2sKIAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3Rh
dGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2Vu
ZXJhdG9yCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQorZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHRlc3RfZmFpbHVyZXMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZpbGVzCkBAIC04MCwz
MyArODAsNiBAQCBpbXBvcnQgcG9ydAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtp
dHB5LmxheW91dF90ZXN0cy5ydW5fd2Via2l0X3Rlc3RzIikKIAotIyBkdW1teSB2YWx1ZSB1c2Vk
IGZvciBjb21tYW5kLWxpbmUgZXhwbGljaXRuZXNzIHRvIGRpc2FibGUgZGVmYXVsdHMKLUxPR19O
T1RISU5HID0gJ25vdGhpbmcnCi0KLSMgRGlzcGxheSB0aGUgb25lLWxpbmUgcHJvZ3Jlc3MgYmFy
ICglIGNvbXBsZXRlZCkgd2hpbGUgdGVzdGluZwotTE9HX1BST0dSRVNTID0gJ3Byb2dyZXNzJwot
Ci0jIEluZGljYXRlcyB0aGF0IHdlIHdhbnQgZGV0YWlsZWQgcHJvZ3Jlc3MgdXBkYXRlcyBpbiB0
aGUgb3V0cHV0IChwcmludHMKLSMgZGlyZWN0b3J5LWJ5LWRpcmVjdG9yeSBmZWVkYmFjaykuCi1M
T0dfREVUQUlMRURfUFJPR1JFU1MgPSAnZGV0YWlsZWQtcHJvZ3Jlc3MnCi0KLSMgTG9nIHRoZSBv
bmUtbGluZSBzdW1tYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIHJ1bgotTE9HX1NVTU1BUlkgPSAnc3Vt
bWFyeScKLQotIyAiVHJhY2UiIHRoZSB0ZXN0IC0gbG9nIHRoZSBleHBlY3RlZCByZXN1bHQsIHRo
ZSBhY3R1YWwgcmVzdWx0LCBhbmQgdGhlCi0jIGJhc2VsaW5lcyB1c2VkCi1MT0dfVFJBQ0UgPSAn
dHJhY2UnCi0KLSMgTG9nIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hpbGUgcnVubmluZyAoaW5z
dGVhZCBvZiBqdXN0IGF0IHRoZSBlbmQpLgotTE9HX1VORVhQRUNURUQgPSAndW5leHBlY3RlZCcK
LUxPR19VTkVYUEVDVEVEX1JFU1VMVFMgPSAndW5leHBlY3RlZC1yZXN1bHRzJwotCi1MT0dfVkFM
VUVTID0gIiwiLmpvaW4oKCJhY3R1YWwiLCAiY29uZmlnIiwgTE9HX0RFVEFJTEVEX1BST0dSRVNT
LCAiZXhwZWN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgIExPR19OT1RISU5HLCBMT0dfUFJP
R1JFU1MsIExPR19TVU1NQVJZLCAidGltaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICBMT0df
VU5FWFBFQ1RFRCwgTE9HX1VORVhQRUNURURfUkVTVUxUUykpCi1MT0dfREVGQVVMVF9WQUxVRSA9
ICIsIi5qb2luKChMT0dfREVUQUlMRURfUFJPR1JFU1MsIExPR19TVU1NQVJZLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTE9HX1VORVhQRUNURUQsIExPR19VTkVYUEVDVEVEX1JFU1VM
VFMpKQotCiAjIEJ1aWxkZXIgYmFzZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgdGVz
dCByZXN1bHRzLgogQlVJTERFUl9CQVNFX1VSTCA9ICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3Jn
L2J1aWxkYm90L2xheW91dF90ZXN0X3Jlc3VsdHMvIgogCkBAIC0xODEsNyArMTU0LDcgQEAgY2xh
c3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAiIiIKIAogICAgICAgICBzZWxmLnRl
c3RzX2J5X2V4cGVjdGF0aW9uW3Jlc3VsdC50eXBlXS5hZGQocmVzdWx0LmZpbGVuYW1lKQotICAg
ICAgICBzZWxmLnJlc3VsdHNbcmVzdWx0LmZpbGVuYW1lXSA9IHJlc3VsdC50eXBlCisgICAgICAg
IHNlbGYucmVzdWx0c1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0CiAgICAgICAgIHNlbGYucmVt
YWluaW5nIC09IDEKICAgICAgICAgaWYgbGVuKHJlc3VsdC5mYWlsdXJlcyk6CiAgICAgICAgICAg
ICBzZWxmLmZhaWx1cmVzW3Jlc3VsdC5maWxlbmFtZV0gPSByZXN1bHQuZmFpbHVyZXMKQEAgLTE5
Miw2ICsxNjUsODMgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAgICAg
c2VsZi51bmV4cGVjdGVkICs9IDEKIAogCitkZWYgc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0
cyhwb3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkpOgorICAgICIiIlN1bW1hcml6ZSBhbnkg
dW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KKworICAgIEZJWE1FOiBzcGxpdCB0aGlzIGRh
dGEgc3RydWN0dXJlIGludG8gYSBzZXBhcmF0ZSBjbGFzcz8KKworICAgIEFyZ3M6CisgICAgICAg
IHBvcnRfb2JqOiBpbnRlcmZhY2UgdG8gcG9ydC1zcGVjaWZpYyBob29rcworICAgICAgICBleHBl
Y3RhdGlvbnM6IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMgb2JqZWN0CisgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGluaXRpYWwgdGVzdCBydW5z
CisgICAgICAgIHJldHJ5X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gZmluYWwgdGVzdCBy
dW4gb2YgcmV0cmllZCB0ZXN0cworICAgIFJldHVybnM6CisgICAgICAgIEEgZGljdGlvbmFyeSBj
b250YWluaW5nIGEgc3VtbWFyeSBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHRzIGZyb20gdGhlCisg
ICAgICAgIHJ1biwgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAgICAgICAgJ3ZlcnNpb24n
OiBhIHZlcnNpb24gaW5kaWNhdG9yICgxIGluIHRoaXMgdmVyc2lvbikKKyAgICAgICAgJ2ZpeGFi
bGUnOiAjIG9mIGZpeGFibGUgdGVzdHMgKE5PVyAtIFBBU1MpCisgICAgICAgICdza2lwcGVkJzog
IyBvZiBza2lwcGVkIHRlc3RzIChOT1cgJiBTS0lQUEVEKQorICAgICAgICAnbnVtX3JlZ3Jlc3Np
b25zJzogIyBvZiBub24tZmxha3kgZmFpbHVyZXMKKyAgICAgICAgJ251bV9mbGFreSc6ICMgb2Yg
Zmxha3kgZmFpbHVyZXMKKyAgICAgICAgJ251bV9wYXNzZXMnOiAjIG9mIHVuZXhwZWN0ZWQgcGFz
c2VzCisgICAgICAgICd0ZXN0cyc6IGEgZGljdCBvZiB0ZXN0cyAtPiB7J2V4cGVjdGVkJzogJy4u
LicsICdhY3R1YWwnOiAnLi4uJ30KKyAgICAiIiIKKyAgICByZXN1bHRzID0ge30KKyAgICByZXN1
bHRzWyd2ZXJzaW9uJ10gPSAxCisKKyAgICB0YmUgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9l
eHBlY3RhdGlvbgorICAgIHRidCA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lCisg
ICAgcmVzdWx0c1snZml4YWJsZSddID0gbGVuKHRidFt0ZXN0X2V4cGVjdGF0aW9ucy5OT1ddIC0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBB
U1NdKQorICAgIHJlc3VsdHNbJ3NraXBwZWQnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMu
Tk9XXSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiZVt0ZXN0X2V4cGVjdGF0
aW9ucy5TS0lQXSkKKworICAgIG51bV9wYXNzZXMgPSAwCisgICAgbnVtX2ZsYWt5ID0gMAorICAg
IG51bV9yZWdyZXNzaW9ucyA9IDAKKyAgICBrZXl3b3JkcyA9IHt9CisgICAgZm9yIGssIHYgaW4g
VGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TLml0ZXJpdGVtcygpOgorICAgICAgICBr
ZXl3b3Jkc1t2XSA9IGsudXBwZXIoKQorCisgICAgdGVzdHMgPSB7fQorICAgIGZvciBmaWxlbmFt
ZSwgcmVzdWx0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cy5pdGVyaXRlbXMo
KToKKyAgICAgICAgIyBOb3RlIHRoYXQgaWYgYSB0ZXN0IGNyYXNoZWQgaW4gdGhlIG9yaWdpbmFs
IHJ1biwgd2UgaWdub3JlCisgICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jhc2hlZCB3aGVu
IHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQpLAorICAgICAgICAjIGFuZCBhbHdheXMg
Y29uc2lkZXIgdGhlIHJlc3VsdCBub3QgZmxha3kuCisgICAgICAgIHRlc3QgPSBwb3J0X29iai5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBleHBlY3RlZCA9IGV4cGVj
dGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhmaWxlbmFtZSkKKyAgICAgICAgYWN0dWFs
ID0gW2tleXdvcmRzW3Jlc3VsdF1dCisKKyAgICAgICAgaWYgcmVzdWx0ID09IHRlc3RfZXhwZWN0
YXRpb25zLlBBU1M6CisgICAgICAgICAgICBudW1fcGFzc2VzICs9IDEKKyAgICAgICAgZWxpZiBy
ZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAgICAgICAgICBudW1fcmVncmVz
c2lvbnMgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90IGlu
IHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzOgorICAgICAgICAgICAgICAgIGFjdHVh
bC5leHRlbmQoZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAorICAgICAgICAg
ICAgICAgICAgICBmaWxlbmFtZSkuc3BsaXQoIiAiKSkKKyAgICAgICAgICAgICAgICBudW1fZmxh
a3kgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXRyeV9yZXN1bHQg
PSByZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0c1tmaWxlbmFtZV0KKyAgICAgICAgICAg
ICAgICBpZiByZXN1bHQgIT0gcmV0cnlfcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICBhY3R1
YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5X3Jlc3VsdF0pCisgICAgICAgICAgICAgICAgICAgIG51
bV9mbGFreSArPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
bnVtX3JlZ3Jlc3Npb25zICs9IDEKKworICAgICAgICB0ZXN0c1t0ZXN0XSA9IHt9CisgICAgICAg
IHRlc3RzW3Rlc3RdWydleHBlY3RlZCddID0gZXhwZWN0ZWQKKyAgICAgICAgdGVzdHNbdGVzdF1b
J2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFsKQorCisgICAgcmVzdWx0c1sndGVzdHMnXSA9IHRl
c3RzCisgICAgcmVzdWx0c1snbnVtX3Bhc3NlcyddID0gbnVtX3Bhc3NlcworICAgIHJlc3VsdHNb
J251bV9mbGFreSddID0gbnVtX2ZsYWt5CisgICAgcmVzdWx0c1snbnVtX3JlZ3Jlc3Npb25zJ10g
PSBudW1fcmVncmVzc2lvbnMKKworICAgIHJldHVybiByZXN1bHRzCisKKwogY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRl
c3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAogICAgIHRlc3QgZmlsZXMuIiIiCkBAIC0yMDQsMTcg
KzI1NCwxNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVtcFJlbmRlclRyZWUuCiAg
ICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMsIG1ldGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dCwgb3B0aW9ucywgcHJpbnRlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIg
ZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogYW4gb2Jq
ZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0
aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCi0gICAgICAgICAgbWV0ZXI6IGEgTWV0ZXJl
ZFN0cmVhbSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICAgcHJpbnRlcjog
YSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KICAgICAgICAgIiIiCiAgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0g
ICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXIKKyAgICAgICAgc2VsZi5fcHJpbnRlciA9IHByaW50
ZXIKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3Bl
blNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2
ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KApAQCAtMjI4LDEyICsyNzgsNiBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBOb25lCiAg
ICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKIAotICAgICAgICAjIFRo
ZXNlIGFyZSB1c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1wcm9ncmVzcyB0byB0cmFjayBzdGF0dXMg
YnkKLSAgICAgICAgIyBkaXJlY3RvcnkuCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gTm9u
ZQotICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIiCi0gICAgICAgIHNlbGYu
X2N1cnJlbnRfdGVzdF9udW1iZXIgPSAwCi0KICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxz
ZQogCiAgICAgICAgICMgSGFjayBmb3IgZHVtcGluZyB0aHJlYWRzIG9uIHRoZSBib3RzCkBAIC0y
NzksMTkgKzMyMywxNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgICAgICByYWlzZSBlcnIKIAotICAgIGRlZiBwcmVwYXJlX2xpc3RzX2FuZF9wcmlu
dF9vdXRwdXQoc2VsZiwgd3JpdGUpOgorICAgIGRlZiBwcmVwYXJlX2xpc3RzX2FuZF9wcmludF9v
dXRwdXQoc2VsZik6CiAgICAgICAgICIiIkNyZWF0ZSBhcHByb3ByaWF0ZSBzdWJzZXRzIG9mIHRl
c3QgbGlzdHMgYW5kIHJldHVybnMgYQogICAgICAgICBSZXN1bHRTdW1tYXJ5IG9iamVjdC4gQWxz
byBwcmludHMgZXhwZWN0ZWQgdGVzdCBjb3VudHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAg
ICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0
ZXIpIG9yCi0gICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgIiIiCiAKICAg
ICAgICAgIyBSZW1vdmUgc2tpcHBlZCAtIGJvdGggZml4YWJsZSBhbmQgaWdub3JlZCAtIGZpbGVz
IGZyb20gdGhlCiAgICAgICAgICMgdG9wLWxldmVsIGxpc3Qgb2YgZmlsZXMgdG8gdGVzdC4KICAg
ICAgICAgbnVtX2FsbF90ZXN0X2ZpbGVzID0gbGVuKHNlbGYuX3Rlc3RfZmlsZXMpCi0gICAgICAg
IHdyaXRlKCJGb3VuZDogICVkIHRlc3RzIiAlIG51bV9hbGxfdGVzdF9maWxlcykKKyAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgiRm91bmQ6ICAlZCB0ZXN0cyIgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4oc2VsZi5fdGVzdF9maWxlcykpKQog
ICAgICAgICBpZiBub3QgbnVtX2FsbF90ZXN0X2ZpbGVzOgogICAgICAgICAgICAgX2xvZy5jcml0
aWNhbCgiTm8gdGVzdHMgdG8gcnVuLiIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQpAQCAtMzU4
LDcgKzM5OSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgICAgIHRlc3RzX3J1bl9t
c2cgPSAnUnVubmluZzogJWQgdGVzdHMgKGNodW5rIHNsaWNlIFslZDolZF0gb2YgJWQpJyAlICgK
ICAgICAgICAgICAgICAgICAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpLCBzbGljZV9zdGFydCwg
c2xpY2VfZW5kLCBudW1fdGVzdHMpCi0gICAgICAgICAgICB3cml0ZSh0ZXN0c19ydW5fbXNnKQor
ICAgICAgICAgICAgc2VsZi5fcHJpbnQucHJpbnRfZXhwZWN0ZWQodGVzdHNfcnVuX21zZykKIAog
ICAgICAgICAgICAgIyBJZiB3ZSByZWFjaGVkIHRoZSBlbmQgYW5kIHdlIGRvbid0IGhhdmUgZW5v
dWdoIHRlc3RzLCB3ZSBydW4gc29tZQogICAgICAgICAgICAgIyBmcm9tIHRoZSBiZWdpbm5pbmcu
CkBAIC0zNjcsNyArNDA4LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICBl
eHRyYSA9IDEgKyBjaHVua19sZW4gLSAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpCiAgICAgICAg
ICAgICAgICAgZXh0cmFfbXNnID0gKCcgICBsYXN0IGNodW5rIGlzIHBhcnRpYWwsIGFwcGVuZGlu
ZyBbMDolZF0nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSkKLSAgICAgICAg
ICAgICAgICB3cml0ZShleHRyYV9tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF9leHBlY3RlZChleHRyYV9tc2cpCiAgICAgICAgICAgICAgICAgdGVzdHNfcnVuX21zZyAr
PSAiXG4iICsgZXh0cmFfbXNnCiAgICAgICAgICAgICAgICAgZmlsZXMuZXh0ZW5kKHRlc3RfZmls
ZXNbMDpleHRyYV0pCiAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpv
aW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKQEAgLTM5OSwxNyArNDQwLDE4IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgcmVzdWx0X3N1bW1hcnkgPSBSZXN1bHRTdW1t
YXJ5KHNlbGYuX2V4cGVjdGF0aW9ucywKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgfCBz
a2lwX2NodW5rKQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUo
d3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1
bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy5QQVNTLCAicGFzc2VzIikKLSAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19v
Zl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0
ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBl
Y3RhdGlvbnMuRkFJTCwgImZhaWx1cmVzIikKLSAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRf
cmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJp
bnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAg
dGVzdF9leHBlY3RhdGlvbnMuRkxBS1ksICJmbGFreSIpCi0gICAgICAgIHNlbGYuX3ByaW50X2V4
cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNl
bGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAg
ICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlNLSVAsICJza2lwcGVkIikKIAogICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLmZvcmNlOgotICAgICAgICAgICAgd3JpdGUoJ1J1bm5pbmcgYWxsIHRlc3Rz
LCBpbmNsdWRpbmcgc2tpcHMgKC0tZm9yY2UpJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfZXhwZWN0ZWQoJ1J1bm5pbmcgYWxsIHRlc3RzLCBpbmNsdWRpbmcgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tpcHMgKC0tZm9yY2UpJykKICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJ1biB0
aGUgc2tpcHBlZCB0ZXN0cyAodGhleSB3ZXJlCiAgICAgICAgICAgICAjIHN1YnRyYWN0ZWQgb3V0
IG9mIHNlbGYuX3Rlc3RfZmlsZXMsIGFib3ZlKSwgYnV0IHdlIHN0dWIgb3V0IHRoZQpAQCAtNDIw
LDcgKzQ2Miw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgICAgIHRpbWVf
Zm9yX2RpZmZzPTApCiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSB0ZXN0X2V4cGVjdGF0
aW9ucy5TS0lQCiAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhw
ZWN0ZWQ9VHJ1ZSkKLSAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfZXhwZWN0ZWQoJycpCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdF9zdW1tYXJ5CiAKQEAgLTYy
NSwxMSArNjY3LDExIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHBsdXJhbCA9ICIiCiAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID4gMToKICAgICAgICAgICAg
IHBsdXJhbCA9ICJzIgotICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoJ1N0YXJ0aW5nICVzJXMg
Li4uJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFt
ZSgpLCBwbHVyYWwpKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRp
bmcgJXMlcyAuLi4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYu
X3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKICAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2lu
c3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhmaWxlX2xpc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAu
Li4iKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGlu
ZyAuLi4iKQogCiAgICAgICAgICMgV2FpdCBmb3IgdGhlIHRocmVhZHMgdG8gZmluaXNoIGFuZCBj
b2xsZWN0IHRlc3QgZmFpbHVyZXMuCiAgICAgICAgIGZhaWx1cmVzID0ge30KQEAgLTY4Miw3ICs3
MjQsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhl
IHRlc3QgcnVubmVyIG5lZWRzIGFuIEhUVFAgc2VydmVyLiIiIgogICAgICAgICByZXR1cm4gc2Vs
Zi5fY29udGFpbnNfdGVzdHMoc2VsZi5IVFRQX1NVQkRJUikKIAotICAgIGRlZiBydW4oc2VsZiwg
cmVzdWx0X3N1bW1hcnksIHByaW50X3Jlc3VsdHMpOgorICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0
X3N1bW1hcnkpOgogICAgICAgICAiIiJSdW4gYWxsIG91ciB0ZXN0cyBvbiBhbGwgb3VyIHRlc3Qg
ZmlsZXMuCiAKICAgICAgICAgRm9yIGVhY2ggdGVzdCBmaWxlLCB3ZSBydW4gZWFjaCB0ZXN0IHR5
cGUuIElmIHRoZXJlIGFyZSBhbnkgZmFpbHVyZXMsCkBAIC02OTAsNyArNzMyLDYgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBh
IHN1bW1hcnkgb2JqZWN0IHRyYWNraW5nIHRoZSB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgcHJp
bnRfcmVzdWx0czogd2hldGhlciBvciBub3QgdG8gcHJpbnQgdGhlIHN1bW1hcnkgYXQgdGhlIGVu
ZAogCiAgICAgICAgIFJldHVybjoKICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHVuZXhwZWN0ZWQg
cmVzdWx0cyAoMCA9PSBzdWNjZXNzKQpAQCAtNzAwLDExICs3NDEsMTIgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAKICAgICAgICAgaWYgc2Vs
Zi5uZWVkc19odHRwKCk6Ci0gICAgICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoJ1N0YXJ0aW5n
IEhUVFAgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0
ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKwogICAgICAgICAgICAgc2VsZi5fcG9ydC5z
dGFydF9odHRwX3NlcnZlcigpCiAKICAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfdGVzdHMoc2Vs
Zi5XRUJTT0NLRVRfU1VCRElSKToKLSAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgnU3Rh
cnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF91cGRhdGUoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAg
IHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCiAgICAgICAgICAgICAjIHNlbGYu
X3dlYnNvY2tldF9zZWN1cmVfc2VydmVyLlN0YXJ0KCkKIApAQCAtNzI3LDQxICs3NjksMjIgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCiAKLSAg
ICAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ3RpbWlu
ZycpCi0gICAgICAgIHNlbGYuX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHdyaXRlLCBlbmRfdGlt
ZSAtIHN0YXJ0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJl
YWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLQotICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUo
IiIpCi0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgIyBX
ZSB3cml0ZSB0aGlzIGJsb2NrIHRvIHN0ZG91dCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQot
ICAgICAgICAgICAgIyBidWlsZGJvdCBsb2cgcGFyc2VyLCB3aGljaCBvbmx5IGxvb2tzIGF0IHN0
ZG91dCwgbm90IHN0ZGVyciA6KAotICAgICAgICAgICAgd3JpdGUgPSBsYW1iZGEgczogc3lzLnN0
ZG91dC53cml0ZSgiJXNcbiIgJSBzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgd3JpdGUg
PSBjcmVhdGVfbG9nZ2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ2FjdHVhbCcpCisgICAgICAg
IHNlbGYuX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKGVuZF90aW1lIC0gc3RhcnRfdGltZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3Rf
dGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5KQogCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHdyaXRl
LCByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkocmVz
dWx0X3N1bW1hcnkpCiAKICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHN5cy5z
dGRlcnIuZmx1c2goKQogCi0gICAgICAgICMgVGhpcyBzdW1tYXJ5IGRhdGEgZ2V0cyB3cml0dGVu
IHRvIHN0ZG91dCByZWdhcmRsZXNzIG9mIGxvZyBsZXZlbAotICAgICAgICAjICh1bmxlc3Mgb2Yg
Y291cnNlIHdlJ3JlIHByaW50aW5nIG5vdGhpbmcpLgotICAgICAgICBpZiBwcmludF9yZXN1bHRz
OgotICAgICAgICAgICAgaWYgKExPR19ERVRBSUxFRF9QUk9HUkVTUyBpbiBzZWxmLl9vcHRpb25z
LmxvZyBvcgotICAgICAgICAgICAgICAgIChMT0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRpb25z
LmxvZyBhbmQKLSAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudG90YWwgIT0gcmVzdWx0
X3N1bW1hcnkuZXhwZWN0ZWQpKToKLSAgICAgICAgICAgICAgICBwcmludAotICAgICAgICAgICAg
aWYgTE9HX1NVTU1BUlkgaW4gc2VsZi5fb3B0aW9ucy5sb2c6Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRfb25lX2xpbmVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeS50b3RhbCwKKyAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5LnRvdGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkuZXhwZWN0ZWQpCiAKLSAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc2VsZi5fc3Vt
bWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhyZXN1bHRfc3VtbWFyeSwKLSAgICAgICAgICAgIHJl
dHJ5X3N1bW1hcnkpCi0gICAgICAgIGlmIExPR19VTkVYUEVDVEVEX1JFU1VMVFMgaW4gc2VsZi5f
b3B0aW9ucy5sb2c6Ci0gICAgICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMo
dW5leHBlY3RlZF9yZXN1bHRzKQorICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBzdW1tYXJp
emVfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYuX3BvcnQsCisgICAgICAgICAgICBzZWxmLl9leHBl
Y3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeV9zdW1tYXJ5KQorICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1bmV4cGVjdGVkX3Jlc3VsdHMpCiAKICAg
ICAgICAgIyBXcml0ZSB0aGUgc2FtZSBkYXRhIHRvIGxvZyBmaWxlcy4KICAgICAgICAgc2VsZi5f
d3JpdGVfanNvbl9maWxlcyh1bmV4cGVjdGVkX3Jlc3VsdHMsIHJlc3VsdF9zdW1tYXJ5LApAQCAt
NzgzLDExMiArODA2LDE2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gc2VsZi5fcmVzdWx0X3F1ZXVlLmdldF9ub3dhaXQoKQogICAgICAgICAgICAgZXhjZXB0
IFF1ZXVlLkVtcHR5OgogICAgICAgICAgICAgICAgIHJldHVybgorCiAgICAgICAgICAgICBleHBl
Y3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVjdGVkX3Jlc3VsdCgKICAg
ICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25z
LnBpeGVsX3Rlc3RzKQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhw
ZWN0ZWQpCi0gICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3Jlc3VsdHMocmVzdWx0LCBleHBl
Y3RlZCwgcmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgX3ByaW50X3Rlc3RfcmVzdWx0cyhzZWxm
LCByZXN1bHQsIGV4cGVjdGVkLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICJQcmludCB0aGUg
cmVzdWx0IG9mIHRoZSB0ZXN0IGFzIGRldGVybWluZWQgYnkgdGhlIC0tbG9nIHN3aXRjaGVzLiIK
LSAgICAgICAgaWYgTE9HX1RSQUNFIGluIHNlbGYuX29wdGlvbnMubG9nOgotICAgICAgICAgICAg
c2VsZi5fcHJpbnRfdGVzdF90cmFjZShyZXN1bHQpCi0gICAgICAgIGVsaWYgKExPR19ERVRBSUxF
RF9QUk9HUkVTUyBpbiBzZWxmLl9vcHRpb25zLmxvZyBhbmQKLSAgICAgICAgICAgICAgKHNlbGYu
X29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsIG9yCi0gICAgICAgICAgICAgICBz
ZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKSkpOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRfZGV0
YWlsZWRfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBpZiAobm90IGV4cGVjdGVkIGFuZCBMT0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRpb25zLmxv
Zyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdChy
ZXN1bHQpCi0gICAgICAgICAgICBzZWxmLl9wcmludF9vbmVfbGluZV9wcm9ncmVzcyhyZXN1bHRf
c3VtbWFyeSkKLQotICAgIGRlZiBfcHJpbnRfdGVzdF90cmFjZShzZWxmLCByZXN1bHQpOgotICAg
ICAgICAiIiJQcmludCBkZXRhaWxlZCByZXN1bHRzIG9mIGEgdGVzdCAodHJpZ2dlcmVkIGJ5IC0t
bG9nIHRyYWNlKS4KLSAgICAgICAgRm9yIGVhY2ggdGVzdCwgcHJpbnQ6Ci0gICAgICAgICAgIC0g
bG9jYXRpb24gb2YgdGhlIGV4cGVjdGVkIGJhc2VsaW5lcwotICAgICAgICAgICAtIGV4cGVjdGVk
IHJlc3VsdHMKLSAgICAgICAgICAgLSBhY3R1YWwgcmVzdWx0Ci0gICAgICAgICAgIC0gdGltaW5n
IGluZm8KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVuYW1lID0gcmVzdWx0LmZpbGVuYW1lCi0g
ICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxl
bmFtZSkKLSAgICAgICAgX2xvZy5pbmZvKCd0cmFjZTogJXMnICUgdGVzdF9uYW1lKQotICAgICAg
ICBfbG9nLmluZm8oJyAgdHh0OiAlcycgJQotICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0
LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcpKSkKLSAgICAgICAgcG5nX2ZpbGUg
PSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCi0gICAgICAg
IGlmIG9zLnBhdGguZXhpc3RzKHBuZ19maWxlKToKLSAgICAgICAgICAgIF9sb2cuaW5mbygnICBw
bmc6ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cuaW5m
bygnICBwbmc6IDxub25lPicpCi0gICAgICAgIF9sb2cuaW5mbygnICBleHA6ICVzJyAlCi0gICAg
ICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmco
ZmlsZW5hbWUpKQotICAgICAgICBfbG9nLmluZm8oJyAgZ290OiAlcycgJQotICAgICAgICAgICAg
ICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlw
ZSkpCi0gICAgICAgIF9sb2cuaW5mbygnIHRvb2s6ICUtLjNmJyAlIHJlc3VsdC50ZXN0X3J1bl90
aW1lKQotICAgICAgICBfbG9nLmluZm8oJycpCi0KLSAgICBkZWYgX3ByaW50X29uZV9saW5lX3By
b2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiRGlzcGxheXMgdGhlIHBy
b2dyZXNzIHRocm91Z2ggdGhlIHRlc3QgcnVuLiIiIgotICAgICAgICBwZXJjZW50X2NvbXBsZXRl
ID0gMTAwICogKHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkICsKLSAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5LnVuZXhwZWN0ZWQpIC8gcmVzdWx0X3N1bW1hcnkudG90YWwKLSAgICAgICAgYWN0aW9u
ID0gIlRlc3RpbmciCi0gICAgICAgIGlmIHNlbGYuX3JldHJ5aW5nOgotICAgICAgICAgICAgYWN0
aW9uID0gIlJldHJ5aW5nIgotICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMgKCVkJSUp
OiAlZCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndCwiCi0gICAgICAgICAgICAiICVkIGxlZnQi
ICUgKGFjdGlvbiwgcGVyY2VudF9jb21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCi0g
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkucmVt
YWluaW5nKSkKLQotICAgIGRlZiBfcHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0
X3N1bW1hcnkpOgotICAgICAgICAiIiJEaXNwbGF5IGRldGFpbGVkIHByb2dyZXNzIG91dHB1dCB3
aGVyZSB3ZSBwcmludCB0aGUgZGlyZWN0b3J5IG5hbWUKLSAgICAgICAgYW5kIG9uZSBkb3QgZm9y
IGVhY2ggY29tcGxldGVkIHRlc3QuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5Ci0gICAgICAgICItLWxv
ZyBkZXRhaWxlZC1wcm9ncmVzcyIuIiIiCi0gICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9u
dW1iZXIgPT0gbGVuKHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCk6Ci0gICAgICAgICAgICByZXR1cm4K
LQotICAgICAgICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Rbc2VsZi5fY3VycmVu
dF90ZXN0X251bWJlcl0KLSAgICAgICAgbmV4dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoCi0gICAg
ICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKLSAg
ICAgICAgaWYgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPT0gIiI6Ci0gICAgICAgICAgICBz
ZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIChuZXh0X2RpcikKLSAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gbmV4dF9kaXIKLQotICAgICAgICB3aGlsZSBuZXh0X3Rl
c3QgaW4gcmVzdWx0X3N1bW1hcnkucmVzdWx0czoKLSAgICAgICAgICAgIGlmIG5leHRfZGlyICE9
IHNlbGYuX2N1cnJlbnRfZGlyOgotICAgICAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIl
c1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikpCi0gICAgICAgICAgICAgICAgc2Vs
Zi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6IC4iICUgKG5leHRfZGlyKQotICAgICAgICAg
ICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gbmV4dF9kaXIKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgKz0gIi4iCi0KLSAgICAg
ICAgICAgIGlmIChuZXh0X3Rlc3QgaW4gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRz
IGFuZAotICAgICAgICAgICAgICAgIExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29wdGlvbnMubG9n
KToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jl
c3VsdHNbbmV4dF90ZXN0XQotICAgICAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIlc1xu
IiAlIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKQotICAgICAgICAgICAgICAgIHNlbGYuX3By
aW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQobmV4dF90ZXN0LCByZXN1bHQpCi0gICAgICAgICAg
ICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSBzZWxmLl9jdXJyZW50
X2RpcgotCi0gICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyICs9IDEKLSAgICAg
ICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPT0gbGVuKHNlbGYuX3Rlc3RfZmls
ZXNfbGlzdCk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICAgICAgbmV4dF90ZXN0
ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCi0gICAg
ICAgICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGlybmFtZSgKLSAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKLQotICAgICAgICBpZiBy
ZXN1bHRfc3VtbWFyeS5yZW1haW5pbmc6Ci0gICAgICAgICAgICByZW1haW5fc3RyID0gIiAoJWQp
IiAlIChyZXN1bHRfc3VtbWFyeS5yZW1haW5pbmcpCi0gICAgICAgICAgICBzZWxmLl9tZXRlci5w
cm9ncmVzcygiJXMlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYu
X2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyLCByZW1haW5fc3RyKSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlc1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0cikpCi0KLSAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQoc2VsZiwg
cmVzdWx0KToKLSAgICAgICAgIiIiUHJpbnRzIG9uZSB1bmV4cGVjdGVkIHRlc3QgcmVzdWx0IGxp
bmUuIiIiCi0gICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9E
RVNDUklQVElPTlNbcmVzdWx0LnR5cGVdWzBdCi0gICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIg
ICVzIC0+IHVuZXhwZWN0ZWQgJXNcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHJlc3VsdC5maWxlbmFtZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXNjKSkKKyAgICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9l
eHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCisgICAgICAgICAgICAgICAgcmVz
dWx0LmZpbGVuYW1lKQorICAgICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5l
eHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCisgICAgICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIp
CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5
LCBzZWxmLl9yZXRyeWluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fdGVzdF9maWxlc19saXN0KQogCiAgICAgZGVmIF9nZXRfZmFpbHVyZXMoc2VsZiwg
cmVzdWx0X3N1bW1hcnksIGluY2x1ZGVfY3Jhc2hlcyk6CiAgICAgICAgICIiIkZpbHRlcnMgYSBk
aWN0IG9mIHJlc3VsdHMgYW5kIHJldHVybnMgb25seSB0aGUgZmFpbHVyZXMuCkBAIC05MTEsODAg
KzgzOCw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgcmV0dXJuIGZhaWxlZF9yZXN1
bHRzCiAKLSAgICBkZWYgX3N1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgcmVzdWx0
X3N1bW1hcnksIHJldHJ5X3N1bW1hcnkpOgotICAgICAgICAiIiJTdW1tYXJpemUgYW55IHVuZXhw
ZWN0ZWQgcmVzdWx0cyBhcyBhIGRpY3QuCi0KLSAgICAgICAgVE9ETyhkcHJhbmtlKTogc3BsaXQg
dGhpcyBkYXRhIHN0cnVjdHVyZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3M/Ci0KLSAgICAgICAgQXJn
czoKLSAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBpbml0aWFs
IHRlc3QgcnVucwotICAgICAgICAgIHJldHJ5X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20g
ZmluYWwgdGVzdCBydW4gb2YgcmV0cmllZCB0ZXN0cwotICAgICAgICBSZXR1cm5zOgotICAgICAg
ICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGEgc3VtbWFyeSBvZiB0aGUgdW5leHBlY3RlZCBy
ZXN1bHRzIGZyb20gdGhlCi0gICAgICAgICAgcnVuLCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRz
OgotICAgICAgICAgICAgJ3ZlcnNpb24nOiBhIHZlcnNpb24gaW5kaWNhdG9yICgxIGluIHRoaXMg
dmVyc2lvbikKLSAgICAgICAgICAgICdmaXhhYmxlJzogIyBvZiBmaXhhYmxlIHRlc3RzIChOT1cg
LSBQQVNTKQotICAgICAgICAgICAgJ3NraXBwZWQnOiAjIG9mIHNraXBwZWQgdGVzdHMgKE5PVyAm
IFNLSVBQRUQpCi0gICAgICAgICAgICAnbnVtX3JlZ3Jlc3Npb25zJzogIyBvZiBub24tZmxha3kg
ZmFpbHVyZXMKLSAgICAgICAgICAgICdudW1fZmxha3knOiAjIG9mIGZsYWt5IGZhaWx1cmVzCi0g
ICAgICAgICAgICAnbnVtX3Bhc3Nlcyc6ICMgb2YgdW5leHBlY3RlZCBwYXNzZXMKLSAgICAgICAg
ICAgICd0ZXN0cyc6IGEgZGljdCBvZiB0ZXN0cyAtPiB7J2V4cGVjdGVkJzogJy4uLicsICdhY3R1
YWwnOiAnLi4uJ30KLSAgICAgICAgIiIiCi0gICAgICAgIHJlc3VsdHMgPSB7fQotICAgICAgICBy
ZXN1bHRzWyd2ZXJzaW9uJ10gPSAxCi0KLSAgICAgICAgdGJlID0gcmVzdWx0X3N1bW1hcnkudGVz
dHNfYnlfZXhwZWN0YXRpb24KLSAgICAgICAgdGJ0ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlf
dGltZWxpbmUKLSAgICAgICAgcmVzdWx0c1snZml4YWJsZSddID0gbGVuKHRidFt0ZXN0X2V4cGVj
dGF0aW9ucy5OT1ddIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiZVt0ZXN0
X2V4cGVjdGF0aW9ucy5QQVNTXSkKLSAgICAgICAgcmVzdWx0c1snc2tpcHBlZCddID0gbGVuKHRi
dFt0ZXN0X2V4cGVjdGF0aW9ucy5OT1ddICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSkKLQotICAgICAgICBudW1fcGFzc2VzID0g
MAotICAgICAgICBudW1fZmxha3kgPSAwCi0gICAgICAgIG51bV9yZWdyZXNzaW9ucyA9IDAKLSAg
ICAgICAga2V5d29yZHMgPSB7fQotICAgICAgICBmb3IgaywgdiBpbiBUZXN0RXhwZWN0YXRpb25z
RmlsZS5FWFBFQ1RBVElPTlMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBrZXl3b3Jkc1t2XSA9
IGsudXBwZXIoKQotCi0gICAgICAgIHRlc3RzID0ge30KLSAgICAgICAgZm9yIGZpbGVuYW1lLCBy
ZXN1bHQgaW4gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzLml0ZXJpdGVtcygpOgot
ICAgICAgICAgICAgIyBOb3RlIHRoYXQgaWYgYSB0ZXN0IGNyYXNoZWQgaW4gdGhlIG9yaWdpbmFs
IHJ1biwgd2UgaWdub3JlCi0gICAgICAgICAgICAjIHdoZXRoZXIgb3Igbm90IGl0IGNyYXNoZWQg
d2hlbiB3ZSByZXRyaWVkIGl0IChpZiB3ZSByZXRyaWVkIGl0KSwKLSAgICAgICAgICAgICMgYW5k
IGFsd2F5cyBjb25zaWRlciB0aGUgcmVzdWx0IG5vdCBmbGFreS4KLSAgICAgICAgICAgIHRlc3Qg
PSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgICAgICAg
ICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhm
aWxlbmFtZSkKLSAgICAgICAgICAgIGFjdHVhbCA9IFtrZXl3b3Jkc1tyZXN1bHRdXQotCi0gICAg
ICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKLSAgICAgICAgICAg
ICAgICBudW1fcGFzc2VzICs9IDEKLSAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09IHRlc3RfZXhw
ZWN0YXRpb25zLkNSQVNIOgotICAgICAgICAgICAgICAgIG51bV9yZWdyZXNzaW9ucyArPSAxCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiByZXRy
eV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0czoKLSAgICAgICAgICAgICAgICAgICAgYWN0dWFs
LmV4dGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRf
ZXhwZWN0YXRpb25zX3N0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKS5z
cGxpdCgiICIpKQotICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQotICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHJ5X3Jlc3VsdCA9IHJldHJ5X3N1
bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW2ZpbGVuYW1lXQotICAgICAgICAgICAgICAgICAgICBp
ZiByZXN1bHQgIT0gcmV0cnlfcmVzdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFs
LmFwcGVuZChrZXl3b3Jkc1tyZXRyeV9yZXN1bHRdKQotICAgICAgICAgICAgICAgICAgICAgICAg
bnVtX2ZsYWt5ICs9IDEKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG51bV9yZWdyZXNzaW9ucyArPSAxCi0KLSAgICAgICAgICAgIHRlc3RzW3Rlc3Rd
ID0ge30KLSAgICAgICAgICAgIHRlc3RzW3Rlc3RdWydleHBlY3RlZCddID0gZXhwZWN0ZWQKLSAg
ICAgICAgICAgIHRlc3RzW3Rlc3RdWydhY3R1YWwnXSA9ICIgIi5qb2luKGFjdHVhbCkKLQotICAg
ICAgICByZXN1bHRzWyd0ZXN0cyddID0gdGVzdHMKLSAgICAgICAgcmVzdWx0c1snbnVtX3Bhc3Nl
cyddID0gbnVtX3Bhc3NlcwotICAgICAgICByZXN1bHRzWydudW1fZmxha3knXSA9IG51bV9mbGFr
eQotICAgICAgICByZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXSA9IG51bV9yZWdyZXNzaW9ucwot
Ci0gICAgICAgIHJldHVybiByZXN1bHRzCi0KICAgICBkZWYgX3dyaXRlX2pzb25fZmlsZXMoc2Vs
ZiwgdW5leHBlY3RlZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgIiIiV3JpdGVzIHRoZSBy
ZXN1bHRzIG9mIHRoZSB0ZXN0IHJ1biBhcyBKU09OIGZpbGVzIGludG8gdGhlIHJlc3VsdHMKQEAg
LTEwMjUsMTMgKzg3OCwxMSBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIF9sb2cuZGVi
dWcoIkZpbmlzaGVkIHdyaXRpbmcgSlNPTiBmaWxlcy4iKQogCi0gICAgZGVmIF9wcmludF9leHBl
Y3RlZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgIGRl
ZiBfcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlLCByZXN1
bHRfdHlwZV9zdHIpOgogICAgICAgICAiIiJQcmludCB0aGUgbnVtYmVyIG9mIHRoZSB0ZXN0cyBp
biBhIGdpdmVuIHJlc3VsdCBjbGFzcy4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRl
OiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IK
LSAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5
IC0gdGhlIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgcmVzdWx0cyB0byByZXBvcnQgb24KICAg
ICAgICAgICByZXN1bHRfdHlwZSAtIHRoZSBwYXJ0aWN1bGFyIHJlc3VsdCB0eXBlIHRvIHJlcG9y
dCBpbiB0aGUgc3VtbWFyeS4KICAgICAgICAgICByZXN1bHRfdHlwZV9zdHIgLSBhIHN0cmluZyBk
ZXNjcmlwdGlvbiBvZiB0aGUgcmVzdWx0X3R5cGUuCkBAIC0xMDQ2LDggKzg5Nyw5IEBAIGNsYXNz
IFRlc3RSdW5uZXI6CiAgICAgICAgIGZtdHN0ciA9ICgiRXhwZWN0OiAlJTVkICUlLThzICglJSVk
ZCBub3csICUlJWRkIGRlZmVyLCAlJSVkZCB3b250Zml4KSIKICAgICAgICAgICAgICAgICAgICUg
KHNlbGYuX251bV9kaWdpdHMobm93KSwgc2VsZi5fbnVtX2RpZ2l0cyhkZWZlciksCiAgICAgICAg
ICAgICAgICAgICBzZWxmLl9udW1fZGlnaXRzKHdvbnRmaXgpKSkKLSAgICAgICAgd3JpdGUoZm10
c3RyICUgKGxlbih0ZXN0cyksIHJlc3VsdF90eXBlX3N0ciwgbGVuKHRlc3RzICYgbm93KSwKLSAg
ICAgICAgICAgICAgbGVuKHRlc3RzICYgZGVmZXIpLCBsZW4odGVzdHMgJiB3b250Zml4KSkpCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoZm10c3RyICUKKyAgICAgICAgICAg
IChsZW4odGVzdHMpLCByZXN1bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksCisgICAgICAg
ICAgICAgbGVuKHRlc3RzICYgZGVmZXIpLCBsZW4odGVzdHMgJiB3b250Zml4KSkpCiAKICAgICBk
ZWYgX251bV9kaWdpdHMoc2VsZiwgbnVtKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVy
IG9mIGRpZ2l0cyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBsZW5ndGggb2YgYQpAQCAtMTA1Nyw0
MyArOTA5LDM5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBuZGlnaXRzID0gaW50
KG1hdGgubG9nMTAobGVuKG51bSkpKSArIDEKICAgICAgICAgcmV0dXJuIG5kaWdpdHMKIAotICAg
IGRlZiBfcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Moc2VsZiwgd3JpdGUsIHRvdGFsX3RpbWUsIHRo
cmVhZF90aW1pbmdzLAorICAgIGRlZiBfcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Moc2VsZiwgdG90
YWxfdGltZSwgdGhyZWFkX3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0b3J5X3Rlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJSZWNv
cmQgdGltaW5nLXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciB0aGUgdGVzdCBydW4uCiAKICAgICAg
ICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChl
LmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUu
CiAgICAgICAgICAgdG90YWxfdGltZTogdG90YWwgZWxhcHNlZCB0aW1lIChpbiBzZWNvbmRzKSBm
b3IgdGhlIHRlc3QgcnVuCiAgICAgICAgICAgdGhyZWFkX3RpbWluZ3M6IHdhbGwgY2xvY2sgdGlt
ZSBlYWNoIHRocmVhZCByYW4gZm9yCiAgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5nczog
dGltaW5nIGJ5IGRpcmVjdG9yeQogICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiB0
aW1pbmcgYnkgZmlsZQogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBm
b3IgdGhlIHRlc3QgcnVuCiAgICAgICAgICIiIgotICAgICAgICB3cml0ZSgiVGVzdCB0aW1pbmc6
IikKLSAgICAgICAgd3JpdGUoIiAgJTYuMmYgdG90YWwgdGVzdGluZyB0aW1lIiAlIHRvdGFsX3Rp
bWUpCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICB3cml0ZSgiVGhyZWFkIHRpbWluZzoiKQor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiVGVzdCB0aW1pbmc6IikKKyAgICAg
ICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgJTYuMmYgdG90YWwgdGVzdGluZyB0aW1l
IiAlIHRvdGFsX3RpbWUpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiVGhyZWFkIHRpbWluZzoiKQogICAg
ICAgICBjdW1sX3RpbWUgPSAwCiAgICAgICAgIGZvciB0IGluIHRocmVhZF90aW1pbmdzOgotICAg
ICAgICAgICAgd3JpdGUoIiAgICAlMTBzOiAlNWQgdGVzdHMsICU2LjJmIHNlY3MiICUKKyAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICAgJTEwczogJTVkIHRlc3RzLCAl
Ni4yZiBzZWNzIiAlCiAgICAgICAgICAgICAgICAgICAodFsnbmFtZSddLCB0WydudW1fdGVzdHMn
XSwgdFsndG90YWxfdGltZSddKSkKICAgICAgICAgICAgIGN1bWxfdGltZSArPSB0Wyd0b3RhbF90
aW1lJ10KLSAgICAgICAgd3JpdGUoIiAgICU2LjJmIGN1bXVsYXRpdmUsICU2LjJmIG9wdGltYWwi
ICUKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgICU2LjJmIGN1bXVsYXRp
dmUsICU2LjJmIG9wdGltYWwiICUKICAgICAgICAgICAgICAgKGN1bWxfdGltZSwgY3VtbF90aW1l
IC8gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSkpCi0gICAgICAgIHdyaXRlKCIi
KQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKIAotICAgICAgICBzZWxm
Ll9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNzKHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncykKLSAgICAgICAgc2VsZi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHdyaXRl
LCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRl
X3Rlc3Rfc3RhdGlzdGljcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2VsZi5f
cHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0g
ICAgICAgIHNlbGYuX3ByaW50X2RpcmVjdG9yeV90aW1pbmdzKHdyaXRlLCBkaXJlY3RvcnlfdGVz
dF90aW1pbmdzKQorICAgICAgICBzZWxmLl9wcmludF9kaXJlY3RvcnlfdGltaW5ncyhkaXJlY3Rv
cnlfdGVzdF90aW1pbmdzKQogCi0gICAgZGVmIF9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0
aWNzKHNlbGYsIHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6CisgICAgZGVmIF9wcmlu
dF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNzKHNlbGYsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
KToKICAgICAgICAgIiIiUHJpbnRzIGFnZ3JlZ2F0ZSBzdGF0aXN0aWNzIChlLmcuIG1lZGlhbiwg
bWVhbiwgZXRjLikgZm9yIGFsbCB0ZXN0cy4KICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0
ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9y
Ci0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3M6IExpc3Qgb2YgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFN0YXRzCiAg
ICAgICAgICAgICAgIGZvciBhbGwgdGVzdHMuCiAgICAgICAgICIiIgpAQCAtMTExNSwyMyArOTYz
LDIxIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3Rf
dHlwZVt0ZXN0X3R5cGVdLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlm
ZnNbdGVzdF90eXBlXSkKIAotICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0
X3RpbWluZ3Mod3JpdGUsCisgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3Rf
dGltaW5ncygKICAgICAgICAgICAgICJQRVIgVEVTVCBUSU1FIElOIFRFU1RTSEVMTCAoc2Vjb25k
cyk6IiwKICAgICAgICAgICAgIHRpbWVzX2Zvcl9kdW1wX3JlbmRlcl90cmVlKQotICAgICAgICBz
ZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mod3JpdGUsCisgICAgICAgIHNl
bGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncygKICAgICAgICAgICAgICJQRVIg
VEVTVCBESUZGIFBST0NFU1NJTkcgVElNRVMgKHNlY29uZHMpOiIsCiAgICAgICAgICAgICB0aW1l
c19mb3JfZGlmZl9wcm9jZXNzaW5nKQogICAgICAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlw
ZXM6Ci0gICAgICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mo
d3JpdGUsCisgICAgICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWlu
Z3MoCiAgICAgICAgICAgICAgICAgIlBFUiBURVNUIFRJTUVTIEJZIFRFU1QgVFlQRTogJXMiICUg
dGVzdF90eXBlLAogICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBl
XSkKIAotICAgIGRlZiBfcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHNlbGYsIHdyaXRlLCBp
bmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICBkZWYgX3ByaW50X2luZGl2aWR1YWxfdGVzdF90
aW1lcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlByaW50cyB0aGUgcnVu
IHRpbWVzIGZvciBzbG93LCB0aW1lb3V0IGFuZCBjcmFzaCB0ZXN0cy4KICAgICAgICAgQXJnczoK
LSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExv
Z2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAg
ICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IExpc3Qgb2YgZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQuVGVzdFN0YXRzCiAgICAgICAgICAgICAgIGZvciBhbGwgdGVzdHMuCiAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0ZXN0IHJ1bgpAQCAtMTE1Myw1MyArOTk5
LDUzIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgc2xvd190ZXN0cy5hcHBl
bmQodGVzdF90dXBsZSkKIAogICAgICAgICAgICAgaWYgZmlsZW5hbWUgaW4gcmVzdWx0X3N1bW1h
cnkuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVz
dWx0c1tmaWxlbmFtZV0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRfc3VtbWFyeS5y
ZXN1bHRzW2ZpbGVuYW1lXS50eXBlCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB0ZXN0
X2V4cGVjdGF0aW9ucy5USU1FT1VUIG9yCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PSB0
ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCk6CiAgICAgICAgICAgICAgICAgICAgIGlzX3RpbWVvdXRf
Y3Jhc2hfb3Jfc2xvdyA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9vcl9jcmFz
aF90ZXN0cy5hcHBlbmQodGVzdF90dXBsZSkKIAogICAgICAgICAgICAgaWYgKG5vdCBpc190aW1l
b3V0X2NyYXNoX29yX3Nsb3cgYW5kCi0gICAgICAgICAgICAgICAgbnVtX3ByaW50ZWQgPCBzZWxm
Ll9vcHRpb25zLm51bV9zbG93X3Rlc3RzX3RvX2xvZyk6CisgICAgICAgICAgICAgICAgbnVtX3By
aW50ZWQgPCBwcmludGluZy5OVU1fU0xPV19URVNUU19UT19MT0cpOgogICAgICAgICAgICAgICAg
IG51bV9wcmludGVkID0gbnVtX3ByaW50ZWQgKyAxCiAgICAgICAgICAgICAgICAgdW5leHBlY3Rl
ZF9zbG93X3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQogCi0gICAgICAgIHdyaXRlKCIiKQotICAg
ICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiJXMgc2xvd2VzdCB0ZXN0
cyB0aGF0IGFyZSBub3QgIgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikK
KyAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZygiJXMgc2xvd2VzdCB0ZXN0cyB0
aGF0IGFyZSBub3QgIgogICAgICAgICAgICAgIm1hcmtlZCBhcyBTTE9XIGFuZCBkaWQgbm90IHRp
bWVvdXQvY3Jhc2g6IiAlCi0gICAgICAgICAgICBzZWxmLl9vcHRpb25zLm51bV9zbG93X3Rlc3Rz
X3RvX2xvZywgdW5leHBlY3RlZF9zbG93X3Rlc3RzKQotICAgICAgICB3cml0ZSgiIikKLSAgICAg
ICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0ZSwgIlRlc3RzIG1hcmtlZCBhcyBT
TE9XOiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd190ZXN0cykK
LSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmco
d3JpdGUsICJUZXN0cyB0aGF0IHRpbWVkIG91dCBvciBjcmFzaGVkOiIsCisgICAgICAgICAgICBw
cmludGluZy5OVU1fU0xPV19URVNUU19UT19MT0csIHVuZXhwZWN0ZWRfc2xvd190ZXN0cykKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3ByaW50
X3Rlc3RfbGlzdF90aW1pbmcoIlRlc3RzIG1hcmtlZCBhcyBTTE9XOiIsIHNsb3dfdGVzdHMpCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmlu
dF90ZXN0X2xpc3RfdGltaW5nKCJUZXN0cyB0aGF0IHRpbWVkIG91dCBvciBjcmFzaGVkOiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9vcl9jcmFzaF90ZXN0
cykKLSAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5n
KCIiKQogCi0gICAgZGVmIF9wcmludF90ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHdyaXRlLCB0aXRs
ZSwgdGVzdF9saXN0KToKKyAgICBkZWYgX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoc2VsZiwgdGl0
bGUsIHRlc3RfbGlzdCk6CiAgICAgICAgICIiIlByaW50IHRpbWluZyBpbmZvIGZvciBlYWNoIHRl
c3QuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0
ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5z
dGRvdXQud3JpdGUuCiAgICAgICAgICAgdGl0bGU6IHNlY3Rpb24gaGVhZGluZwogICAgICAgICAg
IHRlc3RfbGlzdDogdGVzdHMgdGhhdCBmYWxsIGluIHRoaXMgc2VjdGlvbgogICAgICAgICAiIiIK
LSAgICAgICAgd3JpdGUodGl0bGUpCisgICAgICAgIGlmIChub3QgJ3Nsb3dlc3QnIGluIHNlbGYu
X29wdGlvbnMubG9nIGFuZCBub3QgJ2V2ZXJ5aW5nJyBpbgorICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy5sb2cpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF90aW1pbmcodGl0bGUpCiAgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfbGlzdDoK
ICAgICAgICAgICAgIGZpbGVuYW1lID0gdGVzdF90dXBsZS5maWxlbmFtZVtsZW4oCiAgICAgICAg
ICAgICAgICAgc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCiAgICAgICAgICAg
ICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKQogICAgICAgICAgICAgdGVz
dF9ydW5fdGltZSA9IHJvdW5kKHRlc3RfdHVwbGUudGVzdF9ydW5fdGltZSwgMSkKLSAgICAgICAg
ICAgIHdyaXRlKCIgICVzIHRvb2sgJXMgc2Vjb25kcyIgJSAoZmlsZW5hbWUsIHRlc3RfcnVuX3Rp
bWUpKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgJXMgdG9vayAl
cyBzZWNvbmRzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmls
ZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQogCi0gICAgZGVmIF9wcmludF9kaXJlY3RvcnlfdGltaW5n
cyhzZWxmLCB3cml0ZSwgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncyk6CisgICAgZGVmIF9wcmludF9k
aXJlY3RvcnlfdGltaW5ncyhzZWxmLCBkaXJlY3RvcnlfdGVzdF90aW1pbmdzKToKICAgICAgICAg
IiIiUHJpbnQgdGltaW5nIGluZm8gYnkgZGlyZWN0b3J5IGZvciBhbnkgZGlyZWN0b3JpZXMgdGhh
dAogICAgICAgICB0YWtlID4gMTAgc2Vjb25kcyB0byBydW4uCiAKICAgICAgICAgQXJnczoKLSAg
ICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dp
bmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAg
ZGlyZWN0b3J5X3Rlc3RfdGltaW5nOiB0aW1lIGluZm8gZm9yIGVhY2ggZGlyZWN0b3J5CiAgICAg
ICAgICIiIgogICAgICAgICB0aW1pbmdzID0gW10KQEAgLTEyMDksMjUgKzEwNTUsMjQgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fdGVzdHMpKQog
ICAgICAgICB0aW1pbmdzLnNvcnQoKQogCi0gICAgICAgIHdyaXRlKCJUaW1lIHRvIHByb2Nlc3Mg
c2xvd2VzdCBzdWJkaXJlY3RvcmllczoiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rp
bWluZygiVGltZSB0byBwcm9jZXNzIHNsb3dlc3Qgc3ViZGlyZWN0b3JpZXM6IikKICAgICAgICAg
bWluX3NlY29uZHNfdG9fcHJpbnQgPSAxMAogICAgICAgICBmb3IgdGltaW5nIGluIHRpbWluZ3M6
CiAgICAgICAgICAgICBpZiB0aW1pbmdbMF0gPiBtaW5fc2Vjb25kc190b19wcmludDoKLSAgICAg
ICAgICAgICAgICB3cml0ZSgiICAlcyB0b29rICVzIHNlY29uZHMgdG8gcnVuICVzIHRlc3RzLiIg
JSAodGltaW5nWzFdLAotICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ1swXSwgdGltaW5nWzJd
KSkKLSAgICAgICAgd3JpdGUoIiIpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF90aW1pbmcoCisgICAgICAgICAgICAgICAgICAgICIgICVzIHRvb2sgJXMgc2Vjb25kcyB0byBy
dW4gJXMgdGVzdHMuIiAlICh0aW1pbmdbMV0sCisgICAgICAgICAgICAgICAgICAgIHRpbWluZ1sw
XSwgdGltaW5nWzJdKSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCiAK
LSAgICBkZWYgX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyhzZWxmLCB3cml0ZSwg
dGl0bGUsIHRpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1p
bmdzKHNlbGYsIHRpdGxlLCB0aW1pbmdzKToKICAgICAgICAgIiIiUHJpbnRzIHRoZSBtZWRpYW4s
IG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgdmFsdWVzIGluCiAgICAgICAgIHRp
bWluZ3MuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3
cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5
cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgdGl0bGU6IFRpdGxlIGZvciB0aGVzZSB0aW1pbmdz
LgogICAgICAgICAgIHRpbWluZ3M6IEEgbGlzdCBvZiBmbG9hdHMgcmVwcmVzZW50aW5nIHRpbWVz
LgogICAgICAgICAiIiIKLSAgICAgICAgd3JpdGUodGl0bGUpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGltaW5nKHRpdGxlKQogICAgICAgICB0aW1pbmdzLnNvcnQoKQogCiAgICAgICAg
IG51bV90ZXN0cyA9IGxlbih0aW1pbmdzKQpAQCAtMTI0OSwxOSArMTA5NCwxNyBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICAgICAgc3VtX29mX2RldmlhdGlvbnMgPSBtYXRoLnBvdyh0aW1l
IC0gbWVhbiwgMikKIAogICAgICAgICBzdGRfZGV2aWF0aW9uID0gbWF0aC5zcXJ0KHN1bV9vZl9k
ZXZpYXRpb25zIC8gbnVtX3Rlc3RzKQotICAgICAgICB3cml0ZSgiICBNZWRpYW46ICAgICAgICAg
ICU2LjNmIiAlIG1lZGlhbikKLSAgICAgICAgd3JpdGUoIiAgTWVhbjogICAgICAgICAgICAlNi4z
ZiIgJSBtZWFuKQotICAgICAgICB3cml0ZSgiICA5MHRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBl
cmNlbnRpbGU5MCkKLSAgICAgICAgd3JpdGUoIiAgOTl0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBw
ZXJjZW50aWxlOTkpCi0gICAgICAgIHdyaXRlKCIgIFN0YW5kYXJkIGRldjogICAgJTYuM2YiICUg
c3RkX2RldmlhdGlvbikKLSAgICAgICAgd3JpdGUoIiIpCi0KLSAgICBkZWYgX3ByaW50X3Jlc3Vs
dF9zdW1tYXJ5KHNlbGYsIHdyaXRlLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCIgIE1lZGlhbjogICAgICAgICAgJTYuM2YiICUgbWVkaWFuKQor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICBNZWFuOiAgICAgICAgICAgICU2
LjNmIiAlIG1lYW4pCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIDkwdGgg
cGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTkwKQorICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3RpbWluZygiICA5OXRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5OSkK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgU3RhbmRhcmQgZGV2OiAgICAl
Ni4zZiIgJSBzdGRfZGV2aWF0aW9uKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWlu
ZygiIikKKworICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1h
cnkpOgogICAgICAgICAiIiJQcmludCBhIHNob3J0IHN1bW1hcnkgYWJvdXQgaG93IG1hbnkgdGVz
dHMgcGFzc2VkLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sg
dG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAg
ICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBpbmZvcm1hdGlv
biB0byBsb2cKICAgICAgICAgIiIiCiAgICAgICAgIGZhaWxlZCA9IGxlbihyZXN1bHRfc3VtbWFy
eS5mYWlsdXJlcykKQEAgLTEyNzMsMzAgKzExMTYsMjggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAg
ICAgICAgaWYgdG90YWwgPiAwOgogICAgICAgICAgICAgcGN0X3Bhc3NlZCA9IGZsb2F0KHBhc3Nl
ZCkgKiAxMDAgLyB0b3RhbAogCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICB3cml0ZSgiPT4g
UmVzdWx0czogJWQvJWQgdGVzdHMgcGFzc2VkICglLjFmJSUpIiAlCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVh
bCgiPT4gUmVzdWx0czogJWQvJWQgdGVzdHMgcGFzc2VkICglLjFmJSUpIiAlCiAgICAgICAgICAg
ICAgICAgICAgICAocGFzc2VkLCB0b3RhbCwgcGN0X3Bhc3NlZCkpCi0gICAgICAgIHdyaXRlKCIi
KQotICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0
X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIiKQorICAgICAg
ICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShyZXN1bHRfc3VtbWFyeSwKICAgICAg
ICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLk5PVywgIlRlc3RzIHRvIGJlIGZpeGVkIGZvciB0aGUg
Y3VycmVudCByZWxlYXNlIikKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJp
bnRfcmVzdWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0
X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0
aW9ucy5ERUZFUiwKICAgICAgICAgICAgICJUZXN0cyB3ZSdsbCBmaXggaW4gdGhlIGZ1dHVyZSBp
ZiB0aGV5IGZhaWwgKERFRkVSKSIpCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYu
X3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAg
ICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Jl
c3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBl
Y3RhdGlvbnMuV09OVEZJWCwKICAgICAgICAgICAgICJUZXN0cyB0aGF0IHdpbGwgb25seSBiZSBm
aXhlZCBpZiB0aGV5IGNyYXNoIChXT05URklYKSIpCiAKLSAgICBkZWYgX3ByaW50X3Jlc3VsdF9z
dW1tYXJ5X2VudHJ5KHNlbGYsIHdyaXRlLCByZXN1bHRfc3VtbWFyeSwgdGltZWxpbmUsCisgICAg
ZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShzZWxmLCByZXN1bHRfc3VtbWFyeSwgdGlt
ZWxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkaW5nKToKICAg
ICAgICAgIiIiUHJpbnQgYSBzdW1tYXJ5IGJsb2NrIG9mIHJlc3VsdHMgZm9yIGEgcGFydGljdWxh
ciB0aW1lbGluZSBvZiB0ZXN0LgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEg
Y2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAg
ICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBz
dW1tYXJ5IHRvIHByaW50IHJlc3VsdHMgZm9yCiAgICAgICAgICAgdGltZWxpbmU6IHRoZSB0aW1l
bGluZSB0byBwcmludCByZXN1bHRzIGZvciAoTk9ULCBXT05URklYLCBldGMuKQogICAgICAgICAg
IGhlYWRpbmc6IGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdGltZWxpbmUKQEAgLTEzMDUs
NyArMTE0Niw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIG5vdF9wYXNzaW5nID0gKHRv
dGFsIC0KICAgICAgICAgICAgbGVuKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9u
W3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdICYKICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5
LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXSkpCi0gICAgICAgIHdyaXRlKCI9PiAlcyAoJWQp
OiIgJSAoaGVhZGluZywgbm90X3Bhc3NpbmcpKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X2FjdHVhbCgiPT4gJXMgKCVkKToiICUgKGhlYWRpbmcsIG5vdF9wYXNzaW5nKSkKIAogICAgICAg
ICBmb3IgcmVzdWx0IGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX09SREVSOgog
ICAgICAgICAgICAgaWYgcmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlBBU1M6CkBAIC0xMzE1
LDk0ICsxMTU2LDggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIGRlc2MgPSBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlNbcmVzdWx0XQogICAgICAg
ICAgICAgaWYgbm90X3Bhc3NpbmcgYW5kIGxlbihyZXN1bHRzKToKICAgICAgICAgICAgICAgICBw
Y3QgPSBsZW4ocmVzdWx0cykgKiAxMDAuMCAvIG5vdF9wYXNzaW5nCi0gICAgICAgICAgICAgICAg
d3JpdGUoIiAgJTVkICUtMjRzICglNC4xZiUlKSIgJSAobGVuKHJlc3VsdHMpLAotICAgICAgICAg
ICAgICAgICAgICAgIGRlc2NbbGVuKHJlc3VsdHMpICE9IDFdLCBwY3QpKQotCi0gICAgZGVmIF9w
cmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYsIHRvdGFsLCBleHBlY3RlZCk6Ci0gICAgICAgICIi
IlByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgotCi0g
ICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdG90YWw6IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4K
LSAgICAgICAgICBleHBlY3RlZDogbnVtYmVyIG9mIGV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAg
IiIiCi0gICAgICAgIHVuZXhwZWN0ZWQgPSB0b3RhbCAtIGV4cGVjdGVkCi0gICAgICAgIGlmIHVu
ZXhwZWN0ZWQgPT0gMDoKLSAgICAgICAgICAgIHByaW50ICJBbGwgJWQgdGVzdHMgcmFuIGFzIGV4
cGVjdGVkLiIgJSBleHBlY3RlZAotICAgICAgICBlbGlmIGV4cGVjdGVkID09IDE6Ci0gICAgICAg
ICAgICBwcmludCAiMSB0ZXN0IHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OiIgJSB1bmV4cGVj
dGVkCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAiJWQgdGVzdHMgcmFuIGFzIGV4
cGVjdGVkLCAlZCBkaWRuJ3Q6IiAlIChleHBlY3RlZCwKLSAgICAgICAgICAgICAgICB1bmV4cGVj
dGVkKQotCi0gICAgZGVmIF9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3Rl
ZF9yZXN1bHRzKToKLSAgICAgICAgIiIiUHJpbnRzIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgaW4g
YSBodW1hbi1yZWFkYWJsZSBmb3JtIHRvIHN0ZG91dC4iIiIKLSAgICAgICAgcGFzc2VzID0ge30K
LSAgICAgICAgZmxha3kgPSB7fQotICAgICAgICByZWdyZXNzaW9ucyA9IHt9Ci0KLSAgICAgICAg
aWYgbGVuKHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSk6Ci0gICAgICAgICAgICBwcmludCAi
IgotCi0gICAgICAgIGZvciB0ZXN0LCByZXN1bHRzIGluIHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVz
dHMnXS5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdHNbJ2FjdHVhbCdd
LnNwbGl0KCIgIikKLSAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0c1snZXhwZWN0ZWQnXS5z
cGxpdCgiICIpCi0gICAgICAgICAgICBpZiBhY3R1YWwgPT0gWydQQVNTJ106Ci0gICAgICAgICAg
ICAgICAgaWYgJ0NSQVNIJyBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAgX2FkZF90
b19kaWN0X29mX2xpc3RzKHBhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdFeHBlY3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQotICAgICAgICAgICAgICAgIGVsaWYg
J1RJTUVPVVQnIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rf
b2ZfbGlzdHMocGFzc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ0V4cGVjdGVkIHRvIHRpbWVvdXQsIGJ1dCBwYXNzZWQnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byBmYWlsLCBidXQg
cGFzc2VkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qp
Ci0gICAgICAgICAgICBlbGlmIGxlbihhY3R1YWwpID4gMToKLSAgICAgICAgICAgICAgICAjIFdl
IGdyb3VwIGZsYWt5IHRlc3RzIGJ5IHRoZSBmaXJzdCBhY3R1YWwgcmVzdWx0IHdlIGdvdC4KLSAg
ICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZmxha3ksIGFjdHVhbFswXSwgdGVz
dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xp
c3RzKHJlZ3Jlc3Npb25zLCByZXN1bHRzWydhY3R1YWwnXSwgdGVzdCkKLQotICAgICAgICBpZiBs
ZW4ocGFzc2VzKToKLSAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHBhc3Nlcy5pdGVyaXRl
bXMoKToKLSAgICAgICAgICAgICAgICBwcmludCAiJXM6ICglZCkiICUgKGtleSwgbGVuKHRlc3Rz
KSkKLSAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKLSAgICAgICAgICAgICAgICBmb3IgdGVz
dCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMiICUgdGVzdAotICAg
ICAgICAgICAgICAgIHByaW50Ci0KLSAgICAgICAgaWYgbGVuKGZsYWt5KToKLSAgICAgICAgICAg
IGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBU
SU9OUwotICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gZmxha3kuaXRlcml0ZW1zKCk6Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05T
W2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgIHByaW50ICJVbmV4cGVjdGVkIGZsYWtpbmVz
czogJXMgKCVkKSIgJSAoCi0gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsx
XSwgbGVuKHRlc3RzKSkKLSAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKLQotICAgICAgICAg
ICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB1
bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ11bdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgYWN0
dWFsID0gcmVzdWx0WydhY3R1YWwnXS5zcGxpdCgiICIpCi0gICAgICAgICAgICAgICAgICAgIGV4
cGVjdGVkID0gcmVzdWx0WydleHBlY3RlZCddLnNwbGl0KCIgIikKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigp
XQotICAgICAgICAgICAgICAgICAgICBuZXdfZXhwZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNldChh
Y3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMg
PSAlcyIgJSAodGVzdCwgIiAiLmpvaW4obmV3X2V4cGVjdGF0aW9uc19saXN0KSkKLSAgICAgICAg
ICAgICAgICBwcmludAotCi0gICAgICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6Ci0gICAgICAgICAg
ICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQ
VElPTlMKLSAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVt
cygpOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVD
VEFUSU9OU1trZXkubG93ZXIoKV0KLSAgICAgICAgICAgICAgICBwcmludCAiUmVncmVzc2lvbnM6
IFVuZXhwZWN0ZWQgJXMgOiAoJWQpIiAlICgKLSAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
c1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKQotICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQot
ICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICBw
cmludCAiICAlcyA9ICVzIiAlICh0ZXN0LCBrZXkpCi0gICAgICAgICAgICAgICAgcHJpbnQKLQot
ICAgICAgICBpZiBsZW4odW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKSBhbmQgc2VsZi5fb3B0
aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQgIi0iICogNzgKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiICAlNWQgJS0yNHMgKCU0LjFmJSUpIiAlCisg
ICAgICAgICAgICAgICAgICAgIChsZW4ocmVzdWx0cyksIGRlc2NbbGVuKHJlc3VsdHMpICE9IDFd
LCBwY3QpKQogCiAgICAgZGVmIF93cml0ZV9yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRf
c3VtbWFyeSk6CiAgICAgICAgICIiIldyaXRlIHJlc3VsdHMuaHRtbCB3aGljaCBpcyBhIHN1bW1h
cnkgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCkBAIC0xNDYyLDEwICsxMjE3LDYgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgc2VsZi5fcG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3Vs
dHNfZmlsZW5hbWUpCiAKIAotZGVmIF9hZGRfdG9fZGljdF9vZl9saXN0cyhkaWN0LCBrZXksIHZh
bHVlKToKLSAgICBkaWN0LnNldGRlZmF1bHQoa2V5LCBbXSkuYXBwZW5kKHZhbHVlKQotCi0KIGRl
ZiByZWFkX3Rlc3RfZmlsZXMoZmlsZXMpOgogICAgIHRlc3RzID0gW10KICAgICBmb3IgZmlsZSBp
biBmaWxlczoKQEAgLTE0NzcsMjUgKzEyMjgsMTEgQEAgZGVmIHJlYWRfdGVzdF9maWxlcyhmaWxl
cyk6CiAgICAgcmV0dXJuIHRlc3RzCiAKIAotZGVmIGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRp
b25zLCBsb2dfb3B0aW9uKToKLSAgICAiIiJSZXR1cm5zIGEgd3JpdGUoKSBmdW5jdGlvbiB0aGF0
IHdpbGwgd3JpdGUgdGhlIHN0cmluZyB0byBfbG9nLmluZm8oKQotICAgIGlmIGNvbXAgd2FzIHNw
ZWNpZmllZCBpbiAtLWxvZyBvciBpZiAtLXZlcmJvc2UgaXMgdHJ1ZS4gT3RoZXJ3aXNlIHRoZQot
ICAgIG1lc3NhZ2UgaXMgZHJvcHBlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBvcHRpb25zOiBsaXN0
IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGZyb20gb3B0cGFyc2UKLSAgICAgIGxvZ19vcHRpb246
IG9wdGlvbiB0byBtYXRjaCBpbiBvcHRpb25zLmxvZyBpbiBvcmRlciBmb3IgdGhlIG1lc3NhZ2Vz
Ci0gICAgICAgICAgdG8gYmUgbG9nZ2VkIChlLmcuLCAnYWN0dWFsJyBvciAnZXhwZWN0ZWQnKQot
ICAgICIiIgotICAgIGlmIG9wdGlvbnMudmVyYm9zZSBvciBsb2dfb3B0aW9uIGluIG9wdGlvbnMu
bG9nLnNwbGl0KCIsIik6Ci0gICAgICAgIHJldHVybiBfbG9nLmluZm8KLSAgICByZXR1cm4gbGFt
YmRhIHN0cjogMQotCi0KLWRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1
ZSk6CitkZWYgcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKToKICAgICAiIiJSdW4gdGhlIHRl
c3RzLgogCiAgICAgQXJnczoKKyAgICAgIHBvcnRfb2JqOiBQb3J0IG9iamVjdCBmb3IgcG9ydC1z
cGVjaWZpYyBiZWhhdmlvcgogICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQg
bGluZSBvcHRpb25zCiAgICAgICBhcmdzOiBhIGxpc3Qgb2Ygc3ViIGRpcmVjdG9yaWVzIG9yIGZp
bGVzIHRvIHRlc3QKICAgICAgIHByaW50X3Jlc3VsdHM6IHdoZXRoZXIgb3Igbm90IHRvIGxvZyBh
bnl0aGluZyB0byBzdGRvdXQuCkBAIC0xNTA1LDIyICsxMjQyLDIxIEBAIGRlZiBtYWluKG9wdGlv
bnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgICAgZXJyb3IuCiAgICAgIiIi
CiAKLSAgICBpZiBvcHRpb25zLnNvdXJjZXM6Ci0gICAgICAgIG9wdGlvbnMudmVyYm9zZSA9IFRy
dWUKKyAgICAjIENvbmZpZ3VyZSB0aGUgcHJpbnRpbmcgc3Vic3lzdGVtIGZvciBwcmludGluZyBv
dXRwdXQsIGxvZ2dpbmcgZGVidWcKKyAgICAjIGluZm8sIGFuZCB0cmFjaW5nIHRlc3RzLgorCisg
ICAgaWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgorICAgICAgICAjIEZJWE1FOiBJbnZl
c3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50ICsgMS4KKyAg
ICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBwb3J0X29iai5kZWZhdWx0X2NoaWxkX3By
b2Nlc3NlcygpCiAKLSAgICAjIFNldCB1cCBvdXIgbG9nZ2luZyBmb3JtYXQuCi0gICAgbWV0ZXIg
PSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3RyZWFtKG9wdGlvbnMudmVyYm9zZSwgc3lzLnN0ZGVy
cikKLSAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJwotICAgIGxvZ19kYXRlZm10ID0gJyV5JW0l
ZCAlSDolTTolUycKLSAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KLSAgICBpZiBvcHRpb25z
LnZlcmJvc2U6Ci0gICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczol
KGxpbmVubyktNGQgJShsZXZlbG5hbWUpcyAnCi0gICAgICAgICAgICAgICAgICAnJShtZXNzYWdl
KXMnKQotICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCi0gICAgbG9nZ2luZy5iYXNp
Y0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm10LCBkYXRlZm10PWxvZ19kYXRl
Zm10LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPW1ldGVyKQorICAgIHByaW50ZXIg
PSBwcmludGluZy5QcmludGVyKHBvcnRfb2JqLCBvcHRpb25zLCByZWd1bGFyX291dHB1dD1zeXMu
c3RkZXJyLAorICAgICAgICBidWlsZGJvdF9vdXRwdXQ9c3lzLnN0ZG91dCwKKyAgICAgICAgY2hp
bGRfcHJvY2Vzc2VzPWludChvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksCisgICAgICAgIGlzX2Z1
bGx5X3BhcmFsbGVsPW9wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgIGlm
IG9wdGlvbnMuaGVscF9wcmludGluZzoKKyAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50aW5nKCkK
KyAgICAgICAgcmV0dXJuIDAKIAotICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0
Zm9ybSwgb3B0aW9ucykKICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQogCiAgICAgaWYgbm90
IG9wdGlvbnMuY29uZmlndXJhdGlvbjoKQEAgLTE1NTYsOCArMTI5Miw4IEBAIGRlZiBtYWluKG9w
dGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgICMgSnVzdCBjbG9iYmVy
IHRoZSBhY3R1YWwgdGVzdCByZXN1bHRzIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBvdGhlcgogICAg
ICAgICAjIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBhcmUgZXhwbGljaXRseSB1c2Vk
IGZvciBjcm9zcy1ydW4KICAgICAgICAgIyB0cmFja2luZy4KLSAgICAgICAgbWV0ZXIudXBkYXRl
KCJDbG9iYmVyaW5nIG9sZCByZXN1bHRzIGluICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICBv
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgi
Q2xvYmJlcmluZyBvbGQgcmVzdWx0cyBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgICAgICBsYXlvdXRfdGVzdHNfZGly
ID0gcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCiAgICAgICAgIHBvc3NpYmxlX2RpcnMgPSBv
cy5saXN0ZGlyKGxheW91dF90ZXN0c19kaXIpCiAgICAgICAgIGZvciBkaXJuYW1lIGluIHBvc3Np
YmxlX2RpcnM6CkBAIC0xNTY1LDE3ICsxMzAxLDYgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywg
cHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBh
dGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCBkaXJuYW1lKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKIAotICAgIGlmIG5vdCBvcHRp
b25zLmNoaWxkX3Byb2Nlc3NlczoKLSAgICAgICAgIyBGSVhNRTogSW52ZXN0aWdhdGUgcGVyZi9m
bGFraW5lc3MgaW1wYWN0IG9mIHVzaW5nIGNwdV9jb3VudCArIDEuCi0gICAgICAgIG9wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzID0gcG9ydF9vYmouZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKQotCi0g
ICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgJ2NvbmZpZycpCi0gICAg
aWYgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPT0gMToKLSAgICAgICAgd3JpdGUoIlJ1bm5pbmcg
b25lICVzIiAlIHBvcnRfb2JqLmRyaXZlcl9uYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHdyaXRl
KCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJSAoCi0gICAgICAgICAgICAgIG9wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzLCBwb3J0X29iai5kcml2ZXJfbmFtZSgpKSkKLQogICAgIGlmIG5vdCBv
cHRpb25zLnRpbWVfb3V0X21zOgogICAgICAgICBpZiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0g
IkRlYnVnIjoKICAgICAgICAgICAgIG9wdGlvbnMudGltZV9vdXRfbXMgPSBzdHIoMiAqIFRlc3RS
dW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCkBAIC0xNTgzLDggKzEzMDgsMTQgQEAgZGVm
IG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgICAgIG9w
dGlvbnMudGltZV9vdXRfbXMgPSBzdHIoVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9N
UykKIAogICAgIG9wdGlvbnMuc2xvd190aW1lX291dF9tcyA9IHN0cig1ICogaW50KG9wdGlvbnMu
dGltZV9vdXRfbXMpKQotICAgIHdyaXRlKCJSZWd1bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3Qg
dGltZW91dDogJXMiICUKLSAgICAgICAgICAob3B0aW9ucy50aW1lX291dF9tcywgb3B0aW9ucy5z
bG93X3RpbWVfb3V0X21zKSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiUmVndWxhciB0aW1l
b3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKG9w
dGlvbnMudGltZV9vdXRfbXMsIG9wdGlvbnMuc2xvd190aW1lX291dF9tcykpCisKKyAgICBpZiBp
bnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDE6CisgICAgICAgIHByaW50ZXIucHJpbnRf
Y29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29iai5kcml2ZXJfbmFtZSkKKyAgICBlbHNl
OgorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUnVubmluZyAlcyAlc3MgaW4gcGFyYWxs
ZWwiICUgKAorICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcywg
cG9ydF9vYmouZHJpdmVyX25hbWUoKSkpCiAKICAgICAjIEluY2x1ZGUgYWxsIHRlc3RzIGlmIG5v
bmUgYXJlIHNwZWNpZmllZC4KICAgICBuZXdfYXJncyA9IFtdCkBAIC0xNjAxLDkgKzEzMzIsOSBA
QCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogCiAgICAgIyBD
cmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0Lgog
ICAgIHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KG9wdGlvbnMucmVzdWx0c19kaXJlY3Rv
cnkpCi0gICAgbWV0ZXIudXBkYXRlKCJDb2xsZWN0aW5nIHRlc3RzIC4uLiIpCisgICAgcHJpbnRl
ci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKIAotICAgIHRlc3RfcnVubmVy
ID0gVGVzdFJ1bm5lcihwb3J0X29iaiwgb3B0aW9ucywgbWV0ZXIpCisgICAgdGVzdF9ydW5uZXIg
PSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25zLCBwcmludGVyKQogICAgIHRlc3RfcnVubmVy
LmdhdGhlcl9maWxlX3BhdGhzKHBhdGhzKQogCiAgICAgaWYgb3B0aW9ucy5saW50X3Rlc3RfZmls
ZXM6CkBAIC0xNjEzLDQzICsxMzQ0LDQzIEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50
X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgIGZvciBwbGF0Zm9ybV9uYW1lIGluIHBvcnRfb2JqLnRl
c3RfcGxhdGZvcm1fbmFtZXMoKToKICAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVj
dGF0aW9ucyhwbGF0Zm9ybV9uYW1lLCBpc19kZWJ1Z19tb2RlPVRydWUpCiAgICAgICAgICAgICB0
ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9k
ZT1GYWxzZSkKLSAgICAgICAgbWV0ZXIudXBkYXRlKCIiKQotICAgICAgICBwcmludCAoIklmIHRo
ZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9ucywgdGhlbiB0aGUg
IgotICAgICAgICAgICAgImxpbnQgc3VjY2VlZGVkLiIpCisgICAgICAgIHByaW50ZXIud3JpdGUo
IiIpCisgICAgICAgIF9sb2cuaW5mbygiSWYgdGhlcmUgYXJlIG5vIGZhaWwgbWVzc2FnZXMsIGVy
cm9ycyBvciBleGNlcHRpb25zLCAiCisgICAgICAgICAgICAgICAgICAidGhlbiB0aGUgbGludCBz
dWNjZWVkZWQuIikKICAgICAgICAgcmV0dXJuIDAKIAotICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dp
bmdfd3JpdGVyKG9wdGlvbnMsICJjb25maWciKQotICAgIHdyaXRlKCJVc2luZyBwb3J0ICclcyci
ICUgcG9ydF9vYmoubmFtZSgpKQotICAgIHdyaXRlKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAl
cyIgJSBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgIHByaW50ZXIucHJpbnRfY29uZmln
KCJVc2luZyBwb3J0ICclcyciICUgcG9ydF9vYmoubmFtZSgpKQorICAgIHByaW50ZXIucHJpbnRf
Y29uZmlnKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAgICAgaWYgb3B0aW9ucy5uZXdfYmFz
ZWxpbmU6Ci0gICAgICAgIHdyaXRlKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUgcG9y
dF9vYmouYmFzZWxpbmVfcGF0aCgpKQotICAgIHdyaXRlKCJVc2luZyAlcyBidWlsZCIgJSBvcHRp
b25zLmNvbmZpZ3VyYXRpb24pCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5n
IG5ldyBiYXNlbGluZXMgaW4gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9y
dF9vYmouYmFzZWxpbmVfcGF0aCgpKQorICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyAl
cyBidWlsZCIgJSBvcHRpb25zLmNvbmZpZ3VyYXRpb24pCiAgICAgaWYgb3B0aW9ucy5waXhlbF90
ZXN0czoKLSAgICAgICAgd3JpdGUoIlBpeGVsIHRlc3RzIGVuYWJsZWQiKQorICAgICAgICBwcmlu
dGVyLnByaW50X2NvbmZpZygiUGl4ZWwgdGVzdHMgZW5hYmxlZCIpCiAgICAgZWxzZToKLSAgICAg
ICAgd3JpdGUoIlBpeGVsIHRlc3RzIGRpc2FibGVkIikKLSAgICB3cml0ZSgiIikKKyAgICAgICAg
cHJpbnRlci5wcmludF9jb25maWcoIlBpeGVsIHRlc3RzIGRpc2FibGVkIikKKyAgICBwcmludGVy
LnByaW50X2NvbmZpZygiIikKIAotICAgIG1ldGVyLnVwZGF0ZSgiUGFyc2luZyBleHBlY3RhdGlv
bnMgLi4uIikKKyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiUGFyc2luZyBleHBlY3RhdGlvbnMg
Li4uIikKICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocG9ydF9vYmoudGVzdF9w
bGF0Zm9ybV9uYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMuY29uZmlndXJhdGlvbiA9PSAnRGVidWcnKQogCi0gICAgbWV0ZXIudXBkYXRlKCJDaGVja2lu
ZyBidWlsZCAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDaGVja2luZyBidWlsZCAu
Li4iKQogICAgIGlmIG5vdCBwb3J0X29iai5jaGVja19idWlsZCh0ZXN0X3J1bm5lci5uZWVkc19o
dHRwKCkpOgogICAgICAgICByZXR1cm4gLTEKIAotICAgIG1ldGVyLnVwZGF0ZSgiU3RhcnRpbmcg
aGVscGVyIC4uLiIpCisgICAgcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAu
Li4iKQogICAgIHBvcnRfb2JqLnN0YXJ0X2hlbHBlcigpCiAKICAgICAjIENoZWNrIHRoYXQgdGhl
IHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCiAg
ICAgaWYgbm90IG9wdGlvbnMubm9jaGVja19zeXNfZGVwczoKLSAgICAgICAgbWV0ZXIudXBkYXRl
KCJDaGVja2luZyBzeXN0ZW0gZGVwZW5kZW5jaWVzIC4uLiIpCisgICAgICAgIHByaW50ZXIucHJp
bnRfdXBkYXRlKCJDaGVja2luZyBzeXN0ZW0gZGVwZW5kZW5jaWVzIC4uLiIpCiAgICAgICAgIGlm
IG5vdCBwb3J0X29iai5jaGVja19zeXNfZGVwcyh0ZXN0X3J1bm5lci5uZWVkc19odHRwKCkpOgog
ICAgICAgICAgICAgcmV0dXJuIC0xCiAKLSAgICBtZXRlci51cGRhdGUoIlByZXBhcmluZyB0ZXN0
cyAuLi4iKQotICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICJleHBl
Y3RlZCIpCi0gICAgcmVzdWx0X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5wcmVwYXJlX2xpc3RzX2Fu
ZF9wcmludF9vdXRwdXQod3JpdGUpCisgICAgcHJpbnRlci5wcmludF91cGRhdGUoIlByZXBhcmlu
ZyB0ZXN0cyAuLi4iKQorICAgIHJlc3VsdF9zdW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFyZV9s
aXN0c19hbmRfcHJpbnRfb3V0cHV0KCkKIAogICAgIHBvcnRfb2JqLnNldHVwX3Rlc3RfcnVuKCkK
IApAQCAtMTY1OSw3ICsxMzkwLDcgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVz
dWx0cz1UcnVlKToKICAgICAgICAgaWYgb3B0aW9ucy5mdXp6eV9waXhlbF90ZXN0czoKICAgICAg
ICAgICAgIHRlc3RfcnVubmVyLmFkZF90ZXN0X3R5cGUoZnV6enlfaW1hZ2VfZGlmZi5GdXp6eUlt
YWdlRGlmZikKIAotICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1bm5lci5ydW4o
cmVzdWx0X3N1bW1hcnksIHByaW50X3Jlc3VsdHMpCisgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0
cyA9IHRlc3RfcnVubmVyLnJ1bihyZXN1bHRfc3VtbWFyeSkKIAogICAgIHBvcnRfb2JqLnN0b3Bf
aGVscGVyKCkKIApAQCAtMTY3Miw3ICsxNDAzLDkgQEAgZGVmIF9jb21wYXRfc2hpbV9jYWxsYmFj
ayhvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgogCiAKIGRlZiBfY29tcGF0X3NoaW1f
b3B0aW9uKG9wdGlvbl9uYW1lLCAqKmt3YXJncyk6Ci0gICAgcmV0dXJuIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKG9wdGlvbl9uYW1lLCBhY3Rpb249ImNhbGxiYWNrIiwgY2FsbGJhY2s9X2NvbXBhdF9z
aGltX2NhbGxiYWNrLCBoZWxwPSJJZ25vcmVkLCBmb3Igb2xkLXJ1bi13ZWJraXQtdGVzdHMgY29t
cGF0IG9ubHkuIiwgKiprd2FyZ3MpCisgICAgcmV0dXJuIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKG9w
dGlvbl9uYW1lLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgY2FsbGJhY2s9X2NvbXBhdF9z
aGltX2NhbGxiYWNrLAorICAgICAgICBoZWxwPSJJZ25vcmVkLCBmb3Igb2xkLXJ1bi13ZWJraXQt
dGVzdHMgY29tcGF0IG9ubHkuIiwgKiprd2FyZ3MpCiAKIAogZGVmIHBhcnNlX2FyZ3MoYXJncz1O
b25lKToKQEAgLTE2OTYsMjIgKzE0MjksNyBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgog
ICAgICAgICAjIG9sZC1ydW4td2Via2l0LXRlc3RzIGFsc28gYWNjZXB0cyAtYywgLS1jb25maWd1
cmF0aW9uIENPTkZJR1VSQVRJT04uCiAgICAgXQogCi0gICAgbG9nZ2luZ19vcHRpb25zID0gWwot
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1sb2ciLCBhY3Rpb249InN0b3JlIiwKLSAg
ICAgICAgICAgIGRlZmF1bHQ9TE9HX0RFRkFVTFRfVkFMVUUsCi0gICAgICAgICAgICBoZWxwPSgi
bG9nIHZhcmlvdXMgdHlwZXMgb2YgZGF0YS4gVGhlIGFyZ3VtZW50IHZhbHVlIHNob3VsZCBiZSBh
ICIKLSAgICAgICAgICAgICAgICAgICJjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgZnJv
bTogJXMgKGRlZmF1bHRzIHRvICIKLSAgICAgICAgICAgICAgICAgICItLWxvZyAlcykiICUgKExP
R19WQUxVRVMsIExPR19ERUZBVUxUX1ZBTFVFKSkpLAotICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVkZSBkZWJ1Zy1sZXZlbCBsb2dnaW5nIiksCi0gICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNvdXJjZXMiLCBhY3Rpb249InN0b3JlX3RydWUi
LAotICAgICAgICAgICAgaGVscD0ic2hvdyBleHBlY3RlZCByZXN1bHQgZmlsZSBwYXRoIGZvciBl
YWNoIHRlc3QgIiArCi0gICAgICAgICAgICAgICAgICIoaW1wbGllcyAtLXZlcmJvc2UpIiksCi0g
ICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMgaGFzIGEgLS1zbG93ZXN0IG9wdGlvbiB3aGlj
aCBqdXN0IHByaW50cwotICAgICAgICAjIHRoZSBzbG93ZXN0IDEwLgotICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbigiLS1udW0tc2xvdy10ZXN0cy10by1sb2ciLCBkZWZhdWx0PTUwLAotICAg
ICAgICAgICAgaGVscD0iTnVtYmVyIG9mIHNsb3cgdGVzdHMgd2hvc2UgdGltaW5ncyB0byBwcmlu
dC4iKSwKLSAgICBdCisgICAgcHJpbnRfb3B0aW9ucyA9IHByaW50aW5nLnByaW50X29wdGlvbnMo
KQogCiAgICAgIyBGSVhNRTogVGhlc2Ugb3B0aW9ucyBzaG91bGQgbW92ZSBvbnRvIHRoZSBDaHJv
bWl1bVBvcnQuCiAgICAgY2hyb21pdW1fb3B0aW9ucyA9IFsKQEAgLTE4ODQsMTMgKzE2MDIsMjMg
QEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgIGhlbHA9KCJUaGUgYnVp
bGQgbnVtYmVyIG9mIHRoZSBidWlsZGVyIHJ1bm5pbmcgdGhpcyBzY3JpcHQuIikpLAogICAgIF0K
IAotICAgIG9wdGlvbl9saXN0ID0gKGNvbmZpZ3VyYXRpb25fb3B0aW9ucyArIGxvZ2dpbmdfb3B0
aW9ucyArCisgICAgb3B0aW9uX2xpc3QgPSAoY29uZmlndXJhdGlvbl9vcHRpb25zICsgcHJpbnRf
b3B0aW9ucyArCiAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fb3B0aW9ucyArIHJlc3VsdHNf
b3B0aW9ucyArIHRlc3Rfb3B0aW9ucyArCiAgICAgICAgICAgICAgICAgICAgbWlzY19vcHRpb25z
ICsgcmVzdWx0c19qc29uX29wdGlvbnMgKwogICAgICAgICAgICAgICAgICAgIG9sZF9ydW5fd2Vi
a2l0X3Rlc3RzX2NvbXBhdCkKICAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFy
c2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQotICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBh
cnNlX2FyZ3MoYXJncykKIAotaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBvcHRpb25z
LCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgaWYgb3B0aW9ucy5z
b3VyY2VzOgorICAgICAgICBvcHRpb25zLnZlcmJvc2UgPSBUcnVlCisKKyAgICByZXR1cm4gb3B0
aW9ucywgYXJncworCisKK2RlZiBtYWluKCk6CiAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2Fy
Z3MoKQotICAgIHN5cy5leGl0KG1haW4ob3B0aW9ucywgYXJncykpCisgICAgcG9ydF9vYmogPSBw
b3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAgIHJldHVybiBydW4ocG9ydF9v
YmosIG9wdGlvbnMsIGFyZ3MpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgc3lz
LmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkK
aW5kZXggOWZlMGU3NC4uMTc3ZDA0MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5CkBAIC0zMywxMiArMzMsMTcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBp
bXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IHdlYmtpdHB5LmxheW91dF90ZXN0cy5ydW5fd2Via2l0
X3Rlc3RzIGFzIHJ1bl93ZWJraXRfdGVzdHMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGlt
cG9ydCBwb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90
ZXN0cwogCiAKLWRlZiBwYXNzaW5nX3J1bihhcmdzKToKK2RlZiBwYXNzaW5nX3J1bihhcmdzLCBw
b3J0X29iaj1Ob25lLCBsb2dnaW5nX2luY2x1ZGVkPUZhbHNlKToKKyAgICBpZiBub3QgbG9nZ2lu
Z19pbmNsdWRlZDoKKyAgICAgICAgYXJncy5leHRlbmQoWyctLXByaW50JywgJ25vdGhpbmcnXSkK
ICAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCi0g
ICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5tYWluKG9wdGlvbnMsIGFyZ3MsIEZhbHNlKQorICAg
IGlmIHBvcnRfb2JqIGlzIE5vbmU6CisgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9u
cy5wbGF0Zm9ybSwgb3B0aW9ucykKKyAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0
X29iaiwgb3B0aW9ucywgYXJncykKICAgICByZXR1cm4gcmVzID09IDAKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54480</attachid>
            <date>2010-04-27 17:14:56 -0700</date>
            <delta_ts>2010-05-02 19:22:44 -0700</delta_ts>
            <desc>try to reduce cut&amp;paste duplication in test methods</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>100175</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxN2QwZjgzLi44NDc3OGIwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDQt
MjMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyByZW5hbWVzIC0tbG9nIHRvIC0tcHJpbnQg
KHRvIGJlIHNsaWdodGx5IG1vcmUKKyAgICAgICAgZGVzY3JpcHRpdmUpLiAtLWxvZyBpcyByZXRh
aW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisgICAgICAgIEkndmUgYWxzbyBhZGRl
ZCBiZXR0ZXIgaGVscCBtZXNzYWdlcyBmb3IgcHJpbnRpbmcuCisKKyAgICAgICAgVGhlIG5ldyBj
b2RlIGhhcyB1bml0IHRlc3RzIQorCisgICAgICAgIFRoZXJlIGlzIHN0aWxsIG1vcmUgY29kZSB0
byBiZSBtb3ZlZCwgYnV0IHRoaXMgcGF0Y2ggaXMgYmlnIGVub3VnaCBhcworICAgICAgICBpdCBp
cy4gTmFtZWx5LCBzdGlsbCB0byBtb3ZlIGFyZSB0aGUgcHJpbnRpbmcgb2YgdGhlIGFjdHVhbCBy
ZXN1bHRzCisgICAgICAgIGFuZCB0aGUgdGltaW5nIHN0YXRpc3RpY3MsIHdoaWNoIHNob3VsZCBt
b3ZlIGFub3RoZXIgMzAwLTQwMCBsaW5lcworICAgICAgICBvdXQgb2YgdGhlIGZpbGUuCisKKyAg
ICAgICAgTm90YWJsZSBjaGFuZ2VzIHRvIHJ1bl93ZWJraXRfdGVzdHMucHkgYmV5b25kIGNvZGUg
c2ltcGx5IG1vdmluZzoKKyAgICAgICAgKiBNZXRlcmVkU3RyZWFtIGlzIG5vdyBoaWRkZW4gdW5k
ZXIgdGhlIG5ldyBwcmludGluZy5QcmludGVyIGNsYXNzLgorICAgICAgICAgIEFsbCB0aGUgcmVm
ZXJlbmNlcyB0byBzZWxmLl9tZXRlciBub3cgcG9pbnQgdG8gc2VsZi5fcHJpbnRlci4KKyAgICAg
ICAgKiBBbGwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gcHJpbnRpbmcuY29uZmln
dXJlX2xvZ2dpbmcoKQorICAgICAgICAqIEluc3RlYWQgb2YgdXNpbmcgd3JpdGUoKSBsYW1iZGFz
IHRvIGNvbnRyb2wgd2hhdCBpcyBhbmQgaXNuJ3QKKyAgICAgICAgICBwcmludGVkLCB3ZSB1c2Ug
c2VwYXJhdGUgbWV0aG9kcyBvbiB0aGUgcHJpbnRlciBvYmplY3QuIFRoaXMgd2lsbAorICAgICAg
ICAgIG1ha2UgaXQgZWFzaWVyIHRvIGdyZXAgd2hpY2ggcHJpbnQgc3RhdGVtZW50cyBhcmUgcHJp
bnRlZAorICAgICAgICAgIHVuZGVyIHByb3RlY3Rpb24gb2YgZWFjaCBmbGFnLgorICAgICAgICAq
IFRoZSBwcmludF9yZXN1bHRzIGZsYWcgSSBhZGRlZCBhIGZldyByZXZzIGJhY2sgdG8gc3VwcHJl
c3MgcHJpbnRpbmcKKyAgICAgICAgICBpbiB0aGUgdW5pdCB0ZXN0cyBoYXMgYmVlbiByZXBsYWNl
ZCB3aXRoIC0tcHJpbnQgbm90aGluZy4KKyAgICAgICAgKiBUaGUgUmVzdWx0U3VtbWFyeSBjbGFz
cyBub3cgc3RvcmVzIHRoZSBlbnRpcmUgVGVzdFJlc3VsdCBmb3IgZWFjaAorICAgICAgICAgIHRl
c3QsIG5vdCBqdXN0IHRoZSBhY3R1YWwgcmVzdWx0IHR5cGUuCisgICAgICAgICogc3VtbWFyaXpl
X3VuZXhwZWN0ZWRfcmVzdWx0cygpIGdvdCBtb3ZlZCBmcm9tIGEgbWV0aG9kIG9uIFRlc3RSdW5u
ZXIKKyAgICAgICAgICB0byBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIG1vdmUg
aW50byBhIHNlcGFyYXRlIGZpbGUKKyAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBSZXN1bHRTdW1t
YXJ5IGNsYXNzIGFuZCB0aGUgVGVzdFJlc3VsdCBjbGFzcworICAgICAgICAqIFRoZSAtLXRyYWNl
IG9wdGlvbiBhZGRlZCByZWNlbnRseSBoYXMgYmVlbiByZXBsYWNlZCBieQorICAgICAgICAgICct
LXByaW50IHRyYWNlLWV2ZXJ5dGhpbmcnIGFuZCAnLS1wcmludCB0cmFjZS11bmV4cGVjdGVkJwor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODAxOAor
CisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0czoKKyAgICAgICAgICAtIHVw
ZGF0ZSB0byBuZXcgZW50cnkgcG9pbnRzIGluIHJ1bl93ZWJraXRfdGVzdHMucHkKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0
cmVhbS5weToKKyAgICAgICAgICAtIGZpeCBhIG1pbm9yIG5pdCB3aGVyZSB3ZSB3ZXJlIHByaW50
aW5nIGFuIGVtcHR5IHN0cmluZyB3aGVyZQorICAgICAgICAgICAgd2UgZGlkbid0IG5lZWQgdG8K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
cmludGluZy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6IEFkZGVkCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAgIC0g
aW1wbGVtZW50IHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoKSBhbmQgZXhwZWN0ZWRfZmlsZW5hbWUo
KSBzbworICAgICAgICAgICAgd2UgY2FuIHRlc3QgcHJpbnRpbmcgdW5leHBlY3RlZCByZXN1bHRz
IGluIGEgcGxhdGZvcm0tbmV1dHJhbAorICAgICAgICAgICAgd2F5CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9ydW5fd2Via2l0X3Rlc3QucHk6CisgICAgICAgICAgLSBtb3ZlIGEgbG90IG9m
IHRoZSBwcmludGluZyBjb2RlIGludG8gcHJpbnRpbmcucHkKKyAgICAgICAgICAtIGNoYW5nZSB0
aGUgc2lnbmF0dXJlcyBvZiB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIGZvciBlYXNpZXIKKyAg
ICAgICAgICAgIHVuaXQgdGVzdGluZworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgICAtIHVwZGF0ZSB3LyBjaGFuZ2VzIHRv
IHJ1bl93ZWJraXRfdGVzdHMgZW50cnkgcG9pbnRzLgorCiAyMDEwLTA0LTE5ICBEaXJrIFByYW5r
ZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3Rz
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0cwppbmRleCAyZWJlMWRh
Li4wNzI4ZWUwIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0
LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMKQEAg
LTMzLDUgKzMzLDQgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHdlYmtpdHB5LmxheW91dF90ZXN0cy5y
dW5fd2Via2l0X3Rlc3RzIGFzIHJ1bl93ZWJraXRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKLSAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdz
KCkKLSAgICBzeXMuZXhpdChydW5fd2Via2l0X3Rlc3RzLm1haW4ob3B0aW9ucywgYXJncykpCisg
ICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVk
X3N0cmVhbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CmluZGV4IDkzMGI5ZTQuLmEzM2ZjM2EgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CkBAIC0x
MTEsNyArMTExLDggQEAgY2xhc3MgTWV0ZXJlZFN0cmVhbToKIAogICAgICAgICAjIFByaW50IHRo
ZSBuZWNlc3NhcnkgbnVtYmVyIG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHByZXZpb3VzCiAg
ICAgICAgICMgbWVzc2FnZS4KLSAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4o
c2VsZi5fbGFzdF91cGRhdGUpKQorICAgICAgICBpZiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpOgor
ICAgICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4oc2VsZi5fbGFzdF91cGRh
dGUpKQogICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc3RyKQogICAgICAgICBudW1fcmVtYWlu
aW5nID0gbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSAtIGxlbihzdHIpCiAgICAgICAgIGlmIG51bV9y
ZW1haW5pbmcgPiAwOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQwNTZjCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcHJpbnRpbmcucHkKQEAgLTAsMCArMSw0ODMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIlBhY2thZ2UgdGhhdCBoYW5kbGVzIG5vbi1kZWJ1Zywgbm9u
LWZpbGUgb3V0cHV0IGZvciBydW4td2Via2l0LXRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKKworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucHJp
bnRlciIpCisKK1Rlc3RFeHBlY3RhdGlvbnNGaWxlID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4
cGVjdGF0aW9uc0ZpbGUKKworTlVNX1NMT1dfVEVTVFNfVE9fTE9HID0gMTAKKworUFJJTlRfREVG
QVVMVCA9ICgibWlzYyxvbmUtbGluZS1wcm9ncmVzcyxvbmUtbGluZS1zdW1tYXJ5LHVuZXhwZWN0
ZWQsIgorICAgICAgICAgICAgICAgICAidW5leHBlY3RlZC1yZXN1bHRzLHVwZGF0ZXMiKQorUFJJ
TlRfRVZFUllUSElORyA9ICgiYWN0dWFsLGNvbmZpZyxleHBlY3RlZCxtaXNjLG9uZS1saW5lLXBy
b2dyZXNzLCIKKyAgICAgICAgICAgICAgICAgICAgIm9uZS1saW5lLXN1bW1hcnksc2xvd2VzdCx0
aW1pbmcsdW5leHBlY3RlZCwiCisgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkLXJlc3Vs
dHMsdXBkYXRlcyIpCisKK0hFTFBfUFJJTlRJTkcgPSAiIiIKK091dHB1dCBmb3IgcnVuLXdlYmtp
dC10ZXN0cyBpcyBjb250cm9sbGVkIGJ5IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKK3ZhbHVl
cyBwYXNzZWQgdG8gLS1wcmludC4gIFZhbHVlcyBlaXRoZXIgaW5mbHVlbmNlIHRoZSBvdmVyYWxs
IG91dHB1dCwgb3IKK3RoZSBvdXRwdXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLCBkdXJp
bmcgdGhlIHJ1biwgb3IgYXQgdGhlIGVuZDoKKworT3ZlcmFsbCBvcHRpb25zOgorICAgIG5vdGhp
bmcgICAgICAgICAgICAgZG9uJ3QgcHJpbnQgYW55dGhpbmcuIFRoaXMgb3ZlcnJpZGVzIGV2ZXJ5
IG90aGVyIG9wdGlvbgorICAgIGV2ZXJ5dGhpbmcgICAgICAgICAgcHJpbnQgZXZlcnl0aGluZyAo
ZXhjZXB0IHRoZSB0cmFjZS0qIG9wdGlvbnMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGV0YWlsZWQtcHJvZ3Jlc3Mgb3B0aW9uLCBzZWUgYmVsb3cgZm9yIHRoZSBmdWxsIGxpc3Qg
KQorICAgIG1pc2MgICAgICAgICAgICAgICAgcHJpbnQgbWlzY2VsbGFuZW91cyB0aGluZ3MgbGlr
ZSBibGFuayBsaW5lcworCitBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW46CisgICAgY29uZmln
ICAgICAgICAgICAgICBwcmludCB0aGUgdGVzdCBydW4gY29uZmlndXJhdGlvbgorICAgIGV4cGVj
dGVkICAgICAgICAgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIHdoYXQgaXMgZXhwZWN0ZWQgdG8gaGFw
cGVuCisgICAgICAgICAgICAgICAgICAgICAgICAoIyBwYXNzZXMsICMgZmFpbHVyZXMsIGV0Yy4p
CisKK0R1cmluZyB0aGUgcnVuOgorICAgIGRldGFpbGVkLXByb2dyZXNzICAgcHJpbnQgb25lIGRv
dCBwZXIgdGVzdCBjb21wbGV0ZWQKKyAgICBvbmUtbGluZS1wcm9ncmVzcyAgIHByaW50IGEgb25l
LWxpbmUgcHJvZ3Jlc3MgYmFyCisgICAgdW5leHBlY3RlZCAgICAgICAgICBwcmludCBhbnkgdW5l
eHBlY3RlZCByZXN1bHRzIGFzIHRoZXkgb2NjdXIKKyAgICB1cGRhdGVzICAgICAgICAgICAgIHBy
aW50IHVwZGF0ZXMgb24gd2hpY2ggc3RhZ2UgaXMgZXhlY3V0aW5nCisgICAgdHJhY2UtZXZlcnl0
aGluZyAgICBwcmludCBkZXRhaWxlZCBpbmZvIG9uIGV2ZXJ5IHRlc3QncyByZXN1bHRzCisgICAg
ICAgICAgICAgICAgICAgICAgICAoYmFzZWxpbmVzLCBleHBlY3RhdGlvbiwgdGltZSBpdCB0b29r
IHRvIHJ1bikuIElmCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHNwZWNpZmllZCBp
dCB3aWxsIG92ZXJyaWRlIHRoZSAnKi1wcm9ncmVzcycKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMsIHRoZSAndHJhY2UtdW5leHBlY3RlZCcgb3B0aW9uLCBhbmQgdGhlCisgICAgICAg
ICAgICAgICAgICAgICAgICAndW5leHBlY3RlZCcgb3B0aW9uLgorICAgIHRyYWNlLXVuZXhwZWN0
ZWQgICAgbGlrZSAndHJhY2UtZXZlcnl0aGluZycsIGJ1dCBvbmx5IGZvciB0ZXN0cyB3aXRoCisg
ICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkIHJlc3VsdHMuIElmIHRoaXMgb3B0aW9u
IGlzIHNwZWNpZmllZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgb3ZlcnJpZGUg
dGhlICd1bmV4cGVjdGVkJyBvcHRpb24uCisKK0F0IHRoZSBlbmQgb2YgdGhlIHJ1bjoKKyAgICBh
Y3R1YWwgICAgICAgICAgICAgIHByaW50IGEgc3VtbWFyeSBvZiB0aGUgYWN0dWFsIHJlc3VsdHMK
KyAgICBzbG93ZXN0ICAgICAgICAgICAgIHByaW50ICUoc2xvd2VzdClkIHNsb3dlc3QgdGVzdHMg
YW5kIHRoZSB0aW1lIHRoZXkgdG9vaworICAgIHRpbWluZyAgICAgICAgICAgICAgcHJpbnQgdGlt
aW5nIHN0YXRpc3RpY3MKKyAgICB1bmV4cGVjdGVkLXJlc3VsdHMgIHByaW50IGEgbGlzdCBvZiB0
aGUgdGVzdHMgd2l0aCB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgICBvbmUtbGluZS1zdW1tYXJ5ICAg
IHByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0aGUgcnVuCisKK05vdGVzOgorICAgIC0gJ2Rl
dGFpbGVkLXByb2dyZXNzJyBjYW4gb25seSBiZSB1c2VkIGlmIHJ1bm5pbmcgaW4gYSBzaW5nbGUg
dGhyZWFkCisgICAgICAodXNpbmcgLS1jaGlsZC1wcm9jZXNzZXM9MSkgb3IgYSBzaW5nbGUgcXVl
dWUgb2YgdGVzdHMgKHVzaW5nCisgICAgICAgLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwp
LiBJZiB0aGVzZSBjb25kaXRpb25zIGFyZW4ndCB0cnVlLAorICAgICAgJ29uZS1saW5lLXByb2dy
ZXNzJyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAtIElmIGJvdGggJ2RldGFpbGVkLXByb2dy
ZXNzJyBhbmQgJ29uZS1saW5lLXByb2dyZXNzJyBhcmUgc3BlY2lmaWVkIChhbmQKKyAgICAgIGJv
dGggYXJlIHBvc3NpYmxlKSwgJ2RldGFpbGVkLXByb2dyZXNzJyB3aWxsIGJlIHVzZWQuCisgICAg
LSBJZiAnbm90aGluZycgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgYWxsIG9mIHRoZSBvdGhl
ciBvcHRpb25zLgorCistLXByaW50ICdldmVyeXRoaW5nJyBpcyBlcXVpdmFsZW50IHRvIC0tcHJp
bnQgJyUoZXZlcnl0aGluZylzJy4KKworVGhlIGRlZmF1bHQgaXMgdG8gLS1wcmludCAnJShkZWZh
dWx0KXMnLgorIiIiICUgeydzbG93ZXN0JzogTlVNX1NMT1dfVEVTVFNfVE9fTE9HLCAnZXZlcnl0
aGluZyc6IFBSSU5UX0VWRVJZVEhJTkcsIAorICAgICAgICdkZWZhdWx0JzogUFJJTlRfREVGQVVM
VCAgfQorCisKK2RlZiBwcmludF9vcHRpb25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgIyBO
b3RlOiB3ZSB1c2UgcHJpbnRfb3B0aW9ucyByYXRoZXIgdGhhbiBqdXN0ICdwcmludCcgYmVjYXVz
ZSBwcmludAorICAgICAgICAjIGlzIGEgcmVzZXJ2ZWQgd29yZC4KKyAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0tcHJpbnQiLCBkZXN0PSJwcmludF9vcHRpb25zIiwKKyAgICAgICAgICAg
IGRlZmF1bHQ9UFJJTlRfREVGQVVMVCwKKyAgICAgICAgICAgIGhlbHA9KCJjb250cm9scyBwcmlu
dCBvdXRwdXQgb2YgdGVzdCBydW4uICIKKyAgICAgICAgICAgICAgICAgICJVc2UgLS1oZWxwLXBy
aW50aW5nIGZvciBtb3JlLiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taGVs
cC1wcmludGluZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBoZWxwPSJzaG93
IGRldGFpbGVkIGhlbHAgb24gY29udHJvbGxpbmcgcHJpbnQgb3V0cHV0IiksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVkZSBkZWJ1Zy1sZXZlbCBs
b2dnaW5nIiksCisKKyAgICAgICAgIyBGSVhNRTogd2Ugc2hvdWxkIHJlbW92ZSB0aGlzOyBpdCdz
IHByZXR0eSBtdWNoIG9ic29sZXRlIHdpdGggdGhlCisgICAgICAgICMgLS1wcmludCB0cmFjZS1l
dmVyeXRoaW5nIG9wdGlvbi4KKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tc291cmNl
cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBoZWxwPSgic2hvdyBleHBlY3Rl
ZCByZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoIHRlc3QgIgorICAgICAgICAgICAgICAgICAiKGlt
cGxpZXMgLS12ZXJib3NlKSIpKSwKKyAgICBdCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKG9w
dGlvbnMsIG1ldGVyKToKKyAgICAiIiJDb25maWd1cmVzIHRoZSBsb2dnaW5nIHN5c3RlbS4iIiIK
KyAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJworICAgIGxvZ19kYXRlZm10ID0gJyV5JW0lZCAl
SDolTTolUycKKyAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLnZl
cmJvc2U6CisgICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxp
bmVubyktNGQgJShsZXZlbG5hbWUpcyAnCisgICAgICAgICAgICAgICAgICAgJyUobWVzc2FnZSlz
JykKKyAgICAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5ERUJVRworCisgICAgbG9nZ2luZy5iYXNp
Y0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm10LAorICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0ZWZtdD1sb2dfZGF0ZWZtdCwgc3RyZWFtPW1ldGVyKQorCisKK2RlZiBwYXJz
ZV9wcmludF9vcHRpb25zKHByaW50X29wdGlvbnMsIGNoaWxkX3Byb2Nlc3NlcywgaXNfZnVsbHlf
cGFyYWxsZWwpOgorICAgICIiIlBhcnNlIHRoZSBvcHRpb25zIHByb3ZpZGVkIHRvIC0tcHJpbnQg
YW5kIGRlZHVwIGFuZCByYW5rIHRoZW0uCisKKyAgICBSZXR1cm5zCisgICAgICAgIGEgc2V0KCkg
b2Ygc3dpdGNoZXMgdGhhdCBnb3Zlcm4gaG93IGxvZ2dpbmcgaXMgZG9uZQorCisgICAgIiIiCisg
ICAgc3dpdGNoZXMgPSBzZXQocHJpbnRfb3B0aW9ucy5zcGxpdCgnLCcpKQorCisgICAgaWYgJ25v
dGhpbmcnIGluIHN3aXRjaGVzOgorICAgICAgICByZXR1cm4gc2V0KCkKKworICAgIGlmIChjaGls
ZF9wcm9jZXNzZXMgIT0gMSBhbmQgbm90IGlzX2Z1bGx5X3BhcmFsbGVsIGFuZAorICAgICAgICAn
ZGV0YWlsZWQtcHJvZ3Jlc3MnIGluIHN3aXRjaGVzKToKKyAgICAgICAgX2xvZy53YXJuKCJDYW4g
b25seSBwcmludCAnZGV0YWlsZWQtcHJvZ3Jlc3MnIGlmIHJ1bm5pbmcgIgorICAgICAgICAgICAg
ICAgICAgIndpdGggLS1jaGlsZC1wcm9jZXNzZXM9MSBvciAiCisgICAgICAgICAgICAgICAgICAi
d2l0aCAtLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbC4gIgorICAgICAgICAgICAgICAgICAg
IlVzaW5nICdvbmUtbGluZS1wcm9ncmVzcycgaW5zdGVhZC4iKQorICAgICAgICBzd2l0Y2hlcy5k
aXNjYXJkKCdkZXRhaWxlZC1wcm9ncmVzcycpCisgICAgICAgIHN3aXRjaGVzLmFkZCgnb25lLWxp
bmUtcHJvZ3Jlc3MnKQorCisgICAgaWYgJ2V2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgorICAgICAg
ICBzd2l0Y2hlcy5kaXNjYXJkKCdldmVyeXRoaW5nJykKKyAgICAgICAgc3dpdGNoZXMudXBkYXRl
KHNldChQUklOVF9FVkVSWVRISU5HLnNwbGl0KCcsJykpKQorCisgICAgaWYgJ2RldGFpbGVkLXBy
b2dyZXNzJyBpbiBzd2l0Y2hlczoKKyAgICAgICAgc3dpdGNoZXMuZGlzY2FyZCgnb25lLWxpbmUt
cHJvZ3Jlc3MnKQorCisgICAgaWYgJ3RyYWNlLWV2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgorICAg
ICAgICBzd2l0Y2hlcy5kaXNjYXJkKCdkZXRhaWxlZC1wcm9ncmVzcycpCisgICAgICAgIHN3aXRj
aGVzLmRpc2NhcmQoJ29uZS1saW5lLXByb2dyZXNzJykKKyAgICAgICAgc3dpdGNoZXMuZGlzY2Fy
ZCgndHJhY2UtdW5leHBlY3RlZCcpCisgICAgICAgIHN3aXRjaGVzLmRpc2NhcmQoJ3VuZXhwZWN0
ZWQnKQorCisgICAgaWYgJ3RyYWNlLXVuZXhwZWN0ZWQnIGluIHN3aXRjaGVzOgorICAgICAgICBz
d2l0Y2hlcy5kaXNjYXJkKCd1bmV4cGVjdGVkJykKKworICAgIHJldHVybiBzd2l0Y2hlcworCisK
K2NsYXNzIFByaW50ZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyBoYW5kbGluZyBhbGwgbm9uLWRl
YnVnLWxvZ2dpbmcgcHJpbnRpbmcgZG9uZSBieSBydW4td2Via2l0LXRlc3RzLgorCisgICAgUHJp
bnRpbmcgZnJvbSBydW4td2Via2l0LXRlc3RzIGZhbGxzIGludG8gdHdvIGJ1Y2tldHM6IGdlbmVy
YWwgb3IKKyAgICByZWd1bGFyIG91dHB1dCB0aGF0IGlzIHJlYWQgb25seSBieSBodW1hbnMgYW5k
IGNhbiBiZSBjaGFuZ2VkIGF0IGFueQorICAgIHRpbWUsIGFuZCBvdXRwdXQgdGhhdCBpcyBwYXJz
ZWQgYnkgYnVpbGRib3RzIChhbmQgaHVtYW5zKSBhbmQgaGVuY2UKKyAgICBtdXN0IGJlIGNoYW5n
ZWQgbW9yZSBjYXJlZnVsbHkgYW5kIGluIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBidWlsZGJvdAor
ICAgIHBhcnNpbmcgY29kZSAoaW4gY2hyb21pdW0ub3JnJ3MgYnVpbGRib3QvbWFzdGVyLmNocm9t
aXVtL3NjcmlwdHMvbWFzdGVyLworICAgIGxvZ19wYXJzZXIvd2Via2l0X3Rlc3RfY29tbWFuZC5w
eSBzY3JpcHQpLgorCisgICAgQnkgZGVmYXVsdCB0aGUgYnVpbGRib3QtcGFyc2VkIGNvZGUgZ2V0
cyBsb2dnZWQgdG8gc3Rkb3V0LCBhbmQgcmVndWxhcgorICAgIG91dHB1dCBnZXRzIGxvZ2dlZCB0
byBzdGRlcnIuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHJlZ3Vs
YXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQsCisgICAgICAgICAgICAgICAgIGNoaWxkX3Byb2Nl
c3NlcywgaXNfZnVsbHlfcGFyYWxsZWwpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJncworICAg
ICAgICAgIHBvcnQgICAgICAgICAgICAgICBpbnRlcmZhY2UgdG8gcG9ydC1zcGVjaWZpYyByb3V0
aW5lcworICAgICAgICAgIG9wdGlvbnMgICAgICAgICAgICBPcHRpb25QYXJzZXIgb2JqZWN0IHdp
dGggY29tbWFuZCBsaW5lIHNldHRpbmdzCisgICAgICAgICAgcmVndWxhcl9vdXRwdXQgICAgIHN0
cmVhbSB0byB3aGljaCBvdXRwdXQgaW50ZW5kZWQgb25seSBmb3IgaHVtYW5zCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB3cml0dGVuCisgICAgICAgICAgYnVpbGRib3Rf
b3V0cHV0ICAgIHN0cmVhbSB0byB3aGljaCBvdXRwdXQgaW50ZW5kZWQgdG8gYmUgcmVhZCBieQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGRib3RzIChhbmQgaHVtYW5zKSBz
aG91bGQgYmUgd3JpdHRlbgorICAgICAgICAgIGNoaWxkX3Byb2Nlc3NlcyAgICBudW1iZXIgb2Yg
cGFyYWxsZWwgdGhyZWFkcyBydW5uaW5nICh1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRyb2xsZWQgYnkgLS1jaGlsZC1wcm9jZXNzZXMpCisgICAgICAgICAgaXNfZnVs
bHlfcGFyYWxsZWwgIGFyZSB0aGUgdGVzdHMgcnVubmluZyBpbiBhIHNpbmdsZSBxdWV1ZSwgb3IK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc2hhcmRzICh1c3VhbGx5IGNvbnRyb2xs
ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1leHBlcmltZW50YWwtZnVsbHkt
cGFyYWxsZWwpCisKKyAgICAgICAgTm90ZSB0aGF0IHRoZSBsYXN0IHR3byBhcmdzIGFyZSBzZXBh
cmF0ZSByYXRoZXIgdGhhbiBidW5kbGVkIGludG8KKyAgICAgICAgdGhlIG9wdGlvbnMgc3RydWN0
dXJlIHNvIHRoYXQgdGhpcyBvYmplY3QgZG9lcyBub3QgYXNzdW1lIGFueSBmbGFncworICAgICAg
ICBzZXQgaW4gb3B0aW9ucyB0aGF0IHdlcmVuJ3QgcmV0dXJuZWQgZnJvbSBsb2dnaW5nX29wdGlv
bnMoKSwgYWJvdmUuCisgICAgICAgIFRoZSB0d28gYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgb3Igbm90IHdlIGNhbiBzZW5zaWJseSB1c2UKKyAgICAgICAgdGhlICdkZXRhaWxlZC1wcm9n
cmVzcycgb3B0aW9uLCBvciBjYW4gb25seSB1c2UgJ29uZS1saW5lLXByb2dyZXNzJy4KKyAgICAg
ICAgIiIiCisgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbSA9IGJ1aWxkYm90X291dHB1dAor
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9wb3J0ID0gcG9y
dAorICAgICAgICBzZWxmLl9zdHJlYW0gPSByZWd1bGFyX291dHB1dAorCisgICAgICAgICMgVGhl
c2UgYXJlIHVzZWQgZm9yIC0tcHJpbnQgZGV0YWlsZWQtcHJvZ3Jlc3MgdG8gdHJhY2sgc3RhdHVz
IGJ5CisgICAgICAgICMgZGlyZWN0b3J5LgorICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IE5v
bmUKKyAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiIgorICAgICAgICBzZWxm
Ll9jdXJyZW50X3Rlc3RfbnVtYmVyID0gMAorCisgICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXJl
ZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbShvcHRpb25zLnZlcmJvc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyX291dHB1dCkKKyAgICAg
ICAgY29uZmlndXJlX2xvZ2dpbmcoc2VsZi5fb3B0aW9ucywgc2VsZi5fbWV0ZXIpCisKKyAgICAg
ICAgc2VsZi5zd2l0Y2hlcyA9IHBhcnNlX3ByaW50X29wdGlvbnMob3B0aW9ucy5wcmludF9vcHRp
b25zLAorICAgICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzLCBpc19mdWxseV9wYXJhbGxlbCkKKwor
ICAgICMgVGhlc2UgdHdvIHJvdXRpbmVzIGp1c3QgaGlkZSB0aGUgaW1wbG1lbnRhdGlvbiBvZiB0
aGUgc3dpdGNoZXMuCisgICAgZGVmIGRpc2FibGVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgIHJl
dHVybiBub3Qgb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKKworICAgIGRlZiBlbmFibGVkKHNlbGYs
IG9wdGlvbik6CisgICAgICAgIHJldHVybiBvcHRpb24gaW4gc2VsZi5zd2l0Y2hlcworCisgICAg
ZGVmIGhlbHBfcHJpbnRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlKEhFTFBfUFJJTlRJ
TkcpCisKKyAgICBkZWYgcHJpbnRfYWN0dWFsKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYu
ZGlzYWJsZWQoJ2FjdHVhbCcpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2J1
aWxkYm90X3N0cmVhbS53cml0ZSgiJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgcHJpbnRfY29uZmln
KHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYud3JpdGUobXNnLCAnY29uZmlnJykKKworICAgIGRl
ZiBwcmludF9leHBlY3RlZChzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2V4
cGVjdGVkJykKKworICAgIGRlZiBwcmludF90aW1pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgc2Vs
Zi53cml0ZShtc2csICd0aW1pbmcnKQorCisgICAgZGVmIHByaW50X29uZV9saW5lX3N1bW1hcnko
c2VsZiwgdG90YWwsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1t
YXJ5IG9mIHRoZSB0ZXN0IHJ1biB0byBzdGRvdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICB0b3RhbDogdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgorICAgICAgICAgIGV4cGVjdGVkOiBu
dW1iZXIgb2YgZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5k
aXNhYmxlZCgnb25lLWxpbmUtc3VtbWFyeScpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgdW5leHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKKyAgICAgICAgaWYgdW5leHBlY3RlZCA9
PSAwOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIkFsbCAlZCB0ZXN0cyByYW4gYXMg
ZXhwZWN0ZWQuXG4iICUgZXhwZWN0ZWQpCisgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKKyAg
ICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVk
IGRpZG4ndDpcblxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVk
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIlxuJWQgdGVz
dHMgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGV4cGVjdGVkLCB1bmV4cGVjdGVkKSkKKworICAgIGRlZiBwcmludF90ZXN0
X3Jlc3VsdChzZWxmLCByZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKToKKyAgICAg
ICAgIiIiUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJp
bnQuIiIiCisgICAgICAgIGlmIChzZWxmLmVuYWJsZWQoJ3RyYWNlLWV2ZXJ5dGhpbmcnKSBvcgor
ICAgICAgICAgICAgc2VsZi5lbmFibGVkKCd0cmFjZS11bmV4cGVjdGVkJykgYW5kIG5vdCBleHBl
Y3RlZCk6CisgICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0X3RyYWNlKHJlc3VsdCwgZXhwX3N0
ciwgZ290X3N0cikKKyAgICAgICAgZWxpZiAobm90IGV4cGVjdGVkIGFuZCBzZWxmLmVuYWJsZWQo
J3VuZXhwZWN0ZWQnKSBhbmQKKyAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlZCgnZGV0YWlsZWQt
cHJvZ3Jlc3MnKSk6CisgICAgICAgICAgICAjIE5vdGU6ICdkZXRhaWxlZC1wcm9ncmVzcycgaGFu
ZGxlcyB1bmV4cGVjdGVkIHJlc3VsdHMgaW50ZXJuYWxseSwKKyAgICAgICAgICAgICMgc28gd2Ug
c2tpcCBpdCBoZXJlLgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jl
c3VsdChyZXN1bHQpCisKKyAgICBkZWYgX3ByaW50X3Rlc3RfdHJhY2Uoc2VsZiwgcmVzdWx0LCBl
eHBfc3RyLCBnb3Rfc3RyKToKKyAgICAgICAgIiIiUHJpbnQgZGV0YWlsZWQgcmVzdWx0cyBvZiBh
IHRlc3QgKHRyaWdnZXJlZCBieSAtLXByaW50IHRyYWNlLSopLgorICAgICAgICBGb3IgZWFjaCB0
ZXN0LCBwcmludDoKKyAgICAgICAgICAgLSBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgYmFzZWxp
bmVzCisgICAgICAgICAgIC0gZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAgICAtIGFjdHVhbCBy
ZXN1bHQKKyAgICAgICAgICAgLSB0aW1pbmcgaW5mbworICAgICAgICAiIiIKKyAgICAgICAgZmls
ZW5hbWUgPSByZXN1bHQuZmlsZW5hbWUKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBzZWxmLl93cml0ZSgndHJh
Y2U6ICVzXG4nICUgdGVzdF9uYW1lKQorICAgICAgICBzZWxmLl93cml0ZSgnICB0eHQ6ICVzXG4n
ICUKKyAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxl
bmFtZSwgJy50eHQnKSkpCisgICAgICAgIHBuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9m
aWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwbmdf
ZmlsZSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgnICBwbmc6ICVzXG4nICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFt
ZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgnICBwbmc6IDxub25l
PlxuJykKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgZXhwOiAlc1xuJyAlIGV4cF9zdHIpCisgICAg
ICAgIHNlbGYuX3dyaXRlKCcgIGdvdDogJXNcbicgJSBnb3Rfc3RyKQorICAgICAgICBzZWxmLl93
cml0ZSgnIHRvb2s6ICUtLjNmXG4nICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUpCisgICAgICAgIHNl
bGYuX3dyaXRlKCdcbicpCisKKyAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQo
c2VsZiwgcmVzdWx0KToKKyAgICAgICAgIiIiUHJpbnRzIG9uZSB1bmV4cGVjdGVkIHRlc3QgcmVz
dWx0IGxpbmUuIiIiCisgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RB
VElPTl9ERVNDUklQVElPTlNbcmVzdWx0LnR5cGVdWzBdCisgICAgICAgIHNlbGYud3JpdGUoIiAg
JXMgLT4gdW5leHBlY3RlZCAlcyIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUocmVzdWx0LmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAg
ICAgZGVzYyksICJ1bmV4cGVjdGVkIikKKworICAgIGRlZiBwcmludF9wcm9ncmVzcyhzZWxmLCBy
ZXN1bHRfc3VtbWFyeSwgcmV0cnlpbmcsIHRlc3RfbGlzdCk6CisgICAgICAgICIiIlByaW50IHBy
b2dyZXNzIHRocm91Z2ggdGhlIHRlc3RzIGFzIGRldGVybWluZWQgYnkgLS1wcmludC4iIiIKKyAg
ICAgICAgaWYgc2VsZi5lbmFibGVkKCdkZXRhaWxlZC1wcm9ncmVzcycpOgorICAgICAgICAgICAg
c2VsZi5fcHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnksIHRlc3RfbGlzdCkK
KyAgICAgICAgZWxpZiBzZWxmLmVuYWJsZWQoJ29uZS1saW5lLXByb2dyZXNzJyk6CisgICAgICAg
ICAgICBzZWxmLl9wcmludF9vbmVfbGluZV9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgcmV0cnlp
bmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiByZXN1
bHRfc3VtbWFyeS5yZW1haW5pbmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0
ZSgnJykKKworICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1
bW1hcnksIHJldHJ5aW5nKToKKyAgICAgICAgIiIiRGlzcGxheXMgdGhlIHByb2dyZXNzIHRocm91
Z2ggdGhlIHRlc3QgcnVuLiIiIgorICAgICAgICBwZXJjZW50X2NvbXBsZXRlID0gMTAwICogKHJl
c3VsdF9zdW1tYXJ5LmV4cGVjdGVkICsKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhw
ZWN0ZWQpIC8gcmVzdWx0X3N1bW1hcnkudG90YWwKKyAgICAgICAgYWN0aW9uID0gIlRlc3Rpbmci
CisgICAgICAgIGlmIHJldHJ5aW5nOgorICAgICAgICAgICAgYWN0aW9uID0gIlJldHJ5aW5nIgor
ICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMgKCVkJSUpOiAlZCByYW4gYXMgZXhwZWN0
ZWQsICVkIGRpZG4ndCwiCisgICAgICAgICAgICAiICVkIGxlZnQiICUgKGFjdGlvbiwgcGVyY2Vu
dF9jb21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQsCisgICAgICAgICAgICAgcmVzdWx0
X3N1bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKSkKKworICAgIGRl
ZiBfcHJpbnRfZGV0YWlsZWRfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRlc3RfbGlz
dCk6CisgICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0cHV0IHdoZXJlIHdl
IHByaW50IHRoZSBkaXJlY3RvcnkgbmFtZQorICAgICAgICBhbmQgb25lIGRvdCBmb3IgZWFjaCBj
b21wbGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKKyAgICAgICAgIi0tbG9nIGRldGFp
bGVkLXByb2dyZXNzIi4iIiIKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9
PSBsZW4odGVzdF9saXN0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG5leHRfdGVz
dCA9IHRlc3RfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICBuZXh0X2Rp
ciA9IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZShuZXh0X3Rlc3QpKQorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNz
X3N0ciA9PSAiIjoKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVz
OiAiICUgKG5leHRfZGlyKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2Rp
cgorCisgICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgor
ICAgICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6CisgICAgICAgICAg
ICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nf
c3RyKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczog
LiIgJSAobmV4dF9kaXIpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0
X2RpcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3By
b2dyZXNzX3N0ciArPSAiLiIKKworICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRf
c3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5lbmFi
bGVkKCd1bmV4cGVjdGVkJykpOgorICAgICAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIl
c1xuIiAlIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKQorICAgICAgICAgICAgICAgIHRlc3Rf
cmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0c1tuZXh0X3Rlc3RdCisgICAgICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdCh0ZXN0X3Jlc3VsdCkKKyAgICAg
ICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIHNlbGYuX2N1
cnJlbnRfZGlyCisKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgKz0gMQor
ICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4odGVzdF9saXN0
KToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBuZXh0X3Rlc3QgPSB0ZXN0
X2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KKyAgICAgICAgICAgIG5leHRfZGlyID0g
b3MucGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZShuZXh0X3Rlc3QpKQorCisgICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFp
bmluZzoKKyAgICAgICAgICAgIHJlbWFpbl9zdHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5
LnJlbWFpbmluZykKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyVzIiAlIChz
ZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW1haW5fc3RyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX21ldGVyLnByb2dyZXNzKCIlcyIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQor
CisgICAgZGVmIHByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3Vs
dHMpOgorICAgICAgICAiIiJQcmludHMgYSBsaXN0IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMg
dG8gdGhlIGJ1aWxkYm90IHN0cmVhbS4iIiIKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgndW5l
eHBlY3RlZC1yZXN1bHRzJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwYXNzZXMg
PSB7fQorICAgICAgICBmbGFreSA9IHt9CisgICAgICAgIHJlZ3Jlc3Npb25zID0ge30KKworICAg
ICAgICBmb3IgdGVzdCwgcmVzdWx0cyBpbiB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10uaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRzWydhY3R1YWwnXS5zcGxpdCgi
ICIpCisgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdHNbJ2V4cGVjdGVkJ10uc3BsaXQoIiAi
KQorICAgICAgICAgICAgaWYgYWN0dWFsID09IFsnUEFTUyddOgorICAgICAgICAgICAgICAgIGlm
ICdDUkFTSCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9v
Zl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnRXhwZWN0ZWQgdG8gY3Jhc2gsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbGlmICdUSU1FT1VU
JyBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3Rz
KHBhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBl
Y3RlZCB0byB0aW1lb3V0LCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gZmFpbCwgYnV0IHBhc3NlZCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQorICAgICAg
ICAgICAgZWxpZiBsZW4oYWN0dWFsKSA+IDE6CisgICAgICAgICAgICAgICAgIyBXZSBncm91cCBm
bGFreSB0ZXN0cyBieSB0aGUgZmlyc3QgYWN0dWFsIHJlc3VsdCB3ZSBnb3QuCisgICAgICAgICAg
ICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3QpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhyZWdy
ZXNzaW9ucywgcmVzdWx0c1snYWN0dWFsJ10sIHRlc3QpCisKKyAgICAgICAgaWYgbGVuKHBhc3Nl
cykgb3IgbGVuKGZsYWt5KSBvciBsZW4ocmVncmVzc2lvbnMpOgorICAgICAgICAgICAgc2VsZi5f
YnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYgbGVuKHBhc3Nlcyk6Cisg
ICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBwYXNzZXMuaXRlcml0ZW1zKCk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIlczogKCVkKVxuIiAlIChrZXks
IGxlbih0ZXN0cykpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAg
ICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJv
dF9zdHJlYW0ud3JpdGUoIiAgJXNcbiIgJSB0ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuX2J1
aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3Ry
ZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYgbGVuKGZsYWt5KToKKyAgICAgICAgICAgIGRl
c2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9O
UworICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gZmxha3kuaXRlcml0ZW1zKCk6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tl
eS5sb3dlcigpXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgi
VW5leHBlY3RlZCBmbGFraW5lc3M6ICVzICglZClcbiIKKyAgICAgICAgICAgICAgICAgICAgJSAo
ZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQorICAgICAgICAgICAgICAgIHRl
c3RzLnNvcnQoKQorCisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXVt0ZXN0XQor
ICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikK
KyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQo
IiAiKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5F
WFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCisgICAgICAgICAgICAgICAgICAgIG5ld19leHBlY3Rh
dGlvbnNfbGlzdCA9IGxpc3Qoc2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMgPSAlcyIgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgKHRlc3QsICIgIi5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlz
dCkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQor
ICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAg
aWYgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBl
Y3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUworICAgICAgICAgICAgZm9yIGtl
eSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAg
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgIlJlZ3Jlc3Npb25zOiBVbmV4cGVjdGVkICVzIDogKCVkKVxuIiAlICgKKyAgICAgICAg
ICAgICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQorICAgICAg
ICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3Rz
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMg
PSAlc1xuIiAlICh0ZXN0LCBrZXkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0
cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRl
KCJcbiIpCisKKyAgICAgICAgaWYgbGVuKHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSkgYW5k
IHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVh
bS53cml0ZSgiJXNcbiIgJSAiLSIgKiA3OCkKKworICAgIGRlZiBwcmludF91cGRhdGUoc2VsZiwg
bXNnKToKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgndXBkYXRlcycpOgorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZShtc2cpCisKKyAgICBkZWYgd3JpdGUo
c2VsZiwgbXNnLCBvcHRpb249Im1pc2MiKToKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZChvcHRp
b24pOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3dyaXRlKCIlc1xuIiAlIG1z
ZykKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5fbWV0ZXIudXBk
YXRlKG1zZykKKworIworIyBVdGlsaXR5IHJvdXRpbmVzIHVzZWQgYnkgdGhlIENvbnRyb2xsZXIg
Y2xhc3MKKyMKKworCitkZWYgX2FkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUp
OgorICAgIGRpY3Quc2V0ZGVmYXVsdChrZXksIFtdKS5hcHBlbmQodmFsdWUpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wcmludGluZ191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmlu
dGluZ191bml0dGVzdC5weQpAQCAtMCwwICsxLDQ4NSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBwcmludGluZy5weS4iIiIKKworaW1w
b3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBwZGIKK2ltcG9ydCBzeXMKK2ltcG9ydCB1
bml0dGVzdAoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1w
b3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9y
dCBwcmludGluZworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cworCisKK2NsYXNzIEFycmF5
U3RyZWFtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9j
b250ZW50cyA9IFtdCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5f
Y29udGVudHMuYXBwZW5kKG1zZykKKworICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9jb250ZW50cworCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9j
b250ZW50cyA9IFtdCisKKyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiAobGVu
KHNlbGYuX2NvbnRlbnRzKSA9PSAwKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBw
YXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPEFycmF5U3Ry
ZWFtOiAnICsgc3RyKHNlbGYuX2NvbnRlbnRzKSArICc+JworCisKK2RlZiBnZXRfb3B0aW9ucyhh
cmdzKToKKyAgICBsbyA9IHByaW50aW5nLnByaW50X29wdGlvbnMoKQorICAgIG9wdGlvbl9wYXJz
ZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9bG8pCisgICAgcmV0dXJuIG9w
dGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisKK2RlZiBnZXRfcmVzdWx0KGZpbGVuYW1l
LCByZXN1bHRfdHlwZT10ZXN0X2V4cGVjdGF0aW9ucy5QQVNTLCBydW5fdGltZT0wKToKKyAgICBm
YWlsdXJlcyA9IFtdCisgICAgaWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElN
RU9VVDoKKyAgICAgICAgZmFpbHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgp
XQorICAgIGVsaWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAg
ICAgIGZhaWx1cmVzID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCldCisgICAgcmV0dXJu
IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RSZXN1bHQoZmlsZW5hbWUsIGZhaWx1cmVzLCBy
dW5fdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcz0wKQorCisKK2RlZiBnZXRfcmVzdWx0X3N1
bW1hcnkocG9ydF9vYmosIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19zdHIpOgorICAgIGV4cGVj
dGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMoCisgICAgICAgIHBv
cnRfb2JqLCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnNfc3RyLAorICAgICAgICBwb3J0X29iai50
ZXN0X3BsYXRmb3JtX25hbWUoKSwgaXNfZGVidWdfbW9kZT1GYWxzZSwKKyAgICAgICAgaXNfbGlu
dF9tb2RlPUZhbHNlLCB0ZXN0c19hcmVfcHJlc2VudD1GYWxzZSkKKworICAgIHJzID0gcnVuX3dl
YmtpdF90ZXN0cy5SZXN1bHRTdW1tYXJ5KGV4cGVjdGF0aW9ucywgdGVzdF9maWxlcykKKyAgICBy
ZXR1cm4gcnMsIGV4cGVjdGF0aW9ucworCisKK2NsYXNzIFRlc3RVdGlsaXR5RnVuY3Rpb25zKHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfbG9nZ2luZyhzZWxmKToK
KyAgICAgICAgIyBGSVhNRTogV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byByZXNldCB0aGUg
YmFzaWMgbG9nZ2VyLgorICAgICAgICAjIEZJWE1FOiBJZiBvdGhlciB0ZXN0aW5nIGNsYXNzZXMg
Y2FsbCBsb2dnaW5nLmJhc2ljQ29uZmlnKCkgdGhlbgorICAgICAgICAjIEZJWE1FOiB0aGVzZSBj
YWxscyBiZWNvbWUgbm8tb3BzIGFuZCB3ZSBjYW4ndCBjb250cm9sIHRoZQorICAgICAgICAjIEZJ
WE1FOiBjb25maWd1cmF0aW9uIHRvIHRlc3QgdGhpbmdzIHByb3Blcmx5LgorICAgICAgICBvcHRp
b25zLCBhcmdzID0gZ2V0X29wdGlvbnMoW10pCisgICAgICAgIHN0cmVhbSA9IEFycmF5U3RyZWFt
KCkKKyAgICAgICAgcHJpbnRpbmcuY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgc3RyZWFtKQor
ICAgICAgICBsb2dnaW5nLmluZm8oInRoaXMgc2hvdWxkIGJlIGxvZ2dlZCIpCisgICAgICAgICMg
c2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uZW1wdHkoKSkKKworICAgICAgICBzdHJlYW0ucmVzZXQo
KQorICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBub3QgYmUgbG9nZ2VkIikKKyAg
ICAgICAgIyBzZWxmLmFzc2VydFRydWUoc3RyZWFtLmVtcHR5KCkpCisKKyAgICAgICAgc3RyZWFt
LnJlc2V0KCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFsnLS12ZXJib3Nl
J10pCisgICAgICAgIHByaW50aW5nLmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkK
KyAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKKyAgICAgICAg
IyBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRf
b3B0aW9ucyhzZWxmKToKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFtdKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9ucyBpcyBub3QgTm9uZSkKKworCitjbGFzcyAg
VGVzdHByaW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBnZXRfcHJpbnRlcihzZWxm
LCBhcmdzPU5vbmUsIHNpbmdsZV90aHJlYWRlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICBp
c19mdWxseV9wYXJhbGxlbD1GYWxzZSk6CisgICAgICAgIHByaW50aW5nX29wdGlvbnMgPSBwcmlu
dGluZy5wcmludF9vcHRpb25zKCkKKyAgICAgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9w
dGlvblBhcnNlcihvcHRpb25fbGlzdD1wcmludGluZ19vcHRpb25zKQorICAgICAgICBvcHRpb25z
LCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0LmdldCgndGVzdCcsIG9wdGlvbnMpCisgICAgICAgIG5wcm9jID0gMgorICAgICAg
ICBpZiBzaW5nbGVfdGhyZWFkZWQ6CisgICAgICAgICAgICBucHJvYyA9IDEKKworICAgICAgICBy
ZWd1bGFyX291dHB1dCA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAgYnVpbGRib3Rfb3V0cHV0ID0g
QXJyYXlTdHJlYW0oKQorICAgICAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRlcihzZWxmLl9w
b3J0LCBvcHRpb25zLCByZWd1bGFyX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnVpbGRib3Rfb3V0cHV0LCBzaW5nbGVfdGhyZWFkZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICByZXR1cm4g
cHJpbnRlciwgcmVndWxhcl9vdXRwdXQsIGJ1aWxkYm90X291dHB1dAorCisgICAgZGVmIHRlc3Rf
aGVscF9wcmludGVyKHNlbGYpOgorICAgICAgICAjIEhlcmUgYW5kIGJlbG93IHdlJ2xsIGNhbGwg
dGhlICJyZWd1bGFyIiBwcmludGVyIGVyciBhbmQgdGhlCisgICAgICAgICMgYnVpbGRib3QgcHJp
bnRlciBvdXQ7IHRoaXMgY29ycmVzcG9uZHMgdG8gaG93IHRoaW5ncyBydW4gb24gdGhlCisgICAg
ICAgICMgYm90cyB3aXRoIHN0ZGVyciBhbmQgc3Rkb3V0LgorICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQorCisgICAgICAgICMgVGhpcyByb3V0aW5lIHNob3Vs
ZCBwcmludCBzb21ldGhpbmcgdG8gc3Rkb3V0LiB0ZXN0aW5nIHdoYXQgaXQgaXMKKyAgICAgICAg
IyBpcyBraW5kIG9mIHBvaW50bGVzcy4KKyAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50aW5nKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIGRvX3N3aXRjaF90ZXN0cyhzZWxmLCBtZXRo
b2RfbmFtZSwgc3dpdGNoLCB0b19idWlsZGJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2U9J2hlbGxvJywgZXhwX2Vycj1Ob25lLCBleHBfYm90PU5vbmUpOgorICAgICAgICBkZWYg
ZG9faGVscGVyKG1ldGhvZF9uYW1lLCBzd2l0Y2gsIG1lc3NhZ2UsIGV4cF9lcnIsIGV4cF9ib3Qp
OgorICAgICAgICAgICAgcHJpbnRlciwgZXJyLCBib3QgPSBzZWxmLmdldF9wcmludGVyKFsnLS1w
cmludCcsIHN3aXRjaF0pCisgICAgICAgICAgICBnZXRhdHRyKHByaW50ZXIsIG1ldGhvZF9uYW1l
KShtZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIGV4cF9l
cnIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvdC5nZXQoKSwgZXhwX2JvdCkKKwor
ICAgICAgICBpZiB0b19idWlsZGJvdDoKKyAgICAgICAgICAgIGlmIGV4cF9lcnIgaXMgTm9uZToK
KyAgICAgICAgICAgICAgICBleHBfZXJyID0gW10KKyAgICAgICAgICAgIGlmIGV4cF9ib3QgaXMg
Tm9uZToKKyAgICAgICAgICAgICAgICBleHBfYm90ID0gWyBtZXNzYWdlICsgJ1xuJyBdCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBpZiBleHBfZXJyIGlzIE5vbmU6CisgICAgICAgICAgICAg
ICAgZXhwX2VyciA9IFsgbWVzc2FnZSArICdcbicgXQorICAgICAgICAgICAgaWYgZXhwX2JvdCBp
cyBOb25lOgorICAgICAgICAgICAgICAgIGV4cF9ib3QgPSBbXQorICAgICAgICBkb19oZWxwZXIo
bWV0aG9kX25hbWUsICdub3RoaW5nJywgJ2hlbGxvJywgW10sIFtdKQorICAgICAgICBkb19oZWxw
ZXIobWV0aG9kX25hbWUsIHN3aXRjaCwgJ2hlbGxvJywgZXhwX2VyciwgZXhwX2JvdCkKKyAgICAg
ICAgZG9faGVscGVyKG1ldGhvZF9uYW1lLCAnZXZlcnl0aGluZycsICdoZWxsbycsIGV4cF9lcnIs
IGV4cF9ib3QpCisKKyAgICBkZWYgdGVzdF9wcmludF9hY3R1YWwoc2VsZik6CisgICAgICAgICMg
QWN0dWFsIHJlc3VsdHMgbmVlZCB0byBiZSBsb2dnZWQgdG8gdGhlIGJ1aWxkYm90J3Mgc3RyZWFt
LgorICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfYWN0dWFsJywgJ2FjdHVhbCcs
IHRvX2J1aWxkYm90PVRydWUpIAorCisgICAgZGVmIHRlc3RfcHJpbnRfYWN0dWFsX2J1aWxkYm90
KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgYWN0
dWFsIHJlc3VsdHMgbWF0Y2hlcyB3aGF0IHRoZQorICAgICAgICAjIGJ1aWxkYm90IGlzIGV4cGVj
dGluZy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcHJpbnRfY29uZmlnKHNlbGYpOgor
ICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfY29uZmlnJywgJ2NvbmZpZycsIHRv
X2J1aWxkYm90PUZhbHNlKQorCisgICAgZGVmIHRlc3RfcHJpbnRfZXhwZWN0ZWQoc2VsZik6Cisg
ICAgICAgIHNlbGYuZG9fc3dpdGNoX3Rlc3RzKCdwcmludF9leHBlY3RlZCcsICdleHBlY3RlZCcs
IHRvX2J1aWxkYm90PUZhbHNlKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdGltaW5nKHNlbGYpOgor
ICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfdGltaW5nJywgJ3RpbWluZycsIHRv
X2J1aWxkYm90PUZhbHNlKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdXBkYXRlKHNlbGYpOgorICAg
ICAgICAjIE5vdGUgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBjYXJyaWFnZSByZXR1cm4gaGVy
ZTsgdXBkYXRlcygpCisgICAgICAgICMgYXJlIG1lYW50IHRvIGJlIG92ZXJ3cml0dGVuLgorICAg
ICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfdXBkYXRlJywgJ3VwZGF0ZXMnLCB0b19i
dWlsZGJvdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0naGVs
bG8nLCBleHBfZXJyPVsnaGVsbG8nXSkKKworICAgIGRlZiB0ZXN0X3ByaW50X29uZV9saW5lX3N1
bW1hcnkoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5l
X3N1bW1hcnkoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisg
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAn
b25lLWxpbmUtc3VtbWFyeSddKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1h
cnkoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLCBbIkFsbCAxIHRl
c3RzIHJhbiBhcyBleHBlY3RlZC5cbiJdKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0g
c2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICBwcmlu
dGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoZXJyLmdldCgpLCBbIkFsbCAxIHRlc3RzIHJhbiBhcyBleHBlY3RlZC5cbiJdKQorCisgICAg
ICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgy
LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsiXG4xIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAxIGRpZG4ndDpcblxuIl0p
CisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9z
dW1tYXJ5KDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyJcbjIgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAxIGRpZG4n
dDpcblxuIl0pCisKKyAgICBkZWYgdGVzdF9wcmludF90ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAg
ICAgcmVzdWx0ID0gZ2V0X3Jlc3VsdCgnZm9vLmh0bWwnKQorICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAg
cHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3Ry
PScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ3VuZXhwZWN0ZWQnXSkKKyAgICAg
ICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9z
dHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBwcmludGVyLnByaW50
X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgZm9vLmh0
bWwgLT4gdW5leHBlY3RlZCBwYXNzXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9
IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJp
bnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9Jycs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVz
dF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBmb28uaHRtbCAt
PiB1bmV4cGVjdGVkIHBhc3NcbiddKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmludGVyLnBy
aW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICd0cmFjZS11bmV4cGVjdGVkJ10pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBw
cmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9
JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ3RyYWNlLWV2ZXJ5dGhpbmcnXSkK
KyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUs
IGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0n
JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIu
cmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0
ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290X3N0cj0nJykKKworICAgIGRlZiB0ZXN0X3ByaW50X3Byb2dyZXNzKHNlbGYpOgorICAgICAg
ICB0ZXN0X2ZpbGVzID0gWydmb28uaHRtbCcsICdiYXIuaHRtbCddCisgICAgICAgIGV4cGVjdGF0
aW9ucyA9ICcnCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgd2UgcHJpbnQgbm90aGluZworICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhp
bmcnXSkKKyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0
ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVz
cyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1w
dHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHBy
aW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0
eSgpKQorCisgICAgICAgICMgdGVzdCByZWd1bGFyIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZS1saW5lLXByb2dyZXNzJ10p
CisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJl
c2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxl
cykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfcHJvZ3Jlc3NfX2Rl
dGFpbGVkKHNlbGYpOgorICAgICAgICB0ZXN0X2ZpbGVzID0gWydwYXNzL3Bhc3MuaHRtbCcsICdw
YXNzL3RpbWVvdXQuaHRtbCcsICdmYWlsL2NyYXNoLmh0bWwnXQorICAgICAgICBleHBlY3RhdGlv
bnMgPSAncGFzcy90aW1lb3V0Lmh0bWwgPSBUSU1FT1VUJworCisgICAgICAgICMgZmlyc3QsIHRl
c3QgdGhhdCBpdCBpcyBkaXNhYmxlZCBwcm9wZXJseQorICAgICAgICAjIHNob3VsZCBzdGlsbCBw
cmludCBvbmUtbGluZS1wcm9ncmVzcworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYu
Z2V0X3ByaW50ZXIoCisgICAgICAgICAgICBbJy0tcHJpbnQnLCAnZGV0YWlsZWQtcHJvZ3Jlc3Mn
XSwgc2luZ2xlX3RocmVhZGVkPUZhbHNlKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9z
dW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgcHJp
bnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1w
dHkoKSkKKworICAgICAgICAjIG5vdyB0ZXN0IHRoZSBlbmFibGVkIHBhdGhzCisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigKKyAgICAgICAgICAgIFsnLS1wcmlu
dCcsICdkZXRhaWxlZC1wcm9ncmVzcyddLCBzaW5nbGVfdGhyZWFkZWQ9VHJ1ZSkKKyAgICAgICAg
cnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBl
Y3RhdGlvbnMpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0
X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAg
ICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwg
dGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIHJzLmFkZChnZXRfcmVz
dWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBGYWxzZSkK
KyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1sJyksIFRydWUpCisg
ICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwnLCB0ZXN0X2V4cGVjdGF0
aW9ucy5DUkFTSCksIFRydWUpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNl
dCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVz
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyBXZSBvbmx5IGNsZWFyIHRoZSBtZXRl
ciB3aGVuIHJldHJ5aW5nIHcvIGRldGFpbGVkLXByb2dyZXNzLgorICAgICAgICBlcnIucmVzZXQo
KQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJz
LCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwg
WycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigKKyAgICAgICAgICAgIFsnLS1wcmlu
dCcsICdkZXRhaWxlZC1wcm9ncmVzcyx1bmV4cGVjdGVkJ10sIHNpbmdsZV90aHJlYWRlZD1UcnVl
KQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3Rf
ZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywg
RmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVz
ZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNz
KHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgcnMu
YWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9V
VCksIEZhbHNlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0bWwn
KSwgVHJ1ZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcsIHRl
c3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgVHJ1ZSkKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAg
ICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2Us
IHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIFdlIG9ubHkgY2xl
YXIgdGhlIG1ldGVyIHdoZW4gcmV0cnlpbmcgdy8gZGV0YWlsZWQtcHJvZ3Jlc3MuCisgICAgICAg
IGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRf
cHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZXJyLmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisK
KyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHByaW50ZXIu
d3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAg
ICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ21p
c2MnXSkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci53
cml0ZSgiZm9vIiwgImNvbmZpZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHko
KSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXBy
aW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAg
ICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNvbmZpZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9wcmludF91bmV4cGVjdGVkX3Jlc3Vs
dHMoc2VsZik6CisgICAgICAgICMgVGhpcyByb3V0aW5lIGlzIHRoZSBvbmx5IG9uZSB0aGF0IHBy
aW50cyBzdHVmZiB0aGF0IHRoZSBib3RzCisgICAgICAgICMgY2FyZSBhYm91dC4KKyAgICAgICAg
ZGVmIGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQsIHBhc3NpbmcsIGZsYWt5KToKKyAg
ICAgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9m
aWxlcywgZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgaWYgZXhwZWN0ZWQ6CisgICAgICAgICAg
ICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlv
bnMuUEFTUyksCisgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAg
ICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcsCisgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBleHBlY3RlZCkKKyAgICAgICAg
ICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJywgdGVzdF9leHBlY3Rh
dGlvbnMuQ1JBU0gpLAorICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAg
ZWxpZiBwYXNzaW5nOgorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bh
c3MuaHRtbCcpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
cGFzcy90aW1lb3V0Lmh0bWwnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdl
dF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVz
dF9leHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVk
KQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcs
CisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgZXhwZWN0
ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElN
RU9VVCksCisgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICByZXRyeSA9
IHJzCisgICAgICAgICAgICBpZiBmbGFreToKKyAgICAgICAgICAgICAgICByZXRyeSwgZXhwID0g
Z2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMpCisgICAgICAg
ICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJyksIFRydWUpCisg
ICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5odG1sJyks
IFRydWUpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2gu
aHRtbCcpLCBUcnVlKQorICAgICAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gcnVuX3dlYmtp
dF90ZXN0cy5zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKAorICAgICAgICAgICAgICAgIHNl
bGYuX3BvcnQsIGV4cCwgcnMsIHJldHJ5KQorICAgICAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWRf
cmVzdWx0cworCisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ3Bhc3MvcGFzcy5odG1sJywgJ3Bhc3Mv
dGltZW91dC5odG1sJywgJ2ZhaWwvY3Jhc2guaHRtbCddCisgICAgICAgIGV4cGVjdGF0aW9ucyA9
ICcnCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1w
cmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhl
eHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50
ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAg
ICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5leHBlY3RlZC1y
ZXN1bHRzJ10pCisKKyAgICAgICAgIyB0ZXN0IGV2ZXJ5dGhpbmcgcnVubmluZyBhcyBleHBlY3Rl
ZAorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9VHJ1ZSwgcGFz
c2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3Rl
ZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRlc3QgZmFpbHVy
ZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgdXIg
PSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBm
bGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRlc3QgdW5leHBlY3RlZCBmbGFreSBy
ZXN1bHRzCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAg
IHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1UcnVl
LCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMo
dXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRlc3QgdW5leHBlY3RlZCBwYXNz
ZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgdXIg
PSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBm
bGFreT1UcnVlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5y
ZXNldCgpCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0t
cHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3Vs
dHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBw
cmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQor
CisgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzX2J1aWxkYm90KHNlbGYpOgor
ICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQgcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKCkgcHJv
ZHVjZXMgdGhlIHByaW50ZXIgdGhlCisgICAgICAgICMgYnVpbGRib3QgaXMgZXhwZWN0aW5nLgor
ICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3Qu
bWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggZWRlZjQ4NS4uY2I5ZjNlYyAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpA
QCAtNjYsNiArNjYsMTMgQEAgY2xhc3MgVGVzdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpOgogICAgICAgICByZXR1
cm4gJycKIAorICAgIGRlZiByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lKToK
KyAgICAgICAgcmV0dXJuIGZpbGVuYW1lCisKKyAgICBkZWYgZXhwZWN0ZWRfZmlsZW5hbWUoc2Vs
ZiwgZmlsZW5hbWUsIHN1ZmZpeCk6CisgICAgICAgIChiYXNlbmFtZSwgZXh0KSA9IG9zLnBhdGgu
c3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBiYXNlbmFtZSArICcuJyArIHN1ZmZp
eAorCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDFlNjNhN2EuLjVkODA3NmUgMTAwNzU1Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQpAQCAtNjQsNyArNjQsNyBAQCBpbXBvcnQgdHJhY2ViYWNrCiAKIGZy
b20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIGxheW91dF9w
YWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvcgotZnJvbSBsYXlvdXRf
cGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHByaW50aW5nCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAogZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9maWxlcwpAQCAtODAsMzMgKzgwLDYgQEAgaW1wb3J0IHBv
cnQKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucnVu
X3dlYmtpdF90ZXN0cyIpCiAKLSMgZHVtbXkgdmFsdWUgdXNlZCBmb3IgY29tbWFuZC1saW5lIGV4
cGxpY2l0bmVzcyB0byBkaXNhYmxlIGRlZmF1bHRzCi1MT0dfTk9USElORyA9ICdub3RoaW5nJwot
Ci0jIERpc3BsYXkgdGhlIG9uZS1saW5lIHByb2dyZXNzIGJhciAoJSBjb21wbGV0ZWQpIHdoaWxl
IHRlc3RpbmcKLUxPR19QUk9HUkVTUyA9ICdwcm9ncmVzcycKLQotIyBJbmRpY2F0ZXMgdGhhdCB3
ZSB3YW50IGRldGFpbGVkIHByb2dyZXNzIHVwZGF0ZXMgaW4gdGhlIG91dHB1dCAocHJpbnRzCi0j
IGRpcmVjdG9yeS1ieS1kaXJlY3RvcnkgZmVlZGJhY2spLgotTE9HX0RFVEFJTEVEX1BST0dSRVNT
ID0gJ2RldGFpbGVkLXByb2dyZXNzJwotCi0jIExvZyB0aGUgb25lLWxpbmUgc3VtbWFyeSBhdCB0
aGUgZW5kIG9mIHRoZSBydW4KLUxPR19TVU1NQVJZID0gJ3N1bW1hcnknCi0KLSMgIlRyYWNlIiB0
aGUgdGVzdCAtIGxvZyB0aGUgZXhwZWN0ZWQgcmVzdWx0LCB0aGUgYWN0dWFsIHJlc3VsdCwgYW5k
IHRoZQotIyBiYXNlbGluZXMgdXNlZAotTE9HX1RSQUNFID0gJ3RyYWNlJwotCi0jIExvZyBhbnkg
dW5leHBlY3RlZCByZXN1bHRzIHdoaWxlIHJ1bm5pbmcgKGluc3RlYWQgb2YganVzdCBhdCB0aGUg
ZW5kKS4KLUxPR19VTkVYUEVDVEVEID0gJ3VuZXhwZWN0ZWQnCi1MT0dfVU5FWFBFQ1RFRF9SRVNV
TFRTID0gJ3VuZXhwZWN0ZWQtcmVzdWx0cycKLQotTE9HX1ZBTFVFUyA9ICIsIi5qb2luKCgiYWN0
dWFsIiwgImNvbmZpZyIsIExPR19ERVRBSUxFRF9QUk9HUkVTUywgImV4cGVjdGVkIiwKLSAgICAg
ICAgICAgICAgICAgICAgICBMT0dfTk9USElORywgTE9HX1BST0dSRVNTLCBMT0dfU1VNTUFSWSwg
InRpbWluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgTE9HX1VORVhQRUNURUQsIExPR19VTkVY
UEVDVEVEX1JFU1VMVFMpKQotTE9HX0RFRkFVTFRfVkFMVUUgPSAiLCIuam9pbigoTE9HX0RFVEFJ
TEVEX1BST0dSRVNTLCBMT0dfU1VNTUFSWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExPR19VTkVYUEVDVEVELCBMT0dfVU5FWFBFQ1RFRF9SRVNVTFRTKSkKLQogIyBCdWlsZGVyIGJh
c2UgVVJMIHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KIEJVSUxERVJf
QkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9idWlsZGJvdC9sYXlvdXRfdGVz
dF9yZXN1bHRzLyIKIApAQCAtMTgxLDcgKzE1NCw3IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2Jq
ZWN0KToKICAgICAgICAgIiIiCiAKICAgICAgICAgc2VsZi50ZXN0c19ieV9leHBlY3RhdGlvblty
ZXN1bHQudHlwZV0uYWRkKHJlc3VsdC5maWxlbmFtZSkKLSAgICAgICAgc2VsZi5yZXN1bHRzW3Jl
c3VsdC5maWxlbmFtZV0gPSByZXN1bHQudHlwZQorICAgICAgICBzZWxmLnJlc3VsdHNbcmVzdWx0
LmZpbGVuYW1lXSA9IHJlc3VsdAogICAgICAgICBzZWxmLnJlbWFpbmluZyAtPSAxCiAgICAgICAg
IGlmIGxlbihyZXN1bHQuZmFpbHVyZXMpOgogICAgICAgICAgICAgc2VsZi5mYWlsdXJlc1tyZXN1
bHQuZmlsZW5hbWVdID0gcmVzdWx0LmZhaWx1cmVzCkBAIC0xOTIsNiArMTY1LDgzIEBAIGNsYXNz
IFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYudW5leHBlY3RlZCArPSAx
CiAKIAorZGVmIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMocG9ydF9vYmosIGV4cGVjdGF0
aW9ucywgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXRyeV9zdW1tYXJ5KToKKyAgICAiIiJTdW1tYXJpemUgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBh
cyBhIGRpY3QuCisKKyAgICBGSVhNRTogc3BsaXQgdGhpcyBkYXRhIHN0cnVjdHVyZSBpbnRvIGEg
c2VwYXJhdGUgY2xhc3M/CisKKyAgICBBcmdzOgorICAgICAgICBwb3J0X29iajogaW50ZXJmYWNl
IHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKKyAgICAgICAgZXhwZWN0YXRpb25zOiB0ZXN0X2V4cGVj
dGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zIG9iamVjdAorICAgICAgICByZXN1bHRfc3VtbWFyeTog
c3VtbWFyeSBvYmplY3QgZnJvbSBpbml0aWFsIHRlc3QgcnVucworICAgICAgICByZXRyeV9zdW1t
YXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3QgcnVuIG9mIHJldHJpZWQgdGVzdHMK
KyAgICBSZXR1cm5zOgorICAgICAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBhIHN1bW1hcnkg
b2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQorICAgICAgICBydW4sIHdpdGggdGhl
IGZvbGxvd2luZyBmaWVsZHM6CisgICAgICAgICd2ZXJzaW9uJzogYSB2ZXJzaW9uIGluZGljYXRv
ciAoMSBpbiB0aGlzIHZlcnNpb24pCisgICAgICAgICdmaXhhYmxlJzogIyBvZiBmaXhhYmxlIHRl
c3RzIChOT1cgLSBQQVNTKQorICAgICAgICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0cyAo
Tk9XICYgU0tJUFBFRCkKKyAgICAgICAgJ251bV9yZWdyZXNzaW9ucyc6ICMgb2Ygbm9uLWZsYWt5
IGZhaWx1cmVzCisgICAgICAgICdudW1fZmxha3knOiAjIG9mIGZsYWt5IGZhaWx1cmVzCisgICAg
ICAgICdudW1fcGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcworICAgICAgICAndGVzdHMn
OiBhIGRpY3Qgb2YgdGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4nLCAnYWN0dWFsJzogJy4uLid9
CisgICAgIiIiCisgICAgcmVzdWx0cyA9IHt9CisgICAgcmVzdWx0c1sndmVyc2lvbiddID0gMQor
CisgICAgdGJlID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb24KKyAgICB0YnQg
PSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQorICAgIHJlc3VsdHNbJ2ZpeGFibGUn
XSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTXSkKKyAgICByZXN1bHRzWydz
a2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlvbnMuU0tJUF0pCisKKyAgICBu
dW1fcGFzc2VzID0gMAorICAgIG51bV9mbGFreSA9IDAKKyAgICBudW1fcmVncmVzc2lvbnMgPSAw
CisgICAga2V5d29yZHMgPSB7fQorICAgIGZvciBrLCB2IGluIFRlc3RFeHBlY3RhdGlvbnNGaWxl
LkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKKyAgICAgICAga2V5d29yZHNbdl0gPSBrLnVwcGVy
KCkKKworICAgIHRlc3RzID0ge30KKyAgICBmb3IgZmlsZW5hbWUsIHJlc3VsdCBpbiByZXN1bHRf
c3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICMgTm90ZSB0
aGF0IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5hbCBydW4sIHdlIGlnbm9yZQorICAg
ICAgICAjIHdoZXRoZXIgb3Igbm90IGl0IGNyYXNoZWQgd2hlbiB3ZSByZXRyaWVkIGl0IChpZiB3
ZSByZXRyaWVkIGl0KSwKKyAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1bHQg
bm90IGZsYWt5LgorICAgICAgICB0ZXN0ID0gcG9ydF9vYmoucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShmaWxlbmFtZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0
aW9uc19zdHJpbmcoZmlsZW5hbWUpCisgICAgICAgIGFjdHVhbCA9IFtrZXl3b3Jkc1tyZXN1bHRd
XQorCisgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgorICAgICAg
ICAgICAgbnVtX3Bhc3NlcyArPSAxCisgICAgICAgIGVsaWYgcmVzdWx0ID09IHRlc3RfZXhwZWN0
YXRpb25zLkNSQVNIOgorICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiByZXRyeV9zdW1tYXJ5LnVuZXhw
ZWN0ZWRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICBhY3R1YWwuZXh0ZW5kKGV4cGVjdGF0aW9u
cy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUp
LnNwbGl0KCIgIikpCisgICAgICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0gcmV0cnlfc3VtbWFyeS51bmV4
cGVjdGVkX3Jlc3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0ICE9IHJl
dHJ5X3Jlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsLmFwcGVuZChrZXl3b3Jkc1ty
ZXRyeV9yZXN1bHRdKQorICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG51bV9yZWdyZXNzaW9ucyArPSAx
CisKKyAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQorICAgICAgICB0ZXN0c1t0ZXN0XVsnZXhwZWN0
ZWQnXSA9IGV4cGVjdGVkCisgICAgICAgIHRlc3RzW3Rlc3RdWydhY3R1YWwnXSA9ICIgIi5qb2lu
KGFjdHVhbCkKKworICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0ZXN0cworICAgIHJlc3VsdHNbJ251
bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMKKyAgICByZXN1bHRzWydudW1fZmxha3knXSA9IG51bV9m
bGFreQorICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9ucyddID0gbnVtX3JlZ3Jlc3Npb25zCisK
KyAgICByZXR1cm4gcmVzdWx0cworCisKIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIiIiQSBjbGFz
cyBmb3IgbWFuYWdpbmcgcnVubmluZyBhIHNlcmllcyBvZiB0ZXN0cyBvbiBhIHNlcmllcyBvZiBs
YXlvdXQKICAgICB0ZXN0IGZpbGVzLiIiIgpAQCAtMjA0LDE3ICsyNTQsMTcgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5kZXJUcmVlLgogICAgIERFRkFVTFRfVEVTVF9USU1F
T1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25z
LCBtZXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIp
OgogICAgICAgICAiIiJJbml0aWFsaXplIHRlc3QgcnVubmVyIGRhdGEgc3RydWN0dXJlcy4KIAog
ICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgcG9y
dC1zcGVjaWZpYwogICAgICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxp
bmUgb3B0aW9ucwotICAgICAgICAgIG1ldGVyOiBhIE1ldGVyZWRTdHJlYW0gb2JqZWN0IHRvIHJl
Y29yZCB1cGRhdGVzIHRvLgorICAgICAgICAgIHByaW50ZXI6IGEgUHJpbnRlciBvYmplY3QgdG8g
cmVjb3JkIHVwZGF0ZXMgdG8uCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9y
dAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl9tZXRlciA9
IG1ldGVyCisgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCiAKICAgICAgICAgIyBkaXNh
YmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgog
ICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0gd2Vic29ja2V0X3NlcnZl
ci5QeVdlYlNvY2tldCgKQEAgLTIyOCwxMiArMjc4LDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAg
ICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQogICAgICAgICBzZWxmLl9yZXN1bHRf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAKLSAgICAgICAgIyBUaGVzZSBhcmUgdXNlZCBmb3IgLS1s
b2cgZGV0YWlsZWQtcHJvZ3Jlc3MgdG8gdHJhY2sgc3RhdHVzIGJ5Ci0gICAgICAgICMgZGlyZWN0
b3J5LgotICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IE5vbmUKLSAgICAgICAgc2VsZi5fY3Vy
cmVudF9wcm9ncmVzc19zdHIgPSAiIgotICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVy
ID0gMAotCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UKIAogICAgICAgICAjIEhhY2sg
Zm9yIGR1bXBpbmcgdGhyZWFkcyBvbiB0aGUgYm90cwpAQCAtMjc5LDE5ICszMjMsMTYgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2Ug
ZXJyCiAKLSAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHNlbGYsIHdyaXRl
KToKKyAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHNlbGYpOgogICAgICAg
ICAiIiJDcmVhdGUgYXBwcm9wcmlhdGUgc3Vic2V0cyBvZiB0ZXN0IGxpc3RzIGFuZCByZXR1cm5z
IGEKICAgICAgICAgUmVzdWx0U3VtbWFyeSBvYmplY3QuIEFsc28gcHJpbnRzIGV4cGVjdGVkIHRl
c3QgY291bnRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sg
dG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAg
IHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICIiIgogCiAgICAgICAgICMgUmVtb3ZlIHNraXBw
ZWQgLSBib3RoIGZpeGFibGUgYW5kIGlnbm9yZWQgLSBmaWxlcyBmcm9tIHRoZQogICAgICAgICAj
IHRvcC1sZXZlbCBsaXN0IG9mIGZpbGVzIHRvIHRlc3QuCiAgICAgICAgIG51bV9hbGxfdGVzdF9m
aWxlcyA9IGxlbihzZWxmLl90ZXN0X2ZpbGVzKQotICAgICAgICB3cml0ZSgiRm91bmQ6ICAlZCB0
ZXN0cyIgJSBudW1fYWxsX3Rlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
ZXhwZWN0ZWQoIkZvdW5kOiAgJWQgdGVzdHMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobGVuKHNlbGYuX3Rlc3RfZmlsZXMpKSkKICAgICAgICAgaWYgbm90IG51bV9h
bGxfdGVzdF9maWxlczoKICAgICAgICAgICAgIF9sb2cuY3JpdGljYWwoIk5vIHRlc3RzIHRvIHJ1
bi4iKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTM1OCw3ICszOTksNyBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogCiAgICAgICAgICAgICB0ZXN0c19ydW5fbXNnID0gJ1J1bm5pbmc6ICVkIHRl
c3RzIChjaHVuayBzbGljZSBbJWQ6JWRdIG9mICVkKScgJSAoCiAgICAgICAgICAgICAgICAgKHNs
aWNlX2VuZCAtIHNsaWNlX3N0YXJ0KSwgc2xpY2Vfc3RhcnQsIHNsaWNlX2VuZCwgbnVtX3Rlc3Rz
KQotICAgICAgICAgICAgd3JpdGUodGVzdHNfcnVuX21zZykKKyAgICAgICAgICAgIHNlbGYuX3By
aW50LnByaW50X2V4cGVjdGVkKHRlc3RzX3J1bl9tc2cpCiAKICAgICAgICAgICAgICMgSWYgd2Ug
cmVhY2hlZCB0aGUgZW5kIGFuZCB3ZSBkb24ndCBoYXZlIGVub3VnaCB0ZXN0cywgd2UgcnVuIHNv
bWUKICAgICAgICAgICAgICMgZnJvbSB0aGUgYmVnaW5uaW5nLgpAQCAtMzY3LDcgKzQwOCw3IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgZXh0cmEgPSAxICsgY2h1bmtfbGVu
IC0gKHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KQogICAgICAgICAgICAgICAgIGV4dHJhX21zZyA9
ICgnICAgbGFzdCBjaHVuayBpcyBwYXJ0aWFsLCBhcHBlbmRpbmcgWzA6JWRdJyAlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmEpCi0gICAgICAgICAgICAgICAgd3JpdGUoZXh0cmFf
bXNnKQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoZXh0cmFf
bXNnKQogICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9tc2cgKz0gIlxuIiArIGV4dHJhX21zZwog
ICAgICAgICAgICAgICAgIGZpbGVzLmV4dGVuZCh0ZXN0X2ZpbGVzWzA6ZXh0cmFdKQogICAgICAg
ICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnksCkBAIC0zOTksMTcgKzQ0MCwxOCBAQCBjbGFzcyBUZXN0UnVubmVyOgog
CiAgICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFyeShzZWxmLl9leHBlY3RhdGlv
bnMsCiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIHwgc2tpcF9jaHVuaykKLSAgICAgICAg
c2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFy
eSwKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9z
dW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuUEFTUywgInBhc3NlcyIpCi0g
ICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0
X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShy
ZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkZBSUwsICJmYWls
dXJlcyIpCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0
ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNf
b2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkZM
QUtZLCAiZmxha3kiKQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5
cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9y
ZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0
aW9ucy5TS0lQLCAic2tpcHBlZCIpCiAKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5mb3JjZToK
LSAgICAgICAgICAgIHdyaXRlKCdSdW5uaW5nIGFsbCB0ZXN0cywgaW5jbHVkaW5nIHNraXBzICgt
LWZvcmNlKScpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCdSdW5u
aW5nIGFsbCB0ZXN0cywgaW5jbHVkaW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3NraXBzICgtLWZvcmNlKScpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAjIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBydW4gdGhlIHNraXBwZWQgdGVzdHMgKHRo
ZXkgd2VyZQogICAgICAgICAgICAgIyBzdWJ0cmFjdGVkIG91dCBvZiBzZWxmLl90ZXN0X2ZpbGVz
LCBhYm92ZSksIGJ1dCB3ZSBzdHViIG91dCB0aGUKQEAgLTQyMCw3ICs0NjIsNyBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcz0wKQogICAgICAg
ICAgICAgICAgIHJlc3VsdC50eXBlID0gdGVzdF9leHBlY3RhdGlvbnMuU0tJUAogICAgICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkPVRydWUpCi0gICAgICAg
IHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCcnKQogCiAg
ICAgICAgIHJldHVybiByZXN1bHRfc3VtbWFyeQogCkBAIC02MjUsMTEgKzY2NywxMSBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICBwbHVyYWwgPSAiIgogICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLmNoaWxkX3Byb2Nlc3NlcyA+IDE6CiAgICAgICAgICAgICBwbHVyYWwgPSAicyIKLSAgICAg
ICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKKyAgICAg
ICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzJXMgLi4uJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCks
IHBsdXJhbCkpCiAgICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50aWF0ZV9kdW1wX3JlbmRl
cl90cmVlX3RocmVhZHMoZmlsZV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBz
ZWxmLl9tZXRlci51cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAogICAgICAgICAj
IFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29sbGVjdCB0ZXN0IGZhaWx1cmVz
LgogICAgICAgICBmYWlsdXJlcyA9IHt9CkBAIC02ODIsNyArNzI0LDcgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBh
biBIVFRQIHNlcnZlci4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNl
bGYuSFRUUF9TVUJESVIpCiAKLSAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBwcmlu
dF9yZXN1bHRzKToKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAg
IiIiUnVuIGFsbCBvdXIgdGVzdHMgb24gYWxsIG91ciB0ZXN0IGZpbGVzLgogCiAgICAgICAgIEZv
ciBlYWNoIHRlc3QgZmlsZSwgd2UgcnVuIGVhY2ggdGVzdCB0eXBlLiBJZiB0aGVyZSBhcmUgYW55
IGZhaWx1cmVzLApAQCAtNjkwLDcgKzczMiw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAg
ICAgQXJnczoKICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogYSBzdW1tYXJ5IG9iamVjdCB0cmFj
a2luZyB0aGUgdGVzdCByZXN1bHRzLgotICAgICAgICAgIHByaW50X3Jlc3VsdHM6IHdoZXRoZXIg
b3Igbm90IHRvIHByaW50IHRoZSBzdW1tYXJ5IGF0IHRoZSBlbmQKIAogICAgICAgICBSZXR1cm46
CiAgICAgICAgICAgVGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJlc3VsdHMgKDAgPT0gc3VjY2Vz
cykKQEAgLTcwMCwxMSArNzQxLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHN0YXJ0
X3RpbWUgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIGlmIHNlbGYubmVlZHNfaHR0cCgpOgotICAg
ICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQor
ICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIEhUVFAgc2Vy
dmVyIC4uLicpCisKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQog
CiAgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09DS0VUX1NVQkRJUik6
Ci0gICAgICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2
ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGlu
ZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dl
YnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3Nl
cnZlci5TdGFydCgpCiAKQEAgLTcyNyw0MSArNzY5LDIyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAK
ICAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHdyaXRlID0gY3JlYXRl
X2xvZ2dpbmdfd3JpdGVyKHNlbGYuX29wdGlvbnMsICd0aW1pbmcnKQotICAgICAgICBzZWxmLl9w
cmludF90aW1pbmdfc3RhdGlzdGljcyh3cml0ZSwgZW5kX3RpbWUgLSBzdGFydF90aW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGlt
aW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkpCi0KLSAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCIiKQotCi0gICAgICAgIGlmIHNl
bGYuX29wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgICMgV2Ugd3JpdGUgdGhpcyBibG9jayB0
byBzdGRvdXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKLSAgICAgICAgICAgICMgYnVpbGRi
b3QgbG9nIHBhcnNlciwgd2hpY2ggb25seSBsb29rcyBhdCBzdGRvdXQsIG5vdCBzdGRlcnIgOigK
LSAgICAgICAgICAgIHdyaXRlID0gbGFtYmRhIHM6IHN5cy5zdGRvdXQud3JpdGUoIiVzXG4iICUg
cykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3Jp
dGVyKHNlbGYuX29wdGlvbnMsICdhY3R1YWwnKQorICAgICAgICBzZWxmLl9wcmludF90aW1pbmdf
c3RhdGlzdGljcyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKIAotICAg
ICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnkpCisg
ICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQogCiAgICAg
ICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKIAotICAg
ICAgICAjIFRoaXMgc3VtbWFyeSBkYXRhIGdldHMgd3JpdHRlbiB0byBzdGRvdXQgcmVnYXJkbGVz
cyBvZiBsb2cgbGV2ZWwKLSAgICAgICAgIyAodW5sZXNzIG9mIGNvdXJzZSB3ZSdyZSBwcmludGlu
ZyBub3RoaW5nKS4KLSAgICAgICAgaWYgcHJpbnRfcmVzdWx0czoKLSAgICAgICAgICAgIGlmIChM
T0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5fb3B0aW9ucy5sb2cgb3IKLSAgICAgICAgICAg
ICAgICAoTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCi0gICAgICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRvdGFsICE9IHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkKSk6
Ci0gICAgICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIGlmIExPR19TVU1NQVJZIGluIHNl
bGYuX29wdGlvbnMubG9nOgotICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5lX3N1
bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWwsCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
b25lX2xpbmVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeS50b3RhbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkKQogCi0g
ICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX3N1bW1hcml6ZV91bmV4cGVjdGVkX3Jl
c3VsdHMocmVzdWx0X3N1bW1hcnksCi0gICAgICAgICAgICByZXRyeV9zdW1tYXJ5KQotICAgICAg
ICBpZiBMT0dfVU5FWFBFQ1RFRF9SRVNVTFRTIGluIHNlbGYuX29wdGlvbnMubG9nOgotICAgICAg
ICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVuZXhwZWN0ZWRfcmVzdWx0cykK
KyAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0
cyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3Vt
bWFyeSwgcmV0cnlfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91bmV4cGVj
dGVkX3Jlc3VsdHModW5leHBlY3RlZF9yZXN1bHRzKQogCiAgICAgICAgICMgV3JpdGUgdGhlIHNh
bWUgZGF0YSB0byBsb2cgZmlsZXMuCiAgICAgICAgIHNlbGYuX3dyaXRlX2pzb25fZmlsZXModW5l
eHBlY3RlZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwKQEAgLTc4MywxMTIgKzgwNiwxNiBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3Jlc3VsdF9x
dWV1ZS5nZXRfbm93YWl0KCkKICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKICAgICAg
ICAgICAgICAgICByZXR1cm4KKwogICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3Rh
dGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCiAgICAgICAgICAgICAgICAgcmVzdWx0
LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkKQotICAgICAgICAgICAg
c2VsZi5fcHJpbnRfdGVzdF9yZXN1bHRzKHJlc3VsdCwgZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5
KQotCi0gICAgZGVmIF9wcmludF90ZXN0X3Jlc3VsdHMoc2VsZiwgcmVzdWx0LCBleHBlY3RlZCwg
cmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBh
cyBkZXRlcm1pbmVkIGJ5IHRoZSAtLWxvZyBzd2l0Y2hlcy4iCi0gICAgICAgIGlmIExPR19UUkFD
RSBpbiBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfdHJh
Y2UocmVzdWx0KQotICAgICAgICBlbGlmIChMT0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5f
b3B0aW9ucy5sb2cgYW5kCi0gICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRh
bF9mdWxseV9wYXJhbGxlbCBvcgotICAgICAgICAgICAgICAgc2VsZi5faXNfc2luZ2xlX3RocmVh
ZGVkKCkpKToKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHJlc3Vs
dF9zdW1tYXJ5KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgKG5vdCBleHBlY3RlZCBh
bmQgTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cpOgotICAgICAgICAgICAgICAg
IHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQocmVzdWx0KQotICAgICAgICAgICAg
c2VsZi5fcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYg
X3ByaW50X3Rlc3RfdHJhY2Uoc2VsZiwgcmVzdWx0KToKLSAgICAgICAgIiIiUHJpbnQgZGV0YWls
ZWQgcmVzdWx0cyBvZiBhIHRlc3QgKHRyaWdnZXJlZCBieSAtLWxvZyB0cmFjZSkuCi0gICAgICAg
IEZvciBlYWNoIHRlc3QsIHByaW50OgotICAgICAgICAgICAtIGxvY2F0aW9uIG9mIHRoZSBleHBl
Y3RlZCBiYXNlbGluZXMKLSAgICAgICAgICAgLSBleHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAg
IC0gYWN0dWFsIHJlc3VsdAotICAgICAgICAgICAtIHRpbWluZyBpbmZvCi0gICAgICAgICIiIgot
ICAgICAgICBmaWxlbmFtZSA9IHJlc3VsdC5maWxlbmFtZQotICAgICAgICB0ZXN0X25hbWUgPSBz
ZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgICAgIF9sb2cu
aW5mbygndHJhY2U6ICVzJyAlIHRlc3RfbmFtZSkKLSAgICAgICAgX2xvZy5pbmZvKCcgIHR4dDog
JXMnICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShm
aWxlbmFtZSwgJy50eHQnKSkpCi0gICAgICAgIHBuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3Rl
ZF9maWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhw
bmdfZmlsZSk6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgcG5nOiAlcycgJQotICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgcG5nOiA8bm9uZT4nKQot
ICAgICAgICBfbG9nLmluZm8oJyAgZXhwOiAlcycgJQotICAgICAgICAgICAgICAgICAgc2VsZi5f
ZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKSkKLSAgICAgICAg
X2xvZy5pbmZvKCcgIGdvdDogJXMnICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0
aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpKQotICAgICAgICBfbG9nLmlu
Zm8oJyB0b29rOiAlLS4zZicgJSByZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgX2xvZy5p
bmZvKCcnKQotCi0gICAgZGVmIF9wcmludF9vbmVfbGluZV9wcm9ncmVzcyhzZWxmLCByZXN1bHRf
c3VtbWFyeSk6Ci0gICAgICAgICIiIkRpc3BsYXlzIHRoZSBwcm9ncmVzcyB0aHJvdWdoIHRoZSB0
ZXN0IHJ1bi4iIiIKLSAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAqIChyZXN1bHRfc3Vt
bWFyeS5leHBlY3RlZCArCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkKSAv
IHJlc3VsdF9zdW1tYXJ5LnRvdGFsCi0gICAgICAgIGFjdGlvbiA9ICJUZXN0aW5nIgotICAgICAg
ICBpZiBzZWxmLl9yZXRyeWluZzoKLSAgICAgICAgICAgIGFjdGlvbiA9ICJSZXRyeWluZyIKLSAg
ICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzICglZCUlKTogJWQgcmFuIGFzIGV4cGVjdGVk
LCAlZCBkaWRuJ3QsIgotICAgICAgICAgICAgIiAlZCBsZWZ0IiAlIChhY3Rpb24sIHBlcmNlbnRf
Y29tcGxldGUsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLAotICAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5LnVuZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykpCi0KLSAgICBkZWYg
X3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAg
IiIiRGlzcGxheSBkZXRhaWxlZCBwcm9ncmVzcyBvdXRwdXQgd2hlcmUgd2UgcHJpbnQgdGhlIGRp
cmVjdG9yeSBuYW1lCi0gICAgICAgIGFuZCBvbmUgZG90IGZvciBlYWNoIGNvbXBsZXRlZCB0ZXN0
LiBUaGlzIGlzIHRyaWdnZXJlZCBieQotICAgICAgICAiLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3Mi
LiIiIgotICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90
ZXN0X2ZpbGVzX2xpc3QpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgbmV4dF90ZXN0
ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCi0gICAg
ICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCi0gICAgICAgIGlmIHNlbGYuX2N1cnJl
bnRfcHJvZ3Jlc3Nfc3RyID09ICIiOgotICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVz
c19zdHIgPSAiJXM6ICIgJSAobmV4dF9kaXIpCi0gICAgICAgICAgICBzZWxmLl9jdXJyZW50X2Rp
ciA9IG5leHRfZGlyCi0KLSAgICAgICAgd2hpbGUgbmV4dF90ZXN0IGluIHJlc3VsdF9zdW1tYXJ5
LnJlc3VsdHM6Ci0gICAgICAgICAgICBpZiBuZXh0X2RpciAhPSBzZWxmLl9jdXJyZW50X2RpcjoK
LSAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSAoc2VsZi5fY3VycmVu
dF9wcm9ncmVzc19zdHIpKQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nf
c3RyID0gIiVzOiAuIiAlIChuZXh0X2RpcikKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50
X2RpciA9IG5leHRfZGlyCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYu
X2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyICs9ICIuIgotCi0gICAgICAgICAgICBpZiAobmV4dF90ZXN0
IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cyBhbmQKLSAgICAgICAgICAgICAg
ICBMT0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRpb25zLmxvZyk6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW25leHRfdGVzdF0KLSAg
ICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSBzZWxmLl9jdXJyZW50X3By
b2dyZXNzX3N0cikKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3Rf
cmVzdWx0KG5leHRfdGVzdCwgcmVzdWx0KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRf
cHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgc2VsZi5fY3VycmVudF9kaXIKLQotICAgICAgICAgICAg
c2VsZi5fY3VycmVudF90ZXN0X251bWJlciArPSAxCi0gICAgICAgICAgICBpZiBzZWxmLl9jdXJy
ZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpOgotICAgICAgICAg
ICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNf
bGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQotICAgICAgICAgICAgbmV4dF9kaXIgPSBv
cy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKG5leHRfdGVzdCkpCi0KLSAgICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWlu
aW5nOgotICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnku
cmVtYWluaW5nKQotICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzJXMiICUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0
ciwgcmVtYWluX3N0cikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9tZXRlci5w
cm9ncmVzcygiJXNcbiIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQotCi0gICAgZGVm
IF9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgICIi
IlByaW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgotICAgICAgICBkZXNj
ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdC50
eXBlXVswXQotICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVkICVz
XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZShyZXN1bHQuZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzYykpCisgICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBl
Y3RhdGlvbnNfc3RyaW5nKAorICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAgICAg
ICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5n
KHJlc3VsdC50eXBlKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3Vs
dChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQorICAgICAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNf
bGlzdCkKIAogICAgIGRlZiBfZ2V0X2ZhaWx1cmVzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBpbmNs
dWRlX2NyYXNoZXMpOgogICAgICAgICAiIiJGaWx0ZXJzIGEgZGljdCBvZiByZXN1bHRzIGFuZCBy
ZXR1cm5zIG9ubHkgdGhlIGZhaWx1cmVzLgpAQCAtOTExLDgwICs4MzgsNiBAQCBjbGFzcyBUZXN0
UnVubmVyOgogCiAgICAgICAgIHJldHVybiBmYWlsZWRfcmVzdWx0cwogCi0gICAgZGVmIF9zdW1t
YXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeV9zdW1t
YXJ5KToKLSAgICAgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMgYSBk
aWN0LgotCi0gICAgICAgIFRPRE8oZHByYW5rZSk6IHNwbGl0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUg
aW50byBhIHNlcGFyYXRlIGNsYXNzPwotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcmVzdWx0
X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gaW5pdGlhbCB0ZXN0IHJ1bnMKLSAgICAgICAg
ICByZXRyeV9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3QgcnVuIG9mIHJl
dHJpZWQgdGVzdHMKLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBBIGRpY3Rpb25hcnkgY29u
dGFpbmluZyBhIHN1bW1hcnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQotICAg
ICAgICAgIHJ1biwgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKLSAgICAgICAgICAgICd2ZXJz
aW9uJzogYSB2ZXJzaW9uIGluZGljYXRvciAoMSBpbiB0aGlzIHZlcnNpb24pCi0gICAgICAgICAg
ICAnZml4YWJsZSc6ICMgb2YgZml4YWJsZSB0ZXN0cyAoTk9XIC0gUEFTUykKLSAgICAgICAgICAg
ICdza2lwcGVkJzogIyBvZiBza2lwcGVkIHRlc3RzIChOT1cgJiBTS0lQUEVEKQotICAgICAgICAg
ICAgJ251bV9yZWdyZXNzaW9ucyc6ICMgb2Ygbm9uLWZsYWt5IGZhaWx1cmVzCi0gICAgICAgICAg
ICAnbnVtX2ZsYWt5JzogIyBvZiBmbGFreSBmYWlsdXJlcwotICAgICAgICAgICAgJ251bV9wYXNz
ZXMnOiAjIG9mIHVuZXhwZWN0ZWQgcGFzc2VzCi0gICAgICAgICAgICAndGVzdHMnOiBhIGRpY3Qg
b2YgdGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4nLCAnYWN0dWFsJzogJy4uLid9Ci0gICAgICAg
ICIiIgotICAgICAgICByZXN1bHRzID0ge30KLSAgICAgICAgcmVzdWx0c1sndmVyc2lvbiddID0g
MQotCi0gICAgICAgIHRiZSA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uCi0g
ICAgICAgIHRidCA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lCi0gICAgICAgIHJl
c3VsdHNbJ2ZpeGFibGUnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlvbnMuUEFTU10p
Ci0gICAgICAgIHJlc3VsdHNbJ3NraXBwZWQnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMu
Tk9XXSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3Rh
dGlvbnMuU0tJUF0pCi0KLSAgICAgICAgbnVtX3Bhc3NlcyA9IDAKLSAgICAgICAgbnVtX2ZsYWt5
ID0gMAotICAgICAgICBudW1fcmVncmVzc2lvbnMgPSAwCi0gICAgICAgIGtleXdvcmRzID0ge30K
LSAgICAgICAgZm9yIGssIHYgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TLml0
ZXJpdGVtcygpOgotICAgICAgICAgICAga2V5d29yZHNbdl0gPSBrLnVwcGVyKCkKLQotICAgICAg
ICB0ZXN0cyA9IHt9Ci0gICAgICAgIGZvciBmaWxlbmFtZSwgcmVzdWx0IGluIHJlc3VsdF9zdW1t
YXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICMgTm90ZSB0
aGF0IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5hbCBydW4sIHdlIGlnbm9yZQotICAg
ICAgICAgICAgIyB3aGV0aGVyIG9yIG5vdCBpdCBjcmFzaGVkIHdoZW4gd2UgcmV0cmllZCBpdCAo
aWYgd2UgcmV0cmllZCBpdCksCi0gICAgICAgICAgICAjIGFuZCBhbHdheXMgY29uc2lkZXIgdGhl
IHJlc3VsdCBub3QgZmxha3kuCi0gICAgICAgICAgICB0ZXN0ID0gc2VsZi5fcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9l
eHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoZmlsZW5hbWUpCi0gICAgICAgICAg
ICBhY3R1YWwgPSBba2V5d29yZHNbcmVzdWx0XV0KLQotICAgICAgICAgICAgaWYgcmVzdWx0ID09
IHRlc3RfZXhwZWN0YXRpb25zLlBBU1M6Ci0gICAgICAgICAgICAgICAgbnVtX3Bhc3NlcyArPSAx
Ci0gICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKLSAg
ICAgICAgICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVk
X3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgICAgIGFjdHVhbC5leHRlbmQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmco
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkuc3BsaXQoIiAiKSkKLSAgICAgICAg
ICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICByZXRyeV9yZXN1bHQgPSByZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVz
dWx0c1tmaWxlbmFtZV0KLSAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0ICE9IHJldHJ5X3Jl
c3VsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5hcHBlbmQoa2V5d29yZHNbcmV0
cnlfcmVzdWx0XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCi0gICAg
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBudW1fcmVncmVz
c2lvbnMgKz0gMQotCi0gICAgICAgICAgICB0ZXN0c1t0ZXN0XSA9IHt9Ci0gICAgICAgICAgICB0
ZXN0c1t0ZXN0XVsnZXhwZWN0ZWQnXSA9IGV4cGVjdGVkCi0gICAgICAgICAgICB0ZXN0c1t0ZXN0
XVsnYWN0dWFsJ10gPSAiICIuam9pbihhY3R1YWwpCi0KLSAgICAgICAgcmVzdWx0c1sndGVzdHMn
XSA9IHRlc3RzCi0gICAgICAgIHJlc3VsdHNbJ251bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMKLSAg
ICAgICAgcmVzdWx0c1snbnVtX2ZsYWt5J10gPSBudW1fZmxha3kKLSAgICAgICAgcmVzdWx0c1sn
bnVtX3JlZ3Jlc3Npb25zJ10gPSBudW1fcmVncmVzc2lvbnMKLQotICAgICAgICByZXR1cm4gcmVz
dWx0cwotCiAgICAgZGVmIF93cml0ZV9qc29uX2ZpbGVzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0
cywgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5ncyk6CiAgICAgICAgICIiIldyaXRlcyB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdCBy
dW4gYXMgSlNPTiBmaWxlcyBpbnRvIHRoZSByZXN1bHRzCkBAIC0xMDI1LDEzICs4NzgsMTEgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBfbG9nLmRlYnVnKCJGaW5pc2hlZCB3cml0aW5n
IEpTT04gZmlsZXMuIikKIAotICAgIGRlZiBfcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBl
KHNlbGYsIHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jl
c3VsdHNfb2ZfdHlwZShzZWxmLCByZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRfdHlwZSwgcmVzdWx0X3R5cGVfc3RyKToKICAgICAg
ICAgIiIiUHJpbnQgdGhlIG51bWJlciBvZiB0aGUgdGVzdHMgaW4gYSBnaXZlbiByZXN1bHQgY2xh
c3MuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0
ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgc3lzLnN0
ZG91dC53cml0ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeSAtIHRoZSBvYmplY3QgY29udGFp
bmluZyBhbGwgdGhlIHJlc3VsdHMgdG8gcmVwb3J0IG9uCiAgICAgICAgICAgcmVzdWx0X3R5cGUg
LSB0aGUgcGFydGljdWxhciByZXN1bHQgdHlwZSB0byByZXBvcnQgaW4gdGhlIHN1bW1hcnkuCiAg
ICAgICAgICAgcmVzdWx0X3R5cGVfc3RyIC0gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHJl
c3VsdF90eXBlLgpAQCAtMTA0Niw4ICs4OTcsOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAg
ICBmbXRzdHIgPSAoIkV4cGVjdDogJSU1ZCAlJS04cyAoJSUlZGQgbm93LCAlJSVkZCBkZWZlciwg
JSUlZGQgd29udGZpeCkiCiAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9udW1fZGlnaXRzKG5v
dyksIHNlbGYuX251bV9kaWdpdHMoZGVmZXIpLAogICAgICAgICAgICAgICAgICAgc2VsZi5fbnVt
X2RpZ2l0cyh3b250Zml4KSkpCi0gICAgICAgIHdyaXRlKGZtdHN0ciAlIChsZW4odGVzdHMpLCBy
ZXN1bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksCi0gICAgICAgICAgICAgIGxlbih0ZXN0
cyAmIGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQorICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X2V4cGVjdGVkKGZtdHN0ciAlCisgICAgICAgICAgICAobGVuKHRlc3RzKSwgcmVzdWx0
X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cpLAorICAgICAgICAgICAgIGxlbih0ZXN0cyAmIGRl
ZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQogCiAgICAgZGVmIF9udW1fZGlnaXRzKHNlbGYs
IG51bSk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBkaWdpdHMgbmVlZGVkIHRv
IHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9mIGEKQEAgLTEwNTcsNDMgKzkwOSwzOSBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICAgICAgbmRpZ2l0cyA9IGludChtYXRoLmxvZzEwKGxlbihudW0p
KSkgKyAxCiAgICAgICAgIHJldHVybiBuZGlnaXRzCiAKLSAgICBkZWYgX3ByaW50X3RpbWluZ19z
dGF0aXN0aWNzKHNlbGYsIHdyaXRlLCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKKyAgICBk
ZWYgX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHNlbGYsIHRvdGFsX3RpbWUsIHRocmVhZF90aW1p
bmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWlu
Z3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUmVjb3JkIHRpbWluZy1zcGVjaWZpYyBp
bmZvcm1hdGlvbiBmb3IgdGhlIHRlc3QgcnVuLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAg
d3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVy
KSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIHRvdGFsX3Rp
bWU6IHRvdGFsIGVsYXBzZWQgdGltZSAoaW4gc2Vjb25kcykgZm9yIHRoZSB0ZXN0IHJ1bgogICAg
ICAgICAgIHRocmVhZF90aW1pbmdzOiB3YWxsIGNsb2NrIHRpbWUgZWFjaCB0aHJlYWQgcmFuIGZv
cgogICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBkaXJlY3RvcnkK
ICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGZpbGUKICAgICAg
ICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9yIHRoZSB0ZXN0IHJ1bgogICAg
ICAgICAiIiIKLSAgICAgICAgd3JpdGUoIlRlc3QgdGltaW5nOiIpCi0gICAgICAgIHdyaXRlKCIg
ICU2LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIgJSB0b3RhbF90aW1lKQotICAgICAgICB3cml0ZSgi
IikKLSAgICAgICAgd3JpdGUoIlRocmVhZCB0aW1pbmc6IikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90aW1pbmcoIlRlc3QgdGltaW5nOiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdGltaW5nKCIgICU2LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIgJSB0b3RhbF90aW1lKQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90aW1pbmcoIlRocmVhZCB0aW1pbmc6IikKICAgICAgICAgY3VtbF90aW1lID0gMAog
ICAgICAgICBmb3IgdCBpbiB0aHJlYWRfdGltaW5nczoKLSAgICAgICAgICAgIHdyaXRlKCIgICAg
JTEwczogJTVkIHRlc3RzLCAlNi4yZiBzZWNzIiAlCisgICAgICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3RpbWluZygiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQogICAgICAg
ICAgICAgICAgICAgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUnXSkp
CiAgICAgICAgICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSddCi0gICAgICAgIHdyaXRl
KCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAl
CiAgICAgICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIGludChzZWxmLl9vcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcykpKQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiIpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRlX3Rl
c3Rfc3RhdGlzdGljcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCi0gICAgICAgIHNl
bGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MsCisgICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3MoaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVz
dF90aW1lcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBzZWxmLl9wcmludF9k
aXJlY3RvcnlfdGltaW5ncyh3cml0ZSwgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKKyAgICAgICAg
c2VsZi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3MoZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKIAot
ICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3Rh
dGlzdGljcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIlByaW50
cyBhZ2dyZWdhdGUgc3RhdGlzdGljcyAoZS5nLiBtZWRpYW4sIG1lYW4sIGV0Yy4pIGZvciBhbGwg
dGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3Jp
dGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMu
c3Rkb3V0LndyaXRlLgogICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9m
IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwogICAgICAgICAgICAgICBmb3IgYWxs
IHRlc3RzLgogICAgICAgICAiIiIKQEAgLTExMTUsMjMgKzk2MywyMSBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXS5hcHBl
bmQoCiAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZV0pCiAKLSAg
ICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAg
ICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAg
ICAiUEVSIFRFU1QgVElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMpOiIsCiAgICAgICAgICAgICB0
aW1lc19mb3JfZHVtcF9yZW5kZXJfdHJlZSkKLSAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGlj
c19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNz
X2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAiUEVSIFRFU1QgRElGRiBQUk9DRVNTSU5H
IFRJTUVTIChzZWNvbmRzKToiLAogICAgICAgICAgICAgdGltZXNfZm9yX2RpZmZfcHJvY2Vzc2lu
ZykKICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgotICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICAgICAg
c2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKAogICAgICAgICAgICAgICAg
ICJQRVIgVEVTVCBUSU1FUyBCWSBURVNUIFRZUEU6ICVzIiAlIHRlc3RfdHlwZSwKICAgICAgICAg
ICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlwZV0pCiAKLSAgICBkZWYgX3ByaW50
X2luZGl2aWR1YWxfdGVzdF90aW1lcyhzZWxmLCB3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3MsCisgICAgZGVmIF9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoc2VsZiwgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
X3N1bW1hcnkpOgogICAgICAgICAiIiJQcmludHMgdGhlIHJ1biB0aW1lcyBmb3Igc2xvdywgdGlt
ZW91dCBhbmQgY3Jhc2ggdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEg
Y2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAg
ICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzOiBMaXN0IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwogICAgICAg
ICAgICAgICBmb3IgYWxsIHRlc3RzLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5
IG9iamVjdCBmb3IgdGVzdCBydW4KQEAgLTExNTMsNTMgKzk5OSw1MyBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCiAKICAg
ICAgICAgICAgIGlmIGZpbGVuYW1lIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzOgotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbZmlsZW5hbWVdCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0c1tmaWxlbmFtZV0udHlw
ZQogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9V
VCBvcgogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JB
U0gpOgogICAgICAgICAgICAgICAgICAgICBpc190aW1lb3V0X2NyYXNoX29yX3Nsb3cgPSBUcnVl
CiAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMuYXBwZW5kKHRlc3Rf
dHVwbGUpCiAKICAgICAgICAgICAgIGlmIChub3QgaXNfdGltZW91dF9jcmFzaF9vcl9zbG93IGFu
ZAotICAgICAgICAgICAgICAgIG51bV9wcmludGVkIDwgc2VsZi5fb3B0aW9ucy5udW1fc2xvd190
ZXN0c190b19sb2cpOgorICAgICAgICAgICAgICAgIG51bV9wcmludGVkIDwgcHJpbnRpbmcuTlVN
X1NMT1dfVEVTVFNfVE9fTE9HKToKICAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA9IG51bV9w
cmludGVkICsgMQogICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRfc2xvd190ZXN0cy5hcHBlbmQo
dGVzdF90dXBsZSkKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfdGVz
dF9saXN0X3RpbWluZyh3cml0ZSwgIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90ICIKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3ByaW50
X3Rlc3RfbGlzdF90aW1pbmcoIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90ICIKICAgICAg
ICAgICAgICJtYXJrZWQgYXMgU0xPVyBhbmQgZGlkIG5vdCB0aW1lb3V0L2NyYXNoOiIgJQotICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5udW1fc2xvd190ZXN0c190b19sb2csIHVuZXhwZWN0ZWRf
c2xvd190ZXN0cykKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Rlc3Rf
bGlzdF90aW1pbmcod3JpdGUsICJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMpCi0gICAgICAgIHdyaXRlKCIiKQot
ICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgdGhhdCB0
aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAorICAgICAgICAgICAgcHJpbnRpbmcuTlVNX1NMT1dfVEVT
VFNfVE9fTE9HLCB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMpCisgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKCJU
ZXN0cyBtYXJrZWQgYXMgU0xPVzoiLCBzbG93X3Rlc3RzKQorICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZygi
VGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMpCi0gICAgICAgIHdyaXRlKCIi
KQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKIAotICAgIGRlZiBfcHJp
bnRfdGVzdF9saXN0X3RpbWluZyhzZWxmLCB3cml0ZSwgdGl0bGUsIHRlc3RfbGlzdCk6CisgICAg
ZGVmIF9wcmludF90ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHRpdGxlLCB0ZXN0X2xpc3QpOgogICAg
ICAgICAiIiJQcmludCB0aW1pbmcgaW5mbyBmb3IgZWFjaCB0ZXN0LgogCiAgICAgICAgIEFyZ3M6
Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBM
b2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAg
ICAgIHRpdGxlOiBzZWN0aW9uIGhlYWRpbmcKICAgICAgICAgICB0ZXN0X2xpc3Q6IHRlc3RzIHRo
YXQgZmFsbCBpbiB0aGlzIHNlY3Rpb24KICAgICAgICAgIiIiCi0gICAgICAgIHdyaXRlKHRpdGxl
KQorICAgICAgICBpZiAobm90ICdzbG93ZXN0JyBpbiBzZWxmLl9vcHRpb25zLmxvZyBhbmQgbm90
ICdldmVyeWluZycgaW4KKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubG9nKToKKyAgICAgICAg
ICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKHRpdGxlKQog
ICAgICAgICBmb3IgdGVzdF90dXBsZSBpbiB0ZXN0X2xpc3Q6CiAgICAgICAgICAgICBmaWxlbmFt
ZSA9IHRlc3RfdHVwbGUuZmlsZW5hbWVbbGVuKAogICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQu
bGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XQogICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFt
ZS5yZXBsYWNlKCdcXCcsICcvJykKICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWUgPSByb3VuZCh0
ZXN0X3R1cGxlLnRlc3RfcnVuX3RpbWUsIDEpCi0gICAgICAgICAgICB3cml0ZSgiICAlcyB0b29r
ICVzIHNlY29uZHMiICUgKGZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lKSkKKyAgICAgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICVzIHRvb2sgJXMgc2Vjb25kcyIgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVuYW1lLCB0ZXN0X3J1bl90aW1l
KSkKIAotICAgIGRlZiBfcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Moc2VsZiwgd3JpdGUsIGRpcmVj
dG9yeV90ZXN0X3RpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Moc2Vs
ZiwgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIlByaW50IHRpbWluZyBpbmZv
IGJ5IGRpcmVjdG9yeSBmb3IgYW55IGRpcmVjdG9yaWVzIHRoYXQKICAgICAgICAgdGFrZSA+IDEw
IHNlY29uZHMgdG8gcnVuLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2Fs
bGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAg
ICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWlu
ZzogdGltZSBpbmZvIGZvciBlYWNoIGRpcmVjdG9yeQogICAgICAgICAiIiIKICAgICAgICAgdGlt
aW5ncyA9IFtdCkBAIC0xMjA5LDI1ICsxMDU1LDI0IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Rlc3RzKSkKICAgICAgICAgdGltaW5ncy5zb3J0
KCkKIAotICAgICAgICB3cml0ZSgiVGltZSB0byBwcm9jZXNzIHNsb3dlc3Qgc3ViZGlyZWN0b3Jp
ZXM6IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRpbWUgdG8gcHJvY2Vz
cyBzbG93ZXN0IHN1YmRpcmVjdG9yaWVzOiIpCiAgICAgICAgIG1pbl9zZWNvbmRzX3RvX3ByaW50
ID0gMTAKICAgICAgICAgZm9yIHRpbWluZyBpbiB0aW1pbmdzOgogICAgICAgICAgICAgaWYgdGlt
aW5nWzBdID4gbWluX3NlY29uZHNfdG9fcHJpbnQ6Ci0gICAgICAgICAgICAgICAgd3JpdGUoIiAg
JXMgdG9vayAlcyBzZWNvbmRzIHRvIHJ1biAlcyB0ZXN0cy4iICUgKHRpbWluZ1sxXSwKLSAgICAg
ICAgICAgICAgICAgICAgICB0aW1pbmdbMF0sIHRpbWluZ1syXSkpCi0gICAgICAgIHdyaXRlKCIi
KQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKAorICAgICAgICAg
ICAgICAgICAgICAiICAlcyB0b29rICVzIHNlY29uZHMgdG8gcnVuICVzIHRlc3RzLiIgJSAodGlt
aW5nWzFdLAorICAgICAgICAgICAgICAgICAgICB0aW1pbmdbMF0sIHRpbWluZ1syXSkpCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQogCi0gICAgZGVmIF9wcmludF9zdGF0
aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Moc2VsZiwgd3JpdGUsIHRpdGxlLCB0aW1pbmdzKToKKyAg
ICBkZWYgX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyhzZWxmLCB0aXRsZSwgdGlt
aW5ncyk6CiAgICAgICAgICIiIlByaW50cyB0aGUgbWVkaWFuLCBtZWFuIGFuZCBzdGFuZGFyZCBk
ZXZpYXRpb24gb2YgdGhlIHZhbHVlcyBpbgogICAgICAgICB0aW1pbmdzLgogCiAgICAgICAgIEFy
Z3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwg
YSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAg
ICAgICAgIHRpdGxlOiBUaXRsZSBmb3IgdGhlc2UgdGltaW5ncy4KICAgICAgICAgICB0aW1pbmdz
OiBBIGxpc3Qgb2YgZmxvYXRzIHJlcHJlc2VudGluZyB0aW1lcy4KICAgICAgICAgIiIiCi0gICAg
ICAgIHdyaXRlKHRpdGxlKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZyh0aXRs
ZSkKICAgICAgICAgdGltaW5ncy5zb3J0KCkKIAogICAgICAgICBudW1fdGVzdHMgPSBsZW4odGlt
aW5ncykKQEAgLTEyNDksMTkgKzEwOTQsMTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
ICAgIHN1bV9vZl9kZXZpYXRpb25zID0gbWF0aC5wb3codGltZSAtIG1lYW4sIDIpCiAKICAgICAg
ICAgc3RkX2RldmlhdGlvbiA9IG1hdGguc3FydChzdW1fb2ZfZGV2aWF0aW9ucyAvIG51bV90ZXN0
cykKLSAgICAgICAgd3JpdGUoIiAgTWVkaWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRpYW4pCi0g
ICAgICAgIHdyaXRlKCIgIE1lYW46ICAgICAgICAgICAgJTYuM2YiICUgbWVhbikKLSAgICAgICAg
d3JpdGUoIiAgOTB0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTApCi0gICAgICAg
IHdyaXRlKCIgIDk5dGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTk5KQotICAgICAg
ICB3cml0ZSgiICBTdGFuZGFyZCBkZXY6ICAgICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCi0gICAg
ICAgIHdyaXRlKCIiKQotCi0gICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCB3cml0
ZSwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygi
ICBNZWRpYW46ICAgICAgICAgICU2LjNmIiAlIG1lZGlhbikKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90aW1pbmcoIiAgTWVhbjogICAgICAgICAgICAlNi4zZiIgJSBtZWFuKQorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICA5MHRoIHBlcmNlbnRpbGU6ICU2LjNmIiAl
IHBlcmNlbnRpbGU5MCkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgOTl0
aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTkpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGltaW5nKCIgIFN0YW5kYXJkIGRldjogICAgJTYuM2YiICUgc3RkX2RldmlhdGlv
bikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisKKyAgICBkZWYgX3By
aW50X3Jlc3VsdF9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUHJp
bnQgYSBzaG9ydCBzdW1tYXJ5IGFib3V0IGhvdyBtYW55IHRlc3RzIHBhc3NlZC4KIAogICAgICAg
ICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUu
Zy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4K
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogaW5mb3JtYXRpb24gdG8gbG9nCiAgICAgICAgICIi
IgogICAgICAgICBmYWlsZWQgPSBsZW4ocmVzdWx0X3N1bW1hcnkuZmFpbHVyZXMpCkBAIC0xMjcz
LDMwICsxMTE2LDI4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlmIHRvdGFsID4gMDoK
ICAgICAgICAgICAgIHBjdF9wYXNzZWQgPSBmbG9hdChwYXNzZWQpICogMTAwIC8gdG90YWwKIAot
ICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgd3JpdGUoIj0+IFJlc3VsdHM6ICVkLyVkIHRlc3Rz
IHBhc3NlZCAoJS4xZiUlKSIgJQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgi
IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIj0+IFJlc3VsdHM6ICVkLyVk
IHRlc3RzIHBhc3NlZCAoJS4xZiUlKSIgJQogICAgICAgICAgICAgICAgICAgICAgKHBhc3NlZCwg
dG90YWwsIHBjdF9wYXNzZWQpKQotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJp
bnRfcmVzdWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0
X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0
aW9ucy5OT1csICJUZXN0cyB0byBiZSBmaXhlZCBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZSIpCiAK
LSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2Vu
dHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9h
Y3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3Vs
dF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuREVGRVIsCiAgICAgICAg
ICAgICAiVGVzdHMgd2UnbGwgZml4IGluIHRoZSBmdXR1cmUgaWYgdGhleSBmYWlsIChERUZFUiki
KQogCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFy
eV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfYWN0dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShy
ZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLldPTlRGSVgsCiAg
ICAgICAgICAgICAiVGVzdHMgdGhhdCB3aWxsIG9ubHkgYmUgZml4ZWQgaWYgdGhleSBjcmFzaCAo
V09OVEZJWCkiKQogCi0gICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShzZWxmLCB3
cml0ZSwgcmVzdWx0X3N1bW1hcnksIHRpbWVsaW5lLAorICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1
bW1hcnlfZW50cnkoc2VsZiwgcmVzdWx0X3N1bW1hcnksIHRpbWVsaW5lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZyk6CiAgICAgICAgICIiIlByaW50IGEgc3Vt
bWFyeSBibG9jayBvZiByZXN1bHRzIGZvciBhIHBhcnRpY3VsYXIgdGltZWxpbmUgb2YgdGVzdC4K
IAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGlu
Zm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91
dC53cml0ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSB0byBwcmludCByZXN1
bHRzIGZvcgogICAgICAgICAgIHRpbWVsaW5lOiB0aGUgdGltZWxpbmUgdG8gcHJpbnQgcmVzdWx0
cyBmb3IgKE5PVCwgV09OVEZJWCwgZXRjLikKICAgICAgICAgICBoZWFkaW5nOiBhIHRleHR1YWwg
ZGVzY3JpcHRpb24gb2YgdGhlIHRpbWVsaW5lCkBAIC0xMzA1LDcgKzExNDYsNyBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBub3RfcGFzc2luZyA9ICh0b3RhbCAtCiAgICAgICAgICAgIGxl
bihyZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTXSAmCiAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0
aW1lbGluZV0pKQotICAgICAgICB3cml0ZSgiPT4gJXMgKCVkKToiICUgKGhlYWRpbmcsIG5vdF9w
YXNzaW5nKSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIj0+ICVzICglZCk6
IiAlIChoZWFkaW5nLCBub3RfcGFzc2luZykpCiAKICAgICAgICAgZm9yIHJlc3VsdCBpbiBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9PUkRFUjoKICAgICAgICAgICAgIGlmIHJlc3Vs
dCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgpAQCAtMTMxNSw5NCArMTE1Niw4IEBAIGNsYXNz
IFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQ
RUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF0KICAgICAgICAgICAgIGlmIG5vdF9wYXNzaW5n
IGFuZCBsZW4ocmVzdWx0cyk6CiAgICAgICAgICAgICAgICAgcGN0ID0gbGVuKHJlc3VsdHMpICog
MTAwLjAgLyBub3RfcGFzc2luZwotICAgICAgICAgICAgICAgIHdyaXRlKCIgICU1ZCAlLTI0cyAo
JTQuMWYlJSkiICUgKGxlbihyZXN1bHRzKSwKLSAgICAgICAgICAgICAgICAgICAgICBkZXNjW2xl
bihyZXN1bHRzKSAhPSAxXSwgcGN0KSkKLQotICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfc3VtbWFy
eShzZWxmLCB0b3RhbCwgZXhwZWN0ZWQpOgotICAgICAgICAiIiJQcmludCBhIG9uZS1saW5lIHN1
bW1hcnkgb2YgdGhlIHRlc3QgcnVuIHRvIHN0ZG91dC4KLQotICAgICAgICBBcmdzOgotICAgICAg
ICAgIHRvdGFsOiB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuCi0gICAgICAgICAgZXhwZWN0ZWQ6
IG51bWJlciBvZiBleHBlY3RlZCByZXN1bHRzCi0gICAgICAgICIiIgotICAgICAgICB1bmV4cGVj
dGVkID0gdG90YWwgLSBleHBlY3RlZAotICAgICAgICBpZiB1bmV4cGVjdGVkID09IDA6Ci0gICAg
ICAgICAgICBwcmludCAiQWxsICVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZC4iICUgZXhwZWN0ZWQK
LSAgICAgICAgZWxpZiBleHBlY3RlZCA9PSAxOgotICAgICAgICAgICAgcHJpbnQgIjEgdGVzdCBy
YW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoiICUgdW5leHBlY3RlZAotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgcHJpbnQgIiVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OiIg
JSAoZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgdW5leHBlY3RlZCkKLQotICAgIGRlZiBfcHJp
bnRfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cyk6Ci0gICAgICAg
ICIiIlByaW50cyBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGluIGEgaHVtYW4tcmVhZGFibGUgZm9y
bSB0byBzdGRvdXQuIiIiCi0gICAgICAgIHBhc3NlcyA9IHt9Ci0gICAgICAgIGZsYWt5ID0ge30K
LSAgICAgICAgcmVncmVzc2lvbnMgPSB7fQotCi0gICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jl
c3VsdHNbJ3Rlc3RzJ10pOgotICAgICAgICAgICAgcHJpbnQgIiIKLQotICAgICAgICBmb3IgdGVz
dCwgcmVzdWx0cyBpbiB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10uaXRlcml0ZW1zKCk6Ci0g
ICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRzWydhY3R1YWwnXS5zcGxpdCgiICIpCi0gICAgICAg
ICAgICBleHBlY3RlZCA9IHJlc3VsdHNbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQotICAgICAgICAg
ICAgaWYgYWN0dWFsID09IFsnUEFTUyddOgotICAgICAgICAgICAgICAgIGlmICdDUkFTSCcgaW4g
ZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNz
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQg
dG8gY3Jhc2gsIGJ1dCBwYXNzZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdCkKLSAgICAgICAgICAgICAgICBlbGlmICdUSU1FT1VUJyBpbiBleHBlY3Rl
ZDoKLSAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byB0aW1l
b3V0LCBidXQgcGFzc2VkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIF9h
ZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gZmFpbCwgYnV0IHBhc3NlZCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KQotICAgICAgICAgICAgZWxpZiBs
ZW4oYWN0dWFsKSA+IDE6Ci0gICAgICAgICAgICAgICAgIyBXZSBncm91cCBmbGFreSB0ZXN0cyBi
eSB0aGUgZmlyc3QgYWN0dWFsIHJlc3VsdCB3ZSBnb3QuCi0gICAgICAgICAgICAgICAgX2FkZF90
b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3QpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhyZWdyZXNzaW9ucywgcmVz
dWx0c1snYWN0dWFsJ10sIHRlc3QpCi0KLSAgICAgICAgaWYgbGVuKHBhc3Nlcyk6Ci0gICAgICAg
ICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBwYXNzZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAg
ICAgcHJpbnQgIiVzOiAoJWQpIiAlIChrZXksIGxlbih0ZXN0cykpCi0gICAgICAgICAgICAgICAg
dGVzdHMuc29ydCgpCi0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAg
ICAgICAgICAgICAgIHByaW50ICIgICVzIiAlIHRlc3QKLSAgICAgICAgICAgICAgICBwcmludAot
Ci0gICAgICAgIGlmIGxlbihmbGFreSk6Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKLSAgICAgICAgICAgIGZv
ciBrZXksIHRlc3RzIGluIGZsYWt5Lml0ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KLSAgICAg
ICAgICAgICAgICBwcmludCAiVW5leHBlY3RlZCBmbGFraW5lc3M6ICVzICglZCkiICUgKAotICAg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpCi0gICAg
ICAgICAgICAgICAgdGVzdHMuc29ydCgpCi0KLSAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0czoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdW5leHBlY3RlZF9yZXN1bHRzWyd0
ZXN0cyddW3Rlc3RdCi0gICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdFsnYWN0dWFs
J10uc3BsaXQoIiAiKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdFsnZXhw
ZWN0ZWQnXS5zcGxpdCgiICIpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBl
Y3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KLSAgICAgICAgICAgICAgICAg
ICAgbmV3X2V4cGVjdGF0aW9uc19saXN0ID0gbGlzdChzZXQoYWN0dWFsKSB8IHNldChleHBlY3Rl
ZCkpCi0gICAgICAgICAgICAgICAgICAgIHByaW50ICIgICVzID0gJXMiICUgKHRlc3QsICIgIi5q
b2luKG5ld19leHBlY3RhdGlvbnNfbGlzdCkpCi0gICAgICAgICAgICAgICAgcHJpbnQKLQotICAg
ICAgICBpZiBsZW4ocmVncmVzc2lvbnMpOgotICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVz
dEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCi0gICAgICAgICAgICBm
b3Iga2V5LCB0ZXN0cyBpbiByZWdyZXNzaW9ucy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCld
Ci0gICAgICAgICAgICAgICAgcHJpbnQgIlJlZ3Jlc3Npb25zOiBVbmV4cGVjdGVkICVzIDogKCVk
KSIgJSAoCi0gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVuKHRl
c3RzKSkKLSAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKLSAgICAgICAgICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMgPSAlcyIgJSAo
dGVzdCwga2V5KQotICAgICAgICAgICAgICAgIHByaW50Ci0KLSAgICAgICAgaWYgbGVuKHVuZXhw
ZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSkgYW5kIHNlbGYuX29wdGlvbnMudmVyYm9zZToKLSAgICAg
ICAgICAgIHByaW50ICItIiAqIDc4CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF9hY3R1YWwoIiAgJTVkICUtMjRzICglNC4xZiUlKSIgJQorICAgICAgICAgICAgICAgICAgICAo
bGVuKHJlc3VsdHMpLCBkZXNjW2xlbihyZXN1bHRzKSAhPSAxXSwgcGN0KSkKIAogICAgIGRlZiBf
d3JpdGVfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAi
IiJXcml0ZSByZXN1bHRzLmh0bWwgd2hpY2ggaXMgYSBzdW1tYXJ5IG9mIHRlc3RzIHRoYXQgZmFp
bGVkLgpAQCAtMTQ2MiwxMCArMTIxNyw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHNl
bGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX2ZpbGVuYW1lKQogCiAKLWRl
ZiBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZGljdCwga2V5LCB2YWx1ZSk6Ci0gICAgZGljdC5zZXRk
ZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKLQotCiBkZWYgcmVhZF90ZXN0X2ZpbGVzKGZp
bGVzKToKICAgICB0ZXN0cyA9IFtdCiAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CkBAIC0xNDc3LDI1
ICsxMjI4LDExIEBAIGRlZiByZWFkX3Rlc3RfZmlsZXMoZmlsZXMpOgogICAgIHJldHVybiB0ZXN0
cwogCiAKLWRlZiBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgbG9nX29wdGlvbik6Ci0g
ICAgIiIiUmV0dXJucyBhIHdyaXRlKCkgZnVuY3Rpb24gdGhhdCB3aWxsIHdyaXRlIHRoZSBzdHJp
bmcgdG8gX2xvZy5pbmZvKCkKLSAgICBpZiBjb21wIHdhcyBzcGVjaWZpZWQgaW4gLS1sb2cgb3Ig
aWYgLS12ZXJib3NlIGlzIHRydWUuIE90aGVyd2lzZSB0aGUKLSAgICBtZXNzYWdlIGlzIGRyb3Bw
ZWQuCi0KLSAgICBBcmdzOgotICAgICAgb3B0aW9uczogbGlzdCBvZiBjb21tYW5kIGxpbmUgb3B0
aW9ucyBmcm9tIG9wdHBhcnNlCi0gICAgICBsb2dfb3B0aW9uOiBvcHRpb24gdG8gbWF0Y2ggaW4g
b3B0aW9ucy5sb2cgaW4gb3JkZXIgZm9yIHRoZSBtZXNzYWdlcwotICAgICAgICAgIHRvIGJlIGxv
Z2dlZCAoZS5nLiwgJ2FjdHVhbCcgb3IgJ2V4cGVjdGVkJykKLSAgICAiIiIKLSAgICBpZiBvcHRp
b25zLnZlcmJvc2Ugb3IgbG9nX29wdGlvbiBpbiBvcHRpb25zLmxvZy5zcGxpdCgiLCIpOgotICAg
ICAgICByZXR1cm4gX2xvZy5pbmZvCi0gICAgcmV0dXJuIGxhbWJkYSBzdHI6IDEKLQotCi1kZWYg
bWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgorZGVmIHJ1bihwb3J0X29i
aiwgb3B0aW9ucywgYXJncyk6CiAgICAgIiIiUnVuIHRoZSB0ZXN0cy4KIAogICAgIEFyZ3M6Cisg
ICAgICBwb3J0X29iajogUG9ydCBvYmplY3QgZm9yIHBvcnQtc3BlY2lmaWMgYmVoYXZpb3IKICAg
ICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAgICAg
YXJnczogYSBsaXN0IG9mIHN1YiBkaXJlY3RvcmllcyBvciBmaWxlcyB0byB0ZXN0CiAgICAgICBw
cmludF9yZXN1bHRzOiB3aGV0aGVyIG9yIG5vdCB0byBsb2cgYW55dGhpbmcgdG8gc3Rkb3V0LgpA
QCAtMTUwNSwyMiArMTI0MiwyMSBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1
bHRzPVRydWUpOgogICAgICAgICAgIGVycm9yLgogICAgICIiIgogCi0gICAgaWYgb3B0aW9ucy5z
b3VyY2VzOgotICAgICAgICBvcHRpb25zLnZlcmJvc2UgPSBUcnVlCisgICAgIyBDb25maWd1cmUg
dGhlIHByaW50aW5nIHN1YnN5c3RlbSBmb3IgcHJpbnRpbmcgb3V0cHV0LCBsb2dnaW5nIGRlYnVn
CisgICAgIyBpbmZvLCBhbmQgdHJhY2luZyB0ZXN0cy4KKworICAgIGlmIG5vdCBvcHRpb25zLmNo
aWxkX3Byb2Nlc3NlczoKKyAgICAgICAgIyBGSVhNRTogSW52ZXN0aWdhdGUgcGVyZi9mbGFraW5l
c3MgaW1wYWN0IG9mIHVzaW5nIGNwdV9jb3VudCArIDEuCisgICAgICAgIG9wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzID0gcG9ydF9vYmouZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKQogCi0gICAgIyBT
ZXQgdXAgb3VyIGxvZ2dpbmcgZm9ybWF0LgotICAgIG1ldGVyID0gbWV0ZXJlZF9zdHJlYW0uTWV0
ZXJlZFN0cmVhbShvcHRpb25zLnZlcmJvc2UsIHN5cy5zdGRlcnIpCi0gICAgbG9nX2ZtdCA9ICcl
KG1lc3NhZ2UpcycKLSAgICBsb2dfZGF0ZWZtdCA9ICcleSVtJWQgJUg6JU06JVMnCi0gICAgbG9n
X2xldmVsID0gbG9nZ2luZy5JTkZPCi0gICAgaWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAgICBs
b2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6JShsaW5lbm8pLTRkICUobGV2ZWxu
YW1lKXMgJwotICAgICAgICAgICAgICAgICAgJyUobWVzc2FnZSlzJykKLSAgICAgICAgbG9nX2xl
dmVsID0gbG9nZ2luZy5ERUJVRwotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nX2xl
dmVsLCBmb3JtYXQ9bG9nX2ZtdCwgZGF0ZWZtdD1sb2dfZGF0ZWZtdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbT1tZXRlcikKKyAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRlcihw
b3J0X29iaiwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKKyAgICAgICAgYnVp
bGRib3Rfb3V0cHV0PXN5cy5zdGRvdXQsCisgICAgICAgIGNoaWxkX3Byb2Nlc3Nlcz1pbnQob3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMpLAorICAgICAgICBpc19mdWxseV9wYXJhbGxlbD1vcHRpb25z
LmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICBpZiBvcHRpb25zLmhlbHBfcHJpbnRp
bmc6CisgICAgICAgIHByaW50ZXIuaGVscF9wcmludGluZygpCisgICAgICAgIHJldHVybiAwCiAK
LSAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCiAgICAg
ZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKIAogICAgIGlmIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRp
b246CkBAIC0xNTU2LDggKzEyOTIsOCBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9y
ZXN1bHRzPVRydWUpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVz
dWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKICAgICAgICAgIyBmaWxlcyBpbiB0aGUg
cmVzdWx0cyBkaXJlY3RvcnkgYXJlIGV4cGxpY2l0bHkgdXNlZCBmb3IgY3Jvc3MtcnVuCiAgICAg
ICAgICMgdHJhY2tpbmcuCi0gICAgICAgIG1ldGVyLnVwZGF0ZSgiQ2xvYmJlcmluZyBvbGQgcmVz
dWx0cyBpbiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSkKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJlc3Vs
dHMgaW4gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSkKICAgICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHBvcnRfb2JqLmxheW91dF90
ZXN0c19kaXIoKQogICAgICAgICBwb3NzaWJsZV9kaXJzID0gb3MubGlzdGRpcihsYXlvdXRfdGVz
dHNfZGlyKQogICAgICAgICBmb3IgZGlybmFtZSBpbiBwb3NzaWJsZV9kaXJzOgpAQCAtMTU2NSwx
NyArMTMwMSw2IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6
CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSwgZGlybmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
Z25vcmVfZXJyb3JzPVRydWUpCiAKLSAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6
Ci0gICAgICAgICMgRklYTUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1
c2luZyBjcHVfY291bnQgKyAxLgotICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IHBv
cnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkKLQotICAgIHdyaXRlID0gY3JlYXRlX2xv
Z2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25maWcnKQotICAgIGlmIG9wdGlvbnMuY2hpbGRfcHJv
Y2Vzc2VzID09IDE6Ci0gICAgICAgIHdyaXRlKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29iai5k
cml2ZXJfbmFtZSkKLSAgICBlbHNlOgotICAgICAgICB3cml0ZSgiUnVubmluZyAlcyAlc3MgaW4g
cGFyYWxsZWwiICUgKAotICAgICAgICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcywgcG9y
dF9vYmouZHJpdmVyX25hbWUoKSkpCi0KICAgICBpZiBub3Qgb3B0aW9ucy50aW1lX291dF9tczoK
ICAgICAgICAgaWYgb3B0aW9ucy5jb25maWd1cmF0aW9uID09ICJEZWJ1ZyI6CiAgICAgICAgICAg
ICBvcHRpb25zLnRpbWVfb3V0X21zID0gc3RyKDIgKiBUZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9U
SU1FT1VUX01TKQpAQCAtMTU4Myw4ICsxMzA4LDE0IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3Ms
IHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0X21zID0g
c3RyKFRlc3RSdW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCiAKICAgICBvcHRpb25zLnNs
b3dfdGltZV9vdXRfbXMgPSBzdHIoNSAqIGludChvcHRpb25zLnRpbWVfb3V0X21zKSkKLSAgICB3
cml0ZSgiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVzIiAlCi0gICAg
ICAgICAgKG9wdGlvbnMudGltZV9vdXRfbXMsIG9wdGlvbnMuc2xvd190aW1lX291dF9tcykpCisg
ICAgcHJpbnRlci5wcmludF9jb25maWcoIlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cgdGVzdCB0
aW1lb3V0OiAlcyIgJQorICAgICAgICAgICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21zLCBv
cHRpb25zLnNsb3dfdGltZV9vdXRfbXMpKQorCisgICAgaWYgaW50KG9wdGlvbnMuY2hpbGRfcHJv
Y2Vzc2VzKSA9PSAxOgorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUnVubmluZyBvbmUg
JXMiICUgcG9ydF9vYmouZHJpdmVyX25hbWUpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnRlci5w
cmludF9jb25maWcoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlICgKKyAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMsIHBvcnRfb2JqLmRyaXZlcl9uYW1l
KCkpKQogCiAgICAgIyBJbmNsdWRlIGFsbCB0ZXN0cyBpZiBub25lIGFyZSBzcGVjaWZpZWQuCiAg
ICAgbmV3X2FyZ3MgPSBbXQpAQCAtMTYwMSw5ICsxMzMyLDkgQEAgZGVmIG1haW4ob3B0aW9ucywg
YXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKIAogICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQgZGly
ZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KICAgICBwb3J0X29iai5tYXliZV9t
YWtlX2RpcmVjdG9yeShvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQotICAgIG1ldGVyLnVwZGF0
ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xs
ZWN0aW5nIHRlc3RzIC4uLiIpCiAKLSAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydF9v
YmosIG9wdGlvbnMsIG1ldGVyKQorICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0X29i
aiwgb3B0aW9ucywgcHJpbnRlcikKICAgICB0ZXN0X3J1bm5lci5nYXRoZXJfZmlsZV9wYXRocyhw
YXRocykKIAogICAgIGlmIG9wdGlvbnMubGludF90ZXN0X2ZpbGVzOgpAQCAtMTYxMyw0MyArMTM0
NCw0MyBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAg
ICAgICBmb3IgcGxhdGZvcm1fbmFtZSBpbiBwb3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWVzKCk6
CiAgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1fbmFt
ZSwgaXNfZGVidWdfbW9kZT1UcnVlKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhw
ZWN0YXRpb25zKHBsYXRmb3JtX25hbWUsIGlzX2RlYnVnX21vZGU9RmFsc2UpCi0gICAgICAgIG1l
dGVyLnVwZGF0ZSgiIikKLSAgICAgICAgcHJpbnQgKCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBtZXNz
YWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsIHRoZW4gdGhlICIKLSAgICAgICAgICAgICJsaW50
IHN1Y2NlZWRlZC4iKQorICAgICAgICBwcmludGVyLndyaXRlKCIiKQorICAgICAgICBfbG9nLmlu
Zm8oIklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9ucywg
IgorICAgICAgICAgICAgICAgICAgInRoZW4gdGhlIGxpbnQgc3VjY2VlZGVkLiIpCiAgICAgICAg
IHJldHVybiAwCiAKLSAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAi
Y29uZmlnIikKLSAgICB3cml0ZSgiVXNpbmcgcG9ydCAnJXMnIiAlIHBvcnRfb2JqLm5hbWUoKSkK
LSAgICB3cml0ZSgiUGxhY2luZyB0ZXN0IHJlc3VsdHMgaW4gJXMiICUgb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiVXNpbmcgcG9ydCAnJXMnIiAl
IHBvcnRfb2JqLm5hbWUoKSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGxhY2luZyB0ZXN0
IHJlc3VsdHMgaW4gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3Vs
dHNfZGlyZWN0b3J5KQogICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5lOgotICAgICAgICB3cml0
ZSgiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlIHBvcnRfb2JqLmJhc2VsaW5lX3BhdGgo
KSkKLSAgICB3cml0ZSgiVXNpbmcgJXMgYnVpbGQiICUgb3B0aW9ucy5jb25maWd1cmF0aW9uKQor
ICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVz
IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfb2JqLmJhc2VsaW5lX3BhdGgo
KSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiVXNpbmcgJXMgYnVpbGQiICUgb3B0aW9ucy5j
b25maWd1cmF0aW9uKQogICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgIHdyaXRl
KCJQaXhlbCB0ZXN0cyBlbmFibGVkIikKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBp
eGVsIHRlc3RzIGVuYWJsZWQiKQogICAgIGVsc2U6Ci0gICAgICAgIHdyaXRlKCJQaXhlbCB0ZXN0
cyBkaXNhYmxlZCIpCi0gICAgd3JpdGUoIiIpCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmln
KCJQaXhlbCB0ZXN0cyBkaXNhYmxlZCIpCisgICAgcHJpbnRlci5wcmludF9jb25maWcoIiIpCiAK
LSAgICBtZXRlci51cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCisgICAgcHJpbnRl
ci5wcmludF91cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCiAgICAgdGVzdF9ydW5u
ZXIucGFyc2VfZXhwZWN0YXRpb25zKHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0g
J0RlYnVnJykKIAotICAgIG1ldGVyLnVwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKKyAgICBw
cmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKICAgICBpZiBub3QgcG9y
dF9vYmouY2hlY2tfYnVpbGQodGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKICAgICAgICAgcmV0
dXJuIC0xCiAKLSAgICBtZXRlci51cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4iKQorICAgIHBy
aW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyBoZWxwZXIgLi4uIikKICAgICBwb3J0X29iai5z
dGFydF9oZWxwZXIoKQogCiAgICAgIyBDaGVjayB0aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVz
ICh0aGVtZXMsIGZvbnRzLCAuLi4pIGFyZSBjb3JyZWN0LgogICAgIGlmIG5vdCBvcHRpb25zLm5v
Y2hlY2tfc3lzX2RlcHM6Ci0gICAgICAgIG1ldGVyLnVwZGF0ZSgiQ2hlY2tpbmcgc3lzdGVtIGRl
cGVuZGVuY2llcyAuLi4iKQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcg
c3lzdGVtIGRlcGVuZGVuY2llcyAuLi4iKQogICAgICAgICBpZiBub3QgcG9ydF9vYmouY2hlY2tf
c3lzX2RlcHModGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKICAgICAgICAgICAgIHJldHVybiAt
MQogCi0gICAgbWV0ZXIudXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKLSAgICB3cml0ZSA9
IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAiZXhwZWN0ZWQiKQotICAgIHJlc3VsdF9z
dW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHdyaXRl
KQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKKyAgICBy
ZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1
dCgpCiAKICAgICBwb3J0X29iai5zZXR1cF90ZXN0X3J1bigpCiAKQEAgLTE2NTksNyArMTM5MCw3
IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAg
IGlmIG9wdGlvbnMuZnV6enlfcGl4ZWxfdGVzdHM6CiAgICAgICAgICAgICB0ZXN0X3J1bm5lci5h
ZGRfdGVzdF90eXBlKGZ1enp5X2ltYWdlX2RpZmYuRnV6enlJbWFnZURpZmYpCiAKLSAgICBudW1f
dW5leHBlY3RlZF9yZXN1bHRzID0gdGVzdF9ydW5uZXIucnVuKHJlc3VsdF9zdW1tYXJ5LCBwcmlu
dF9yZXN1bHRzKQorICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1bm5lci5ydW4o
cmVzdWx0X3N1bW1hcnkpCiAKICAgICBwb3J0X29iai5zdG9wX2hlbHBlcigpCiAKQEAgLTE2NzIs
NyArMTQwMyw5IEBAIGRlZiBfY29tcGF0X3NoaW1fY2FsbGJhY2sob3B0aW9uLCBvcHRfc3RyLCB2
YWx1ZSwgcGFyc2VyKToKIAogCiBkZWYgX2NvbXBhdF9zaGltX29wdGlvbihvcHRpb25fbmFtZSwg
Kiprd2FyZ3MpOgotICAgIHJldHVybiBvcHRwYXJzZS5tYWtlX29wdGlvbihvcHRpb25fbmFtZSwg
YWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPV9jb21wYXRfc2hpbV9jYWxsYmFjaywgaGVscD0i
SWdub3JlZCwgZm9yIG9sZC1ydW4td2Via2l0LXRlc3RzIGNvbXBhdCBvbmx5LiIsICoqa3dhcmdz
KQorICAgIHJldHVybiBvcHRwYXJzZS5tYWtlX29wdGlvbihvcHRpb25fbmFtZSwgYWN0aW9uPSJj
YWxsYmFjayIsCisgICAgICAgIGNhbGxiYWNrPV9jb21wYXRfc2hpbV9jYWxsYmFjaywKKyAgICAg
ICAgaGVscD0iSWdub3JlZCwgZm9yIG9sZC1ydW4td2Via2l0LXRlc3RzIGNvbXBhdCBvbmx5LiIs
ICoqa3dhcmdzKQogCiAKIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CkBAIC0xNjk2LDIyICsx
NDI5LDcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgIyBvbGQtcnVuLXdl
YmtpdC10ZXN0cyBhbHNvIGFjY2VwdHMgLWMsIC0tY29uZmlndXJhdGlvbiBDT05GSUdVUkFUSU9O
LgogICAgIF0KIAotICAgIGxvZ2dpbmdfb3B0aW9ucyA9IFsKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi0tbG9nIiwgYWN0aW9uPSJzdG9yZSIsCi0gICAgICAgICAgICBkZWZhdWx0PUxP
R19ERUZBVUxUX1ZBTFVFLAotICAgICAgICAgICAgaGVscD0oImxvZyB2YXJpb3VzIHR5cGVzIG9m
IGRhdGEuIFRoZSBhcmd1bWVudCB2YWx1ZSBzaG91bGQgYmUgYSAiCi0gICAgICAgICAgICAgICAg
ICAiY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIGZyb206ICVzIChkZWZhdWx0cyB0byAi
Ci0gICAgICAgICAgICAgICAgICAiLS1sb2cgJXMpIiAlIChMT0dfVkFMVUVTLCBMT0dfREVGQVVM
VF9WQUxVRSkpKSwKLSAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLXYiLCAiLS12ZXJib3Nl
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9
ImluY2x1ZGUgZGVidWctbGV2ZWwgbG9nZ2luZyIpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbigiLS1zb3VyY2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGhlbHA9
InNob3cgZXhwZWN0ZWQgcmVzdWx0IGZpbGUgcGF0aCBmb3IgZWFjaCB0ZXN0ICIgKwotICAgICAg
ICAgICAgICAgICAiKGltcGxpZXMgLS12ZXJib3NlKSIpLAotICAgICAgICAjIG9sZC1ydW4td2Vi
a2l0LXRlc3RzIGhhcyBhIC0tc2xvd2VzdCBvcHRpb24gd2hpY2gganVzdCBwcmludHMKLSAgICAg
ICAgIyB0aGUgc2xvd2VzdCAxMC4KLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbnVt
LXNsb3ctdGVzdHMtdG8tbG9nIiwgZGVmYXVsdD01MCwKLSAgICAgICAgICAgIGhlbHA9Ik51bWJl
ciBvZiBzbG93IHRlc3RzIHdob3NlIHRpbWluZ3MgdG8gcHJpbnQuIiksCi0gICAgXQorICAgIHBy
aW50X29wdGlvbnMgPSBwcmludGluZy5wcmludF9vcHRpb25zKCkKIAogICAgICMgRklYTUU6IFRo
ZXNlIG9wdGlvbnMgc2hvdWxkIG1vdmUgb250byB0aGUgQ2hyb21pdW1Qb3J0LgogICAgIGNocm9t
aXVtX29wdGlvbnMgPSBbCkBAIC0xODg0LDEzICsxNjAyLDIzIEBAIGRlZiBwYXJzZV9hcmdzKGFy
Z3M9Tm9uZSk6CiAgICAgICAgICAgICBoZWxwPSgiVGhlIGJ1aWxkIG51bWJlciBvZiB0aGUgYnVp
bGRlciBydW5uaW5nIHRoaXMgc2NyaXB0LiIpKSwKICAgICBdCiAKLSAgICBvcHRpb25fbGlzdCA9
IChjb25maWd1cmF0aW9uX29wdGlvbnMgKyBsb2dnaW5nX29wdGlvbnMgKworICAgIG9wdGlvbl9s
aXN0ID0gKGNvbmZpZ3VyYXRpb25fb3B0aW9ucyArIHByaW50X29wdGlvbnMgKwogICAgICAgICAg
ICAgICAgICAgIGNocm9taXVtX29wdGlvbnMgKyByZXN1bHRzX29wdGlvbnMgKyB0ZXN0X29wdGlv
bnMgKwogICAgICAgICAgICAgICAgICAgIG1pc2Nfb3B0aW9ucyArIHJlc3VsdHNfanNvbl9vcHRp
b25zICsKICAgICAgICAgICAgICAgICAgICBvbGRfcnVuX3dlYmtpdF90ZXN0c19jb21wYXQpCiAg
ICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRp
b25fbGlzdCkKLSAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAKLWlm
ICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJz
ZXIucGFyc2VfYXJncyhhcmdzKQorICAgIGlmIG9wdGlvbnMuc291cmNlczoKKyAgICAgICAgb3B0
aW9ucy52ZXJib3NlID0gVHJ1ZQorCisgICAgcmV0dXJuIG9wdGlvbnMsIGFyZ3MKKworCitkZWYg
bWFpbigpOgogICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKCkKLSAgICBzeXMuZXhpdCht
YWluKG9wdGlvbnMsIGFyZ3MpKQorICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0
Zm9ybSwgb3B0aW9ucykKKyAgICByZXR1cm4gcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQor
CitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDlmZTBlNzQuLjE3N2Qw
NDIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtMzMs
MTIgKzMzLDE3IEBAIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWlt
cG9ydCB3ZWJraXRweS5sYXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyBhcyBydW5fd2Via2l0
X3Rlc3RzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAorZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKIAogCi1kZWYgcGFzc2lu
Z19ydW4oYXJncyk6CitkZWYgcGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9Tm9uZSwgbG9nZ2lu
Z19pbmNsdWRlZD1GYWxzZSk6CisgICAgaWYgbm90IGxvZ2dpbmdfaW5jbHVkZWQ6CisgICAgICAg
IGFyZ3MuZXh0ZW5kKFsnLS1wcmludCcsICdub3RoaW5nJ10pCiAgICAgb3B0aW9ucywgYXJncyA9
IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQotICAgIHJlcyA9IHJ1bl93ZWJraXRf
dGVzdHMubWFpbihvcHRpb25zLCBhcmdzLCBGYWxzZSkKKyAgICBpZiBwb3J0X29iaiBpcyBOb25l
OgorICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMp
CisgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3Mp
CiAgICAgcmV0dXJuIHJlcyA9PSAwCiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54495</attachid>
            <date>2010-04-27 18:41:13 -0700</date>
            <delta_ts>2010-04-27 18:44:39 -0700</delta_ts>
            <desc>merge to HEAD</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>100978</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxNWMzNmI0Li41OTM4YjRlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTAtMDQt
MjcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyByZW5hbWVzIC0tbG9nIHRvIC0tcHJpbnQg
KHRvIGJlIHNsaWdodGx5IG1vcmUKKyAgICAgICAgZGVzY3JpcHRpdmUpLiBJJ3ZlIGFsc28gYWRk
ZWQgYmV0dGVyIGhlbHAgbWVzc2FnZXMgZm9yIHByaW50aW5nLgorCisgICAgICAgIFRoZSBuZXcg
Y29kZSBoYXMgdW5pdCB0ZXN0cyEKKworICAgICAgICBUaGVyZSBpcyBzdGlsbCBtb3JlIGNvZGUg
dG8gYmUgbW92ZWQsIGJ1dCB0aGlzIHBhdGNoIGlzIGJpZyBlbm91Z2ggYXMKKyAgICAgICAgaXQg
aXMuIE5hbWVseSwgc3RpbGwgdG8gbW92ZSBhcmUgdGhlIHByaW50aW5nIG9mIHRoZSBhY3R1YWwg
cmVzdWx0cworICAgICAgICBhbmQgdGhlIHRpbWluZyBzdGF0aXN0aWNzLCB3aGljaCBzaG91bGQg
bW92ZSBhbm90aGVyIDMwMC00MDAgbGluZXMKKyAgICAgICAgb3V0IG9mIHRoZSBmaWxlLgorCisg
ICAgICAgIE5vdGFibGUgY2hhbmdlcyB0byBydW5fd2Via2l0X3Rlc3RzLnB5IGJleW9uZCBjb2Rl
IHNpbXBseSBtb3Zpbmc6CisgICAgICAgICogTWV0ZXJlZFN0cmVhbSBpcyBub3cgaGlkZGVuIHVu
ZGVyIHRoZSBuZXcgcHJpbnRpbmcuUHJpbnRlciBjbGFzcy4KKyAgICAgICAgICBBbGwgdGhlIHJl
ZmVyZW5jZXMgdG8gc2VsZi5fbWV0ZXIgbm93IHBvaW50IHRvIHNlbGYuX3ByaW50ZXIuCisgICAg
ICAgICogQWxsIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBpcyBkb25lIGluIHByaW50aW5nLmNvbmZp
Z3VyZV9sb2dnaW5nKCkKKyAgICAgICAgKiBJbnN0ZWFkIG9mIHVzaW5nIHdyaXRlKCkgbGFtYmRh
cyB0byBjb250cm9sIHdoYXQgaXMgYW5kIGlzbid0CisgICAgICAgICAgcHJpbnRlZCwgd2UgdXNl
IHNlcGFyYXRlIG1ldGhvZHMgb24gdGhlIHByaW50ZXIgb2JqZWN0LiBUaGlzIHdpbGwKKyAgICAg
ICAgICBtYWtlIGl0IGVhc2llciB0byBncmVwIHdoaWNoIHByaW50IHN0YXRlbWVudHMgYXJlIHBy
aW50ZWQKKyAgICAgICAgICB1bmRlciBwcm90ZWN0aW9uIG9mIGVhY2ggZmxhZy4KKyAgICAgICAg
KiBUaGUgcHJpbnRfcmVzdWx0cyBmbGFnIEkgYWRkZWQgYSBmZXcgcmV2cyBiYWNrIHRvIHN1cHBy
ZXNzIHByaW50aW5nCisgICAgICAgICAgaW4gdGhlIHVuaXQgdGVzdHMgaGFzIGJlZW4gcmVwbGFj
ZWQgd2l0aCAtLXByaW50IG5vdGhpbmcuCisgICAgICAgICogVGhlIFJlc3VsdFN1bW1hcnkgY2xh
c3Mgbm93IHN0b3JlcyB0aGUgZW50aXJlIFRlc3RSZXN1bHQgZm9yIGVhY2gKKyAgICAgICAgICB0
ZXN0LCBub3QganVzdCB0aGUgYWN0dWFsIHJlc3VsdCB0eXBlLgorICAgICAgICAqIHN1bW1hcml6
ZV91bmV4cGVjdGVkX3Jlc3VsdHMoKSBnb3QgbW92ZWQgZnJvbSBhIG1ldGhvZCBvbiBUZXN0UnVu
bmVyCisgICAgICAgICAgdG8gYSBzdGFuZGFsb25lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBtb3Zl
IGludG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAgICAgYWxvbmcgd2l0aCB0aGUgUmVzdWx0U3Vt
bWFyeSBjbGFzcyBhbmQgdGhlIFRlc3RSZXN1bHQgY2xhc3MKKyAgICAgICAgKiBUaGUgLS10cmFj
ZSBvcHRpb24gYWRkZWQgcmVjZW50bHkgaGFzIGJlZW4gcmVwbGFjZWQgYnkKKyAgICAgICAgICAn
LS1wcmludCB0cmFjZS1ldmVyeXRoaW5nJyBhbmQgJy0tcHJpbnQgdHJhY2UtdW5leHBlY3RlZCcK
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgwMTgK
KworICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHM6CisgICAgICAgICAgLSB1
cGRhdGUgdG8gbmV3IGVudHJ5IHBvaW50cyBpbiBydW5fd2Via2l0X3Rlc3RzLnB5CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9z
dHJlYW0ucHk6CisgICAgICAgICAgLSBmaXggYSBtaW5vciBuaXQgd2hlcmUgd2Ugd2VyZSBwcmlu
dGluZyBhbiBlbXB0eSBzdHJpbmcgd2hlcmUKKyAgICAgICAgICAgIHdlIGRpZG4ndCBuZWVkIHRv
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cHJpbnRpbmcucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5OiBBZGRlZAorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAgICAt
IGltcGxlbWVudCByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKCkgYW5kIGV4cGVjdGVkX2ZpbGVuYW1l
KCkgc28KKyAgICAgICAgICAgIHdlIGNhbiB0ZXN0IHByaW50aW5nIHVuZXhwZWN0ZWQgcmVzdWx0
cyBpbiBhIHBsYXRmb3JtLW5ldXRyYWwKKyAgICAgICAgICAgIHdheQorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcnVuX3dlYmtpdF90ZXN0LnB5OgorICAgICAgICAgIC0gbW92ZSBhIGxvdCBv
ZiB0aGUgcHJpbnRpbmcgY29kZSBpbnRvIHByaW50aW5nLnB5CisgICAgICAgICAgLSBjaGFuZ2Ug
dGhlIHNpZ25hdHVyZXMgb2YgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cyBmb3IgZWFzaWVyCisg
ICAgICAgICAgICB1bml0IHRlc3RpbmcKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSB1cGRhdGUgdy8gY2hhbmdlcyB0
byBydW5fd2Via2l0X3Rlc3RzIGVudHJ5IHBvaW50cy4KKwogMjAxMC0wNC0yNyAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IExldmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10
ZXN0cyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMKaW5kZXggMmVi
ZTFkYS4uMDcyOGVlMCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdl
YmtpdC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3Rz
CkBAIC0zMyw1ICszMyw0IEBAIGltcG9ydCBzeXMKIGltcG9ydCB3ZWJraXRweS5sYXlvdXRfdGVz
dHMucnVuX3dlYmtpdF90ZXN0cyBhcyBydW5fd2Via2l0X3Rlc3RzCiAKIGlmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6Ci0gICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2Vf
YXJncygpCi0gICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKG9wdGlvbnMsIGFyZ3Mp
KQorICAgIHN5cy5leGl0KHJ1bl93ZWJraXRfdGVzdHMubWFpbigpKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0
ZXJlZF9zdHJlYW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQppbmRleCA5MzBiOWU0Li5hMzNmYzNh
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQpA
QCAtMTExLDcgKzExMSw4IEBAIGNsYXNzIE1ldGVyZWRTdHJlYW06CiAKICAgICAgICAgIyBQcmlu
dCB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiBiYWNrc3BhY2VzIHRvIGVyYXNlIHRoZSBwcmV2aW91
cwogICAgICAgICAjIG1lc3NhZ2UuCi0gICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSgiXGIiICog
bGVuKHNlbGYuX2xhc3RfdXBkYXRlKSkKKyAgICAgICAgaWYgbGVuKHNlbGYuX2xhc3RfdXBkYXRl
KToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSgiXGIiICogbGVuKHNlbGYuX2xhc3Rf
dXBkYXRlKSkKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHN0cikKICAgICAgICAgbnVtX3Jl
bWFpbmluZyA9IGxlbihzZWxmLl9sYXN0X3VwZGF0ZSkgLSBsZW4oc3RyKQogICAgICAgICBpZiBu
dW1fcmVtYWluaW5nID4gMDoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0MDU2YwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3ByaW50aW5nLnB5CkBAIC0wLDAgKzEsNDgzIEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJQYWNrYWdlIHRoYXQgaGFuZGxlcyBub24tZGVidWcs
IG5vbi1maWxlIG91dHB1dCBmb3IgcnVuLXdlYmtpdC10ZXN0cy4iIiIKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcGRiCisKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0
YXRpb25zCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnByaW50ZXIiKQorCitUZXN0RXhwZWN0YXRpb25zRmlsZSA9IHRlc3RfZXhwZWN0YXRpb25zLlRl
c3RFeHBlY3RhdGlvbnNGaWxlCisKK05VTV9TTE9XX1RFU1RTX1RPX0xPRyA9IDEwCisKK1BSSU5U
X0RFRkFVTFQgPSAoIm1pc2Msb25lLWxpbmUtcHJvZ3Jlc3Msb25lLWxpbmUtc3VtbWFyeSx1bmV4
cGVjdGVkLCIKKyAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQtcmVzdWx0cyx1cGRhdGVzIikK
K1BSSU5UX0VWRVJZVEhJTkcgPSAoImFjdHVhbCxjb25maWcsZXhwZWN0ZWQsbWlzYyxvbmUtbGlu
ZS1wcm9ncmVzcywiCisgICAgICAgICAgICAgICAgICAgICJvbmUtbGluZS1zdW1tYXJ5LHNsb3dl
c3QsdGltaW5nLHVuZXhwZWN0ZWQsIgorICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZC1y
ZXN1bHRzLHVwZGF0ZXMiKQorCitIRUxQX1BSSU5USU5HID0gIiIiCitPdXRwdXQgZm9yIHJ1bi13
ZWJraXQtdGVzdHMgaXMgY29udHJvbGxlZCBieSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mCit2
YWx1ZXMgcGFzc2VkIHRvIC0tcHJpbnQuICBWYWx1ZXMgZWl0aGVyIGluZmx1ZW5jZSB0aGUgb3Zl
cmFsbCBvdXRwdXQsIG9yCit0aGUgb3V0cHV0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1biwg
ZHVyaW5nIHRoZSBydW4sIG9yIGF0IHRoZSBlbmQ6CisKK092ZXJhbGwgb3B0aW9uczoKKyAgICBu
b3RoaW5nICAgICAgICAgICAgIGRvbid0IHByaW50IGFueXRoaW5nLiBUaGlzIG92ZXJyaWRlcyBl
dmVyeSBvdGhlciBvcHRpb24KKyAgICBldmVyeXRoaW5nICAgICAgICAgIHByaW50IGV2ZXJ5dGhp
bmcgKGV4Y2VwdCB0aGUgdHJhY2UtKiBvcHRpb25zIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRldGFpbGVkLXByb2dyZXNzIG9wdGlvbiwgc2VlIGJlbG93IGZvciB0aGUgZnVsbCBs
aXN0ICkKKyAgICBtaXNjICAgICAgICAgICAgICAgIHByaW50IG1pc2NlbGxhbmVvdXMgdGhpbmdz
IGxpa2UgYmxhbmsgbGluZXMKKworQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuOgorICAgIGNv
bmZpZyAgICAgICAgICAgICAgcHJpbnQgdGhlIHRlc3QgcnVuIGNvbmZpZ3VyYXRpb24KKyAgICBl
eHBlY3RlZCAgICAgICAgICAgIHByaW50IGEgc3VtbWFyeSBvZiB3aGF0IGlzIGV4cGVjdGVkIHRv
IGhhcHBlbgorICAgICAgICAgICAgICAgICAgICAgICAgKCMgcGFzc2VzLCAjIGZhaWx1cmVzLCBl
dGMuKQorCitEdXJpbmcgdGhlIHJ1bjoKKyAgICBkZXRhaWxlZC1wcm9ncmVzcyAgIHByaW50IG9u
ZSBkb3QgcGVyIHRlc3QgY29tcGxldGVkCisgICAgb25lLWxpbmUtcHJvZ3Jlc3MgICBwcmludCBh
IG9uZS1saW5lIHByb2dyZXNzIGJhcgorICAgIHVuZXhwZWN0ZWQgICAgICAgICAgcHJpbnQgYW55
IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyB0aGV5IG9jY3VyCisgICAgdXBkYXRlcyAgICAgICAgICAg
ICBwcmludCB1cGRhdGVzIG9uIHdoaWNoIHN0YWdlIGlzIGV4ZWN1dGluZworICAgIHRyYWNlLWV2
ZXJ5dGhpbmcgICAgcHJpbnQgZGV0YWlsZWQgaW5mbyBvbiBldmVyeSB0ZXN0J3MgcmVzdWx0cwor
ICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2VsaW5lcywgZXhwZWN0YXRpb24sIHRpbWUgaXQg
dG9vayB0byBydW4pLiBJZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyBzcGVjaWZp
ZWQgaXQgd2lsbCBvdmVycmlkZSB0aGUgJyotcHJvZ3Jlc3MnCisgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLCB0aGUgJ3RyYWNlLXVuZXhwZWN0ZWQnIG9wdGlvbiwgYW5kIHRoZQorICAg
ICAgICAgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQnIG9wdGlvbi4KKyAgICB0cmFjZS11bmV4
cGVjdGVkICAgIGxpa2UgJ3RyYWNlLWV2ZXJ5dGhpbmcnLCBidXQgb25seSBmb3IgdGVzdHMgd2l0
aAorICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZCByZXN1bHRzLiBJZiB0aGlzIG9w
dGlvbiBpcyBzcGVjaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIG92ZXJy
aWRlIHRoZSAndW5leHBlY3RlZCcgb3B0aW9uLgorCitBdCB0aGUgZW5kIG9mIHRoZSBydW46Cisg
ICAgYWN0dWFsICAgICAgICAgICAgICBwcmludCBhIHN1bW1hcnkgb2YgdGhlIGFjdHVhbCByZXN1
bHRzCisgICAgc2xvd2VzdCAgICAgICAgICAgICBwcmludCAlKHNsb3dlc3QpZCBzbG93ZXN0IHRl
c3RzIGFuZCB0aGUgdGltZSB0aGV5IHRvb2sKKyAgICB0aW1pbmcgICAgICAgICAgICAgIHByaW50
IHRpbWluZyBzdGF0aXN0aWNzCisgICAgdW5leHBlY3RlZC1yZXN1bHRzICBwcmludCBhIGxpc3Qg
b2YgdGhlIHRlc3RzIHdpdGggdW5leHBlY3RlZCByZXN1bHRzCisgICAgb25lLWxpbmUtc3VtbWFy
eSAgICBwcmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2YgdGhlIHJ1bgorCitOb3RlczoKKyAgICAt
ICdkZXRhaWxlZC1wcm9ncmVzcycgY2FuIG9ubHkgYmUgdXNlZCBpZiBydW5uaW5nIGluIGEgc2lu
Z2xlIHRocmVhZAorICAgICAgKHVzaW5nIC0tY2hpbGQtcHJvY2Vzc2VzPTEpIG9yIGEgc2luZ2xl
IHF1ZXVlIG9mIHRlc3RzICh1c2luZworICAgICAgIC0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFs
bGVsKS4gSWYgdGhlc2UgY29uZGl0aW9ucyBhcmVuJ3QgdHJ1ZSwKKyAgICAgICdvbmUtbGluZS1w
cm9ncmVzcycgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisgICAgLSBJZiBib3RoICdkZXRhaWxlZC1w
cm9ncmVzcycgYW5kICdvbmUtbGluZS1wcm9ncmVzcycgYXJlIHNwZWNpZmllZCAoYW5kCisgICAg
ICBib3RoIGFyZSBwb3NzaWJsZSksICdkZXRhaWxlZC1wcm9ncmVzcycgd2lsbCBiZSB1c2VkLgor
ICAgIC0gSWYgJ25vdGhpbmcnIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIGFsbCBvZiB0aGUg
b3RoZXIgb3B0aW9ucy4KKworLS1wcmludCAnZXZlcnl0aGluZycgaXMgZXF1aXZhbGVudCB0byAt
LXByaW50ICclKGV2ZXJ5dGhpbmcpcycuCisKK1RoZSBkZWZhdWx0IGlzIHRvIC0tcHJpbnQgJyUo
ZGVmYXVsdClzJy4KKyIiIiAlIHsnc2xvd2VzdCc6IE5VTV9TTE9XX1RFU1RTX1RPX0xPRywgJ2V2
ZXJ5dGhpbmcnOiBQUklOVF9FVkVSWVRISU5HLCAKKyAgICAgICAnZGVmYXVsdCc6IFBSSU5UX0RF
RkFVTFQgIH0KKworCitkZWYgcHJpbnRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAg
ICMgTm90ZTogd2UgdXNlIHByaW50X29wdGlvbnMgcmF0aGVyIHRoYW4ganVzdCAncHJpbnQnIGJl
Y2F1c2UgcHJpbnQKKyAgICAgICAgIyBpcyBhIHJlc2VydmVkIHdvcmQuCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItLXByaW50IiwgZGVzdD0icHJpbnRfb3B0aW9ucyIsCisgICAgICAg
ICAgICBkZWZhdWx0PVBSSU5UX0RFRkFVTFQsCisgICAgICAgICAgICBoZWxwPSgiY29udHJvbHMg
cHJpbnQgb3V0cHV0IG9mIHRlc3QgcnVuLiAiCisgICAgICAgICAgICAgICAgICAiVXNlIC0taGVs
cC1wcmludGluZyBmb3IgbW9yZS4iKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCIt
LWhlbHAtcHJpbnRpbmciLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgaGVscD0i
c2hvdyBkZXRhaWxlZCBoZWxwIG9uIGNvbnRyb2xsaW5nIHByaW50IG91dHB1dCIpLAorICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwKKyAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9ImluY2x1ZGUgZGVidWctbGV2
ZWwgbG9nZ2luZyIpLAorCisgICAgICAgICMgRklYTUU6IHdlIHNob3VsZCByZW1vdmUgdGhpczsg
aXQncyBwcmV0dHkgbXVjaCBvYnNvbGV0ZSB3aXRoIHRoZQorICAgICAgICAjIC0tcHJpbnQgdHJh
Y2UtZXZlcnl0aGluZyBvcHRpb24uCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNv
dXJjZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgaGVscD0oInNob3cgZXhw
ZWN0ZWQgcmVzdWx0IGZpbGUgcGF0aCBmb3IgZWFjaCB0ZXN0ICIKKyAgICAgICAgICAgICAgICAg
IihpbXBsaWVzIC0tdmVyYm9zZSkiKSksCisgICAgXQorCisKK2RlZiBjb25maWd1cmVfbG9nZ2lu
ZyhvcHRpb25zLCBtZXRlcik6CisgICAgIiIiQ29uZmlndXJlcyB0aGUgbG9nZ2luZyBzeXN0ZW0u
IiIiCisgICAgbG9nX2ZtdCA9ICclKG1lc3NhZ2UpcycKKyAgICBsb2dfZGF0ZWZtdCA9ICcleSVt
JWQgJUg6JU06JVMnCisgICAgbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9u
cy52ZXJib3NlOgorICAgICAgICBsb2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6
JShsaW5lbm8pLTRkICUobGV2ZWxuYW1lKXMgJworICAgICAgICAgICAgICAgICAgICclKG1lc3Nh
Z2UpcycpCisgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKKworICAgIGxvZ2dpbmcu
YmFzaWNDb25maWcobGV2ZWw9bG9nX2xldmVsLCBmb3JtYXQ9bG9nX2ZtdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGVmbXQ9bG9nX2RhdGVmbXQsIHN0cmVhbT1tZXRlcikKKworCitkZWYg
cGFyc2VfcHJpbnRfb3B0aW9ucyhwcmludF9vcHRpb25zLCBjaGlsZF9wcm9jZXNzZXMsIGlzX2Z1
bGx5X3BhcmFsbGVsKToKKyAgICAiIiJQYXJzZSB0aGUgb3B0aW9ucyBwcm92aWRlZCB0byAtLXBy
aW50IGFuZCBkZWR1cCBhbmQgcmFuayB0aGVtLgorCisgICAgUmV0dXJucworICAgICAgICBhIHNl
dCgpIG9mIHN3aXRjaGVzIHRoYXQgZ292ZXJuIGhvdyBsb2dnaW5nIGlzIGRvbmUKKworICAgICIi
IgorICAgIHN3aXRjaGVzID0gc2V0KHByaW50X29wdGlvbnMuc3BsaXQoJywnKSkKKworICAgIGlm
ICdub3RoaW5nJyBpbiBzd2l0Y2hlczoKKyAgICAgICAgcmV0dXJuIHNldCgpCisKKyAgICBpZiAo
Y2hpbGRfcHJvY2Vzc2VzICE9IDEgYW5kIG5vdCBpc19mdWxseV9wYXJhbGxlbCBhbmQKKyAgICAg
ICAgJ2RldGFpbGVkLXByb2dyZXNzJyBpbiBzd2l0Y2hlcyk6CisgICAgICAgIF9sb2cud2Fybigi
Q2FuIG9ubHkgcHJpbnQgJ2RldGFpbGVkLXByb2dyZXNzJyBpZiBydW5uaW5nICIKKyAgICAgICAg
ICAgICAgICAgICJ3aXRoIC0tY2hpbGQtcHJvY2Vzc2VzPTEgb3IgIgorICAgICAgICAgICAgICAg
ICAgIndpdGggLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwuICIKKyAgICAgICAgICAgICAg
ICAgICJVc2luZyAnb25lLWxpbmUtcHJvZ3Jlc3MnIGluc3RlYWQuIikKKyAgICAgICAgc3dpdGNo
ZXMuZGlzY2FyZCgnZGV0YWlsZWQtcHJvZ3Jlc3MnKQorICAgICAgICBzd2l0Y2hlcy5hZGQoJ29u
ZS1saW5lLXByb2dyZXNzJykKKworICAgIGlmICdldmVyeXRoaW5nJyBpbiBzd2l0Y2hlczoKKyAg
ICAgICAgc3dpdGNoZXMuZGlzY2FyZCgnZXZlcnl0aGluZycpCisgICAgICAgIHN3aXRjaGVzLnVw
ZGF0ZShzZXQoUFJJTlRfRVZFUllUSElORy5zcGxpdCgnLCcpKSkKKworICAgIGlmICdkZXRhaWxl
ZC1wcm9ncmVzcycgaW4gc3dpdGNoZXM6CisgICAgICAgIHN3aXRjaGVzLmRpc2NhcmQoJ29uZS1s
aW5lLXByb2dyZXNzJykKKworICAgIGlmICd0cmFjZS1ldmVyeXRoaW5nJyBpbiBzd2l0Y2hlczoK
KyAgICAgICAgc3dpdGNoZXMuZGlzY2FyZCgnZGV0YWlsZWQtcHJvZ3Jlc3MnKQorICAgICAgICBz
d2l0Y2hlcy5kaXNjYXJkKCdvbmUtbGluZS1wcm9ncmVzcycpCisgICAgICAgIHN3aXRjaGVzLmRp
c2NhcmQoJ3RyYWNlLXVuZXhwZWN0ZWQnKQorICAgICAgICBzd2l0Y2hlcy5kaXNjYXJkKCd1bmV4
cGVjdGVkJykKKworICAgIGlmICd0cmFjZS11bmV4cGVjdGVkJyBpbiBzd2l0Y2hlczoKKyAgICAg
ICAgc3dpdGNoZXMuZGlzY2FyZCgndW5leHBlY3RlZCcpCisKKyAgICByZXR1cm4gc3dpdGNoZXMK
KworCitjbGFzcyBQcmludGVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgaGFuZGxpbmcgYWxsIG5v
bi1kZWJ1Zy1sb2dnaW5nIHByaW50aW5nIGRvbmUgYnkgcnVuLXdlYmtpdC10ZXN0cy4KKworICAg
IFByaW50aW5nIGZyb20gcnVuLXdlYmtpdC10ZXN0cyBmYWxscyBpbnRvIHR3byBidWNrZXRzOiBn
ZW5lcmFsIG9yCisgICAgcmVndWxhciBvdXRwdXQgdGhhdCBpcyByZWFkIG9ubHkgYnkgaHVtYW5z
IGFuZCBjYW4gYmUgY2hhbmdlZCBhdCBhbnkKKyAgICB0aW1lLCBhbmQgb3V0cHV0IHRoYXQgaXMg
cGFyc2VkIGJ5IGJ1aWxkYm90cyAoYW5kIGh1bWFucykgYW5kIGhlbmNlCisgICAgbXVzdCBiZSBj
aGFuZ2VkIG1vcmUgY2FyZWZ1bGx5IGFuZCBpbiBjb29yZGluYXRpb24gd2l0aCB0aGUgYnVpbGRi
b3QKKyAgICBwYXJzaW5nIGNvZGUgKGluIGNocm9taXVtLm9yZydzIGJ1aWxkYm90L21hc3Rlci5j
aHJvbWl1bS9zY3JpcHRzL21hc3Rlci8KKyAgICBsb2dfcGFyc2VyL3dlYmtpdF90ZXN0X2NvbW1h
bmQucHkgc2NyaXB0KS4KKworICAgIEJ5IGRlZmF1bHQgdGhlIGJ1aWxkYm90LXBhcnNlZCBjb2Rl
IGdldHMgbG9nZ2VkIHRvIHN0ZG91dCwgYW5kIHJlZ3VsYXIKKyAgICBvdXRwdXQgZ2V0cyBsb2dn
ZWQgdG8gc3RkZXJyLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBy
ZWd1bGFyX291dHB1dCwgYnVpbGRib3Rfb3V0cHV0LAorICAgICAgICAgICAgICAgICBjaGlsZF9w
cm9jZXNzZXMsIGlzX2Z1bGx5X3BhcmFsbGVsKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3MK
KyAgICAgICAgICBwb3J0ICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMg
cm91dGluZXMKKyAgICAgICAgICBvcHRpb25zICAgICAgICAgICAgT3B0aW9uUGFyc2VyIG9iamVj
dCB3aXRoIGNvbW1hbmQgbGluZSBzZXR0aW5ncworICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0ICAg
ICBzdHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIG9ubHkgZm9yIGh1bWFucworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbgorICAgICAgICAgIGJ1aWxk
Ym90X291dHB1dCAgICBzdHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIHRvIGJlIHJlYWQg
YnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkYm90cyAoYW5kIGh1bWFu
cykgc2hvdWxkIGJlIHdyaXR0ZW4KKyAgICAgICAgICBjaGlsZF9wcm9jZXNzZXMgICAgbnVtYmVy
IG9mIHBhcmFsbGVsIHRocmVhZHMgcnVubmluZyAodXN1YWxseQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250cm9sbGVkIGJ5IC0tY2hpbGQtcHJvY2Vzc2VzKQorICAgICAgICAgIGlz
X2Z1bGx5X3BhcmFsbGVsICBhcmUgdGhlIHRlc3RzIHJ1bm5pbmcgaW4gYSBzaW5nbGUgcXVldWUs
IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNoYXJkcyAodXN1YWxseSBjb250
cm9sbGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZXhwZXJpbWVudGFsLWZ1
bGx5LXBhcmFsbGVsKQorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgbGFzdCB0d28gYXJncyBhcmUg
c2VwYXJhdGUgcmF0aGVyIHRoYW4gYnVuZGxlZCBpbnRvCisgICAgICAgIHRoZSBvcHRpb25zIHN0
cnVjdHVyZSBzbyB0aGF0IHRoaXMgb2JqZWN0IGRvZXMgbm90IGFzc3VtZSBhbnkgZmxhZ3MKKyAg
ICAgICAgc2V0IGluIG9wdGlvbnMgdGhhdCB3ZXJlbid0IHJldHVybmVkIGZyb20gbG9nZ2luZ19v
cHRpb25zKCksIGFib3ZlLgorICAgICAgICBUaGUgdHdvIGFyZSB1c2VkIHRvIGRldGVybWluZSB3
aGV0aGVyIG9yIG5vdCB3ZSBjYW4gc2Vuc2libHkgdXNlCisgICAgICAgIHRoZSAnZGV0YWlsZWQt
cHJvZ3Jlc3MnIG9wdGlvbiwgb3IgY2FuIG9ubHkgdXNlICdvbmUtbGluZS1wcm9ncmVzcycuCisg
ICAgICAgICIiIgorICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0gPSBidWlsZGJvdF9vdXRw
dXQKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKKyAgICAgICAgc2VsZi5fc3RyZWFtID0gcmVndWxhcl9vdXRwdXQKKworICAgICAgICAj
IFRoZXNlIGFyZSB1c2VkIGZvciAtLXByaW50IGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0
YXR1cyBieQorICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXIg
PSBOb25lCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIKKyAgICAgICAg
c2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKKworICAgICAgICBzZWxmLl9tZXRlciA9IG1l
dGVyZWRfc3RyZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9vdXRwdXQpCisg
ICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYuX29wdGlvbnMsIHNlbGYuX21ldGVyKQorCisg
ICAgICAgIHNlbGYuc3dpdGNoZXMgPSBwYXJzZV9wcmludF9vcHRpb25zKG9wdGlvbnMucHJpbnRf
b3B0aW9ucywKKyAgICAgICAgICAgIGNoaWxkX3Byb2Nlc3NlcywgaXNfZnVsbHlfcGFyYWxsZWwp
CisKKyAgICAjIFRoZXNlIHR3byByb3V0aW5lcyBqdXN0IGhpZGUgdGhlIGltcGxtZW50YXRpb24g
b2YgdGhlIHN3aXRjaGVzLgorICAgIGRlZiBkaXNhYmxlZChzZWxmLCBvcHRpb24pOgorICAgICAg
ICByZXR1cm4gbm90IG9wdGlvbiBpbiBzZWxmLnN3aXRjaGVzCisKKyAgICBkZWYgZW5hYmxlZChz
ZWxmLCBvcHRpb24pOgorICAgICAgICByZXR1cm4gb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKKwor
ICAgIGRlZiBoZWxwX3ByaW50aW5nKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZShIRUxQX1BS
SU5USU5HKQorCisgICAgZGVmIHByaW50X2FjdHVhbChzZWxmLCBtc2cpOgorICAgICAgICBpZiBz
ZWxmLmRpc2FibGVkKCdhY3R1YWwnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxm
Ll9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIHByaW50X2Nv
bmZpZyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2NvbmZpZycpCisKKyAg
ICBkZWYgcHJpbnRfZXhwZWN0ZWQoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53cml0ZShtc2cs
ICdleHBlY3RlZCcpCisKKyAgICBkZWYgcHJpbnRfdGltaW5nKHNlbGYsIG1zZyk6CisgICAgICAg
IHNlbGYud3JpdGUobXNnLCAndGltaW5nJykKKworICAgIGRlZiBwcmludF9vbmVfbGluZV9zdW1t
YXJ5KHNlbGYsIHRvdGFsLCBleHBlY3RlZCk6CisgICAgICAgICIiIlByaW50IGEgb25lLWxpbmUg
c3VtbWFyeSBvZiB0aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgdG90YWw6IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4KKyAgICAgICAgICBleHBlY3Rl
ZDogbnVtYmVyIG9mIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNl
bGYuZGlzYWJsZWQoJ29uZS1saW5lLXN1bW1hcnknKToKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIHVuZXhwZWN0ZWQgPSB0b3RhbCAtIGV4cGVjdGVkCisgICAgICAgIGlmIHVuZXhwZWN0
ZWQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJBbGwgJWQgdGVzdHMgcmFu
IGFzIGV4cGVjdGVkLlxuIiAlIGV4cGVjdGVkKQorICAgICAgICBlbGlmIGV4cGVjdGVkID09IDE6
CisgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiXG4xIHRlc3QgcmFuIGFzIGV4cGVjdGVk
LCAlZCBkaWRuJ3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBl
Y3RlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbiVk
IHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OlxuXG4iICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChleHBlY3RlZCwgdW5leHBlY3RlZCkpCisKKyAgICBkZWYgcHJpbnRf
dGVzdF9yZXN1bHQoc2VsZiwgcmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cik6Cisg
ICAgICAgICIiIlByaW50IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSAt
LXByaW50LiIiIgorICAgICAgICBpZiAoc2VsZi5lbmFibGVkKCd0cmFjZS1ldmVyeXRoaW5nJykg
b3IKKyAgICAgICAgICAgIHNlbGYuZW5hYmxlZCgndHJhY2UtdW5leHBlY3RlZCcpIGFuZCBub3Qg
ZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF90cmFjZShyZXN1bHQsIGV4
cF9zdHIsIGdvdF9zdHIpCisgICAgICAgIGVsaWYgKG5vdCBleHBlY3RlZCBhbmQgc2VsZi5lbmFi
bGVkKCd1bmV4cGVjdGVkJykgYW5kCisgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZWQoJ2RldGFp
bGVkLXByb2dyZXNzJykpOgorICAgICAgICAgICAgIyBOb3RlOiAnZGV0YWlsZWQtcHJvZ3Jlc3Mn
IGhhbmRsZXMgdW5leHBlY3RlZCByZXN1bHRzIGludGVybmFsbHksCisgICAgICAgICAgICAjIHNv
IHdlIHNraXAgaXQgaGVyZS4KKyAgICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVz
dF9yZXN1bHQocmVzdWx0KQorCisgICAgZGVmIF9wcmludF90ZXN0X3RyYWNlKHNlbGYsIHJlc3Vs
dCwgZXhwX3N0ciwgZ290X3N0cik6CisgICAgICAgICIiIlByaW50IGRldGFpbGVkIHJlc3VsdHMg
b2YgYSB0ZXN0ICh0cmlnZ2VyZWQgYnkgLS1wcmludCB0cmFjZS0qKS4KKyAgICAgICAgRm9yIGVh
Y2ggdGVzdCwgcHJpbnQ6CisgICAgICAgICAgIC0gbG9jYXRpb24gb2YgdGhlIGV4cGVjdGVkIGJh
c2VsaW5lcworICAgICAgICAgICAtIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgLSBhY3R1
YWwgcmVzdWx0CisgICAgICAgICAgIC0gdGltaW5nIGluZm8KKyAgICAgICAgIiIiCisgICAgICAg
IGZpbGVuYW1lID0gcmVzdWx0LmZpbGVuYW1lCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3Bv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5fd3JpdGUo
J3RyYWNlOiAlc1xuJyAlIHRlc3RfbmFtZSkKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgdHh0OiAl
c1xuJyAlCisgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUoCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUo
ZmlsZW5hbWUsICcudHh0JykpKQorICAgICAgICBwbmdfZmlsZSA9IHNlbGYuX3BvcnQuZXhwZWN0
ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMo
cG5nX2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJyAgcG5nOiAlc1xuJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmls
ZW5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJyAgcG5nOiA8
bm9uZT5cbicpCisgICAgICAgIHNlbGYuX3dyaXRlKCcgIGV4cDogJXNcbicgJSBleHBfc3RyKQor
ICAgICAgICBzZWxmLl93cml0ZSgnICBnb3Q6ICVzXG4nICUgZ290X3N0cikKKyAgICAgICAgc2Vs
Zi5fd3JpdGUoJyB0b29rOiAlLS4zZlxuJyAlIHJlc3VsdC50ZXN0X3J1bl90aW1lKQorICAgICAg
ICBzZWxmLl93cml0ZSgnXG4nKQorCisgICAgZGVmIF9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVz
dWx0KHNlbGYsIHJlc3VsdCk6CisgICAgICAgICIiIlByaW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0
IHJlc3VsdCBsaW5lLiIiIgorICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQ
RUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdC50eXBlXVswXQorICAgICAgICBzZWxmLndyaXRl
KCIgICVzIC0+IHVuZXhwZWN0ZWQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHJlc3VsdC5maWxlbmFtZSksCisgICAgICAgICAgICAg
ICAgICAgIGRlc2MpLCAidW5leHBlY3RlZCIpCisKKyAgICBkZWYgcHJpbnRfcHJvZ3Jlc3Moc2Vs
ZiwgcmVzdWx0X3N1bW1hcnksIHJldHJ5aW5nLCB0ZXN0X2xpc3QpOgorICAgICAgICAiIiJQcmlu
dCBwcm9ncmVzcyB0aHJvdWdoIHRoZSB0ZXN0cyBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJpbnQuIiIi
CisgICAgICAgIGlmIHNlbGYuZW5hYmxlZCgnZGV0YWlsZWQtcHJvZ3Jlc3MnKToKKyAgICAgICAg
ICAgIHNlbGYuX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2xp
c3QpCisgICAgICAgIGVsaWYgc2VsZi5lbmFibGVkKCdvbmUtbGluZS1wcm9ncmVzcycpOgorICAg
ICAgICAgICAgc2VsZi5fcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnksIHJl
dHJ5aW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYg
cmVzdWx0X3N1bW1hcnkucmVtYWluaW5nID09IDA6CisgICAgICAgICAgICBzZWxmLl9tZXRlci51
cGRhdGUoJycpCisKKyAgICBkZWYgX3ByaW50X29uZV9saW5lX3Byb2dyZXNzKHNlbGYsIHJlc3Vs
dF9zdW1tYXJ5LCByZXRyeWluZyk6CisgICAgICAgICIiIkRpc3BsYXlzIHRoZSBwcm9ncmVzcyB0
aHJvdWdoIHRoZSB0ZXN0IHJ1bi4iIiIKKyAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAq
IChyZXN1bHRfc3VtbWFyeS5leHBlY3RlZCArCisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51
bmV4cGVjdGVkKSAvIHJlc3VsdF9zdW1tYXJ5LnRvdGFsCisgICAgICAgIGFjdGlvbiA9ICJUZXN0
aW5nIgorICAgICAgICBpZiByZXRyeWluZzoKKyAgICAgICAgICAgIGFjdGlvbiA9ICJSZXRyeWlu
ZyIKKyAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzICglZCUlKTogJWQgcmFuIGFzIGV4
cGVjdGVkLCAlZCBkaWRuJ3QsIgorICAgICAgICAgICAgIiAlZCBsZWZ0IiAlIChhY3Rpb24sIHBl
cmNlbnRfY29tcGxldGUsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLAorICAgICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykpCisKKyAg
ICBkZWYgX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCB0ZXN0
X2xpc3QpOgorICAgICAgICAiIiJEaXNwbGF5IGRldGFpbGVkIHByb2dyZXNzIG91dHB1dCB3aGVy
ZSB3ZSBwcmludCB0aGUgZGlyZWN0b3J5IG5hbWUKKyAgICAgICAgYW5kIG9uZSBkb3QgZm9yIGVh
Y2ggY29tcGxldGVkIHRlc3QuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5CisgICAgICAgICItLWxvZyBk
ZXRhaWxlZC1wcm9ncmVzcyIuIiIiCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1i
ZXIgPT0gbGVuKHRlc3RfbGlzdCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXh0
X3Rlc3QgPSB0ZXN0X2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KKyAgICAgICAgbmV4
dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF9wcm9n
cmVzc19zdHIgPT0gIiI6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9
ICIlczogIiAlIChuZXh0X2RpcikKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gbmV4
dF9kaXIKKworICAgICAgICB3aGlsZSBuZXh0X3Rlc3QgaW4gcmVzdWx0X3N1bW1hcnkucmVzdWx0
czoKKyAgICAgICAgICAgIGlmIG5leHRfZGlyICE9IHNlbGYuX2N1cnJlbnRfZGlyOgorICAgICAg
ICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIlc1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0cikpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAi
JXM6IC4iICUgKG5leHRfZGlyKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0g
bmV4dF9kaXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVu
dF9wcm9ncmVzc19zdHIgKz0gIi4iCisKKyAgICAgICAgICAgIGlmIChuZXh0X3Rlc3QgaW4gcmVz
dWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzIGFuZAorICAgICAgICAgICAgICAgIHNlbGYu
ZW5hYmxlZCgndW5leHBlY3RlZCcpKToKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0
ZSgiJXNcbiIgJSBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikKKyAgICAgICAgICAgICAgICB0
ZXN0X3Jlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbbmV4dF90ZXN0XQorICAgICAgICAg
ICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQodGVzdF9yZXN1bHQpCisg
ICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSBzZWxm
Ll9jdXJyZW50X2RpcgorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyICs9
IDEKKyAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPT0gbGVuKHRlc3Rf
bGlzdCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbmV4dF90ZXN0ID0g
dGVzdF9saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAgICAgICAgICBuZXh0X2Rp
ciA9IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKworICAgICAgICBpZiByZXN1bHRfc3VtbWFyeS5y
ZW1haW5pbmc6CisgICAgICAgICAgICByZW1haW5fc3RyID0gIiAoJWQpIiAlIChyZXN1bHRfc3Vt
bWFyeS5yZW1haW5pbmcpCisgICAgICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMlcyIg
JSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVtYWluX3N0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMiICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
KSkKKworICAgIGRlZiBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9y
ZXN1bHRzKToKKyAgICAgICAgIiIiUHJpbnRzIGEgbGlzdCBvZiB0aGUgdW5leHBlY3RlZCByZXN1
bHRzIHRvIHRoZSBidWlsZGJvdCBzdHJlYW0uIiIiCisgICAgICAgIGlmIHNlbGYuZGlzYWJsZWQo
J3VuZXhwZWN0ZWQtcmVzdWx0cycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGFz
c2VzID0ge30KKyAgICAgICAgZmxha3kgPSB7fQorICAgICAgICByZWdyZXNzaW9ucyA9IHt9CisK
KyAgICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cydd
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3Bs
aXQoIiAiKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0
KCIgIikKKyAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKKyAgICAgICAgICAgICAg
ICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2Rp
Y3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxpZiAnVElN
RU9VVCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9s
aXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
RXhwZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWwsIGJ1dCBwYXNz
ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAg
ICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAgICAgICAgICMgV2UgZ3Jv
dXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgorICAgICAg
ICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBdLCB0ZXN0KQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMo
cmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisgICAgICAgIGlmIGxlbihw
YXNzZXMpIG9yIGxlbihmbGFreSkgb3IgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIHNl
bGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihwYXNzZXMp
OgorICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiJXM6ICglZClcbiIgJSAo
a2V5LCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAg
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVp
bGRib3Rfc3RyZWFtLndyaXRlKCIgICVzXG4iICUgdGVzdCkKKyAgICAgICAgICAgICAgICBzZWxm
Ll9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90
X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihmbGFreSk6CisgICAgICAgICAg
ICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQ
VElPTlMKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5Lml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9O
U1trZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3Jp
dGUoIlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAoJWQpXG4iCisgICAgICAgICAgICAgICAgICAg
ICUgKGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAg
ICB0ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ11bdGVz
dF0KKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0WydhY3R1YWwnXS5zcGxpdCgi
ICIpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0WydleHBlY3RlZCddLnNw
bGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0Zp
bGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgICAgICBuZXdfZXhw
ZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXMiICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25z
X2xpc3QpKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxu
IikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAg
ICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKKyAgICAgICAgICAgIGZv
ciBrZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0K
KyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoCisgICAgICAgICAg
ICAgICAgICAgICJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICglZClcbiIgJSAoCisgICAg
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAg
ICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIg
ICVzID0gJXNcbiIgJSAodGVzdCwga2V5KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJv
dF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53
cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10p
IGFuZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIiVzXG4iICUgIi0iICogNzgpCisKKyAgICBkZWYgcHJpbnRfdXBkYXRlKHNl
bGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYuZGlzYWJsZWQoJ3VwZGF0ZXMnKToKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUobXNnKQorCisgICAgZGVmIHdy
aXRlKHNlbGYsIG1zZywgb3B0aW9uPSJtaXNjIik6CisgICAgICAgIGlmIHNlbGYuZGlzYWJsZWQo
b3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl93cml0ZSgiJXNcbiIg
JSBtc2cpCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuX21ldGVy
LnVwZGF0ZShtc2cpCisKKyMKKyMgVXRpbGl0eSByb3V0aW5lcyB1c2VkIGJ5IHRoZSBDb250cm9s
bGVyIGNsYXNzCisjCisKKworZGVmIF9hZGRfdG9fZGljdF9vZl9saXN0cyhkaWN0LCBrZXksIHZh
bHVlKToKKyAgICBkaWN0LnNldGRlZmF1bHQoa2V5LCBbXSkuYXBwZW5kKHZhbHVlKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgzNjg3Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cHJpbnRpbmdfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw0ODUgQEAKKyMhL3Vzci9iaW4vcHl0aG9u
CisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgcHJpbnRpbmcucHkuIiIiCisK
K2ltcG9ydCBvcworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgcGRiCitpbXBvcnQgc3lzCitpbXBv
cnQgdW5pdHRlc3QKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
IGltcG9ydCBwb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgcHJpbnRpbmcKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
IGltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKKworCitjbGFzcyBB
cnJheVN0cmVhbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5fY29udGVudHMgPSBbXQorCisgICAgZGVmIHdyaXRlKHNlbGYsIG1zZyk6CisgICAgICAgIHNl
bGYuX2NvbnRlbnRzLmFwcGVuZChtc2cpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fY29udGVudHMKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2Vs
Zi5fY29udGVudHMgPSBbXQorCisgICAgZGVmIGVtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4g
KGxlbihzZWxmLl9jb250ZW50cykgPT0gMCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxBcnJh
eVN0cmVhbTogJyArIHN0cihzZWxmLl9jb250ZW50cykgKyAnPicKKworCitkZWYgZ2V0X29wdGlv
bnMoYXJncyk6CisgICAgbG8gPSBwcmludGluZy5wcmludF9vcHRpb25zKCkKKyAgICBvcHRpb25f
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PWxvKQorICAgIHJldHVy
biBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworCitkZWYgZ2V0X3Jlc3VsdChmaWxl
bmFtZSwgcmVzdWx0X3R5cGU9dGVzdF9leHBlY3RhdGlvbnMuUEFTUywgcnVuX3RpbWU9MCk6Cisg
ICAgZmFpbHVyZXMgPSBbXQorICAgIGlmIHJlc3VsdF90eXBlID09IHRlc3RfZXhwZWN0YXRpb25z
LlRJTUVPVVQ6CisgICAgICAgIGZhaWx1cmVzID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVv
dXQoKV0KKyAgICBlbGlmIHJlc3VsdF90eXBlID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIOgor
ICAgICAgICBmYWlsdXJlcyA9IFt0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpXQorICAgIHJl
dHVybiBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0UmVzdWx0KGZpbGVuYW1lLCBmYWlsdXJl
cywgcnVuX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnM9MCkKKworCitkZWYgZ2V0X3Jlc3Vs
dF9zdW1tYXJ5KHBvcnRfb2JqLCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnNfc3RyKToKKyAgICBl
eHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAorICAgICAg
ICBwb3J0X29iaiwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zX3N0ciwKKyAgICAgICAgcG9ydF9v
YmoudGVzdF9wbGF0Zm9ybV9uYW1lKCksIGlzX2RlYnVnX21vZGU9RmFsc2UsCisgICAgICAgIGlz
X2xpbnRfbW9kZT1GYWxzZSwgdGVzdHNfYXJlX3ByZXNlbnQ9RmFsc2UpCisKKyAgICBycyA9IHJ1
bl93ZWJraXRfdGVzdHMuUmVzdWx0U3VtbWFyeShleHBlY3RhdGlvbnMsIHRlc3RfZmlsZXMpCisg
ICAgcmV0dXJuIHJzLCBleHBlY3RhdGlvbnMKKworCitjbGFzcyBUZXN0VXRpbGl0eUZ1bmN0aW9u
cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uZmlndXJlX2xvZ2dpbmcoc2Vs
Zik6CisgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcmVzZXQg
dGhlIGJhc2ljIGxvZ2dlci4KKyAgICAgICAgIyBGSVhNRTogSWYgb3RoZXIgdGVzdGluZyBjbGFz
c2VzIGNhbGwgbG9nZ2luZy5iYXNpY0NvbmZpZygpIHRoZW4KKyAgICAgICAgIyBGSVhNRTogdGhl
c2UgY2FsbHMgYmVjb21lIG5vLW9wcyBhbmQgd2UgY2FuJ3QgY29udHJvbCB0aGUKKyAgICAgICAg
IyBGSVhNRTogY29uZmlndXJhdGlvbiB0byB0ZXN0IHRoaW5ncyBwcm9wZXJseS4KKyAgICAgICAg
b3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFtdKQorICAgICAgICBzdHJlYW0gPSBBcnJheVN0
cmVhbSgpCisgICAgICAgIHByaW50aW5nLmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVh
bSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJ0aGlzIHNob3VsZCBiZSBsb2dnZWQiKQorICAgICAg
ICAjIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLmVtcHR5KCkpCisKKyAgICAgICAgc3RyZWFtLnJl
c2V0KCkKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGhpcyBzaG91bGQgbm90IGJlIGxvZ2dlZCIp
CisgICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgICAgIHN0
cmVhbS5yZXNldCgpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbJy0tdmVy
Ym9zZSddKQorICAgICAgICBwcmludGluZy5jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zLCBzdHJl
YW0pCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoaXMgc2hvdWxkIGJlIGxvZ2dlZCIpCisgICAg
ICAgICMgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3By
aW50X29wdGlvbnMoc2VsZik6CisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhb
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMgaXMgbm90IE5vbmUpCisKKworY2xh
c3MgIFRlc3RwcmludGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgZ2V0X3ByaW50ZXIo
c2VsZiwgYXJncz1Ob25lLCBzaW5nbGVfdGhyZWFkZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgaXNfZnVsbHlfcGFyYWxsZWw9RmFsc2UpOgorICAgICAgICBwcmludGluZ19vcHRpb25zID0g
cHJpbnRpbmcucHJpbnRfb3B0aW9ucygpCisgICAgICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9cHJpbnRpbmdfb3B0aW9ucykKKyAgICAgICAgb3B0
aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorICAgICAgICBzZWxm
Ll9wb3J0ID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25zKQorICAgICAgICBucHJvYyA9IDIKKyAg
ICAgICAgaWYgc2luZ2xlX3RocmVhZGVkOgorICAgICAgICAgICAgbnByb2MgPSAxCisKKyAgICAg
ICAgcmVndWxhcl9vdXRwdXQgPSBBcnJheVN0cmVhbSgpCisgICAgICAgIGJ1aWxkYm90X291dHB1
dCA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAgcHJpbnRlciA9IHByaW50aW5nLlByaW50ZXIoc2Vs
Zi5fcG9ydCwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dCwgc2luZ2xlX3RocmVhZGVkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc19mdWxseV9wYXJhbGxlbCkKKyAgICAgICAgcmV0
dXJuIHByaW50ZXIsIHJlZ3VsYXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQKKworICAgIGRlZiB0
ZXN0X2hlbHBfcHJpbnRlcihzZWxmKToKKyAgICAgICAgIyBIZXJlIGFuZCBiZWxvdyB3ZSdsbCBj
YWxsIHRoZSAicmVndWxhciIgcHJpbnRlciBlcnIgYW5kIHRoZQorICAgICAgICAjIGJ1aWxkYm90
IHByaW50ZXIgb3V0OyB0aGlzIGNvcnJlc3BvbmRzIHRvIGhvdyB0aGluZ3MgcnVuIG9uIHRoZQor
ICAgICAgICAjIGJvdHMgd2l0aCBzdGRlcnIgYW5kIHN0ZG91dC4KKyAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKCkKKworICAgICAgICAjIFRoaXMgcm91dGluZSBz
aG91bGQgcHJpbnQgc29tZXRoaW5nIHRvIHN0ZG91dC4gdGVzdGluZyB3aGF0IGl0IGlzCisgICAg
ICAgICMgaXMga2luZCBvZiBwb2ludGxlc3MuCisgICAgICAgIHByaW50ZXIuaGVscF9wcmludGlu
ZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiBkb19zd2l0Y2hfdGVzdHMoc2VsZiwg
bWV0aG9kX25hbWUsIHN3aXRjaCwgdG9fYnVpbGRib3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlPSdoZWxsbycsIGV4cF9lcnI9Tm9uZSwgZXhwX2JvdD1Ob25lKToKKyAgICAgICAg
ZGVmIGRvX2hlbHBlcihtZXRob2RfbmFtZSwgc3dpdGNoLCBtZXNzYWdlLCBleHBfZXJyLCBleHBf
Ym90KToKKyAgICAgICAgICAgIHByaW50ZXIsIGVyciwgYm90ID0gc2VsZi5nZXRfcHJpbnRlcihb
Jy0tcHJpbnQnLCBzd2l0Y2hdKQorICAgICAgICAgICAgZ2V0YXR0cihwcmludGVyLCBtZXRob2Rf
bmFtZSkobWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBl
eHBfZXJyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib3QuZ2V0KCksIGV4cF9ib3Qp
CisKKyAgICAgICAgaWYgdG9fYnVpbGRib3Q6CisgICAgICAgICAgICBpZiBleHBfZXJyIGlzIE5v
bmU6CisgICAgICAgICAgICAgICAgZXhwX2VyciA9IFtdCisgICAgICAgICAgICBpZiBleHBfYm90
IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZXhwX2JvdCA9IFsgbWVzc2FnZSArICdcbicgXQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZXhwX2VyciBpcyBOb25lOgorICAgICAgICAg
ICAgICAgIGV4cF9lcnIgPSBbIG1lc3NhZ2UgKyAnXG4nIF0KKyAgICAgICAgICAgIGlmIGV4cF9i
b3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleHBfYm90ID0gW10KKyAgICAgICAgZG9faGVs
cGVyKG1ldGhvZF9uYW1lLCAnbm90aGluZycsICdoZWxsbycsIFtdLCBbXSkKKyAgICAgICAgZG9f
aGVscGVyKG1ldGhvZF9uYW1lLCBzd2l0Y2gsICdoZWxsbycsIGV4cF9lcnIsIGV4cF9ib3QpCisg
ICAgICAgIGRvX2hlbHBlcihtZXRob2RfbmFtZSwgJ2V2ZXJ5dGhpbmcnLCAnaGVsbG8nLCBleHBf
ZXJyLCBleHBfYm90KQorCisgICAgZGVmIHRlc3RfcHJpbnRfYWN0dWFsKHNlbGYpOgorICAgICAg
ICAjIEFjdHVhbCByZXN1bHRzIG5lZWQgdG8gYmUgbG9nZ2VkIHRvIHRoZSBidWlsZGJvdCdzIHN0
cmVhbS4KKyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50X2FjdHVhbCcsICdhY3R1
YWwnLCB0b19idWlsZGJvdD1UcnVlKSAKKworICAgIGRlZiB0ZXN0X3ByaW50X2FjdHVhbF9idWls
ZGJvdChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGVzdCB0aGF0IHRoZSBmb3JtYXQgb2YgdGhl
IGFjdHVhbCByZXN1bHRzIG1hdGNoZXMgd2hhdCB0aGUKKyAgICAgICAgIyBidWlsZGJvdCBpcyBl
eHBlY3RpbmcuCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3ByaW50X2NvbmZpZyhzZWxm
KToKKyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50X2NvbmZpZycsICdjb25maWcn
LCB0b19idWlsZGJvdD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3ByaW50X2V4cGVjdGVkKHNlbGYp
OgorICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfZXhwZWN0ZWQnLCAnZXhwZWN0
ZWQnLCB0b19idWlsZGJvdD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3RpbWluZyhzZWxm
KToKKyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50X3RpbWluZycsICd0aW1pbmcn
LCB0b19idWlsZGJvdD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3VwZGF0ZShzZWxmKToK
KyAgICAgICAgIyBOb3RlIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJlIGEgY2FycmlhZ2UgcmV0dXJu
IGhlcmU7IHVwZGF0ZXMoKQorICAgICAgICAjIGFyZSBtZWFudCB0byBiZSBvdmVyd3JpdHRlbi4K
KyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50X3VwZGF0ZScsICd1cGRhdGVzJywg
dG9fYnVpbGRib3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9
J2hlbGxvJywgZXhwX2Vycj1bJ2hlbGxvJ10pCisKKyAgICBkZWYgdGVzdF9wcmludF9vbmVfbGlu
ZV9zdW1tYXJ5KHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3By
aW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVf
bGluZV9zdW1tYXJ5KDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkK
KworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50
JywgJ29uZS1saW5lLXN1bW1hcnknXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9z
dW1tYXJ5KDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwgWyJBbGwg
MSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuXG4iXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91
dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAg
cHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGVyci5nZXQoKSwgWyJBbGwgMSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuXG4iXSkKKwor
ICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1h
cnkoMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBbIlxuMSB0ZXN0IHJhbiBhcyBleHBlY3RlZCwgMSBkaWRuJ3Q6XG5c
biJdKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xp
bmVfc3VtbWFyeSgzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsiXG4yIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgMSBk
aWRuJ3Q6XG5cbiJdKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdGVzdF9yZXN1bHQoc2VsZik6Cisg
ICAgICAgIHJlc3VsdCA9IGdldF9yZXN1bHQoJ2Zvby5odG1sJykKKyAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAg
ICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhw
X3N0cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICd1bmV4cGVjdGVkJ10pCisg
ICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBl
eHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9Jycp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgcHJpbnRlci5w
cmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWycgIGZv
by5odG1sIC0+IHVuZXhwZWN0ZWQgcGFzc1xuJ10pCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBv
dXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAg
IHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3Ry
PScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLnByaW50
X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgZm9vLmh0
bWwgLT4gdW5leHBlY3RlZCBwYXNzXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9
IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJpbnRl
ci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9
IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndHJhY2UtdW5leHBlY3RlZCddKQorICAgICAgICBwcmlu
dGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAg
ICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBf
c3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICd0cmFjZS1ldmVyeXRoaW5n
J10pCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1U
cnVlLCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9z
dHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAg
ZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4
cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdF9zdHI9JycpCisKKyAgICBkZWYgdGVzdF9wcmludF9wcm9ncmVzcyhzZWxmKToKKyAg
ICAgICAgdGVzdF9maWxlcyA9IFsnZm9vLmh0bWwnLCAnYmFyLmh0bWwnXQorICAgICAgICBleHBl
Y3RhdGlvbnMgPSAnJworCisgICAgICAgICMgdGVzdCB0aGF0IHdlIHByaW50IG5vdGhpbmcKKyAg
ICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdu
b3RoaW5nJ10pCisgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9y
dCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJv
Z3Jlc3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAg
ICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIu
ZW1wdHkoKSkKKworICAgICAgICAjIHRlc3QgcmVndWxhciBmdW5jdGlvbmFsaXR5CisgICAgICAg
IHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmUtbGluZS1wcm9ncmVz
cyddKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9maWxl
cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGVyci5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91
dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3Rf
ZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3Byb2dyZXNz
X19kZXRhaWxlZChzZWxmKToKKyAgICAgICAgdGVzdF9maWxlcyA9IFsncGFzcy9wYXNzLmh0bWwn
LCAncGFzcy90aW1lb3V0Lmh0bWwnLCAnZmFpbC9jcmFzaC5odG1sJ10KKyAgICAgICAgZXhwZWN0
YXRpb25zID0gJ3Bhc3MvdGltZW91dC5odG1sID0gVElNRU9VVCcKKworICAgICAgICAjIGZpcnN0
LCB0ZXN0IHRoYXQgaXQgaXMgZGlzYWJsZWQgcHJvcGVybHkKKyAgICAgICAgIyBzaG91bGQgc3Rp
bGwgcHJpbnQgb25lLWxpbmUtcHJvZ3Jlc3MKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKAorICAgICAgICAgICAgWyctLXByaW50JywgJ2RldGFpbGVkLXByb2dy
ZXNzJ10sIHNpbmdsZV90aHJlYWRlZD1GYWxzZSkKKyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1
bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAg
IHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0
LmVtcHR5KCkpCisKKyAgICAgICAgIyBub3cgdGVzdCB0aGUgZW5hYmxlZCBwYXRocworICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoCisgICAgICAgICAgICBbJy0t
cHJpbnQnLCAnZGV0YWlsZWQtcHJvZ3Jlc3MnXSwgc2luZ2xlX3RocmVhZGVkPVRydWUpCisgICAg
ICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZi5fcG9ydCwgdGVzdF9maWxlcywg
ZXhwZWN0YXRpb25zKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwg
dGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNldCgpCisg
ICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRy
dWUsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICBycy5hZGQoZ2V0
X3Jlc3VsdCgncGFzcy9wYXNzLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgRmFs
c2UpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRtbCcpLCBUcnVl
KQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5odG1sJywgdGVzdF9leHBl
Y3RhdGlvbnMuQ1JBU0gpLCBUcnVlKQorICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQu
cmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgdGVzdF9m
aWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgV2Ugb25seSBjbGVhciB0aGUg
bWV0ZXIgd2hlbiByZXRyeWluZyB3LyBkZXRhaWxlZC1wcm9ncmVzcy4KKyAgICAgICAgZXJyLnJl
c2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVz
cyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0
KCksIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoCisgICAgICAgICAgICBbJy0t
cHJpbnQnLCAnZGV0YWlsZWQtcHJvZ3Jlc3MsdW5leHBlY3RlZCddLCBzaW5nbGVfdGhyZWFkZWQ9
VHJ1ZSkKKyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0
ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3Mo
cnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgZXJy
LnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9n
cmVzcyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIu
ZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAg
IHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlRJ
TUVPVVQpLCBGYWxzZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91dC5o
dG1sJyksIFRydWUpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwn
LCB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksIFRydWUpCisgICAgICAgIGVyci5yZXNldCgpCisg
ICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZh
bHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyBXZSBvbmx5
IGNsZWFyIHRoZSBtZXRlciB3aGVuIHJldHJ5aW5nIHcvIGRldGFpbGVkLXByb2dyZXNzLgorICAg
ICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLnBy
aW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGVyci5nZXQoKSwgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgp
KQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0
ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmlu
dGVyLndyaXRlKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcs
ICdtaXNjJ10pCisgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50
ZXIud3JpdGUoImZvbyIsICJjb25maWciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVt
cHR5KCkpCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsn
LS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIGVyci5yZXNldCgp
CisgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIsICJjb25maWciKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGVyci5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9y
ZXN1bHRzKHNlbGYpOgorICAgICAgICAjIFRoaXMgcm91dGluZSBpcyB0aGUgb25seSBvbmUgdGhh
dCBwcmludHMgc3R1ZmYgdGhhdCB0aGUgYm90cworICAgICAgICAjIGNhcmUgYWJvdXQuCisgICAg
ICAgIGRlZiBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkLCBwYXNzaW5nLCBmbGFreSk6
CisgICAgICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRl
c3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkOgorICAgICAg
ICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0
YXRpb25zLlBBU1MpLAorICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAg
ICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0bWwnLAorICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgZXhwZWN0ZWQpCisgICAg
ICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcsIHRlc3RfZXhw
ZWN0YXRpb25zLkNSQVNIKSwKKyAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAg
ICAgIGVsaWYgcGFzc2luZzoKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFz
cy9wYXNzLmh0bWwnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1
bHQoJ3Bhc3MvdGltZW91dC5odG1sJyksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFk
ZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0bWwnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcs
IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0
bWwnLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksIGV4
cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0
bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25z
LlRJTUVPVVQpLAorICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0
cnkgPSBycworICAgICAgICAgICAgaWYgZmxha3k6CisgICAgICAgICAgICAgICAgcmV0cnksIGV4
cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zKQorICAg
ICAgICAgICAgICAgIHJldHJ5LmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcpLCBUcnVl
KQorICAgICAgICAgICAgICAgIHJldHJ5LmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRt
bCcpLCBUcnVlKQorICAgICAgICAgICAgICAgIHJldHJ5LmFkZChnZXRfcmVzdWx0KCdmYWlsL2Ny
YXNoLmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHJ1bl93
ZWJraXRfdGVzdHMuc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cygKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0LCBleHAsIHJzLCByZXRyeSkKKyAgICAgICAgICAgIHJldHVybiB1bmV4cGVj
dGVkX3Jlc3VsdHMKKworICAgICAgICB0ZXN0X2ZpbGVzID0gWydwYXNzL3Bhc3MuaHRtbCcsICdw
YXNzL3RpbWVvdXQuaHRtbCcsICdmYWlsL2NyYXNoLmh0bWwnXQorICAgICAgICBleHBlY3RhdGlv
bnMgPSAnJworCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihb
Jy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3Vs
dHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBw
cmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZXhwZWN0
ZWQtcmVzdWx0cyddKQorCisgICAgICAgICMgdGVzdCBldmVyeXRoaW5nIHJ1bm5pbmcgYXMgZXhw
ZWN0ZWQKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPVRydWUs
IHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhw
ZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IGZh
aWx1cmVzCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAg
IHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxz
ZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRz
KHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IHVuZXhwZWN0ZWQgZmxh
a3kgcmVzdWx0cworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAg
ICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9
VHJ1ZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1
bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyB0ZXN0IHVuZXhwZWN0ZWQg
cGFzc2VzCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAg
IHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxz
ZSwgZmxha3k9VHJ1ZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMo
dXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBv
dXQucmVzZXQoKQorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIo
WyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9y
ZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAg
ICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHko
KSkKKworICAgIGRlZiB0ZXN0X3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0c19idWlsZGJvdChzZWxm
KToKKyAgICAgICAgIyBGSVhNRTogVGVzdCB0aGF0IHByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cygp
IHByb2R1Y2VzIHRoZSBwcmludGVyIHRoZQorICAgICAgICAjIGJ1aWxkYm90IGlzIGV4cGVjdGlu
Zy4KKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0
ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDMzOWZhODUuLjVkNTYzY2QgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHkKQEAgLTY2LDYgKzY2LDEzIEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKToKICAgICAgICAg
cmV0dXJuICcnCiAKKyAgICBkZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShzZWxmLCBmaWxlbmFt
ZSk6CisgICAgICAgIHJldHVybiBmaWxlbmFtZQorCisgICAgZGVmIGV4cGVjdGVkX2ZpbGVuYW1l
KHNlbGYsIGZpbGVuYW1lLCBzdWZmaXgpOgorICAgICAgICAoYmFzZW5hbWUsIGV4dCkgPSBvcy5w
YXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gYmFzZW5hbWUgKyAnLicgKyBz
dWZmaXgKKwogICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQog
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA3N2IzMTUwLi42NWFmMzAwIDEwMDc1NQot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTY0LDcgKzY0LDcgQEAgaW1wb3J0IHRyYWNlYmFjawog
CiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IKLWZyb20gbGF5
b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCitmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCBwcmludGluZwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwog
ZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmlsZXMKQEAgLTgwLDMzICs4MCw2IEBAIGltcG9y
dCBwb3J0CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnJ1bl93ZWJraXRfdGVzdHMiKQogCi0jIGR1bW15IHZhbHVlIHVzZWQgZm9yIGNvbW1hbmQtbGlu
ZSBleHBsaWNpdG5lc3MgdG8gZGlzYWJsZSBkZWZhdWx0cwotTE9HX05PVEhJTkcgPSAnbm90aGlu
ZycKLQotIyBEaXNwbGF5IHRoZSBvbmUtbGluZSBwcm9ncmVzcyBiYXIgKCUgY29tcGxldGVkKSB3
aGlsZSB0ZXN0aW5nCi1MT0dfUFJPR1JFU1MgPSAncHJvZ3Jlc3MnCi0KLSMgSW5kaWNhdGVzIHRo
YXQgd2Ugd2FudCBkZXRhaWxlZCBwcm9ncmVzcyB1cGRhdGVzIGluIHRoZSBvdXRwdXQgKHByaW50
cwotIyBkaXJlY3RvcnktYnktZGlyZWN0b3J5IGZlZWRiYWNrKS4KLUxPR19ERVRBSUxFRF9QUk9H
UkVTUyA9ICdkZXRhaWxlZC1wcm9ncmVzcycKLQotIyBMb2cgdGhlIG9uZS1saW5lIHN1bW1hcnkg
YXQgdGhlIGVuZCBvZiB0aGUgcnVuCi1MT0dfU1VNTUFSWSA9ICdzdW1tYXJ5JwotCi0jICJUcmFj
ZSIgdGhlIHRlc3QgLSBsb2cgdGhlIGV4cGVjdGVkIHJlc3VsdCwgdGhlIGFjdHVhbCByZXN1bHQs
IGFuZCB0aGUKLSMgYmFzZWxpbmVzIHVzZWQKLUxPR19UUkFDRSA9ICd0cmFjZScKLQotIyBMb2cg
YW55IHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGlsZSBydW5uaW5nIChpbnN0ZWFkIG9mIGp1c3QgYXQg
dGhlIGVuZCkuCi1MT0dfVU5FWFBFQ1RFRCA9ICd1bmV4cGVjdGVkJwotTE9HX1VORVhQRUNURURf
UkVTVUxUUyA9ICd1bmV4cGVjdGVkLXJlc3VsdHMnCi0KLUxPR19WQUxVRVMgPSAiLCIuam9pbigo
ImFjdHVhbCIsICJjb25maWciLCBMT0dfREVUQUlMRURfUFJPR1JFU1MsICJleHBlY3RlZCIsCi0g
ICAgICAgICAgICAgICAgICAgICAgTE9HX05PVEhJTkcsIExPR19QUk9HUkVTUywgTE9HX1NVTU1B
UlksICJ0aW1pbmciLAotICAgICAgICAgICAgICAgICAgICAgIExPR19VTkVYUEVDVEVELCBMT0df
VU5FWFBFQ1RFRF9SRVNVTFRTKSkKLUxPR19ERUZBVUxUX1ZBTFVFID0gIiwiLmpvaW4oKExPR19E
RVRBSUxFRF9QUk9HUkVTUywgTE9HX1NVTU1BUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMT0dfVU5FWFBFQ1RFRCwgTE9HX1VORVhQRUNURURfUkVTVUxUUykpCi0KICMgQnVpbGRl
ciBiYXNlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCiBCVUlM
REVSX0JBU0VfVVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvbGF5b3V0
X3Rlc3RfcmVzdWx0cy8iCiAKQEAgLTE4MSw3ICsxNTQsNyBAQCBjbGFzcyBSZXN1bHRTdW1tYXJ5
KG9iamVjdCk6CiAgICAgICAgICIiIgogCiAgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRp
b25bcmVzdWx0LnR5cGVdLmFkZChyZXN1bHQuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYucmVzdWx0
c1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0LnR5cGUKKyAgICAgICAgc2VsZi5yZXN1bHRzW3Jl
c3VsdC5maWxlbmFtZV0gPSByZXN1bHQKICAgICAgICAgc2VsZi5yZW1haW5pbmcgLT0gMQogICAg
ICAgICBpZiBsZW4ocmVzdWx0LmZhaWx1cmVzKToKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXNb
cmVzdWx0LmZpbGVuYW1lXSA9IHJlc3VsdC5mYWlsdXJlcwpAQCAtMTkyLDYgKzE2NSw4MyBAQCBj
bGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnVuZXhwZWN0ZWQg
Kz0gMQogCiAKK2RlZiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHBvcnRfb2JqLCBleHBl
Y3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0cnlfc3VtbWFyeSk6CisgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3Vs
dHMgYXMgYSBkaWN0LgorCisgICAgRklYTUU6IHNwbGl0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaW50
byBhIHNlcGFyYXRlIGNsYXNzPworCisgICAgQXJnczoKKyAgICAgICAgcG9ydF9vYmo6IGludGVy
ZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCisgICAgICAgIGV4cGVjdGF0aW9uczogdGVzdF9l
eHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucyBvYmplY3QKKyAgICAgICAgcmVzdWx0X3N1bW1h
cnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gaW5pdGlhbCB0ZXN0IHJ1bnMKKyAgICAgICAgcmV0cnlf
c3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRyaWVkIHRl
c3RzCisgICAgUmV0dXJuczoKKyAgICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYSBzdW1t
YXJ5IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUKKyAgICAgICAgcnVuLCB3aXRo
IHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICAgICAgICAndmVyc2lvbic6IGEgdmVyc2lvbiBpbmRp
Y2F0b3IgKDEgaW4gdGhpcyB2ZXJzaW9uKQorICAgICAgICAnZml4YWJsZSc6ICMgb2YgZml4YWJs
ZSB0ZXN0cyAoTk9XIC0gUEFTUykKKyAgICAgICAgJ3NraXBwZWQnOiAjIG9mIHNraXBwZWQgdGVz
dHMgKE5PVyAmIFNLSVBQRUQpCisgICAgICAgICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5vbi1m
bGFreSBmYWlsdXJlcworICAgICAgICAnbnVtX2ZsYWt5JzogIyBvZiBmbGFreSBmYWlsdXJlcwor
ICAgICAgICAnbnVtX3Bhc3Nlcyc6ICMgb2YgdW5leHBlY3RlZCBwYXNzZXMKKyAgICAgICAgJ3Rl
c3RzJzogYSBkaWN0IG9mIHRlc3RzIC0+IHsnZXhwZWN0ZWQnOiAnLi4uJywgJ2FjdHVhbCc6ICcu
Li4nfQorICAgICIiIgorICAgIHJlc3VsdHMgPSB7fQorICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9
IDEKKworICAgIHRiZSA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uCisgICAg
dGJ0ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmUKKyAgICByZXN1bHRzWydmaXhh
YmxlJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gLQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlvbnMuUEFTU10pCisgICAgcmVzdWx0
c1snc2tpcHBlZCddID0gbGVuKHRidFt0ZXN0X2V4cGVjdGF0aW9ucy5OT1ddICYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKQorCisg
ICAgbnVtX3Bhc3NlcyA9IDAKKyAgICBudW1fZmxha3kgPSAwCisgICAgbnVtX3JlZ3Jlc3Npb25z
ID0gMAorICAgIGtleXdvcmRzID0ge30KKyAgICBmb3IgaywgdiBpbiBUZXN0RXhwZWN0YXRpb25z
RmlsZS5FWFBFQ1RBVElPTlMuaXRlcml0ZW1zKCk6CisgICAgICAgIGtleXdvcmRzW3ZdID0gay51
cHBlcigpCisKKyAgICB0ZXN0cyA9IHt9CisgICAgZm9yIGZpbGVuYW1lLCByZXN1bHQgaW4gcmVz
dWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzLml0ZXJpdGVtcygpOgorICAgICAgICAjIE5v
dGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUK
KyAgICAgICAgIyB3aGV0aGVyIG9yIG5vdCBpdCBjcmFzaGVkIHdoZW4gd2UgcmV0cmllZCBpdCAo
aWYgd2UgcmV0cmllZCBpdCksCisgICAgICAgICMgYW5kIGFsd2F5cyBjb25zaWRlciB0aGUgcmVz
dWx0IG5vdCBmbGFreS4KKyAgICAgICAgdGVzdCA9IHBvcnRfb2JqLnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUoZmlsZW5hbWUpCisgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0YXRpb25zLmdldF9leHBl
Y3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKQorICAgICAgICBhY3R1YWwgPSBba2V5d29yZHNbcmVz
dWx0XV0KKworICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKKyAg
ICAgICAgICAgIG51bV9wYXNzZXMgKz0gMQorICAgICAgICBlbGlmIHJlc3VsdCA9PSB0ZXN0X2V4
cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAgICAgIG51bV9yZWdyZXNzaW9ucyArPSAxCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gcmV0cnlfc3VtbWFyeS51
bmV4cGVjdGVkX3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgYWN0dWFsLmV4dGVuZChleHBlY3Rh
dGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIGZpbGVu
YW1lKS5zcGxpdCgiICIpKQorICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHJ5X3Jlc3VsdCA9IHJldHJ5X3N1bW1hcnku
dW5leHBlY3RlZF9yZXN1bHRzW2ZpbGVuYW1lXQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCAh
PSByZXRyeV9yZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5hcHBlbmQoa2V5d29y
ZHNbcmV0cnlfcmVzdWx0XSkKKyAgICAgICAgICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBudW1fcmVncmVzc2lvbnMg
Kz0gMQorCisgICAgICAgIHRlc3RzW3Rlc3RdID0ge30KKyAgICAgICAgdGVzdHNbdGVzdF1bJ2V4
cGVjdGVkJ10gPSBleHBlY3RlZAorICAgICAgICB0ZXN0c1t0ZXN0XVsnYWN0dWFsJ10gPSAiICIu
am9pbihhY3R1YWwpCisKKyAgICByZXN1bHRzWyd0ZXN0cyddID0gdGVzdHMKKyAgICByZXN1bHRz
WydudW1fcGFzc2VzJ10gPSBudW1fcGFzc2VzCisgICAgcmVzdWx0c1snbnVtX2ZsYWt5J10gPSBu
dW1fZmxha3kKKyAgICByZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXSA9IG51bV9yZWdyZXNzaW9u
cworCisgICAgcmV0dXJuIHJlc3VsdHMKKworCiBjbGFzcyBUZXN0UnVubmVyOgogICAgICIiIkEg
Y2xhc3MgZm9yIG1hbmFnaW5nIHJ1bm5pbmcgYSBzZXJpZXMgb2YgdGVzdHMgb24gYSBzZXJpZXMg
b2YgbGF5b3V0CiAgICAgdGVzdCBmaWxlcy4iIiIKQEAgLTIwNCwxNyArMjU0LDE3IEBAIGNsYXNz
IFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVuZGVyVHJlZS4KICAgICBERUZBVUxUX1RFU1Rf
VElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucywgbWV0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmlu
dGVyKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMu
CiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5n
IHBvcnQtc3BlY2lmaWMKICAgICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFu
ZCBsaW5lIG9wdGlvbnMKLSAgICAgICAgICBtZXRlcjogYSBNZXRlcmVkU3RyZWFtIG9iamVjdCB0
byByZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0
IHRvIHJlY29yZCB1cGRhdGVzIHRvLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fbWV0
ZXIgPSBtZXRlcgorICAgICAgICBzZWxmLl9wcmludGVyID0gcHJpbnRlcgogCiAgICAgICAgICMg
ZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90
cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9z
ZXJ2ZXIuUHlXZWJTb2NrZXQoCkBAIC0yMjgsMTIgKzI3OCw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6
CiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVz
dWx0X3F1ZXVlID0gUXVldWUuUXVldWUoKQogCi0gICAgICAgICMgVGhlc2UgYXJlIHVzZWQgZm9y
IC0tbG9nIGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0YXR1cyBieQotICAgICAgICAjIGRp
cmVjdG9yeS4KLSAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBOb25lCi0gICAgICAgIHNlbGYu
X2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIKLSAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251
bWJlciA9IDAKLQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAKICAgICAgICAgIyBI
YWNrIGZvciBkdW1waW5nIHRocmVhZHMgb24gdGhlIGJvdHMKQEAgLTI3OSwxOSArMzIzLDE2IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJh
aXNlIGVycgogCi0gICAgZGVmIHByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dChzZWxmLCB3
cml0ZSk6CisgICAgZGVmIHByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dChzZWxmKToKICAg
ICAgICAgIiIiQ3JlYXRlIGFwcHJvcHJpYXRlIHN1YnNldHMgb2YgdGVzdCBsaXN0cyBhbmQgcmV0
dXJucyBhCiAgICAgICAgIFJlc3VsdFN1bW1hcnkgb2JqZWN0LiBBbHNvIHByaW50cyBleHBlY3Rl
ZCB0ZXN0IGNvdW50cy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxi
YWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAg
ICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAiIiIKIAogICAgICAgICAjIFJlbW92ZSBz
a2lwcGVkIC0gYm90aCBmaXhhYmxlIGFuZCBpZ25vcmVkIC0gZmlsZXMgZnJvbSB0aGUKICAgICAg
ICAgIyB0b3AtbGV2ZWwgbGlzdCBvZiBmaWxlcyB0byB0ZXN0LgogICAgICAgICBudW1fYWxsX3Rl
c3RfZmlsZXMgPSBsZW4oc2VsZi5fdGVzdF9maWxlcykKLSAgICAgICAgd3JpdGUoIkZvdW5kOiAg
JWQgdGVzdHMiICUgbnVtX2FsbF90ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X2V4cGVjdGVkKCJGb3VuZDogICVkIHRlc3RzIiAlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxlbihzZWxmLl90ZXN0X2ZpbGVzKSkpCiAgICAgICAgIGlmIG5vdCBu
dW1fYWxsX3Rlc3RfZmlsZXM6CiAgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCJObyB0ZXN0cyB0
byBydW4uIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCkBAIC0zNTgsNyArMzk5LDcgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICAgICAgdGVzdHNfcnVuX21zZyA9ICdSdW5uaW5nOiAl
ZCB0ZXN0cyAoY2h1bmsgc2xpY2UgWyVkOiVkXSBvZiAlZCknICUgKAogICAgICAgICAgICAgICAg
IChzbGljZV9lbmQgLSBzbGljZV9zdGFydCksIHNsaWNlX3N0YXJ0LCBzbGljZV9lbmQsIG51bV90
ZXN0cykKLSAgICAgICAgICAgIHdyaXRlKHRlc3RzX3J1bl9tc2cpCisgICAgICAgICAgICBzZWxm
Ll9wcmludC5wcmludF9leHBlY3RlZCh0ZXN0c19ydW5fbXNnKQogCiAgICAgICAgICAgICAjIElm
IHdlIHJlYWNoZWQgdGhlIGVuZCBhbmQgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdGVzdHMsIHdlIHJ1
biBzb21lCiAgICAgICAgICAgICAjIGZyb20gdGhlIGJlZ2lubmluZy4KQEAgLTM2Nyw3ICs0MDgs
NyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIGV4dHJhID0gMSArIGNodW5r
X2xlbiAtIChzbGljZV9lbmQgLSBzbGljZV9zdGFydCkKICAgICAgICAgICAgICAgICBleHRyYV9t
c2cgPSAoJyAgIGxhc3QgY2h1bmsgaXMgcGFydGlhbCwgYXBwZW5kaW5nIFswOiVkXScgJQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhKQotICAgICAgICAgICAgICAgIHdyaXRlKGV4
dHJhX21zZykKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKGV4
dHJhX21zZykKICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fbXNnICs9ICJcbiIgKyBleHRyYV9t
c2cKICAgICAgICAgICAgICAgICBmaWxlcy5leHRlbmQodGVzdF9maWxlc1swOmV4dHJhXSkKICAg
ICAgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5LApAQCAtMzk5LDE3ICs0NDAsMTggQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKIAogICAgICAgICByZXN1bHRfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0
YXRpb25zLAogICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyB8IHNraXBfY2h1bmspCi0gICAg
ICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1
bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1
bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlBBU1MsICJwYXNzZXMi
KQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUod3JpdGUsIHJl
c3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5
cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlMLCAi
ZmFpbHVyZXMiKQotICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUo
d3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9yZXN1
bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy5GTEFLWSwgImZsYWt5IikKLSAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19v
Zl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0
ZWRfcmVzdWx0c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBl
Y3RhdGlvbnMuU0tJUCwgInNraXBwZWQiKQogCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZm9y
Y2U6Ci0gICAgICAgICAgICB3cml0ZSgnUnVubmluZyBhbGwgdGVzdHMsIGluY2x1ZGluZyBza2lw
cyAoLS1mb3JjZSknKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgn
UnVubmluZyBhbGwgdGVzdHMsIGluY2x1ZGluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdza2lwcyAoLS1mb3JjZSknKQogICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgcnVuIHRoZSBza2lwcGVkIHRlc3Rz
ICh0aGV5IHdlcmUKICAgICAgICAgICAgICMgc3VidHJhY3RlZCBvdXQgb2Ygc2VsZi5fdGVzdF9m
aWxlcywgYWJvdmUpLCBidXQgd2Ugc3R1YiBvdXQgdGhlCkBAIC00MjAsNyArNDYyLDcgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnM9MCkKICAg
ICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IHRlc3RfZXhwZWN0YXRpb25zLlNLSVAKICAgICAg
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZD1UcnVlKQotICAg
ICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgnJykK
IAogICAgICAgICByZXR1cm4gcmVzdWx0X3N1bW1hcnkKIApAQCAtNjI1LDExICs2NjcsMTEgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgcGx1cmFsID0gIiIKICAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPiAxOgogICAgICAgICAgICAgcGx1cmFsID0gInMiCi0g
ICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4nICUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFt
ZSgpLCBwbHVyYWwpKQogICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAg
ICAgc2VsZi5fbWV0ZXIudXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKICAgICAg
ICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGNvbGxlY3QgdGVzdCBmYWls
dXJlcy4KICAgICAgICAgZmFpbHVyZXMgPSB7fQpAQCAtNjgyLDcgKzcyNCw3IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBydW5uZXIgbmVl
ZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9jb250YWluc190ZXN0
cyhzZWxmLkhUVFBfU1VCRElSKQogCi0gICAgZGVmIHJ1bihzZWxmLCByZXN1bHRfc3VtbWFyeSwg
cHJpbnRfcmVzdWx0cyk6CisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHRfc3VtbWFyeSk6CiAgICAg
ICAgICIiIlJ1biBhbGwgb3VyIHRlc3RzIG9uIGFsbCBvdXIgdGVzdCBmaWxlcy4KIAogICAgICAg
ICBGb3IgZWFjaCB0ZXN0IGZpbGUsIHdlIHJ1biBlYWNoIHRlc3QgdHlwZS4gSWYgdGhlcmUgYXJl
IGFueSBmYWlsdXJlcywKQEAgLTY5MCw3ICs3MzIsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAg
ICAgICAgIEFyZ3M6CiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGEgc3VtbWFyeSBvYmplY3Qg
dHJhY2tpbmcgdGhlIHRlc3QgcmVzdWx0cy4KLSAgICAgICAgICBwcmludF9yZXN1bHRzOiB3aGV0
aGVyIG9yIG5vdCB0byBwcmludCB0aGUgc3VtbWFyeSBhdCB0aGUgZW5kCiAKICAgICAgICAgUmV0
dXJuOgogICAgICAgICAgIFRoZSBudW1iZXIgb2YgdW5leHBlY3RlZCByZXN1bHRzICgwID09IHN1
Y2Nlc3MpCkBAIC03MDAsMTEgKzc0MSwxMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBz
dGFydF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAgICBpZiBzZWxmLm5lZWRzX2h0dHAoKToK
LSAgICAgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4u
JykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyBIVFRQ
IHNlcnZlciAuLi4nKQorCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVy
KCkKIAogICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9TVUJE
SVIpOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQg
c2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3Rh
cnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFy
dF93ZWJzb2NrZXRfc2VydmVyKCkKICAgICAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3Vy
ZV9zZXJ2ZXIuU3RhcnQoKQogCkBAIC03MjcsNDEgKzc2OSwyMiBAQCBjbGFzcyBUZXN0UnVubmVy
OgogCiAgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKIAotICAgICAgICB3cml0ZSA9IGNy
ZWF0ZV9sb2dnaW5nX3dyaXRlcihzZWxmLl9vcHRpb25zLCAndGltaW5nJykKLSAgICAgICAgc2Vs
Zi5fcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Mod3JpdGUsIGVuZF90aW1lIC0gc3RhcnRfdGltZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0
X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5KQotCi0gICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgiIikKLQotICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICAjIFdlIHdyaXRlIHRoaXMgYmxv
Y2sgdG8gc3Rkb3V0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCi0gICAgICAgICAgICAjIGJ1
aWxkYm90IGxvZyBwYXJzZXIsIHdoaWNoIG9ubHkgbG9va3MgYXQgc3Rkb3V0LCBub3Qgc3RkZXJy
IDooCi0gICAgICAgICAgICB3cml0ZSA9IGxhbWJkYSBzOiBzeXMuc3Rkb3V0LndyaXRlKCIlc1xu
IiAlIHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5n
X3dyaXRlcihzZWxmLl9vcHRpb25zLCAnYWN0dWFsJykKKyAgICAgICAgc2VsZi5fcHJpbnRfdGlt
aW5nX3N0YXRpc3RpY3MoZW5kX3RpbWUgLSBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCiAK
LSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5
KQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKIAog
ICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCiAK
LSAgICAgICAgIyBUaGlzIHN1bW1hcnkgZGF0YSBnZXRzIHdyaXR0ZW4gdG8gc3Rkb3V0IHJlZ2Fy
ZGxlc3Mgb2YgbG9nIGxldmVsCi0gICAgICAgICMgKHVubGVzcyBvZiBjb3Vyc2Ugd2UncmUgcHJp
bnRpbmcgbm90aGluZykuCi0gICAgICAgIGlmIHByaW50X3Jlc3VsdHM6Ci0gICAgICAgICAgICBp
ZiAoTE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYuX29wdGlvbnMubG9nIG9yCi0gICAgICAg
ICAgICAgICAgKExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29wdGlvbnMubG9nIGFuZAotICAgICAg
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50b3RhbCAhPSByZXN1bHRfc3VtbWFyeS5leHBlY3Rl
ZCkpOgotICAgICAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICBpZiBMT0dfU1VNTUFSWSBp
biBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF9vbmVfbGlu
ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5LnRvdGFsLAorICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X29uZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCkK
IAotICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBzZWxmLl9zdW1tYXJpemVfdW5leHBlY3Rl
ZF9yZXN1bHRzKHJlc3VsdF9zdW1tYXJ5LAotICAgICAgICAgICAgcmV0cnlfc3VtbWFyeSkKLSAg
ICAgICAgaWYgTE9HX1VORVhQRUNURURfUkVTVUxUUyBpbiBzZWxmLl9vcHRpb25zLmxvZzoKLSAg
ICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1bmV4cGVjdGVkX3Jlc3Vs
dHMpCisgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jl
c3VsdHMoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0
X3N1bW1hcnksIHJldHJ5X3N1bW1hcnkpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdW5l
eHBlY3RlZF9yZXN1bHRzKHVuZXhwZWN0ZWRfcmVzdWx0cykKIAogICAgICAgICAjIFdyaXRlIHRo
ZSBzYW1lIGRhdGEgdG8gbG9nIGZpbGVzLgogICAgICAgICBzZWxmLl93cml0ZV9qc29uX2ZpbGVz
KHVuZXhwZWN0ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1hcnksCkBAIC03ODMsMTEyICs4MDYsMTYg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9yZXN1
bHRfcXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuCisKICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhw
ZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAogICAgICAgICAgICAgICAgIHJl
c3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpCiAg
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZCkKLSAgICAgICAg
ICAgIHNlbGYuX3ByaW50X3Rlc3RfcmVzdWx0cyhyZXN1bHQsIGV4cGVjdGVkLCByZXN1bHRfc3Vt
bWFyeSkKLQotICAgIGRlZiBfcHJpbnRfdGVzdF9yZXN1bHRzKHNlbGYsIHJlc3VsdCwgZXhwZWN0
ZWQsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIlByaW50IHRoZSByZXN1bHQgb2YgdGhlIHRl
c3QgYXMgZGV0ZXJtaW5lZCBieSB0aGUgLS1sb2cgc3dpdGNoZXMuIgotICAgICAgICBpZiBMT0df
VFJBQ0UgaW4gc2VsZi5fb3B0aW9ucy5sb2c6Ci0gICAgICAgICAgICBzZWxmLl9wcmludF90ZXN0
X3RyYWNlKHJlc3VsdCkKLSAgICAgICAgZWxpZiAoTE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNl
bGYuX29wdGlvbnMubG9nIGFuZAotICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5leHBlcmlt
ZW50YWxfZnVsbHlfcGFyYWxsZWwgb3IKLSAgICAgICAgICAgICAgIHNlbGYuX2lzX3NpbmdsZV90
aHJlYWRlZCgpKSk6Ci0gICAgICAgICAgICBzZWxmLl9wcmludF9kZXRhaWxlZF9wcm9ncmVzcyhy
ZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIChub3QgZXhwZWN0
ZWQgYW5kIExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29wdGlvbnMubG9nKToKLSAgICAgICAgICAg
ICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHJlc3VsdCkKLSAgICAgICAg
ICAgIHNlbGYuX3ByaW50X29uZV9saW5lX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5KQotCi0gICAg
ZGVmIF9wcmludF90ZXN0X3RyYWNlKHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgICIiIlByaW50IGRl
dGFpbGVkIHJlc3VsdHMgb2YgYSB0ZXN0ICh0cmlnZ2VyZWQgYnkgLS1sb2cgdHJhY2UpLgotICAg
ICAgICBGb3IgZWFjaCB0ZXN0LCBwcmludDoKLSAgICAgICAgICAgLSBsb2NhdGlvbiBvZiB0aGUg
ZXhwZWN0ZWQgYmFzZWxpbmVzCi0gICAgICAgICAgIC0gZXhwZWN0ZWQgcmVzdWx0cwotICAgICAg
ICAgICAtIGFjdHVhbCByZXN1bHQKLSAgICAgICAgICAgLSB0aW1pbmcgaW5mbwotICAgICAgICAi
IiIKLSAgICAgICAgZmlsZW5hbWUgPSByZXN1bHQuZmlsZW5hbWUKLSAgICAgICAgdGVzdF9uYW1l
ID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICAgICBf
bG9nLmluZm8oJ3RyYWNlOiAlcycgJSB0ZXN0X25hbWUpCi0gICAgICAgIF9sb2cuaW5mbygnICB0
eHQ6ICVzJyAlCi0gICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUoCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5h
bWUoZmlsZW5hbWUsICcudHh0JykpKQotICAgICAgICBwbmdfZmlsZSA9IHNlbGYuX3BvcnQuZXhw
ZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKLSAgICAgICAgaWYgb3MucGF0aC5leGlz
dHMocG5nX2ZpbGUpOgotICAgICAgICAgICAgX2xvZy5pbmZvKCcgIHBuZzogJXMnICUKLSAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5h
bWUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZy5pbmZvKCcgIHBuZzogPG5vbmU+
JykKLSAgICAgICAgX2xvZy5pbmZvKCcgIGV4cDogJXMnICUKLSAgICAgICAgICAgICAgICAgIHNl
bGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhmaWxlbmFtZSkpCi0gICAg
ICAgIF9sb2cuaW5mbygnICBnb3Q6ICVzJyAlCi0gICAgICAgICAgICAgICAgICBzZWxmLl9leHBl
Y3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKSkKLSAgICAgICAgX2xv
Zy5pbmZvKCcgdG9vazogJS0uM2YnICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUpCi0gICAgICAgIF9s
b2cuaW5mbygnJykKLQotICAgIGRlZiBfcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVz
dWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJEaXNwbGF5cyB0aGUgcHJvZ3Jlc3MgdGhyb3VnaCB0
aGUgdGVzdCBydW4uIiIiCi0gICAgICAgIHBlcmNlbnRfY29tcGxldGUgPSAxMDAgKiAocmVzdWx0
X3N1bW1hcnkuZXhwZWN0ZWQgKwotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3Rl
ZCkgLyByZXN1bHRfc3VtbWFyeS50b3RhbAotICAgICAgICBhY3Rpb24gPSAiVGVzdGluZyIKLSAg
ICAgICAgaWYgc2VsZi5fcmV0cnlpbmc6Ci0gICAgICAgICAgICBhY3Rpb24gPSAiUmV0cnlpbmci
Ci0gICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyAoJWQlJSk6ICVkIHJhbiBhcyBleHBl
Y3RlZCwgJWQgZGlkbid0LCIKLSAgICAgICAgICAgICIgJWQgbGVmdCIgJSAoYWN0aW9uLCBwZXJj
ZW50X2NvbXBsZXRlLCByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCwKLSAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeS51bmV4cGVjdGVkLCByZXN1bHRfc3VtbWFyeS5yZW1haW5pbmcpKQotCi0gICAg
ZGVmIF9wcmludF9kZXRhaWxlZF9wcm9ncmVzcyhzZWxmLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAg
ICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jlc3Mgb3V0cHV0IHdoZXJlIHdlIHByaW50IHRo
ZSBkaXJlY3RvcnkgbmFtZQotICAgICAgICBhbmQgb25lIGRvdCBmb3IgZWFjaCBjb21wbGV0ZWQg
dGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKLSAgICAgICAgIi0tbG9nIGRldGFpbGVkLXByb2dy
ZXNzIi4iIiIKLSAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4oc2Vs
Zi5fdGVzdF9maWxlc19saXN0KToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIG5leHRf
dGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQot
ICAgICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGlybmFtZSgKLSAgICAgICAgICAgIHNlbGYuX3Bv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQotICAgICAgICBpZiBzZWxmLl9j
dXJyZW50X3Byb2dyZXNzX3N0ciA9PSAiIjoKLSAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJv
Z3Jlc3Nfc3RyID0gIiVzOiAiICUgKG5leHRfZGlyKQotICAgICAgICAgICAgc2VsZi5fY3VycmVu
dF9kaXIgPSBuZXh0X2RpcgotCi0gICAgICAgIHdoaWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3Vt
bWFyeS5yZXN1bHRzOgotICAgICAgICAgICAgaWYgbmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9k
aXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1
cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0ciA9ICIlczogLiIgJSAobmV4dF9kaXIpCi0gICAgICAgICAgICAgICAgc2VsZi5fY3Vy
cmVudF9kaXIgPSBuZXh0X2RpcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBz
ZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciArPSAiLiIKLQotICAgICAgICAgICAgaWYgKG5leHRf
dGVzdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMgYW5kCi0gICAgICAgICAg
ICAgICAgTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cpOgotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0c1tuZXh0X3Rlc3Rd
Ci0gICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiVzXG4iICUgc2VsZi5fY3VycmVu
dF9wcm9ncmVzc19zdHIpCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90
ZXN0X3Jlc3VsdChuZXh0X3Rlc3QsIHJlc3VsdCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJy
ZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIHNlbGYuX2N1cnJlbnRfZGlyCi0KLSAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgKz0gMQotICAgICAgICAgICAgaWYgc2VsZi5f
Y3VycmVudF90ZXN0X251bWJlciA9PSBsZW4oc2VsZi5fdGVzdF9maWxlc19saXN0KToKLSAgICAg
ICAgICAgICAgICBicmVhawotCi0gICAgICAgICAgICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2Zp
bGVzX2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KLSAgICAgICAgICAgIG5leHRfZGly
ID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVf
dGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQotCi0gICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJl
bWFpbmluZzoKLSAgICAgICAgICAgIHJlbWFpbl9zdHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1t
YXJ5LnJlbWFpbmluZykKLSAgICAgICAgICAgIHNlbGYuX21ldGVyLnByb2dyZXNzKCIlcyVzIiAl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fY3VycmVudF9wcm9ncmVz
c19zdHIsIHJlbWFpbl9zdHIpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fbWV0
ZXIucHJvZ3Jlc3MoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkKLQotICAg
IGRlZiBfcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgotICAgICAg
ICAiIiJQcmludHMgb25lIHVuZXhwZWN0ZWQgdGVzdCByZXN1bHQgbGluZS4iIiIKLSAgICAgICAg
ZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1
bHQudHlwZV1bMF0KLSAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiAgJXMgLT4gdW5leHBlY3Rl
ZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUocmVzdWx0LmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc2MpKQorICAgICAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRf
ZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUpCisg
ICAgICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0
cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9y
ZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikKKyAgICAgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnksIHNlbGYuX3JldHJ5aW5n
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2Zp
bGVzX2xpc3QpCiAKICAgICBkZWYgX2dldF9mYWlsdXJlcyhzZWxmLCByZXN1bHRfc3VtbWFyeSwg
aW5jbHVkZV9jcmFzaGVzKToKICAgICAgICAgIiIiRmlsdGVycyBhIGRpY3Qgb2YgcmVzdWx0cyBh
bmQgcmV0dXJucyBvbmx5IHRoZSBmYWlsdXJlcy4KQEAgLTkxMSw4MCArODM4LDYgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKIAogICAgICAgICByZXR1cm4gZmFpbGVkX3Jlc3VsdHMKIAotICAgIGRlZiBf
c3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlf
c3VtbWFyeSk6Ci0gICAgICAgICIiIlN1bW1hcml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFz
IGEgZGljdC4KLQotICAgICAgICBUT0RPKGRwcmFua2UpOiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0
dXJlIGludG8gYSBzZXBhcmF0ZSBjbGFzcz8KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGluaXRpYWwgdGVzdCBydW5zCi0gICAg
ICAgICAgcmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBmaW5hbCB0ZXN0IHJ1biBv
ZiByZXRyaWVkIHRlc3RzCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgQSBkaWN0aW9uYXJ5
IGNvbnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUK
LSAgICAgICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6Ci0gICAgICAgICAgICAn
dmVyc2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEgaW4gdGhpcyB2ZXJzaW9uKQotICAgICAg
ICAgICAgJ2ZpeGFibGUnOiAjIG9mIGZpeGFibGUgdGVzdHMgKE5PVyAtIFBBU1MpCi0gICAgICAg
ICAgICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0cyAoTk9XICYgU0tJUFBFRCkKLSAgICAg
ICAgICAgICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5vbi1mbGFreSBmYWlsdXJlcwotICAgICAg
ICAgICAgJ251bV9mbGFreSc6ICMgb2YgZmxha3kgZmFpbHVyZXMKLSAgICAgICAgICAgICdudW1f
cGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcwotICAgICAgICAgICAgJ3Rlc3RzJzogYSBk
aWN0IG9mIHRlc3RzIC0+IHsnZXhwZWN0ZWQnOiAnLi4uJywgJ2FjdHVhbCc6ICcuLi4nfQotICAg
ICAgICAiIiIKLSAgICAgICAgcmVzdWx0cyA9IHt9Ci0gICAgICAgIHJlc3VsdHNbJ3ZlcnNpb24n
XSA9IDEKLQotICAgICAgICB0YmUgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlv
bgotICAgICAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQotICAgICAg
ICByZXN1bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBB
U1NdKQotICAgICAgICByZXN1bHRzWydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRp
b25zLk5PV10gJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhw
ZWN0YXRpb25zLlNLSVBdKQotCi0gICAgICAgIG51bV9wYXNzZXMgPSAwCi0gICAgICAgIG51bV9m
bGFreSA9IDAKLSAgICAgICAgbnVtX3JlZ3Jlc3Npb25zID0gMAotICAgICAgICBrZXl3b3JkcyA9
IHt9Ci0gICAgICAgIGZvciBrLCB2IGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9O
Uy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGtleXdvcmRzW3ZdID0gay51cHBlcigpCi0KLSAg
ICAgICAgdGVzdHMgPSB7fQotICAgICAgICBmb3IgZmlsZW5hbWUsIHJlc3VsdCBpbiByZXN1bHRf
c3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAjIE5v
dGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUK
LSAgICAgICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQg
aXQgKGlmIHdlIHJldHJpZWQgaXQpLAotICAgICAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVy
IHRoZSByZXN1bHQgbm90IGZsYWt5LgotICAgICAgICAgICAgdGVzdCA9IHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2Vs
Zi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKQotICAgICAg
ICAgICAgYWN0dWFsID0gW2tleXdvcmRzW3Jlc3VsdF1dCi0KLSAgICAgICAgICAgIGlmIHJlc3Vs
dCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgotICAgICAgICAgICAgICAgIG51bV9wYXNzZXMg
Kz0gMQotICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6
Ci0gICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIHJldHJ5X3N1bW1hcnkudW5leHBl
Y3RlZF9yZXN1bHRzOgotICAgICAgICAgICAgICAgICAgICBhY3R1YWwuZXh0ZW5kKAotICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3Ry
aW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpLnNwbGl0KCIgIikpCi0gICAg
ICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVk
X3Jlc3VsdHNbZmlsZW5hbWVdCi0gICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCAhPSByZXRy
eV9yZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwuYXBwZW5kKGtleXdvcmRz
W3JldHJ5X3Jlc3VsdF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQot
ICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jl
Z3Jlc3Npb25zICs9IDEKLQotICAgICAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQotICAgICAgICAg
ICAgdGVzdHNbdGVzdF1bJ2V4cGVjdGVkJ10gPSBleHBlY3RlZAotICAgICAgICAgICAgdGVzdHNb
dGVzdF1bJ2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFsKQotCi0gICAgICAgIHJlc3VsdHNbJ3Rl
c3RzJ10gPSB0ZXN0cwotICAgICAgICByZXN1bHRzWydudW1fcGFzc2VzJ10gPSBudW1fcGFzc2Vz
Ci0gICAgICAgIHJlc3VsdHNbJ251bV9mbGFreSddID0gbnVtX2ZsYWt5Ci0gICAgICAgIHJlc3Vs
dHNbJ251bV9yZWdyZXNzaW9ucyddID0gbnVtX3JlZ3Jlc3Npb25zCi0KLSAgICAgICAgcmV0dXJu
IHJlc3VsdHMKLQogICAgIGRlZiBfd3JpdGVfanNvbl9maWxlcyhzZWxmLCB1bmV4cGVjdGVkX3Jl
c3VsdHMsIHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJXcml0ZXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRl
c3QgcnVuIGFzIEpTT04gZmlsZXMgaW50byB0aGUgcmVzdWx0cwpAQCAtMTAyNSwxMyArODc4LDEx
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgX2xvZy5kZWJ1ZygiRmluaXNoZWQgd3Jp
dGluZyBKU09OIGZpbGVzLiIpCiAKLSAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2Zf
dHlwZShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgZGVmIF9wcmludF9leHBlY3Rl
ZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlX3N0cik6CiAg
ICAgICAgICIiIlByaW50IHRoZSBudW1iZXIgb2YgdGhlIHRlc3RzIGluIGEgZ2l2ZW4gcmVzdWx0
IGNsYXNzLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8g
d3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgIHN5
cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkgLSB0aGUgb2JqZWN0IGNv
bnRhaW5pbmcgYWxsIHRoZSByZXN1bHRzIHRvIHJlcG9ydCBvbgogICAgICAgICAgIHJlc3VsdF90
eXBlIC0gdGhlIHBhcnRpY3VsYXIgcmVzdWx0IHR5cGUgdG8gcmVwb3J0IGluIHRoZSBzdW1tYXJ5
LgogICAgICAgICAgIHJlc3VsdF90eXBlX3N0ciAtIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRo
ZSByZXN1bHRfdHlwZS4KQEAgLTEwNDYsOCArODk3LDkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAg
ICAgICAgZm10c3RyID0gKCJFeHBlY3Q6ICUlNWQgJSUtOHMgKCUlJWRkIG5vdywgJSUlZGQgZGVm
ZXIsICUlJWRkIHdvbnRmaXgpIgogICAgICAgICAgICAgICAgICAgJSAoc2VsZi5fbnVtX2RpZ2l0
cyhub3cpLCBzZWxmLl9udW1fZGlnaXRzKGRlZmVyKSwKICAgICAgICAgICAgICAgICAgIHNlbGYu
X251bV9kaWdpdHMod29udGZpeCkpKQotICAgICAgICB3cml0ZShmbXRzdHIgJSAobGVuKHRlc3Rz
KSwgcmVzdWx0X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cpLAotICAgICAgICAgICAgICBsZW4o
dGVzdHMgJiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRmaXgpKSkKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9leHBlY3RlZChmbXRzdHIgJQorICAgICAgICAgICAgKGxlbih0ZXN0cyksIHJl
c3VsdF90eXBlX3N0ciwgbGVuKHRlc3RzICYgbm93KSwKKyAgICAgICAgICAgICBsZW4odGVzdHMg
JiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRmaXgpKSkKIAogICAgIGRlZiBfbnVtX2RpZ2l0cyhz
ZWxmLCBudW0pOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lZWRl
ZCB0byByZXByZXNlbnQgdGhlIGxlbmd0aCBvZiBhCkBAIC0xMDU3LDQzICs5MDksMzkgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIG5kaWdpdHMgPSBpbnQobWF0aC5sb2cxMChsZW4o
bnVtKSkpICsgMQogICAgICAgICByZXR1cm4gbmRpZ2l0cwogCi0gICAgZGVmIF9wcmludF90aW1p
bmdfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwgdG90YWxfdGltZSwgdGhyZWFkX3RpbWluZ3MsCisg
ICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlzdGljcyhzZWxmLCB0b3RhbF90aW1lLCB0aHJlYWRf
dGltaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90
aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJlY29yZCB0aW1pbmctc3BlY2lm
aWMgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZXN0IHJ1bi4KIAogICAgICAgICBBcmdzOgotICAgICAg
ICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dy
aXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICB0b3Rh
bF90aW1lOiB0b3RhbCBlbGFwc2VkIHRpbWUgKGluIHNlY29uZHMpIGZvciB0aGUgdGVzdCBydW4K
ICAgICAgICAgICB0aHJlYWRfdGltaW5nczogd2FsbCBjbG9jayB0aW1lIGVhY2ggdGhyZWFkIHJh
biBmb3IKICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzOiB0aW1pbmcgYnkgZGlyZWN0
b3J5CiAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBmaWxlCiAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0aGUgdGVzdCBydW4K
ICAgICAgICAgIiIiCi0gICAgICAgIHdyaXRlKCJUZXN0IHRpbWluZzoiKQotICAgICAgICB3cml0
ZSgiICAlNi4yZiB0b3RhbCB0ZXN0aW5nIHRpbWUiICUgdG90YWxfdGltZSkKLSAgICAgICAgd3Jp
dGUoIiIpCi0gICAgICAgIHdyaXRlKCJUaHJlYWQgdGltaW5nOiIpCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCJUZXN0IHRpbWluZzoiKQorICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X3RpbWluZygiICAlNi4yZiB0b3RhbCB0ZXN0aW5nIHRpbWUiICUgdG90YWxfdGltZSkK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdGltaW5nKCJUaHJlYWQgdGltaW5nOiIpCiAgICAgICAgIGN1bWxfdGltZSA9
IDAKICAgICAgICAgZm9yIHQgaW4gdGhyZWFkX3RpbWluZ3M6Ci0gICAgICAgICAgICB3cml0ZSgi
ICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQorICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiAgICAlMTBzOiAlNWQgdGVzdHMsICU2LjJmIHNlY3MiICUKICAg
ICAgICAgICAgICAgICAgICh0WyduYW1lJ10sIHRbJ251bV90ZXN0cyddLCB0Wyd0b3RhbF90aW1l
J10pKQogICAgICAgICAgICAgY3VtbF90aW1lICs9IHRbJ3RvdGFsX3RpbWUnXQotICAgICAgICB3
cml0ZSgiICAgJTYuMmYgY3VtdWxhdGl2ZSwgJTYuMmYgb3B0aW1hbCIgJQorICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3RpbWluZygiICAgJTYuMmYgY3VtdWxhdGl2ZSwgJTYuMmYgb3B0aW1h
bCIgJQogICAgICAgICAgICAgICAoY3VtbF90aW1lLCBjdW1sX3RpbWUgLyBpbnQoc2VsZi5fb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXMpKSkKLSAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQogCi0gICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0
ZV90ZXN0X3N0YXRpc3RpY3Mod3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQotICAgICAg
ICBzZWxmLl9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMod3JpdGUsIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzLAorICAgICAgICBzZWxmLl9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNz
KGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBzZWxmLl9wcmludF9pbmRpdmlkdWFs
X3Rlc3RfdGltZXMoaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJp
bnRfZGlyZWN0b3J5X3RpbWluZ3Mod3JpdGUsIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpCisgICAg
ICAgIHNlbGYuX3ByaW50X2RpcmVjdG9yeV90aW1pbmdzKGRpcmVjdG9yeV90ZXN0X3RpbWluZ3Mp
CiAKLSAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgd3JpdGUs
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKKyAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0
X3N0YXRpc3RpY3Moc2VsZiwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJQ
cmludHMgYWdncmVnYXRlIHN0YXRpc3RpY3MgKGUuZy4gbWVkaWFuLCBtZWFuLCBldGMuKSBmb3Ig
YWxsIHRlc3RzLgogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRv
IHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAg
c3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlz
dCBvZiBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U3RhdHMKICAgICAgICAgICAgICAgZm9y
IGFsbCB0ZXN0cy4KICAgICAgICAgIiIiCkBAIC0xMTE1LDIzICs5NjMsMjEgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlwZV0u
YXBwZW5kKAogICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGVdKQog
Ci0gICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0ZSwK
KyAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKAogICAgICAg
ICAgICAgIlBFUiBURVNUIFRJTUUgSU4gVEVTVFNIRUxMIChzZWNvbmRzKToiLAogICAgICAgICAg
ICAgdGltZXNfZm9yX2R1bXBfcmVuZGVyX3RyZWUpCi0gICAgICAgIHNlbGYuX3ByaW50X3N0YXRp
c3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlz
dGljc19mb3JfdGVzdF90aW1pbmdzKAogICAgICAgICAgICAgIlBFUiBURVNUIERJRkYgUFJPQ0VT
U0lORyBUSU1FUyAoc2Vjb25kcyk6IiwKICAgICAgICAgICAgIHRpbWVzX2Zvcl9kaWZmX3Byb2Nl
c3NpbmcpCiAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoKLSAgICAgICAgICAg
IHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAg
ICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncygKICAgICAgICAgICAg
ICAgICAiUEVSIFRFU1QgVElNRVMgQlkgVEVTVCBUWVBFOiAlcyIgJSB0ZXN0X3R5cGUsCiAgICAg
ICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZVt0ZXN0X3R5cGVdKQogCi0gICAgZGVmIF9w
cmludF9pbmRpdmlkdWFsX3Rlc3RfdGltZXMoc2VsZiwgd3JpdGUsIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzLAorICAgIGRlZiBfcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHNlbGYsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUHJpbnRzIHRoZSBydW4gdGltZXMgZm9yIHNsb3cs
IHRpbWVvdXQgYW5kIGNyYXNoIHRlc3RzLgogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRl
OiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IK
LSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5nczogTGlzdCBvZiBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U3RhdHMKICAg
ICAgICAgICAgICAgZm9yIGFsbCB0ZXN0cy4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3Vt
bWFyeSBvYmplY3QgZm9yIHRlc3QgcnVuCkBAIC0xMTUzLDUzICs5OTksNTIgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgICAgICBzbG93X3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQog
CiAgICAgICAgICAgICBpZiBmaWxlbmFtZSBpbiByZXN1bHRfc3VtbWFyeS5mYWlsdXJlczoKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRfc3VtbWFyeS5yZXN1bHRzW2ZpbGVuYW1lXQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbZmlsZW5hbWVd
LnR5cGUKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlRJ
TUVPVVQgb3IKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25z
LkNSQVNIKToKICAgICAgICAgICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9vcl9zbG93ID0g
VHJ1ZQogICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzLmFwcGVuZCh0
ZXN0X3R1cGxlKQogCiAgICAgICAgICAgICBpZiAobm90IGlzX3RpbWVvdXRfY3Jhc2hfb3Jfc2xv
dyBhbmQKLSAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA8IHNlbGYuX29wdGlvbnMubnVtX3Ns
b3dfdGVzdHNfdG9fbG9nKToKKyAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA8IHByaW50aW5n
Lk5VTV9TTE9XX1RFU1RTX1RPX0xPRyk6CiAgICAgICAgICAgICAgICAgbnVtX3ByaW50ZWQgPSBu
dW1fcHJpbnRlZCArIDEKICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMuYXBw
ZW5kKHRlc3RfdHVwbGUpCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50
X3Rlc3RfbGlzdF90aW1pbmcod3JpdGUsICIlcyBzbG93ZXN0IHRlc3RzIHRoYXQgYXJlIG5vdCAi
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9w
cmludF90ZXN0X2xpc3RfdGltaW5nKCIlcyBzbG93ZXN0IHRlc3RzIHRoYXQgYXJlIG5vdCAiCiAg
ICAgICAgICAgICAibWFya2VkIGFzIFNMT1cgYW5kIGRpZCBub3QgdGltZW91dC9jcmFzaDoiICUK
LSAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubnVtX3Nsb3dfdGVzdHNfdG9fbG9nLCB1bmV4cGVj
dGVkX3Nsb3dfdGVzdHMpCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmludF90
ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgbWFya2VkIGFzIFNMT1c6IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93X3Rlc3RzKQotICAgICAgICB3cml0ZSgi
IikKLSAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0ZSwgIlRlc3RzIHRo
YXQgdGltZWQgb3V0IG9yIGNyYXNoZWQ6IiwKKyAgICAgICAgICAgIHByaW50aW5nLk5VTV9TTE9X
X1RFU1RTX1RPX0xPRywgdW5leHBlY3RlZF9zbG93X3Rlc3RzKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWlu
ZygiVGVzdHMgbWFya2VkIGFzIFNMT1c6Iiwgc2xvd190ZXN0cykKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1p
bmcoIlRlc3RzIHRoYXQgdGltZWQgb3V0IG9yIGNyYXNoZWQ6IiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzKQotICAgICAgICB3cml0
ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCiAKLSAgICBkZWYg
X3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoc2VsZiwgd3JpdGUsIHRpdGxlLCB0ZXN0X2xpc3QpOgor
ICAgIGRlZiBfcHJpbnRfdGVzdF9saXN0X3RpbWluZyhzZWxmLCB0aXRsZSwgdGVzdF9saXN0KToK
ICAgICAgICAgIiIiUHJpbnQgdGltaW5nIGluZm8gZm9yIGVhY2ggdGVzdC4KIAogICAgICAgICBB
cmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4s
IGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAg
ICAgICAgICB0aXRsZTogc2VjdGlvbiBoZWFkaW5nCiAgICAgICAgICAgdGVzdF9saXN0OiB0ZXN0
cyB0aGF0IGZhbGwgaW4gdGhpcyBzZWN0aW9uCiAgICAgICAgICIiIgotICAgICAgICB3cml0ZSh0
aXRsZSkKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRlci5kaXNhYmxlZCgnc2xvd2VzdCcpOgorICAg
ICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcodGl0
bGUpCiAgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfbGlzdDoKICAgICAgICAgICAgIGZp
bGVuYW1lID0gdGVzdF90dXBsZS5maWxlbmFtZVtsZW4oCiAgICAgICAgICAgICAgICAgc2VsZi5f
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCiAgICAgICAgICAgICBmaWxlbmFtZSA9IGZp
bGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKQogICAgICAgICAgICAgdGVzdF9ydW5fdGltZSA9IHJv
dW5kKHRlc3RfdHVwbGUudGVzdF9ydW5fdGltZSwgMSkKLSAgICAgICAgICAgIHdyaXRlKCIgICVz
IHRvb2sgJXMgc2Vjb25kcyIgJSAoZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQorICAgICAgICAg
ICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgJXMgdG9vayAlcyBzZWNvbmRzIiAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZW5hbWUsIHRlc3RfcnVu
X3RpbWUpKQogCi0gICAgZGVmIF9wcmludF9kaXJlY3RvcnlfdGltaW5ncyhzZWxmLCB3cml0ZSwg
ZGlyZWN0b3J5X3Rlc3RfdGltaW5ncyk6CisgICAgZGVmIF9wcmludF9kaXJlY3RvcnlfdGltaW5n
cyhzZWxmLCBkaXJlY3RvcnlfdGVzdF90aW1pbmdzKToKICAgICAgICAgIiIiUHJpbnQgdGltaW5n
IGluZm8gYnkgZGlyZWN0b3J5IGZvciBhbnkgZGlyZWN0b3JpZXMgdGhhdAogICAgICAgICB0YWtl
ID4gMTAgc2Vjb25kcyB0byBydW4uCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTog
QSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0g
ICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgZGlyZWN0b3J5X3Rlc3Rf
dGltaW5nOiB0aW1lIGluZm8gZm9yIGVhY2ggZGlyZWN0b3J5CiAgICAgICAgICIiIgogICAgICAg
ICB0aW1pbmdzID0gW10KQEAgLTEyMDksMjUgKzEwNTQsMjQgQEAgY2xhc3MgVGVzdFJ1bm5lcjoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fdGVzdHMpKQogICAgICAgICB0aW1pbmdz
LnNvcnQoKQogCi0gICAgICAgIHdyaXRlKCJUaW1lIHRvIHByb2Nlc3Mgc2xvd2VzdCBzdWJkaXJl
Y3RvcmllczoiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiVGltZSB0byBw
cm9jZXNzIHNsb3dlc3Qgc3ViZGlyZWN0b3JpZXM6IikKICAgICAgICAgbWluX3NlY29uZHNfdG9f
cHJpbnQgPSAxMAogICAgICAgICBmb3IgdGltaW5nIGluIHRpbWluZ3M6CiAgICAgICAgICAgICBp
ZiB0aW1pbmdbMF0gPiBtaW5fc2Vjb25kc190b19wcmludDoKLSAgICAgICAgICAgICAgICB3cml0
ZSgiICAlcyB0b29rICVzIHNlY29uZHMgdG8gcnVuICVzIHRlc3RzLiIgJSAodGltaW5nWzFdLAot
ICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ1swXSwgdGltaW5nWzJdKSkKLSAgICAgICAgd3Jp
dGUoIiIpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoCisgICAg
ICAgICAgICAgICAgICAgICIgICVzIHRvb2sgJXMgc2Vjb25kcyB0byBydW4gJXMgdGVzdHMuIiAl
ICh0aW1pbmdbMV0sCisgICAgICAgICAgICAgICAgICAgIHRpbWluZ1swXSwgdGltaW5nWzJdKSkK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCiAKLSAgICBkZWYgX3ByaW50
X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyhzZWxmLCB3cml0ZSwgdGl0bGUsIHRpbWluZ3Mp
OgorICAgIGRlZiBfcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHNlbGYsIHRpdGxl
LCB0aW1pbmdzKToKICAgICAgICAgIiIiUHJpbnRzIHRoZSBtZWRpYW4sIG1lYW4gYW5kIHN0YW5k
YXJkIGRldmlhdGlvbiBvZiB0aGUgdmFsdWVzIGluCiAgICAgICAgIHRpbWluZ3MuCiAKICAgICAg
ICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChl
LmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUu
CiAgICAgICAgICAgdGl0bGU6IFRpdGxlIGZvciB0aGVzZSB0aW1pbmdzLgogICAgICAgICAgIHRp
bWluZ3M6IEEgbGlzdCBvZiBmbG9hdHMgcmVwcmVzZW50aW5nIHRpbWVzLgogICAgICAgICAiIiIK
LSAgICAgICAgd3JpdGUodGl0bGUpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5n
KHRpdGxlKQogICAgICAgICB0aW1pbmdzLnNvcnQoKQogCiAgICAgICAgIG51bV90ZXN0cyA9IGxl
bih0aW1pbmdzKQpAQCAtMTI0OSwxOSArMTA5MywxNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAg
ICAgICAgICAgc3VtX29mX2RldmlhdGlvbnMgPSBtYXRoLnBvdyh0aW1lIC0gbWVhbiwgMikKIAog
ICAgICAgICBzdGRfZGV2aWF0aW9uID0gbWF0aC5zcXJ0KHN1bV9vZl9kZXZpYXRpb25zIC8gbnVt
X3Rlc3RzKQotICAgICAgICB3cml0ZSgiICBNZWRpYW46ICAgICAgICAgICU2LjNmIiAlIG1lZGlh
bikKLSAgICAgICAgd3JpdGUoIiAgTWVhbjogICAgICAgICAgICAlNi4zZiIgJSBtZWFuKQotICAg
ICAgICB3cml0ZSgiICA5MHRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5MCkKLSAg
ICAgICAgd3JpdGUoIiAgOTl0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTkpCi0g
ICAgICAgIHdyaXRlKCIgIFN0YW5kYXJkIGRldjogICAgJTYuM2YiICUgc3RkX2RldmlhdGlvbikK
LSAgICAgICAgd3JpdGUoIiIpCi0KLSAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHNlbGYs
IHdyaXRlLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGlt
aW5nKCIgIE1lZGlhbjogICAgICAgICAgJTYuM2YiICUgbWVkaWFuKQorICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3RpbWluZygiICBNZWFuOiAgICAgICAgICAgICU2LjNmIiAlIG1lYW4pCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIDkwdGggcGVyY2VudGlsZTogJTYu
M2YiICUgcGVyY2VudGlsZTkwKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygi
ICA5OXRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5OSkKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF90aW1pbmcoIiAgU3RhbmRhcmQgZGV2OiAgICAlNi4zZiIgJSBzdGRfZGV2
aWF0aW9uKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKworICAgIGRl
ZiBfcHJpbnRfcmVzdWx0X3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAi
IiJQcmludCBhIHNob3J0IHN1bW1hcnkgYWJvdXQgaG93IG1hbnkgdGVzdHMgcGFzc2VkLgogCiAg
ICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0
byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0Lndy
aXRlLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBpbmZvcm1hdGlvbiB0byBsb2cKICAgICAg
ICAgIiIiCiAgICAgICAgIGZhaWxlZCA9IGxlbihyZXN1bHRfc3VtbWFyeS5mYWlsdXJlcykKQEAg
LTEyNzMsMzAgKzExMTUsMjggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgaWYgdG90YWwg
PiAwOgogICAgICAgICAgICAgcGN0X3Bhc3NlZCA9IGZsb2F0KHBhc3NlZCkgKiAxMDAgLyB0b3Rh
bAogCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICB3cml0ZSgiPT4gUmVzdWx0czogJWQvJWQg
dGVzdHMgcGFzc2VkICglLjFmJSUpIiAlCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0
dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiPT4gUmVzdWx0czog
JWQvJWQgdGVzdHMgcGFzc2VkICglLjFmJSUpIiAlCiAgICAgICAgICAgICAgICAgICAgICAocGFz
c2VkLCB0b3RhbCwgcGN0X3Bhc3NlZCkpCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxm
Ll9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludF9y
ZXN1bHRfc3VtbWFyeV9lbnRyeShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLk5PVywgIlRlc3RzIHRvIGJlIGZpeGVkIGZvciB0aGUgY3VycmVudCByZWxlYXNl
IikKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1h
cnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnko
cmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5ERUZFUiwKICAg
ICAgICAgICAgICJUZXN0cyB3ZSdsbCBmaXggaW4gdGhlIGZ1dHVyZSBpZiB0aGV5IGZhaWwgKERF
RkVSKSIpCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9z
dW1tYXJ5X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2Vu
dHJ5KHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuV09OVEZJ
WCwKICAgICAgICAgICAgICJUZXN0cyB0aGF0IHdpbGwgb25seSBiZSBmaXhlZCBpZiB0aGV5IGNy
YXNoIChXT05URklYKSIpCiAKLSAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHNl
bGYsIHdyaXRlLCByZXN1bHRfc3VtbWFyeSwgdGltZWxpbmUsCisgICAgZGVmIF9wcmludF9yZXN1
bHRfc3VtbWFyeV9lbnRyeShzZWxmLCByZXN1bHRfc3VtbWFyeSwgdGltZWxpbmUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkaW5nKToKICAgICAgICAgIiIiUHJpbnQg
YSBzdW1tYXJ5IGJsb2NrIG9mIHJlc3VsdHMgZm9yIGEgcGFydGljdWxhciB0aW1lbGluZSBvZiB0
ZXN0LgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3Jp
dGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMu
c3Rkb3V0LndyaXRlLgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IHRvIHByaW50
IHJlc3VsdHMgZm9yCiAgICAgICAgICAgdGltZWxpbmU6IHRoZSB0aW1lbGluZSB0byBwcmludCBy
ZXN1bHRzIGZvciAoTk9ULCBXT05URklYLCBldGMuKQogICAgICAgICAgIGhlYWRpbmc6IGEgdGV4
dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdGltZWxpbmUKQEAgLTEzMDUsNyArMTE0NSw3IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIG5vdF9wYXNzaW5nID0gKHRvdGFsIC0KICAgICAgICAg
ICAgbGVuKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRp
b25zLlBBU1NdICYKICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVs
aW5lW3RpbWVsaW5lXSkpCi0gICAgICAgIHdyaXRlKCI9PiAlcyAoJWQpOiIgJSAoaGVhZGluZywg
bm90X3Bhc3NpbmcpKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiPT4gJXMg
KCVkKToiICUgKGhlYWRpbmcsIG5vdF9wYXNzaW5nKSkKIAogICAgICAgICBmb3IgcmVzdWx0IGlu
IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX09SREVSOgogICAgICAgICAgICAgaWYg
cmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlBBU1M6CkBAIC0xMzE1LDk0ICsxMTU1LDggQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmls
ZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlNbcmVzdWx0XQogICAgICAgICAgICAgaWYgbm90X3Bh
c3NpbmcgYW5kIGxlbihyZXN1bHRzKToKICAgICAgICAgICAgICAgICBwY3QgPSBsZW4ocmVzdWx0
cykgKiAxMDAuMCAvIG5vdF9wYXNzaW5nCi0gICAgICAgICAgICAgICAgd3JpdGUoIiAgJTVkICUt
MjRzICglNC4xZiUlKSIgJSAobGVuKHJlc3VsdHMpLAotICAgICAgICAgICAgICAgICAgICAgIGRl
c2NbbGVuKHJlc3VsdHMpICE9IDFdLCBwY3QpKQotCi0gICAgZGVmIF9wcmludF9vbmVfbGluZV9z
dW1tYXJ5KHNlbGYsIHRvdGFsLCBleHBlY3RlZCk6Ci0gICAgICAgICIiIlByaW50IGEgb25lLWxp
bmUgc3VtbWFyeSBvZiB0aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgotCi0gICAgICAgIEFyZ3M6Ci0g
ICAgICAgICAgdG90YWw6IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4KLSAgICAgICAgICBleHBl
Y3RlZDogbnVtYmVyIG9mIGV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAgIiIiCi0gICAgICAgIHVu
ZXhwZWN0ZWQgPSB0b3RhbCAtIGV4cGVjdGVkCi0gICAgICAgIGlmIHVuZXhwZWN0ZWQgPT0gMDoK
LSAgICAgICAgICAgIHByaW50ICJBbGwgJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLiIgJSBleHBl
Y3RlZAotICAgICAgICBlbGlmIGV4cGVjdGVkID09IDE6Ci0gICAgICAgICAgICBwcmludCAiMSB0
ZXN0IHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OiIgJSB1bmV4cGVjdGVkCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBwcmludCAiJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRu
J3Q6IiAlIChleHBlY3RlZCwKLSAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKQotCi0gICAgZGVm
IF9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzKToKLSAg
ICAgICAgIiIiUHJpbnRzIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgaW4gYSBodW1hbi1yZWFkYWJs
ZSBmb3JtIHRvIHN0ZG91dC4iIiIKLSAgICAgICAgcGFzc2VzID0ge30KLSAgICAgICAgZmxha3kg
PSB7fQotICAgICAgICByZWdyZXNzaW9ucyA9IHt9Ci0KLSAgICAgICAgaWYgbGVuKHVuZXhwZWN0
ZWRfcmVzdWx0c1sndGVzdHMnXSk6Ci0gICAgICAgICAgICBwcmludCAiIgotCi0gICAgICAgIGZv
ciB0ZXN0LCByZXN1bHRzIGluIHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXS5pdGVyaXRlbXMo
KToKLSAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdHNbJ2FjdHVhbCddLnNwbGl0KCIgIikKLSAg
ICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0c1snZXhwZWN0ZWQnXS5zcGxpdCgiICIpCi0gICAg
ICAgICAgICBpZiBhY3R1YWwgPT0gWydQQVNTJ106Ci0gICAgICAgICAgICAgICAgaWYgJ0NSQVNI
JyBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3Rz
KHBhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBl
Y3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0KQotICAgICAgICAgICAgICAgIGVsaWYgJ1RJTUVPVVQnIGluIGV4
cGVjdGVkOgotICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2Vz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRv
IHRpbWVvdXQsIGJ1dCBwYXNzZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3QpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byBmYWlsLCBidXQgcGFzc2VkJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCi0gICAgICAgICAgICBl
bGlmIGxlbihhY3R1YWwpID4gMToKLSAgICAgICAgICAgICAgICAjIFdlIGdyb3VwIGZsYWt5IHRl
c3RzIGJ5IHRoZSBmaXJzdCBhY3R1YWwgcmVzdWx0IHdlIGdvdC4KLSAgICAgICAgICAgICAgICBf
YWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZmxha3ksIGFjdHVhbFswXSwgdGVzdCkKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHJlZ3Jlc3Npb25z
LCByZXN1bHRzWydhY3R1YWwnXSwgdGVzdCkKLQotICAgICAgICBpZiBsZW4ocGFzc2VzKToKLSAg
ICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHBhc3Nlcy5pdGVyaXRlbXMoKToKLSAgICAgICAg
ICAgICAgICBwcmludCAiJXM6ICglZCkiICUgKGtleSwgbGVuKHRlc3RzKSkKLSAgICAgICAgICAg
ICAgICB0ZXN0cy5zb3J0KCkKLSAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAg
ICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMiICUgdGVzdAotICAgICAgICAgICAgICAgIHBy
aW50Ci0KLSAgICAgICAgaWYgbGVuKGZsYWt5KToKLSAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9
IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUwotICAgICAgICAg
ICAgZm9yIGtleSwgdGVzdHMgaW4gZmxha3kuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQot
ICAgICAgICAgICAgICAgIHByaW50ICJVbmV4cGVjdGVkIGZsYWtpbmVzczogJXMgKCVkKSIgJSAo
Ci0gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVuKHRlc3RzKSkK
LSAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKLQotICAgICAgICAgICAgICAgIGZvciB0ZXN0
IGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3Vs
dHNbJ3Rlc3RzJ11bdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0Wydh
Y3R1YWwnXS5zcGxpdCgiICIpCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0
WydleHBlY3RlZCddLnNwbGl0KCIgIikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVz
dEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQotICAgICAgICAgICAg
ICAgICAgICBuZXdfZXhwZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4
cGVjdGVkKSkKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMgPSAlcyIgJSAodGVzdCwg
IiAiLmpvaW4obmV3X2V4cGVjdGF0aW9uc19saXN0KSkKLSAgICAgICAgICAgICAgICBwcmludAot
Ci0gICAgICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbnMg
PSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKLSAgICAgICAg
ICAgIGZvciBrZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93
ZXIoKV0KLSAgICAgICAgICAgICAgICBwcmludCAiUmVncmVzc2lvbnM6IFVuZXhwZWN0ZWQgJXMg
OiAoJWQpIiAlICgKLSAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBs
ZW4odGVzdHMpKQotICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotICAgICAgICAgICAgICAg
IGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyA9ICVz
IiAlICh0ZXN0LCBrZXkpCi0gICAgICAgICAgICAgICAgcHJpbnQKLQotICAgICAgICBpZiBsZW4o
dW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKSBhbmQgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgot
ICAgICAgICAgICAgcHJpbnQgIi0iICogNzgKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVy
LnByaW50X2FjdHVhbCgiICAlNWQgJS0yNHMgKCU0LjFmJSUpIiAlCisgICAgICAgICAgICAgICAg
ICAgIChsZW4ocmVzdWx0cyksIGRlc2NbbGVuKHJlc3VsdHMpICE9IDFdLCBwY3QpKQogCiAgICAg
ZGVmIF9yZXN1bHRzX2h0bWwoc2VsZiwgdGVzdF9maWxlcywgZmFpbHVyZXMsIHRpdGxlPSJUZXN0
IEZhaWx1cmVzIiwgb3ZlcnJpZGVfdGltZT1Ob25lKToKICAgICAgICAgIiIiCkBAIC0xNDY3LDEw
ICsxMjIxLDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc2VsZi5fcG9ydC5zaG93X3Jl
c3VsdHNfaHRtbF9maWxlKHJlc3VsdHNfZmlsZW5hbWUpCiAKIAotZGVmIF9hZGRfdG9fZGljdF9v
Zl9saXN0cyhkaWN0LCBrZXksIHZhbHVlKToKLSAgICBkaWN0LnNldGRlZmF1bHQoa2V5LCBbXSku
YXBwZW5kKHZhbHVlKQotCi0KIGRlZiByZWFkX3Rlc3RfZmlsZXMoZmlsZXMpOgogICAgIHRlc3Rz
ID0gW10KICAgICBmb3IgZmlsZSBpbiBmaWxlczoKQEAgLTE0ODIsMjUgKzEyMzIsMTEgQEAgZGVm
IHJlYWRfdGVzdF9maWxlcyhmaWxlcyk6CiAgICAgcmV0dXJuIHRlc3RzCiAKIAotZGVmIGNyZWF0
ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCBsb2dfb3B0aW9uKToKLSAgICAiIiJSZXR1cm5zIGEg
d3JpdGUoKSBmdW5jdGlvbiB0aGF0IHdpbGwgd3JpdGUgdGhlIHN0cmluZyB0byBfbG9nLmluZm8o
KQotICAgIGlmIGNvbXAgd2FzIHNwZWNpZmllZCBpbiAtLWxvZyBvciBpZiAtLXZlcmJvc2UgaXMg
dHJ1ZS4gT3RoZXJ3aXNlIHRoZQotICAgIG1lc3NhZ2UgaXMgZHJvcHBlZC4KLQotICAgIEFyZ3M6
Ci0gICAgICBvcHRpb25zOiBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGZyb20gb3B0cGFy
c2UKLSAgICAgIGxvZ19vcHRpb246IG9wdGlvbiB0byBtYXRjaCBpbiBvcHRpb25zLmxvZyBpbiBv
cmRlciBmb3IgdGhlIG1lc3NhZ2VzCi0gICAgICAgICAgdG8gYmUgbG9nZ2VkIChlLmcuLCAnYWN0
dWFsJyBvciAnZXhwZWN0ZWQnKQotICAgICIiIgotICAgIGlmIG9wdGlvbnMudmVyYm9zZSBvciBs
b2dfb3B0aW9uIGluIG9wdGlvbnMubG9nLnNwbGl0KCIsIik6Ci0gICAgICAgIHJldHVybiBfbG9n
LmluZm8KLSAgICByZXR1cm4gbGFtYmRhIHN0cjogMQotCi0KLWRlZiBtYWluKG9wdGlvbnMsIGFy
Z3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CitkZWYgcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdz
KToKICAgICAiIiJSdW4gdGhlIHRlc3RzLgogCiAgICAgQXJnczoKKyAgICAgIHBvcnRfb2JqOiBQ
b3J0IG9iamVjdCBmb3IgcG9ydC1zcGVjaWZpYyBiZWhhdmlvcgogICAgICAgb3B0aW9uczogYSBk
aWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICBhcmdzOiBhIGxpc3Qgb2Yg
c3ViIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRvIHRlc3QKICAgICAgIHByaW50X3Jlc3VsdHM6IHdo
ZXRoZXIgb3Igbm90IHRvIGxvZyBhbnl0aGluZyB0byBzdGRvdXQuCkBAIC0xNTEwLDIyICsxMjQ2
LDIxIEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAg
ICAgICAgZXJyb3IuCiAgICAgIiIiCiAKLSAgICBpZiBvcHRpb25zLnNvdXJjZXM6Ci0gICAgICAg
IG9wdGlvbnMudmVyYm9zZSA9IFRydWUKKyAgICAjIENvbmZpZ3VyZSB0aGUgcHJpbnRpbmcgc3Vi
c3lzdGVtIGZvciBwcmludGluZyBvdXRwdXQsIGxvZ2dpbmcgZGVidWcKKyAgICAjIGluZm8sIGFu
ZCB0cmFjaW5nIHRlc3RzLgorCisgICAgaWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgor
ICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNp
bmcgY3B1X2NvdW50ICsgMS4KKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBwb3J0
X29iai5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpCiAKLSAgICAjIFNldCB1cCBvdXIgbG9nZ2lu
ZyBmb3JtYXQuCi0gICAgbWV0ZXIgPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3RyZWFtKG9wdGlv
bnMudmVyYm9zZSwgc3lzLnN0ZGVycikKLSAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJwotICAg
IGxvZ19kYXRlZm10ID0gJyV5JW0lZCAlSDolTTolUycKLSAgICBsb2dfbGV2ZWwgPSBsb2dnaW5n
LklORk8KLSAgICBpZiBvcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgIGxvZ19mbXQgPSAoJyUoYXNj
dGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubyktNGQgJShsZXZlbG5hbWUpcyAnCi0gICAgICAg
ICAgICAgICAgICAnJShtZXNzYWdlKXMnKQotICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRF
QlVHCi0gICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2df
Zm10LCBkYXRlZm10PWxvZ19kYXRlZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFt
PW1ldGVyKQorICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnRfb2JqLCBvcHRpb25z
LCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAorICAgICAgICBidWlsZGJvdF9vdXRwdXQ9c3lz
LnN0ZG91dCwKKyAgICAgICAgY2hpbGRfcHJvY2Vzc2VzPWludChvcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcyksCisgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsPW9wdGlvbnMuZXhwZXJpbWVudGFsX2Z1
bGx5X3BhcmFsbGVsKQorICAgIGlmIG9wdGlvbnMuaGVscF9wcmludGluZzoKKyAgICAgICAgcHJp
bnRlci5oZWxwX3ByaW50aW5nKCkKKyAgICAgICAgcmV0dXJuIDAKIAotICAgIHBvcnRfb2JqID0g
cG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKICAgICBleGVjdXRpdmUgPSBFeGVj
dXRpdmUoKQogCiAgICAgaWYgbm90IG9wdGlvbnMuY29uZmlndXJhdGlvbjoKQEAgLTE1NjEsOCAr
MTI5Niw4IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAg
ICAgICAgICMgSnVzdCBjbG9iYmVyIHRoZSBhY3R1YWwgdGVzdCByZXN1bHRzIGRpcmVjdG9yaWVz
IHNpbmNlIHRoZSBvdGhlcgogICAgICAgICAjIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9y
eSBhcmUgZXhwbGljaXRseSB1c2VkIGZvciBjcm9zcy1ydW4KICAgICAgICAgIyB0cmFja2luZy4K
LSAgICAgICAgbWV0ZXIudXBkYXRlKCJDbG9iYmVyaW5nIG9sZCByZXN1bHRzIGluICVzIiAlCi0g
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBw
cmludGVyLnByaW50X3VwZGF0ZSgiQ2xvYmJlcmluZyBvbGQgcmVzdWx0cyBpbiAlcyIgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAg
ICAgICBsYXlvdXRfdGVzdHNfZGlyID0gcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCiAgICAg
ICAgIHBvc3NpYmxlX2RpcnMgPSBvcy5saXN0ZGlyKGxheW91dF90ZXN0c19kaXIpCiAgICAgICAg
IGZvciBkaXJuYW1lIGluIHBvc3NpYmxlX2RpcnM6CkBAIC0xNTcwLDE3ICsxMzA1LDYgQEAgZGVm
IG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgICAgICAg
ICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCBk
aXJuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9lcnJvcnM9VHJ1
ZSkKIAotICAgIGlmIG5vdCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlczoKLSAgICAgICAgIyBGSVhN
RTogSW52ZXN0aWdhdGUgcGVyZi9mbGFraW5lc3MgaW1wYWN0IG9mIHVzaW5nIGNwdV9jb3VudCAr
IDEuCi0gICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gcG9ydF9vYmouZGVmYXVsdF9j
aGlsZF9wcm9jZXNzZXMoKQotCi0gICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0
aW9ucywgJ2NvbmZpZycpCi0gICAgaWYgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPT0gMToKLSAg
ICAgICAgd3JpdGUoIlJ1bm5pbmcgb25lICVzIiAlIHBvcnRfb2JqLmRyaXZlcl9uYW1lKQotICAg
IGVsc2U6Ci0gICAgICAgIHdyaXRlKCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJSAoCi0g
ICAgICAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLCBwb3J0X29iai5kcml2ZXJfbmFt
ZSgpKSkKLQogICAgIGlmIG5vdCBvcHRpb25zLnRpbWVfb3V0X21zOgogICAgICAgICBpZiBvcHRp
b25zLmNvbmZpZ3VyYXRpb24gPT0gIkRlYnVnIjoKICAgICAgICAgICAgIG9wdGlvbnMudGltZV9v
dXRfbXMgPSBzdHIoMiAqIFRlc3RSdW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCkBAIC0x
NTg4LDggKzEzMTIsMTQgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1U
cnVlKToKICAgICAgICAgICAgIG9wdGlvbnMudGltZV9vdXRfbXMgPSBzdHIoVGVzdFJ1bm5lci5E
RUZBVUxUX1RFU1RfVElNRU9VVF9NUykKIAogICAgIG9wdGlvbnMuc2xvd190aW1lX291dF9tcyA9
IHN0cig1ICogaW50KG9wdGlvbnMudGltZV9vdXRfbXMpKQotICAgIHdyaXRlKCJSZWd1bGFyIHRp
bWVvdXQ6ICVzLCBzbG93IHRlc3QgdGltZW91dDogJXMiICUKLSAgICAgICAgICAob3B0aW9ucy50
aW1lX291dF9tcywgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKSkKKyAgICBwcmludGVyLnByaW50
X2NvbmZpZygiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVzIiAlCisg
ICAgICAgICAgICAgICAgICAgKG9wdGlvbnMudGltZV9vdXRfbXMsIG9wdGlvbnMuc2xvd190aW1l
X291dF9tcykpCisKKyAgICBpZiBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDE6Cisg
ICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29iai5k
cml2ZXJfbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUnVu
bmluZyAlcyAlc3MgaW4gcGFyYWxsZWwiICUgKAorICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLmNoaWxkX3Byb2Nlc3NlcywgcG9ydF9vYmouZHJpdmVyX25hbWUoKSkpCiAKICAgICAjIElu
Y2x1ZGUgYWxsIHRlc3RzIGlmIG5vbmUgYXJlIHNwZWNpZmllZC4KICAgICBuZXdfYXJncyA9IFtd
CkBAIC0xNjA2LDkgKzEzMzYsOSBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1
bHRzPVRydWUpOgogCiAgICAgIyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnkgaWYgaXQgZG9l
c24ndCBhbHJlYWR5IGV4aXN0LgogICAgIHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KG9w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCi0gICAgbWV0ZXIudXBkYXRlKCJDb2xsZWN0aW5nIHRl
c3RzIC4uLiIpCisgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4u
IikKIAotICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0X29iaiwgb3B0aW9ucywgbWV0
ZXIpCisgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25zLCBwcmlu
dGVyKQogICAgIHRlc3RfcnVubmVyLmdhdGhlcl9maWxlX3BhdGhzKHBhdGhzKQogCiAgICAgaWYg
b3B0aW9ucy5saW50X3Rlc3RfZmlsZXM6CkBAIC0xNjE4LDQzICsxMzQ4LDQzIEBAIGRlZiBtYWlu
KG9wdGlvbnMsIGFyZ3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAgICAgICAgIGZvciBwbGF0Zm9y
bV9uYW1lIGluIHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZXMoKToKICAgICAgICAgICAgIHRl
c3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0Zm9ybV9uYW1lLCBpc19kZWJ1Z19tb2Rl
PVRydWUpCiAgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZv
cm1fbmFtZSwgaXNfZGVidWdfbW9kZT1GYWxzZSkKLSAgICAgICAgbWV0ZXIudXBkYXRlKCIiKQot
ICAgICAgICBwcmludCAoIklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3Ig
ZXhjZXB0aW9ucywgdGhlbiB0aGUgIgotICAgICAgICAgICAgImxpbnQgc3VjY2VlZGVkLiIpCisg
ICAgICAgIHByaW50ZXIud3JpdGUoIiIpCisgICAgICAgIF9sb2cuaW5mbygiSWYgdGhlcmUgYXJl
IG5vIGZhaWwgbWVzc2FnZXMsIGVycm9ycyBvciBleGNlcHRpb25zLCAiCisgICAgICAgICAgICAg
ICAgICAidGhlbiB0aGUgbGludCBzdWNjZWVkZWQuIikKICAgICAgICAgcmV0dXJuIDAKIAotICAg
IHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICJjb25maWciKQotICAgIHdy
aXRlKCJVc2luZyBwb3J0ICclcyciICUgcG9ydF9vYmoubmFtZSgpKQotICAgIHdyaXRlKCJQbGFj
aW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIgJSBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAg
IHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyBwb3J0ICclcyciICUgcG9ydF9vYmoubmFtZSgp
KQorICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIg
JQorICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAg
ICAgaWYgb3B0aW9ucy5uZXdfYmFzZWxpbmU6Ci0gICAgICAgIHdyaXRlKCJQbGFjaW5nIG5ldyBi
YXNlbGluZXMgaW4gJXMiICUgcG9ydF9vYmouYmFzZWxpbmVfcGF0aCgpKQotICAgIHdyaXRlKCJV
c2luZyAlcyBidWlsZCIgJSBvcHRpb25zLmNvbmZpZ3VyYXRpb24pCisgICAgICAgIHByaW50ZXIu
cHJpbnRfY29uZmlnKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9ydF9vYmouYmFzZWxpbmVfcGF0aCgpKQorICAgIHByaW50ZXIu
cHJpbnRfY29uZmlnKCJVc2luZyAlcyBidWlsZCIgJSBvcHRpb25zLmNvbmZpZ3VyYXRpb24pCiAg
ICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgd3JpdGUoIlBpeGVsIHRlc3RzIGVu
YWJsZWQiKQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGl4ZWwgdGVzdHMgZW5hYmxl
ZCIpCiAgICAgZWxzZToKLSAgICAgICAgd3JpdGUoIlBpeGVsIHRlc3RzIGRpc2FibGVkIikKLSAg
ICB3cml0ZSgiIikKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBpeGVsIHRlc3RzIGRp
c2FibGVkIikKKyAgICBwcmludGVyLnByaW50X2NvbmZpZygiIikKIAotICAgIG1ldGVyLnVwZGF0
ZSgiUGFyc2luZyBleHBlY3RhdGlvbnMgLi4uIikKKyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgi
UGFyc2luZyBleHBlY3RhdGlvbnMgLi4uIikKICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3Rh
dGlvbnMocG9ydF9vYmoudGVzdF9wbGF0Zm9ybV9uYW1lKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9PSAnRGVidWcnKQogCi0gICAg
bWV0ZXIudXBkYXRlKCJDaGVja2luZyBidWlsZCAuLi4iKQorICAgIHByaW50ZXIucHJpbnRfdXBk
YXRlKCJDaGVja2luZyBidWlsZCAuLi4iKQogICAgIGlmIG5vdCBwb3J0X29iai5jaGVja19idWls
ZCh0ZXN0X3J1bm5lci5uZWVkc19odHRwKCkpOgogICAgICAgICByZXR1cm4gLTEKIAotICAgIG1l
dGVyLnVwZGF0ZSgiU3RhcnRpbmcgaGVscGVyIC4uLiIpCisgICAgcHJpbnRlci5wcmludF91cGRh
dGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4iKQogICAgIHBvcnRfb2JqLnN0YXJ0X2hlbHBlcigpCiAK
ICAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9udHMs
IC4uLikgYXJlIGNvcnJlY3QuCiAgICAgaWYgbm90IG9wdGlvbnMubm9jaGVja19zeXNfZGVwczoK
LSAgICAgICAgbWV0ZXIudXBkYXRlKCJDaGVja2luZyBzeXN0ZW0gZGVwZW5kZW5jaWVzIC4uLiIp
CisgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDaGVja2luZyBzeXN0ZW0gZGVwZW5kZW5j
aWVzIC4uLiIpCiAgICAgICAgIGlmIG5vdCBwb3J0X29iai5jaGVja19zeXNfZGVwcyh0ZXN0X3J1
bm5lci5uZWVkc19odHRwKCkpOgogICAgICAgICAgICAgcmV0dXJuIC0xCiAKLSAgICBtZXRlci51
cGRhdGUoIlByZXBhcmluZyB0ZXN0cyAuLi4iKQotICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdf
d3JpdGVyKG9wdGlvbnMsICJleHBlY3RlZCIpCi0gICAgcmVzdWx0X3N1bW1hcnkgPSB0ZXN0X3J1
bm5lci5wcmVwYXJlX2xpc3RzX2FuZF9wcmludF9vdXRwdXQod3JpdGUpCisgICAgcHJpbnRlci5w
cmludF91cGRhdGUoIlByZXBhcmluZyB0ZXN0cyAuLi4iKQorICAgIHJlc3VsdF9zdW1tYXJ5ID0g
dGVzdF9ydW5uZXIucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KCkKIAogICAgIHBvcnRf
b2JqLnNldHVwX3Rlc3RfcnVuKCkKIApAQCAtMTY2NCw3ICsxMzk0LDcgQEAgZGVmIG1haW4ob3B0
aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAgICAgaWYgb3B0aW9ucy5mdXp6
eV9waXhlbF90ZXN0czoKICAgICAgICAgICAgIHRlc3RfcnVubmVyLmFkZF90ZXN0X3R5cGUoZnV6
enlfaW1hZ2VfZGlmZi5GdXp6eUltYWdlRGlmZikKIAotICAgIG51bV91bmV4cGVjdGVkX3Jlc3Vs
dHMgPSB0ZXN0X3J1bm5lci5ydW4ocmVzdWx0X3N1bW1hcnksIHByaW50X3Jlc3VsdHMpCisgICAg
bnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IHRlc3RfcnVubmVyLnJ1bihyZXN1bHRfc3VtbWFyeSkK
IAogICAgIHBvcnRfb2JqLnN0b3BfaGVscGVyKCkKIApAQCAtMTY3Nyw3ICsxNDA3LDkgQEAgZGVm
IF9jb21wYXRfc2hpbV9jYWxsYmFjayhvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgog
CiAKIGRlZiBfY29tcGF0X3NoaW1fb3B0aW9uKG9wdGlvbl9uYW1lLCAqKmt3YXJncyk6Ci0gICAg
cmV0dXJuIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKG9wdGlvbl9uYW1lLCBhY3Rpb249ImNhbGxiYWNr
IiwgY2FsbGJhY2s9X2NvbXBhdF9zaGltX2NhbGxiYWNrLCBoZWxwPSJJZ25vcmVkLCBmb3Igb2xk
LXJ1bi13ZWJraXQtdGVzdHMgY29tcGF0IG9ubHkuIiwgKiprd2FyZ3MpCisgICAgcmV0dXJuIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKG9wdGlvbl9uYW1lLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAg
ICAgY2FsbGJhY2s9X2NvbXBhdF9zaGltX2NhbGxiYWNrLAorICAgICAgICBoZWxwPSJJZ25vcmVk
LCBmb3Igb2xkLXJ1bi13ZWJraXQtdGVzdHMgY29tcGF0IG9ubHkuIiwgKiprd2FyZ3MpCiAKIAog
ZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKQEAgLTE3MDEsMjIgKzE0MzMsNyBAQCBkZWYgcGFy
c2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAjIG9sZC1ydW4td2Via2l0LXRlc3RzIGFsc28g
YWNjZXB0cyAtYywgLS1jb25maWd1cmF0aW9uIENPTkZJR1VSQVRJT04uCiAgICAgXQogCi0gICAg
bG9nZ2luZ19vcHRpb25zID0gWwotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1sb2ci
LCBhY3Rpb249InN0b3JlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9TE9HX0RFRkFVTFRfVkFMVUUs
Ci0gICAgICAgICAgICBoZWxwPSgibG9nIHZhcmlvdXMgdHlwZXMgb2YgZGF0YS4gVGhlIGFyZ3Vt
ZW50IHZhbHVlIHNob3VsZCBiZSBhICIKLSAgICAgICAgICAgICAgICAgICJjb21tYS1zZXBhcmF0
ZWQgbGlzdCBvZiB2YWx1ZXMgZnJvbTogJXMgKGRlZmF1bHRzIHRvICIKLSAgICAgICAgICAgICAg
ICAgICItLWxvZyAlcykiICUgKExPR19WQUxVRVMsIExPR19ERUZBVUxUX1ZBTFVFKSkpLAotICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249InN0b3Jl
X3RydWUiLAotICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVkZSBkZWJ1Zy1s
ZXZlbCBsb2dnaW5nIiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNvdXJjZXMi
LCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgaGVscD0ic2hvdyBleHBlY3RlZCBy
ZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoIHRlc3QgIiArCi0gICAgICAgICAgICAgICAgICIoaW1w
bGllcyAtLXZlcmJvc2UpIiksCi0gICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMgaGFzIGEg
LS1zbG93ZXN0IG9wdGlvbiB3aGljaCBqdXN0IHByaW50cwotICAgICAgICAjIHRoZSBzbG93ZXN0
IDEwLgotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1udW0tc2xvdy10ZXN0cy10by1s
b2ciLCBkZWZhdWx0PTUwLAotICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIHNsb3cgdGVzdHMg
d2hvc2UgdGltaW5ncyB0byBwcmludC4iKSwKLSAgICBdCisgICAgcHJpbnRfb3B0aW9ucyA9IHBy
aW50aW5nLnByaW50X29wdGlvbnMoKQogCiAgICAgIyBGSVhNRTogVGhlc2Ugb3B0aW9ucyBzaG91
bGQgbW92ZSBvbnRvIHRoZSBDaHJvbWl1bVBvcnQuCiAgICAgY2hyb21pdW1fb3B0aW9ucyA9IFsK
QEAgLTE4ODksMTMgKzE2MDYsMjMgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAg
ICAgICAgIGhlbHA9KCJUaGUgYnVpbGQgbnVtYmVyIG9mIHRoZSBidWlsZGVyIHJ1bm5pbmcgdGhp
cyBzY3JpcHQuIikpLAogICAgIF0KIAotICAgIG9wdGlvbl9saXN0ID0gKGNvbmZpZ3VyYXRpb25f
b3B0aW9ucyArIGxvZ2dpbmdfb3B0aW9ucyArCisgICAgb3B0aW9uX2xpc3QgPSAoY29uZmlndXJh
dGlvbl9vcHRpb25zICsgcHJpbnRfb3B0aW9ucyArCiAgICAgICAgICAgICAgICAgICAgY2hyb21p
dW1fb3B0aW9ucyArIHJlc3VsdHNfb3B0aW9ucyArIHRlc3Rfb3B0aW9ucyArCiAgICAgICAgICAg
ICAgICAgICAgbWlzY19vcHRpb25zICsgcmVzdWx0c19qc29uX29wdGlvbnMgKwogICAgICAgICAg
ICAgICAgICAgIG9sZF9ydW5fd2Via2l0X3Rlc3RzX2NvbXBhdCkKICAgICBvcHRpb25fcGFyc2Vy
ID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQotICAgIHJl
dHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKIAotaWYgJ19fbWFpbl9fJyA9PSBf
X25hbWVfXzoKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFy
Z3MpCisgICAgaWYgb3B0aW9ucy5zb3VyY2VzOgorICAgICAgICBvcHRpb25zLnZlcmJvc2UgPSBU
cnVlCisKKyAgICByZXR1cm4gb3B0aW9ucywgYXJncworCisKK2RlZiBtYWluKCk6CiAgICAgb3B0
aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQotICAgIHN5cy5leGl0KG1haW4ob3B0aW9ucywgYXJn
cykpCisgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQor
ICAgIHJldHVybiBydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MpCisKK2lmICdfX21haW5fXycg
PT0gX19uYW1lX186CisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVz
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggZWRjNWFjMy4uYTZkMDc5YyAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0zMywxNCArMzMsMTggQEAgaW1w
b3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5ydW5fd2Via2l0X3Rlc3RzIGFzIHJ1bl93ZWJraXRfdGVzdHMKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cwogCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9j
ayBpbXBvcnQgTW9jawogCi0KLWRlZiBwYXNzaW5nX3J1bihhcmdzKToKK2RlZiBwYXNzaW5nX3J1
bihhcmdzLCBwb3J0X29iaj1Ob25lLCBsb2dnaW5nX2luY2x1ZGVkPUZhbHNlKToKKyAgICBpZiBu
b3QgbG9nZ2luZ19pbmNsdWRlZDoKKyAgICAgICAgYXJncy5leHRlbmQoWyctLXByaW50JywgJ25v
dGhpbmcnXSkKICAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdz
KGFyZ3MpCi0gICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5tYWluKG9wdGlvbnMsIGFyZ3MsIEZh
bHNlKQorICAgIGlmIHBvcnRfb2JqIGlzIE5vbmU6CisgICAgICAgIHBvcnRfb2JqID0gcG9ydC5n
ZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKKyAgICByZXMgPSBydW5fd2Via2l0X3Rlc3Rz
LnJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncykKICAgICByZXR1cm4gcmVzID09IDAKIAogCkBA
IC01NSw3ICs1OSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sL2FydGljbGUtZWxlbWVu
dC5odG1sJ10pKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRm
b3JtJywgJ3Rlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tY2hp
bGQtcHJvY2Vzc2VzJywgJzEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICctLWxvZycsICd1bmV4cGVjdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1wcmludCcsICd1bmV4cGVjdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnZmFzdC9odG1sJ10pKQogCiAKQEAgLTY1LDcgKzY5LDcgQEAgY2xhc3MgVGVz
dFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBtb2NrX3BvcnQucmVsYXRp
dmVfdGVzdF9maWxlbmFtZSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAgICAgICAgIG1vY2tfcG9ydC5m
aWxlbmFtZV90b191cmkgPSBsYW1iZGEgbmFtZTogbmFtZQogCi0gICAgICAgIHJ1bm5lciA9IHJ1
bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCks
IG1ldGVyPU1vY2soKSkKKyAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVu
bmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCiAgICAg
ICAgIGV4cGVjdGVkX2h0bWwgPSB1IiIiPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5MYXlv
dXQgVGVzdCBSZXN1bHRzICh0aW1lKTwvdGl0bGU+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54496</attachid>
            <date>2010-04-27 18:44:39 -0700</date>
            <delta_ts>2010-04-28 15:00:11 -0700</delta_ts>
            <desc>lint</desc>
            <filename>wk38018_printing_cleanup.diff</filename>
            <type>text/plain</type>
            <size>100992</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxNWMzNmI0Li41OTM4YjRlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTAtMDQt
MjcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHJl
ZmFjdG9yIGEgbGFyZ2UgY2h1bmsgb2YgdGhlIHByaW50aW5nL2xvZ2dpbmcKKyAgICAgICAgY29k
ZSBvdXQgb2YgcnVuLXdlYmtpdC10ZXN0cyBweSAoYWxtb3N0IDMwMCBsaW5lcyBvdXQgb2YgMTkw
MCkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyByZW5hbWVzIC0tbG9nIHRvIC0tcHJpbnQg
KHRvIGJlIHNsaWdodGx5IG1vcmUKKyAgICAgICAgZGVzY3JpcHRpdmUpLiBJJ3ZlIGFsc28gYWRk
ZWQgYmV0dGVyIGhlbHAgbWVzc2FnZXMgZm9yIHByaW50aW5nLgorCisgICAgICAgIFRoZSBuZXcg
Y29kZSBoYXMgdW5pdCB0ZXN0cyEKKworICAgICAgICBUaGVyZSBpcyBzdGlsbCBtb3JlIGNvZGUg
dG8gYmUgbW92ZWQsIGJ1dCB0aGlzIHBhdGNoIGlzIGJpZyBlbm91Z2ggYXMKKyAgICAgICAgaXQg
aXMuIE5hbWVseSwgc3RpbGwgdG8gbW92ZSBhcmUgdGhlIHByaW50aW5nIG9mIHRoZSBhY3R1YWwg
cmVzdWx0cworICAgICAgICBhbmQgdGhlIHRpbWluZyBzdGF0aXN0aWNzLCB3aGljaCBzaG91bGQg
bW92ZSBhbm90aGVyIDMwMC00MDAgbGluZXMKKyAgICAgICAgb3V0IG9mIHRoZSBmaWxlLgorCisg
ICAgICAgIE5vdGFibGUgY2hhbmdlcyB0byBydW5fd2Via2l0X3Rlc3RzLnB5IGJleW9uZCBjb2Rl
IHNpbXBseSBtb3Zpbmc6CisgICAgICAgICogTWV0ZXJlZFN0cmVhbSBpcyBub3cgaGlkZGVuIHVu
ZGVyIHRoZSBuZXcgcHJpbnRpbmcuUHJpbnRlciBjbGFzcy4KKyAgICAgICAgICBBbGwgdGhlIHJl
ZmVyZW5jZXMgdG8gc2VsZi5fbWV0ZXIgbm93IHBvaW50IHRvIHNlbGYuX3ByaW50ZXIuCisgICAg
ICAgICogQWxsIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBpcyBkb25lIGluIHByaW50aW5nLmNvbmZp
Z3VyZV9sb2dnaW5nKCkKKyAgICAgICAgKiBJbnN0ZWFkIG9mIHVzaW5nIHdyaXRlKCkgbGFtYmRh
cyB0byBjb250cm9sIHdoYXQgaXMgYW5kIGlzbid0CisgICAgICAgICAgcHJpbnRlZCwgd2UgdXNl
IHNlcGFyYXRlIG1ldGhvZHMgb24gdGhlIHByaW50ZXIgb2JqZWN0LiBUaGlzIHdpbGwKKyAgICAg
ICAgICBtYWtlIGl0IGVhc2llciB0byBncmVwIHdoaWNoIHByaW50IHN0YXRlbWVudHMgYXJlIHBy
aW50ZWQKKyAgICAgICAgICB1bmRlciBwcm90ZWN0aW9uIG9mIGVhY2ggZmxhZy4KKyAgICAgICAg
KiBUaGUgcHJpbnRfcmVzdWx0cyBmbGFnIEkgYWRkZWQgYSBmZXcgcmV2cyBiYWNrIHRvIHN1cHBy
ZXNzIHByaW50aW5nCisgICAgICAgICAgaW4gdGhlIHVuaXQgdGVzdHMgaGFzIGJlZW4gcmVwbGFj
ZWQgd2l0aCAtLXByaW50IG5vdGhpbmcuCisgICAgICAgICogVGhlIFJlc3VsdFN1bW1hcnkgY2xh
c3Mgbm93IHN0b3JlcyB0aGUgZW50aXJlIFRlc3RSZXN1bHQgZm9yIGVhY2gKKyAgICAgICAgICB0
ZXN0LCBub3QganVzdCB0aGUgYWN0dWFsIHJlc3VsdCB0eXBlLgorICAgICAgICAqIHN1bW1hcml6
ZV91bmV4cGVjdGVkX3Jlc3VsdHMoKSBnb3QgbW92ZWQgZnJvbSBhIG1ldGhvZCBvbiBUZXN0UnVu
bmVyCisgICAgICAgICAgdG8gYSBzdGFuZGFsb25lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBtb3Zl
IGludG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAgICAgYWxvbmcgd2l0aCB0aGUgUmVzdWx0U3Vt
bWFyeSBjbGFzcyBhbmQgdGhlIFRlc3RSZXN1bHQgY2xhc3MKKyAgICAgICAgKiBUaGUgLS10cmFj
ZSBvcHRpb24gYWRkZWQgcmVjZW50bHkgaGFzIGJlZW4gcmVwbGFjZWQgYnkKKyAgICAgICAgICAn
LS1wcmludCB0cmFjZS1ldmVyeXRoaW5nJyBhbmQgJy0tcHJpbnQgdHJhY2UtdW5leHBlY3RlZCcK
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgwMTgK
KworICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHM6CisgICAgICAgICAgLSB1
cGRhdGUgdG8gbmV3IGVudHJ5IHBvaW50cyBpbiBydW5fd2Via2l0X3Rlc3RzLnB5CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9z
dHJlYW0ucHk6CisgICAgICAgICAgLSBmaXggYSBtaW5vciBuaXQgd2hlcmUgd2Ugd2VyZSBwcmlu
dGluZyBhbiBlbXB0eSBzdHJpbmcgd2hlcmUKKyAgICAgICAgICAgIHdlIGRpZG4ndCBuZWVkIHRv
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cHJpbnRpbmcucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5OiBBZGRlZAorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAgICAt
IGltcGxlbWVudCByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKCkgYW5kIGV4cGVjdGVkX2ZpbGVuYW1l
KCkgc28KKyAgICAgICAgICAgIHdlIGNhbiB0ZXN0IHByaW50aW5nIHVuZXhwZWN0ZWQgcmVzdWx0
cyBpbiBhIHBsYXRmb3JtLW5ldXRyYWwKKyAgICAgICAgICAgIHdheQorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcnVuX3dlYmtpdF90ZXN0LnB5OgorICAgICAgICAgIC0gbW92ZSBhIGxvdCBv
ZiB0aGUgcHJpbnRpbmcgY29kZSBpbnRvIHByaW50aW5nLnB5CisgICAgICAgICAgLSBjaGFuZ2Ug
dGhlIHNpZ25hdHVyZXMgb2YgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cyBmb3IgZWFzaWVyCisg
ICAgICAgICAgICB1bml0IHRlc3RpbmcKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSB1cGRhdGUgdy8gY2hhbmdlcyB0
byBydW5fd2Via2l0X3Rlc3RzIGVudHJ5IHBvaW50cy4KKwogMjAxMC0wNC0yNyAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IExldmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10
ZXN0cyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtdGVzdHMKaW5kZXggMmVi
ZTFkYS4uMDcyOGVlMCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdl
YmtpdC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3Rz
CkBAIC0zMyw1ICszMyw0IEBAIGltcG9ydCBzeXMKIGltcG9ydCB3ZWJraXRweS5sYXlvdXRfdGVz
dHMucnVuX3dlYmtpdF90ZXN0cyBhcyBydW5fd2Via2l0X3Rlc3RzCiAKIGlmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6Ci0gICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2Vf
YXJncygpCi0gICAgc3lzLmV4aXQocnVuX3dlYmtpdF90ZXN0cy5tYWluKG9wdGlvbnMsIGFyZ3Mp
KQorICAgIHN5cy5leGl0KHJ1bl93ZWJraXRfdGVzdHMubWFpbigpKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0
ZXJlZF9zdHJlYW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQppbmRleCA5MzBiOWU0Li5hMzNmYzNh
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQpA
QCAtMTExLDcgKzExMSw4IEBAIGNsYXNzIE1ldGVyZWRTdHJlYW06CiAKICAgICAgICAgIyBQcmlu
dCB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiBiYWNrc3BhY2VzIHRvIGVyYXNlIHRoZSBwcmV2aW91
cwogICAgICAgICAjIG1lc3NhZ2UuCi0gICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSgiXGIiICog
bGVuKHNlbGYuX2xhc3RfdXBkYXRlKSkKKyAgICAgICAgaWYgbGVuKHNlbGYuX2xhc3RfdXBkYXRl
KToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSgiXGIiICogbGVuKHNlbGYuX2xhc3Rf
dXBkYXRlKSkKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHN0cikKICAgICAgICAgbnVtX3Jl
bWFpbmluZyA9IGxlbihzZWxmLl9sYXN0X3VwZGF0ZSkgLSBsZW4oc3RyKQogICAgICAgICBpZiBu
dW1fcmVtYWluaW5nID4gMDoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmMTZmZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3ByaW50aW5nLnB5CkBAIC0wLDAgKzEsNDgzIEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJQYWNrYWdlIHRoYXQgaGFuZGxlcyBub24tZGVidWcs
IG5vbi1maWxlIG91dHB1dCBmb3IgcnVuLXdlYmtpdC10ZXN0cy4iIiIKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcGRiCisKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0
YXRpb25zCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnByaW50ZXIiKQorCitUZXN0RXhwZWN0YXRpb25zRmlsZSA9IHRlc3RfZXhwZWN0YXRpb25zLlRl
c3RFeHBlY3RhdGlvbnNGaWxlCisKK05VTV9TTE9XX1RFU1RTX1RPX0xPRyA9IDEwCisKK1BSSU5U
X0RFRkFVTFQgPSAoIm1pc2Msb25lLWxpbmUtcHJvZ3Jlc3Msb25lLWxpbmUtc3VtbWFyeSx1bmV4
cGVjdGVkLCIKKyAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQtcmVzdWx0cyx1cGRhdGVzIikK
K1BSSU5UX0VWRVJZVEhJTkcgPSAoImFjdHVhbCxjb25maWcsZXhwZWN0ZWQsbWlzYyxvbmUtbGlu
ZS1wcm9ncmVzcywiCisgICAgICAgICAgICAgICAgICAgICJvbmUtbGluZS1zdW1tYXJ5LHNsb3dl
c3QsdGltaW5nLHVuZXhwZWN0ZWQsIgorICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZC1y
ZXN1bHRzLHVwZGF0ZXMiKQorCitIRUxQX1BSSU5USU5HID0gIiIiCitPdXRwdXQgZm9yIHJ1bi13
ZWJraXQtdGVzdHMgaXMgY29udHJvbGxlZCBieSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mCit2
YWx1ZXMgcGFzc2VkIHRvIC0tcHJpbnQuICBWYWx1ZXMgZWl0aGVyIGluZmx1ZW5jZSB0aGUgb3Zl
cmFsbCBvdXRwdXQsIG9yCit0aGUgb3V0cHV0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1biwg
ZHVyaW5nIHRoZSBydW4sIG9yIGF0IHRoZSBlbmQ6CisKK092ZXJhbGwgb3B0aW9uczoKKyAgICBu
b3RoaW5nICAgICAgICAgICAgIGRvbid0IHByaW50IGFueXRoaW5nLiBUaGlzIG92ZXJyaWRlcyBl
dmVyeSBvdGhlciBvcHRpb24KKyAgICBldmVyeXRoaW5nICAgICAgICAgIHByaW50IGV2ZXJ5dGhp
bmcgKGV4Y2VwdCB0aGUgdHJhY2UtKiBvcHRpb25zIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRldGFpbGVkLXByb2dyZXNzIG9wdGlvbiwgc2VlIGJlbG93IGZvciB0aGUgZnVsbCBs
aXN0ICkKKyAgICBtaXNjICAgICAgICAgICAgICAgIHByaW50IG1pc2NlbGxhbmVvdXMgdGhpbmdz
IGxpa2UgYmxhbmsgbGluZXMKKworQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuOgorICAgIGNv
bmZpZyAgICAgICAgICAgICAgcHJpbnQgdGhlIHRlc3QgcnVuIGNvbmZpZ3VyYXRpb24KKyAgICBl
eHBlY3RlZCAgICAgICAgICAgIHByaW50IGEgc3VtbWFyeSBvZiB3aGF0IGlzIGV4cGVjdGVkIHRv
IGhhcHBlbgorICAgICAgICAgICAgICAgICAgICAgICAgKCMgcGFzc2VzLCAjIGZhaWx1cmVzLCBl
dGMuKQorCitEdXJpbmcgdGhlIHJ1bjoKKyAgICBkZXRhaWxlZC1wcm9ncmVzcyAgIHByaW50IG9u
ZSBkb3QgcGVyIHRlc3QgY29tcGxldGVkCisgICAgb25lLWxpbmUtcHJvZ3Jlc3MgICBwcmludCBh
IG9uZS1saW5lIHByb2dyZXNzIGJhcgorICAgIHVuZXhwZWN0ZWQgICAgICAgICAgcHJpbnQgYW55
IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyB0aGV5IG9jY3VyCisgICAgdXBkYXRlcyAgICAgICAgICAg
ICBwcmludCB1cGRhdGVzIG9uIHdoaWNoIHN0YWdlIGlzIGV4ZWN1dGluZworICAgIHRyYWNlLWV2
ZXJ5dGhpbmcgICAgcHJpbnQgZGV0YWlsZWQgaW5mbyBvbiBldmVyeSB0ZXN0J3MgcmVzdWx0cwor
ICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2VsaW5lcywgZXhwZWN0YXRpb24sIHRpbWUgaXQg
dG9vayB0byBydW4pLiBJZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyBzcGVjaWZp
ZWQgaXQgd2lsbCBvdmVycmlkZSB0aGUgJyotcHJvZ3Jlc3MnCisgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLCB0aGUgJ3RyYWNlLXVuZXhwZWN0ZWQnIG9wdGlvbiwgYW5kIHRoZQorICAg
ICAgICAgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQnIG9wdGlvbi4KKyAgICB0cmFjZS11bmV4
cGVjdGVkICAgIGxpa2UgJ3RyYWNlLWV2ZXJ5dGhpbmcnLCBidXQgb25seSBmb3IgdGVzdHMgd2l0
aAorICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZCByZXN1bHRzLiBJZiB0aGlzIG9w
dGlvbiBpcyBzcGVjaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIG92ZXJy
aWRlIHRoZSAndW5leHBlY3RlZCcgb3B0aW9uLgorCitBdCB0aGUgZW5kIG9mIHRoZSBydW46Cisg
ICAgYWN0dWFsICAgICAgICAgICAgICBwcmludCBhIHN1bW1hcnkgb2YgdGhlIGFjdHVhbCByZXN1
bHRzCisgICAgc2xvd2VzdCAgICAgICAgICAgICBwcmludCAlKHNsb3dlc3QpZCBzbG93ZXN0IHRl
c3RzIGFuZCB0aGUgdGltZSB0aGV5IHRvb2sKKyAgICB0aW1pbmcgICAgICAgICAgICAgIHByaW50
IHRpbWluZyBzdGF0aXN0aWNzCisgICAgdW5leHBlY3RlZC1yZXN1bHRzICBwcmludCBhIGxpc3Qg
b2YgdGhlIHRlc3RzIHdpdGggdW5leHBlY3RlZCByZXN1bHRzCisgICAgb25lLWxpbmUtc3VtbWFy
eSAgICBwcmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2YgdGhlIHJ1bgorCitOb3RlczoKKyAgICAt
ICdkZXRhaWxlZC1wcm9ncmVzcycgY2FuIG9ubHkgYmUgdXNlZCBpZiBydW5uaW5nIGluIGEgc2lu
Z2xlIHRocmVhZAorICAgICAgKHVzaW5nIC0tY2hpbGQtcHJvY2Vzc2VzPTEpIG9yIGEgc2luZ2xl
IHF1ZXVlIG9mIHRlc3RzICh1c2luZworICAgICAgIC0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFs
bGVsKS4gSWYgdGhlc2UgY29uZGl0aW9ucyBhcmVuJ3QgdHJ1ZSwKKyAgICAgICdvbmUtbGluZS1w
cm9ncmVzcycgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisgICAgLSBJZiBib3RoICdkZXRhaWxlZC1w
cm9ncmVzcycgYW5kICdvbmUtbGluZS1wcm9ncmVzcycgYXJlIHNwZWNpZmllZCAoYW5kCisgICAg
ICBib3RoIGFyZSBwb3NzaWJsZSksICdkZXRhaWxlZC1wcm9ncmVzcycgd2lsbCBiZSB1c2VkLgor
ICAgIC0gSWYgJ25vdGhpbmcnIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIGFsbCBvZiB0aGUg
b3RoZXIgb3B0aW9ucy4KKworLS1wcmludCAnZXZlcnl0aGluZycgaXMgZXF1aXZhbGVudCB0byAt
LXByaW50ICclKGV2ZXJ5dGhpbmcpcycuCisKK1RoZSBkZWZhdWx0IGlzIHRvIC0tcHJpbnQgJyUo
ZGVmYXVsdClzJy4KKyIiIiAlIHsnc2xvd2VzdCc6IE5VTV9TTE9XX1RFU1RTX1RPX0xPRywgJ2V2
ZXJ5dGhpbmcnOiBQUklOVF9FVkVSWVRISU5HLAorICAgICAgICdkZWZhdWx0JzogUFJJTlRfREVG
QVVMVH0KKworCitkZWYgcHJpbnRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgICMg
Tm90ZTogd2UgdXNlIHByaW50X29wdGlvbnMgcmF0aGVyIHRoYW4ganVzdCAncHJpbnQnIGJlY2F1
c2UgcHJpbnQKKyAgICAgICAgIyBpcyBhIHJlc2VydmVkIHdvcmQuCisgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCItLXByaW50IiwgZGVzdD0icHJpbnRfb3B0aW9ucyIsCisgICAgICAgICAg
ICBkZWZhdWx0PVBSSU5UX0RFRkFVTFQsCisgICAgICAgICAgICBoZWxwPSgiY29udHJvbHMgcHJp
bnQgb3V0cHV0IG9mIHRlc3QgcnVuLiAiCisgICAgICAgICAgICAgICAgICAiVXNlIC0taGVscC1w
cmludGluZyBmb3IgbW9yZS4iKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWhl
bHAtcHJpbnRpbmciLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgaGVscD0ic2hv
dyBkZXRhaWxlZCBoZWxwIG9uIGNvbnRyb2xsaW5nIHByaW50IG91dHB1dCIpLAorICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVl
IiwKKyAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9ImluY2x1ZGUgZGVidWctbGV2ZWwg
bG9nZ2luZyIpLAorCisgICAgICAgICMgRklYTUU6IHdlIHNob3VsZCByZW1vdmUgdGhpczsgaXQn
cyBwcmV0dHkgbXVjaCBvYnNvbGV0ZSB3aXRoIHRoZQorICAgICAgICAjIC0tcHJpbnQgdHJhY2Ut
ZXZlcnl0aGluZyBvcHRpb24uCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNvdXJj
ZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgaGVscD0oInNob3cgZXhwZWN0
ZWQgcmVzdWx0IGZpbGUgcGF0aCBmb3IgZWFjaCB0ZXN0ICIKKyAgICAgICAgICAgICAgICAgIihp
bXBsaWVzIC0tdmVyYm9zZSkiKSksCisgICAgXQorCisKK2RlZiBjb25maWd1cmVfbG9nZ2luZyhv
cHRpb25zLCBtZXRlcik6CisgICAgIiIiQ29uZmlndXJlcyB0aGUgbG9nZ2luZyBzeXN0ZW0uIiIi
CisgICAgbG9nX2ZtdCA9ICclKG1lc3NhZ2UpcycKKyAgICBsb2dfZGF0ZWZtdCA9ICcleSVtJWQg
JUg6JU06JVMnCisgICAgbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy52
ZXJib3NlOgorICAgICAgICBsb2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6JShs
aW5lbm8pLTRkICUobGV2ZWxuYW1lKXMgJworICAgICAgICAgICAgICAgICAgICclKG1lc3NhZ2Up
cycpCisgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKKworICAgIGxvZ2dpbmcuYmFz
aWNDb25maWcobGV2ZWw9bG9nX2xldmVsLCBmb3JtYXQ9bG9nX2ZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGVmbXQ9bG9nX2RhdGVmbXQsIHN0cmVhbT1tZXRlcikKKworCitkZWYgcGFy
c2VfcHJpbnRfb3B0aW9ucyhwcmludF9vcHRpb25zLCBjaGlsZF9wcm9jZXNzZXMsIGlzX2Z1bGx5
X3BhcmFsbGVsKToKKyAgICAiIiJQYXJzZSB0aGUgb3B0aW9ucyBwcm92aWRlZCB0byAtLXByaW50
IGFuZCBkZWR1cCBhbmQgcmFuayB0aGVtLgorCisgICAgUmV0dXJucworICAgICAgICBhIHNldCgp
IG9mIHN3aXRjaGVzIHRoYXQgZ292ZXJuIGhvdyBsb2dnaW5nIGlzIGRvbmUKKworICAgICIiIgor
ICAgIHN3aXRjaGVzID0gc2V0KHByaW50X29wdGlvbnMuc3BsaXQoJywnKSkKKworICAgIGlmICdu
b3RoaW5nJyBpbiBzd2l0Y2hlczoKKyAgICAgICAgcmV0dXJuIHNldCgpCisKKyAgICBpZiAoY2hp
bGRfcHJvY2Vzc2VzICE9IDEgYW5kIG5vdCBpc19mdWxseV9wYXJhbGxlbCBhbmQKKyAgICAgICAg
J2RldGFpbGVkLXByb2dyZXNzJyBpbiBzd2l0Y2hlcyk6CisgICAgICAgIF9sb2cud2FybigiQ2Fu
IG9ubHkgcHJpbnQgJ2RldGFpbGVkLXByb2dyZXNzJyBpZiBydW5uaW5nICIKKyAgICAgICAgICAg
ICAgICAgICJ3aXRoIC0tY2hpbGQtcHJvY2Vzc2VzPTEgb3IgIgorICAgICAgICAgICAgICAgICAg
IndpdGggLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwuICIKKyAgICAgICAgICAgICAgICAg
ICJVc2luZyAnb25lLWxpbmUtcHJvZ3Jlc3MnIGluc3RlYWQuIikKKyAgICAgICAgc3dpdGNoZXMu
ZGlzY2FyZCgnZGV0YWlsZWQtcHJvZ3Jlc3MnKQorICAgICAgICBzd2l0Y2hlcy5hZGQoJ29uZS1s
aW5lLXByb2dyZXNzJykKKworICAgIGlmICdldmVyeXRoaW5nJyBpbiBzd2l0Y2hlczoKKyAgICAg
ICAgc3dpdGNoZXMuZGlzY2FyZCgnZXZlcnl0aGluZycpCisgICAgICAgIHN3aXRjaGVzLnVwZGF0
ZShzZXQoUFJJTlRfRVZFUllUSElORy5zcGxpdCgnLCcpKSkKKworICAgIGlmICdkZXRhaWxlZC1w
cm9ncmVzcycgaW4gc3dpdGNoZXM6CisgICAgICAgIHN3aXRjaGVzLmRpc2NhcmQoJ29uZS1saW5l
LXByb2dyZXNzJykKKworICAgIGlmICd0cmFjZS1ldmVyeXRoaW5nJyBpbiBzd2l0Y2hlczoKKyAg
ICAgICAgc3dpdGNoZXMuZGlzY2FyZCgnZGV0YWlsZWQtcHJvZ3Jlc3MnKQorICAgICAgICBzd2l0
Y2hlcy5kaXNjYXJkKCdvbmUtbGluZS1wcm9ncmVzcycpCisgICAgICAgIHN3aXRjaGVzLmRpc2Nh
cmQoJ3RyYWNlLXVuZXhwZWN0ZWQnKQorICAgICAgICBzd2l0Y2hlcy5kaXNjYXJkKCd1bmV4cGVj
dGVkJykKKworICAgIGlmICd0cmFjZS11bmV4cGVjdGVkJyBpbiBzd2l0Y2hlczoKKyAgICAgICAg
c3dpdGNoZXMuZGlzY2FyZCgndW5leHBlY3RlZCcpCisKKyAgICByZXR1cm4gc3dpdGNoZXMKKwor
CitjbGFzcyBQcmludGVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgaGFuZGxpbmcgYWxsIG5vbi1k
ZWJ1Zy1sb2dnaW5nIHByaW50aW5nIGRvbmUgYnkgcnVuLXdlYmtpdC10ZXN0cy4KKworICAgIFBy
aW50aW5nIGZyb20gcnVuLXdlYmtpdC10ZXN0cyBmYWxscyBpbnRvIHR3byBidWNrZXRzOiBnZW5l
cmFsIG9yCisgICAgcmVndWxhciBvdXRwdXQgdGhhdCBpcyByZWFkIG9ubHkgYnkgaHVtYW5zIGFu
ZCBjYW4gYmUgY2hhbmdlZCBhdCBhbnkKKyAgICB0aW1lLCBhbmQgb3V0cHV0IHRoYXQgaXMgcGFy
c2VkIGJ5IGJ1aWxkYm90cyAoYW5kIGh1bWFucykgYW5kIGhlbmNlCisgICAgbXVzdCBiZSBjaGFu
Z2VkIG1vcmUgY2FyZWZ1bGx5IGFuZCBpbiBjb29yZGluYXRpb24gd2l0aCB0aGUgYnVpbGRib3QK
KyAgICBwYXJzaW5nIGNvZGUgKGluIGNocm9taXVtLm9yZydzIGJ1aWxkYm90L21hc3Rlci5jaHJv
bWl1bS9zY3JpcHRzL21hc3Rlci8KKyAgICBsb2dfcGFyc2VyL3dlYmtpdF90ZXN0X2NvbW1hbmQu
cHkgc2NyaXB0KS4KKworICAgIEJ5IGRlZmF1bHQgdGhlIGJ1aWxkYm90LXBhcnNlZCBjb2RlIGdl
dHMgbG9nZ2VkIHRvIHN0ZG91dCwgYW5kIHJlZ3VsYXIKKyAgICBvdXRwdXQgZ2V0cyBsb2dnZWQg
dG8gc3RkZXJyLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCByZWd1
bGFyX291dHB1dCwgYnVpbGRib3Rfb3V0cHV0LAorICAgICAgICAgICAgICAgICBjaGlsZF9wcm9j
ZXNzZXMsIGlzX2Z1bGx5X3BhcmFsbGVsKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3MKKyAg
ICAgICAgICBwb3J0ICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgcm91
dGluZXMKKyAgICAgICAgICBvcHRpb25zICAgICAgICAgICAgT3B0aW9uUGFyc2VyIG9iamVjdCB3
aXRoIGNvbW1hbmQgbGluZSBzZXR0aW5ncworICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0ICAgICBz
dHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIG9ubHkgZm9yIGh1bWFucworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbgorICAgICAgICAgIGJ1aWxkYm90
X291dHB1dCAgICBzdHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIHRvIGJlIHJlYWQgYnkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkYm90cyAoYW5kIGh1bWFucykg
c2hvdWxkIGJlIHdyaXR0ZW4KKyAgICAgICAgICBjaGlsZF9wcm9jZXNzZXMgICAgbnVtYmVyIG9m
IHBhcmFsbGVsIHRocmVhZHMgcnVubmluZyAodXN1YWxseQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250cm9sbGVkIGJ5IC0tY2hpbGQtcHJvY2Vzc2VzKQorICAgICAgICAgIGlzX2Z1
bGx5X3BhcmFsbGVsICBhcmUgdGhlIHRlc3RzIHJ1bm5pbmcgaW4gYSBzaW5nbGUgcXVldWUsIG9y
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNoYXJkcyAodXN1YWxseSBjb250cm9s
bGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZXhwZXJpbWVudGFsLWZ1bGx5
LXBhcmFsbGVsKQorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgbGFzdCB0d28gYXJncyBhcmUgc2Vw
YXJhdGUgcmF0aGVyIHRoYW4gYnVuZGxlZCBpbnRvCisgICAgICAgIHRoZSBvcHRpb25zIHN0cnVj
dHVyZSBzbyB0aGF0IHRoaXMgb2JqZWN0IGRvZXMgbm90IGFzc3VtZSBhbnkgZmxhZ3MKKyAgICAg
ICAgc2V0IGluIG9wdGlvbnMgdGhhdCB3ZXJlbid0IHJldHVybmVkIGZyb20gbG9nZ2luZ19vcHRp
b25zKCksIGFib3ZlLgorICAgICAgICBUaGUgdHdvIGFyZSB1c2VkIHRvIGRldGVybWluZSB3aGV0
aGVyIG9yIG5vdCB3ZSBjYW4gc2Vuc2libHkgdXNlCisgICAgICAgIHRoZSAnZGV0YWlsZWQtcHJv
Z3Jlc3MnIG9wdGlvbiwgb3IgY2FuIG9ubHkgdXNlICdvbmUtbGluZS1wcm9ncmVzcycuCisgICAg
ICAgICIiIgorICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0gPSBidWlsZGJvdF9vdXRwdXQK
KyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBv
cnQKKyAgICAgICAgc2VsZi5fc3RyZWFtID0gcmVndWxhcl9vdXRwdXQKKworICAgICAgICAjIFRo
ZXNlIGFyZSB1c2VkIGZvciAtLXByaW50IGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0YXR1
cyBieQorICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBO
b25lCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIKKyAgICAgICAgc2Vs
Zi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKKworICAgICAgICBzZWxmLl9tZXRlciA9IG1ldGVy
ZWRfc3RyZWFtLk1ldGVyZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9vdXRwdXQpCisgICAg
ICAgIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYuX29wdGlvbnMsIHNlbGYuX21ldGVyKQorCisgICAg
ICAgIHNlbGYuc3dpdGNoZXMgPSBwYXJzZV9wcmludF9vcHRpb25zKG9wdGlvbnMucHJpbnRfb3B0
aW9ucywKKyAgICAgICAgICAgIGNoaWxkX3Byb2Nlc3NlcywgaXNfZnVsbHlfcGFyYWxsZWwpCisK
KyAgICAjIFRoZXNlIHR3byByb3V0aW5lcyBqdXN0IGhpZGUgdGhlIGltcGxtZW50YXRpb24gb2Yg
dGhlIHN3aXRjaGVzLgorICAgIGRlZiBkaXNhYmxlZChzZWxmLCBvcHRpb24pOgorICAgICAgICBy
ZXR1cm4gbm90IG9wdGlvbiBpbiBzZWxmLnN3aXRjaGVzCisKKyAgICBkZWYgZW5hYmxlZChzZWxm
LCBvcHRpb24pOgorICAgICAgICByZXR1cm4gb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKKworICAg
IGRlZiBoZWxwX3ByaW50aW5nKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZShIRUxQX1BSSU5U
SU5HKQorCisgICAgZGVmIHByaW50X2FjdHVhbChzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxm
LmRpc2FibGVkKCdhY3R1YWwnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9i
dWlsZGJvdF9zdHJlYW0ud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIHByaW50X2NvbmZp
ZyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2NvbmZpZycpCisKKyAgICBk
ZWYgcHJpbnRfZXhwZWN0ZWQoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53cml0ZShtc2csICdl
eHBlY3RlZCcpCisKKyAgICBkZWYgcHJpbnRfdGltaW5nKHNlbGYsIG1zZyk6CisgICAgICAgIHNl
bGYud3JpdGUobXNnLCAndGltaW5nJykKKworICAgIGRlZiBwcmludF9vbmVfbGluZV9zdW1tYXJ5
KHNlbGYsIHRvdGFsLCBleHBlY3RlZCk6CisgICAgICAgICIiIlByaW50IGEgb25lLWxpbmUgc3Vt
bWFyeSBvZiB0aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
ICAgdG90YWw6IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4KKyAgICAgICAgICBleHBlY3RlZDog
bnVtYmVyIG9mIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYu
ZGlzYWJsZWQoJ29uZS1saW5lLXN1bW1hcnknKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIHVuZXhwZWN0ZWQgPSB0b3RhbCAtIGV4cGVjdGVkCisgICAgICAgIGlmIHVuZXhwZWN0ZWQg
PT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJBbGwgJWQgdGVzdHMgcmFuIGFz
IGV4cGVjdGVkLlxuIiAlIGV4cGVjdGVkKQorICAgICAgICBlbGlmIGV4cGVjdGVkID09IDE6Cisg
ICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiXG4xIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAl
ZCBkaWRuJ3Q6XG5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3Rl
ZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbiVkIHRl
c3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OlxuXG4iICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChleHBlY3RlZCwgdW5leHBlY3RlZCkpCisKKyAgICBkZWYgcHJpbnRfdGVz
dF9yZXN1bHQoc2VsZiwgcmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cik6CisgICAg
ICAgICIiIlByaW50IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSAtLXBy
aW50LiIiIgorICAgICAgICBpZiAoc2VsZi5lbmFibGVkKCd0cmFjZS1ldmVyeXRoaW5nJykgb3IK
KyAgICAgICAgICAgIHNlbGYuZW5hYmxlZCgndHJhY2UtdW5leHBlY3RlZCcpIGFuZCBub3QgZXhw
ZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF90cmFjZShyZXN1bHQsIGV4cF9z
dHIsIGdvdF9zdHIpCisgICAgICAgIGVsaWYgKG5vdCBleHBlY3RlZCBhbmQgc2VsZi5lbmFibGVk
KCd1bmV4cGVjdGVkJykgYW5kCisgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZWQoJ2RldGFpbGVk
LXByb2dyZXNzJykpOgorICAgICAgICAgICAgIyBOb3RlOiAnZGV0YWlsZWQtcHJvZ3Jlc3MnIGhh
bmRsZXMgdW5leHBlY3RlZCByZXN1bHRzIGludGVybmFsbHksCisgICAgICAgICAgICAjIHNvIHdl
IHNraXAgaXQgaGVyZS4KKyAgICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9y
ZXN1bHQocmVzdWx0KQorCisgICAgZGVmIF9wcmludF90ZXN0X3RyYWNlKHNlbGYsIHJlc3VsdCwg
ZXhwX3N0ciwgZ290X3N0cik6CisgICAgICAgICIiIlByaW50IGRldGFpbGVkIHJlc3VsdHMgb2Yg
YSB0ZXN0ICh0cmlnZ2VyZWQgYnkgLS1wcmludCB0cmFjZS0qKS4KKyAgICAgICAgRm9yIGVhY2gg
dGVzdCwgcHJpbnQ6CisgICAgICAgICAgIC0gbG9jYXRpb24gb2YgdGhlIGV4cGVjdGVkIGJhc2Vs
aW5lcworICAgICAgICAgICAtIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgLSBhY3R1YWwg
cmVzdWx0CisgICAgICAgICAgIC0gdGltaW5nIGluZm8KKyAgICAgICAgIiIiCisgICAgICAgIGZp
bGVuYW1lID0gcmVzdWx0LmZpbGVuYW1lCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5fd3JpdGUoJ3Ry
YWNlOiAlc1xuJyAlIHRlc3RfbmFtZSkKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgdHh0OiAlc1xu
JyAlCisgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
CisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmls
ZW5hbWUsICcudHh0JykpKQorICAgICAgICBwbmdfZmlsZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRf
ZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocG5n
X2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJyAgcG5nOiAlc1xuJyAlCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5h
bWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJyAgcG5nOiA8bm9u
ZT5cbicpCisgICAgICAgIHNlbGYuX3dyaXRlKCcgIGV4cDogJXNcbicgJSBleHBfc3RyKQorICAg
ICAgICBzZWxmLl93cml0ZSgnICBnb3Q6ICVzXG4nICUgZ290X3N0cikKKyAgICAgICAgc2VsZi5f
d3JpdGUoJyB0b29rOiAlLS4zZlxuJyAlIHJlc3VsdC50ZXN0X3J1bl90aW1lKQorICAgICAgICBz
ZWxmLl93cml0ZSgnXG4nKQorCisgICAgZGVmIF9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0
KHNlbGYsIHJlc3VsdCk6CisgICAgICAgICIiIlByaW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0IHJl
c3VsdCBsaW5lLiIiIgorICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNU
QVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdC50eXBlXVswXQorICAgICAgICBzZWxmLndyaXRlKCIg
ICVzIC0+IHVuZXhwZWN0ZWQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHJlc3VsdC5maWxlbmFtZSksCisgICAgICAgICAgICAgICAg
ICAgIGRlc2MpLCAidW5leHBlY3RlZCIpCisKKyAgICBkZWYgcHJpbnRfcHJvZ3Jlc3Moc2VsZiwg
cmVzdWx0X3N1bW1hcnksIHJldHJ5aW5nLCB0ZXN0X2xpc3QpOgorICAgICAgICAiIiJQcmludCBw
cm9ncmVzcyB0aHJvdWdoIHRoZSB0ZXN0cyBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJpbnQuIiIiCisg
ICAgICAgIGlmIHNlbGYuZW5hYmxlZCgnZGV0YWlsZWQtcHJvZ3Jlc3MnKToKKyAgICAgICAgICAg
IHNlbGYuX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2xpc3Qp
CisgICAgICAgIGVsaWYgc2VsZi5lbmFibGVkKCdvbmUtbGluZS1wcm9ncmVzcycpOgorICAgICAg
ICAgICAgc2VsZi5fcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnksIHJldHJ5
aW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgcmVz
dWx0X3N1bW1hcnkucmVtYWluaW5nID09IDA6CisgICAgICAgICAgICBzZWxmLl9tZXRlci51cGRh
dGUoJycpCisKKyAgICBkZWYgX3ByaW50X29uZV9saW5lX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9z
dW1tYXJ5LCByZXRyeWluZyk6CisgICAgICAgICIiIkRpc3BsYXlzIHRoZSBwcm9ncmVzcyB0aHJv
dWdoIHRoZSB0ZXN0IHJ1bi4iIiIKKyAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAqIChy
ZXN1bHRfc3VtbWFyeS5leHBlY3RlZCArCisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4
cGVjdGVkKSAvIHJlc3VsdF9zdW1tYXJ5LnRvdGFsCisgICAgICAgIGFjdGlvbiA9ICJUZXN0aW5n
IgorICAgICAgICBpZiByZXRyeWluZzoKKyAgICAgICAgICAgIGFjdGlvbiA9ICJSZXRyeWluZyIK
KyAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzICglZCUlKTogJWQgcmFuIGFzIGV4cGVj
dGVkLCAlZCBkaWRuJ3QsIgorICAgICAgICAgICAgIiAlZCBsZWZ0IiAlIChhY3Rpb24sIHBlcmNl
bnRfY29tcGxldGUsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLAorICAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5LnVuZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykpCisKKyAgICBk
ZWYgX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2xp
c3QpOgorICAgICAgICAiIiJEaXNwbGF5IGRldGFpbGVkIHByb2dyZXNzIG91dHB1dCB3aGVyZSB3
ZSBwcmludCB0aGUgZGlyZWN0b3J5IG5hbWUKKyAgICAgICAgYW5kIG9uZSBkb3QgZm9yIGVhY2gg
Y29tcGxldGVkIHRlc3QuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5CisgICAgICAgICItLWxvZyBkZXRh
aWxlZC1wcm9ncmVzcyIuIiIiCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIg
PT0gbGVuKHRlc3RfbGlzdCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXh0X3Rl
c3QgPSB0ZXN0X2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KKyAgICAgICAgbmV4dF9k
aXIgPSBvcy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudF9wcm9ncmVz
c19zdHIgPT0gIiI6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIl
czogIiAlIChuZXh0X2RpcikKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gbmV4dF9k
aXIKKworICAgICAgICB3aGlsZSBuZXh0X3Rlc3QgaW4gcmVzdWx0X3N1bW1hcnkucmVzdWx0czoK
KyAgICAgICAgICAgIGlmIG5leHRfZGlyICE9IHNlbGYuX2N1cnJlbnRfZGlyOgorICAgICAgICAg
ICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIlc1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dyZXNz
X3N0cikpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6
IC4iICUgKG5leHRfZGlyKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gbmV4
dF9kaXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9w
cm9ncmVzc19zdHIgKz0gIi4iCisKKyAgICAgICAgICAgIGlmIChuZXh0X3Rlc3QgaW4gcmVzdWx0
X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuZW5h
YmxlZCgndW5leHBlY3RlZCcpKToKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgi
JXNcbiIgJSBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikKKyAgICAgICAgICAgICAgICB0ZXN0
X3Jlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbbmV4dF90ZXN0XQorICAgICAgICAgICAg
ICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQodGVzdF9yZXN1bHQpCisgICAg
ICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSBzZWxmLl9j
dXJyZW50X2RpcgorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyICs9IDEK
KyAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPT0gbGVuKHRlc3RfbGlz
dCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbmV4dF90ZXN0ID0gdGVz
dF9saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAgICAgICAgICBuZXh0X2RpciA9
IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKworICAgICAgICBpZiByZXN1bHRfc3VtbWFyeS5yZW1h
aW5pbmc6CisgICAgICAgICAgICByZW1haW5fc3RyID0gIiAoJWQpIiAlIChyZXN1bHRfc3VtbWFy
eS5yZW1haW5pbmcpCisgICAgICAgICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXMlcyIgJSAo
c2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtYWluX3N0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz
ZWxmLl9tZXRlci5wcm9ncmVzcygiJXMiICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkK
KworICAgIGRlZiBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1
bHRzKToKKyAgICAgICAgIiIiUHJpbnRzIGEgbGlzdCBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHRz
IHRvIHRoZSBidWlsZGJvdCBzdHJlYW0uIiIiCisgICAgICAgIGlmIHNlbGYuZGlzYWJsZWQoJ3Vu
ZXhwZWN0ZWQtcmVzdWx0cycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGFzc2Vz
ID0ge30KKyAgICAgICAgZmxha3kgPSB7fQorICAgICAgICByZWdyZXNzaW9ucyA9IHt9CisKKyAg
ICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3BsaXQo
IiAiKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0KCIg
IikKKyAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKKyAgICAgICAgICAgICAgICBp
ZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rf
b2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxpZiAnVElNRU9V
VCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0
cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhw
ZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWwsIGJ1dCBwYXNzZWQn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAg
ICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAgICAgICAgICMgV2UgZ3JvdXAg
Zmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgorICAgICAgICAg
ICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBdLCB0ZXN0KQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocmVn
cmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisgICAgICAgIGlmIGxlbihwYXNz
ZXMpIG9yIGxlbihmbGFreSkgb3IgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIHNlbGYu
X2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihwYXNzZXMpOgor
ICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiJXM6ICglZClcbiIgJSAoa2V5
LCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAgICAg
ICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRi
b3Rfc3RyZWFtLndyaXRlKCIgICVzXG4iICUgdGVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLl9i
dWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0
cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbihmbGFreSk6CisgICAgICAgICAgICBk
ZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElP
TlMKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5Lml0ZXJpdGVtcygpOgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1tr
ZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUo
IlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAoJWQpXG4iCisgICAgICAgICAgICAgICAgICAgICUg
KGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0
ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ11bdGVzdF0K
KyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0WydhY3R1YWwnXS5zcGxpdCgiICIp
CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0WydleHBlY3RlZCddLnNwbGl0
KCIgIikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUu
RVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgICAgICBuZXdfZXhwZWN0
YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXMiICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25zX2xp
c3QpKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikK
KyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAg
IGlmIGxlbihyZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBUZXN0RXhw
ZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKKyAgICAgICAgICAgIGZvciBr
ZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KKyAg
ICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoCisgICAgICAgICAgICAg
ICAgICAgICJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICglZClcbiIgJSAoCisgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAgICAg
ICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0
czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVz
ID0gJXNcbiIgJSAodGVzdCwga2V5KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9z
dHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0
ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFu
ZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJl
YW0ud3JpdGUoIiVzXG4iICUgIi0iICogNzgpCisKKyAgICBkZWYgcHJpbnRfdXBkYXRlKHNlbGYs
IG1zZyk6CisgICAgICAgIGlmIHNlbGYuZGlzYWJsZWQoJ3VwZGF0ZXMnKToKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUobXNnKQorCisgICAgZGVmIHdyaXRl
KHNlbGYsIG1zZywgb3B0aW9uPSJtaXNjIik6CisgICAgICAgIGlmIHNlbGYuZGlzYWJsZWQob3B0
aW9uKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl93cml0ZSgiJXNcbiIgJSBt
c2cpCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuX21ldGVyLnVw
ZGF0ZShtc2cpCisKKyMKKyMgVXRpbGl0eSByb3V0aW5lcyB1c2VkIGJ5IHRoZSBDb250cm9sbGVy
IGNsYXNzCisjCisKKworZGVmIF9hZGRfdG9fZGljdF9vZl9saXN0cyhkaWN0LCBrZXksIHZhbHVl
KToKKyAgICBkaWN0LnNldGRlZmF1bHQoa2V5LCBbXSkuYXBwZW5kKHZhbHVlKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcHJpbnRpbmdfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzcwMzRlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJp
bnRpbmdfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw0ODUgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisj
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgcHJpbnRpbmcucHkuIiIiCisKK2lt
cG9ydCBvcworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgcGRiCitpbXBvcnQgc3lzCitpbXBvcnQg
dW5pdHRlc3QKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGlt
cG9ydCBwb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBv
cnQgcHJpbnRpbmcKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKKworCitjbGFzcyBBcnJh
eVN0cmVhbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5f
Y29udGVudHMgPSBbXQorCisgICAgZGVmIHdyaXRlKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYu
X2NvbnRlbnRzLmFwcGVuZChtc2cpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fY29udGVudHMKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5f
Y29udGVudHMgPSBbXQorCisgICAgZGVmIGVtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gKGxl
bihzZWxmLl9jb250ZW50cykgPT0gMCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAg
cGFzcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxBcnJheVN0
cmVhbTogJyArIHN0cihzZWxmLl9jb250ZW50cykgKyAnPicKKworCitkZWYgZ2V0X29wdGlvbnMo
YXJncyk6CisgICAgcHJpbnRfb3B0aW9ucyA9IHByaW50aW5nLnByaW50X29wdGlvbnMoKQorICAg
IG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9cHJpbnRf
b3B0aW9ucykKKyAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKwor
ZGVmIGdldF9yZXN1bHQoZmlsZW5hbWUsIHJlc3VsdF90eXBlPXRlc3RfZXhwZWN0YXRpb25zLlBB
U1MsIHJ1bl90aW1lPTApOgorICAgIGZhaWx1cmVzID0gW10KKyAgICBpZiByZXN1bHRfdHlwZSA9
PSB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOgorICAgICAgICBmYWlsdXJlcyA9IFt0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVUaW1lb3V0KCldCisgICAgZWxpZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4
cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAgZmFpbHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWls
dXJlQ3Jhc2goKV0KKyAgICByZXR1cm4gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFJlc3Vs
dChmaWxlbmFtZSwgZmFpbHVyZXMsIHJ1bl90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzPTAp
CisKKworZGVmIGdldF9yZXN1bHRfc3VtbWFyeShwb3J0X29iaiwgdGVzdF9maWxlcywgZXhwZWN0
YXRpb25zX3N0cik6CisgICAgZXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4
cGVjdGF0aW9ucygKKyAgICAgICAgcG9ydF9vYmosIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19z
dHIsCisgICAgICAgIHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLCBpc19kZWJ1Z19tb2Rl
PUZhbHNlLAorICAgICAgICBpc19saW50X21vZGU9RmFsc2UsIHRlc3RzX2FyZV9wcmVzZW50PUZh
bHNlKQorCisgICAgcnMgPSBydW5fd2Via2l0X3Rlc3RzLlJlc3VsdFN1bW1hcnkoZXhwZWN0YXRp
b25zLCB0ZXN0X2ZpbGVzKQorICAgIHJldHVybiBycywgZXhwZWN0YXRpb25zCisKKworY2xhc3Mg
VGVzdFV0aWxpdHlGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Nv
bmZpZ3VyZV9sb2dnaW5nKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3Vy
ZSBvdXQgaG93IHRvIHJlc2V0IHRoZSBiYXNpYyBsb2dnZXIuCisgICAgICAgICMgRklYTUU6IElm
IG90aGVyIHRlc3RpbmcgY2xhc3NlcyBjYWxsIGxvZ2dpbmcuYmFzaWNDb25maWcoKSB0aGVuCisg
ICAgICAgICMgRklYTUU6IHRoZXNlIGNhbGxzIGJlY29tZSBuby1vcHMgYW5kIHdlIGNhbid0IGNv
bnRyb2wgdGhlCisgICAgICAgICMgRklYTUU6IGNvbmZpZ3VyYXRpb24gdG8gdGVzdCB0aGluZ3Mg
cHJvcGVybHkuCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbXSkKKyAgICAg
ICAgc3RyZWFtID0gQXJyYXlTdHJlYW0oKQorICAgICAgICBwcmludGluZy5jb25maWd1cmVfbG9n
Z2luZyhvcHRpb25zLCBzdHJlYW0pCisgICAgICAgIGxvZ2dpbmcuaW5mbygidGhpcyBzaG91bGQg
YmUgbG9nZ2VkIikKKyAgICAgICAgIyBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQor
CisgICAgICAgIHN0cmVhbS5yZXNldCgpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoaXMgc2hv
dWxkIG5vdCBiZSBsb2dnZWQiKQorICAgICAgICAjIHNlbGYuYXNzZXJ0VHJ1ZShzdHJlYW0uZW1w
dHkoKSkKKworICAgICAgICBzdHJlYW0ucmVzZXQoKQorICAgICAgICBvcHRpb25zLCBhcmdzID0g
Z2V0X29wdGlvbnMoWyctLXZlcmJvc2UnXSkKKyAgICAgICAgcHJpbnRpbmcuY29uZmlndXJlX2xv
Z2dpbmcob3B0aW9ucywgc3RyZWFtKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aGlzIHNob3Vs
ZCBiZSBsb2dnZWQiKQorICAgICAgICAjIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLmVtcHR5KCkp
CisKKyAgICBkZWYgdGVzdF9wcmludF9vcHRpb25zKHNlbGYpOgorICAgICAgICBvcHRpb25zLCBh
cmdzID0gZ2V0X29wdGlvbnMoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zIGlz
IG5vdCBOb25lKQorCisKK2NsYXNzICBUZXN0cHJpbnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIGdldF9wcmludGVyKHNlbGYsIGFyZ3M9Tm9uZSwgc2luZ2xlX3RocmVhZGVkPUZhbHNl
LAorICAgICAgICAgICAgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsPUZhbHNlKToKKyAgICAgICAg
cHJpbnRpbmdfb3B0aW9ucyA9IHByaW50aW5nLnByaW50X29wdGlvbnMoKQorICAgICAgICBvcHRp
b25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PXByaW50aW5nX29w
dGlvbnMpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3Mo
YXJncykKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9ucykKKyAg
ICAgICAgbnByb2MgPSAyCisgICAgICAgIGlmIHNpbmdsZV90aHJlYWRlZDoKKyAgICAgICAgICAg
IG5wcm9jID0gMQorCisgICAgICAgIHJlZ3VsYXJfb3V0cHV0ID0gQXJyYXlTdHJlYW0oKQorICAg
ICAgICBidWlsZGJvdF9vdXRwdXQgPSBBcnJheVN0cmVhbSgpCisgICAgICAgIHByaW50ZXIgPSBw
cmludGluZy5QcmludGVyKHNlbGYuX3BvcnQsIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGJvdF9vdXRwdXQsIHNpbmdsZV90
aHJlYWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZnVsbHlfcGFy
YWxsZWwpCisgICAgICAgIHJldHVybiBwcmludGVyLCByZWd1bGFyX291dHB1dCwgYnVpbGRib3Rf
b3V0cHV0CisKKyAgICBkZWYgdGVzdF9oZWxwX3ByaW50ZXIoc2VsZik6CisgICAgICAgICMgSGVy
ZSBhbmQgYmVsb3cgd2UnbGwgY2FsbCB0aGUgInJlZ3VsYXIiIHByaW50ZXIgZXJyIGFuZCB0aGUK
KyAgICAgICAgIyBidWlsZGJvdCBwcmludGVyIG91dDsgdGhpcyBjb3JyZXNwb25kcyB0byBob3cg
dGhpbmdzIHJ1biBvbiB0aGUKKyAgICAgICAgIyBib3RzIHdpdGggc3RkZXJyIGFuZCBzdGRvdXQu
CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigpCisKKyAgICAg
ICAgIyBUaGlzIHJvdXRpbmUgc2hvdWxkIHByaW50IHNvbWV0aGluZyB0byBzdGRvdXQuIHRlc3Rp
bmcgd2hhdCBpdCBpcworICAgICAgICAjIGlzIGtpbmQgb2YgcG9pbnRsZXNzLgorICAgICAgICBw
cmludGVyLmhlbHBfcHJpbnRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgZG9f
c3dpdGNoX3Rlc3RzKHNlbGYsIG1ldGhvZF9uYW1lLCBzd2l0Y2gsIHRvX2J1aWxkYm90LAorICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0naGVsbG8nLCBleHBfZXJyPU5vbmUsIGV4cF9i
b3Q9Tm9uZSk6CisgICAgICAgIGRlZiBkb19oZWxwZXIobWV0aG9kX25hbWUsIHN3aXRjaCwgbWVz
c2FnZSwgZXhwX2VyciwgZXhwX2JvdCk6CisgICAgICAgICAgICBwcmludGVyLCBlcnIsIGJvdCA9
IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50Jywgc3dpdGNoXSkKKyAgICAgICAgICAgIGdldGF0
dHIocHJpbnRlciwgbWV0aG9kX25hbWUpKG1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGVyci5nZXQoKSwgZXhwX2VycikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Ym90LmdldCgpLCBleHBfYm90KQorCisgICAgICAgIGlmIHRvX2J1aWxkYm90OgorICAgICAgICAg
ICAgaWYgZXhwX2VyciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGV4cF9lcnIgPSBbXQorICAg
ICAgICAgICAgaWYgZXhwX2JvdCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGV4cF9ib3QgPSBb
bWVzc2FnZSArICdcbiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBleHBfZXJyIGlz
IE5vbmU6CisgICAgICAgICAgICAgICAgZXhwX2VyciA9IFttZXNzYWdlICsgJ1xuJ10KKyAgICAg
ICAgICAgIGlmIGV4cF9ib3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleHBfYm90ID0gW10K
KyAgICAgICAgZG9faGVscGVyKG1ldGhvZF9uYW1lLCAnbm90aGluZycsICdoZWxsbycsIFtdLCBb
XSkKKyAgICAgICAgZG9faGVscGVyKG1ldGhvZF9uYW1lLCBzd2l0Y2gsICdoZWxsbycsIGV4cF9l
cnIsIGV4cF9ib3QpCisgICAgICAgIGRvX2hlbHBlcihtZXRob2RfbmFtZSwgJ2V2ZXJ5dGhpbmcn
LCAnaGVsbG8nLCBleHBfZXJyLCBleHBfYm90KQorCisgICAgZGVmIHRlc3RfcHJpbnRfYWN0dWFs
KHNlbGYpOgorICAgICAgICAjIEFjdHVhbCByZXN1bHRzIG5lZWQgdG8gYmUgbG9nZ2VkIHRvIHRo
ZSBidWlsZGJvdCdzIHN0cmVhbS4KKyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50
X2FjdHVhbCcsICdhY3R1YWwnLCB0b19idWlsZGJvdD1UcnVlKQorCisgICAgZGVmIHRlc3RfcHJp
bnRfYWN0dWFsX2J1aWxkYm90KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQgdGhl
IGZvcm1hdCBvZiB0aGUgYWN0dWFsIHJlc3VsdHMgbWF0Y2hlcyB3aGF0IHRoZQorICAgICAgICAj
IGJ1aWxkYm90IGlzIGV4cGVjdGluZy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcHJp
bnRfY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfY29u
ZmlnJywgJ2NvbmZpZycsIHRvX2J1aWxkYm90PUZhbHNlKQorCisgICAgZGVmIHRlc3RfcHJpbnRf
ZXhwZWN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuZG9fc3dpdGNoX3Rlc3RzKCdwcmludF9leHBl
Y3RlZCcsICdleHBlY3RlZCcsIHRvX2J1aWxkYm90PUZhbHNlKQorCisgICAgZGVmIHRlc3RfcHJp
bnRfdGltaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfdGlt
aW5nJywgJ3RpbWluZycsIHRvX2J1aWxkYm90PUZhbHNlKQorCisgICAgZGVmIHRlc3RfcHJpbnRf
dXBkYXRlKHNlbGYpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBj
YXJyaWFnZSByZXR1cm4gaGVyZTsgdXBkYXRlcygpCisgICAgICAgICMgYXJlIG1lYW50IHRvIGJl
IG92ZXJ3cml0dGVuLgorICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfdXBkYXRl
JywgJ3VwZGF0ZXMnLCB0b19idWlsZGJvdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZT0naGVsbG8nLCBleHBfZXJyPVsnaGVsbG8nXSkKKworICAgIGRlZiB0ZXN0
X3ByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZik6CisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0
ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBwcmlu
dGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJp
bnRlcihbJy0tcHJpbnQnLCAnb25lLWxpbmUtc3VtbWFyeSddKQorICAgICAgICBwcmludGVyLnBy
aW50X29uZV9saW5lX3N1bW1hcnkoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJy
LmdldCgpLCBbIkFsbCAxIHRlc3RzIHJhbiBhcyBleHBlY3RlZC5cbiJdKQorCisgICAgICAgIHBy
aW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGlu
ZyddKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMSwgMSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLCBbIkFsbCAxIHRlc3RzIHJhbiBhcyBleHBl
Y3RlZC5cbiJdKQorCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRf
b25lX2xpbmVfc3VtbWFyeSgyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXG4xIHRlc3QgcmFuIGFzIGV4cGVjdGVk
LCAxIGRpZG4ndDpcblxuIl0pCisKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRl
ci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGVyci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyJcbjIgdGVzdHMgcmFuIGFz
IGV4cGVjdGVkLCAxIGRpZG4ndDpcblxuIl0pCisKKyAgICBkZWYgdGVzdF9wcmludF90ZXN0X3Jl
c3VsdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZ2V0X3Jlc3VsdCgnZm9vLmh0bWwnKQorICAg
ICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25v
dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVj
dGVkPUZhbHNlLCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdF9zdHI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAg
ICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ3Vu
ZXhwZWN0ZWQnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4
cGVjdGVkPVRydWUsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAg
ICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4
cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBbJyAgZm9vLmh0bWwgLT4gdW5leHBlY3RlZCBwYXNzXG4nXSkKKworICAgICAgICBw
cmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhp
bmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVk
PVRydWUsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAg
IHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0
cj0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnICBmb28uaHRtbCAtPiB1bmV4cGVjdGVkIHBhc3NcbiddKQorCisgICAgICAgIHByaW50
ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQor
ICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2Us
IGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0n
JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50
ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFjZS11bmV4cGVjdGVkJ10p
CisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVl
LCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9
JycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIu
cmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0
ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAg
ICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ3Ry
YWNlLWV2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1
bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHko
KSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVz
dWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKworICAgIGRlZiB0ZXN0X3ByaW50X3Byb2dy
ZXNzKHNlbGYpOgorICAgICAgICB0ZXN0X2ZpbGVzID0gWydmb28uaHRtbCcsICdiYXIuaHRtbCdd
CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICcnCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgd2UgcHJp
bnQgbm90aGluZworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIo
WyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3Vt
bWFyeShzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisKKyAgICAgICAgcHJp
bnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0
eSgpKQorCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmls
ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgICMgdGVzdCByZWd1bGFyIGZ1bmN0aW9u
YWxpdHkKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1w
cmludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29u
ZS1saW5lLXByb2dyZXNzJ10pCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZh
bHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgZXJyLnJlc2V0
KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhy
cywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHko
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIHRlc3Rf
cHJpbnRfcHJvZ3Jlc3NfX2RldGFpbGVkKHNlbGYpOgorICAgICAgICB0ZXN0X2ZpbGVzID0gWydw
YXNzL3Bhc3MuaHRtbCcsICdwYXNzL3RpbWVvdXQuaHRtbCcsICdmYWlsL2NyYXNoLmh0bWwnXQor
ICAgICAgICBleHBlY3RhdGlvbnMgPSAncGFzcy90aW1lb3V0Lmh0bWwgPSBUSU1FT1VUJworCisg
ICAgICAgICMgZmlyc3QsIHRlc3QgdGhhdCBpdCBpcyBkaXNhYmxlZCBwcm9wZXJseQorICAgICAg
ICAjIHNob3VsZCBzdGlsbCBwcmludCBvbmUtbGluZS1wcm9ncmVzcworICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoCisgICAgICAgICAgICBbJy0tcHJpbnQnLCAn
ZGV0YWlsZWQtcHJvZ3Jlc3MnXSwgc2luZ2xlX3RocmVhZGVkPUZhbHNlKQorICAgICAgICBycywg
ZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0
aW9ucykKKyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHRlc3RfZmls
ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIG5vdyB0ZXN0IHRoZSBlbmFibGVk
IHBhdGhzCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigKKyAg
ICAgICAgICAgIFsnLS1wcmludCcsICdkZXRhaWxlZC1wcm9ncmVzcyddLCBzaW5nbGVfdGhyZWFk
ZWQ9VHJ1ZSkKKyAgICAgICAgcnMsIGV4cCA9IGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLl9wb3J0
LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnMpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jl
c3MocnMsIEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5l
bXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAg
ZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9w
cm9ncmVzcyhycywgVHJ1ZSwgdGVzdF9maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShl
cnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAg
ICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25z
LlRJTUVPVVQpLCBGYWxzZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvdGltZW91
dC5odG1sJyksIFRydWUpCisgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdmYWlsL2NyYXNoLmh0
bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCksIFRydWUpCisgICAgICAgIGVyci5yZXNldCgp
CisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMs
IEZhbHNlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisKKyAgICAgICAgIyBXZSBv
bmx5IGNsZWFyIHRoZSBtZXRlciB3aGVuIHJldHJ5aW5nIHcvIGRldGFpbGVkLXByb2dyZXNzLgor
ICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVy
LnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGVyci5nZXQoKSwgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0
eSgpKQorCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigKKyAg
ICAgICAgICAgIFsnLS1wcmludCcsICdkZXRhaWxlZC1wcm9ncmVzcyx1bmV4cGVjdGVkJ10sIHNp
bmdsZV90aHJlYWRlZD1UcnVlKQorICAgICAgICBycywgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5
KHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgcHJpbnRlci5w
cmludF9wcm9ncmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkK
KworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmlu
dGVyLnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0X2ZpbGVzKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5
KCkpCisKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1sJywgdGVzdF9l
eHBlY3RhdGlvbnMuVElNRU9VVCksIEZhbHNlKQorICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgn
cGFzcy90aW1lb3V0Lmh0bWwnKSwgVHJ1ZSkKKyAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2Zh
aWwvY3Jhc2guaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgVHJ1ZSkKKyAgICAgICAg
ZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9w
cm9ncmVzcyhycywgRmFsc2UsIHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAg
ICAgICAjIFdlIG9ubHkgY2xlYXIgdGhlIG1ldGVyIHdoZW4gcmV0cnlpbmcgdy8gZGV0YWlsZWQt
cHJvZ3Jlc3MuCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAg
ICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUob3V0LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10p
CisgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
cnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50
ZXIoWyctLXByaW50JywgJ21pc2MnXSkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgZXJyLnJlc2V0KCkK
KyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNvbmZpZyIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYu
Z2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci53
cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAg
ICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNvbmZpZyIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9wcmlu
dF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZik6CisgICAgICAgICMgVGhpcyByb3V0aW5lIGlzIHRo
ZSBvbmx5IG9uZSB0aGF0IHByaW50cyBzdHVmZiB0aGF0IHRoZSBib3RzCisgICAgICAgICMgY2Fy
ZSBhYm91dC4KKyAgICAgICAgZGVmIGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQsIHBh
c3NpbmcsIGZsYWt5KToKKyAgICAgICAgICAgIHJzLCBleHAgPSBnZXRfcmVzdWx0X3N1bW1hcnko
c2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgaWYgZXhw
ZWN0ZWQ6CisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFzcy5odG1s
JywgdGVzdF9leHBlY3RhdGlvbnMuUEFTUyksCisgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdwYXNzL3RpbWVvdXQuaHRt
bCcsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBl
eHBlY3RlZCkKKyAgICAgICAgICAgICAgICBycy5hZGQoZ2V0X3Jlc3VsdCgnZmFpbC9jcmFzaC5o
dG1sJywgdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpLAorICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkKQorICAgICAgICAgICAgZWxpZiBwYXNzaW5nOgorICAgICAgICAgICAgICAgIHJzLmFkZChn
ZXRfcmVzdWx0KCdwYXNzL3Bhc3MuaHRtbCcpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBy
cy5hZGQoZ2V0X3Jlc3VsdCgncGFzcy90aW1lb3V0Lmh0bWwnKSwgZXhwZWN0ZWQpCisgICAgICAg
ICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcpLCBleHBlY3RlZCkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQoJ3Bh
c3MvcGFzcy5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChnZXRfcmVzdWx0KCdw
YXNzL3RpbWVvdXQuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRp
b25zLkNSQVNIKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKGdldF9yZXN1bHQo
J2ZhaWwvY3Jhc2guaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisg
ICAgICAgICAgICByZXRyeSA9IHJzCisgICAgICAgICAgICBpZiBmbGFreToKKyAgICAgICAgICAg
ICAgICByZXRyeSwgZXhwID0gZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYuX3BvcnQsIHRlc3RfZmls
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RhdGlvbnMpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bhc3MvcGFz
cy5odG1sJyksIFRydWUpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9yZXN1bHQoJ3Bh
c3MvdGltZW91dC5odG1sJyksIFRydWUpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKGdldF9y
ZXN1bHQoJ2ZhaWwvY3Jhc2guaHRtbCcpLCBUcnVlKQorICAgICAgICAgICAgdW5leHBlY3RlZF9y
ZXN1bHRzID0gcnVuX3dlYmtpdF90ZXN0cy5zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKAor
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIGV4cCwgcnMsIHJldHJ5KQorICAgICAgICAgICAg
cmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0cworCisgICAgICAgIHRlc3RfZmlsZXMgPSBbJ3Bhc3Mv
cGFzcy5odG1sJywgJ3Bhc3MvdGltZW91dC5odG1sJywgJ2ZhaWwvY3Jhc2guaHRtbCddCisgICAg
ICAgIGV4cGVjdGF0aW9ucyA9ICcnCisKKyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgICAgIHVyID0gZ2V0X3Vu
ZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFs
c2UpCisgICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShv
dXQuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50
ZXIoWyctLXByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndW5leHBlY3RlZC1yZXN1bHRzJ10pCisKKyAgICAgICAgIyB0ZXN0IGV2ZXJ5dGhpbmcg
cnVubmluZyBhcyBleHBlY3RlZAorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMo
ZXhwZWN0ZWQ9VHJ1ZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCisgICAgICAgIHByaW50
ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKworICAg
ICAgICAjIHRlc3QgZmFpbHVyZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJl
c2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNl
LCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4
cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRlc3Qg
dW5leHBlY3RlZCBmbGFreSByZXN1bHRzCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91
dC5yZXNldCgpCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1G
YWxzZSwgcGFzc2luZz1UcnVlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91
bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHko
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICAjIHRl
c3QgdW5leHBlY3RlZCBwYXNzZXMKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0LnJl
c2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNl
LCBwYXNzaW5nPUZhbHNlLCBmbGFreT1UcnVlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhw
ZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgIGVyci5yZXNl
dCgpCisgICAgICAgIG91dC5yZXNldCgpCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQorICAgICAgICB1ciA9IGdl
dF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5
PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRz
X2J1aWxkYm90KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQgcHJpbnRfdW5leHBl
Y3RlZF9yZXN1bHRzKCkgcHJvZHVjZXMgdGhlIHByaW50ZXIgdGhlCisgICAgICAgICMgYnVpbGRi
b3QgaXMgZXhwZWN0aW5nLgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggMzM5ZmE4NS4uNWQ1NjNj
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC90ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvdGVzdC5weQpAQCAtNjYsNiArNjYsMTMgQEAgY2xhc3MgVGVzdFBvcnQoYmFzZS5Q
b3J0KToKICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5h
bWUpOgogICAgICAgICByZXR1cm4gJycKIAorICAgIGRlZiByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lCisKKyAgICBkZWYgZXhw
ZWN0ZWRfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUsIHN1ZmZpeCk6CisgICAgICAgIChiYXNlbmFt
ZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBiYXNl
bmFtZSArICcuJyArIHN1ZmZpeAorCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLl9uYW1lCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDc3YjMxNTAuLjY1
YWYzMDAgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNjQsNyArNjQsNyBAQCBpbXBv
cnQgdHJhY2ViYWNrCiAKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRp
b25zCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVy
YXRvcgotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KK2Zyb20gbGF5
b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0
ZXN0X2ZhaWx1cmVzCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3JlbmRlcl90cmVl
X3RocmVhZAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9maWxlcwpAQCAtODAsMzMg
KzgwLDYgQEAgaW1wb3J0IHBvcnQKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyIpCiAKLSMgZHVtbXkgdmFsdWUgdXNlZCBm
b3IgY29tbWFuZC1saW5lIGV4cGxpY2l0bmVzcyB0byBkaXNhYmxlIGRlZmF1bHRzCi1MT0dfTk9U
SElORyA9ICdub3RoaW5nJwotCi0jIERpc3BsYXkgdGhlIG9uZS1saW5lIHByb2dyZXNzIGJhciAo
JSBjb21wbGV0ZWQpIHdoaWxlIHRlc3RpbmcKLUxPR19QUk9HUkVTUyA9ICdwcm9ncmVzcycKLQot
IyBJbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IGRldGFpbGVkIHByb2dyZXNzIHVwZGF0ZXMgaW4gdGhl
IG91dHB1dCAocHJpbnRzCi0jIGRpcmVjdG9yeS1ieS1kaXJlY3RvcnkgZmVlZGJhY2spLgotTE9H
X0RFVEFJTEVEX1BST0dSRVNTID0gJ2RldGFpbGVkLXByb2dyZXNzJwotCi0jIExvZyB0aGUgb25l
LWxpbmUgc3VtbWFyeSBhdCB0aGUgZW5kIG9mIHRoZSBydW4KLUxPR19TVU1NQVJZID0gJ3N1bW1h
cnknCi0KLSMgIlRyYWNlIiB0aGUgdGVzdCAtIGxvZyB0aGUgZXhwZWN0ZWQgcmVzdWx0LCB0aGUg
YWN0dWFsIHJlc3VsdCwgYW5kIHRoZQotIyBiYXNlbGluZXMgdXNlZAotTE9HX1RSQUNFID0gJ3Ry
YWNlJwotCi0jIExvZyBhbnkgdW5leHBlY3RlZCByZXN1bHRzIHdoaWxlIHJ1bm5pbmcgKGluc3Rl
YWQgb2YganVzdCBhdCB0aGUgZW5kKS4KLUxPR19VTkVYUEVDVEVEID0gJ3VuZXhwZWN0ZWQnCi1M
T0dfVU5FWFBFQ1RFRF9SRVNVTFRTID0gJ3VuZXhwZWN0ZWQtcmVzdWx0cycKLQotTE9HX1ZBTFVF
UyA9ICIsIi5qb2luKCgiYWN0dWFsIiwgImNvbmZpZyIsIExPR19ERVRBSUxFRF9QUk9HUkVTUywg
ImV4cGVjdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICBMT0dfTk9USElORywgTE9HX1BST0dS
RVNTLCBMT0dfU1VNTUFSWSwgInRpbWluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgTE9HX1VO
RVhQRUNURUQsIExPR19VTkVYUEVDVEVEX1JFU1VMVFMpKQotTE9HX0RFRkFVTFRfVkFMVUUgPSAi
LCIuam9pbigoTE9HX0RFVEFJTEVEX1BST0dSRVNTLCBMT0dfU1VNTUFSWSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExPR19VTkVYUEVDVEVELCBMT0dfVU5FWFBFQ1RFRF9SRVNVTFRT
KSkKLQogIyBCdWlsZGVyIGJhc2UgVVJMIHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3Qg
cmVzdWx0cy4KIEJVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9i
dWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKIApAQCAtMTgxLDcgKzE1NCw3IEBAIGNsYXNz
IFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAgICAgIiIiCiAKICAgICAgICAgc2VsZi50ZXN0
c19ieV9leHBlY3RhdGlvbltyZXN1bHQudHlwZV0uYWRkKHJlc3VsdC5maWxlbmFtZSkKLSAgICAg
ICAgc2VsZi5yZXN1bHRzW3Jlc3VsdC5maWxlbmFtZV0gPSByZXN1bHQudHlwZQorICAgICAgICBz
ZWxmLnJlc3VsdHNbcmVzdWx0LmZpbGVuYW1lXSA9IHJlc3VsdAogICAgICAgICBzZWxmLnJlbWFp
bmluZyAtPSAxCiAgICAgICAgIGlmIGxlbihyZXN1bHQuZmFpbHVyZXMpOgogICAgICAgICAgICAg
c2VsZi5mYWlsdXJlc1tyZXN1bHQuZmlsZW5hbWVdID0gcmVzdWx0LmZhaWx1cmVzCkBAIC0xOTIs
NiArMTY1LDgzIEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAgICAgICAgIHNl
bGYudW5leHBlY3RlZCArPSAxCiAKIAorZGVmIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMo
cG9ydF9vYmosIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXRyeV9zdW1tYXJ5KToKKyAgICAiIiJTdW1tYXJpemUgYW55IHVu
ZXhwZWN0ZWQgcmVzdWx0cyBhcyBhIGRpY3QuCisKKyAgICBGSVhNRTogc3BsaXQgdGhpcyBkYXRh
IHN0cnVjdHVyZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3M/CisKKyAgICBBcmdzOgorICAgICAgICBw
b3J0X29iajogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKKyAgICAgICAgZXhwZWN0
YXRpb25zOiB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zIG9iamVjdAorICAgICAg
ICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBpbml0aWFsIHRlc3QgcnVucwor
ICAgICAgICByZXRyeV9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3QgcnVu
IG9mIHJldHJpZWQgdGVzdHMKKyAgICBSZXR1cm5zOgorICAgICAgICBBIGRpY3Rpb25hcnkgY29u
dGFpbmluZyBhIHN1bW1hcnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQorICAg
ICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6CisgICAgICAgICd2ZXJzaW9uJzog
YSB2ZXJzaW9uIGluZGljYXRvciAoMSBpbiB0aGlzIHZlcnNpb24pCisgICAgICAgICdmaXhhYmxl
JzogIyBvZiBmaXhhYmxlIHRlc3RzIChOT1cgLSBQQVNTKQorICAgICAgICAnc2tpcHBlZCc6ICMg
b2Ygc2tpcHBlZCB0ZXN0cyAoTk9XICYgU0tJUFBFRCkKKyAgICAgICAgJ251bV9yZWdyZXNzaW9u
cyc6ICMgb2Ygbm9uLWZsYWt5IGZhaWx1cmVzCisgICAgICAgICdudW1fZmxha3knOiAjIG9mIGZs
YWt5IGZhaWx1cmVzCisgICAgICAgICdudW1fcGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3Nl
cworICAgICAgICAndGVzdHMnOiBhIGRpY3Qgb2YgdGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4n
LCAnYWN0dWFsJzogJy4uLid9CisgICAgIiIiCisgICAgcmVzdWx0cyA9IHt9CisgICAgcmVzdWx0
c1sndmVyc2lvbiddID0gMQorCisgICAgdGJlID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhw
ZWN0YXRpb24KKyAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQorICAg
IHJlc3VsdHNbJ2ZpeGFibGUnXSA9IGxlbih0YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNT
XSkKKyAgICByZXN1bHRzWydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5P
V10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9leHBlY3RhdGlv
bnMuU0tJUF0pCisKKyAgICBudW1fcGFzc2VzID0gMAorICAgIG51bV9mbGFreSA9IDAKKyAgICBu
dW1fcmVncmVzc2lvbnMgPSAwCisgICAga2V5d29yZHMgPSB7fQorICAgIGZvciBrLCB2IGluIFRl
c3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKKyAgICAgICAga2V5
d29yZHNbdl0gPSBrLnVwcGVyKCkKKworICAgIHRlc3RzID0ge30KKyAgICBmb3IgZmlsZW5hbWUs
IHJlc3VsdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6
CisgICAgICAgICMgTm90ZSB0aGF0IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5hbCBy
dW4sIHdlIGlnbm9yZQorICAgICAgICAjIHdoZXRoZXIgb3Igbm90IGl0IGNyYXNoZWQgd2hlbiB3
ZSByZXRyaWVkIGl0IChpZiB3ZSByZXRyaWVkIGl0KSwKKyAgICAgICAgIyBhbmQgYWx3YXlzIGNv
bnNpZGVyIHRoZSByZXN1bHQgbm90IGZsYWt5LgorICAgICAgICB0ZXN0ID0gcG9ydF9vYmoucmVs
YXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3Rh
dGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoZmlsZW5hbWUpCisgICAgICAgIGFjdHVhbCA9
IFtrZXl3b3Jkc1tyZXN1bHRdXQorCisgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0
aW9ucy5QQVNTOgorICAgICAgICAgICAgbnVtX3Bhc3NlcyArPSAxCisgICAgICAgIGVsaWYgcmVz
dWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIOgorICAgICAgICAgICAgbnVtX3JlZ3Jlc3Np
b25zICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiBy
ZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICBhY3R1YWwu
ZXh0ZW5kKGV4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAg
ICAgICAgICAgZmlsZW5hbWUpLnNwbGl0KCIgIikpCisgICAgICAgICAgICAgICAgbnVtX2ZsYWt5
ICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0g
cmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAgICAg
ICAgaWYgcmVzdWx0ICE9IHJldHJ5X3Jlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFs
LmFwcGVuZChrZXl3b3Jkc1tyZXRyeV9yZXN1bHRdKQorICAgICAgICAgICAgICAgICAgICBudW1f
Zmxha3kgKz0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG51
bV9yZWdyZXNzaW9ucyArPSAxCisKKyAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQorICAgICAgICB0
ZXN0c1t0ZXN0XVsnZXhwZWN0ZWQnXSA9IGV4cGVjdGVkCisgICAgICAgIHRlc3RzW3Rlc3RdWydh
Y3R1YWwnXSA9ICIgIi5qb2luKGFjdHVhbCkKKworICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0ZXN0
cworICAgIHJlc3VsdHNbJ251bV9wYXNzZXMnXSA9IG51bV9wYXNzZXMKKyAgICByZXN1bHRzWydu
dW1fZmxha3knXSA9IG51bV9mbGFreQorICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9ucyddID0g
bnVtX3JlZ3Jlc3Npb25zCisKKyAgICByZXR1cm4gcmVzdWx0cworCisKIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgIiIiQSBjbGFzcyBmb3IgbWFuYWdpbmcgcnVubmluZyBhIHNlcmllcyBvZiB0ZXN0
cyBvbiBhIHNlcmllcyBvZiBsYXlvdXQKICAgICB0ZXN0IGZpbGVzLiIiIgpAQCAtMjA0LDE3ICsy
NTQsMTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5kZXJUcmVlLgogICAg
IERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCBvcHRpb25zLCBtZXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IG9wdGlvbnMsIHByaW50ZXIpOgogICAgICAgICAiIiJJbml0aWFsaXplIHRlc3QgcnVubmVyIGRh
dGEgc3RydWN0dXJlcy4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IGFuIG9iamVj
dCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYwogICAgICAgICAgIG9wdGlvbnM6IGEgZGljdGlv
bmFyeSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwotICAgICAgICAgIG1ldGVyOiBhIE1ldGVyZWRT
dHJlYW0gb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVzIHRvLgorICAgICAgICAgIHByaW50ZXI6IGEg
UHJpbnRlciBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCiAgICAgICAgICIiIgogICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAg
ICAgICBzZWxmLl9tZXRlciA9IG1ldGVyCisgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVy
CiAKICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5T
U0wgb24gYnVpbGRib3RzLgogICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVy
ID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKQEAgLTIyOCwxMiArMjc4LDYgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQogICAg
ICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAKLSAgICAgICAgIyBUaGVz
ZSBhcmUgdXNlZCBmb3IgLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3MgdG8gdHJhY2sgc3RhdHVzIGJ5
Ci0gICAgICAgICMgZGlyZWN0b3J5LgotICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IE5vbmUK
LSAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiIgotICAgICAgICBzZWxmLl9j
dXJyZW50X3Rlc3RfbnVtYmVyID0gMAotCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UK
IAogICAgICAgICAjIEhhY2sgZm9yIGR1bXBpbmcgdGhyZWFkcyBvbiB0aGUgYm90cwpAQCAtMjc5
LDE5ICszMjMsMTYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgcmFpc2UgZXJyCiAKLSAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRf
b3V0cHV0KHNlbGYsIHdyaXRlKToKKyAgICBkZWYgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0
cHV0KHNlbGYpOgogICAgICAgICAiIiJDcmVhdGUgYXBwcm9wcmlhdGUgc3Vic2V0cyBvZiB0ZXN0
IGxpc3RzIGFuZCByZXR1cm5zIGEKICAgICAgICAgUmVzdWx0U3VtbWFyeSBvYmplY3QuIEFsc28g
cHJpbnRzIGV4cGVjdGVkIHRlc3QgY291bnRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAg
d3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVy
KSBvcgotICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICIiIgogCiAgICAg
ICAgICMgUmVtb3ZlIHNraXBwZWQgLSBib3RoIGZpeGFibGUgYW5kIGlnbm9yZWQgLSBmaWxlcyBm
cm9tIHRoZQogICAgICAgICAjIHRvcC1sZXZlbCBsaXN0IG9mIGZpbGVzIHRvIHRlc3QuCiAgICAg
ICAgIG51bV9hbGxfdGVzdF9maWxlcyA9IGxlbihzZWxmLl90ZXN0X2ZpbGVzKQotICAgICAgICB3
cml0ZSgiRm91bmQ6ICAlZCB0ZXN0cyIgJSBudW1fYWxsX3Rlc3RfZmlsZXMpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfZXhwZWN0ZWQoIkZvdW5kOiAgJWQgdGVzdHMiICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuKHNlbGYuX3Rlc3RfZmlsZXMpKSkKICAg
ICAgICAgaWYgbm90IG51bV9hbGxfdGVzdF9maWxlczoKICAgICAgICAgICAgIF9sb2cuY3JpdGlj
YWwoIk5vIHRlc3RzIHRvIHJ1bi4iKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTM1OCw3
ICszOTksNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgICAgICB0ZXN0c19ydW5fbXNn
ID0gJ1J1bm5pbmc6ICVkIHRlc3RzIChjaHVuayBzbGljZSBbJWQ6JWRdIG9mICVkKScgJSAoCiAg
ICAgICAgICAgICAgICAgKHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KSwgc2xpY2Vfc3RhcnQsIHNs
aWNlX2VuZCwgbnVtX3Rlc3RzKQotICAgICAgICAgICAgd3JpdGUodGVzdHNfcnVuX21zZykKKyAg
ICAgICAgICAgIHNlbGYuX3ByaW50LnByaW50X2V4cGVjdGVkKHRlc3RzX3J1bl9tc2cpCiAKICAg
ICAgICAgICAgICMgSWYgd2UgcmVhY2hlZCB0aGUgZW5kIGFuZCB3ZSBkb24ndCBoYXZlIGVub3Vn
aCB0ZXN0cywgd2UgcnVuIHNvbWUKICAgICAgICAgICAgICMgZnJvbSB0aGUgYmVnaW5uaW5nLgpA
QCAtMzY3LDcgKzQwOCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgZXh0
cmEgPSAxICsgY2h1bmtfbGVuIC0gKHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KQogICAgICAgICAg
ICAgICAgIGV4dHJhX21zZyA9ICgnICAgbGFzdCBjaHVuayBpcyBwYXJ0aWFsLCBhcHBlbmRpbmcg
WzA6JWRdJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEpCi0gICAgICAgICAg
ICAgICAgd3JpdGUoZXh0cmFfbXNnKQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfZXhwZWN0ZWQoZXh0cmFfbXNnKQogICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9tc2cgKz0g
IlxuIiArIGV4dHJhX21zZwogICAgICAgICAgICAgICAgIGZpbGVzLmV4dGVuZCh0ZXN0X2ZpbGVz
WzA6ZXh0cmFdKQogICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2lu
KHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCkBAIC0zOTksMTcgKzQ0MCwxOCBAQCBj
bGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFy
eShzZWxmLl9leHBlY3RhdGlvbnMsCiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIHwgc2tp
cF9jaHVuaykKLSAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdy
aXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0
c19vZl90eXBlKHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMu
UEFTUywgInBhc3NlcyIpCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2Zf
dHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVk
X3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0
YXRpb25zLkZBSUwsICJmYWlsdXJlcyIpCi0gICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jl
c3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNlbGYuX3ByaW50
X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRl
c3RfZXhwZWN0YXRpb25zLkZMQUtZLCAiZmxha3kiKQotICAgICAgICBzZWxmLl9wcmludF9leHBl
Y3RlZF9yZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICBzZWxm
Ll9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUocmVzdWx0X3N1bW1hcnksCiAgICAgICAg
ICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQLCAic2tpcHBlZCIpCiAKICAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5mb3JjZToKLSAgICAgICAgICAgIHdyaXRlKCdSdW5uaW5nIGFsbCB0ZXN0cywg
aW5jbHVkaW5nIHNraXBzICgtLWZvcmNlKScpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X2V4cGVjdGVkKCdSdW5uaW5nIGFsbCB0ZXN0cywgaW5jbHVkaW5nICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXBzICgtLWZvcmNlKScpCiAgICAgICAg
IGVsc2U6CiAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBydW4gdGhl
IHNraXBwZWQgdGVzdHMgKHRoZXkgd2VyZQogICAgICAgICAgICAgIyBzdWJ0cmFjdGVkIG91dCBv
ZiBzZWxmLl90ZXN0X2ZpbGVzLCBhYm92ZSksIGJ1dCB3ZSBzdHViIG91dCB0aGUKQEAgLTQyMCw3
ICs0NjIsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAgICB0aW1lX2Zv
cl9kaWZmcz0wKQogICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gdGVzdF9leHBlY3RhdGlv
bnMuU0tJUAogICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVj
dGVkPVRydWUpCi0gICAgICAgIHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X2V4cGVjdGVkKCcnKQogCiAgICAgICAgIHJldHVybiByZXN1bHRfc3VtbWFyeQogCkBAIC02MjUs
MTEgKzY2NywxMSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBwbHVyYWwgPSAiIgogICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA+IDE6CiAgICAgICAgICAgICBw
bHVyYWwgPSAicyIKLSAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyAlcyVzIC4u
LicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUo
KSwgcGx1cmFsKSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5n
ICVzJXMgLi4uJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9w
b3J0LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCiAgICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0
YW50aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoZmlsZV9saXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5KQotICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4u
IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3Rpbmcg
Li4uIikKIAogICAgICAgICAjIFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29s
bGVjdCB0ZXN0IGZhaWx1cmVzLgogICAgICAgICBmYWlsdXJlcyA9IHt9CkBAIC02ODIsNyArNzI0
LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0
ZXN0IHJ1bm5lciBuZWVkcyBhbiBIVFRQIHNlcnZlci4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYu
X2NvbnRhaW5zX3Rlc3RzKHNlbGYuSFRUUF9TVUJESVIpCiAKLSAgICBkZWYgcnVuKHNlbGYsIHJl
c3VsdF9zdW1tYXJ5LCBwcmludF9yZXN1bHRzKToKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdF9z
dW1tYXJ5KToKICAgICAgICAgIiIiUnVuIGFsbCBvdXIgdGVzdHMgb24gYWxsIG91ciB0ZXN0IGZp
bGVzLgogCiAgICAgICAgIEZvciBlYWNoIHRlc3QgZmlsZSwgd2UgcnVuIGVhY2ggdGVzdCB0eXBl
LiBJZiB0aGVyZSBhcmUgYW55IGZhaWx1cmVzLApAQCAtNjkwLDcgKzczMiw2IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAKICAgICAgICAgQXJnczoKICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogYSBz
dW1tYXJ5IG9iamVjdCB0cmFja2luZyB0aGUgdGVzdCByZXN1bHRzLgotICAgICAgICAgIHByaW50
X3Jlc3VsdHM6IHdoZXRoZXIgb3Igbm90IHRvIHByaW50IHRoZSBzdW1tYXJ5IGF0IHRoZSBlbmQK
IAogICAgICAgICBSZXR1cm46CiAgICAgICAgICAgVGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJl
c3VsdHMgKDAgPT0gc3VjY2VzcykKQEAgLTcwMCwxMSArNzQxLDEyIEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIGlmIHNlbGYu
bmVlZHNfaHR0cCgpOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCdTdGFydGluZyBI
VFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUo
J1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCisKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3Rh
cnRfaHR0cF9zZXJ2ZXIoKQogCiAgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYu
V0VCU09DS0VUX1NVQkRJUik6Ci0gICAgICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoJ1N0YXJ0
aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBz
ZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgIyBzZWxmLl93
ZWJzb2NrZXRfc2VjdXJlX3NlcnZlci5TdGFydCgpCiAKQEAgLTcyNyw0MSArNzY5LDIyIEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQogCi0gICAg
ICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKHNlbGYuX29wdGlvbnMsICd0aW1pbmcn
KQotICAgICAgICBzZWxmLl9wcmludF90aW1pbmdfc3RhdGlzdGljcyh3cml0ZSwgZW5kX3RpbWUg
LSBzdGFydF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFk
X3RpbWluZ3MsIHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0KLSAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCIi
KQotCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgICMgV2Ug
d3JpdGUgdGhpcyBibG9jayB0byBzdGRvdXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKLSAg
ICAgICAgICAgICMgYnVpbGRib3QgbG9nIHBhcnNlciwgd2hpY2ggb25seSBsb29rcyBhdCBzdGRv
dXQsIG5vdCBzdGRlcnIgOigKLSAgICAgICAgICAgIHdyaXRlID0gbGFtYmRhIHM6IHN5cy5zdGRv
dXQud3JpdGUoIiVzXG4iICUgcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHdyaXRlID0g
Y3JlYXRlX2xvZ2dpbmdfd3JpdGVyKHNlbGYuX29wdGlvbnMsICdhY3R1YWwnKQorICAgICAgICBz
ZWxmLl9wcmludF90aW1pbmdfc3RhdGlzdGljcyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3Rp
bWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeSkKIAotICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeSh3cml0ZSwg
cmVzdWx0X3N1bW1hcnkpCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHJlc3Vs
dF9zdW1tYXJ5KQogCiAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICBzeXMuc3Rk
ZXJyLmZsdXNoKCkKIAotICAgICAgICAjIFRoaXMgc3VtbWFyeSBkYXRhIGdldHMgd3JpdHRlbiB0
byBzdGRvdXQgcmVnYXJkbGVzcyBvZiBsb2cgbGV2ZWwKLSAgICAgICAgIyAodW5sZXNzIG9mIGNv
dXJzZSB3ZSdyZSBwcmludGluZyBub3RoaW5nKS4KLSAgICAgICAgaWYgcHJpbnRfcmVzdWx0czoK
LSAgICAgICAgICAgIGlmIChMT0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5fb3B0aW9ucy5s
b2cgb3IKLSAgICAgICAgICAgICAgICAoTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5s
b2cgYW5kCi0gICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRvdGFsICE9IHJlc3VsdF9z
dW1tYXJ5LmV4cGVjdGVkKSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIGlm
IExPR19TVU1NQVJZIGluIHNlbGYuX29wdGlvbnMubG9nOgotICAgICAgICAgICAgICAgIHNlbGYu
X3ByaW50X29uZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWwsCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeS50b3RhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5LmV4cGVjdGVkKQogCi0gICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX3N1bW1h
cml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMocmVzdWx0X3N1bW1hcnksCi0gICAgICAgICAgICByZXRy
eV9zdW1tYXJ5KQotICAgICAgICBpZiBMT0dfVU5FWFBFQ1RFRF9SRVNVTFRTIGluIHNlbGYuX29w
dGlvbnMubG9nOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVu
ZXhwZWN0ZWRfcmVzdWx0cykKKyAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc3VtbWFyaXpl
X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fZXhwZWN0
YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModW5leHBlY3RlZF9yZXN1bHRzKQogCiAgICAg
ICAgICMgV3JpdGUgdGhlIHNhbWUgZGF0YSB0byBsb2cgZmlsZXMuCiAgICAgICAgIHNlbGYuX3dy
aXRlX2pzb25fZmlsZXModW5leHBlY3RlZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwKQEAgLTc4
MywxMTIgKzgwNiwxNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuX3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0KCkKICAgICAgICAgICAgIGV4Y2VwdCBR
dWV1ZS5FbXB0eToKICAgICAgICAgICAgICAgICByZXR1cm4KKwogICAgICAgICAgICAgZXhwZWN0
ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCiAgICAg
ICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5w
aXhlbF90ZXN0cykKICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVj
dGVkKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9yZXN1bHRzKHJlc3VsdCwgZXhwZWN0
ZWQsIHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIF9wcmludF90ZXN0X3Jlc3VsdHMoc2VsZiwg
cmVzdWx0LCBleHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiUHJpbnQgdGhlIHJl
c3VsdCBvZiB0aGUgdGVzdCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAtLWxvZyBzd2l0Y2hlcy4iCi0g
ICAgICAgIGlmIExPR19UUkFDRSBpbiBzZWxmLl9vcHRpb25zLmxvZzoKLSAgICAgICAgICAgIHNl
bGYuX3ByaW50X3Rlc3RfdHJhY2UocmVzdWx0KQotICAgICAgICBlbGlmIChMT0dfREVUQUlMRURf
UFJPR1JFU1MgaW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCi0gICAgICAgICAgICAgIChzZWxmLl9v
cHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgotICAgICAgICAgICAgICAgc2Vs
Zi5faXNfc2luZ2xlX3RocmVhZGVkKCkpKToKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X2RldGFp
bGVkX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
aWYgKG5vdCBleHBlY3RlZCBhbmQgTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cp
OgotICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQocmVz
dWx0KQotICAgICAgICAgICAgc2VsZi5fcHJpbnRfb25lX2xpbmVfcHJvZ3Jlc3MocmVzdWx0X3N1
bW1hcnkpCi0KLSAgICBkZWYgX3ByaW50X3Rlc3RfdHJhY2Uoc2VsZiwgcmVzdWx0KToKLSAgICAg
ICAgIiIiUHJpbnQgZGV0YWlsZWQgcmVzdWx0cyBvZiBhIHRlc3QgKHRyaWdnZXJlZCBieSAtLWxv
ZyB0cmFjZSkuCi0gICAgICAgIEZvciBlYWNoIHRlc3QsIHByaW50OgotICAgICAgICAgICAtIGxv
Y2F0aW9uIG9mIHRoZSBleHBlY3RlZCBiYXNlbGluZXMKLSAgICAgICAgICAgLSBleHBlY3RlZCBy
ZXN1bHRzCi0gICAgICAgICAgIC0gYWN0dWFsIHJlc3VsdAotICAgICAgICAgICAtIHRpbWluZyBp
bmZvCi0gICAgICAgICIiIgotICAgICAgICBmaWxlbmFtZSA9IHJlc3VsdC5maWxlbmFtZQotICAg
ICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5h
bWUpCi0gICAgICAgIF9sb2cuaW5mbygndHJhY2U6ICVzJyAlIHRlc3RfbmFtZSkKLSAgICAgICAg
X2xvZy5pbmZvKCcgIHR4dDogJXMnICUKLSAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSgKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5l
eHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy50eHQnKSkpCi0gICAgICAgIHBuZ19maWxlID0g
c2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQotICAgICAgICBp
ZiBvcy5wYXRoLmV4aXN0cyhwbmdfZmlsZSk6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgcG5n
OiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmaWxlbmFtZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmluZm8o
JyAgcG5nOiA8bm9uZT4nKQotICAgICAgICBfbG9nLmluZm8oJyAgZXhwOiAlcycgJQotICAgICAg
ICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZp
bGVuYW1lKSkKLSAgICAgICAgX2xvZy5pbmZvKCcgIGdvdDogJXMnICUKLSAgICAgICAgICAgICAg
ICAgIHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUp
KQotICAgICAgICBfbG9nLmluZm8oJyB0b29rOiAlLS4zZicgJSByZXN1bHQudGVzdF9ydW5fdGlt
ZSkKLSAgICAgICAgX2xvZy5pbmZvKCcnKQotCi0gICAgZGVmIF9wcmludF9vbmVfbGluZV9wcm9n
cmVzcyhzZWxmLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIkRpc3BsYXlzIHRoZSBwcm9n
cmVzcyB0aHJvdWdoIHRoZSB0ZXN0IHJ1bi4iIiIKLSAgICAgICAgcGVyY2VudF9jb21wbGV0ZSA9
IDEwMCAqIChyZXN1bHRfc3VtbWFyeS5leHBlY3RlZCArCi0gICAgICAgICAgICByZXN1bHRfc3Vt
bWFyeS51bmV4cGVjdGVkKSAvIHJlc3VsdF9zdW1tYXJ5LnRvdGFsCi0gICAgICAgIGFjdGlvbiA9
ICJUZXN0aW5nIgotICAgICAgICBpZiBzZWxmLl9yZXRyeWluZzoKLSAgICAgICAgICAgIGFjdGlv
biA9ICJSZXRyeWluZyIKLSAgICAgICAgc2VsZi5fbWV0ZXIucHJvZ3Jlc3MoIiVzICglZCUlKTog
JWQgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3QsIgotICAgICAgICAgICAgIiAlZCBsZWZ0IiAl
IChhY3Rpb24sIHBlcmNlbnRfY29tcGxldGUsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLAotICAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnJlbWFp
bmluZykpCi0KLSAgICBkZWYgX3ByaW50X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9z
dW1tYXJ5KToKLSAgICAgICAgIiIiRGlzcGxheSBkZXRhaWxlZCBwcm9ncmVzcyBvdXRwdXQgd2hl
cmUgd2UgcHJpbnQgdGhlIGRpcmVjdG9yeSBuYW1lCi0gICAgICAgIGFuZCBvbmUgZG90IGZvciBl
YWNoIGNvbXBsZXRlZCB0ZXN0LiBUaGlzIGlzIHRyaWdnZXJlZCBieQotICAgICAgICAiLS1sb2cg
ZGV0YWlsZWQtcHJvZ3Jlc3MiLiIiIgotICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVt
YmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpOgotICAgICAgICAgICAgcmV0dXJuCi0K
LSAgICAgICAgbmV4dF90ZXN0ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRf
dGVzdF9udW1iZXJdCi0gICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAg
ICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCi0gICAg
ICAgIGlmIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID09ICIiOgotICAgICAgICAgICAgc2Vs
Zi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSAobmV4dF9kaXIpCi0gICAgICAgICAg
ICBzZWxmLl9jdXJyZW50X2RpciA9IG5leHRfZGlyCi0KLSAgICAgICAgd2hpbGUgbmV4dF90ZXN0
IGluIHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHM6Ci0gICAgICAgICAgICBpZiBuZXh0X2RpciAhPSBz
ZWxmLl9jdXJyZW50X2RpcjoKLSAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNc
biIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQotICAgICAgICAgICAgICAgIHNlbGYu
X2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAuIiAlIChuZXh0X2RpcikKLSAgICAgICAgICAg
ICAgICBzZWxmLl9jdXJyZW50X2RpciA9IG5leHRfZGlyCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyICs9ICIuIgotCi0gICAgICAg
ICAgICBpZiAobmV4dF90ZXN0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cyBh
bmQKLSAgICAgICAgICAgICAgICBMT0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRpb25zLmxvZyk6
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1
bHRzW25leHRfdGVzdF0KLSAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIg
JSBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmlu
dF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KG5leHRfdGVzdCwgcmVzdWx0KQotICAgICAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgc2VsZi5fY3VycmVudF9k
aXIKLQotICAgICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciArPSAxCi0gICAgICAg
ICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVz
X2xpc3QpOgotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIG5leHRfdGVzdCA9
IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQotICAgICAg
ICAgICAgbmV4dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICAgICAgc2VsZi5f
cG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCi0KLSAgICAgICAgaWYgcmVz
dWx0X3N1bW1hcnkucmVtYWluaW5nOgotICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIg
JSAocmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKQotICAgICAgICAgICAgc2VsZi5fbWV0ZXIucHJv
Z3Jlc3MoIiVzJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9j
dXJyZW50X3Byb2dyZXNzX3N0ciwgcmVtYWluX3N0cikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBzZWxmLl9tZXRlci5wcm9ncmVzcygiJXNcbiIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVz
c19zdHIpKQotCi0gICAgZGVmIF9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHNlbGYsIHJl
c3VsdCk6Ci0gICAgICAgICIiIlByaW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0IHJlc3VsdCBsaW5l
LiIiIgotICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVT
Q1JJUFRJT05TW3Jlc3VsdC50eXBlXVswXQotICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiICAl
cyAtPiB1bmV4cGVjdGVkICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShyZXN1bHQuZmlsZW5hbWUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzYykpCisgICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhw
ZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAorICAgICAgICAgICAgICAgIHJlc3Vs
dC5maWxlbmFtZSkKKyAgICAgICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhw
ZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQor
ICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwg
c2VsZi5fcmV0cnlpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKIAogICAgIGRlZiBfZ2V0X2ZhaWx1cmVzKHNlbGYsIHJl
c3VsdF9zdW1tYXJ5LCBpbmNsdWRlX2NyYXNoZXMpOgogICAgICAgICAiIiJGaWx0ZXJzIGEgZGlj
dCBvZiByZXN1bHRzIGFuZCByZXR1cm5zIG9ubHkgdGhlIGZhaWx1cmVzLgpAQCAtOTExLDgwICs4
MzgsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIHJldHVybiBmYWlsZWRfcmVzdWx0
cwogCi0gICAgZGVmIF9zdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHJlc3VsdF9z
dW1tYXJ5LCByZXRyeV9zdW1tYXJ5KToKLSAgICAgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVj
dGVkIHJlc3VsdHMgYXMgYSBkaWN0LgotCi0gICAgICAgIFRPRE8oZHByYW5rZSk6IHNwbGl0IHRo
aXMgZGF0YSBzdHJ1Y3R1cmUgaW50byBhIHNlcGFyYXRlIGNsYXNzPwotCi0gICAgICAgIEFyZ3M6
Ci0gICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZyb20gaW5pdGlhbCB0
ZXN0IHJ1bnMKLSAgICAgICAgICByZXRyeV9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZp
bmFsIHRlc3QgcnVuIG9mIHJldHJpZWQgdGVzdHMKLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAg
ICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBhIHN1bW1hcnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVz
dWx0cyBmcm9tIHRoZQotICAgICAgICAgIHJ1biwgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoK
LSAgICAgICAgICAgICd2ZXJzaW9uJzogYSB2ZXJzaW9uIGluZGljYXRvciAoMSBpbiB0aGlzIHZl
cnNpb24pCi0gICAgICAgICAgICAnZml4YWJsZSc6ICMgb2YgZml4YWJsZSB0ZXN0cyAoTk9XIC0g
UEFTUykKLSAgICAgICAgICAgICdza2lwcGVkJzogIyBvZiBza2lwcGVkIHRlc3RzIChOT1cgJiBT
S0lQUEVEKQotICAgICAgICAgICAgJ251bV9yZWdyZXNzaW9ucyc6ICMgb2Ygbm9uLWZsYWt5IGZh
aWx1cmVzCi0gICAgICAgICAgICAnbnVtX2ZsYWt5JzogIyBvZiBmbGFreSBmYWlsdXJlcwotICAg
ICAgICAgICAgJ251bV9wYXNzZXMnOiAjIG9mIHVuZXhwZWN0ZWQgcGFzc2VzCi0gICAgICAgICAg
ICAndGVzdHMnOiBhIGRpY3Qgb2YgdGVzdHMgLT4geydleHBlY3RlZCc6ICcuLi4nLCAnYWN0dWFs
JzogJy4uLid9Ci0gICAgICAgICIiIgotICAgICAgICByZXN1bHRzID0ge30KLSAgICAgICAgcmVz
dWx0c1sndmVyc2lvbiddID0gMQotCi0gICAgICAgIHRiZSA9IHJlc3VsdF9zdW1tYXJ5LnRlc3Rz
X2J5X2V4cGVjdGF0aW9uCi0gICAgICAgIHRidCA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3Rp
bWVsaW5lCi0gICAgICAgIHJlc3VsdHNbJ2ZpeGFibGUnXSA9IGxlbih0YnRbdGVzdF9leHBlY3Rh
dGlvbnMuTk9XXSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmVbdGVzdF9l
eHBlY3RhdGlvbnMuUEFTU10pCi0gICAgICAgIHJlc3VsdHNbJ3NraXBwZWQnXSA9IGxlbih0YnRb
dGVzdF9leHBlY3RhdGlvbnMuTk9XXSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YmVbdGVzdF9leHBlY3RhdGlvbnMuU0tJUF0pCi0KLSAgICAgICAgbnVtX3Bhc3NlcyA9IDAK
LSAgICAgICAgbnVtX2ZsYWt5ID0gMAotICAgICAgICBudW1fcmVncmVzc2lvbnMgPSAwCi0gICAg
ICAgIGtleXdvcmRzID0ge30KLSAgICAgICAgZm9yIGssIHYgaW4gVGVzdEV4cGVjdGF0aW9uc0Zp
bGUuRVhQRUNUQVRJT05TLml0ZXJpdGVtcygpOgotICAgICAgICAgICAga2V5d29yZHNbdl0gPSBr
LnVwcGVyKCkKLQotICAgICAgICB0ZXN0cyA9IHt9Ci0gICAgICAgIGZvciBmaWxlbmFtZSwgcmVz
dWx0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cy5pdGVyaXRlbXMoKToKLSAg
ICAgICAgICAgICMgTm90ZSB0aGF0IGlmIGEgdGVzdCBjcmFzaGVkIGluIHRoZSBvcmlnaW5hbCBy
dW4sIHdlIGlnbm9yZQotICAgICAgICAgICAgIyB3aGV0aGVyIG9yIG5vdCBpdCBjcmFzaGVkIHdo
ZW4gd2UgcmV0cmllZCBpdCAoaWYgd2UgcmV0cmllZCBpdCksCi0gICAgICAgICAgICAjIGFuZCBh
bHdheXMgY29uc2lkZXIgdGhlIHJlc3VsdCBub3QgZmxha3kuCi0gICAgICAgICAgICB0ZXN0ID0g
c2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICAgICAgICAg
ZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoZmls
ZW5hbWUpCi0gICAgICAgICAgICBhY3R1YWwgPSBba2V5d29yZHNbcmVzdWx0XV0KLQotICAgICAg
ICAgICAgaWYgcmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlBBU1M6Ci0gICAgICAgICAgICAg
ICAgbnVtX3Bhc3NlcyArPSAxCi0gICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVj
dGF0aW9ucy5DUkFTSDoKLSAgICAgICAgICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gcmV0cnlf
c3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgICAgIGFjdHVhbC5l
eHRlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4
cGVjdGF0aW9uc19zdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkuc3Bs
aXQoIiAiKSkKLSAgICAgICAgICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKLSAgICAgICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXRyeV9yZXN1bHQgPSByZXRyeV9zdW1t
YXJ5LnVuZXhwZWN0ZWRfcmVzdWx0c1tmaWxlbmFtZV0KLSAgICAgICAgICAgICAgICAgICAgaWYg
cmVzdWx0ICE9IHJldHJ5X3Jlc3VsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5h
cHBlbmQoa2V5d29yZHNbcmV0cnlfcmVzdWx0XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG51
bV9mbGFreSArPSAxCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQotCi0gICAgICAgICAgICB0ZXN0c1t0ZXN0XSA9
IHt9Ci0gICAgICAgICAgICB0ZXN0c1t0ZXN0XVsnZXhwZWN0ZWQnXSA9IGV4cGVjdGVkCi0gICAg
ICAgICAgICB0ZXN0c1t0ZXN0XVsnYWN0dWFsJ10gPSAiICIuam9pbihhY3R1YWwpCi0KLSAgICAg
ICAgcmVzdWx0c1sndGVzdHMnXSA9IHRlc3RzCi0gICAgICAgIHJlc3VsdHNbJ251bV9wYXNzZXMn
XSA9IG51bV9wYXNzZXMKLSAgICAgICAgcmVzdWx0c1snbnVtX2ZsYWt5J10gPSBudW1fZmxha3kK
LSAgICAgICAgcmVzdWx0c1snbnVtX3JlZ3Jlc3Npb25zJ10gPSBudW1fcmVncmVzc2lvbnMKLQot
ICAgICAgICByZXR1cm4gcmVzdWx0cwotCiAgICAgZGVmIF93cml0ZV9qc29uX2ZpbGVzKHNlbGYs
IHVuZXhwZWN0ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6CiAgICAgICAgICIiIldyaXRlcyB0aGUgcmVz
dWx0cyBvZiB0aGUgdGVzdCBydW4gYXMgSlNPTiBmaWxlcyBpbnRvIHRoZSByZXN1bHRzCkBAIC0x
MDI1LDEzICs4NzgsMTEgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBfbG9nLmRlYnVn
KCJGaW5pc2hlZCB3cml0aW5nIEpTT04gZmlsZXMuIikKIAotICAgIGRlZiBfcHJpbnRfZXhwZWN0
ZWRfcmVzdWx0c19vZl90eXBlKHNlbGYsIHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICBkZWYg
X3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCByZXN1bHRfc3VtbWFyeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfdHlwZSwgcmVzdWx0
X3R5cGVfc3RyKToKICAgICAgICAgIiIiUHJpbnQgdGhlIG51bWJlciBvZiB0aGUgdGVzdHMgaW4g
YSBnaXZlbiByZXN1bHQgY2xhc3MuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTog
QSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0g
ICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICByZXN1bHRfc3VtbWFyeSAt
IHRoZSBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdHMgdG8gcmVwb3J0IG9uCiAgICAg
ICAgICAgcmVzdWx0X3R5cGUgLSB0aGUgcGFydGljdWxhciByZXN1bHQgdHlwZSB0byByZXBvcnQg
aW4gdGhlIHN1bW1hcnkuCiAgICAgICAgICAgcmVzdWx0X3R5cGVfc3RyIC0gYSBzdHJpbmcgZGVz
Y3JpcHRpb24gb2YgdGhlIHJlc3VsdF90eXBlLgpAQCAtMTA0Niw4ICs4OTcsOSBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBmbXRzdHIgPSAoIkV4cGVjdDogJSU1ZCAlJS04cyAoJSUlZGQg
bm93LCAlJSVkZCBkZWZlciwgJSUlZGQgd29udGZpeCkiCiAgICAgICAgICAgICAgICAgICAlIChz
ZWxmLl9udW1fZGlnaXRzKG5vdyksIHNlbGYuX251bV9kaWdpdHMoZGVmZXIpLAogICAgICAgICAg
ICAgICAgICAgc2VsZi5fbnVtX2RpZ2l0cyh3b250Zml4KSkpCi0gICAgICAgIHdyaXRlKGZtdHN0
ciAlIChsZW4odGVzdHMpLCByZXN1bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksCi0gICAg
ICAgICAgICAgIGxlbih0ZXN0cyAmIGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKGZtdHN0ciAlCisgICAgICAgICAgICAo
bGVuKHRlc3RzKSwgcmVzdWx0X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cpLAorICAgICAgICAg
ICAgIGxlbih0ZXN0cyAmIGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQogCiAgICAgZGVm
IF9udW1fZGlnaXRzKHNlbGYsIG51bSk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIG51bWJlciBv
ZiBkaWdpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9mIGEKQEAgLTEwNTcsNDMg
KzkwOSwzOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgbmRpZ2l0cyA9IGludCht
YXRoLmxvZzEwKGxlbihudW0pKSkgKyAxCiAgICAgICAgIHJldHVybiBuZGlnaXRzCiAKLSAgICBk
ZWYgX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHNlbGYsIHdyaXRlLCB0b3RhbF90aW1lLCB0aHJl
YWRfdGltaW5ncywKKyAgICBkZWYgX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHNlbGYsIHRvdGFs
X3RpbWUsIHRocmVhZF90aW1pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
cmVjdG9yeV90ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUmVjb3Jk
IHRpbWluZy1zcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlc3QgcnVuLgogCiAgICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5n
LiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgog
ICAgICAgICAgIHRvdGFsX3RpbWU6IHRvdGFsIGVsYXBzZWQgdGltZSAoaW4gc2Vjb25kcykgZm9y
IHRoZSB0ZXN0IHJ1bgogICAgICAgICAgIHRocmVhZF90aW1pbmdzOiB3YWxsIGNsb2NrIHRpbWUg
ZWFjaCB0aHJlYWQgcmFuIGZvcgogICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3M6IHRp
bWluZyBieSBkaXJlY3RvcnkKICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogdGlt
aW5nIGJ5IGZpbGUKICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZm9y
IHRoZSB0ZXN0IHJ1bgogICAgICAgICAiIiIKLSAgICAgICAgd3JpdGUoIlRlc3QgdGltaW5nOiIp
Ci0gICAgICAgIHdyaXRlKCIgICU2LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIgJSB0b3RhbF90aW1l
KQotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgd3JpdGUoIlRocmVhZCB0aW1pbmc6IikKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRlc3QgdGltaW5nOiIpCisgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICU2LjJmIHRvdGFsIHRlc3RpbmcgdGltZSIg
JSB0b3RhbF90aW1lKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIlRocmVhZCB0aW1pbmc6IikKICAgICAg
ICAgY3VtbF90aW1lID0gMAogICAgICAgICBmb3IgdCBpbiB0aHJlYWRfdGltaW5nczoKLSAgICAg
ICAgICAgIHdyaXRlKCIgICAgJTEwczogJTVkIHRlc3RzLCAlNi4yZiBzZWNzIiAlCisgICAgICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYu
MmYgc2VjcyIgJQogICAgICAgICAgICAgICAgICAgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10s
IHRbJ3RvdGFsX3RpbWUnXSkpCiAgICAgICAgICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGlt
ZSddCi0gICAgICAgIHdyaXRlKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAl
CisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICAlNi4yZiBjdW11bGF0aXZl
LCAlNi4yZiBvcHRpbWFsIiAlCiAgICAgICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAv
IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpKQotICAgICAgICB3cml0ZSgiIikK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCiAKLSAgICAgICAgc2VsZi5f
cHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MpCi0gICAgICAgIHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyh3cml0ZSwg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90
ZXN0X3N0YXRpc3RpY3MoaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3By
aW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAg
ICAgICBzZWxmLl9wcmludF9kaXJlY3RvcnlfdGltaW5ncyh3cml0ZSwgZGlyZWN0b3J5X3Rlc3Rf
dGltaW5ncykKKyAgICAgICAgc2VsZi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3MoZGlyZWN0b3J5
X3Rlc3RfdGltaW5ncykKIAotICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGlj
cyhzZWxmLCB3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgorICAgIGRlZiBfcHJpbnRf
YWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6
CiAgICAgICAgICIiIlByaW50cyBhZ2dyZWdhdGUgc3RhdGlzdGljcyAoZS5nLiBtZWRpYW4sIG1l
YW4sIGV0Yy4pIGZvciBhbGwgdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6
IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgot
ICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzOiBMaXN0IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwogICAg
ICAgICAgICAgICBmb3IgYWxsIHRlc3RzLgogICAgICAgICAiIiIKQEAgLTExMTUsMjMgKzk2Mywy
MSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5
cGVbdGVzdF90eXBlXS5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZz
W3Rlc3RfdHlwZV0pCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90
aW1pbmdzKHdyaXRlLAorICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3Rp
bWluZ3MoCiAgICAgICAgICAgICAiUEVSIFRFU1QgVElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMp
OiIsCiAgICAgICAgICAgICB0aW1lc19mb3JfZHVtcF9yZW5kZXJfdHJlZSkKLSAgICAgICAgc2Vs
Zi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICBzZWxm
Ll9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAiUEVSIFRF
U1QgRElGRiBQUk9DRVNTSU5HIFRJTUVTIChzZWNvbmRzKToiLAogICAgICAgICAgICAgdGltZXNf
Zm9yX2RpZmZfcHJvY2Vzc2luZykKICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0X3R5cGVz
OgotICAgICAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHdy
aXRlLAorICAgICAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdz
KAogICAgICAgICAgICAgICAgICJQRVIgVEVTVCBUSU1FUyBCWSBURVNUIFRZUEU6ICVzIiAlIHRl
c3RfdHlwZSwKICAgICAgICAgICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlwZV0p
CiAKLSAgICBkZWYgX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhzZWxmLCB3cml0ZSwgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgZGVmIF9wcmludF9pbmRpdmlkdWFsX3Rlc3RfdGlt
ZXMoc2VsZiwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJQcmludHMgdGhlIHJ1biB0
aW1lcyBmb3Igc2xvdywgdGltZW91dCBhbmQgY3Jhc2ggdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0g
ICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dn
aW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgogICAgICAgICAg
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
LlRlc3RTdGF0cwogICAgICAgICAgICAgICBmb3IgYWxsIHRlc3RzLgogICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmb3IgdGVzdCBydW4KQEAgLTExNTMsNTMgKzk5OSw1
MiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMuYXBwZW5k
KHRlc3RfdHVwbGUpCiAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lIGluIHJlc3VsdF9zdW1tYXJ5
LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3Vs
dHNbZmlsZW5hbWVdCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVz
dWx0c1tmaWxlbmFtZV0udHlwZQogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdGVzdF9l
eHBlY3RhdGlvbnMuVElNRU9VVCBvcgogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPT0gdGVz
dF9leHBlY3RhdGlvbnMuQ1JBU0gpOgogICAgICAgICAgICAgICAgICAgICBpc190aW1lb3V0X2Ny
YXNoX29yX3Nsb3cgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hf
dGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCiAKICAgICAgICAgICAgIGlmIChub3QgaXNfdGltZW91
dF9jcmFzaF9vcl9zbG93IGFuZAotICAgICAgICAgICAgICAgIG51bV9wcmludGVkIDwgc2VsZi5f
b3B0aW9ucy5udW1fc2xvd190ZXN0c190b19sb2cpOgorICAgICAgICAgICAgICAgIG51bV9wcmlu
dGVkIDwgcHJpbnRpbmcuTlVNX1NMT1dfVEVTVFNfVE9fTE9HKToKICAgICAgICAgICAgICAgICBu
dW1fcHJpbnRlZCA9IG51bV9wcmludGVkICsgMQogICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRf
c2xvd190ZXN0cy5hcHBlbmQodGVzdF90dXBsZSkKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAg
ICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0ZSwgIiVzIHNsb3dlc3QgdGVzdHMg
dGhhdCBhcmUgbm90ICIKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiIpCisg
ICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoIiVzIHNsb3dlc3QgdGVzdHMgdGhh
dCBhcmUgbm90ICIKICAgICAgICAgICAgICJtYXJrZWQgYXMgU0xPVyBhbmQgZGlkIG5vdCB0aW1l
b3V0L2NyYXNoOiIgJQotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5udW1fc2xvd190ZXN0c190
b19sb2csIHVuZXhwZWN0ZWRfc2xvd190ZXN0cykKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAg
IHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcod3JpdGUsICJUZXN0cyBtYXJrZWQgYXMgU0xP
VzoiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMpCi0g
ICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdy
aXRlLCAiVGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAorICAgICAgICAgICAgcHJp
bnRpbmcuTlVNX1NMT1dfVEVTVFNfVE9fTE9HLCB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMpCisgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIiKQorICAgICAgICBzZWxmLl9wcmludF90
ZXN0X2xpc3RfdGltaW5nKCJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLCBzbG93X3Rlc3RzKQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKKyAgICAgICAgc2VsZi5fcHJpbnRf
dGVzdF9saXN0X3RpbWluZygiVGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMp
Ci0gICAgICAgIHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygi
IikKIAotICAgIGRlZiBfcHJpbnRfdGVzdF9saXN0X3RpbWluZyhzZWxmLCB3cml0ZSwgdGl0bGUs
IHRlc3RfbGlzdCk6CisgICAgZGVmIF9wcmludF90ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHRpdGxl
LCB0ZXN0X2xpc3QpOgogICAgICAgICAiIiJQcmludCB0aW1pbmcgaW5mbyBmb3IgZWFjaCB0ZXN0
LgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUg
aW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgotICAgICAgICAgICAgICBzeXMuc3Rk
b3V0LndyaXRlLgogICAgICAgICAgIHRpdGxlOiBzZWN0aW9uIGhlYWRpbmcKICAgICAgICAgICB0
ZXN0X2xpc3Q6IHRlc3RzIHRoYXQgZmFsbCBpbiB0aGlzIHNlY3Rpb24KICAgICAgICAgIiIiCi0g
ICAgICAgIHdyaXRlKHRpdGxlKQorICAgICAgICBpZiBzZWxmLl9wcmludGVyLmRpc2FibGVkKCdz
bG93ZXN0Jyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3RpbWluZyh0aXRsZSkKICAgICAgICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF9saXN0Ogog
ICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X3R1cGxlLmZpbGVuYW1lW2xlbigKICAgICAgICAg
ICAgICAgICBzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0KICAgICAgICAgICAg
IGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpCiAgICAgICAgICAgICB0ZXN0
X3J1bl90aW1lID0gcm91bmQodGVzdF90dXBsZS50ZXN0X3J1bl90aW1lLCAxKQotICAgICAgICAg
ICAgd3JpdGUoIiAgJXMgdG9vayAlcyBzZWNvbmRzIiAlIChmaWxlbmFtZSwgdGVzdF9ydW5fdGlt
ZSkpCisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICAlcyB0b29rICVz
IHNlY29uZHMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxl
bmFtZSwgdGVzdF9ydW5fdGltZSkpCiAKLSAgICBkZWYgX3ByaW50X2RpcmVjdG9yeV90aW1pbmdz
KHNlbGYsIHdyaXRlLCBkaXJlY3RvcnlfdGVzdF90aW1pbmdzKToKKyAgICBkZWYgX3ByaW50X2Rp
cmVjdG9yeV90aW1pbmdzKHNlbGYsIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpOgogICAgICAgICAi
IiJQcmludCB0aW1pbmcgaW5mbyBieSBkaXJlY3RvcnkgZm9yIGFueSBkaXJlY3RvcmllcyB0aGF0
CiAgICAgICAgIHRha2UgPiAxMCBzZWNvbmRzIHRvIHJ1bi4KIAogICAgICAgICBBcmdzOgotICAg
ICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2lu
Z1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KICAgICAgICAgICBk
aXJlY3RvcnlfdGVzdF90aW1pbmc6IHRpbWUgaW5mbyBmb3IgZWFjaCBkaXJlY3RvcnkKICAgICAg
ICAgIiIiCiAgICAgICAgIHRpbWluZ3MgPSBbXQpAQCAtMTIwOSwyNSArMTA1NCwyNCBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90ZXN0cykpCiAg
ICAgICAgIHRpbWluZ3Muc29ydCgpCiAKLSAgICAgICAgd3JpdGUoIlRpbWUgdG8gcHJvY2VzcyBz
bG93ZXN0IHN1YmRpcmVjdG9yaWVzOiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGlt
aW5nKCJUaW1lIHRvIHByb2Nlc3Mgc2xvd2VzdCBzdWJkaXJlY3RvcmllczoiKQogICAgICAgICBt
aW5fc2Vjb25kc190b19wcmludCA9IDEwCiAgICAgICAgIGZvciB0aW1pbmcgaW4gdGltaW5nczoK
ICAgICAgICAgICAgIGlmIHRpbWluZ1swXSA+IG1pbl9zZWNvbmRzX3RvX3ByaW50OgotICAgICAg
ICAgICAgICAgIHdyaXRlKCIgICVzIHRvb2sgJXMgc2Vjb25kcyB0byBydW4gJXMgdGVzdHMuIiAl
ICh0aW1pbmdbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgdGltaW5nWzBdLCB0aW1pbmdbMl0p
KQotICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X3RpbWluZygKKyAgICAgICAgICAgICAgICAgICAgIiAgJXMgdG9vayAlcyBzZWNvbmRzIHRvIHJ1
biAlcyB0ZXN0cy4iICUgKHRpbWluZ1sxXSwKKyAgICAgICAgICAgICAgICAgICAgdGltaW5nWzBd
LCB0aW1pbmdbMl0pKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiIikKIAot
ICAgIGRlZiBfcHJpbnRfc3RhdGlzdGljc19mb3JfdGVzdF90aW1pbmdzKHNlbGYsIHdyaXRlLCB0
aXRsZSwgdGltaW5ncyk6CisgICAgZGVmIF9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWlu
Z3Moc2VsZiwgdGl0bGUsIHRpbWluZ3MpOgogICAgICAgICAiIiJQcmludHMgdGhlIG1lZGlhbiwg
bWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSB2YWx1ZXMgaW4KICAgICAgICAgdGlt
aW5ncy4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdy
aXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKLSAgICAgICAgICAgICAgc3lz
LnN0ZG91dC53cml0ZS4KICAgICAgICAgICB0aXRsZTogVGl0bGUgZm9yIHRoZXNlIHRpbWluZ3Mu
CiAgICAgICAgICAgdGltaW5nczogQSBsaXN0IG9mIGZsb2F0cyByZXByZXNlbnRpbmcgdGltZXMu
CiAgICAgICAgICIiIgotICAgICAgICB3cml0ZSh0aXRsZSkKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90aW1pbmcodGl0bGUpCiAgICAgICAgIHRpbWluZ3Muc29ydCgpCiAKICAgICAgICAg
bnVtX3Rlc3RzID0gbGVuKHRpbWluZ3MpCkBAIC0xMjQ5LDE5ICsxMDkzLDE3IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgICAgICBzdW1fb2ZfZGV2aWF0aW9ucyA9IG1hdGgucG93KHRpbWUg
LSBtZWFuLCAyKQogCiAgICAgICAgIHN0ZF9kZXZpYXRpb24gPSBtYXRoLnNxcnQoc3VtX29mX2Rl
dmlhdGlvbnMgLyBudW1fdGVzdHMpCi0gICAgICAgIHdyaXRlKCIgIE1lZGlhbjogICAgICAgICAg
JTYuM2YiICUgbWVkaWFuKQotICAgICAgICB3cml0ZSgiICBNZWFuOiAgICAgICAgICAgICU2LjNm
IiAlIG1lYW4pCi0gICAgICAgIHdyaXRlKCIgIDkwdGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVy
Y2VudGlsZTkwKQotICAgICAgICB3cml0ZSgiICA5OXRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBl
cmNlbnRpbGU5OSkKLSAgICAgICAgd3JpdGUoIiAgU3RhbmRhcmQgZGV2OiAgICAlNi4zZiIgJSBz
dGRfZGV2aWF0aW9uKQotICAgICAgICB3cml0ZSgiIikKLQotICAgIGRlZiBfcHJpbnRfcmVzdWx0
X3N1bW1hcnkoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90aW1pbmcoIiAgTWVkaWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRpYW4pCisg
ICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgIE1lYW46ICAgICAgICAgICAgJTYu
M2YiICUgbWVhbikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90aW1pbmcoIiAgOTB0aCBw
ZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTApCisgICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdGltaW5nKCIgIDk5dGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTk5KQor
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZygiICBTdGFuZGFyZCBkZXY6ICAgICU2
LjNmIiAlIHN0ZF9kZXZpYXRpb24pCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5n
KCIiKQorCisgICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFy
eSk6CiAgICAgICAgICIiIlByaW50IGEgc2hvcnQgc3VtbWFyeSBhYm91dCBob3cgbWFueSB0ZXN0
cyBwYXNzZWQuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0
byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAgICAgICAgICAg
IHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGluZm9ybWF0aW9u
IHRvIGxvZwogICAgICAgICAiIiIKICAgICAgICAgZmFpbGVkID0gbGVuKHJlc3VsdF9zdW1tYXJ5
LmZhaWx1cmVzKQpAQCAtMTI3MywzMCArMTExNSwyOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAg
ICAgICBpZiB0b3RhbCA+IDA6CiAgICAgICAgICAgICBwY3RfcGFzc2VkID0gZmxvYXQocGFzc2Vk
KSAqIDEwMCAvIHRvdGFsCiAKLSAgICAgICAgd3JpdGUoIiIpCi0gICAgICAgIHdyaXRlKCI9PiBS
ZXN1bHRzOiAlZC8lZCB0ZXN0cyBwYXNzZWQgKCUuMWYlJSkiICUKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9hY3R1YWwoIiIpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFs
KCI9PiBSZXN1bHRzOiAlZC8lZCB0ZXN0cyBwYXNzZWQgKCUuMWYlJSkiICUKICAgICAgICAgICAg
ICAgICAgICAgIChwYXNzZWQsIHRvdGFsLCBwY3RfcGFzc2VkKSkKLSAgICAgICAgd3JpdGUoIiIp
Ci0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRlLCByZXN1bHRf
c3VtbWFyeSwKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIpCisgICAgICAg
IHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5LAogICAgICAg
ICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTk9XLCAiVGVzdHMgdG8gYmUgZml4ZWQgZm9yIHRoZSBj
dXJyZW50IHJlbGVhc2UiKQogCi0gICAgICAgIHdyaXRlKCIiKQotICAgICAgICBzZWxmLl9wcmlu
dF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIiKQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRf
c3VtbWFyeV9lbnRyeShyZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRp
b25zLkRFRkVSLAogICAgICAgICAgICAgIlRlc3RzIHdlJ2xsIGZpeCBpbiB0aGUgZnV0dXJlIGlm
IHRoZXkgZmFpbCAoREVGRVIpIikKIAotICAgICAgICB3cml0ZSgiIikKLSAgICAgICAgc2VsZi5f
cHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X2FjdHVhbCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVz
dWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVj
dGF0aW9ucy5XT05URklYLAogICAgICAgICAgICAgIlRlc3RzIHRoYXQgd2lsbCBvbmx5IGJlIGZp
eGVkIGlmIHRoZXkgY3Jhc2ggKFdPTlRGSVgpIikKIAotICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1
bW1hcnlfZW50cnkoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5LCB0aW1lbGluZSwKKyAgICBk
ZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCB0aW1l
bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRpbmcpOgogICAg
ICAgICAiIiJQcmludCBhIHN1bW1hcnkgYmxvY2sgb2YgcmVzdWx0cyBmb3IgYSBwYXJ0aWN1bGFy
IHRpbWVsaW5lIG9mIHRlc3QuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICB3cml0ZTogQSBj
YWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCi0gICAg
ICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1
bW1hcnkgdG8gcHJpbnQgcmVzdWx0cyBmb3IKICAgICAgICAgICB0aW1lbGluZTogdGhlIHRpbWVs
aW5lIHRvIHByaW50IHJlc3VsdHMgZm9yIChOT1QsIFdPTlRGSVgsIGV0Yy4pCiAgICAgICAgICAg
aGVhZGluZzogYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSB0aW1lbGluZQpAQCAtMTMwNSw3
ICsxMTQ1LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgbm90X3Bhc3NpbmcgPSAodG90
YWwgLQogICAgICAgICAgICBsZW4ocmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25b
dGVzdF9leHBlY3RhdGlvbnMuUEFTU10gJgogICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnku
dGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKSkKLSAgICAgICAgd3JpdGUoIj0+ICVzICglZCk6
IiAlIChoZWFkaW5nLCBub3RfcGFzc2luZykpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
YWN0dWFsKCI9PiAlcyAoJWQpOiIgJSAoaGVhZGluZywgbm90X3Bhc3NpbmcpKQogCiAgICAgICAg
IGZvciByZXN1bHQgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fT1JERVI6CiAg
ICAgICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKQEAgLTEzMTUs
OTQgKzExNTUsOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgZGVzYyA9IFRlc3RF
eHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHRdCiAgICAgICAg
ICAgICBpZiBub3RfcGFzc2luZyBhbmQgbGVuKHJlc3VsdHMpOgogICAgICAgICAgICAgICAgIHBj
dCA9IGxlbihyZXN1bHRzKSAqIDEwMC4wIC8gbm90X3Bhc3NpbmcKLSAgICAgICAgICAgICAgICB3
cml0ZSgiICAlNWQgJS0yNHMgKCU0LjFmJSUpIiAlIChsZW4ocmVzdWx0cyksCi0gICAgICAgICAg
ICAgICAgICAgICAgZGVzY1tsZW4ocmVzdWx0cykgIT0gMV0sIHBjdCkpCi0KLSAgICBkZWYgX3By
aW50X29uZV9saW5lX3N1bW1hcnkoc2VsZiwgdG90YWwsIGV4cGVjdGVkKToKLSAgICAgICAgIiIi
UHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRoZSB0ZXN0IHJ1biB0byBzdGRvdXQuCi0KLSAg
ICAgICAgQXJnczoKLSAgICAgICAgICB0b3RhbDogdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgot
ICAgICAgICAgIGV4cGVjdGVkOiBudW1iZXIgb2YgZXhwZWN0ZWQgcmVzdWx0cwotICAgICAgICAi
IiIKLSAgICAgICAgdW5leHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKLSAgICAgICAgaWYgdW5l
eHBlY3RlZCA9PSAwOgotICAgICAgICAgICAgcHJpbnQgIkFsbCAlZCB0ZXN0cyByYW4gYXMgZXhw
ZWN0ZWQuIiAlIGV4cGVjdGVkCi0gICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKLSAgICAgICAg
ICAgIHByaW50ICIxIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6IiAlIHVuZXhwZWN0
ZWQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICIlZCB0ZXN0cyByYW4gYXMgZXhw
ZWN0ZWQsICVkIGRpZG4ndDoiICUgKGV4cGVjdGVkLAotICAgICAgICAgICAgICAgIHVuZXhwZWN0
ZWQpCi0KLSAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVk
X3Jlc3VsdHMpOgotICAgICAgICAiIiJQcmludHMgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBpbiBh
IGh1bWFuLXJlYWRhYmxlIGZvcm0gdG8gc3Rkb3V0LiIiIgotICAgICAgICBwYXNzZXMgPSB7fQot
ICAgICAgICBmbGFreSA9IHt9Ci0gICAgICAgIHJlZ3Jlc3Npb25zID0ge30KLQotICAgICAgICBp
ZiBsZW4odW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKToKLSAgICAgICAgICAgIHByaW50ICIi
Ci0KLSAgICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0
cyddLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10u
c3BsaXQoIiAiKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNw
bGl0KCIgIikKLSAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKLSAgICAgICAgICAg
ICAgICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgICAgICAgICBfYWRkX3Rv
X2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCi0gICAgICAgICAgICAgICAgZWxpZiAn
VElNRU9VVCcgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9v
Zl9saXN0cyhwYXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnRXhwZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWwsIGJ1dCBw
YXNzZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkK
LSAgICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgotICAgICAgICAgICAgICAgICMgV2Ug
Z3JvdXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgotICAg
ICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBdLCB0ZXN0
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlz
dHMocmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQotCi0gICAgICAgIGlmIGxl
bihwYXNzZXMpOgotICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVt
cygpOgotICAgICAgICAgICAgICAgIHByaW50ICIlczogKCVkKSIgJSAoa2V5LCBsZW4odGVzdHMp
KQotICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotICAgICAgICAgICAgICAgIGZvciB0ZXN0
IGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyIgJSB0ZXN0Ci0gICAg
ICAgICAgICAgICAgcHJpbnQKLQotICAgICAgICBpZiBsZW4oZmxha3kpOgotICAgICAgICAgICAg
ZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJ
T05TCi0gICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMoKToKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNb
a2V5Lmxvd2VyKCldCi0gICAgICAgICAgICAgICAgcHJpbnQgIlVuZXhwZWN0ZWQgZmxha2luZXNz
OiAlcyAoJWQpIiAlICgKLSAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFd
LCBsZW4odGVzdHMpKQotICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotCi0gICAgICAgICAg
ICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVu
ZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXVt0ZXN0XQotICAgICAgICAgICAgICAgICAgICBhY3R1
YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikKLSAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCld
Ci0gICAgICAgICAgICAgICAgICAgIG5ld19leHBlY3RhdGlvbnNfbGlzdCA9IGxpc3Qoc2V0KGFj
dHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQotICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyA9
ICVzIiAlICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25zX2xpc3QpKQotICAgICAgICAg
ICAgICAgIHByaW50Ci0KLSAgICAgICAgaWYgbGVuKHJlZ3Jlc3Npb25zKToKLSAgICAgICAgICAg
IGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBU
SU9OUwotICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1z
KCk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNU
QVRJT05TW2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgIHByaW50ICJSZWdyZXNzaW9uczog
VW5leHBlY3RlZCAlcyA6ICglZCkiICUgKAotICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25z
W3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpCi0gICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCi0g
ICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIHBy
aW50ICIgICVzID0gJXMiICUgKHRlc3QsIGtleSkKLSAgICAgICAgICAgICAgICBwcmludAotCi0g
ICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxmLl9vcHRp
b25zLnZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAiLSIgKiA3OAorICAgICAgICAgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfYWN0dWFsKCIgICU1ZCAlLTI0cyAoJTQuMWYlJSkiICUKKyAg
ICAgICAgICAgICAgICAgICAgKGxlbihyZXN1bHRzKSwgZGVzY1tsZW4ocmVzdWx0cykgIT0gMV0s
IHBjdCkpCiAKICAgICBkZWYgX3Jlc3VsdHNfaHRtbChzZWxmLCB0ZXN0X2ZpbGVzLCBmYWlsdXJl
cywgdGl0bGU9IlRlc3QgRmFpbHVyZXMiLCBvdmVycmlkZV90aW1lPU5vbmUpOgogICAgICAgICAi
IiIKQEAgLTE0NjcsMTAgKzEyMjEsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxm
Ll9wb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUocmVzdWx0c19maWxlbmFtZSkKIAogCi1kZWYg
X2FkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUpOgotICAgIGRpY3Quc2V0ZGVm
YXVsdChrZXksIFtdKS5hcHBlbmQodmFsdWUpCi0KLQogZGVmIHJlYWRfdGVzdF9maWxlcyhmaWxl
cyk6CiAgICAgdGVzdHMgPSBbXQogICAgIGZvciBmaWxlIGluIGZpbGVzOgpAQCAtMTQ4MiwyNSAr
MTIzMiwxMSBAQCBkZWYgcmVhZF90ZXN0X2ZpbGVzKGZpbGVzKToKICAgICByZXR1cm4gdGVzdHMK
IAogCi1kZWYgY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsIGxvZ19vcHRpb24pOgotICAg
ICIiIlJldHVybnMgYSB3cml0ZSgpIGZ1bmN0aW9uIHRoYXQgd2lsbCB3cml0ZSB0aGUgc3RyaW5n
IHRvIF9sb2cuaW5mbygpCi0gICAgaWYgY29tcCB3YXMgc3BlY2lmaWVkIGluIC0tbG9nIG9yIGlm
IC0tdmVyYm9zZSBpcyB0cnVlLiBPdGhlcndpc2UgdGhlCi0gICAgbWVzc2FnZSBpcyBkcm9wcGVk
LgotCi0gICAgQXJnczoKLSAgICAgIG9wdGlvbnM6IGxpc3Qgb2YgY29tbWFuZCBsaW5lIG9wdGlv
bnMgZnJvbSBvcHRwYXJzZQotICAgICAgbG9nX29wdGlvbjogb3B0aW9uIHRvIG1hdGNoIGluIG9w
dGlvbnMubG9nIGluIG9yZGVyIGZvciB0aGUgbWVzc2FnZXMKLSAgICAgICAgICB0byBiZSBsb2dn
ZWQgKGUuZy4sICdhY3R1YWwnIG9yICdleHBlY3RlZCcpCi0gICAgIiIiCi0gICAgaWYgb3B0aW9u
cy52ZXJib3NlIG9yIGxvZ19vcHRpb24gaW4gb3B0aW9ucy5sb2cuc3BsaXQoIiwiKToKLSAgICAg
ICAgcmV0dXJuIF9sb2cuaW5mbwotICAgIHJldHVybiBsYW1iZGEgc3RyOiAxCi0KLQotZGVmIG1h
aW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKK2RlZiBydW4ocG9ydF9vYmos
IG9wdGlvbnMsIGFyZ3MpOgogICAgICIiIlJ1biB0aGUgdGVzdHMuCiAKICAgICBBcmdzOgorICAg
ICAgcG9ydF9vYmo6IFBvcnQgb2JqZWN0IGZvciBwb3J0LXNwZWNpZmljIGJlaGF2aW9yCiAgICAg
ICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAgICAgIGFy
Z3M6IGEgbGlzdCBvZiBzdWIgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdG8gdGVzdAogICAgICAgcHJp
bnRfcmVzdWx0czogd2hldGhlciBvciBub3QgdG8gbG9nIGFueXRoaW5nIHRvIHN0ZG91dC4KQEAg
LTE1MTAsMjIgKzEyNDYsMjEgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0
cz1UcnVlKToKICAgICAgICAgICBlcnJvci4KICAgICAiIiIKIAotICAgIGlmIG9wdGlvbnMuc291
cmNlczoKLSAgICAgICAgb3B0aW9ucy52ZXJib3NlID0gVHJ1ZQorICAgICMgQ29uZmlndXJlIHRo
ZSBwcmludGluZyBzdWJzeXN0ZW0gZm9yIHByaW50aW5nIG91dHB1dCwgbG9nZ2luZyBkZWJ1Zwor
ICAgICMgaW5mbywgYW5kIHRyYWNpbmcgdGVzdHMuCisKKyAgICBpZiBub3Qgb3B0aW9ucy5jaGls
ZF9wcm9jZXNzZXM6CisgICAgICAgICMgRklYTUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNz
IGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgorICAgICAgICBvcHRpb25zLmNoaWxkX3By
b2Nlc3NlcyA9IHBvcnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkKIAotICAgICMgU2V0
IHVwIG91ciBsb2dnaW5nIGZvcm1hdC4KLSAgICBtZXRlciA9IG1ldGVyZWRfc3RyZWFtLk1ldGVy
ZWRTdHJlYW0ob3B0aW9ucy52ZXJib3NlLCBzeXMuc3RkZXJyKQotICAgIGxvZ19mbXQgPSAnJSht
ZXNzYWdlKXMnCi0gICAgbG9nX2RhdGVmbXQgPSAnJXklbSVkICVIOiVNOiVTJwotICAgIGxvZ19s
ZXZlbCA9IGxvZ2dpbmcuSU5GTwotICAgIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICAgICAgbG9n
X2ZtdCA9ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKS00ZCAlKGxldmVsbmFt
ZSlzICcKLSAgICAgICAgICAgICAgICAgICclKG1lc3NhZ2UpcycpCi0gICAgICAgIGxvZ19sZXZl
bCA9IGxvZ2dpbmcuREVCVUcKLSAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZl
bCwgZm9ybWF0PWxvZ19mbXQsIGRhdGVmbXQ9bG9nX2RhdGVmbXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHJlYW09bWV0ZXIpCisgICAgcHJpbnRlciA9IHByaW50aW5nLlByaW50ZXIocG9y
dF9vYmosIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCisgICAgICAgIGJ1aWxk
Ym90X291dHB1dD1zeXMuc3Rkb3V0LAorICAgICAgICBjaGlsZF9wcm9jZXNzZXM9aW50KG9wdGlv
bnMuY2hpbGRfcHJvY2Vzc2VzKSwKKyAgICAgICAgaXNfZnVsbHlfcGFyYWxsZWw9b3B0aW9ucy5l
eHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgaWYgb3B0aW9ucy5oZWxwX3ByaW50aW5n
OgorICAgICAgICBwcmludGVyLmhlbHBfcHJpbnRpbmcoKQorICAgICAgICByZXR1cm4gMAogCi0g
ICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQogICAgIGV4
ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCiAKICAgICBpZiBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9u
OgpAQCAtMTU2MSw4ICsxMjk2LDggQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVz
dWx0cz1UcnVlKToKICAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3Vs
dHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVyCiAgICAgICAgICMgZmlsZXMgaW4gdGhlIHJl
c3VsdHMgZGlyZWN0b3J5IGFyZSBleHBsaWNpdGx5IHVzZWQgZm9yIGNyb3NzLXJ1bgogICAgICAg
ICAjIHRyYWNraW5nLgotICAgICAgICBtZXRlci51cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJlc3Vs
dHMgaW4gJXMiICUKLSAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3Rv
cnkpCisgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDbG9iYmVyaW5nIG9sZCByZXN1bHRz
IGluICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnkpCiAgICAgICAgIGxheW91dF90ZXN0c19kaXIgPSBwb3J0X29iai5sYXlvdXRfdGVz
dHNfZGlyKCkKICAgICAgICAgcG9zc2libGVfZGlycyA9IG9zLmxpc3RkaXIobGF5b3V0X3Rlc3Rz
X2RpcikKICAgICAgICAgZm9yIGRpcm5hbWUgaW4gcG9zc2libGVfZGlyczoKQEAgLTE1NzAsMTcg
KzEzMDUsNiBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgog
ICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0
c19kaXJlY3RvcnksIGRpcm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdu
b3JlX2Vycm9ycz1UcnVlKQogCi0gICAgaWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgot
ICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNp
bmcgY3B1X2NvdW50ICsgMS4KLSAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBwb3J0
X29iai5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpCi0KLSAgICB3cml0ZSA9IGNyZWF0ZV9sb2dn
aW5nX3dyaXRlcihvcHRpb25zLCAnY29uZmlnJykKLSAgICBpZiBvcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcyA9PSAxOgotICAgICAgICB3cml0ZSgiUnVubmluZyBvbmUgJXMiICUgcG9ydF9vYmouZHJp
dmVyX25hbWUpCi0gICAgZWxzZToKLSAgICAgICAgd3JpdGUoIlJ1bm5pbmcgJXMgJXNzIGluIHBh
cmFsbGVsIiAlICgKLSAgICAgICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMsIHBvcnRf
b2JqLmRyaXZlcl9uYW1lKCkpKQotCiAgICAgaWYgbm90IG9wdGlvbnMudGltZV9vdXRfbXM6CiAg
ICAgICAgIGlmIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9PSAiRGVidWciOgogICAgICAgICAgICAg
b3B0aW9ucy50aW1lX291dF9tcyA9IHN0cigyICogVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElN
RU9VVF9NUykKQEAgLTE1ODgsOCArMTMxMiwxNCBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBw
cmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0
cihUZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQogCiAgICAgb3B0aW9ucy5zbG93
X3RpbWVfb3V0X21zID0gc3RyKDUgKiBpbnQob3B0aW9ucy50aW1lX291dF9tcykpCi0gICAgd3Jp
dGUoIlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cgdGVzdCB0aW1lb3V0OiAlcyIgJQotICAgICAg
ICAgIChvcHRpb25zLnRpbWVfb3V0X21zLCBvcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpKQorICAg
IHByaW50ZXIucHJpbnRfY29uZmlnKCJSZWd1bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3QgdGlt
ZW91dDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAob3B0aW9ucy50aW1lX291dF9tcywgb3B0
aW9ucy5zbG93X3RpbWVfb3V0X21zKSkKKworICAgIGlmIGludChvcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcykgPT0gMToKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlJ1bm5pbmcgb25lICVz
IiAlIHBvcnRfb2JqLmRyaXZlcl9uYW1lKQorICAgIGVsc2U6CisgICAgICAgIHByaW50ZXIucHJp
bnRfY29uZmlnKCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJSAoCisgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLCBwb3J0X29iai5kcml2ZXJfbmFtZSgp
KSkKIAogICAgICMgSW5jbHVkZSBhbGwgdGVzdHMgaWYgbm9uZSBhcmUgc3BlY2lmaWVkLgogICAg
IG5ld19hcmdzID0gW10KQEAgLTE2MDYsOSArMTMzNiw5IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFy
Z3MsIHByaW50X3Jlc3VsdHM9VHJ1ZSk6CiAKICAgICAjIENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVj
dG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCiAgICAgcG9ydF9vYmoubWF5YmVfbWFr
ZV9kaXJlY3Rvcnkob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKLSAgICBtZXRlci51cGRhdGUo
IkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKKyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVj
dGluZyB0ZXN0cyAuLi4iKQogCi0gICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2Jq
LCBvcHRpb25zLCBtZXRlcikKKyAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydF9vYmos
IG9wdGlvbnMsIHByaW50ZXIpCiAgICAgdGVzdF9ydW5uZXIuZ2F0aGVyX2ZpbGVfcGF0aHMocGF0
aHMpCiAKICAgICBpZiBvcHRpb25zLmxpbnRfdGVzdF9maWxlczoKQEAgLTE2MTgsNDMgKzEzNDgs
NDMgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncywgcHJpbnRfcmVzdWx0cz1UcnVlKToKICAgICAg
ICAgZm9yIHBsYXRmb3JtX25hbWUgaW4gcG9ydF9vYmoudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgog
ICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBsYXRmb3JtX25hbWUs
IGlzX2RlYnVnX21vZGU9VHJ1ZSkKICAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVj
dGF0aW9ucyhwbGF0Zm9ybV9uYW1lLCBpc19kZWJ1Z19tb2RlPUZhbHNlKQotICAgICAgICBtZXRl
ci51cGRhdGUoIiIpCi0gICAgICAgIHByaW50ICgiSWYgdGhlcmUgYXJlIG5vIGZhaWwgbWVzc2Fn
ZXMsIGVycm9ycyBvciBleGNlcHRpb25zLCB0aGVuIHRoZSAiCi0gICAgICAgICAgICAibGludCBz
dWNjZWVkZWQuIikKKyAgICAgICAgcHJpbnRlci53cml0ZSgiIikKKyAgICAgICAgX2xvZy5pbmZv
KCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBtZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsICIK
KyAgICAgICAgICAgICAgICAgICJ0aGVuIHRoZSBsaW50IHN1Y2NlZWRlZC4iKQogICAgICAgICBy
ZXR1cm4gMAogCi0gICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgImNv
bmZpZyIpCi0gICAgd3JpdGUoIlVzaW5nIHBvcnQgJyVzJyIgJSBwb3J0X29iai5uYW1lKCkpCi0g
ICAgd3JpdGUoIlBsYWNpbmcgdGVzdCByZXN1bHRzIGluICVzIiAlIG9wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnkpCisgICAgcHJpbnRlci5wcmludF9jb25maWcoIlVzaW5nIHBvcnQgJyVzJyIgJSBw
b3J0X29iai5uYW1lKCkpCisgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBsYWNpbmcgdGVzdCBy
ZXN1bHRzIGluICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSkKICAgICBpZiBvcHRpb25zLm5ld19iYXNlbGluZToKLSAgICAgICAgd3JpdGUo
IlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIgJSBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkp
Ci0gICAgd3JpdGUoIlVzaW5nICVzIGJ1aWxkIiAlIG9wdGlvbnMuY29uZmlndXJhdGlvbikKKyAg
ICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkp
CisgICAgcHJpbnRlci5wcmludF9jb25maWcoIlVzaW5nICVzIGJ1aWxkIiAlIG9wdGlvbnMuY29u
ZmlndXJhdGlvbikKICAgICBpZiBvcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICB3cml0ZSgi
UGl4ZWwgdGVzdHMgZW5hYmxlZCIpCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQaXhl
bCB0ZXN0cyBlbmFibGVkIikKICAgICBlbHNlOgotICAgICAgICB3cml0ZSgiUGl4ZWwgdGVzdHMg
ZGlzYWJsZWQiKQotICAgIHdyaXRlKCIiKQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygi
UGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQorICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCIiKQogCi0g
ICAgbWV0ZXIudXBkYXRlKCJQYXJzaW5nIGV4cGVjdGF0aW9ucyAuLi4iKQorICAgIHByaW50ZXIu
cHJpbnRfdXBkYXRlKCJQYXJzaW5nIGV4cGVjdGF0aW9ucyAuLi4iKQogICAgIHRlc3RfcnVubmVy
LnBhcnNlX2V4cGVjdGF0aW9ucyhwb3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWUoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID09ICdE
ZWJ1ZycpCiAKLSAgICBtZXRlci51cGRhdGUoIkNoZWNraW5nIGJ1aWxkIC4uLiIpCisgICAgcHJp
bnRlci5wcmludF91cGRhdGUoIkNoZWNraW5nIGJ1aWxkIC4uLiIpCiAgICAgaWYgbm90IHBvcnRf
b2JqLmNoZWNrX2J1aWxkKHRlc3RfcnVubmVyLm5lZWRzX2h0dHAoKSk6CiAgICAgICAgIHJldHVy
biAtMQogCi0gICAgbWV0ZXIudXBkYXRlKCJTdGFydGluZyBoZWxwZXIgLi4uIikKKyAgICBwcmlu
dGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgaGVscGVyIC4uLiIpCiAgICAgcG9ydF9vYmouc3Rh
cnRfaGVscGVyKCkKIAogICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAo
dGhlbWVzLCBmb250cywgLi4uKSBhcmUgY29ycmVjdC4KICAgICBpZiBub3Qgb3B0aW9ucy5ub2No
ZWNrX3N5c19kZXBzOgotICAgICAgICBtZXRlci51cGRhdGUoIkNoZWNraW5nIHN5c3RlbSBkZXBl
bmRlbmNpZXMgLi4uIikKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNoZWNraW5nIHN5
c3RlbSBkZXBlbmRlbmNpZXMgLi4uIikKICAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX3N5
c19kZXBzKHRlc3RfcnVubmVyLm5lZWRzX2h0dHAoKSk6CiAgICAgICAgICAgICByZXR1cm4gLTEK
IAotICAgIG1ldGVyLnVwZGF0ZSgiUHJlcGFyaW5nIHRlc3RzIC4uLiIpCi0gICAgd3JpdGUgPSBj
cmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgImV4cGVjdGVkIikKLSAgICByZXN1bHRfc3Vt
bWFyeSA9IHRlc3RfcnVubmVyLnByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dCh3cml0ZSkK
KyAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiUHJlcGFyaW5nIHRlc3RzIC4uLiIpCisgICAgcmVz
dWx0X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5wcmVwYXJlX2xpc3RzX2FuZF9wcmludF9vdXRwdXQo
KQogCiAgICAgcG9ydF9vYmouc2V0dXBfdGVzdF9ydW4oKQogCkBAIC0xNjY0LDcgKzEzOTQsNyBA
QCBkZWYgbWFpbihvcHRpb25zLCBhcmdzLCBwcmludF9yZXN1bHRzPVRydWUpOgogICAgICAgICBp
ZiBvcHRpb25zLmZ1enp5X3BpeGVsX3Rlc3RzOgogICAgICAgICAgICAgdGVzdF9ydW5uZXIuYWRk
X3Rlc3RfdHlwZShmdXp6eV9pbWFnZV9kaWZmLkZ1enp5SW1hZ2VEaWZmKQogCi0gICAgbnVtX3Vu
ZXhwZWN0ZWRfcmVzdWx0cyA9IHRlc3RfcnVubmVyLnJ1bihyZXN1bHRfc3VtbWFyeSwgcHJpbnRf
cmVzdWx0cykKKyAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gdGVzdF9ydW5uZXIucnVuKHJl
c3VsdF9zdW1tYXJ5KQogCiAgICAgcG9ydF9vYmouc3RvcF9oZWxwZXIoKQogCkBAIC0xNjc3LDcg
KzE0MDcsOSBAQCBkZWYgX2NvbXBhdF9zaGltX2NhbGxiYWNrKG9wdGlvbiwgb3B0X3N0ciwgdmFs
dWUsIHBhcnNlcik6CiAKIAogZGVmIF9jb21wYXRfc2hpbV9vcHRpb24ob3B0aW9uX25hbWUsICoq
a3dhcmdzKToKLSAgICByZXR1cm4gb3B0cGFyc2UubWFrZV9vcHRpb24ob3B0aW9uX25hbWUsIGFj
dGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1fY29tcGF0X3NoaW1fY2FsbGJhY2ssIGhlbHA9Ikln
bm9yZWQsIGZvciBvbGQtcnVuLXdlYmtpdC10ZXN0cyBjb21wYXQgb25seS4iLCAqKmt3YXJncykK
KyAgICByZXR1cm4gb3B0cGFyc2UubWFrZV9vcHRpb24ob3B0aW9uX25hbWUsIGFjdGlvbj0iY2Fs
bGJhY2siLAorICAgICAgICBjYWxsYmFjaz1fY29tcGF0X3NoaW1fY2FsbGJhY2ssCisgICAgICAg
IGhlbHA9Iklnbm9yZWQsIGZvciBvbGQtcnVuLXdlYmtpdC10ZXN0cyBjb21wYXQgb25seS4iLCAq
Kmt3YXJncykKIAogCiBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgpAQCAtMTcwMSwyMiArMTQz
Myw3IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgICMgb2xkLXJ1bi13ZWJr
aXQtdGVzdHMgYWxzbyBhY2NlcHRzIC1jLCAtLWNvbmZpZ3VyYXRpb24gQ09ORklHVVJBVElPTi4K
ICAgICBdCiAKLSAgICBsb2dnaW5nX29wdGlvbnMgPSBbCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCItLWxvZyIsIGFjdGlvbj0ic3RvcmUiLAotICAgICAgICAgICAgZGVmYXVsdD1MT0df
REVGQVVMVF9WQUxVRSwKLSAgICAgICAgICAgIGhlbHA9KCJsb2cgdmFyaW91cyB0eXBlcyBvZiBk
YXRhLiBUaGUgYXJndW1lbnQgdmFsdWUgc2hvdWxkIGJlIGEgIgotICAgICAgICAgICAgICAgICAg
ImNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHZhbHVlcyBmcm9tOiAlcyAoZGVmYXVsdHMgdG8gIgot
ICAgICAgICAgICAgICAgICAgIi0tbG9nICVzKSIgJSAoTE9HX1ZBTFVFUywgTE9HX0RFRkFVTFRf
VkFMVUUpKSksCi0gICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIs
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJp
bmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmciKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0tc291cmNlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAgICAgICBoZWxwPSJz
aG93IGV4cGVjdGVkIHJlc3VsdCBmaWxlIHBhdGggZm9yIGVhY2ggdGVzdCAiICsKLSAgICAgICAg
ICAgICAgICAgIihpbXBsaWVzIC0tdmVyYm9zZSkiKSwKLSAgICAgICAgIyBvbGQtcnVuLXdlYmtp
dC10ZXN0cyBoYXMgYSAtLXNsb3dlc3Qgb3B0aW9uIHdoaWNoIGp1c3QgcHJpbnRzCi0gICAgICAg
ICMgdGhlIHNsb3dlc3QgMTAuCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW51bS1z
bG93LXRlc3RzLXRvLWxvZyIsIGRlZmF1bHQ9NTAsCi0gICAgICAgICAgICBoZWxwPSJOdW1iZXIg
b2Ygc2xvdyB0ZXN0cyB3aG9zZSB0aW1pbmdzIHRvIHByaW50LiIpLAotICAgIF0KKyAgICBwcmlu
dF9vcHRpb25zID0gcHJpbnRpbmcucHJpbnRfb3B0aW9ucygpCiAKICAgICAjIEZJWE1FOiBUaGVz
ZSBvcHRpb25zIHNob3VsZCBtb3ZlIG9udG8gdGhlIENocm9taXVtUG9ydC4KICAgICBjaHJvbWl1
bV9vcHRpb25zID0gWwpAQCAtMTg4OSwxMyArMTYwNiwyMyBAQCBkZWYgcGFyc2VfYXJncyhhcmdz
PU5vbmUpOgogICAgICAgICAgICAgaGVscD0oIlRoZSBidWlsZCBudW1iZXIgb2YgdGhlIGJ1aWxk
ZXIgcnVubmluZyB0aGlzIHNjcmlwdC4iKSksCiAgICAgXQogCi0gICAgb3B0aW9uX2xpc3QgPSAo
Y29uZmlndXJhdGlvbl9vcHRpb25zICsgbG9nZ2luZ19vcHRpb25zICsKKyAgICBvcHRpb25fbGlz
dCA9IChjb25maWd1cmF0aW9uX29wdGlvbnMgKyBwcmludF9vcHRpb25zICsKICAgICAgICAgICAg
ICAgICAgICBjaHJvbWl1bV9vcHRpb25zICsgcmVzdWx0c19vcHRpb25zICsgdGVzdF9vcHRpb25z
ICsKICAgICAgICAgICAgICAgICAgICBtaXNjX29wdGlvbnMgKyByZXN1bHRzX2pzb25fb3B0aW9u
cyArCiAgICAgICAgICAgICAgICAgICAgb2xkX3J1bl93ZWJraXRfdGVzdHNfY29tcGF0KQogICAg
IG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9u
X2xpc3QpCi0gICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQogCi1pZiAn
X19tYWluX18nID09IF9fbmFtZV9fOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2Vy
LnBhcnNlX2FyZ3MoYXJncykKKyAgICBpZiBvcHRpb25zLnNvdXJjZXM6CisgICAgICAgIG9wdGlv
bnMudmVyYm9zZSA9IFRydWUKKworICAgIHJldHVybiBvcHRpb25zLCBhcmdzCisKKworZGVmIG1h
aW4oKToKICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncygpCi0gICAgc3lzLmV4aXQobWFp
bihvcHRpb25zLCBhcmdzKSkKKyAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZv
cm0sIG9wdGlvbnMpCisgICAgcmV0dXJuIHJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncykKKwor
aWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCBlZGM1YWMzLi42MTIzZTgw
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTMzLDE0
ICszMywxOSBAQCBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1pbXBv
cnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLnJ1bl93ZWJraXRfdGVzdHMgYXMgcnVuX3dlYmtpdF90
ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCiAKIGZyb20gd2Via2l0cHku
dGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiAKIAotZGVmIHBhc3NpbmdfcnVuKGFyZ3MpOgor
ZGVmIHBhc3NpbmdfcnVuKGFyZ3MsIHBvcnRfb2JqPU5vbmUsIGxvZ2dpbmdfaW5jbHVkZWQ9RmFs
c2UpOgorICAgIGlmIG5vdCBsb2dnaW5nX2luY2x1ZGVkOgorICAgICAgICBhcmdzLmV4dGVuZChb
Jy0tcHJpbnQnLCAnbm90aGluZyddKQogICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rl
c3RzLnBhcnNlX2FyZ3MoYXJncykKLSAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLm1haW4ob3B0
aW9ucywgYXJncywgRmFsc2UpCisgICAgaWYgcG9ydF9vYmogaXMgTm9uZToKKyAgICAgICAgcG9y
dF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAgIHJlcyA9IHJ1
bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQogICAgIHJldHVybiBy
ZXMgPT0gMAogCiAKQEAgLTU1LDcgKzYwLDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwv
YXJ0aWNsZS1lbGVtZW50Lmh0bWwnXSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5n
X3J1bihbJy0tcGxhdGZvcm0nLCAndGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJy0tbG9nJywgJ3VuZXhwZWN0ZWQnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICctLXByaW50JywgJ3VuZXhwZWN0ZWQnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkpCiAKIApAQCAtNjUsNyArNzAs
NyBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1v
Y2tfcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lID0gbGFtYmRhIG5hbWU6IG5hbWUKICAgICAg
ICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAKLSAgICAg
ICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBv
cHRpb25zPU1vY2soKSwgbWV0ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIgPSBydW5fd2Via2l0
X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9wdGlvbnM9TW9jaygpLCBwcmludGVy
PU1vY2soKSkKICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IHUiIiI8aHRtbD4KICAgPGhlYWQ+CiAg
ICAgPHRpdGxlPkxheW91dCBUZXN0IFJlc3VsdHMgKHRpbWUpPC90aXRsZT4K
</data>
<flag name="review"
          id="38503"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>